fluid-music / cybr

Fluid Music Audio Server
GNU Affero General Public License v3.0
6 stars 1 forks source link

crash when scanning FL Studio VST #2

Open CharlesHolbrow opened 3 years ago

CharlesHolbrow commented 3 years ago

The FL Studio VST Plugin crashes intermitently when it is scanned.

However, both reaper and waveform can scan and load it okay.

Leads:

Unhandled Vst Callback: 42

line 1708 of JUCE_VstPluginFormat.cpp: DBG ("*** Unhandled VST Callback: " + String ((int) opcode));

this prints out `"*** Unhandled VST Callback: 42" a whole bunch of times,

Which corresponds to Vst2::audioMasterUpdateDisplay, which I believe can be safely ignored.

AFAICT, enum AudioMasterOpcodesX plugin-to-host opcodes starts at 6

TDelayUnloading is implemented in two places

A message like this one prints out many times when scanning FL Studio.

objc[16532]: Class TDelayUnloading is implemented in both /Library/Audio/Plug-Ins/VST/FL Studio VSTi.vst/Contents/MacOS/vstplugin (0x10f5a4900) and /Applications/FL Studio 20.app/Contents/Resources/FL/Plugins/Fruity/Effects/Fruity Limiter/Fruity Limiter_x64.dylib (0x122b72d18). One of the two will be used. Which one is undefined.

However, instantiating FL Studio in Reaper also prints this message

Compiling with ASAN

This at least causes some useful output (and also adds the File to the Dead Mans Plugin)

Scanning: "/Library/Audio/Plug-Ins/VST/FL Studio VSTi.vst"
Attempting to load VST: /Library/Audio/Plug-Ins/VST/FL Studio VSTi.vst
UseFastMM 1
IPP function not found: ippiMul_8u_C4IRSfs
objc[18889]: Class TDelayUnloading is implemented in both /Library/Audio/Plug-Ins/VST/FL Studio VSTi.vst/Contents/MacOS/vstplugin (0x125f30900) and /Library/Application Support/Image-Line/Shared/libQuickFontCachev2_x64.dylib (0x1289adb40). One of the two will be used. Which one is undefined.
IPP function not found: ippiMul_8u_C4IRSfs
objc[18889]: Class TDelayUnloading is implemented in both /Library/Audio/Plug-Ins/VST/FL Studio VSTi.vst/Contents/MacOS/vstplugin (0x125f30900) and /Library/Application Support/Image-Line/Shared/ILTools_x64.dylib (0x128ccf490). One of the two will be used. Which one is undefined.
IPP function not found: ippiMul_8u_C4IRSfs
Creating VST instance: FL Studio VSTi
objc[18889]: Class TDelayUnloading is implemented in both /Library/Audio/Plug-Ins/VST/FL Studio VSTi.vst/Contents/MacOS/vstplugin (0x125f30900) and /Applications/FL Studio 20.app/Contents/Libs/FLEngine_x64.dylib (0x12f602090). One of the two will be used. Which one is undefined.
IPP function not found: ippiMul_8u_C4IRSfs
=================================================================
==18889==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6250005fe900 at pc 0x00011b62b5d9 bp 0x7ffedfff8220 sp 0x7ffedfff79e0
WRITE of size 48830 at 0x6250005fe900 thread T0
    #0 0x11b62b5d8 in wrap_readdir+0x178 (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0x2f5d8)
    #1 0x12e9068ec  (FLEngine_x64.dylib:x86_64+0xbb8ec)
    #2 0x12ec07672  (FLEngine_x64.dylib:x86_64+0x3bc672)
    #3 0x12e9d7675  (FLEngine_x64.dylib:x86_64+0x18c675)
    #4 0x12fe7d255  (FLEngine_x64.dylib):x86_64+0x1632255)
    #5 0x12e84d3f0  (FLEngine_x64.dylib:x86_64+0x23f0)
    #6 0x110877bc4 in juce::VSTPluginInstance::create(juce::ReferenceCountedObjectPtr<juce::ModuleHandle> const&, double, int) juce_VSTPluginFormat.cpp:1142
    #7 0x110876795 in juce::VSTPluginFormat::createPluginInstance(juce::PluginDescription const&, double, int, std::__1::function<void (std::__1::unique_ptr<juce::AudioPluginInstance, std::__1::default_delete<juce::AudioPluginInstance> >, juce::String const&)>) juce_VSTPluginFormat.cpp:3547
    #8 0x110816529 in juce::AudioPluginFormat::createInstanceFromDescription(juce::PluginDescription const&, double, int, juce::String&) juce_AudioPluginFormat.cpp:65
    #9 0x110815b7a in juce::AudioPluginFormat::createInstanceFromDescription(juce::PluginDescription const&, double, int) juce_AudioPluginFormat.cpp:37
    #10 0x110874984 in juce::createAndUpdateDesc(juce::VSTPluginFormat&, juce::PluginDescription&) juce_VSTPluginFormat.cpp:3458
    #11 0x110873d3f in juce::VSTPluginFormat::findAllTypesForFile(juce::OwnedArray<juce::PluginDescription, juce::DummyCriticalSection>&, juce::String const&) juce_VSTPluginFormat.cpp:3487
    #12 0x11453e6b8 in tracktion_engine::CustomScanner::findPluginTypesFor(juce::AudioPluginFormat&, juce::OwnedArray<juce::PluginDescription, juce::DummyCriticalSection>&, juce::String const&) tracktion_PluginManager.cpp:353
    #13 0x11096780b in juce::KnownPluginList::scanAndAddFile(juce::String const&, bool, juce::OwnedArray<juce::PluginDescription, juce::DummyCriticalSection>&, juce::AudioPluginFormat&) juce_KnownPluginList.cpp:186
    #14 0x110973eb4 in juce::PluginDirectoryScanner::scanNextFile(bool, juce::String&) juce_PluginDirectoryScanner.cpp:104
    #15 0x10fe5a315 in scanVst2(tracktion_engine::Engine&) cybr_helpers.cpp:351
    #16 0x10fd3afcc in auto CLIApp::onRunning(juce::ArgumentList)::$_5::operator()<juce::ArgumentList const>(juce::ArgumentList const&) const CliApp.cpp:244
    #17 0x10fd3a8e6 in decltype(std::__1::forward<CLIApp::onRunning(juce::ArgumentList)::$_5&>(fp)(std::__1::forward<juce::ArgumentList const&>(fp0))) std::__1::__invoke<CLIApp::onRunning(juce::ArgumentList)::$_5&, juce::ArgumentList const&>(CLIApp::onRunning(juce::ArgumentList)::$_5&, juce::ArgumentList const&) type_traits:3545
    #18 0x10fd3a6a6 in void std::__1::__invoke_void_return_wrapper<void>::__call<CLIApp::onRunning(juce::ArgumentList)::$_5&, juce::ArgumentList const&>(CLIApp::onRunning(juce::ArgumentList)::$_5&, juce::ArgumentList const&) __functional_base:348
    #19 0x10fd3a56c in std::__1::__function::__alloc_func<CLIApp::onRunning(juce::ArgumentList)::$_5, std::__1::allocator<CLIApp::onRunning(juce::ArgumentList)::$_5>, void (juce::ArgumentList const&)>::operator()(juce::ArgumentList const&) functional:1546
    #20 0x10fd33d27 in std::__1::__function::__func<CLIApp::onRunning(juce::ArgumentList)::$_5, std::__1::allocator<CLIApp::onRunning(juce::ArgumentList)::$_5>, void (juce::ArgumentList const&)>::operator()(juce::ArgumentList const&) functional:1720
    #21 0x10fe29d3b in std::__1::__function::__value_func<void (juce::ArgumentList const&)>::operator()(juce::ArgumentList const&) const functional:1873
    #22 0x10fcebd57 in std::__1::function<void (juce::ArgumentList const&)>::operator()(juce::ArgumentList const&) const functional:2548
    #23 0x10fce789d in CLIApp::onRunning(juce::ArgumentList) CliApp.cpp:686
    #24 0x10fd0fe50 in CLIApp::initialise(juce::String const&)::$_0::operator()() const CliApp.cpp:132
    #25 0x10fd0fc59 in decltype(std::__1::forward<CLIApp::initialise(juce::String const&)::$_0&>(fp)()) std::__1::__invoke<CLIApp::initialise(juce::String const&)::$_0&>(CLIApp::initialise(juce::String const&)::$_0&) type_traits:3545
    #26 0x10fd0faa9 in void std::__1::__invoke_void_return_wrapper<void>::__call<CLIApp::initialise(juce::String const&)::$_0&>(CLIApp::initialise(juce::String const&)::$_0&) __functional_base:348
    #27 0x10fd0f9ff in std::__1::__function::__alloc_func<CLIApp::initialise(juce::String const&)::$_0, std::__1::allocator<CLIApp::initialise(juce::String const&)::$_0>, void ()>::operator()() functional:1546
    #28 0x10fd091ba in std::__1::__function::__func<CLIApp::initialise(juce::String const&)::$_0, std::__1::allocator<CLIApp::initialise(juce::String const&)::$_0>, void ()>::operator()() functional:1720
    #29 0x11021971e in std::__1::__function::__value_func<void ()>::operator()() const functional:1873
    #30 0x11021920a in std::__1::function<void ()>::operator()() const functional:2548
    #31 0x11173b7ea in juce::MessageManager::callAsync(std::__1::function<void ()>)::AsyncCallInvoker::messageCallback() juce_MessageManager.cpp:192
    #32 0x111763c11 in juce::MessageQueue::deliverNextMessage() juce_osx_MessageQueue.h:82
    #33 0x11176393d in juce::MessageQueue::runLoopCallback() juce_osx_MessageQueue.h:93
    #34 0x1117634f4 in juce::MessageQueue::runLoopSourceCallback(void*) juce_osx_MessageQueue.h:101
    #35 0x7fff324e8831 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__+0x10 (CoreFoundation:x86_64h+0x84831)
    #36 0x7fff324e87d0 in __CFRunLoopDoSource0+0x66 (CoreFoundation:x86_64h+0x847d0)
    #37 0x7fff324e85ea in __CFRunLoopDoSources0+0xd0 (CoreFoundation:x86_64h+0x845ea)
    #38 0x7fff324e7319 in __CFRunLoopRun+0x39e (CoreFoundation:x86_64h+0x83319)
    #39 0x7fff324e691d in CFRunLoopRunSpecific+0x1cd (CoreFoundation:x86_64h+0x8291d)
    #40 0x7fff31112abc in RunCurrentEventLoopInMode+0x123 (HIToolbox:x86_64+0x2fabc)
    #41 0x7fff311126f3 in ReceiveNextEventCommon+0x166 (HIToolbox:x86_64+0x2f6f3)
    #42 0x7fff31112578 in _BlockUntilNextEventMatchingListInModeWithFilter+0x3f (HIToolbox:x86_64+0x2f578)
    #43 0x7fff2f759038 in _DPSNextEvent+0x372 (AppKit:x86_64+0x41038)
    #44 0x7fff2f75787f in -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]+0x547 (AppKit:x86_64+0x3f87f)
    #45 0x7fff2f74958d in -[NSApplication run]+0x291 (AppKit:x86_64+0x3158d)
    #46 0x111710f0f in juce::MessageManager::runDispatchLoop() juce_mac_MessageManager.mm:360
    #47 0x111710c0b in juce::JUCEApplicationBase::main() juce_ApplicationBase.cpp:262
    #48 0x1117107dd in juce::JUCEApplicationBase::main(int, char const**) juce_ApplicationBase.cpp:240
    #49 0x10fcec1d1 in main CliApp.cpp:700
    #50 0x7fff6c588cc8 in start+0x0 (libdyld.dylib:x86_64+0x1acc8)

0x6250005fe900 is located 0 bytes to the right of 8192-byte region [0x6250005fc900,0x6250005fe900)
allocated by thread T0 here:
    #0 0x11b64517d in wrap_malloc+0x9d (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0x4917d)
    #1 0x7fff6c6526c2 in _readdir_unlocked+0x6b (libsystem_c.dylib:x86_64+0x7a6c2)
    #2 0x7fff6c6527a1 in readdir+0x22 (libsystem_c.dylib:x86_64+0x7a7a1)
    #3 0x11b62b4a3 in wrap_readdir+0x43 (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0x2f4a3)
    #4 0x12e9068ec  (FLEngine_x64.dylib:x86_64+0xbb8ec)
    #5 0x12ec07672  (FLEngine_x64.dylib:x86_64+0x3bc672)
    #6 0x12e9d7675  (FLEngine_x64.dylib:x86_64+0x18c675)
    #7 0x12fe7d255  (FLEngine_x64.dylib):x86_64+0x1632255)
    #8 0x12e84d3f0  (FLEngine_x64.dylib:x86_64+0x23f0)
    #9 0x110877bc4 in juce::VSTPluginInstance::create(juce::ReferenceCountedObjectPtr<juce::ModuleHandle> const&, double, int) juce_VSTPluginFormat.cpp:1142
    #10 0x110876795 in juce::VSTPluginFormat::createPluginInstance(juce::PluginDescription const&, double, int, std::__1::function<void (std::__1::unique_ptr<juce::AudioPluginInstance, std::__1::default_delete<juce::AudioPluginInstance> >, juce::String const&)>) juce_VSTPluginFormat.cpp:3547
    #11 0x110816529 in juce::AudioPluginFormat::createInstanceFromDescription(juce::PluginDescription const&, double, int, juce::String&) juce_AudioPluginFormat.cpp:65
    #12 0x110815b7a in juce::AudioPluginFormat::createInstanceFromDescription(juce::PluginDescription const&, double, int) juce_AudioPluginFormat.cpp:37
    #13 0x110874984 in juce::createAndUpdateDesc(juce::VSTPluginFormat&, juce::PluginDescription&) juce_VSTPluginFormat.cpp:3458
    #14 0x110873d3f in juce::VSTPluginFormat::findAllTypesForFile(juce::OwnedArray<juce::PluginDescription, juce::DummyCriticalSection>&, juce::String const&) juce_VSTPluginFormat.cpp:3487
    #15 0x11453e6b8 in tracktion_engine::CustomScanner::findPluginTypesFor(juce::AudioPluginFormat&, juce::OwnedArray<juce::PluginDescription, juce::DummyCriticalSection>&, juce::String const&) tracktion_PluginManager.cpp:353
    #16 0x11096780b in juce::KnownPluginList::scanAndAddFile(juce::String const&, bool, juce::OwnedArray<juce::PluginDescription, juce::DummyCriticalSection>&, juce::AudioPluginFormat&) juce_KnownPluginList.cpp:186
    #17 0x110973eb4 in juce::PluginDirectoryScanner::scanNextFile(bool, juce::String&) juce_PluginDirectoryScanner.cpp:104
    #18 0x10fe5a315 in scanVst2(tracktion_engine::Engine&) cybr_helpers.cpp:351
    #19 0x10fd3afcc in auto CLIApp::onRunning(juce::ArgumentList)::$_5::operator()<juce::ArgumentList const>(juce::ArgumentList const&) const CliApp.cpp:244
    #20 0x10fd3a8e6 in decltype(std::__1::forward<CLIApp::onRunning(juce::ArgumentList)::$_5&>(fp)(std::__1::forward<juce::ArgumentList const&>(fp0))) std::__1::__invoke<CLIApp::onRunning(juce::ArgumentList)::$_5&, juce::ArgumentList const&>(CLIApp::onRunning(juce::ArgumentList)::$_5&, juce::ArgumentList const&) type_traits:3545
    #21 0x10fd3a6a6 in void std::__1::__invoke_void_return_wrapper<void>::__call<CLIApp::onRunning(juce::ArgumentList)::$_5&, juce::ArgumentList const&>(CLIApp::onRunning(juce::ArgumentList)::$_5&, juce::ArgumentList const&) __functional_base:348
    #22 0x10fd3a56c in std::__1::__function::__alloc_func<CLIApp::onRunning(juce::ArgumentList)::$_5, std::__1::allocator<CLIApp::onRunning(juce::ArgumentList)::$_5>, void (juce::ArgumentList const&)>::operator()(juce::ArgumentList const&) functional:1546
    #23 0x10fd33d27 in std::__1::__function::__func<CLIApp::onRunning(juce::ArgumentList)::$_5, std::__1::allocator<CLIApp::onRunning(juce::ArgumentList)::$_5>, void (juce::ArgumentList const&)>::operator()(juce::ArgumentList const&) functional:1720
    #24 0x10fe29d3b in std::__1::__function::__value_func<void (juce::ArgumentList const&)>::operator()(juce::ArgumentList const&) const functional:1873
    #25 0x10fcebd57 in std::__1::function<void (juce::ArgumentList const&)>::operator()(juce::ArgumentList const&) const functional:2548
    #26 0x10fce789d in CLIApp::onRunning(juce::ArgumentList) CliApp.cpp:686
    #27 0x10fd0fe50 in CLIApp::initialise(juce::String const&)::$_0::operator()() const CliApp.cpp:132
    #28 0x10fd0fc59 in decltype(std::__1::forward<CLIApp::initialise(juce::String const&)::$_0&>(fp)()) std::__1::__invoke<CLIApp::initialise(juce::String const&)::$_0&>(CLIApp::initialise(juce::String const&)::$_0&) type_traits:3545
    #29 0x10fd0faa9 in void std::__1::__invoke_void_return_wrapper<void>::__call<CLIApp::initialise(juce::String const&)::$_0&>(CLIApp::initialise(juce::String const&)::$_0&) __functional_base:348

SUMMARY: AddressSanitizer: heap-buffer-overflow (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0x2f5d8) in wrap_readdir+0x178
Shadow bytes around the buggy address:
  0x1c4a000bfcd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1c4a000bfce0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1c4a000bfcf0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1c4a000bfd00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1c4a000bfd10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x1c4a000bfd20:[fa]fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x1c4a000bfd30: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x1c4a000bfd40: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x1c4a000bfd50: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x1c4a000bfd60: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x1c4a000bfd70: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==18889==ABORTING
Abort trap: 6
CharlesHolbrow commented 3 years ago

I was able to scan and run successfully after compiling cybr for Release. Resulting in the following plugin in Settings.xml:

      <PLUGIN name="FL Studio VSTi" descriptiveName="FL Studio VSTi (multi)"
              format="VST" category="Synth" manufacturer="Image-Line" version="1.0.0.0"
              file="/Library/Audio/Plug-Ins/VST/FL Studio VSTi.vst" uid="464c3136"
              isInstrument="1" fileTime="17868e0f2e0" infoUpdateTime="1793a9393f1"
              numInputs="0" numOutputs="32" isShell="0"/>

I generated a fluid vst2 "FL Studio VSTi" report here:

module.exports = {
  pluginName: "FL Studio VSTi",
  pluginType: "VST2",
  plugin: {
  "shortName10": "FL Studio VSTi",
  "name": "FL Studio VSTi",
  "vendor": "Image-Line",
  "isSynth": true,
  "idString": "VST-FL Studio VSTi-3e0e0d27-464c3136",
  "automatableParamsCount": 3,
  "pluginType": "vst",
  "externalPluginFormat": "VST",
  "uidHex": "464c3136",
  "uidInt": 1179398454,
  "tracktionXmlStateBase64": "Q2NuSwAAAABGQkNoAAAAAUZMMTYAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4fr//38BAQAAAAAAAAABAAAARGVmYXVsdAAAAAAAAAAAAAAAAAAAAAAAAQAAAKQCAAAAAAAAAQAAAAACAAAAAAAA//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8CAAAAQAAAAAAAAAD/////////////////////////////////////////////////////////////////////////////////////AwAAAEAAAAAAAAAA/////////////////////////////////////////////////////////////////////////////////////wAAAAAAAAAA",
  "pluginState": "Q2NuSwAAAABGQkNoAAAAAUZMMTYAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4fr//38BAQAAAAAAAAABAAAARGVmYXVsdAAAAAAAAAAAAAAAAAAAAAAAAQAAAKQCAAAAAAAAAQAAAAACAAAAAAAA//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8CAAAAQAAAAAAAAAD/////////////////////////////////////////////////////////////////////////////////////AwAAAEAAAAAAAAAA/////////////////////////////////////////////////////////////////////////////////////wAAAAAAAAAA",
  "tracktionXml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n\r\n<PLUGIN type=\"vst\" uid=\"464c3136\" filename=\"/Library/Audio/Plug-Ins/VST/FL Studio VSTi.vst\"\r\n        name=\"FL Studio VSTi\" manufacturer=\"Image-Line\" windowLocked=\"1\"\r\n        id=\"1080\" enabled=\"1\" dry=\"0.0\" wet=\"1.0\" programNum=\"0\" state=\"897.CMlaKA....fQBMDZ....AXDSwXC...P.....A.............................................................................................................................................................................f.gq++++W.A.........P.....DUlYgUGazA......................A....Pp.........A.....f.........++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++u......A........v+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++C.....D.........+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++C..........\"\r\n        base64:layout=\"1045.LETVOUEU..P.A7TUTAUUTME..D.HBU0T.Df.o4FYkgG.ATP......vVX48VczAP.CTvP..fPUME.AHPZtQVY3AP.EDP.....rEVduUGc.Dv.ELD..HTUSAP.BjlajUFd.DPAAH.....agk2a0QG.ALPACA..BU0T.Df.o4FYkgG.ATP.C....vVX48VczAP.CTvP..fPUME.AHPZtQVY3AP.ED.A....rEVduUGc.Dv.ELD..HTUSAP.BjlajUFd.DPAAT.....agk2a0QG.ALPACA..BU0T.Df.o4FYkgG.ATP.F....vVX48VczAP.CTvP..fPUME.AHPZtQVY3AP.EDvA....rEVduUGc.Dv.ELD..HTUSAP.BjlajUFd.DPAAf.....agk2a0QG.ALPACA..BU0T.Df.o4FYkgG.ATP.I....vVX48VczAP.CTvP..fPUME.AHPZtQVY3AP.EDfB....rEVduUGc.Dv.ELD..HTUSAP.BjlajUFd.DPAAr.....agk2a0QG.ALPACA..BU0T.Df.o4FYkgG.ATP.L....vVX48VczAP.CTvP..fPUME.AHPZtQVY3AP.EDPC....rEVduUGc.Dv.ELD..HTUSAP.BjlajUFd.DPAA3.....agk2a0QG.ALPACA..BU0T.Df.o4FYkgG.ATP.O....vVX48VczAP.CTvP..fPUME.AHPZtQVY3AP.ED.D....rEVduUGc.Dv.ELD..HTUSAP.BjlajUFd.DPAADA....agk2a0QG.ALPACA..BU0T.Df.o4FYkgG.ATP.R....vVX48VczAP.CTvP..fPUME.AHPZtQVY3AP.EDvD....rEVduUGc.Dv.ELD..HTUSAP.BjlajUFd.DPAAPA....agk2a0QG.ALPACA..BU0T.Df.o4FYkgG.ATP.U....vVX48VczAP.CTvP..fPUME.AHPZtQVY3AP.EDfE....rEVduUGc.Dv.ELD..HTUSAP.BjlajUFd.DPAAbA....agk2a0QG.ALPACA..BU0T.Df.o4FYkgG.ATP.X....vVX48VczAP.CTvP..fPUME.AHPZtQVY3AP.EDPF....rEVduUGc.Dv.ELD..HTUSAP.BjlajUFd.DPAAnA....agk2a0QG.ALPACA..BU0T.Df.o4FYkgG.ATP.a....vVX48VczAP.CTvP..fPUME.AHPZtQVY3AP.ED.G....rEVduUGc.Dv.ELD..HTUSAP.BjlajUFd.DPAAzA....agk2a0QG.ALPACA..BU0T.Df.o4FYkgG.ATP.d....vVX48VczAP.CTvP..fPUME.AHPZtQVY3AP.EDvG....rEVduUGc.Dv.ELD...\">\r\n  <MACROPARAMETERS id=\"1081\"/>\r\n  <MODIFIERASSIGNMENTS/>\r\n</PLUGIN>\r\n",
  "currentProgramStateInfo": "Q2NuSwAAAABGUENoAAAAAUZMMTYAAAABAAAAAURlZmF1bHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALh+v//fwEBAAAAAAAAAAEAAABEZWZhdWx0AAAAAAAAAAAAAAAAAAAAAAABAAAApAIAAAAAAAABAAAAAAIAAAAAAAD//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wIAAABAAAAAAAAAAP////////////////////////////////////////////////////////////////////////////////////8DAAAAQAAAAAAAAAD/////////////////////////////////////////////////////////////////////////////////////AAAAAAAAAAA=",
  "currentStateInfo": "Q2NuSwAAAABGQkNoAAAAAUZMMTYAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4fr//38BAQAAAAAAAAABAAAARGVmYXVsdAAAAAAAAAAAAAAAAAAAAAAAAQAAAKQCAAAAAAAAAQAAAAACAAAAAAAA//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8CAAAAQAAAAAAAAAD/////////////////////////////////////////////////////////////////////////////////////AwAAAEAAAAAAAAAA/////////////////////////////////////////////////////////////////////////////////////wAAAAAAAAAA",
  "numAudioInputChannels": 0,
  "numAudioOutputChannels": 32,
  "numPrograms": 1,
  "currentProgramIndex": 0,
  "currentProgramName": "Default",
  "fxb": "Q2NuSwAAAABGQkNoAAAAAUZMMTYAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4fr//38BAQAAAAAAAAABAAAARGVmYXVsdAAAAAAAAAAAAAAAAAAAAAAAAQAAAKQCAAAAAAAAAQAAAAACAAAAAAAA//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8CAAAAQAAAAAAAAAD/////////////////////////////////////////////////////////////////////////////////////AwAAAEAAAAAAAAAA/////////////////////////////////////////////////////////////////////////////////////wAAAAAAAAAA",
  "fxp": "Q2NuSwAAAABGUENoAAAAAUZMMTYAAAABAAAAAURlZmF1bHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALh+v//fwEBAAAAAAAAAAEAAABEZWZhdWx0AAAAAAAAAAAAAAAAAAAAAAABAAAApAIAAAAAAAABAAAAAAIAAAAAAAD//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wIAAABAAAAAAAAAAP////////////////////////////////////////////////////////////////////////////////////8DAAAAQAAAAAAAAAD/////////////////////////////////////////////////////////////////////////////////////AAAAAAAAAAA=",
  "vst2State": "+v//fwEBAAAAAAAAAAEAAABEZWZhdWx0AAAAAAAAAAAAAAAAAAAAAAABAAAApAIAAAAAAAABAAAAAAIAAAAAAAD//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wIAAABAAAAAAAAAAP////////////////////////////////////////////////////////////////////////////////////8DAAAAQAAAAAAAAAD/////////////////////////////////////////////////////////////////////////////////////AAAAAAAAAAA=",
  "vst2Flags": 305
},
  params: [

{"name":"Dry Level","tracktionIndex":0,"defaultValue":0,"currentExplicitValue":0,"currentNormalizedValue":0,"currentValue":0,"currentValueAsStringWithLabel":"-INF dB","currentValueAsString":"-INF dB","currentBaseValue":0,"isDiscrete":false,"isAutomationActive":false,"isActive":true,"hasAutomationPoints":false,"hasLabels":false,"currentLabel":"","inputValueRange":[0,1],"inputSteps":[0,0.0357142873108387,0.0714285746216774,0.1071428656578064,0.1428571492433548,0.1785714328289032,0.2142857313156128,0.25,0.2857142984867096,0.3214285969734192,0.3571428656578064,0.392857164144516,0.4285714626312256,0.4642857313156128,0.5,0.535714328289032,0.5714285969734192,0.6071428656578064,0.6428571939468384,0.6785714626312256,0.7142857313156128,0.7500000596046448,0.785714328289032,0.8214285969734192,0.8571429252624512,0.8928571939468384,0.9285714626312256,0.9642857313156128,1],"outputValueStepsAsStrings":["-INF dB","-28.9 dB","-22.9 dB","-19.4 dB","-16.9 dB","-15.0 dB","-13.4 dB","-12.0 dB","-10.9 dB","-9.9 dB","-8.9 dB","-8.1 dB","-7.4 dB","-6.7 dB","-6.0 dB","-5.4 dB","-4.9 dB","-4.3 dB","-3.8 dB","-3.4 dB","-2.9 dB","-2.5 dB","-2.1 dB","-1.7 dB","-1.3 dB","-1.0 dB","-0.6 dB","-0.3 dB","+0.0 dB"],"outputValueRangeAsStrings":["-INF dB","+0.0 dB"],"outputValueRangeAsStringsWithLabels":["-INF dB","+0.0 dB"]},
{"name":"Wet Level","tracktionIndex":1,"defaultValue":1,"currentExplicitValue":1,"currentNormalizedValue":1,"currentValue":1,"currentValueAsStringWithLabel":"+0.0 dB","currentValueAsString":"+0.0 dB","currentBaseValue":1,"isDiscrete":false,"isAutomationActive":false,"isActive":true,"hasAutomationPoints":false,"hasLabels":false,"currentLabel":"","inputValueRange":[0,1],"inputSteps":[0,0.0357142873108387,0.0714285746216774,0.1071428656578064,0.1428571492433548,0.1785714328289032,0.2142857313156128,0.25,0.2857142984867096,0.3214285969734192,0.3571428656578064,0.392857164144516,0.4285714626312256,0.4642857313156128,0.5,0.535714328289032,0.5714285969734192,0.6071428656578064,0.6428571939468384,0.6785714626312256,0.7142857313156128,0.7500000596046448,0.785714328289032,0.8214285969734192,0.8571429252624512,0.8928571939468384,0.9285714626312256,0.9642857313156128,1],"outputValueStepsAsStrings":["-INF dB","-28.9 dB","-22.9 dB","-19.4 dB","-16.9 dB","-15.0 dB","-13.4 dB","-12.0 dB","-10.9 dB","-9.9 dB","-8.9 dB","-8.1 dB","-7.4 dB","-6.7 dB","-6.0 dB","-5.4 dB","-4.9 dB","-4.3 dB","-3.8 dB","-3.4 dB","-2.9 dB","-2.5 dB","-2.1 dB","-1.7 dB","-1.3 dB","-1.0 dB","-0.6 dB","-0.3 dB","+0.0 dB"],"outputValueRangeAsStrings":["-INF dB","+0.0 dB"],"outputValueRangeAsStringsWithLabels":["-INF dB","+0.0 dB"]},
{"name":"Visible","tracktionIndex":2,"defaultValue":0,"currentExplicitValue":0,"currentNormalizedValue":0,"currentValue":0,"currentValueAsStringWithLabel":"","currentValueAsString":"","currentBaseValue":0,"isDiscrete":false,"isAutomationActive":false,"isActive":true,"hasAutomationPoints":false,"hasLabels":false,"currentLabel":"","inputValueRange":[0,1],"inputSteps":[0,0.0357142873108387,0.0714285746216774,0.1071428656578064,0.1428571492433548,0.1785714328289032,0.2142857313156128,0.25,0.2857142984867096,0.3214285969734192,0.3571428656578064,0.392857164144516,0.4285714626312256,0.4642857313156128,0.5,0.535714328289032,0.5714285969734192,0.6071428656578064,0.6428571939468384,0.6785714626312256,0.7142857313156128,0.7500000596046448,0.785714328289032,0.8214285969734192,0.8571429252624512,0.8928571939468384,0.9285714626312256,0.9642857313156128,1],"outputValueStepsAsStrings":["","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"outputValueRangeAsStrings":["",""],"outputValueRangeAsStringsWithLabels":["",""]},

  ],
};