pull/1/head
asb2m10 10 years ago
parent 596afe42fd
commit 6265606c6f
  1. 6
      Builds/Linux/Makefile
  2. 28
      Builds/MacOSX/Dexed.xcodeproj/project.pbxproj
  3. BIN
      Builds/MacOSX/Dexed.xcodeproj/project.xcworkspace/xcuserdata/asb2m10.xcuserdatad/UserInterfaceState.xcuserstate
  4. 13
      Builds/VisualStudio2012/Dexed.vcxproj
  5. 35
      Builds/VisualStudio2012/Dexed.vcxproj.filters
  6. 13
      Builds/VisualStudio2013/Dexed.vcxproj
  7. 35
      Builds/VisualStudio2013/Dexed.vcxproj.filters
  8. 18
      Dexed.jucer
  9. 4530
      JuceLibraryCode/BinaryData.cpp
  10. 33
      JuceLibraryCode/BinaryData.h
  11. 116
      Source/AlgoDisplay.cpp
  12. 20
      Source/AlgoDisplay.h
  13. 207
      Source/DXComponents.cpp
  14. 28
      Source/DXComponents.h
  15. 56
      Source/DXLookNFeel.cpp
  16. 16
      Source/DXLookNFeel.h
  17. 4
      Source/Dexed.h
  18. 624
      Source/GlobalEditor.cpp
  19. 30
      Source/GlobalEditor.h
  20. 535
      Source/OperatorEditor.cpp
  21. 15
      Source/OperatorEditor.h
  22. 124
      Source/PluginEditor.cpp
  23. 33
      Source/PluginEditor.h
  24. 2
      Source/PluginParam.cpp
  25. 6
      Source/PluginProcessor.cpp
  26. 5
      Source/msfa/dx7note.cc
  27. 2
      Source/msfa/dx7note.h
  28. 2
      Source/msfa/env.cc
  29. 2
      Source/msfa/env.h

@ -58,6 +58,7 @@ OBJECTS := \
$(OBJDIR)/GlobalEditor_4b9bc379.o \
$(OBJDIR)/ParamDialog_aca81c16.o \
$(OBJDIR)/OperatorEditor_b03d363a.o \
$(OBJDIR)/AlgoDisplay_895ecdd0.o \
$(OBJDIR)/DXLookNFeel_cfc3afa2.o \
$(OBJDIR)/DXComponents_a6963633.o \
$(OBJDIR)/freqlut_ca864b55.o \
@ -141,6 +142,11 @@ $(OBJDIR)/OperatorEditor_b03d363a.o: ../../Source/OperatorEditor.cpp
@echo "Compiling OperatorEditor.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/AlgoDisplay_895ecdd0.o: ../../Source/AlgoDisplay.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling AlgoDisplay.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/DXLookNFeel_cfc3afa2.o: ../../Source/DXLookNFeel.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling DXLookNFeel.cpp"

@ -24,6 +24,7 @@
C510246D7D5E162C9DE63DDE = {isa = PBXBuildFile; fileRef = 19CEF599CB23958AC63D427E; };
CD1CF0C6B4AB9F4C8175FE08 = {isa = PBXBuildFile; fileRef = F221CF21582EE0B8FE774583; };
082D6FF34EFF195C3A3B0CFB = {isa = PBXBuildFile; fileRef = 838E63F5800CA577B92EF6AE; };
8F3B0996452972F266C749E0 = {isa = PBXBuildFile; fileRef = 03813BF0D93D100F6F0393C9; };
D5A4D43A16EA4C71D53E96CD = {isa = PBXBuildFile; fileRef = A02775EA788AD4BF7DD1B1A1; };
8121E10419E2D99645EA254E = {isa = PBXBuildFile; fileRef = D984CE634945077E682B48F3; };
3AB728E101D7B85DD39C5CC8 = {isa = PBXBuildFile; fileRef = 3715DFDD7A1B12083F051F5A; };
@ -77,6 +78,7 @@
02E962E65624D43B0906B0C6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PerformanceCounter.cpp"; path = "../../JuceLibraryCode/modules/juce_core/time/juce_PerformanceCounter.cpp"; sourceTree = "SOURCE_ROOT"; };
0353CE3273A1063693BC5D55 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Files.cpp"; path = "../../JuceLibraryCode/modules/juce_core/native/juce_win32_Files.cpp"; sourceTree = "SOURCE_ROOT"; };
037F8EB68705A98C29AEE6B0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemStats.cpp"; path = "../../JuceLibraryCode/modules/juce_core/system/juce_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; };
03813BF0D93D100F6F0393C9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AlgoDisplay.cpp; path = ../../Source/AlgoDisplay.cpp; sourceTree = "SOURCE_ROOT"; };
03BC5E395E7CFFE130B7E5DE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeTime.h"; path = "../../JuceLibraryCode/modules/juce_core/time/juce_RelativeTime.h"; sourceTree = "SOURCE_ROOT"; };
03C1DC01A1B211F7FCA5043C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AnimatedPosition.h"; path = "../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_AnimatedPosition.h"; sourceTree = "SOURCE_ROOT"; };
03F0A9F328C7E73E37F70774 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlDocument.cpp"; path = "../../JuceLibraryCode/modules/juce_core/xml/juce_XmlDocument.cpp"; sourceTree = "SOURCE_ROOT"; };
@ -105,6 +107,7 @@
0BD21CA621B7350EBED18C0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Dexed.h; path = ../../Source/Dexed.h; sourceTree = "SOURCE_ROOT"; };
0C0B6B8DAD62A3F5C926825F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../JuceLibraryCode/modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; };
0CB234755B75E0DBC2FFB58E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableCornerComponent.cpp"; path = "../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
0D5761BE1D2DEA319B57D740 = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Switch_48x26.png"; path = "../../Resources/ui/Switch_48x26.png"; sourceTree = "SOURCE_ROOT"; };
0DCC7A5AD5AC5D3637FFAAFB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarButton.h"; path = "../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ToolbarButton.h"; sourceTree = "SOURCE_ROOT"; };
0DE1759C594D2719742E928A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ElementComparator.h"; path = "../../JuceLibraryCode/modules/juce_core/containers/juce_ElementComparator.h"; sourceTree = "SOURCE_ROOT"; };
0E3FA3D7B11FC7D19CC634BE = {isa = PBXFileReference; lastKnownFileType = image.png; name = about.png; path = ../../Resources/about.png; sourceTree = "SOURCE_ROOT"; };
@ -160,6 +163,7 @@
1BDDF13246E8EC9483F6826B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleComponent.cpp"; path = "../../JuceLibraryCode/modules/juce_gui_basics/misc/juce_BubbleComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
1C30357241D1DC9CF46D556B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Image.cpp"; path = "../../JuceLibraryCode/modules/juce_graphics/images/juce_Image.cpp"; sourceTree = "SOURCE_ROOT"; };
1D31136D1C9D959792023095 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../JuceLibraryCode/modules/juce_core/time/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; };
1D72CD485011A4EA3E6B0FD5 = {isa = PBXFileReference; lastKnownFileType = file.ttf; name = "NotoSans-Regular.ttf"; path = "../../Resources/ui/NotoSans-Regular.ttf"; sourceTree = "SOURCE_ROOT"; };
1D798858682A27299589F4E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentListener.cpp"; path = "../../JuceLibraryCode/modules/juce_gui_basics/components/juce_ComponentListener.cpp"; sourceTree = "SOURCE_ROOT"; };
1D95A78059DCCC7B58782F07 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../JuceLibraryCode/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; };
1E1A0627C2977D5FCB8440CC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel.h"; path = "../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h"; sourceTree = "SOURCE_ROOT"; };
@ -337,6 +341,7 @@
4B70CBF4DB4E571EDF5D3114 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GlobalEditor.h; path = ../../Source/GlobalEditor.h; sourceTree = "SOURCE_ROOT"; };
4B82A76027BA14576D476E62 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GenericAudioProcessorEditor.cpp"; path = "../../JuceLibraryCode/modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp"; sourceTree = "SOURCE_ROOT"; };
4C3F61A4672F57399AB751A0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferedInputStream.h"; path = "../../JuceLibraryCode/modules/juce_core/streams/juce_BufferedInputStream.h"; sourceTree = "SOURCE_ROOT"; };
4C67D4B9902C1B0CC80E11D8 = {isa = PBXFileReference; lastKnownFileType = image.png; name = "LFO_36_26.png"; path = "../../Resources/ui/LFO_36_26.png"; sourceTree = "SOURCE_ROOT"; };
4C6C14363344C87BDA4C1C71 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBoundsConstrainer.cpp"; path = "../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp"; sourceTree = "SOURCE_ROOT"; };
4C9751F81C3C052C9A6390F4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableObjectResizer.h"; path = "../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h"; sourceTree = "SOURCE_ROOT"; };
4CD97CB51FE3AD5248285B0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseCursor.cpp"; path = "../../JuceLibraryCode/modules/juce_gui_basics/mouse/juce_MouseCursor.cpp"; sourceTree = "SOURCE_ROOT"; };
@ -402,6 +407,7 @@
64CF42AFC2E05AEF9D350CD2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = env.h; path = ../../Source/msfa/env.h; sourceTree = "SOURCE_ROOT"; };
64E0EE125571D369100796D9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentPeer.h"; path = "../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_ComponentPeer.h"; sourceTree = "SOURCE_ROOT"; };
65BE679590BFE2466E16EA67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = SysexComm.cpp; path = ../../Source/SysexComm.cpp; sourceTree = "SOURCE_ROOT"; };
66E042C6FFE93F0E19B32F09 = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Scaling_36_26.png"; path = "../../Resources/ui/Scaling_36_26.png"; sourceTree = "SOURCE_ROOT"; };
6742794BECA5E223253EF810 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Fonts.mm"; path = "../../JuceLibraryCode/modules/juce_graphics/native/juce_mac_Fonts.mm"; sourceTree = "SOURCE_ROOT"; };
6833DFDF33AA9A5F551EA79D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableComposite.h"; path = "../../JuceLibraryCode/modules/juce_gui_basics/drawables/juce_DrawableComposite.h"; sourceTree = "SOURCE_ROOT"; };
687A7EC567E4B00B663808F1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_utils.h"; path = "../../JuceLibraryCode/modules/juce_audio_utils/juce_audio_utils.h"; sourceTree = "SOURCE_ROOT"; };
@ -515,6 +521,7 @@
8A58A60739C88C641626F590 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedXLock.h"; path = "../../JuceLibraryCode/modules/juce_events/native/juce_ScopedXLock.h"; sourceTree = "SOURCE_ROOT"; };
8AF9F9504D8671A590689E28 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = exp2.h; path = ../../Source/msfa/exp2.h; sourceTree = "SOURCE_ROOT"; };
8B160A62F6A6EF21379A8EA7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Direct2DGraphicsContext.cpp"; path = "../../JuceLibraryCode/modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; };
8B19E0BEAD29F2C0D46FA89C = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Knob_34x34.png"; path = "../../Resources/ui/Knob_34x34.png"; sourceTree = "SOURCE_ROOT"; };
8B86ECF3351C9D029821C621 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageComponent.h"; path = "../../JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ImageComponent.h"; sourceTree = "SOURCE_ROOT"; };
8B87D00DA619D83BA6926E28 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedLock.h"; path = "../../JuceLibraryCode/modules/juce_core/threads/juce_ScopedLock.h"; sourceTree = "SOURCE_ROOT"; };
8BADEB7BF1A65E83A7A1736D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PluginFx.cpp; path = ../../Source/PluginFx.cpp; sourceTree = "SOURCE_ROOT"; };
@ -715,6 +722,7 @@
C6559A509BD759234BFFCA5D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TooltipWindow.cpp"; path = "../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_TooltipWindow.cpp"; sourceTree = "SOURCE_ROOT"; };
C6928FE8579AE1980061CA43 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dx7note.h; path = ../../Source/msfa/dx7note.h; sourceTree = "SOURCE_ROOT"; };
C74F0F7CA3A1A201C0EC4772 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel_V2.h"; path = "../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h"; sourceTree = "SOURCE_ROOT"; };
C7577AF98915C39EDCEC259A = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Slider_26x26.png"; path = "../../Resources/ui/Slider_26x26.png"; sourceTree = "SOURCE_ROOT"; };
C78890910E4BE9A24F562397 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferedInputStream.cpp"; path = "../../JuceLibraryCode/modules/juce_core/streams/juce_BufferedInputStream.cpp"; sourceTree = "SOURCE_ROOT"; };
C7C6039A52C3EE370CA9E73A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_RTAS_MacUtilities.mm"; path = "../../JuceLibraryCode/modules/juce_audio_plugin_client/RTAS/juce_RTAS_MacUtilities.mm"; sourceTree = "SOURCE_ROOT"; };
C7EFC098CAC8AAB04A9D5183 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_ComSmartPtr.h"; path = "../../JuceLibraryCode/modules/juce_core/native/juce_win32_ComSmartPtr.h"; sourceTree = "SOURCE_ROOT"; };
@ -724,6 +732,7 @@
CAF913DD133AC8882640F266 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AlertWindow.h"; path = "../../JuceLibraryCode/modules/juce_gui_basics/windows/juce_AlertWindow.h"; sourceTree = "SOURCE_ROOT"; };
CB38F1D4BB78766DBD50FEB9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_URL.cpp"; path = "../../JuceLibraryCode/modules/juce_core/network/juce_URL.cpp"; sourceTree = "SOURCE_ROOT"; };
CB7C9535E3F994DBA41FC649 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertiesFile.cpp"; path = "../../JuceLibraryCode/modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"; sourceTree = "SOURCE_ROOT"; };
CBEE3341DEFF854B1D114C0B = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Meter_140x8.png"; path = "../../Resources/ui/Meter_140x8.png"; sourceTree = "SOURCE_ROOT"; };
CC04B8DF2C8AAFD8DB02A142 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlowEffect.h"; path = "../../JuceLibraryCode/modules/juce_graphics/effects/juce_GlowEffect.h"; sourceTree = "SOURCE_ROOT"; };
CC1B6A4F3E42E9DE4C619D00 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DeletedAtShutdown.h"; path = "../../JuceLibraryCode/modules/juce_events/messages/juce_DeletedAtShutdown.h"; sourceTree = "SOURCE_ROOT"; };
CCBC05EAC1621CB1519FA5A4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedComponent.cpp"; path = "../../JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
@ -749,7 +758,9 @@
D4FC04482169FDDCEB7A3BB5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_FileChooser.cpp"; path = "../../JuceLibraryCode/modules/juce_gui_basics/native/juce_win32_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; };
D564C8B4087316C3A47936B0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinate.cpp"; path = "../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp"; sourceTree = "SOURCE_ROOT"; };
D5E430C641A42BA4693AC4AF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourSelector.cpp"; path = "../../JuceLibraryCode/modules/juce_gui_extra/misc/juce_ColourSelector.cpp"; sourceTree = "SOURCE_ROOT"; };
D5E8818F417B8FBF0F9FECBD = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Light_14x14.png"; path = "../../Resources/ui/Light_14x14.png"; sourceTree = "SOURCE_ROOT"; };
D63FBBC40FA8CF0773BA9099 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FloatVectorOperations.cpp"; path = "../../JuceLibraryCode/modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp"; sourceTree = "SOURCE_ROOT"; };
D66793B7DB6B5CFC22A1BD9D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AlgoDisplay.h; path = ../../Source/AlgoDisplay.h; sourceTree = "SOURCE_ROOT"; };
D6C62054C5A49E8BB8902DF8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LocalisedStrings.h"; path = "../../JuceLibraryCode/modules/juce_core/text/juce_LocalisedStrings.h"; sourceTree = "SOURCE_ROOT"; };
D6C6FCBA5ECA257959BFE674 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_VST_Wrapper.cpp"; path = "../../JuceLibraryCode/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp"; sourceTree = "SOURCE_ROOT"; };
D6DF0265148E2542CF8184CB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPressMappingSet.cpp"; path = "../../JuceLibraryCode/modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp"; sourceTree = "SOURCE_ROOT"; };
@ -798,6 +809,7 @@
E60515FDC5AD0779F615C43E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ZipFile.cpp"; path = "../../JuceLibraryCode/modules/juce_core/zip/juce_ZipFile.cpp"; sourceTree = "SOURCE_ROOT"; };
E60A33E021C4CA870FFE07CF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Image.h"; path = "../../JuceLibraryCode/modules/juce_graphics/images/juce_Image.h"; sourceTree = "SOURCE_ROOT"; };
E65D3A0B86F5E8834CE77DB5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PNGLoader.cpp"; path = "../../JuceLibraryCode/modules/juce_graphics/image_formats/juce_PNGLoader.cpp"; sourceTree = "SOURCE_ROOT"; };
E6F65C031FCBB192F3927D4C = {isa = PBXFileReference; lastKnownFileType = image.png; name = "ButtonUnlabeled_50x30.png"; path = "../../Resources/ui/ButtonUnlabeled_50x30.png"; sourceTree = "SOURCE_ROOT"; };
E74E1F2048368E816394FA74 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsPostScriptRenderer.cpp"; path = "../../JuceLibraryCode/modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp"; sourceTree = "SOURCE_ROOT"; };
E7E5B7A78A2D1C47285B79FC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ArrowButton.cpp"; path = "../../JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ArrowButton.cpp"; sourceTree = "SOURCE_ROOT"; };
E7EF16D6D50A17A5672075F0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageCache.cpp"; path = "../../JuceLibraryCode/modules/juce_graphics/images/juce_ImageCache.cpp"; sourceTree = "SOURCE_ROOT"; };
@ -889,8 +901,17 @@
FF6607118B29435E76806DFA = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Dexed.component; sourceTree = "BUILT_PRODUCTS_DIR"; };
FF973BD60572C077A148D3AB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WildcardFileFilter.h"; path = "../../JuceLibraryCode/modules/juce_core/files/juce_WildcardFileFilter.h"; sourceTree = "SOURCE_ROOT"; };
F472964B0FFEE5615B72CE3D = {isa = PBXGroup; children = (
0E3FA3D7B11FC7D19CC634BE,
15B75D829C40872D542A38B8, ); name = Resources; sourceTree = "<group>"; };
0D5761BE1D2DEA319B57D740,
E6F65C031FCBB192F3927D4C,
8B19E0BEAD29F2C0D46FA89C,
4C67D4B9902C1B0CC80E11D8,
D5E8818F417B8FBF0F9FECBD,
CBEE3341DEFF854B1D114C0B,
66E042C6FFE93F0E19B32F09,
C7577AF98915C39EDCEC259A,
1D72CD485011A4EA3E6B0FD5,
15B75D829C40872D542A38B8,
0E3FA3D7B11FC7D19CC634BE, ); name = Resources; sourceTree = "<group>"; };
0652CE27AE4971C99654E3BF = {isa = PBXGroup; children = (
8BADEB7BF1A65E83A7A1736D,
DC75DFCDFCDB425927B11EC0,
@ -907,6 +928,8 @@
9AAC5E6C1A21F8FE2F66F0E0,
838E63F5800CA577B92EF6AE,
C2AA393651CBC37DCD7718BD,
03813BF0D93D100F6F0393C9,
D66793B7DB6B5CFC22A1BD9D,
A02775EA788AD4BF7DD1B1A1,
29D6A187B80D22EB609C256D,
D984CE634945077E682B48F3,
@ -2013,6 +2036,7 @@
C510246D7D5E162C9DE63DDE,
CD1CF0C6B4AB9F4C8175FE08,
082D6FF34EFF195C3A3B0CFB,
8F3B0996452972F266C749E0,
D5A4D43A16EA4C71D53E96CD,
8121E10419E2D99645EA254E,
3AB728E101D7B85DD39C5CC8,

@ -140,6 +140,7 @@
<ClCompile Include="..\..\Source\GlobalEditor.cpp"/>
<ClCompile Include="..\..\Source\ParamDialog.cpp"/>
<ClCompile Include="..\..\Source\OperatorEditor.cpp"/>
<ClCompile Include="..\..\Source\AlgoDisplay.cpp"/>
<ClCompile Include="..\..\Source\DXLookNFeel.cpp"/>
<ClCompile Include="..\..\Source\DXComponents.cpp"/>
<ClCompile Include="..\..\Source\msfa\freqlut.cc"/>
@ -1113,6 +1114,7 @@
<ClInclude Include="..\..\Source\GlobalEditor.h"/>
<ClInclude Include="..\..\Source\ParamDialog.h"/>
<ClInclude Include="..\..\Source\OperatorEditor.h"/>
<ClInclude Include="..\..\Source\AlgoDisplay.h"/>
<ClInclude Include="..\..\Source\DXLookNFeel.h"/>
<ClInclude Include="..\..\Source\DXComponents.h"/>
<ClInclude Include="..\..\Source\msfa\freqlut.h"/>
@ -1528,8 +1530,17 @@
<ClInclude Include="..\..\JuceLibraryCode\JuceHeader.h"/>
</ItemGroup>
<ItemGroup>
<None Include="..\..\Resources\about.png"/>
<None Include="..\..\Resources\ui\Switch_48x26.png"/>
<None Include="..\..\Resources\ui\ButtonUnlabeled_50x30.png"/>
<None Include="..\..\Resources\ui\Knob_34x34.png"/>
<None Include="..\..\Resources\ui\LFO_36_26.png"/>
<None Include="..\..\Resources\ui\Light_14x14.png"/>
<None Include="..\..\Resources\ui\Meter_140x8.png"/>
<None Include="..\..\Resources\ui\Scaling_36_26.png"/>
<None Include="..\..\Resources\ui\Slider_26x26.png"/>
<None Include="..\..\Resources\ui\NotoSans-Regular.ttf"/>
<None Include="..\..\Resources\builtin_pgm.zip"/>
<None Include="..\..\Resources\about.png"/>
<None Include="..\..\JuceLibraryCode\modules\juce_audio_basics\juce_module_info"/>
<None Include="..\..\JuceLibraryCode\modules\juce_audio_plugin_client\juce_module_info"/>
<None Include="..\..\JuceLibraryCode\modules\juce_audio_processors\juce_module_info"/>

@ -298,6 +298,9 @@
<ClCompile Include="..\..\Source\OperatorEditor.cpp">
<Filter>Dexed\Source\ui</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\AlgoDisplay.cpp">
<Filter>Dexed\Source\ui</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\DXLookNFeel.cpp">
<Filter>Dexed\Source\ui</Filter>
</ClCompile>
@ -1425,6 +1428,9 @@
<ClInclude Include="..\..\Source\OperatorEditor.h">
<Filter>Dexed\Source\ui</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\AlgoDisplay.h">
<Filter>Dexed\Source\ui</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\DXLookNFeel.h">
<Filter>Dexed\Source\ui</Filter>
</ClInclude>
@ -2666,12 +2672,39 @@
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\..\Resources\about.png">
<None Include="..\..\Resources\ui\Switch_48x26.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\ui\ButtonUnlabeled_50x30.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\ui\Knob_34x34.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\ui\LFO_36_26.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\ui\Light_14x14.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\ui\Meter_140x8.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\ui\Scaling_36_26.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\ui\Slider_26x26.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\ui\NotoSans-Regular.ttf">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\builtin_pgm.zip">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\about.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\JuceLibraryCode\modules\juce_audio_basics\juce_module_info">
<Filter>Juce Modules\juce_audio_basics</Filter>
</None>

@ -139,6 +139,7 @@
<ClCompile Include="..\..\Source\GlobalEditor.cpp"/>
<ClCompile Include="..\..\Source\ParamDialog.cpp"/>
<ClCompile Include="..\..\Source\OperatorEditor.cpp"/>
<ClCompile Include="..\..\Source\AlgoDisplay.cpp"/>
<ClCompile Include="..\..\Source\DXLookNFeel.cpp"/>
<ClCompile Include="..\..\Source\DXComponents.cpp"/>
<ClCompile Include="..\..\Source\msfa\freqlut.cc"/>
@ -1112,6 +1113,7 @@
<ClInclude Include="..\..\Source\GlobalEditor.h"/>
<ClInclude Include="..\..\Source\ParamDialog.h"/>
<ClInclude Include="..\..\Source\OperatorEditor.h"/>
<ClInclude Include="..\..\Source\AlgoDisplay.h"/>
<ClInclude Include="..\..\Source\DXLookNFeel.h"/>
<ClInclude Include="..\..\Source\DXComponents.h"/>
<ClInclude Include="..\..\Source\msfa\freqlut.h"/>
@ -1527,8 +1529,17 @@
<ClInclude Include="..\..\JuceLibraryCode\JuceHeader.h"/>
</ItemGroup>
<ItemGroup>
<None Include="..\..\Resources\about.png"/>
<None Include="..\..\Resources\ui\Switch_48x26.png"/>
<None Include="..\..\Resources\ui\ButtonUnlabeled_50x30.png"/>
<None Include="..\..\Resources\ui\Knob_34x34.png"/>
<None Include="..\..\Resources\ui\LFO_36_26.png"/>
<None Include="..\..\Resources\ui\Light_14x14.png"/>
<None Include="..\..\Resources\ui\Meter_140x8.png"/>
<None Include="..\..\Resources\ui\Scaling_36_26.png"/>
<None Include="..\..\Resources\ui\Slider_26x26.png"/>
<None Include="..\..\Resources\ui\NotoSans-Regular.ttf"/>
<None Include="..\..\Resources\builtin_pgm.zip"/>
<None Include="..\..\Resources\about.png"/>
<None Include="..\..\JuceLibraryCode\modules\juce_audio_basics\juce_module_info"/>
<None Include="..\..\JuceLibraryCode\modules\juce_audio_plugin_client\juce_module_info"/>
<None Include="..\..\JuceLibraryCode\modules\juce_audio_processors\juce_module_info"/>

@ -298,6 +298,9 @@
<ClCompile Include="..\..\Source\OperatorEditor.cpp">
<Filter>Dexed\Source\ui</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\AlgoDisplay.cpp">
<Filter>Dexed\Source\ui</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\DXLookNFeel.cpp">
<Filter>Dexed\Source\ui</Filter>
</ClCompile>
@ -1425,6 +1428,9 @@
<ClInclude Include="..\..\Source\OperatorEditor.h">
<Filter>Dexed\Source\ui</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\AlgoDisplay.h">
<Filter>Dexed\Source\ui</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\DXLookNFeel.h">
<Filter>Dexed\Source\ui</Filter>
</ClInclude>
@ -2666,12 +2672,39 @@
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\..\Resources\about.png">
<None Include="..\..\Resources\ui\Switch_48x26.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\ui\ButtonUnlabeled_50x30.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\ui\Knob_34x34.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\ui\LFO_36_26.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\ui\Light_14x14.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\ui\Meter_140x8.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\ui\Scaling_36_26.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\ui\Slider_26x26.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\ui\NotoSans-Regular.ttf">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\builtin_pgm.zip">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\Resources\about.png">
<Filter>Dexed\Resources</Filter>
</None>
<None Include="..\..\JuceLibraryCode\modules\juce_audio_basics\juce_module_info">
<Filter>Juce Modules\juce_audio_basics</Filter>
</None>

@ -12,8 +12,22 @@
buildRTAS="0" buildAAX="0" pluginManufacturerEmail="support@yourcompany.com">
<MAINGROUP id="kHXTgw" name="Dexed">
<GROUP id="{F12593AE-639A-6F59-5819-ACE25AF86F95}" name="Resources">
<FILE id="xxGEA4" name="about.png" compile="0" resource="1" file="Resources/about.png"/>
<FILE id="SXelfa" name="Switch_48x26.png" compile="0" resource="1"
file="Resources/ui/Switch_48x26.png"/>
<FILE id="AjTNZm" name="ButtonUnlabeled_50x30.png" compile="0" resource="1"
file="Resources/ui/ButtonUnlabeled_50x30.png"/>
<FILE id="SYWwxx" name="Knob_34x34.png" compile="0" resource="1" file="Resources/ui/Knob_34x34.png"/>
<FILE id="b6nSDy" name="LFO_36_26.png" compile="0" resource="1" file="Resources/ui/LFO_36_26.png"/>
<FILE id="zrVtLp" name="Light_14x14.png" compile="0" resource="1" file="Resources/ui/Light_14x14.png"/>
<FILE id="GRsIdT" name="Meter_140x8.png" compile="0" resource="1" file="Resources/ui/Meter_140x8.png"/>
<FILE id="uB8nRA" name="Scaling_36_26.png" compile="0" resource="1"
file="Resources/ui/Scaling_36_26.png"/>
<FILE id="kmkZne" name="Slider_26x26.png" compile="0" resource="1"
file="Resources/ui/Slider_26x26.png"/>
<FILE id="g1Wwz3" name="NotoSans-Regular.ttf" compile="0" resource="1"
file="Resources/ui/NotoSans-Regular.ttf"/>
<FILE id="gfRTZ1" name="builtin_pgm.zip" compile="0" resource="1" file="Resources/builtin_pgm.zip"/>
<FILE id="xxGEA4" name="about.png" compile="0" resource="1" file="Resources/about.png"/>
</GROUP>
<GROUP id="{EA38D88A-6B79-E394-8B57-FA22D50C4D86}" name="Source">
<GROUP id="{1B64F271-8E56-F19A-FF63-094159E5EF7B}" name="dsp">
@ -37,6 +51,8 @@
file="Source/OperatorEditor.cpp"/>
<FILE id="ChJDca" name="OperatorEditor.h" compile="0" resource="0"
file="Source/OperatorEditor.h"/>
<FILE id="mlAFW9" name="AlgoDisplay.cpp" compile="1" resource="0" file="Source/AlgoDisplay.cpp"/>
<FILE id="ZsRqfW" name="AlgoDisplay.h" compile="0" resource="0" file="Source/AlgoDisplay.h"/>
<FILE id="TgCdkS" name="DXLookNFeel.cpp" compile="1" resource="0" file="Source/DXLookNFeel.cpp"/>
<FILE id="V4bLcd" name="DXLookNFeel.h" compile="0" resource="0" file="Source/DXLookNFeel.h"/>
<FILE id="yOSLIH" name="DXComponents.cpp" compile="1" resource="0"

File diff suppressed because it is too large Load Diff

@ -9,17 +9,44 @@
namespace BinaryData
{
extern const char* about_png;
const int about_pngSize = 23143;
extern const char* Switch_48x26_png;
const int Switch_48x26_pngSize = 2261;
extern const char* ButtonUnlabeled_50x30_png;
const int ButtonUnlabeled_50x30_pngSize = 1850;
extern const char* Knob_34x34_png;
const int Knob_34x34_pngSize = 3926;
extern const char* LFO_36_26_png;
const int LFO_36_26_pngSize = 1666;
extern const char* Light_14x14_png;
const int Light_14x14_pngSize = 796;
extern const char* Meter_140x8_png;
const int Meter_140x8_pngSize = 402;
extern const char* Scaling_36_26_png;
const int Scaling_36_26_pngSize = 1736;
extern const char* Slider_26x26_png;
const int Slider_26x26_pngSize = 744;
extern const char* NotoSansRegular_ttf;
const int NotoSansRegular_ttfSize = 306788;
extern const char* builtin_pgm_zip;
const int builtin_pgm_zipSize = 88890;
extern const char* about_png;
const int about_pngSize = 23143;
// Points to the start of a list of resource names.
extern const char* namedResourceList[];
// Number of elements in the namedResourceList array.
const int namedResourceListSize = 2;
const int namedResourceListSize = 11;
// If you provide the name of one of the binary resource variables above, this function will
// return the corresponding data and its size (or a null pointer if the name isn't found).

@ -0,0 +1,116 @@
/*
==============================================================================
ProgramSelector.cpp
Created: 29 Sep 2014 4:45:42pm
Author: Pascal Gauthier
==============================================================================
*/
#include "AlgoDisplay.h"
/**
* Algorithm arrangements, based on the DX1 display.
*/
static const char algoArr[][13] = {
// 1 2 3 4 5 6 7 8 9 A B C D
{ 0, 0, 1, 3, 0, 0, 0, 2, 4, 0, 0, 5, -6 }, // 1
{ 0, 0, 1, 3, 0, 0, 0, -2, 4, 0, 0, 5, 6 }, // 2
{ 0, 0, 1, 4, 0, 0, 0, 2, 5, 0, 3, -6, 0 }, // 3
{ 0, 0, 1, -4, 0, 0, 0, 2, -5, 0, 3, -6, 0 }, // 4
{ 0, 1, 3, 5, 0, 0, 2, 4, -6, 0, 0, 0, 0 }, // 5
{ 0, 1, 3, -5, 0, 0, 2, 4, -6, 0, 0, 0, 0 }, // 6
{ 0, 1, 3, 0, 0, 0, 2, 4, 5, 0, 0, -6, 0 }, // 7
{ 0, 1, 3, 0, 0, 0, 2, -4, 5, 0, 0, 6, 0 }, // 8
{ 0, 1, 3, 0, 0, 0, -2, 4, 5, 0, 0, 6, 0 }, // 9
{ 0, 0, 4, 1, 0, 0, 5, 6, 2, 0, 0, -3, 0 }, // 10
{ 0, 0, 4, 1, 0, 0, 5, -6, 2, 0, 0, 3, 0 }, // 11
{ 0, 0, 3, 0, 1, 0, 4, 5, 6, -2, 0, 0, 0 }, // 12
{ 0, 0, 3, 0, 1, 0, 4, 5, -6, 2, 0, 0, 0 }, // 13
// 1 2 3 4 5 6 7 8 9 A B C D
{ 0, 0, 1, 3, 0, 0, 0, 2, 4, 0, 5, -6, 0 }, // 14
{ 0, 0, 1, 3, 0, 0, 0, -2, 4, 0, 5, 6, 0 }, // 15
{ 0, 0, 1, 0, 0, 0, 2, 3, 5, 0, 4, -6, 0 }, // 16
{ 0, 0, 1, 0, 0, 0, -2, 3, 5, 0, 4, 6, 0 }, // 17
{ 0, 0, 1, 0, 0, 0, 2, -3, 4, 0, 0, 5, 6 }, // 18
{ 0, 0, 1, 4, 5, 0, 0, 2, -6, 0, 3, 0, 0 }, // 19
{ 0, 1, 2, 0, 4, 0, -3, 0, 5, 6, 0, 0, 0 }, // 20
{ 0, 1, 2, 4, 5, 0, -3, 0, 6, 0, 0, 0, 0 }, // 21
{ 0, 1, 3, 4, 5, 0, 2, 0, -6, 0, 0, 0, 0 }, // 22
{ 0, 1, 2, 4, 5, 0, 0, 3, -6, 0, 0, 0, 0 }, // 23
{ 1, 2, 3, 4, 5, 0, 0, 0, -6, 0, 0, 0, 0 }, // 24
{ 1, 2, 3, 4, 5, 0, 0, 0, -6, 0, 0, 0, 0 }, // 25
{ 0, 1, 2, 0, 4, 0, 0, 3, 5, -6, 0, 0, 0 }, // 26
// 1 2 3 4 5 6 7 8 9 A B C D
{ 0, 1, 2, 0, 4, 0, 0, -3, 5, 6, 0, 0, 0 }, // 27
{ 0, 1, 3, 6, 0, 0, 2, 4, 0, 0, -5, 0, 0 }, // 28
{ 0, 1, 2, 3, 5, 0, 0, 0, 4, -6, 0, 0, 0 }, // 29
{ 0, 1, 2, 3, 6, 0, 0, 0, 4, 0, 0, -5, 0 }, // 30
{ 1, 2, 3, 4, 5, 0, 0, 0, 0, -6, 0, 0, 0 }, // 31
{ 1, 2, 3, 4, 5, -6, 0, 0, 0, 0, 0, 0, 0 } // 32
};
AlgoDisplay::AlgoDisplay() {
static char tmpAlgo = 0;
algo = &tmpAlgo;
}
void AlgoDisplay::paint(Graphics &g) {
int alg;
if ( *algo <= 31 ) {
alg = *algo;
} else {
alg = 31;
}
const char *arr = algoArr[alg];
g.setColour (Colours::black.withAlpha(0.1f));
g.fillRoundedRectangle (0.0f, 0.0f, (float) getWidth(), (float) getHeight(), 1.0f);
for(int i=0;i<13;i++) {
int target = arr[i];
if ( target == 0 )
continue;
if ( i < 6 ) {
drawOp(g, i, 3, target);
continue;
}
if ( i < 10 ){
drawOp(g, (i-6)+1, 2, target);
continue;
}
if ( i < 12 ) {
drawOp(g, (i-10)+2, 1, target);
continue;
}
// last one
drawOp(g, (i-12)+3, 0, target);
}
String algoTxt;
algoTxt << (alg+1);
g.drawText(algoTxt, 5, 1, 21, 14, Justification::left, true);
}
void AlgoDisplay::drawOp(Graphics &g, int x, int y, int num) {
String txt;
txt << abs(num);
int offx = 24;
int offy = 17;
g.setColour(Colour(0xFF0FC00F));
g.fillRect(x*offx+4, y*offy+3, offx-2, offy-1);
g.setColour(Colour(0xFFFFFFFF));
g.drawText(txt, x*offx+3, y*offy+2, offx+2, offy+2, Justification::centred, true);
if ( num < 0 ) {
g.setColour(Colour(0xFFFFFFFF));
int x1 = (x*offx) + 24;
g.drawLine(x1+1, y*offy+3, x1+1, y*offy+offy+2, 3);
}
}

@ -0,0 +1,20 @@
/*
==============================================================================
==============================================================================
*/
#ifndef ALGODISPLAY_H_INCLUDED
#define ALGODISPLAY_H_INCLUDED
#include "../JuceLibraryCode/JuceHeader.h"
class AlgoDisplay : public Component {
void drawOp(Graphics &g, int x, int y, int num);
public:
AlgoDisplay();
char *algo;
void paint(Graphics &g);
};
#endif // ALGODISPLAY_H_INCLUDED

@ -23,117 +23,12 @@
*/
#include "DXComponents.h"
#include "DXLookNFeel.h"
#include "PluginProcessor.h"
#include "msfa/pitchenv.h"
/**
* Algorithm arrangements, based on the DX1 display.
*/
static const char algoArr[][13] = {
// 1 2 3 4 5 6 7 8 9 A B C D
{ 0, 0, 1, 3, 0, 0, 0, 2, 4, 0, 0, 5, -6 }, // 1
{ 0, 0, 1, 3, 0, 0, 0, -2, 4, 0, 0, 5, 6 }, // 2
{ 0, 0, 1, 4, 0, 0, 0, 2, 5, 0, 3, -6, 0 }, // 3
{ 0, 0, 1, -4, 0, 0, 0, 2, -5, 0, 3, -6, 0 }, // 4
{ 0, 1, 3, 5, 0, 0, 2, 4, -6, 0, 0, 0, 0 }, // 5
{ 0, 1, 3, -5, 0, 0, 2, 4, -6, 0, 0, 0, 0 }, // 6
{ 0, 1, 3, 0, 0, 0, 2, 4, 5, 0, 0, -6, 0 }, // 7
{ 0, 1, 3, 0, 0, 0, 2, -4, 5, 0, 0, 6, 0 }, // 8
{ 0, 1, 3, 0, 0, 0, -2, 4, 5, 0, 0, 6, 0 }, // 9
{ 0, 0, 4, 1, 0, 0, 5, 6, 2, 0, 0, -3, 0 }, // 10
{ 0, 0, 4, 1, 0, 0, 5, -6, 2, 0, 0, 3, 0 }, // 11
{ 0, 0, 3, 0, 1, 0, 4, 5, 6, -2, 0, 0, 0 }, // 12
{ 0, 0, 3, 0, 1, 0, 4, 5, -6, 2, 0, 0, 0 }, // 13
// 1 2 3 4 5 6 7 8 9 A B C D
{ 0, 0, 1, 3, 0, 0, 0, 2, 4, 0, 5, -6, 0 }, // 14
{ 0, 0, 1, 3, 0, 0, 0, -2, 4, 0, 5, 6, 0 }, // 15
{ 0, 0, 1, 0, 0, 0, 2, 3, 5, 0, 4, -6, 0 }, // 16
{ 0, 0, 1, 0, 0, 0, -2, 3, 5, 0, 4, 6, 0 }, // 17
{ 0, 0, 1, 0, 0, 0, 2, -3, 4, 0, 0, 5, 6 }, // 18
{ 0, 0, 1, 4, 5, 0, 0, 2, -6, 0, 3, 0, 0 }, // 19
{ 0, 1, 2, 0, 4, 0, -3, 0, 5, 6, 0, 0, 0 }, // 20
{ 0, 1, 2, 4, 5, 0, -3, 0, 6, 0, 0, 0, 0 }, // 21
{ 0, 1, 3, 4, 5, 0, 2, 0, -6, 0, 0, 0, 0 }, // 22
{ 0, 1, 2, 4, 5, 0, 0, 3, -6, 0, 0, 0, 0 }, // 23
{ 1, 2, 3, 4, 5, 0, 0, 0, -6, 0, 0, 0, 0 }, // 24
{ 1, 2, 3, 4, 5, 0, 0, 0, -6, 0, 0, 0, 0 }, // 25
{ 0, 1, 2, 0, 4, 0, 0, 3, 5, -6, 0, 0, 0 }, // 26
// 1 2 3 4 5 6 7 8 9 A B C D
{ 0, 1, 2, 0, 4, 0, 0, -3, 5, 6, 0, 0, 0 }, // 27
{ 0, 1, 3, 6, 0, 0, 2, 4, 0, 0, -5, 0, 0 }, // 28
{ 0, 1, 2, 3, 5, 0, 0, 0, 4, -6, 0, 0, 0 }, // 29
{ 0, 1, 2, 3, 6, 0, 0, 0, 4, 0, 0, -5, 0 }, // 30
{ 1, 2, 3, 4, 5, 0, 0, 0, 0, -6, 0, 0, 0 }, // 31
{ 1, 2, 3, 4, 5, -6, 0, 0, 0, 0, 0, 0, 0 } // 32
};
static char TMP_LEVEL_PTR[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
AlgoDisplay::AlgoDisplay() {
static char tmpAlgo = 0;
algo = &tmpAlgo;
}
void AlgoDisplay::paint(Graphics &g) {
int alg;
if ( *algo <= 31 ) {
alg = *algo;
} else {
alg = 31;
}
const char *arr = algoArr[alg];
g.setColour (Colours::black.withAlpha(0.1f));
g.fillRoundedRectangle (0.0f, 0.0f, (float) getWidth(), (float) getHeight(), 1.0f);
for(int i=0;i<13;i++) {
int target = arr[i];
if ( target == 0 )
continue;
if ( i < 6 ) {
drawOp(g, i, 3, target);
continue;
}
if ( i < 10 ){
drawOp(g, (i-6)+1, 2, target);
continue;
}
if ( i < 12 ) {
drawOp(g, (i-10)+2, 1, target);
continue;
}
// last one
drawOp(g, (i-12)+3, 0, target);
}
String algoTxt;
algoTxt << (alg+1);
g.drawText(algoTxt, 5, 1, 21, 14, Justification::left, true);
}
void AlgoDisplay::drawOp(Graphics &g, int x, int y, int num) {
String txt;
txt << abs(num);
int offx = 24;
int offy = 17;
g.setColour(Colour(0xFF0FC00F));
g.fillRect(x*offx+4, y*offy+3, offx-2, offy-1);
g.setColour(Colour(0xFFFFFFFF));
g.drawText(txt, x*offx+3, y*offy+2, offx+2, offy+2, Justification::centred, true);
if ( num < 0 ) {
g.setColour(Colour(0xFFFFFFFF));
int x1 = (x*offx) + 24;
g.drawLine(x1+1, y*offy+3, x1+1, y*offy+offy+2, 3);
}
}
static float EG_rate_rise_duration[128] = {
38.00000 ,34.96000 ,31.92000 ,28.88000 ,25.84000 ,
22.80000 ,20.64000 ,18.48000 ,16.32000 ,14.16000 ,
@ -347,7 +242,8 @@ void EnvDisplay::paint(Graphics &g) {
p.lineTo(96,32);
p.lineTo(0, 32);
g.setColour(Colour(0xFF0FC00F).withAlpha(0.3f));
g.setColour(DXLookNFeel::fillColour);
//g.setColour(Colour(0xFF0FC00F).withAlpha(0.3f));
g.fillPath(p);
g.setColour(Colour(0xFFFFFFFF));
@ -413,43 +309,38 @@ void PitchEnvDisplay::paint(Graphics &g) {
}
}
VuMeter::VuMeter() {
totalBlocks = 16;
}
void VuMeter::paint(Graphics &g) {
// taken from the drawLevelMeter ;
float width = getWidth();
float height = getHeight();
g.setColour (Colours::black);
g.fillRoundedRectangle (0.0f, 0.0f, (float) width, (float) height, 0);
const int numBlocks = roundToInt(totalBlocks * v);
const float h = (height - 6.0f) / (float) totalBlocks;
for (int i = 0; i < totalBlocks; ++i) {
if (i >= numBlocks)
g.setColour (Colours::red.withAlpha (0.2f));
else
g.setColour (Colours::red);
g.fillRoundedRectangle (3.0f, (height-4.0f) - (3.0f + i * h + h * 0.1f) , width - 6.0f, h * 0.8f, 0);
}
Image myStrip = ImageCache::getFromMemory(BinaryData::Meter_140x8_png, BinaryData::Meter_140x8_pngSize);
g.drawImage(myStrip, 0, 0, 140, 8, 0, 0, 140, 8);
if ( v <= 0 )
return;
const int totalBlocks = 46;
int numBlocks = roundToInt(totalBlocks * v);
if ( numBlocks > 46 )
numBlocks = totalBlocks;
int brkpoint = numBlocks * 3 + 2;
g.drawImage(myStrip, 0, 0, brkpoint, 8, 0, 8, brkpoint, 8);
}
LcdDisplay::LcdDisplay() {
systemMsg << "*** DEXED FM synthesizer ***";
systemMsg = "*** DEXED FM synthesizer ***";
paramMsg = "";
}
void LcdDisplay::timerCallback() {
systemMsg = "*** DEXED FM synthesizer ***";
repaint();
stopTimer();
//systemMsg = "*** DEXED FM synthesizer ***";
//repaint();
//stopTimer();
}
void LcdDisplay::setSystemMsg(String msg) {
systemMsg = msg;
triggerAsyncUpdate();
//systemMsg = msg;
//triggerAsyncUpdate();
}
void LcdDisplay::handleAsyncUpdate() {
@ -464,15 +355,51 @@ void LcdDisplay::handleAsyncUpdate() {
#endif
void LcdDisplay::paint(Graphics &g) {
g.setColour(Colours::black.withAlpha(0.4f));
g.fillRoundedRectangle (0.0f, 0.0f, (float) getWidth(), (float) getHeight(), 1.0f);
g.setColour (Colours::white);
/*
g.fillRoundedRectangle (0.0f, 0.0f, (float) getWidth(), (float) getHeight(), 1.0f);
g.setFont (Font (Font::getDefaultMonospacedFontName(), LCD_FONTSIZE, Font::plain));
g.drawText (systemMsg,
7, 4, 300, 8,
Justification::centredLeft, true);
Justification::centredLeft, true);*/
g.drawText (paramMsg,
7, 20, 300, 8,
Justification::centredLeft, true);
0, 0, 140, 14,
Justification::centred, true);
}
void ComboBoxImage::paint(Graphics &g) {
int idx = getSelectedItemIndex();
g.drawImage(items, 0, 0, items.getWidth(), itemHeight, 0, idx * itemHeight, items.getWidth(), itemHeight);
}
void ComboBoxImage::showPopup() {
int idx = popup.show() - 1;
if ( idx < 0 )
return;
setSelectedItemIndex(idx);
}
void ComboBoxImage::setImage(Image image) {
items = image;
int numItems = getNumItems();
itemHeight = image.getHeight() / numItems;
for(int i=0;i<numItems;i++) {
Image tmp = image.getClippedImage(Rectangle<int>(0,itemHeight*i, image.getWidth(), itemHeight));
popup.addItem(i+1, getItemText(i), true, false, tmp);
}
}
void ProgramSelector::setInit() {
isInInit = true;
}
void ProgramSelector::paint(Graphics &g) {
g.setColour(Colours::white);
g.setFont(Font(15.00f, Font::plain));
//g.drawText (, getLocalBounds(),
// Justification::centred, true); // draw some placeholder text
}

@ -40,20 +40,10 @@ public:
void paint(Graphics &g);
};
class AlgoDisplay : public Component {
void drawOp(Graphics &g, int x, int y, int num);
public:
AlgoDisplay();
char *algo;
void paint(Graphics &g);
};
class VuMeter: public Component {
void paint(Graphics &g);
public :
VuMeter();
float v;
int totalBlocks;
};
class LcdDisplay : public Component, public Timer, public AsyncUpdater {
@ -67,4 +57,22 @@ public:
void paint(Graphics &g);
};
class ComboBoxImage : public ComboBox {
Image items;
int itemHeight;
PopupMenu popup;
public:
virtual void paint(Graphics &g);
virtual void showPopup() override;
void setImage(Image image);
};
class ProgramSelector : public ComboBox {
bool isInInit;
public:
void setInit();
virtual void paint(Graphics &g) override;
};
#endif // DXCOMPONENTS_H_INCLUDED

@ -19,6 +19,7 @@
*/
#include "DXLookNFeel.h"
#include "Dexed.h"
Colour DXLookNFeel::dxDarkBrown = Colour(0xFF47260D);
Colour DXLookNFeel::dxLightBrown = Colour(0xFFA87B67);
@ -26,18 +27,23 @@ Colour DXLookNFeel::dxLightBrown = Colour(0xFFA87B67);
Colour DXLookNFeel::background = Colour(60,50,47);
Colour DXLookNFeel::fillColour = Colour(77,159,151);
Colour DXLookNFeel::comboBoxBackground = Colour(20, 18, 18);
DXLookNFeel::DXLookNFeel() {
setColour(TextButton::buttonColourId,Colour(0xFF0FC00F));
setColour(Slider::rotarySliderOutlineColourId,Colour(0xFF0FC00F));
setColour(Slider::rotarySliderFillColourId,Colour(0xFFFFFFFF));
}
defaultFont = Typeface::createSystemTypefaceFor(BinaryData::NotoSansRegular_ttf, BinaryData::NotoSansRegular_ttfSize);
}
Typeface::Ptr DXLookNFeel::getTypefaceForFont(const Font &) {
return defaultFont;
}
void DXLookNFeel::drawRotarySlider( Graphics &g, int x, int y, int width, int height, float sliderPosProportional,
float rotaryStartAngle, float rotaryEndAngle, Slider &slider ) {
Image myStrip = ImageCache::getFromMemory (BinaryData::knobstrip_png, BinaryData::knobstrip_pngSize);
Image myStrip = ImageCache::getFromMemory(BinaryData::Knob_34x34_png, BinaryData::Knob_34x34_pngSize);
const double fractRotation = (slider.getValue() - slider.getMinimum()) / (slider.getMaximum() - slider.getMinimum()); //value between 0 and 1 for current amount of rotation
const int nFrames = myStrip.getHeight()/myStrip.getWidth(); // number of frames for vertical film strip
@ -51,3 +57,47 @@ void DXLookNFeel::drawRotarySlider( Graphics &g, int x, int y, int width, int he
g.drawImage(myStrip, (int)rx, (int)ry, 2*(int)radius, 2*(int)radius, 0, frameIdx*myStrip.getWidth(), myStrip.getWidth(), myStrip.getWidth());
};
void DXLookNFeel::drawToggleButton(Graphics& g, ToggleButton& button, bool isMouseOverButton, bool isButtonDown) {
Image myStrip = ImageCache::getFromMemory(BinaryData::Switch_48x26_png, BinaryData::Switch_48x26_pngSize);
g.drawImage(myStrip, 0, 0, 48, 26, 0, button.getToggleState() ? 0 : 26, 48, 26);
}
void DXLookNFeel::drawButtonBackground(Graphics &g, Button &button, const Colour& backgroundColour, bool isMouseOverButton, bool isButtonDown) {
Image myStrip = ImageCache::getFromMemory(BinaryData::ButtonUnlabeled_50x30_png, BinaryData::ButtonUnlabeled_50x30_pngSize);
// g.drawImage(myStrip, 0, 0, button.getWidth(), button.getHeight(), 0, isButtonDown ? 30 : 0, 50, 30);
int w = button.getWidth();
// dx, dy, dw, dl, sx, sy, sw, sl
g.drawImage(myStrip, 0, 0, 3, 30, 0, button.getToggleState() ? 0 : 26, 3, 30);
g.drawImage(myStrip, 3, 0, w-3, 30, 3, button.getToggleState() ? 0 : 26, 44, 30);
g.drawImage(myStrip, w-3, 0, w, 30, 47, button.getToggleState() ? 0 : 26, 47, 30);
}
void DXLookNFeel::drawLinearSliderBackground (Graphics&, int x, int y, int width, int height,
float sliderPos, float minSliderPos, float maxSliderPos,
const Slider::SliderStyle, Slider&) {
}
void DXLookNFeel::drawLinearSliderThumb (Graphics& g, int x, int y, int width, int height,
float sliderPos, float minSliderPos, float maxSliderPos,
const Slider::SliderStyle, Slider&) {
Image myStrip = ImageCache::getFromMemory(BinaryData::Slider_26x26_png, BinaryData::Slider_26x26_pngSize);
TRACE("%g %g", sliderPos, minSliderPos);
int p = sliderPos - minSliderPos;
p -= 7;
g.drawImage(myStrip, p, 0, 26, 26, 0, 0, 26, 26);
}

@ -24,15 +24,31 @@
#include "../JuceLibraryCode/JuceHeader.h"
class DXLookNFeel : public LookAndFeel_V3 {
Typeface::Ptr defaultFont;
public:
static Colour comboBoxBackground;
static Colour background;
static Colour fillColour;
DXLookNFeel();
virtual void drawRotarySlider(Graphics &g, int x, int y, int width, int height, float sliderPosProportional, float rotaryStartAngle, float rotaryEndAngle, Slider &slider );
virtual void drawToggleButton(Graphics& g, ToggleButton& button, bool isMouseOverButton, bool isButtonDown);
static Colour dxDarkBrown;
static Colour dxLightBrown;
virtual void drawLinearSliderBackground (Graphics&, int x, int y, int width, int height,
float sliderPos, float minSliderPos, float maxSliderPos,
const Slider::SliderStyle, Slider&) override;
virtual void drawLinearSliderThumb (Graphics&, int x, int y, int width, int height,
float sliderPos, float minSliderPos, float maxSliderPos,
const Slider::SliderStyle, Slider&) override;
virtual void drawButtonBackground (Graphics&, Button&, const Colour& backgroundColour,
bool isMouseOverButton, bool isButtonDown) override;
virtual Typeface::Ptr getTypefaceForFont(const Font &);
};
#endif // DXLOOKNFEEL_H_INCLUDED

@ -24,14 +24,14 @@
void dexed_trace(const char *source, const char *fmt, ...);
#ifdef DEBUG
#define DEXED_VERSION "0.7.0 DEBUG"
#define DEXED_VERSION "0.8.0a DEBUG"
#ifdef _MSC_VER
#define TRACE(fmt, ...) dexed_trace(__FUNCTION__,fmt,##__VA_ARGS__)
#else
#define TRACE(fmt, ...) dexed_trace(__PRETTY_FUNCTION__,fmt,##__VA_ARGS__)
#endif
#else
#define DEXED_VERSION "0.7.0"
#define DEXED_VERSION "0.8.0a"
#define TRACE(fmt, ...)
#endif

@ -18,6 +18,7 @@
*/
//[Headers] You can add your own extra header files here...
#include "PluginEditor.h"
//[/Headers]
#include "GlobalEditor.h"
@ -29,22 +30,9 @@
//==============================================================================
GlobalEditor::GlobalEditor ()
{
addAndMakeVisible (lfoType = new ComboBox ("lfoType"));
lfoType->setEditableText (false);
lfoType->setJustificationType (Justification::centredLeft);
lfoType->setTextWhenNothingSelected (String::empty);
lfoType->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
lfoType->addItem (TRANS("TRIANGLE"), 1);
lfoType->addItem (TRANS("SAW DOWN"), 2);
lfoType->addItem (TRANS("SAW UP"), 3);
lfoType->addItem (TRANS("SQUARE"), 4);
lfoType->addItem (TRANS("SINE"), 5);
lfoType->addItem (TRANS("S&HOLD"), 6);
lfoType->addListener (this);
addAndMakeVisible (lfoSpeed = new Slider ("lfoSpeed"));
lfoSpeed->setRange (0, 99, 1);
lfoSpeed->setSliderStyle (Slider::LinearHorizontal);
lfoSpeed->setSliderStyle (Slider::Rotary);
lfoSpeed->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
lfoSpeed->addListener (this);
@ -128,7 +116,7 @@ GlobalEditor::GlobalEditor ()
addAndMakeVisible (transpose = new Slider ("transpose"));
transpose->setRange (0, 48, 0);
transpose->setSliderStyle (Slider::LinearVertical);
transpose->setSliderStyle (Slider::Rotary);
transpose->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
transpose->addListener (this);
@ -174,16 +162,62 @@ GlobalEditor::GlobalEditor ()
addAndMakeVisible (vuOutput = new VuMeter());
vuOutput->setName ("vuOutput");
addAndMakeVisible (initButton = new TextButton ("initButton"));
initButton->setButtonText (TRANS("INIT"));
initButton->addListener (this);
addAndMakeVisible (parmButton = new TextButton ("parmButton"));
parmButton->setButtonText (TRANS("PARM"));
parmButton->addListener (this);
addAndMakeVisible (sendButton = new TextButton ("sendButton"));
sendButton->setButtonText (TRANS("SEND"));
sendButton->addListener (this);
addAndMakeVisible (cartButton = new TextButton ("cartButton"));
cartButton->setButtonText (TRANS("CART"));
cartButton->addListener (this);
addAndMakeVisible (loadButton = new TextButton ("loadButton"));
loadButton->setButtonText (TRANS("LOAD"));
loadButton->addListener (this);
addAndMakeVisible (saveButton = new TextButton ("saveButton"));
saveButton->setButtonText (TRANS("SAVE"));
saveButton->addListener (this);
addAndMakeVisible (storeButton = new TextButton ("storeButton"));
storeButton->setButtonText (TRANS("STORE"));
storeButton->addListener (this);
addAndMakeVisible (monoMode = new ToggleButton ("monoMode"));
monoMode->setButtonText (String::empty);
monoMode->addListener (this);
addAndMakeVisible (lfoType = new ComboBoxImage());
lfoType->setName ("lfoType");
addAndMakeVisible (programSelector = new ProgramSelector());
programSelector->setName ("programSelector");
cachedImage_globalEditor_864x144_png = ImageCache::getFromMemory (globalEditor_864x144_png, globalEditor_864x144_pngSize);
//[UserPreSize]
//[/UserPreSize]
setSize (855, 90);
setSize (864, 144);
//[Constructor] You can add your own custom stuff here..
vuOutput->totalBlocks = 6;
lfoType->addItem("TRIANGLE", 1);
lfoType->addItem("SAW DOWN", 2);
lfoType->addItem("SAW UP", 3);
lfoType->addItem("SQUARE", 4);
lfoType->addItem("SINE", 5);
lfoType->addItem("S&HOLD", 6);
lfoType->setImage(ImageCache::getFromMemory(BinaryData::LFO_36_26_png, BinaryData::LFO_36_26_pngSize));
programs = programSelector;
//[/Constructor]
}
@ -192,7 +226,6 @@ GlobalEditor::~GlobalEditor()
//[Destructor_pre]. You can add your own custom destruction code here..
//[/Destructor_pre]
lfoType = nullptr;
lfoSpeed = nullptr;
lfoAmDepth = nullptr;
lfoPitchDepth = nullptr;
@ -218,6 +251,16 @@ GlobalEditor::~GlobalEditor()
lcdDisplay = nullptr;
output = nullptr;
vuOutput = nullptr;
initButton = nullptr;
parmButton = nullptr;
sendButton = nullptr;
cartButton = nullptr;
loadButton = nullptr;
saveButton = nullptr;
storeButton = nullptr;
monoMode = nullptr;
lfoType = nullptr;
programSelector = nullptr;
//[Destructor]. You can add your own custom destruction code here..
@ -248,6 +291,11 @@ void GlobalEditor::paint (Graphics& g)
123, 73, 45, 15,
Justification::centred, true);
g.setColour (Colours::black);
g.drawImage (cachedImage_globalEditor_864x144_png,
0, 0, 864, 144,
0, 0, cachedImage_globalEditor_864x144_png.getWidth(), cachedImage_globalEditor_864x144_png.getHeight());
//[UserPaint] Add your own custom painting code here..
//[/UserPaint]
@ -255,51 +303,45 @@ void GlobalEditor::paint (Graphics& g)
void GlobalEditor::resized()
{
lfoType->setBounds (624, 40, 96, 16);
lfoSpeed->setBounds (624, 16, 96, 16);
lfoAmDepth->setBounds (672, 64, 24, 24);
lfoPitchDepth->setBounds (648, 64, 24, 24);
lfoDelay->setBounds (624, 64, 24, 24);
cutoff->setBounds (80, 40, 40, 40);
reso->setBounds (128, 40, 40, 40);
pitchRate2->setBounds (753, 64, 24, 24);
pitchRate3->setBounds (777, 64, 24, 24);
pitchRate4->setBounds (801, 64, 24, 24);
pitchRate1->setBounds (729, 64, 24, 24);
pitchLevel2->setBounds (753, 40, 24, 24);
pitchLevel3->setBounds (777, 40, 24, 24);
pitchLevel4->setBounds (801, 40, 24, 24);
pitchLevel1->setBounds (729, 40, 24, 24);
transpose->setBounds (832, 0, 24, 88);
oscSync->setBounds (600, 64, 24, 24);
pitchModSens->setBounds (696, 64, 24, 24);
lfoSync->setBounds (600, 40, 24, 24);
pitchEnvDisplay->setBounds (728, 8, 96, 32);
algoDisplay->setBounds (442, 8, 152, 74);
feedback->setBounds (568, 32, 24, 24);
algo->setBounds (568, 8, 24, 24);
lcdDisplay->setBounds (8, 0, 232, 32);
output->setBounds (32, 40, 40, 40);
vuOutput->setBounds (8, 44, 16, 38);
lfoSpeed->setBounds (564, 50, 34, 34);
lfoAmDepth->setBounds (686, 50, 34, 34);
lfoPitchDepth->setBounds (646, 50, 34, 34);
lfoDelay->setBounds (603, 50, 34, 34);
cutoff->setBounds (234, 9, 34, 34);
reso->setBounds (277, 9, 34, 34);
pitchRate2->setBounds (767, 96, 34, 34);
pitchRate3->setBounds (795, 96, 35, 34);
pitchRate4->setBounds (823, 96, 34, 34);
pitchRate1->setBounds (739, 96, 34, 34);
pitchLevel2->setBounds (767, 57, 34, 34);
pitchLevel3->setBounds (795, 56, 34, 34);
pitchLevel4->setBounds (823, 56, 34, 34);
pitchLevel1->setBounds (739, 57, 34, 34);
transpose->setBounds (202, 60, 34, 34);
oscSync->setBounds (662, 96, 48, 26);
pitchModSens->setBounds (666, 5, 34, 34);
lfoSync->setBounds (575, 96, 48, 26);
pitchEnvDisplay->setBounds (751, 10, 93, 30);
algoDisplay->setBounds (331, 24, 153, 98);
feedback->setBounds (500, 76, 34, 34);
algo->setBounds (500, 16, 34, 34);
lcdDisplay->setBounds (6, 87, 140, 13);
output->setBounds (157, 60, 34, 34);
vuOutput->setBounds (6, 103, 140, 8);
initButton->setBounds (3, 53, 50, 30);
parmButton->setBounds (51, 53, 50, 30);
sendButton->setBounds (99, 53, 50, 30);
cartButton->setBounds (3, 111, 50, 30);
loadButton->setBounds (50, 111, 50, 30);
saveButton->setBounds (98, 111, 50, 30);
storeButton->setBounds (270, 109, 50, 30);
monoMode->setBounds (248, 65, 48, 26);
lfoType->setBounds (584, 8, 36, 26);
programSelector->setBounds (153, 115, 112, 18);
//[UserResized] Add your own custom resize handling here..
//[/UserResized]
}
void GlobalEditor::comboBoxChanged (ComboBox* comboBoxThatHasChanged)
{
//[UsercomboBoxChanged_Pre]
//[/UsercomboBoxChanged_Pre]
if (comboBoxThatHasChanged == lfoType)
{
//[UserComboBoxCode_lfoType] -- add your combo box handling code here..
//[/UserComboBoxCode_lfoType]
}
//[UsercomboBoxChanged_Post]
//[/UsercomboBoxChanged_Post]
}
void GlobalEditor::sliderValueChanged (Slider* sliderThatWasMoved)
{
//[UsersliderValueChanged_Pre]
@ -413,6 +455,64 @@ void GlobalEditor::sliderValueChanged (Slider* sliderThatWasMoved)
//[/UsersliderValueChanged_Post]
}
void GlobalEditor::buttonClicked (Button* buttonThatWasClicked)
{
//[UserbuttonClicked_Pre]
//[/UserbuttonClicked_Pre]
if (buttonThatWasClicked == initButton)
{
//[UserButtonCode_initButton] -- add your button handler code here..
editor->initProgram();
//[/UserButtonCode_initButton]
}
else if (buttonThatWasClicked == parmButton)
{
//[UserButtonCode_parmButton] -- add your button handler code here..
editor->parmShow();
//[/UserButtonCode_parmButton]
}
else if (buttonThatWasClicked == sendButton)
{
//[UserButtonCode_sendButton] -- add your button handler code here..
editor->sendToDx7();
//[/UserButtonCode_sendButton]
}
else if (buttonThatWasClicked == cartButton)
{
//[UserButtonCode_cartButton] -- add your button handler code here..
editor->cartShow();
//[/UserButtonCode_cartButton]
}
else if (buttonThatWasClicked == loadButton)
{
//[UserButtonCode_loadButton] -- add your button handler code here..
editor->loadCart();
//[/UserButtonCode_loadButton]
}
else if (buttonThatWasClicked == saveButton)
{
//[UserButtonCode_saveButton] -- add your button handler code here..
editor->saveCart();
//[/UserButtonCode_saveButton]
}
else if (buttonThatWasClicked == storeButton)
{
//[UserButtonCode_storeButton] -- add your button handler code here..
editor->storeProgram();
//[/UserButtonCode_storeButton]
}
else if (buttonThatWasClicked == monoMode)
{
//[UserButtonCode_monoMode] -- add your button handler code here..
editor->processor->setMonoMode(monoMode->getToggleState());
//[/UserButtonCode_monoMode]
}
//[UserbuttonClicked_Post]
//[/UserbuttonClicked_Post]
}
//[MiscUserCode] You can add your own definitions of your custom methods or any other code here...
@ -451,12 +551,12 @@ void GlobalEditor::setSystemMessage(String msg) {
}
void GlobalEditor::setParamMessage(String msg) {
lcdDisplay->paramMsg = msg;
//lcdDisplay->paramMsg = msg;
}
void GlobalEditor::updateDisplay() {
algoDisplay->repaint();
pitchEnvDisplay->repaint();
//algoDisplay->repaint();
//pitchEnvDisplay->repaint();
repaint();
}
@ -469,6 +569,10 @@ void GlobalEditor::updateVu(float f) {
vuOutput->v = f;
vuOutput->repaint();
}
void GlobalEditor::setMonoState(bool state) {
monoMode->setState(state ? Button::ButtonState::buttonDown : Button::ButtonState::buttonNormal);
}
//[/MiscUserCode]
@ -483,8 +587,8 @@ BEGIN_JUCER_METADATA
<JUCER_COMPONENT documentType="Component" className="GlobalEditor" componentName=""
parentClasses="public Component" constructorParams="" variableInitialisers=""
snapPixels="8" snapActive="1" snapShown="1" overlayOpacity="0.330"
fixedSize="1" initialWidth="855" initialHeight="90">
snapPixels="8" snapActive="0" snapShown="1" overlayOpacity="0.330"
fixedSize="1" initialWidth="864" initialHeight="144">
<BACKGROUND backgroundColour="ffffff">
<TEXT pos="27 73 45 15" fill="solid: ff000000" hasStroke="0" text="Volume"
fontname="Default font" fontsize="10" bold="0" italic="0" justification="36"/>
@ -492,110 +596,434 @@ BEGIN_JUCER_METADATA
fontname="Default font" fontsize="10" bold="0" italic="0" justification="36"/>
<TEXT pos="123 73 45 15" fill="solid: ff000000" hasStroke="0" text="Resonance"
fontname="Default font" fontsize="10" bold="0" italic="0" justification="36"/>
<IMAGE pos="0 0 864 144" resource="globalEditor_864x144_png" opacity="1"
mode="0"/>
</BACKGROUND>
<COMBOBOX name="lfoType" id="31018596af3b34e9" memberName="lfoType" virtualName=""
explicitFocusOrder="0" pos="624 40 96 16" editable="0" layout="33"
items="TRIANGLE&#10;SAW DOWN&#10;SAW UP&#10;SQUARE&#10;SINE&#10;S&amp;HOLD"
textWhenNonSelected="" textWhenNoItems="(no choices)"/>
<SLIDER name="lfoSpeed" id="b10eaf327ab3bff5" memberName="lfoSpeed" virtualName=""
explicitFocusOrder="0" pos="624 16 96 16" min="0" max="99" int="1"
style="LinearHorizontal" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
explicitFocusOrder="0" pos="564 50 34 34" min="0" max="99" int="1"
style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" textBoxWidth="80"
textBoxHeight="20" skewFactor="1"/>
<SLIDER name="lfoAmDepth" id="3e95a6206fa4a891" memberName="lfoAmDepth"
virtualName="" explicitFocusOrder="0" pos="672 64 24 24" min="0"
virtualName="" explicitFocusOrder="0" pos="686 50 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="lfoPitchDepth" id="6ead769ca786c813" memberName="lfoPitchDepth"
virtualName="" explicitFocusOrder="0" pos="648 64 24 24" min="0"
virtualName="" explicitFocusOrder="0" pos="646 50 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="lfoDelay" id="1fce68dc81619ef5" memberName="lfoDelay" virtualName=""
explicitFocusOrder="0" pos="624 64 24 24" min="0" max="99" int="1"
explicitFocusOrder="0" pos="603 50 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="cutoff" id="40531f16bb0bd225" memberName="cutoff" virtualName=""
explicitFocusOrder="0" pos="80 40 40 40" min="0" max="1" int="0"
explicitFocusOrder="0" pos="234 9 34 34" min="0" max="1" int="0"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="reso" id="c8c13464e81a8d83" memberName="reso" virtualName=""
explicitFocusOrder="0" pos="128 40 40 40" min="0" max="1" int="0"
explicitFocusOrder="0" pos="277 9 34 34" min="0" max="1" int="0"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="pitchRate2" id="73f386b3c91d3de4" memberName="pitchRate2"
virtualName="" explicitFocusOrder="0" pos="753 64 24 24" min="0"
virtualName="" explicitFocusOrder="0" pos="767 96 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="pitchRate3" id="187c25b24413fccf" memberName="pitchRate3"
virtualName="" explicitFocusOrder="0" pos="777 64 24 24" min="0"
virtualName="" explicitFocusOrder="0" pos="795 96 35 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="pitchRate4" id="1aeb2a8fbbcbeaab" memberName="pitchRate4"
virtualName="" explicitFocusOrder="0" pos="801 64 24 24" min="0"
virtualName="" explicitFocusOrder="0" pos="823 96 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="pitchRate1" id="419d613b3fb9604e" memberName="pitchRate1"
virtualName="" explicitFocusOrder="0" pos="729 64 24 24" min="0"
virtualName="" explicitFocusOrder="0" pos="739 96 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="pitchLevel2" id="3a355ad2221887d9" memberName="pitchLevel2"
virtualName="" explicitFocusOrder="0" pos="753 40 24 24" min="0"
virtualName="" explicitFocusOrder="0" pos="767 57 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="pitchLevel3" id="5c5d782e8a7f3ad7" memberName="pitchLevel3"
virtualName="" explicitFocusOrder="0" pos="777 40 24 24" min="0"
virtualName="" explicitFocusOrder="0" pos="795 56 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="pitchLevel4" id="eb900b141fbad8ff" memberName="pitchLevel4"
virtualName="" explicitFocusOrder="0" pos="801 40 24 24" min="0"
virtualName="" explicitFocusOrder="0" pos="823 56 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="pitchLevel1" id="344cbe26ec9fa128" memberName="pitchLevel1"
virtualName="" explicitFocusOrder="0" pos="729 40 24 24" min="0"
virtualName="" explicitFocusOrder="0" pos="739 57 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="transpose" id="7d1266b1c1534947" memberName="transpose"
virtualName="" explicitFocusOrder="0" pos="832 0 24 88" min="0"
max="48" int="0" style="LinearVertical" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
virtualName="" explicitFocusOrder="0" pos="202 60 34 34" min="0"
max="48" int="0" style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<TOGGLEBUTTON name="oscSync" id="8f3fe641537cd00" memberName="oscSync" virtualName=""
explicitFocusOrder="0" pos="600 64 24 24" buttonText="" connectedEdges="0"
explicitFocusOrder="0" pos="662 96 48 26" buttonText="" connectedEdges="0"
needsCallback="0" radioGroupId="0" state="0"/>
<SLIDER name="pitchModSens" id="904f73df85a9f886" memberName="pitchModSens"
virtualName="" explicitFocusOrder="0" pos="696 64 24 24" min="0"
virtualName="" explicitFocusOrder="0" pos="666 5 34 34" min="0"
max="7" int="0" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<TOGGLEBUTTON name="lfoSync" id="ff92bb0a5a4f7187" memberName="lfoSync" virtualName=""
explicitFocusOrder="0" pos="600 40 24 24" buttonText="" connectedEdges="0"
explicitFocusOrder="0" pos="575 96 48 26" buttonText="" connectedEdges="0"
needsCallback="0" radioGroupId="0" state="0"/>
<GENERICCOMPONENT name="pitchEnvDisplay" id="9ddaae8ef924a038" memberName="pitchEnvDisplay"
virtualName="" explicitFocusOrder="0" pos="728 8 96 32" class="PitchEnvDisplay"
virtualName="" explicitFocusOrder="0" pos="751 10 93 30" class="PitchEnvDisplay"
params=""/>
<GENERICCOMPONENT name="algoDisplay" id="b26fb9e3b5f0bc37" memberName="algoDisplay"
virtualName="" explicitFocusOrder="0" pos="442 8 152 74" class="AlgoDisplay"
virtualName="" explicitFocusOrder="0" pos="331 24 153 98" class="AlgoDisplay"
params=""/>
<SLIDER name="feedback" id="4fac1940c29ab8c" memberName="feedback" virtualName=""
explicitFocusOrder="0" pos="568 32 24 24" min="0" max="7" int="1"
explicitFocusOrder="0" pos="500 76 34 34" min="0" max="7" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="algo" id="8a226ddf9bbff752" memberName="algo" virtualName=""
explicitFocusOrder="0" pos="568 8 24 24" min="1" max="32" int="1"
explicitFocusOrder="0" pos="500 16 34 34" min="1" max="32" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<GENERICCOMPONENT name="lcdDisplay" id="30c7bb8f114cbbe3" memberName="lcdDisplay"
virtualName="" explicitFocusOrder="0" pos="8 0 232 32" class="LcdDisplay"
virtualName="" explicitFocusOrder="0" pos="6 87 140 13" class="LcdDisplay"
params=""/>
<SLIDER name="cutoff" id="7697fdd54fd1593e" memberName="output" virtualName=""
explicitFocusOrder="0" pos="32 40 40 40" min="0" max="1" int="0"
explicitFocusOrder="0" pos="157 60 34 34" min="0" max="1" int="0"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<GENERICCOMPONENT name="vuOutput" id="dac75af912267f51" memberName="vuOutput" virtualName=""
explicitFocusOrder="0" pos="8 44 16 38" class="VuMeter" params=""/>
explicitFocusOrder="0" pos="6 103 140 8" class="VuMeter" params=""/>
<TEXTBUTTON name="initButton" id="92b278163c42e21d" memberName="initButton"
virtualName="" explicitFocusOrder="0" pos="3 53 50 30" buttonText="INIT"
connectedEdges="0" needsCallback="1" radioGroupId="0"/>
<TEXTBUTTON name="parmButton" id="d5cd6260b34be817" memberName="parmButton"
virtualName="" explicitFocusOrder="0" pos="51 53 50 30" buttonText="PARM"
connectedEdges="0" needsCallback="1" radioGroupId="0"/>
<TEXTBUTTON name="sendButton" id="9b45b291c75c7b3f" memberName="sendButton"
virtualName="" explicitFocusOrder="0" pos="99 53 50 30" buttonText="SEND"
connectedEdges="0" needsCallback="1" radioGroupId="0"/>
<TEXTBUTTON name="cartButton" id="465a101c3a0e744" memberName="cartButton"
virtualName="" explicitFocusOrder="0" pos="3 111 50 30" buttonText="CART"
connectedEdges="0" needsCallback="1" radioGroupId="0"/>
<TEXTBUTTON name="loadButton" id="54e62fe23ff547d1" memberName="loadButton"
virtualName="" explicitFocusOrder="0" pos="50 111 50 30" buttonText="LOAD"
connectedEdges="0" needsCallback="1" radioGroupId="0"/>
<TEXTBUTTON name="saveButton" id="44bf9479012da9b4" memberName="saveButton"
virtualName="" explicitFocusOrder="0" pos="98 111 50 30" buttonText="SAVE"
connectedEdges="0" needsCallback="1" radioGroupId="0"/>
<TEXTBUTTON name="storeButton" id="a94bec26832eb58b" memberName="storeButton"
virtualName="" explicitFocusOrder="0" pos="270 109 50 30" buttonText="STORE"
connectedEdges="0" needsCallback="1" radioGroupId="0"/>
<TOGGLEBUTTON name="monoMode" id="e683d8cbe286367b" memberName="monoMode" virtualName=""
explicitFocusOrder="0" pos="248 65 48 26" buttonText="" connectedEdges="0"
needsCallback="1" radioGroupId="0" state="0"/>
<GENERICCOMPONENT name="lfoType" id="62f61dda9f76c8f" memberName="lfoType" virtualName=""
explicitFocusOrder="0" pos="584 8 36 26" class="ComboBoxImage"
params=""/>
<GENERICCOMPONENT name="programSelector" id="990bbcccae72dbe6" memberName="programSelector"
virtualName="" explicitFocusOrder="0" pos="153 115 112 18" class="ProgramSelector"
params=""/>
</JUCER_COMPONENT>
END_JUCER_METADATA
*/
#endif
//==============================================================================
// Binary resources - be careful not to edit any of these sections!
// JUCER_RESOURCE: globalEditor_864x144_png, 16274, "../Resources/ui/GlobalEditor_864x144.png"
static const unsigned char resource_GlobalEditor_globalEditor_864x144_png[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,3,96,0,0,0,144,8,6,0,0,0,110,232,8,32,0,0,0,9,112,72,89,115,0,0,14,195,
0,0,14,195,1,199,111,168,100,0,0,0,7,116,73,77,69,7,222,9,16,3,34,22,232,201,175,57,0,0,0,29,105,84,88,116,67,111,109,109,101,110,116,0,0,0,0,0,67,114,101,97,116,101,100,32,119,105,116,104,32,71,73,77,
80,100,46,101,7,0,0,32,0,73,68,65,84,120,218,237,221,121,124,83,101,190,63,240,79,74,123,2,154,48,51,57,157,107,147,249,93,26,238,208,118,126,182,229,218,197,129,194,176,41,34,107,69,5,148,197,5,68,64,
101,145,165,3,165,104,5,101,113,40,91,1,45,200,166,128,40,8,178,239,12,219,143,237,74,91,134,182,252,108,203,189,36,253,141,73,71,123,162,99,142,163,57,44,253,253,145,228,144,52,45,20,104,75,151,207,251,
245,234,11,146,156,156,229,201,115,158,156,111,158,231,124,31,13,0,13,128,32,0,193,0,4,0,205,61,127,45,0,104,1,132,0,104,230,89,70,3,34,162,134,165,28,192,13,0,215,1,92,5,224,2,240,139,207,159,226,121,
254,134,103,121,182,135,68,60,31,137,88,159,169,214,234,67,176,231,131,14,241,84,2,29,128,95,121,254,90,2,120,208,243,188,183,82,176,66,16,81,67,108,16,175,3,184,230,105,0,127,2,224,4,240,79,207,159,12,
224,103,79,195,8,182,135,68,60,31,137,88,159,169,54,235,67,176,39,18,111,14,224,215,0,66,1,60,20,249,123,115,251,54,255,97,238,96,12,123,232,63,254,253,127,253,206,204,242,36,162,198,160,228,255,253,221,
90,86,38,149,88,74,254,158,125,241,82,225,81,0,165,0,202,42,44,166,101,123,72,196,243,145,136,245,153,106,169,62,148,107,0,232,61,149,225,33,189,238,193,63,116,238,240,232,75,143,38,196,119,183,219,237,
0,0,239,191,68,68,13,157,209,104,84,255,45,248,191,95,127,181,255,240,177,229,78,249,95,95,123,26,70,25,238,161,3,58,182,135,68,60,31,137,88,159,169,150,234,195,15,26,0,191,5,240,16,0,243,51,253,122,166,
254,86,252,77,7,86,2,34,106,10,141,163,75,185,90,184,238,211,47,166,1,176,0,112,192,61,124,224,55,0,90,177,61,36,226,249,72,196,250,76,53,92,31,174,0,40,109,6,119,55,232,191,69,253,222,220,35,250,15,17,
207,179,50,16,81,83,32,203,50,126,253,235,95,133,162,252,134,203,254,143,239,138,224,30,163,47,0,16,163,126,111,238,206,246,144,136,231,35,17,235,51,213,84,125,208,160,220,101,43,253,238,107,0,63,121,
239,255,106,25,21,241,251,36,86,6,162,250,227,219,50,7,11,161,134,252,91,168,161,210,231,237,118,59,254,16,25,241,104,246,223,46,109,135,123,136,72,57,128,95,177,61,36,182,13,13,227,124,188,122,245,26,
92,138,130,107,215,174,65,185,122,141,149,131,234,140,16,18,140,224,224,96,8,33,33,16,132,16,214,103,214,135,106,213,135,243,23,10,182,2,104,17,12,247,13,129,15,62,208,162,121,196,207,255,250,137,37,72,
84,79,46,174,152,2,169,230,124,231,41,211,202,46,252,132,224,224,255,128,59,3,85,11,207,23,36,219,67,98,219,80,207,207,199,27,55,110,224,95,63,255,130,127,253,252,139,250,28,219,76,170,75,87,175,94,195,
213,171,215,240,243,207,191,160,185,86,128,238,193,7,16,20,20,196,250,204,250,112,187,250,240,0,0,65,77,65,255,243,191,126,10,99,241,17,213,143,11,44,170,187,242,149,164,50,239,92,44,130,231,175,5,219,
67,98,219,80,191,207,199,159,254,245,179,223,197,42,209,253,244,139,75,193,143,242,79,172,207,84,157,250,160,5,16,18,12,247,124,3,33,26,13,99,109,162,251,141,231,225,125,43,227,102,158,63,176,61,36,182,
13,245,251,124,84,174,94,197,47,46,133,237,37,213,43,87,175,94,195,47,46,5,45,154,107,89,159,233,86,245,33,24,64,144,119,34,230,32,22,21,209,253,197,222,175,186,43,231,74,134,62,53,243,105,7,217,30,18,
219,134,122,124,62,186,92,87,89,41,168,94,114,41,85,6,96,53,86,159,79,159,255,27,11,250,62,234,144,248,159,247,90,31,130,0,104,130,225,30,102,202,176,155,136,154,58,77,133,127,137,168,30,158,143,87,175,
214,125,0,118,245,234,85,88,254,110,199,119,210,247,117,178,189,208,223,252,26,255,203,244,16,30,104,209,156,53,161,1,185,90,117,226,140,26,173,207,45,180,218,128,251,139,168,118,5,5,5,161,101,203,150,
53,86,31,130,3,235,6,17,81,83,185,182,187,219,215,137,232,126,157,143,215,174,95,175,243,61,252,111,235,223,225,248,225,71,52,23,4,52,107,214,172,86,183,85,94,94,142,178,239,127,192,191,126,249,5,143,
68,71,177,122,52,32,229,229,229,181,94,159,155,105,52,208,106,181,8,14,14,102,129,215,101,43,229,41,247,154,170,15,252,244,136,136,136,136,110,193,241,195,143,208,61,240,0,4,65,168,245,158,135,27,55,110,
160,121,243,230,16,4,129,5,79,212,72,49,0,35,34,34,34,186,133,32,0,193,193,193,117,50,236,203,187,141,22,45,90,176,224,137,26,123,0,198,236,43,68,247,27,207,193,58,43,233,219,180,119,108,15,137,109,67,
125,62,31,53,245,110,31,107,99,123,238,109,178,45,98,125,166,134,220,30,87,85,31,120,7,31,17,17,17,17,17,81,29,97,0,70,68,68,68,68,68,196,0,140,136,136,136,136,136,136,1,24,17,17,17,17,17,17,49,0,35,34,
34,34,34,34,98,0,70,68,68,68,68,68,212,228,49,13,61,81,61,193,115,176,254,148,117,197,215,183,237,61,204,66,163,58,243,76,239,238,77,170,109,184,211,243,177,41,181,149,252,94,96,125,166,134,125,78,86,
181,252,205,137,152,249,249,19,221,231,179,154,69,80,111,202,186,146,215,91,104,181,117,50,9,43,53,93,65,65,65,104,217,178,101,96,253,211,240,124,108,178,109,37,191,23,88,159,169,97,159,147,85,44,31,204,
146,36,34,186,181,102,26,13,180,90,45,130,131,217,100,82,45,126,175,123,234,25,17,17,53,110,252,57,151,136,136,136,136,136,136,1,24,17,17,17,17,17,17,3,48,34,34,34,34,34,34,98,0,70,68,68,68,68,68,84,127,
169,119,148,7,49,13,38,209,125,197,84,180,117,199,183,189,43,191,205,235,68,247,179,126,54,133,182,225,78,207,199,251,81,30,26,141,230,190,109,151,88,159,169,225,94,171,85,117,61,193,30,48,34,34,34,162,
91,104,222,188,121,157,95,40,115,218,11,162,198,139,57,149,137,136,136,136,110,193,100,50,226,231,159,127,193,245,235,215,235,100,123,33,33,33,248,237,111,67,1,92,99,225,19,49,0,35,34,34,34,106,90,90,
234,90,32,84,12,69,203,95,253,10,205,154,53,171,245,237,149,151,151,195,81,246,45,208,140,101,79,196,0,140,136,136,136,168,137,105,174,21,0,92,133,252,207,178,186,187,64,99,240,69,212,20,2,48,222,4,72,
68,77,133,230,30,95,39,186,159,245,147,231,35,17,235,51,53,228,250,192,30,48,34,162,123,212,177,227,35,247,244,254,83,167,46,112,27,220,6,17,17,53,17,106,0,198,52,152,68,247,151,134,191,138,213,93,89,
223,166,189,99,123,72,245,169,126,54,246,182,225,78,207,71,182,149,196,250,76,13,229,90,77,195,52,244,68,68,68,68,119,239,145,248,4,245,255,97,70,35,90,133,155,213,199,109,34,34,161,211,233,212,255,63,
18,159,160,62,110,21,110,70,152,209,168,46,43,8,2,30,142,142,241,91,111,155,136,200,122,119,188,130,32,224,145,248,4,191,125,173,43,99,223,156,84,47,203,132,168,38,48,0,35,34,34,34,170,134,201,127,78,
85,3,169,209,175,141,197,236,247,51,212,215,230,47,206,4,0,252,169,115,87,36,63,253,12,226,226,19,176,250,147,79,209,42,220,140,86,225,102,76,254,115,170,186,108,175,62,253,240,216,19,61,220,239,91,148,
137,199,186,63,129,228,167,159,193,146,229,89,245,234,120,13,162,136,249,139,50,49,250,245,177,88,253,201,70,204,95,148,233,23,72,214,166,136,136,72,232,244,122,86,58,106,148,212,33,136,229,229,229,44,
13,162,251,168,28,60,7,235,172,172,125,218,187,202,218,62,182,135,84,95,234,103,83,104,27,238,244,124,188,159,229,113,238,236,41,252,169,115,87,236,248,242,11,180,137,140,132,213,122,5,255,30,30,14,131,
40,162,196,98,129,83,118,226,228,137,163,56,121,226,40,0,192,233,116,226,79,93,186,96,203,103,159,98,220,155,147,240,27,131,1,14,135,132,158,125,250,32,227,253,185,120,200,24,6,151,226,194,130,191,204,
245,4,99,75,241,191,163,99,112,169,32,175,222,124,47,57,36,9,227,223,24,13,0,24,248,220,16,12,120,238,121,44,93,188,208,111,57,157,78,7,131,24,170,6,109,14,73,66,137,213,130,71,226,19,160,184,148,128,
227,241,246,36,150,88,44,112,56,36,245,249,86,225,102,24,68,17,165,118,155,186,125,239,231,221,198,19,144,93,200,201,174,58,96,52,136,104,101,54,67,118,58,113,185,184,200,111,123,21,159,107,19,17,9,135,
36,161,149,217,140,82,187,13,165,118,251,109,215,211,216,234,51,213,254,181,90,85,215,19,55,147,112,112,8,42,17,53,21,76,82,69,13,185,126,242,124,188,111,78,158,56,142,167,250,63,139,18,235,21,228,230,
100,227,114,113,17,30,247,244,100,157,59,119,6,0,240,248,19,61,240,167,78,93,161,211,235,17,30,110,198,190,189,187,160,40,10,142,28,58,128,78,93,186,34,55,39,27,130,160,197,229,226,34,60,245,244,179,136,
136,136,66,230,242,21,234,54,244,122,93,189,253,168,28,142,50,252,177,125,82,192,243,109,34,163,48,229,207,169,176,90,45,40,177,88,208,171,111,63,228,102,103,67,81,92,16,4,45,68,113,172,26,196,165,206,
72,135,65,12,69,137,245,10,218,253,57,21,239,188,53,29,151,139,139,208,38,34,18,25,139,151,226,200,161,3,136,136,136,130,65,20,213,245,15,124,110,8,58,117,238,130,130,252,60,140,127,115,50,166,79,157,
236,23,48,1,64,167,206,93,145,252,244,179,184,84,144,135,176,48,35,182,124,190,9,151,139,139,144,58,35,29,0,32,203,78,68,199,196,98,204,200,225,0,128,140,197,75,81,144,159,135,203,197,69,104,215,126,44,
206,157,61,131,181,171,86,162,83,231,174,232,217,167,47,46,23,23,33,44,204,136,21,31,44,243,11,18,239,119,125,214,106,181,104,222,188,57,130,130,56,136,173,46,5,5,5,65,16,132,26,107,223,152,5,145,136,
160,211,233,208,169,75,55,60,28,29,131,45,159,111,130,162,184,240,84,255,103,33,104,133,128,95,58,137,136,154,170,75,249,121,152,242,231,84,56,28,73,56,114,248,32,74,44,22,204,249,75,6,20,151,130,140,
191,204,133,78,167,195,184,55,39,99,208,211,253,160,40,138,223,176,195,29,219,183,98,250,140,119,96,16,69,236,248,114,43,0,160,32,63,15,165,118,155,26,156,212,203,239,7,189,30,195,71,142,2,0,244,234,221,
15,75,23,47,168,116,185,48,163,9,35,94,28,2,69,81,160,211,235,33,8,2,230,190,55,19,0,176,125,207,1,232,116,58,8,130,22,209,49,177,24,246,252,0,0,192,133,206,57,120,234,233,103,177,224,47,115,209,171,79,
95,172,248,96,25,246,237,217,5,0,216,123,232,24,0,247,125,104,195,71,142,66,255,62,61,160,40,10,74,75,237,232,213,167,31,214,174,90,233,183,253,63,182,79,66,137,245,10,182,124,246,41,100,89,6,224,238,
201,10,55,155,213,160,43,125,214,28,60,18,159,128,11,57,217,16,197,80,172,93,181,18,151,139,139,112,228,208,65,188,243,238,28,172,93,181,18,127,234,220,5,37,22,75,192,250,235,139,216,216,88,24,12,6,6,
96,247,33,0,11,9,9,193,183,246,146,26,89,31,3,48,162,70,172,83,231,174,56,121,226,216,109,151,123,252,137,39,241,112,116,12,246,237,221,141,82,187,13,233,239,206,193,133,156,28,20,228,231,177,16,137,136,
60,20,69,129,213,106,65,92,124,162,223,143,83,58,189,30,37,86,139,250,11,121,175,62,253,32,8,90,68,68,70,226,220,89,119,207,88,169,221,14,151,162,160,87,239,126,24,241,226,96,0,192,229,226,34,8,90,1,169,
51,210,241,215,195,7,209,38,50,10,251,118,239,186,179,30,151,58,146,155,147,125,203,160,228,114,113,33,20,69,1,0,56,28,18,28,210,205,99,80,92,238,160,44,58,38,214,239,123,165,184,184,16,163,95,31,11,0,
136,139,79,196,190,61,187,111,174,175,168,80,13,236,0,32,99,209,82,191,247,85,180,226,131,165,24,250,194,203,88,243,201,38,236,219,187,11,107,87,173,68,187,164,14,8,51,154,252,122,24,141,70,19,46,32,27,
78,159,225,133,138,226,130,78,231,190,223,108,233,226,5,24,62,114,20,54,124,246,5,142,28,62,88,239,2,177,144,160,235,112,254,240,29,79,198,6,142,1,24,81,3,34,8,2,30,142,137,245,124,153,219,224,144,36,
180,137,136,82,199,215,235,116,58,132,25,77,234,208,150,63,117,238,10,167,236,196,229,162,66,200,178,172,142,107,7,160,142,163,215,233,116,232,213,167,47,78,158,56,14,217,233,132,65,20,209,174,125,7,236,
252,114,43,28,142,178,26,219,119,239,61,2,178,211,137,86,102,51,46,229,231,65,81,20,117,204,191,247,177,151,119,188,191,239,61,2,222,253,175,236,158,2,34,162,186,176,116,241,2,245,98,29,0,230,188,59,83,
13,188,20,69,193,152,145,47,163,83,231,110,112,56,202,48,229,205,113,126,137,36,22,252,101,14,116,58,189,218,67,3,0,227,95,31,237,254,17,44,38,22,151,139,138,32,203,206,122,117,188,178,211,89,173,32,68,
113,41,1,193,106,69,86,139,5,67,95,120,89,125,28,30,110,86,3,178,226,162,66,24,61,223,95,190,129,87,137,213,2,217,233,196,148,137,227,42,93,167,186,159,178,140,21,31,46,195,218,213,43,49,251,253,5,120,
234,233,103,113,238,236,105,200,78,103,165,61,140,178,211,89,229,122,150,46,94,136,181,186,149,72,127,119,46,30,127,162,7,142,28,58,200,138,79,12,192,136,154,170,204,15,86,64,146,36,92,46,46,66,169,221,
132,220,156,243,120,231,221,57,24,244,76,63,119,208,18,25,133,17,175,140,194,244,169,147,241,199,246,73,16,69,17,113,241,9,40,181,219,32,8,90,100,126,176,2,185,57,217,208,233,244,24,241,202,40,140,127,
99,52,58,117,233,6,131,33,20,173,90,133,195,33,73,8,51,26,161,213,106,241,112,76,44,92,138,18,48,206,254,110,181,137,140,194,152,215,199,66,16,180,56,121,226,24,46,228,100,163,83,231,174,24,250,226,75,
56,119,246,12,198,191,57,25,25,239,207,197,165,130,60,204,126,63,3,37,22,11,148,171,10,122,245,238,139,185,239,205,132,193,32,34,107,213,58,156,59,123,26,58,157,222,239,158,2,34,162,186,226,110,19,111,
182,139,37,86,75,192,235,91,62,255,212,239,130,190,170,247,122,3,21,239,176,187,198,174,196,106,129,36,73,72,157,145,142,203,197,197,232,213,167,47,50,61,67,26,247,237,221,173,14,209,172,152,126,254,200,
161,3,200,88,180,20,251,246,238,86,131,167,138,163,59,220,189,142,2,28,146,4,163,209,232,25,222,105,135,213,106,65,234,140,116,252,159,19,199,17,102,116,127,111,222,42,177,198,208,23,95,134,236,116,66,
150,157,16,69,17,185,217,217,172,244,84,123,1,24,239,57,39,186,191,110,119,14,62,28,29,11,135,36,97,198,212,41,234,115,222,116,192,154,10,235,248,73,150,113,234,196,113,252,103,92,60,214,121,126,185,28,
248,220,16,252,213,103,56,197,146,229,43,16,29,29,139,253,123,118,161,87,239,190,216,191,119,183,218,43,54,98,228,104,245,125,154,26,60,190,86,225,173,241,220,211,125,33,203,50,52,0,158,122,250,89,164,
253,121,10,28,14,9,151,242,243,240,212,211,207,224,191,139,11,17,29,19,139,117,158,177,249,222,247,246,238,219,15,251,61,195,74,188,251,31,17,17,121,199,25,170,170,115,76,108,15,169,62,181,5,154,38,118,
188,77,189,60,234,147,239,37,9,51,223,154,126,219,50,255,239,162,66,44,93,188,64,93,110,255,158,93,80,92,138,250,120,230,91,211,241,189,36,225,170,162,96,198,212,201,248,99,251,14,136,136,140,196,204,
183,166,163,196,106,129,6,192,223,114,178,241,218,200,151,241,248,19,79,98,231,151,91,241,233,250,117,144,157,78,104,0,172,252,112,25,254,216,62,9,209,49,177,40,181,219,113,185,184,48,96,159,46,229,231,
161,77,100,36,68,81,68,218,212,41,234,122,103,189,53,29,127,234,210,21,17,145,145,176,90,45,248,135,221,6,141,103,159,52,149,28,231,127,157,57,141,136,200,40,232,117,122,247,126,59,164,59,170,115,172,
207,84,157,207,151,105,232,137,234,137,219,157,129,143,36,36,160,184,184,200,111,185,242,91,252,91,241,185,71,219,39,97,227,250,117,234,227,220,220,108,60,146,144,128,2,207,80,190,242,10,251,80,94,11,
199,119,238,204,105,56,61,191,6,123,39,248,76,127,119,142,186,140,36,73,112,41,10,166,255,121,10,94,30,57,10,70,163,9,153,139,23,224,66,78,54,254,51,46,33,96,255,255,152,212,1,197,119,17,128,49,13,61,
213,235,182,32,32,77,117,211,57,222,234,165,237,166,186,226,82,20,245,59,226,86,156,178,12,167,79,91,108,175,48,114,194,119,29,46,69,193,201,19,199,42,189,63,89,114,72,216,236,211,123,232,235,220,217,
51,234,253,116,149,177,90,45,176,86,232,141,244,110,175,178,33,132,21,247,201,251,184,184,184,232,174,190,87,26,67,125,246,222,230,112,187,97,254,190,183,67,120,121,111,117,240,187,110,137,79,168,244,
121,175,244,89,115,176,116,241,130,26,187,231,177,93,251,36,180,137,140,194,198,79,214,213,219,246,60,32,0,35,162,250,173,32,63,15,3,159,27,236,247,156,236,116,250,221,95,96,244,140,153,7,160,166,255,
245,42,177,94,65,68,68,148,218,203,213,170,149,25,59,182,111,173,211,99,80,20,151,207,255,21,148,88,45,152,243,222,59,1,195,28,47,21,228,33,109,234,20,180,10,55,35,107,213,58,12,122,186,47,28,82,153,223,
254,183,137,136,196,198,79,62,174,23,159,205,169,83,23,184,13,110,131,136,168,65,51,136,34,50,22,45,197,165,252,60,232,244,122,72,146,132,5,127,153,19,240,29,237,187,156,87,230,226,5,184,92,92,4,157,78,
135,212,183,222,129,40,138,80,92,10,12,162,136,130,252,60,53,35,166,175,232,152,88,8,90,161,6,247,223,125,59,69,67,192,0,140,168,129,184,148,159,7,241,245,177,24,247,230,36,148,88,173,176,90,45,184,144,
147,141,203,69,133,24,253,218,88,56,28,14,116,234,220,69,93,62,55,59,27,227,222,156,140,78,157,187,162,32,63,15,251,246,236,198,59,239,206,129,160,21,96,48,24,16,110,54,223,114,66,203,186,176,227,203,
173,152,243,254,2,236,248,114,43,100,217,9,217,233,68,113,81,17,134,190,248,18,46,228,228,32,204,104,66,169,221,6,89,150,177,229,243,77,234,254,135,133,25,97,52,154,152,136,131,136,136,168,6,85,156,120,
123,224,115,131,43,157,142,198,119,57,95,153,31,172,196,142,47,183,170,83,45,220,137,135,163,221,189,106,222,239,246,54,17,145,234,53,0,224,78,196,229,205,56,170,211,233,208,38,50,42,96,18,237,134,130,
1,24,81,3,225,206,174,53,28,237,218,39,169,129,9,0,76,153,56,14,157,186,116,133,32,104,49,125,234,100,53,115,148,195,33,97,202,155,238,215,138,139,11,113,185,184,8,83,38,142,67,187,246,29,2,178,90,101,
46,94,160,174,15,0,198,189,62,170,198,247,255,114,81,33,54,74,82,64,0,86,92,84,132,118,73,238,137,61,11,242,243,32,203,78,156,60,113,28,209,49,177,40,177,88,48,222,179,47,151,139,139,48,125,234,20,196,
197,39,224,178,211,137,21,31,44,101,165,32,34,34,170,173,96,172,138,137,183,171,210,38,34,18,178,211,121,87,193,215,184,55,39,169,215,54,83,166,166,98,204,200,151,241,120,247,30,144,127,146,213,33,133,
227,222,156,140,191,30,62,8,217,233,68,230,7,43,112,238,236,105,132,25,77,40,177,88,176,226,195,101,12,192,136,232,206,133,253,86,68,233,119,183,31,7,93,113,12,188,82,97,124,187,111,82,138,203,197,69,
126,143,75,237,246,74,27,198,138,137,44,106,163,103,76,150,229,74,199,129,95,42,200,11,232,201,186,144,147,93,233,62,148,88,45,1,25,199,238,166,156,137,136,136,40,80,117,39,222,54,136,162,223,252,106,
227,223,24,141,232,152,88,191,251,240,122,245,233,135,48,163,17,178,83,246,203,12,26,240,189,108,52,162,83,231,110,106,70,231,209,175,141,197,227,79,60,137,29,219,183,34,99,209,82,108,252,100,29,116,58,
29,162,99,98,49,247,189,119,220,175,125,185,13,91,62,255,20,130,32,96,195,103,91,177,118,245,202,6,85,206,12,192,136,136,136,136,136,72,117,187,137,183,43,27,130,232,144,36,196,61,151,160,62,46,46,42,
132,221,110,195,244,25,239,220,50,0,11,15,55,67,208,10,126,1,157,252,147,140,82,187,29,14,73,194,195,209,177,136,136,140,196,201,19,71,161,40,10,254,216,46,9,225,102,179,122,219,69,169,221,230,55,55,31,
3,48,34,186,35,213,237,5,163,187,47,95,34,34,34,170,92,117,39,222,174,76,65,126,30,194,140,38,180,10,55,163,196,106,169,246,52,49,146,36,65,113,41,149,222,83,182,99,251,86,60,254,196,19,136,136,136,66,
198,95,230,2,0,46,21,228,163,164,196,114,215,251,89,175,2,48,166,93,38,170,31,30,10,53,0,0,254,193,64,172,230,202,212,19,120,85,55,229,60,219,67,186,159,2,234,95,35,175,143,119,60,45,4,207,79,98,125,174,
173,157,175,222,62,149,151,187,135,42,190,114,243,126,241,125,123,118,162,212,110,199,220,119,223,113,79,154,189,103,23,46,229,231,221,76,87,95,213,58,203,203,113,185,168,16,197,69,133,152,61,47,3,127,
61,124,16,58,157,30,86,235,21,92,200,201,198,201,99,71,49,250,181,113,112,72,101,40,177,92,1,0,28,57,184,31,89,171,63,134,16,34,224,66,78,54,218,68,70,186,239,19,171,238,254,223,207,246,188,98,0,70,68,
245,51,104,32,34,186,157,54,17,145,232,213,167,234,251,53,238,70,171,112,51,74,237,54,40,138,226,247,188,193,32,98,220,196,201,152,249,214,116,22,60,81,35,226,144,36,188,243,86,106,181,150,155,254,231,
73,126,207,201,78,167,59,56,58,116,0,5,249,23,17,23,159,136,135,99,98,33,203,206,42,215,249,206,91,169,112,120,146,115,165,77,157,140,199,159,120,82,237,61,43,177,88,0,184,239,115,159,254,231,73,144,101,
231,205,237,59,36,140,121,229,37,60,222,227,73,60,28,19,139,115,103,79,3,112,207,53,90,144,223,48,178,35,51,0,35,34,34,106,224,116,122,61,34,34,163,106,116,157,189,250,244,195,190,61,187,80,98,181,160,
93,251,14,40,200,191,8,89,150,33,104,5,68,199,180,101,161,19,53,50,138,162,248,205,237,117,171,229,110,149,172,171,212,110,199,190,61,187,110,187,158,138,219,58,114,232,64,165,203,85,54,148,209,225,144,
176,229,179,79,3,158,171,169,73,157,235,48,0,211,176,230,17,17,221,69,123,216,177,227,35,247,180,181,234,76,234,203,109,52,165,109,104,110,249,216,59,255,141,236,116,250,92,152,104,252,254,53,24,68,180,
50,155,225,144,36,245,151,105,239,133,73,171,112,51,12,162,232,247,126,157,78,7,131,24,10,135,84,134,54,145,81,184,148,159,135,35,135,14,194,33,73,48,24,66,49,110,226,100,172,93,181,18,86,139,69,253,37,
218,96,8,69,43,179,217,111,30,30,131,65,132,160,21,160,211,233,221,243,245,120,150,127,56,38,182,194,254,222,201,249,166,185,167,243,147,168,126,125,127,176,62,179,62,176,7,140,136,136,168,65,153,60,117,
58,74,172,22,132,25,141,0,128,185,239,206,244,123,221,96,16,145,181,122,157,58,71,142,94,167,195,142,47,183,97,223,158,93,104,215,62,9,147,167,78,199,145,67,7,16,23,159,128,115,103,207,96,237,170,149,
104,19,25,133,17,158,212,211,185,158,9,222,199,79,156,140,53,171,86,194,104,52,193,32,134,226,225,232,24,8,130,22,185,57,231,161,211,235,49,121,106,42,46,23,23,161,93,251,177,56,114,248,16,182,124,246,
41,218,37,117,192,192,231,7,171,129,90,92,124,2,138,139,138,32,203,78,132,25,77,112,72,101,1,251,75,68,212,212,48,0,163,58,197,196,18,116,63,240,126,58,106,76,124,239,189,218,252,101,224,48,159,118,73,
29,112,242,248,81,44,93,188,16,0,144,181,106,173,250,218,128,231,135,96,206,187,239,224,66,78,182,123,254,156,207,183,170,147,156,62,28,19,139,254,189,123,4,204,215,183,111,207,46,12,31,57,10,91,62,223,
132,82,187,29,97,70,35,244,122,61,214,174,90,137,203,197,69,56,114,232,32,166,191,149,174,14,7,210,233,244,234,62,102,173,90,139,18,171,59,91,153,78,167,195,230,237,187,25,128,17,17,3,48,22,1,49,240,162,
166,82,255,24,136,81,67,103,48,136,24,253,198,88,0,128,209,104,130,209,100,10,88,230,225,152,24,252,151,207,132,237,185,62,247,106,196,197,39,32,229,205,113,0,220,247,113,148,218,109,104,227,185,119,236,
114,81,97,165,147,165,87,198,233,51,156,80,81,92,48,136,161,234,107,190,55,193,251,222,83,34,203,50,244,122,61,63,68,34,98,0,230,253,15,211,46,19,131,47,106,236,74,191,45,11,8,194,152,134,158,234,155,
138,245,207,247,241,128,231,6,163,196,106,193,134,143,215,193,32,138,216,185,239,144,251,245,242,114,148,123,150,45,46,42,66,155,136,72,156,56,118,20,128,251,158,47,171,213,130,242,242,114,56,36,9,191,
143,136,192,229,34,119,240,20,102,52,161,184,240,107,68,199,196,194,165,40,254,41,180,221,27,87,159,43,247,252,191,188,188,28,178,211,233,247,188,250,58,202,161,184,92,55,159,3,224,242,121,124,187,227,
171,206,249,200,243,147,26,202,249,203,250,76,76,67,79,68,68,212,192,125,239,144,240,216,19,61,96,181,88,208,169,115,87,72,101,101,1,203,156,59,115,10,75,63,252,8,118,187,13,173,90,153,17,29,19,139,147,
39,142,1,0,214,172,90,129,180,183,102,98,223,158,93,120,36,62,1,231,206,156,10,72,51,95,153,220,236,243,24,248,252,16,236,219,179,75,77,234,65,68,68,119,71,13,192,52,76,194,66,181,224,31,223,73,172,91,
84,175,124,91,38,221,118,40,34,235,44,221,79,21,235,159,239,227,45,159,127,138,210,82,27,194,205,102,172,93,189,2,91,62,255,20,26,13,112,185,184,16,75,23,101,64,163,1,254,81,106,199,248,215,95,69,175,
62,201,248,91,110,54,52,26,224,170,162,64,163,1,246,123,210,202,199,197,39,224,175,135,15,226,200,161,3,1,239,247,90,186,40,3,165,118,27,52,26,96,233,226,12,116,234,210,13,102,115,107,156,60,126,20,239,
188,149,170,46,251,189,67,82,31,255,215,153,211,184,148,159,167,190,230,187,14,0,24,247,218,171,183,60,190,59,45,15,162,250,126,254,178,62,179,62,220,50,0,35,34,34,162,250,239,228,241,99,62,143,220,233,
223,101,89,246,75,41,47,8,90,172,93,181,2,97,70,35,38,79,157,238,55,95,206,165,252,188,128,249,119,124,223,239,229,251,88,150,101,191,121,125,46,85,113,159,87,197,121,120,42,174,243,86,115,7,17,17,53,
21,12,192,136,136,136,26,17,157,94,143,113,19,39,67,43,104,225,116,58,177,118,213,138,6,51,57,41,17,17,3,48,34,34,34,106,80,74,237,118,53,211,33,17,17,213,227,0,140,89,88,168,54,176,94,81,125,175,151,
204,130,72,245,189,221,108,236,245,145,89,227,136,245,153,154,218,117,112,16,139,134,136,136,136,136,136,168,110,112,8,34,17,209,61,58,117,234,2,183,193,109,16,17,17,85,11,123,192,136,136,136,136,136,
136,24,128,17,17,17,17,17,17,49,0,35,34,34,34,34,34,34,6,96,68,68,68,68,68,68,245,23,211,208,83,173,98,189,162,250,94,47,153,134,158,234,123,187,201,52,244,76,219,77,172,207,212,184,174,131,217,3,70,68,
68,68,68,68,84,71,24,128,17,17,17,17,17,17,49,0,35,34,34,34,34,34,106,92,56,17,51,17,209,61,234,216,241,145,123,122,127,117,38,245,229,54,154,222,54,136,136,168,113,98,15,24,17,17,17,17,17,17,3,48,34,
34,34,34,34,162,198,133,105,232,137,168,201,97,26,122,106,40,245,147,231,35,207,71,98,125,166,198,215,158,179,7,140,136,136,136,232,46,180,75,234,128,97,47,13,103,65,16,209,29,97,0,70,68,68,68,116,23,
68,49,20,173,194,205,53,18,200,245,238,155,124,203,101,122,247,77,70,187,164,14,247,229,56,5,65,64,92,124,34,162,99,98,3,94,107,21,110,174,244,121,131,40,34,46,62,17,130,32,0,0,34,34,163,16,23,159,88,
35,229,117,171,253,140,136,140,242,123,78,167,211,35,46,62,17,58,157,62,96,249,184,248,68,132,25,77,126,251,27,23,159,200,138,77,181,78,29,130,168,209,104,88,26,68,212,36,220,174,189,99,123,72,245,185,
126,242,124,188,53,131,40,34,60,188,53,100,217,137,226,162,66,8,130,128,112,115,107,72,82,153,223,243,190,23,232,17,145,81,176,219,109,40,181,219,252,46,230,163,99,218,66,146,202,80,98,181,4,44,175,40,
174,26,13,228,188,129,64,85,110,247,122,109,50,136,161,88,144,185,28,5,249,23,161,211,233,225,144,36,204,159,55,27,165,118,27,134,189,52,28,221,123,244,196,144,129,79,251,149,223,176,23,135,163,255,179,
3,213,231,199,79,154,2,65,208,66,81,92,136,79,120,20,103,79,159,194,146,133,243,253,202,246,94,117,239,209,19,83,166,165,161,231,99,157,160,40,138,26,248,45,200,92,142,13,31,175,197,154,143,178,212,101,
43,62,223,62,169,35,70,188,58,26,118,187,13,225,225,243,0,0,75,22,205,199,145,131,7,248,253,66,53,222,190,49,13,61,17,17,17,53,10,113,241,137,24,49,106,52,114,179,179,17,102,52,98,203,103,159,194,233,
116,98,193,146,229,40,46,42,68,65,126,30,122,247,237,135,53,31,173,192,222,221,59,97,16,69,44,203,90,133,179,167,79,193,104,50,193,106,177,32,107,121,38,4,65,192,138,53,159,160,32,63,15,130,32,64,43,104,
145,62,99,26,0,96,65,230,114,56,164,50,56,157,78,24,77,38,216,109,182,187,218,215,91,5,114,222,32,178,184,168,16,178,236,172,244,253,17,145,81,208,233,244,234,50,222,0,205,27,4,121,123,131,10,242,243,
106,164,108,29,82,25,198,141,121,21,0,48,104,240,80,12,122,126,8,50,23,101,0,0,206,157,57,133,222,125,147,213,0,71,16,4,196,37,36,250,5,186,0,144,158,54,13,165,118,27,116,58,61,122,247,75,198,188,140,
69,120,121,232,115,106,176,116,175,6,62,63,4,123,119,239,68,239,190,201,216,190,237,11,245,249,220,236,243,232,222,227,73,191,0,172,87,159,126,56,119,230,148,223,251,247,238,222,165,46,19,23,159,136,180,
244,153,112,148,73,200,205,57,207,147,139,106,20,135,32,18,17,17,81,227,8,192,18,18,97,183,217,176,230,163,44,204,153,149,174,6,0,98,104,40,210,211,166,97,205,71,89,72,77,153,132,94,125,251,1,0,218,39,
117,196,246,109,95,32,115,81,6,82,83,38,161,123,143,39,213,158,175,220,236,243,200,152,55,27,115,102,165,35,34,42,10,6,81,84,3,166,212,148,73,152,51,43,253,174,131,47,65,16,176,110,227,103,232,213,183,
31,6,61,63,20,3,159,31,226,23,88,45,88,178,28,113,9,137,152,57,123,94,165,67,19,219,37,117,192,83,207,12,64,92,66,34,214,109,252,12,17,145,81,48,26,77,152,59,127,161,186,76,167,174,221,48,232,249,161,
181,82,206,146,84,134,112,115,107,245,241,225,67,7,208,219,83,166,238,253,235,136,115,103,78,87,249,126,89,118,98,243,166,141,112,58,157,136,75,168,153,33,127,17,145,81,112,72,18,54,111,218,136,167,158,
25,16,176,191,86,203,21,117,8,167,55,64,188,213,62,230,230,156,199,134,143,215,162,127,133,117,17,213,132,42,123,192,190,220,247,87,150,14,85,219,211,189,30,99,33,16,17,209,125,181,225,227,53,24,246,210,
8,124,186,229,75,156,61,125,10,89,203,51,221,23,224,101,101,106,79,82,113,81,33,162,99,218,186,3,133,246,29,208,202,108,70,167,46,93,1,192,61,252,204,220,26,237,146,58,160,125,135,142,136,136,138,82,47,
224,69,49,20,113,9,137,200,205,206,86,183,119,33,39,27,143,196,39,220,241,126,70,199,180,69,113,81,33,230,204,74,7,0,76,127,123,166,250,218,227,79,60,137,53,31,173,192,201,227,71,97,16,69,44,88,178,28,
123,119,239,244,123,255,185,51,167,213,224,65,150,157,104,151,212,1,27,62,94,171,6,34,197,69,133,232,221,39,89,125,174,38,232,244,122,140,120,117,12,0,160,119,223,126,88,178,48,67,125,205,81,38,161,32,
47,15,237,146,58,224,220,153,211,232,255,204,0,204,159,55,27,221,123,60,121,203,117,90,45,87,32,138,161,53,178,127,79,61,51,0,123,247,236,68,137,213,2,69,81,212,114,240,218,190,237,11,244,238,147,140,
115,103,78,163,83,215,110,56,121,252,24,12,183,217,182,213,98,193,227,183,57,6,162,123,10,192,42,75,147,216,66,171,69,80,16,59,201,168,106,65,65,65,104,217,178,37,211,170,82,131,194,52,193,212,80,234,
39,207,199,59,43,15,69,81,176,230,163,44,108,248,120,13,166,76,75,195,160,193,67,113,248,224,1,136,161,161,208,233,244,144,101,167,223,133,121,65,65,30,172,86,139,223,208,52,192,125,191,149,65,20,213,
0,73,13,66,116,122,12,26,124,179,183,234,110,19,74,68,199,198,162,184,168,72,125,124,41,63,79,13,6,186,247,120,18,113,9,137,234,118,42,27,130,216,46,169,3,30,127,226,73,136,98,40,140,38,19,14,123,238,
83,218,177,237,11,244,234,211,207,211,67,101,174,149,161,115,185,217,231,3,202,11,0,246,238,217,137,254,207,12,112,223,119,167,21,252,238,7,171,74,184,185,53,142,28,58,112,207,251,164,211,233,209,187,
111,50,34,34,163,208,255,153,1,16,69,17,79,61,51,0,25,243,102,251,5,173,41,211,210,96,16,69,244,238,147,140,249,243,102,223,54,241,73,184,217,12,71,153,196,239,23,170,241,246,188,202,30,176,102,26,13,
180,90,45,130,131,121,155,24,85,77,227,169,39,68,68,68,247,91,239,190,201,208,233,245,176,219,220,61,89,91,62,251,20,0,224,114,185,48,115,246,60,156,59,123,26,189,250,244,83,47,250,15,31,220,143,149,107,
62,129,78,167,195,201,227,199,16,29,27,139,13,31,175,197,185,51,167,240,218,216,241,152,50,45,13,71,14,30,64,187,164,14,200,90,158,137,220,156,243,72,73,77,195,152,55,198,67,81,20,116,238,218,13,249,121,
23,239,120,63,173,22,11,186,63,241,164,95,32,39,203,50,0,32,39,251,60,206,157,61,93,101,242,7,65,16,144,50,45,13,163,70,188,8,135,36,169,189,82,0,176,119,247,78,52,182,36,3,0,0,30,252,73,68,65,84,172,
219,248,57,74,172,22,191,123,160,106,130,236,116,86,26,120,85,12,112,70,188,58,166,90,219,142,142,137,133,209,104,66,65,222,189,223,163,214,187,95,50,182,111,221,162,222,147,38,8,2,118,238,63,140,204,
133,243,253,150,59,124,240,0,134,189,232,158,54,224,118,1,162,32,8,120,234,153,1,216,240,201,218,122,95,239,135,189,52,28,253,159,25,128,1,79,245,169,181,109,132,25,77,120,237,141,241,104,101,54,171,129,
184,183,188,107,67,171,112,51,94,27,59,30,58,189,30,130,160,69,113,81,161,95,64,93,155,250,63,51,0,41,169,51,208,241,209,71,106,109,27,140,174,136,136,238,209,169,83,23,184,13,110,131,234,129,252,188,
139,136,136,138,130,209,100,66,198,188,217,40,46,42,68,152,209,4,135,84,134,37,11,231,163,123,143,158,234,240,62,0,112,72,18,70,141,120,17,221,123,244,244,220,19,228,78,202,160,40,10,70,13,127,81,237,
141,242,237,73,26,50,240,105,117,88,218,168,225,47,194,32,138,119,188,159,222,0,207,27,60,181,239,208,209,175,23,43,45,125,22,140,70,119,82,16,163,201,132,205,155,54,170,239,85,20,197,29,252,117,233,6,
65,171,69,167,46,93,113,242,248,49,245,181,179,167,79,97,196,171,99,240,242,176,231,234,188,252,15,31,60,128,254,207,14,8,8,124,188,6,61,63,4,178,44,195,32,138,136,79,72,68,106,202,196,42,147,140,220,
137,94,125,250,249,245,86,42,138,130,195,7,15,160,119,223,100,88,45,22,191,0,117,211,23,219,241,118,218,212,74,215,19,151,144,128,17,112,127,38,221,123,60,137,195,7,15,220,113,22,196,186,54,119,254,194,
26,75,180,114,187,0,124,251,182,47,212,115,97,237,134,207,16,23,159,88,107,9,74,28,146,132,15,151,101,170,89,50,231,206,95,136,78,93,186,169,231,110,109,6,126,189,250,38,195,110,251,166,86,183,195,0,140,
136,136,136,26,133,18,171,165,202,180,230,37,149,12,53,244,94,232,249,6,56,234,5,167,236,172,178,39,199,247,162,252,110,2,8,69,81,240,242,208,231,208,189,71,79,184,20,23,70,13,127,17,58,189,123,158,170,
130,252,60,76,155,50,17,157,187,118,67,184,217,172,222,235,181,119,247,78,53,99,226,164,241,111,160,115,215,110,144,164,50,140,30,241,162,223,189,76,231,206,158,134,209,100,130,67,146,106,172,92,29,82,
25,210,211,166,85,250,218,134,143,215,170,219,218,240,241,90,28,57,116,64,205,106,152,158,54,13,14,169,12,0,144,185,48,195,111,46,174,204,133,243,107,36,251,161,32,8,106,176,237,107,205,71,89,106,202,
124,233,227,50,181,14,140,26,254,130,186,172,239,189,117,103,207,156,242,75,170,178,119,247,206,106,13,163,188,223,150,44,204,64,169,221,86,235,201,66,100,217,233,23,108,149,88,44,136,136,138,170,181,
0,76,150,157,126,231,86,152,209,84,163,83,63,84,85,151,210,210,103,97,246,204,183,177,44,107,21,3,48,34,34,34,162,187,161,40,174,26,25,230,86,243,251,165,248,5,0,190,23,155,37,86,75,64,2,13,223,96,160,
212,110,243,11,26,253,230,223,122,105,56,214,172,92,81,227,251,90,85,47,139,111,192,91,113,142,53,223,247,84,12,144,106,123,223,28,146,164,6,134,190,101,235,187,172,111,185,249,46,223,144,220,143,32,49,
204,104,66,116,108,44,150,44,154,95,171,219,137,136,140,194,83,207,12,64,124,66,162,103,104,240,233,90,221,222,136,87,199,224,200,161,3,40,177,90,32,134,134,214,234,182,152,97,131,234,133,136,200,40,12,
123,105,120,141,174,115,252,196,41,119,53,52,132,136,136,26,15,135,36,169,115,120,53,102,189,251,38,99,105,214,71,56,119,230,52,231,173,162,90,13,190,22,102,46,199,252,121,179,107,61,96,149,164,50,28,
57,120,0,135,15,30,112,79,187,16,159,88,107,219,138,139,79,68,184,217,92,105,111,56,3,48,106,180,116,58,253,93,103,147,170,50,168,139,138,130,32,212,94,130,16,239,36,151,85,125,17,86,149,93,105,230,123,
243,96,16,69,24,68,17,51,223,155,119,79,65,43,3,76,34,34,2,220,67,230,198,141,121,181,70,83,207,19,85,22,124,45,89,56,191,214,123,163,0,247,143,39,185,57,238,172,155,39,143,31,173,213,97,150,227,39,77,
65,152,209,132,165,89,31,97,105,214,71,0,128,165,89,31,213,218,117,214,45,211,208,19,85,87,85,245,167,186,245,170,28,229,126,203,235,116,122,68,68,69,193,106,185,2,135,36,65,167,211,195,104,50,249,13,
97,136,142,137,133,213,98,129,44,59,17,110,54,195,32,134,34,55,251,188,239,74,81,94,94,94,107,117,251,65,157,14,3,159,31,130,217,51,223,174,164,145,50,86,121,252,209,177,177,8,9,17,212,255,223,233,254,
245,238,155,140,97,47,143,128,163,204,61,166,93,81,92,152,52,254,13,86,194,187,172,175,76,19,76,245,189,61,109,236,245,241,78,207,71,158,159,196,250,124,103,215,98,53,21,124,45,200,92,142,197,11,230,171,
201,106,106,83,184,217,172,38,80,17,4,1,113,241,9,176,90,44,181,118,140,47,15,245,79,90,115,250,252,223,48,118,244,200,90,251,76,120,15,24,213,59,6,81,196,194,204,15,112,246,204,41,12,26,60,20,151,242,
243,240,249,167,27,176,48,243,3,12,30,208,31,178,236,132,65,20,49,47,99,49,158,77,238,165,246,54,229,230,156,199,132,73,41,72,79,155,234,151,245,232,78,233,116,122,232,244,122,104,181,2,12,98,40,236,54,
27,74,237,54,196,37,36,66,113,185,212,241,227,178,211,233,215,85,109,16,69,132,155,91,67,118,6,222,144,29,17,25,5,157,94,15,171,229,74,149,219,21,4,1,209,177,109,225,144,202,170,220,255,206,93,187,97,
208,224,161,24,245,242,11,53,146,57,234,78,143,217,43,46,193,61,12,160,184,176,80,221,143,112,179,25,82,153,132,112,179,25,130,86,235,31,12,251,148,129,119,221,68,68,68,212,48,188,50,106,12,204,230,214,
88,180,244,3,245,185,156,243,95,97,236,152,145,181,178,189,206,93,31,195,176,151,134,195,110,179,33,50,234,15,216,179,107,7,86,175,204,106,52,229,201,0,140,234,157,23,94,26,129,189,187,119,98,243,166,
141,16,4,1,235,62,221,140,207,63,221,128,195,7,247,163,251,147,61,177,125,235,22,116,239,209,19,135,15,238,135,162,40,24,52,120,40,198,142,30,9,89,118,66,146,36,116,239,209,243,158,78,210,136,168,40,164,
164,206,64,113,225,215,112,72,18,58,119,237,134,156,236,243,80,92,46,53,75,85,122,218,52,24,196,80,76,152,148,130,177,99,70,194,32,138,216,244,197,118,156,56,118,212,61,52,49,234,15,56,114,112,63,0,160,
93,82,71,204,72,159,133,61,187,119,224,181,177,19,170,220,238,188,140,69,106,6,38,67,104,40,82,167,76,12,88,198,155,130,181,38,131,175,59,57,102,0,152,57,123,30,244,158,64,42,37,117,6,210,167,79,69,113,
81,33,134,189,52,2,162,40,66,146,36,40,46,23,102,164,207,194,179,201,189,1,0,131,6,15,69,255,103,7,226,196,177,191,226,9,207,231,227,123,243,57,17,17,17,221,61,239,247,109,109,153,61,243,237,74,71,252,
212,150,245,235,214,96,253,186,53,247,173,60,59,36,254,39,3,48,106,90,194,76,38,196,37,36,162,115,151,110,0,0,71,89,25,116,122,61,246,238,222,137,148,212,25,106,0,54,123,230,91,8,51,154,16,110,110,141,
121,25,139,212,247,215,68,166,37,81,20,49,196,19,112,24,68,17,178,211,137,37,11,231,67,16,4,108,221,185,47,96,249,246,73,29,113,226,216,81,181,113,242,77,95,218,255,217,1,120,59,109,42,114,179,207,35,
204,104,194,182,93,129,239,143,142,137,133,211,233,196,124,207,36,131,43,215,174,71,152,209,20,208,83,20,29,219,182,214,110,16,173,206,49,27,68,17,70,211,239,48,106,248,11,0,110,222,235,182,196,51,231,
139,36,73,106,25,44,204,92,142,232,152,88,20,228,231,161,255,179,3,213,94,187,125,187,119,34,45,253,93,6,96,68,68,68,212,36,49,0,163,122,231,82,126,30,46,229,231,5,252,242,225,144,36,8,130,128,206,93,
187,65,113,185,212,97,122,14,169,12,111,167,77,173,209,108,60,57,62,195,231,20,69,81,131,58,247,4,152,174,74,3,40,223,33,119,249,249,23,213,255,199,39,36,98,246,59,238,160,164,212,110,171,116,114,191,
246,29,58,34,38,182,173,26,184,41,46,23,194,205,173,3,2,176,82,219,55,106,143,84,77,171,206,49,199,39,60,138,130,188,139,126,239,25,246,242,8,192,19,128,249,14,85,148,36,9,130,86,139,112,179,25,138,203,
165,246,218,89,45,22,132,155,205,208,233,244,53,222,147,119,191,116,236,248,200,61,189,191,58,147,250,114,27,77,111,27,68,68,196,0,140,168,78,28,58,176,31,11,151,126,128,7,117,58,228,102,103,35,50,42,
74,13,198,182,111,251,2,19,38,165,224,195,101,153,234,242,159,111,218,136,89,179,223,87,123,84,100,217,137,19,199,238,109,166,244,202,238,227,186,21,171,213,130,86,102,179,250,56,220,220,26,151,61,1,76,
113,97,161,154,64,68,16,4,191,9,51,125,3,153,232,152,216,219,38,211,40,42,42,68,231,46,221,2,238,175,170,9,213,57,102,73,42,243,203,252,24,25,21,133,220,243,95,221,12,220,92,129,193,169,221,102,131,209,
100,130,32,8,80,20,5,6,207,48,197,198,18,124,17,17,17,17,213,72,0,166,213,106,209,188,121,115,4,5,49,83,61,85,45,40,40,8,130,32,220,243,122,138,11,11,177,65,114,7,89,165,118,27,38,141,123,29,157,187,118,
67,76,108,44,206,158,190,153,109,103,239,174,29,176,90,174,248,245,194,108,222,180,17,197,69,133,136,79,72,132,36,73,40,242,4,39,75,22,206,135,67,42,171,147,114,56,113,236,40,22,46,253,0,63,201,50,12,
6,17,145,145,81,106,0,230,29,58,121,248,224,126,68,199,196,86,218,131,150,155,125,30,175,141,157,128,148,105,105,56,113,252,24,98,98,99,241,229,214,45,1,189,122,155,55,109,196,178,21,171,177,181,107,55,
28,58,184,31,87,61,61,85,247,26,112,86,87,65,222,69,56,101,39,82,166,165,193,106,181,160,255,179,3,49,251,157,183,110,249,30,69,81,176,121,211,70,204,156,243,62,206,157,57,141,238,79,60,137,237,91,183,
240,228,33,34,34,162,166,29,128,85,76,147,24,27,27,11,131,193,192,0,140,110,27,128,133,132,132,224,218,191,190,175,244,245,234,166,11,117,58,127,132,211,249,163,250,216,110,251,6,159,127,186,33,96,57,
151,203,133,28,159,30,23,175,156,243,95,5,60,95,84,248,245,93,29,83,209,215,95,67,42,251,78,221,247,245,235,86,195,233,116,170,143,223,154,62,21,229,229,229,144,202,190,195,226,5,127,65,121,121,57,236,
182,111,240,234,75,195,240,196,147,61,81,244,245,215,248,100,221,106,8,130,22,229,229,229,216,179,107,7,178,207,127,133,46,221,30,195,234,149,31,98,253,186,53,144,202,190,243,91,23,0,76,28,251,26,58,119,
123,12,209,49,177,40,42,252,26,206,31,127,12,40,63,169,172,12,47,13,30,136,248,132,71,17,29,219,22,138,226,130,229,202,255,220,115,90,214,234,30,179,203,229,194,123,233,111,33,62,49,17,225,230,214,152,
54,121,130,58,20,180,226,123,214,175,91,13,169,76,66,121,121,57,86,173,248,16,113,9,137,136,79,120,20,171,86,126,88,43,61,120,119,130,105,232,169,62,99,26,250,166,93,30,196,250,76,141,183,61,15,8,192,
42,122,232,55,15,0,229,191,0,215,89,120,116,11,215,129,107,87,171,126,249,223,66,13,248,182,204,209,160,14,73,150,157,126,195,227,42,166,132,247,246,190,249,222,39,229,125,223,151,85,244,236,148,218,109,
149,6,148,190,61,121,178,236,196,222,93,59,110,187,127,138,162,224,236,153,83,56,91,131,243,112,84,247,152,189,203,186,123,220,252,123,221,42,190,167,226,227,220,236,243,247,61,240,242,214,73,34,34,34,
162,251,133,221,91,68,68,68,68,68,68,12,192,168,177,96,143,3,177,46,18,17,17,17,185,169,67,16,53,26,22,6,213,158,135,126,235,190,240,109,104,195,17,169,105,6,94,108,15,233,126,170,88,255,26,123,125,188,
221,241,53,181,242,32,214,103,106,252,245,129,105,232,169,94,95,8,19,17,17,17,17,53,38,28,130,72,68,68,68,68,68,196,0,140,136,136,136,136,136,136,1,24,17,17,17,17,17,17,221,5,222,3,70,68,116,143,78,157,
186,192,109,112,27,68,68,68,119,26,128,49,13,11,17,17,219,67,170,127,245,79,211,196,207,55,13,207,79,98,125,166,70,85,31,216,3,70,181,106,199,129,99,44,132,70,228,169,39,187,178,16,136,136,136,136,238,
1,3,48,170,117,45,180,90,4,5,241,118,195,134,44,40,40,8,45,91,182,100,65,16,17,17,17,49,0,163,250,172,153,70,3,173,86,139,224,96,86,181,134,76,227,249,28,137,168,254,8,51,154,208,255,217,1,184,170,40,
88,189,50,235,158,214,213,187,111,50,0,96,239,238,157,152,48,41,5,123,119,239,68,113,81,225,61,173,115,194,164,20,172,255,120,13,28,146,196,15,139,136,136,1,24,17,17,81,195,246,231,212,52,156,56,126,12,
5,121,23,239,121,93,70,147,73,253,127,68,100,20,116,122,253,61,175,51,34,50,10,130,192,31,110,136,136,42,226,184,48,34,34,162,6,38,204,104,66,68,228,31,96,181,92,129,36,149,1,0,12,162,136,184,132,68,24,
68,209,111,89,157,78,143,184,132,68,132,25,77,126,207,123,151,143,136,140,170,116,27,113,9,137,136,75,72,132,32,8,149,62,95,89,192,85,213,250,12,162,88,229,118,136,136,154,26,246,128,17,17,17,53,48,125,
250,37,67,208,10,136,79,72,132,236,116,66,175,215,99,230,236,247,113,246,204,41,188,242,234,24,28,62,116,0,219,183,110,129,65,20,177,108,197,106,156,59,125,10,97,38,19,172,150,43,200,90,150,9,65,16,240,
209,218,245,200,201,62,15,65,16,16,110,110,141,147,199,143,170,235,127,225,165,225,176,219,108,208,233,245,120,109,236,4,140,26,254,2,0,247,176,66,89,118,34,68,16,144,146,58,3,67,6,244,7,0,188,50,106,
12,30,239,209,19,71,14,238,71,136,32,248,13,95,12,51,154,48,47,99,17,102,207,124,155,31,28,17,17,3,48,34,34,162,134,103,245,202,44,244,238,155,172,222,251,149,150,62,11,155,55,109,196,222,221,59,161,211,
233,177,114,221,122,108,223,186,5,237,147,58,98,251,214,45,216,188,105,35,4,65,192,166,47,182,99,205,202,44,180,239,208,17,57,217,231,213,160,104,89,214,42,191,245,231,230,100,99,253,186,53,234,107,17,
145,81,40,46,42,196,146,133,243,213,101,226,19,30,85,159,239,221,55,25,131,7,244,135,162,40,126,235,49,154,76,152,48,41,5,179,103,190,125,207,247,148,17,17,49,0,35,34,34,162,122,33,220,220,26,225,230,
214,106,50,13,71,89,25,12,162,136,118,73,29,16,110,110,141,206,93,186,1,128,218,171,21,23,159,136,220,236,243,62,1,215,121,191,245,73,101,101,234,255,139,139,10,17,151,144,136,226,162,66,140,25,59,30,
162,24,10,163,209,132,112,179,25,58,189,30,209,49,177,176,219,108,1,193,23,224,238,49,83,20,5,86,203,21,126,72,68,68,12,192,136,136,136,26,135,156,236,175,80,98,177,96,239,238,157,126,207,23,228,231,161,
196,106,9,200,146,88,92,84,232,119,79,86,171,112,51,74,172,22,245,177,111,82,142,112,179,25,135,15,238,71,187,164,142,136,140,140,194,164,241,111,0,0,62,253,98,187,59,168,179,219,16,17,85,249,253,93,179,
103,190,141,222,125,147,241,218,216,9,126,189,103,68,68,12,192,136,136,136,168,193,58,114,240,0,230,101,44,130,209,100,66,126,94,30,98,98,99,177,122,101,22,14,31,220,143,143,214,174,71,136,32,224,220,
153,211,136,137,109,139,245,235,214,224,196,177,163,120,101,212,24,56,28,18,12,6,17,49,177,109,253,2,176,78,93,186,193,233,116,194,104,52,193,32,134,162,32,63,15,17,145,81,8,51,253,14,157,187,118,67,92,
252,205,36,28,14,73,194,137,99,71,49,55,99,17,206,157,57,13,65,16,176,121,211,70,0,128,211,233,196,135,203,150,96,217,138,213,232,220,181,27,78,28,59,202,15,139,136,154,60,53,11,162,134,127,252,171,133,
63,106,92,154,74,61,101,61,166,134,112,158,165,79,159,170,254,255,114,81,33,198,142,30,9,69,81,16,25,21,133,115,167,79,65,3,224,123,73,194,168,225,47,224,123,73,66,124,66,34,114,207,127,5,13,128,159,100,
39,134,12,232,15,71,89,25,114,115,206,99,212,240,23,176,119,215,78,104,0,100,46,156,143,113,163,71,226,39,167,19,165,118,27,198,141,30,169,110,227,157,233,83,17,17,25,133,35,7,247,99,242,184,215,113,185,
176,16,26,0,115,102,190,141,172,101,75,32,138,34,46,229,93,84,215,243,189,84,134,171,138,130,212,41,111,162,212,102,171,145,243,177,58,127,90,65,64,76,76,108,192,243,70,163,9,241,9,137,234,95,197,101,
68,81,68,124,66,34,180,130,112,203,245,207,154,61,175,201,126,175,71,70,70,33,50,50,170,202,215,227,19,18,171,124,45,38,38,182,202,178,237,211,55,25,237,147,58,54,185,239,23,254,53,205,235,98,246,128,
17,17,17,53,64,5,249,121,126,143,75,237,54,108,240,36,206,240,229,144,36,181,71,202,151,162,40,1,67,22,1,168,201,50,170,122,173,170,100,26,37,22,11,214,248,12,117,244,93,206,33,73,117,58,33,179,65,12,
197,204,57,239,99,64,114,111,191,231,123,247,75,70,239,190,201,176,219,108,158,253,42,67,122,218,52,132,25,77,152,57,231,125,132,155,205,40,46,44,68,124,226,163,88,191,110,53,178,150,101,86,186,254,232,
216,182,77,174,190,197,37,36,98,230,236,247,33,203,78,79,25,139,152,61,243,109,156,244,244,106,246,238,155,140,94,158,123,16,197,212,80,172,94,153,133,35,7,247,3,0,198,79,74,65,156,39,99,167,78,175,199,
145,67,7,2,234,106,152,201,196,147,154,154,12,6,96,68,68,183,161,213,106,209,188,121,115,4,5,113,234,68,170,61,65,65,65,1,115,110,81,205,219,187,123,167,95,160,8,0,19,38,167,224,220,153,83,24,55,250,21,
40,138,2,131,40,98,230,236,247,209,255,217,129,216,190,117,203,45,215,215,202,108,134,226,82,80,106,183,65,16,4,68,199,182,133,36,149,161,196,98,81,3,23,223,132,39,173,204,102,200,78,103,64,64,170,211,
233,17,17,21,5,197,229,66,65,126,30,162,99,98,97,181,88,252,2,30,157,94,15,197,165,64,81,92,16,197,80,232,244,122,20,228,93,244,75,128,210,202,108,134,40,134,2,128,223,118,239,133,32,8,152,57,251,125,
164,167,77,85,215,25,29,19,139,5,75,63,192,144,188,254,112,72,18,198,140,157,128,151,135,14,10,56,174,241,147,82,96,52,153,48,124,232,115,119,180,189,232,216,182,234,182,188,199,228,61,86,239,156,118,
165,118,155,186,124,68,100,84,192,143,18,192,205,137,197,189,137,96,116,122,189,250,217,120,143,195,123,79,164,213,98,65,68,84,148,223,231,231,187,63,0,96,181,92,169,211,31,19,136,1,24,17,81,147,20,27,
27,11,131,193,192,0,140,106,61,0,11,9,9,193,141,159,127,96,97,212,33,157,78,143,206,93,31,195,146,5,243,213,64,198,33,73,56,121,252,40,122,245,77,190,101,0,214,46,169,35,70,140,26,131,201,227,94,7,0,204,
205,88,164,246,174,137,161,161,72,157,50,17,35,94,29,131,205,250,141,106,79,209,188,140,197,152,54,229,77,191,139,248,136,200,40,76,73,157,129,115,103,78,193,96,16,161,211,183,68,187,164,14,112,56,36,
181,167,104,194,164,20,156,56,126,12,225,102,51,218,37,117,68,169,237,27,72,146,132,153,179,223,199,144,1,253,33,203,78,180,75,234,136,180,244,89,216,187,123,7,116,186,192,224,236,110,181,235,208,17,178,
236,244,11,232,10,242,243,80,144,119,17,221,123,244,196,230,77,27,97,183,219,16,151,240,168,218,235,229,213,185,107,183,59,154,3,78,16,4,204,205,88,132,35,7,15,32,215,167,140,207,157,57,133,49,99,39,32,
107,217,18,0,192,176,151,134,99,178,39,33,76,167,174,143,161,115,151,174,72,79,155,230,183,174,185,25,139,96,181,92,129,162,40,232,213,55,25,89,203,150,96,97,230,7,24,226,153,50,161,149,217,140,180,119,
222,197,144,1,253,177,96,233,7,200,205,62,15,171,229,10,162,99,218,162,32,255,162,58,103,222,138,181,235,81,106,183,161,184,168,16,6,49,52,224,24,137,24,128,17,17,213,48,163,225,65,0,46,224,6,203,130,
106,209,13,224,198,53,22,67,109,235,221,55,89,77,34,114,238,236,105,228,158,255,10,118,219,55,106,111,138,26,96,228,93,196,160,193,67,171,21,124,201,178,19,209,49,177,144,157,78,100,204,155,13,0,88,177,
118,61,194,140,38,108,254,108,35,122,247,77,198,201,99,71,17,29,19,11,169,204,191,119,197,27,128,41,46,23,182,111,221,162,6,102,118,251,55,88,152,249,1,54,172,91,3,157,78,143,232,216,182,152,61,243,109,
132,191,60,2,138,203,165,6,27,130,32,160,93,135,142,56,114,112,63,6,13,30,130,201,227,95,175,241,57,215,194,205,173,145,115,254,171,128,231,115,115,178,209,42,220,12,0,72,157,242,38,82,82,103,224,181,
177,227,241,225,178,76,28,57,184,95,237,181,171,110,79,156,160,213,170,193,151,119,8,236,160,193,67,144,62,125,42,74,237,54,20,228,229,161,87,223,100,204,153,249,54,82,82,103,32,204,104,66,169,221,134,
222,125,251,97,195,199,107,3,214,23,29,211,22,155,55,109,244,15,28,243,46,162,93,135,142,56,121,236,40,122,251,4,216,122,125,75,117,89,239,4,230,89,203,50,209,189,71,79,148,218,109,72,157,50,177,73,156,
31,222,222,62,111,79,236,237,150,243,85,92,88,168,246,216,122,197,37,36,86,250,60,3,48,47,222,105,78,68,183,163,225,113,18,177,62,214,241,241,105,238,162,60,52,85,47,155,147,125,30,251,60,23,247,146,84,
6,89,118,194,104,250,29,116,122,189,223,69,98,120,235,214,112,58,157,149,174,67,167,215,35,37,53,13,39,142,29,133,252,147,123,153,118,29,58,34,58,182,45,150,174,112,79,106,173,40,46,132,183,110,141,147,
199,143,98,194,164,20,24,66,69,244,234,151,140,125,123,118,6,172,115,239,158,157,48,132,134,98,217,138,213,200,201,254,10,89,203,50,81,98,181,160,184,168,16,237,58,116,132,209,104,194,137,99,71,161,92,
117,247,102,21,228,95,84,215,225,112,72,208,106,5,64,3,196,37,60,138,226,226,194,26,175,51,118,187,13,237,146,58,4,172,87,157,190,64,227,222,143,212,148,137,104,21,110,70,74,234,12,232,245,122,108,223,
182,5,130,160,173,246,254,12,26,60,20,58,157,30,243,231,205,6,52,238,139,252,184,132,71,145,246,206,44,117,25,71,89,25,160,1,182,111,219,130,254,207,14,192,230,207,54,34,220,220,218,61,151,93,133,237,
164,166,188,137,65,207,15,197,248,73,41,200,90,158,137,115,103,78,97,195,39,107,49,226,213,49,56,121,252,40,186,247,232,137,81,35,94,80,223,231,45,87,135,67,114,15,7,214,184,239,77,171,108,221,117,90,
159,235,144,33,52,20,11,50,63,64,65,254,69,232,116,122,56,164,50,204,159,55,59,224,7,10,223,229,188,50,23,206,71,113,81,33,116,58,61,210,210,103,193,32,134,170,195,101,243,243,46,98,206,172,183,239,105,
223,30,239,209,179,225,245,62,106,110,23,128,17,17,17,17,53,114,165,118,91,192,196,211,69,133,95,35,46,33,17,39,143,223,76,147,255,72,133,201,170,125,41,46,5,47,15,125,14,75,179,86,161,83,151,110,56,121,
252,40,114,179,207,35,58,38,22,147,39,188,17,176,252,246,109,95,160,123,143,158,104,159,212,17,153,85,204,135,182,225,227,53,216,240,241,26,140,121,99,60,70,188,58,6,153,139,230,99,239,238,157,232,212,
165,43,194,205,173,253,222,87,213,176,194,130,252,139,136,136,140,170,241,30,176,220,236,175,144,246,246,44,232,116,55,131,84,65,16,208,185,107,55,140,27,51,210,111,217,18,171,5,251,118,239,196,35,241,
137,216,190,109,11,206,157,57,133,254,207,12,196,246,109,91,110,187,157,237,219,182,64,118,58,49,115,246,251,24,55,198,125,63,158,123,40,224,146,128,222,152,189,187,118,98,229,218,245,144,101,25,219,183,
125,81,69,121,228,33,125,134,59,201,202,202,53,235,49,100,96,127,117,24,225,227,61,122,162,184,168,208,111,40,104,101,229,42,203,78,180,137,136,106,82,231,136,67,42,83,63,215,65,131,135,98,208,243,67,
145,185,104,254,45,151,243,181,52,107,21,118,108,251,162,90,159,121,116,76,172,122,207,163,36,73,40,181,219,96,16,69,132,135,183,118,223,139,231,153,30,163,93,82,71,12,123,113,56,28,101,101,176,90,221,
247,225,233,116,122,68,68,70,193,110,183,5,4,136,245,29,3,48,34,34,34,106,116,116,122,61,70,188,58,230,230,5,123,37,89,29,189,50,230,189,135,153,179,223,87,47,6,59,117,233,134,112,115,107,140,27,243,74,
229,1,152,226,130,44,59,145,154,50,17,203,178,86,161,184,168,16,185,57,231,49,102,236,4,76,153,150,134,147,199,143,33,58,38,22,219,183,185,135,20,238,221,189,3,43,215,172,199,217,51,167,42,189,200,247,
110,207,155,12,194,27,80,156,60,126,20,195,94,26,1,0,213,10,170,246,237,222,137,41,211,102,96,199,182,45,8,51,154,176,230,163,172,26,186,32,151,144,185,112,62,86,174,93,143,237,219,182,64,113,41,234,253,
113,222,125,238,213,39,25,151,139,11,161,211,235,49,232,249,161,248,112,185,59,131,228,135,203,150,96,89,214,106,244,234,155,140,115,103,78,169,199,85,217,241,200,78,39,246,122,130,183,49,111,76,64,230,
162,249,216,188,105,163,231,152,190,128,83,118,66,43,8,216,187,123,39,100,217,137,156,236,175,48,232,249,161,120,121,216,160,74,247,123,252,196,20,20,20,228,65,175,211,195,110,183,169,193,227,142,109,
91,48,97,98,10,102,87,163,71,230,240,193,253,232,213,39,25,227,39,166,160,196,106,129,213,114,37,32,128,111,204,36,73,66,187,246,29,170,189,124,68,100,20,100,217,89,173,224,11,0,102,206,126,31,103,61,
245,226,200,193,3,112,72,101,152,48,49,5,86,171,197,29,92,217,108,200,92,52,31,143,63,241,36,244,122,189,59,155,166,231,115,156,59,127,49,10,242,46,66,20,69,72,146,84,105,144,200,0,140,136,136,136,168,
14,56,164,178,128,123,118,188,23,247,149,41,200,207,195,168,17,47,32,46,225,81,247,60,103,135,14,168,193,66,101,210,211,166,2,112,247,166,77,26,255,186,250,252,228,241,175,163,115,215,110,106,102,61,217,
233,84,3,24,73,146,176,163,138,158,26,111,48,18,110,54,35,107,121,166,95,112,98,181,92,193,37,159,222,159,138,199,176,119,247,78,40,138,75,253,255,217,51,167,208,189,71,207,91,222,191,115,55,182,111,219,
130,156,236,175,208,190,67,71,8,90,1,25,243,222,83,247,211,110,179,225,228,241,163,158,12,130,18,94,30,250,156,122,145,92,98,181,96,200,192,254,104,215,161,35,194,195,205,144,101,39,36,169,44,96,253,190,
199,145,49,239,61,68,199,180,85,131,53,135,84,134,118,73,29,1,0,57,217,55,239,69,203,205,201,134,40,134,86,153,149,208,187,79,118,155,13,147,125,62,167,28,79,207,166,239,103,60,118,244,43,149,126,198,
14,73,194,240,97,207,161,93,146,123,40,168,189,129,245,180,220,235,143,23,189,251,38,99,73,21,189,182,6,49,20,75,179,86,169,143,199,141,25,137,232,152,182,106,198,73,239,251,195,140,38,200,178,179,210,
233,48,0,224,114,81,145,95,192,150,62,195,125,127,163,78,167,199,202,181,235,145,185,104,62,246,237,222,9,163,233,230,143,10,35,94,117,39,102,241,62,254,98,199,94,100,45,95,82,35,73,103,24,128,17,17,17,
17,221,33,69,81,42,237,165,184,85,34,0,135,36,85,251,254,18,223,224,198,59,68,202,187,254,202,130,188,184,248,68,200,206,31,171,236,197,42,173,98,8,85,152,103,226,232,140,121,239,249,45,91,241,189,21,
143,163,170,11,221,123,85,98,181,248,29,175,239,113,231,230,156,175,178,103,72,150,157,183,45,91,223,227,168,248,249,21,228,231,5,4,148,130,32,184,135,198,45,252,75,149,235,172,106,159,70,188,58,38,160,
119,176,226,114,21,183,119,171,128,188,177,202,205,62,127,203,94,212,202,134,32,74,82,25,6,37,12,245,251,113,193,110,179,33,45,125,86,149,245,210,55,168,54,136,34,198,188,49,1,0,96,52,153,170,156,154,
35,60,220,140,136,168,63,32,46,193,157,80,199,110,183,169,189,200,12,192,136,136,136,136,106,80,80,80,16,110,220,104,56,41,73,151,102,173,130,163,172,172,90,195,221,124,141,159,152,130,112,179,25,233,
105,83,27,204,175,250,117,197,59,233,243,142,109,91,238,168,167,47,34,50,10,227,39,165,160,184,176,176,218,67,228,154,98,125,150,157,206,187,30,190,90,144,127,17,97,70,147,154,160,165,58,1,145,111,253,
30,246,226,8,92,46,46,196,230,77,27,17,17,25,133,185,243,23,121,150,113,249,7,196,103,79,195,41,223,204,58,218,208,4,3,40,119,255,49,237,23,17,221,78,163,110,39,202,111,254,203,246,144,120,222,221,231,
227,171,242,124,20,66,66,240,139,171,225,4,36,227,198,188,122,87,159,101,230,162,140,38,84,7,238,204,222,221,187,176,119,247,174,59,46,155,226,162,34,159,207,163,230,203,52,36,36,184,17,212,103,77,53,
203,71,227,25,170,248,154,207,231,178,19,165,118,27,102,207,122,27,11,51,63,192,222,221,187,80,144,127,81,29,78,90,245,58,53,234,107,178,44,35,46,62,81,189,247,204,233,116,2,208,160,184,168,8,225,225,
173,241,120,143,158,200,205,62,143,195,7,15,96,216,75,35,48,126,98,10,78,30,63,134,78,93,186,86,56,103,238,191,91,213,7,111,0,198,217,109,168,86,104,181,90,52,111,222,156,19,216,54,112,65,65,65,85,14,
3,104,36,174,123,218,65,13,219,67,170,111,254,45,212,128,111,203,28,141,246,216,238,244,124,12,105,96,1,24,53,29,66,72,72,131,175,207,14,169,44,96,66,235,170,150,75,157,50,201,239,57,239,61,143,71,14,
30,64,65,94,30,226,19,18,17,29,211,22,178,236,172,114,157,233,105,211,224,240,185,39,112,195,199,107,208,169,107,55,136,98,40,178,150,103,66,167,211,3,112,247,146,141,29,51,18,157,187,118,67,177,78,15,
135,36,97,236,152,145,232,222,163,167,39,131,233,177,134,82,31,110,120,3,176,235,0,56,245,35,213,138,216,216,88,24,12,6,6,96,141,32,0,11,9,9,193,141,95,254,217,88,15,241,134,183,81,100,123,72,84,191,207,
199,22,205,181,248,197,229,194,213,171,60,85,169,254,104,214,44,8,15,180,104,222,224,235,179,59,245,127,94,181,150,187,85,54,200,82,187,237,150,153,71,189,42,110,75,81,20,28,57,120,192,39,208,187,153,
96,165,196,106,241,155,112,187,54,239,119,172,197,250,112,29,192,141,96,79,101,80,190,249,198,246,195,239,126,103,250,53,79,33,170,73,70,81,7,64,185,217,249,78,13,211,117,224,198,245,198,121,104,54,155,
237,26,0,23,128,171,158,47,72,23,219,67,170,111,26,99,47,88,101,189,95,213,61,31,245,15,62,136,31,101,25,215,174,93,103,229,160,122,113,177,221,82,175,131,70,163,97,125,166,219,213,7,5,192,245,32,79,197,
248,233,135,31,127,252,111,22,25,17,53,185,216,242,70,249,255,3,240,51,128,95,60,255,178,61,164,122,27,176,84,49,100,175,209,28,71,117,207,199,224,224,102,48,252,250,87,120,240,129,22,8,14,110,198,202,
65,247,69,112,179,102,120,160,69,115,24,126,253,43,132,4,7,179,62,179,62,84,183,62,40,193,158,74,225,12,17,154,231,219,109,182,4,147,201,196,18,36,162,166,19,128,93,191,241,127,1,252,19,192,79,112,255,
66,249,35,219,67,170,207,30,106,4,65,88,77,157,143,186,7,90,64,247,64,11,86,10,98,125,166,134,82,31,156,0,126,105,6,64,11,32,228,59,199,15,223,182,8,105,246,232,245,107,215,126,163,215,235,89,74,68,212,
232,253,237,98,222,119,87,190,249,54,227,250,245,27,223,0,248,1,238,17,1,154,239,28,63,252,131,237,33,17,207,71,34,214,103,170,169,250,240,63,223,252,35,227,250,245,27,127,7,224,104,6,119,42,122,13,0,
77,243,22,15,148,94,83,126,249,195,245,107,215,126,229,116,58,193,138,65,68,141,145,205,102,195,255,92,177,124,231,186,161,89,242,253,63,157,23,1,124,11,64,246,124,65,222,96,123,72,196,243,145,136,245,
153,106,161,62,124,7,192,169,1,208,28,192,131,0,126,3,224,33,0,198,72,243,239,134,221,184,118,53,94,113,253,242,239,44,58,34,106,76,66,4,193,30,28,162,205,191,98,251,246,19,69,185,90,2,224,31,0,28,0,254,
5,247,16,145,22,108,15,137,120,62,18,177,62,83,45,213,7,89,3,119,15,152,0,224,1,0,122,79,197,248,53,128,150,158,231,4,0,205,192,89,0,137,168,225,42,135,59,245,171,2,247,13,176,78,184,135,132,124,15,224,
71,207,151,163,203,179,44,219,67,34,158,143,68,172,207,84,107,245,193,59,245,116,51,0,33,112,223,15,214,194,243,215,220,243,56,24,128,119,18,39,86,10,34,106,168,13,226,13,120,166,221,192,205,140,84,222,
236,84,87,113,115,158,22,182,135,68,60,31,137,88,159,169,214,234,195,255,7,0,115,200,35,166,99,238,206,0,0,0,0,73,69,78,68,174,66,96,130,0,0};
const char* GlobalEditor::globalEditor_864x144_png = (const char*) resource_GlobalEditor_globalEditor_864x144_png;
const int GlobalEditor::globalEditor_864x144_pngSize = 16274;
//[EndFile] You can add extra defines here...
//[/EndFile]

@ -24,6 +24,9 @@
#include "JuceHeader.h"
#include "PluginProcessor.h"
#include "DXComponents.h"
#include "AlgoDisplay.h"
class DexedAudioProcessorEditor;
//[/Headers]
@ -37,8 +40,8 @@
//[/Comments]
*/
class GlobalEditor : public Component,
public ComboBoxListener,
public SliderListener
public SliderListener,
public ButtonListener
{
public:
//==============================================================================
@ -54,13 +57,22 @@ public:
void updateVu(float v);
void updateDisplay();
void repaintMsg();
DexedAudioProcessorEditor *editor;
void setMonoState(bool state);
ProgramSelector *programs;
//[/UserMethods]
void paint (Graphics& g);
void resized();
void comboBoxChanged (ComboBox* comboBoxThatHasChanged);
void sliderValueChanged (Slider* sliderThatWasMoved);
void buttonClicked (Button* buttonThatWasClicked);
// Binary resources:
static const char* globalEditor_864x144_png;
static const int globalEditor_864x144_pngSize;
private:
@ -69,7 +81,6 @@ private:
//[/UserVariables]
//==============================================================================
ScopedPointer<ComboBox> lfoType;
ScopedPointer<Slider> lfoSpeed;
ScopedPointer<Slider> lfoAmDepth;
ScopedPointer<Slider> lfoPitchDepth;
@ -95,6 +106,17 @@ private:
ScopedPointer<LcdDisplay> lcdDisplay;
ScopedPointer<Slider> output;
ScopedPointer<VuMeter> vuOutput;
ScopedPointer<TextButton> initButton;
ScopedPointer<TextButton> parmButton;
ScopedPointer<TextButton> sendButton;
ScopedPointer<TextButton> cartButton;
ScopedPointer<TextButton> loadButton;
ScopedPointer<TextButton> saveButton;
ScopedPointer<TextButton> storeButton;
ScopedPointer<ToggleButton> monoMode;
ScopedPointer<ComboBoxImage> lfoType;
ScopedPointer<ProgramSelector> programSelector;
Image cachedImage_globalEditor_864x144_png;
//==============================================================================

@ -77,15 +77,6 @@ OperatorEditor::OperatorEditor ()
s_egv4->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
s_egv4->addListener (this);
addAndMakeVisible (opMode = new ComboBox ("opMode"));
opMode->setEditableText (false);
opMode->setJustificationType (Justification::centredLeft);
opMode->setTextWhenNothingSelected (String::empty);
opMode->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
opMode->addItem (TRANS("RATIO"), 1);
opMode->addItem (TRANS("FIXED"), 2);
opMode->addListener (this);
addAndMakeVisible (opLevel = new Slider ("opLevel"));
opLevel->setRange (0, 99, 1);
opLevel->setSliderStyle (Slider::RotaryVerticalDrag);
@ -106,7 +97,7 @@ OperatorEditor::OperatorEditor ()
addAndMakeVisible (khzDisplay = new Label ("khz",
TRANS("1,000 kHz")));
khzDisplay->setFont (Font (11.00f, Font::plain));
khzDisplay->setFont (Font (12.60f, Font::plain));
khzDisplay->setJustificationType (Justification::centred);
khzDisplay->setEditable (false, false, false);
khzDisplay->setColour (Label::backgroundColourId, Colour (0x6a000000));
@ -117,7 +108,7 @@ OperatorEditor::OperatorEditor ()
addAndMakeVisible (detune = new Slider ("detune"));
detune->setRange (-7, 7, 1);
detune->setSliderStyle (Slider::LinearHorizontal);
detune->setSliderStyle (Slider::Rotary);
detune->setTextBoxStyle (Slider::NoTextBox, true, 80, 20);
detune->addListener (this);
@ -138,32 +129,10 @@ OperatorEditor::OperatorEditor ()
sclRightLevel->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
sclRightLevel->addListener (this);
addAndMakeVisible (kbdLeftCurve = new ComboBox ("kbdLeftCurve"));
kbdLeftCurve->setEditableText (false);
kbdLeftCurve->setJustificationType (Justification::centredLeft);
kbdLeftCurve->setTextWhenNothingSelected (String::empty);
kbdLeftCurve->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
kbdLeftCurve->addItem (TRANS("-LN"), 1);
kbdLeftCurve->addItem (TRANS("-EX"), 2);
kbdLeftCurve->addItem (TRANS("+EX"), 3);
kbdLeftCurve->addItem (TRANS("+LN"), 4);
kbdLeftCurve->addListener (this);
addAndMakeVisible (kbdRightCurve = new ComboBox ("kbdRightCurve"));
kbdRightCurve->setEditableText (false);
kbdRightCurve->setJustificationType (Justification::centredLeft);
kbdRightCurve->setTextWhenNothingSelected (String::empty);
kbdRightCurve->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
kbdRightCurve->addItem (TRANS("-LN"), 1);
kbdRightCurve->addItem (TRANS("-EX"), 2);
kbdRightCurve->addItem (TRANS("+EX"), 3);
kbdRightCurve->addItem (TRANS("+LN"), 4);
kbdRightCurve->addListener (this);
addAndMakeVisible (sclLvlBrkPt = new Slider ("sclLvlBrkPt"));
sclLvlBrkPt->setTooltip (TRANS("Scale Level Breakpoint"));
sclLvlBrkPt->setRange (0, 99, 1);
sclLvlBrkPt->setSliderStyle (Slider::RotaryVerticalDrag);
sclLvlBrkPt->setSliderStyle (Slider::LinearHorizontal);
sclLvlBrkPt->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
sclLvlBrkPt->addListener (this);
@ -189,14 +158,38 @@ OperatorEditor::OperatorEditor ()
addAndMakeVisible (vu = new VuMeter());
vu->setName ("vu");
addAndMakeVisible (opMode = new ToggleButton ("opMode"));
opMode->setButtonText (String::empty);
opMode->addListener (this);
addAndMakeVisible (kbdLeftCurve = new ComboBoxImage());
kbdLeftCurve->setName ("kbdLeftCurve");
addAndMakeVisible (kbdRightCurve = new ComboBoxImage());
kbdRightCurve->setName ("kbdRightCurve");
cachedImage_operatorEditor_287x218_png = ImageCache::getFromMemory (operatorEditor_287x218_png, operatorEditor_287x218_pngSize);
//[UserPreSize]
//[/UserPreSize]
setSize (280, 90);
setSize (287, 218);
//[Constructor] You can add your own custom stuff here..
Image tmp = ImageCache::getFromMemory(BinaryData::Scaling_36_26_png, BinaryData::Scaling_36_26_pngSize);
kbdLeftCurve->addItem("-LN", 1);
kbdLeftCurve->addItem("-EX", 2);
kbdLeftCurve->addItem("+EX", 3);
kbdLeftCurve->addItem("+LN", 4);
kbdLeftCurve->setImage(tmp);
kbdRightCurve->addItem("-LN", 1);
kbdRightCurve->addItem("-EX", 2);
kbdRightCurve->addItem("+EX", 3);
kbdRightCurve->addItem("+LN", 4);
kbdRightCurve->setImage(tmp);
//[/Constructor]
}
@ -213,7 +206,6 @@ OperatorEditor::~OperatorEditor()
s_egv2 = nullptr;
s_egv3 = nullptr;
s_egv4 = nullptr;
opMode = nullptr;
opLevel = nullptr;
opFine = nullptr;
opCoarse = nullptr;
@ -222,13 +214,14 @@ OperatorEditor::~OperatorEditor()
envDisplay = nullptr;
sclLeftLevel = nullptr;
sclRightLevel = nullptr;
kbdLeftCurve = nullptr;
kbdRightCurve = nullptr;
sclLvlBrkPt = nullptr;
sclRateScaling = nullptr;
keyVelSens = nullptr;
ampModSens = nullptr;
vu = nullptr;
opMode = nullptr;
kbdLeftCurve = nullptr;
kbdRightCurve = nullptr;
//[Destructor]. You can add your own custom destruction code here..
@ -241,39 +234,54 @@ void OperatorEditor::paint (Graphics& g)
//[UserPrePaint] Add your own custom painting code here..
//[/UserPrePaint]
g.setColour (Colour (0x32000000));
g.fillRect (-5, -7, 293, 100);
g.setColour (Colours::black);
g.drawImage (cachedImage_operatorEditor_287x218_png,
0, 0, 287, 218,
0, 0, cachedImage_operatorEditor_287x218_png.getWidth(), cachedImage_operatorEditor_287x218_png.getHeight());
//[UserPaint] Add your own custom painting code here..
g.setColour (Colours::white);
g.setFont(Font (30.00f, Font::plain));
g.drawText(opNum, 242, 9, 30, 30, Justification::centred, true);
Image myStrip = ImageCache::getFromMemory(BinaryData::Light_14x14_png, BinaryData::Light_14x14_pngSize);
bool state = opMode->getToggleState();
// 129 x 24
g.drawImage(myStrip, 128, 24, 14, 14, 0, state ? 0 : 14, 14, 14);
// 198 x 24
g.drawImage(myStrip, 199, 24, 14, 14, 0, !state ? 0 : 14, 14, 14);
//[/UserPaint]
}
void OperatorEditor::resized()
{
s_egl1->setBounds (136, 40, 24, 24);
s_egl2->setBounds (160, 40, 24, 24);
s_egl3->setBounds (184, 40, 24, 24);
s_egl4->setBounds (208, 40, 24, 24);
s_egv1->setBounds (136, 64, 24, 24);
s_egv2->setBounds (160, 64, 24, 24);
s_egv3->setBounds (184, 64, 24, 24);
s_egv4->setBounds (208, 64, 24, 24);
opMode->setBounds (24, 48, 104, 16);
opLevel->setBounds (232, 56, 32, 32);
opFine->setBounds (104, 24, 24, 24);
opCoarse->setBounds (80, 24, 24, 24);
khzDisplay->setBounds (32, 8, 88, 16);
detune->setBounds (24, 24, 56, 24);
envDisplay->setBounds (136, 5, 96, 32);
sclLeftLevel->setBounds (0, 64, 24, 24);
sclRightLevel->setBounds (64, 64, 24, 24);
kbdLeftCurve->setBounds (24, 68, 40, 16);
kbdRightCurve->setBounds (88, 68, 40, 16);
sclLvlBrkPt->setBounds (0, 40, 24, 24);
sclRateScaling->setBounds (0, 16, 24, 24);
keyVelSens->setBounds (240, 24, 24, 24);
ampModSens->setBounds (240, 0, 24, 24);
vu->setBounds (268, 0, 12, 88);
s_egl1->setBounds (5, 128, 34, 34);
s_egl2->setBounds (33, 129, 34, 34);
s_egl3->setBounds (61, 128, 34, 34);
s_egl4->setBounds (89, 128, 34, 34);
s_egv1->setBounds (5, 169, 34, 34);
s_egv2->setBounds (33, 169, 34, 34);
s_egv3->setBounds (61, 169, 34, 34);
s_egv4->setBounds (89, 169, 34, 34);
opLevel->setBounds (244, 74, 34, 34);
opFine->setBounds (78, 24, 34, 34);
opCoarse->setBounds (41, 24, 34, 34);
khzDisplay->setBounds (15, 10, 95, 10);
detune->setBounds (6, 24, 34, 34);
envDisplay->setBounds (16, 82, 94, 30);
sclLeftLevel->setBounds (131, 115, 34, 34);
sclRightLevel->setBounds (241, 115, 34, 34);
sclLvlBrkPt->setBounds (178, 130, 54, 24);
sclRateScaling->setBounds (186, 179, 34, 34);
keyVelSens->setBounds (204, 74, 34, 34);
ampModSens->setBounds (141, 75, 34, 34);
vu->setBounds (132, 52, 140, 8);
opMode->setBounds (147, 19, 48, 26);
kbdLeftCurve->setBounds (129, 170, 36, 26);
kbdRightCurve->setBounds (241, 170, 36, 26);
//[UserResized] Add your own custom resize handling here..
//[/UserResized]
}
@ -389,30 +397,20 @@ void OperatorEditor::sliderValueChanged (Slider* sliderThatWasMoved)
//[/UsersliderValueChanged_Post]
}
void OperatorEditor::comboBoxChanged (ComboBox* comboBoxThatHasChanged)
void OperatorEditor::buttonClicked (Button* buttonThatWasClicked)
{
//[UsercomboBoxChanged_Pre]
//[/UsercomboBoxChanged_Pre]
//[UserbuttonClicked_Pre]
//[/UserbuttonClicked_Pre]
if (comboBoxThatHasChanged == opMode)
{
//[UserComboBoxCode_opMode] -- add your combo box handling code here..
updateDisplay();
//[/UserComboBoxCode_opMode]
}
else if (comboBoxThatHasChanged == kbdLeftCurve)
{
//[UserComboBoxCode_kbdLeftCurve] -- add your combo box handling code here..
//[/UserComboBoxCode_kbdLeftCurve]
}
else if (comboBoxThatHasChanged == kbdRightCurve)
if (buttonThatWasClicked == opMode)
{
//[UserComboBoxCode_kbdRightCurve] -- add your combo box handling code here..
//[/UserComboBoxCode_kbdRightCurve]
//[UserButtonCode_opMode] -- add your button handler code here..
repaint();
//[/UserButtonCode_opMode]
}
//[UsercomboBoxChanged_Post]
//[/UsercomboBoxChanged_Post]
//[UserbuttonClicked_Post]
//[/UserbuttonClicked_Post]
}
@ -443,6 +441,8 @@ void OperatorEditor::bind(DexedAudioProcessor *parent, int op) {
int offset = parent->opCtrl[op].egRate[0]->getOffset();
envDisplay->pvalues = &(parent->data[offset]);
opNum << op + 1;
}
void OperatorEditor::updateGain(float v) {
@ -455,7 +455,7 @@ void OperatorEditor::updateDisplay() {
float fine = opFine->getValue();
String txtFreq;
if (opMode->getSelectedItemIndex() == 0) {
if (opMode->getToggleState() == 0) {
if ( freq == 0 )
freq = 0.5;
txtFreq << "f = " << (freq + ((freq*2) * (fine/100)));
@ -473,7 +473,7 @@ void OperatorEditor::updateDisplay() {
txtFreq << " " << det;
}
khzDisplay->setText(txtFreq, dontSendNotification);
envDisplay->repaint();
repaint();
}
@ -495,110 +495,397 @@ BEGIN_JUCER_METADATA
<JUCER_COMPONENT documentType="Component" className="OperatorEditor" componentName=""
parentClasses="public Component" constructorParams="" variableInitialisers=""
snapPixels="8" snapActive="1" snapShown="1" overlayOpacity="0.330"
fixedSize="1" initialWidth="280" initialHeight="90">
snapPixels="2" snapActive="0" snapShown="1" overlayOpacity="0.330"
fixedSize="1" initialWidth="287" initialHeight="218">
<BACKGROUND backgroundColour="ffffff">
<RECT pos="-5 -7 293 100" fill="solid: 32000000" hasStroke="0"/>
<IMAGE pos="0 0 287 218" resource="operatorEditor_287x218_png" opacity="1"
mode="0"/>
</BACKGROUND>
<SLIDER name="egl1" id="dc070cc41347df47" memberName="s_egl1" virtualName=""
explicitFocusOrder="0" pos="136 40 24 24" min="0" max="99" int="1"
explicitFocusOrder="0" pos="5 128 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="egl2" id="66f5195e9c374029" memberName="s_egl2" virtualName=""
explicitFocusOrder="0" pos="160 40 24 24" min="0" max="99" int="1"
explicitFocusOrder="0" pos="33 129 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="egl3" id="9d57bd53203dcdb4" memberName="s_egl3" virtualName=""
explicitFocusOrder="0" pos="184 40 24 24" min="0" max="99" int="1"
explicitFocusOrder="0" pos="61 128 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="egl4" id="4f7c3ece3ea2cf9c" memberName="s_egl4" virtualName=""
explicitFocusOrder="0" pos="208 40 24 24" min="0" max="99" int="1"
explicitFocusOrder="0" pos="89 128 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="egr1" id="2ca8137d80da46fb" memberName="s_egv1" virtualName=""
explicitFocusOrder="0" pos="136 64 24 24" min="0" max="99" int="1"
explicitFocusOrder="0" pos="5 169 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="egr3" id="4ad6d0c532d15973" memberName="s_egv2" virtualName=""
explicitFocusOrder="0" pos="160 64 24 24" min="0" max="99" int="1"
explicitFocusOrder="0" pos="33 169 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="egr3" id="8a2027f9ede16b4f" memberName="s_egv3" virtualName=""
explicitFocusOrder="0" pos="184 64 24 24" min="0" max="99" int="1"
explicitFocusOrder="0" pos="61 169 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="egr4" id="8c04f1c943d837e8" memberName="s_egv4" virtualName=""
explicitFocusOrder="0" pos="208 64 24 24" min="0" max="99" int="1"
explicitFocusOrder="0" pos="89 169 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<COMBOBOX name="opMode" id="2cf8156bb94cdc40" memberName="opMode" virtualName=""
explicitFocusOrder="0" pos="24 48 104 16" editable="0" layout="33"
items="RATIO&#10;FIXED" textWhenNonSelected="" textWhenNoItems="(no choices)"/>
<SLIDER name="opLevel" id="f8521c8214fb8993" memberName="opLevel" virtualName=""
explicitFocusOrder="0" pos="232 56 32 32" min="0" max="99" int="1"
explicitFocusOrder="0" pos="244 74 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="opFine" id="e445aa61bd6cddcb" memberName="opFine" virtualName=""
explicitFocusOrder="0" pos="104 24 24 24" min="0" max="99" int="1"
explicitFocusOrder="0" pos="78 24 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="opCoarse" id="4eec63d30d7488d2" memberName="opCoarse" virtualName=""
explicitFocusOrder="0" pos="80 24 24 24" min="0" max="31" int="1"
explicitFocusOrder="0" pos="41 24 34 34" min="0" max="31" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<LABEL name="khz" id="eb961eed8902a6fc" memberName="khzDisplay" virtualName=""
explicitFocusOrder="0" pos="32 8 88 16" bkgCol="6a000000" textCol="ffffffff"
explicitFocusOrder="0" pos="15 10 95 10" bkgCol="6a000000" textCol="ffffffff"
outlineCol="0" edTextCol="ff000000" edBkgCol="0" labelText="1,000 kHz"
editableSingleClick="0" editableDoubleClick="0" focusDiscardsChanges="0"
fontname="Default font" fontsize="11" bold="0" italic="0" justification="36"/>
fontname="Default font" fontsize="12.599999999999999645" bold="0"
italic="0" justification="36"/>
<SLIDER name="detune" id="f093ec8defca2fc2" memberName="detune" virtualName=""
explicitFocusOrder="0" pos="24 24 56 24" min="-7" max="7" int="1"
style="LinearHorizontal" textBoxPos="NoTextBox" textBoxEditable="0"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
explicitFocusOrder="0" pos="6 24 34 34" min="-7" max="7" int="1"
style="Rotary" textBoxPos="NoTextBox" textBoxEditable="0" textBoxWidth="80"
textBoxHeight="20" skewFactor="1"/>
<GENERICCOMPONENT name="envDisplay" id="b18856de924c6340" memberName="envDisplay"
virtualName="" explicitFocusOrder="0" pos="136 5 96 32" class="EnvDisplay"
virtualName="" explicitFocusOrder="0" pos="16 82 94 30" class="EnvDisplay"
params=""/>
<SLIDER name="sclLeftLevel" id="bd6f338ae68e454f" memberName="sclLeftLevel"
virtualName="" explicitFocusOrder="0" pos="0 64 24 24" tooltip="Keyboard Scale Level Left Depth "
virtualName="" explicitFocusOrder="0" pos="131 115 34 34" tooltip="Keyboard Scale Level Left Depth "
min="0" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="sclRightLevel" id="b9e23ed5187fc7e5" memberName="sclRightLevel"
virtualName="" explicitFocusOrder="0" pos="64 64 24 24" tooltip="Keyboard Scale Level Right Depth "
virtualName="" explicitFocusOrder="0" pos="241 115 34 34" tooltip="Keyboard Scale Level Right Depth "
min="0" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<COMBOBOX name="kbdLeftCurve" id="a4b068d60be648ca" memberName="kbdLeftCurve"
virtualName="" explicitFocusOrder="0" pos="24 68 40 16" editable="0"
layout="33" items="-LN&#10;-EX&#10;+EX&#10;+LN" textWhenNonSelected=""
textWhenNoItems="(no choices)"/>
<COMBOBOX name="kbdRightCurve" id="e8b5c5cb5e36b46b" memberName="kbdRightCurve"
virtualName="" explicitFocusOrder="0" pos="88 68 40 16" editable="0"
layout="33" items="-LN&#10;-EX&#10;+EX&#10;+LN" textWhenNonSelected=""
textWhenNoItems="(no choices)"/>
<SLIDER name="sclLvlBrkPt" id="c563ac3116923bbc" memberName="sclLvlBrkPt"
virtualName="" explicitFocusOrder="0" pos="0 40 24 24" tooltip="Scale Level Breakpoint"
min="0" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
virtualName="" explicitFocusOrder="0" pos="178 130 54 24" tooltip="Scale Level Breakpoint"
min="0" max="99" int="1" style="LinearHorizontal" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="sclRateScaling" id="f0d17c8e09aa4c49" memberName="sclRateScaling"
virtualName="" explicitFocusOrder="0" pos="0 16 24 24" tooltip="Keyboard Rate Scaling"
virtualName="" explicitFocusOrder="0" pos="186 179 34 34" tooltip="Keyboard Rate Scaling"
min="0" max="7" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="keyVelSens" id="21795d045d07602b" memberName="keyVelSens"
virtualName="" explicitFocusOrder="0" pos="240 24 24 24" min="0"
virtualName="" explicitFocusOrder="0" pos="204 74 34 34" min="0"
max="7" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="ampModSens" id="634ceaa7b0f81a6c" memberName="ampModSens"
virtualName="" explicitFocusOrder="0" pos="240 0 24 24" min="0"
virtualName="" explicitFocusOrder="0" pos="141 75 34 34" min="0"
max="3" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<GENERICCOMPONENT name="vu" id="6f952594ea99dc1e" memberName="vu" virtualName=""
explicitFocusOrder="0" pos="268 0 12 88" class="VuMeter" params=""/>
explicitFocusOrder="0" pos="132 52 140 8" class="VuMeter" params=""/>
<TOGGLEBUTTON name="opMode" id="15db8e5c9dd13966" memberName="opMode" virtualName=""
explicitFocusOrder="0" pos="147 19 48 26" buttonText="" connectedEdges="0"
needsCallback="1" radioGroupId="0" state="0"/>
<GENERICCOMPONENT name="kbdLeftCurve" id="ee4e60dfcd6cb790" memberName="kbdLeftCurve"
virtualName="" explicitFocusOrder="0" pos="129 170 36 26" class="ComboBoxImage"
params=""/>
<GENERICCOMPONENT name="kbdRightCurve" id="f5ca44d67593488a" memberName="kbdRightCurve"
virtualName="" explicitFocusOrder="0" pos="241 170 36 26" class="ComboBoxImage"
params=""/>
</JUCER_COMPONENT>
END_JUCER_METADATA
*/
#endif
//==============================================================================
// Binary resources - be careful not to edit any of these sections!
// JUCER_RESOURCE: operatorEditor_287x218_png, 15614, "../Resources/ui/OperatorEditor_287x218.png"
static const unsigned char resource_OperatorEditor_operatorEditor_287x218_png[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,31,0,0,0,218,8,6,0,0,0,159,5,70,254,0,0,0,9,112,72,89,115,0,0,14,
195,0,0,14,195,1,199,111,168,100,0,0,0,7,116,73,77,69,7,222,9,16,3,31,30,140,250,111,181,0,0,0,29,105,84,88,116,67,111,109,109,101,110,116,0,0,0,0,0,67,114,101,97,116,101,100,32,119,105,116,104,32,71,
73,77,80,100,46,101,7,0,0,32,0,73,68,65,84,120,218,237,157,123,124,19,85,250,255,223,147,164,147,82,18,46,77,87,155,254,190,75,139,210,214,181,173,75,91,86,145,149,155,34,119,81,89,92,117,215,239,42,42,
138,171,130,178,224,34,184,32,10,138,11,11,138,178,162,40,136,43,138,138,168,220,4,111,8,42,23,191,189,32,109,193,94,118,105,171,54,181,144,172,154,64,201,180,73,126,127,76,50,77,218,180,180,64,41,109,
207,251,245,138,210,201,204,153,147,121,206,124,230,57,207,121,230,28,9,136,244,127,76,64,119,255,167,27,208,213,191,61,2,208,3,18,2,129,64,208,52,62,192,3,212,2,39,128,99,128,19,248,201,255,113,1,213,
128,98,240,11,76,15,32,6,56,63,241,130,248,254,125,122,39,12,176,198,158,127,193,47,255,231,255,37,136,107,41,16,8,78,133,111,191,251,190,236,200,81,123,121,105,249,183,217,121,135,138,118,0,149,192,209,
128,72,73,192,47,129,243,205,166,174,23,13,236,255,155,91,127,147,153,62,204,102,179,1,16,248,191,64,32,16,180,20,171,213,170,253,255,224,161,111,254,111,219,39,59,151,59,143,29,255,198,47,66,63,74,64,
42,144,48,126,204,136,135,99,44,61,7,8,193,17,8,4,173,33,68,110,165,166,112,205,186,119,102,2,135,129,74,61,144,152,116,97,194,240,139,47,74,188,201,86,105,83,35,59,226,35,62,226,35,62,103,240,227,114,
185,232,209,163,123,12,248,220,182,31,142,124,3,28,51,0,221,146,19,47,188,188,41,143,199,235,245,114,226,132,155,154,90,15,62,159,15,165,166,70,72,185,64,112,138,24,244,122,244,122,61,70,57,2,89,150,209,
233,58,199,88,142,205,102,227,162,164,62,191,201,254,186,224,29,160,139,1,232,218,37,210,152,88,125,188,182,193,206,62,159,15,167,235,56,39,220,110,209,98,4,130,51,68,173,199,67,173,199,131,91,81,128,
99,116,137,52,210,53,42,170,83,136,80,132,193,112,1,16,5,200,6,32,242,68,245,241,88,73,146,26,8,207,207,174,99,40,74,13,245,191,19,8,4,103,142,19,110,133,154,218,90,122,118,239,134,78,167,235,208,191,
213,225,176,71,2,70,32,66,135,154,199,211,128,99,199,171,81,20,209,189,18,8,206,6,30,143,151,159,126,118,117,154,158,39,160,51,0,186,250,249,131,94,175,151,227,213,110,154,202,43,220,155,253,181,104,49,
109,76,255,204,95,159,181,115,37,38,37,83,86,122,24,69,81,58,204,245,139,181,198,113,253,239,38,160,40,10,91,54,109,68,81,220,56,236,246,211,42,51,218,98,225,129,105,51,152,51,123,102,139,143,173,169,
245,224,118,215,96,52,202,29,189,233,234,0,201,16,78,97,154,235,241,116,49,26,59,188,155,120,78,90,78,167,163,91,183,110,173,122,142,248,132,4,220,110,133,74,91,5,0,55,222,252,7,254,181,102,53,101,165,
165,29,230,58,62,244,240,108,62,223,185,131,252,188,60,50,50,251,161,40,110,62,254,112,251,105,149,41,203,70,82,211,210,78,249,248,106,183,187,51,136,15,1,241,105,216,7,109,198,211,77,47,73,24,141,70,
12,6,131,80,131,179,109,53,255,181,111,41,38,147,25,75,140,5,167,211,73,124,66,111,10,242,14,160,40,10,41,169,105,200,70,35,197,133,133,184,92,78,100,89,230,142,73,147,41,200,207,163,168,168,144,220,236,
44,222,125,103,61,182,138,10,173,172,192,49,101,165,135,79,219,91,104,43,175,39,41,41,153,127,173,89,141,221,126,20,103,182,19,69,113,99,50,153,137,79,72,160,32,63,79,243,100,204,102,179,38,186,41,169,
170,176,4,190,15,144,158,217,15,32,228,26,157,90,247,203,211,121,30,162,225,54,214,214,214,138,59,188,3,146,152,156,204,35,115,31,99,233,178,229,254,39,189,194,232,177,227,24,54,124,4,25,153,253,120,245,
245,117,196,90,227,72,73,187,132,248,132,4,18,147,146,200,240,223,84,143,63,177,144,104,75,12,0,51,102,206,230,129,191,204,96,208,224,33,44,127,225,37,250,95,62,160,221,93,139,49,215,140,67,54,202,100,
100,246,195,98,137,97,204,53,227,232,127,249,111,81,20,55,15,252,101,6,233,153,253,144,101,153,167,22,47,197,100,50,3,48,117,218,116,254,247,182,137,12,27,62,130,53,107,215,33,203,170,135,114,207,125,
83,120,96,218,116,6,13,30,194,67,15,207,62,237,216,79,103,10,252,52,192,235,245,137,59,181,131,18,159,144,192,248,107,198,224,114,57,1,216,186,121,99,80,151,65,102,240,144,161,188,249,198,90,138,139,10,
217,178,121,19,185,217,89,13,60,134,193,67,134,50,118,228,48,0,118,237,252,140,235,199,79,96,239,158,221,237,234,58,188,252,226,10,198,140,189,134,151,95,92,1,192,160,33,67,253,33,7,133,249,243,230,176,
112,241,82,114,178,178,216,187,103,55,5,249,121,218,239,30,63,110,140,38,56,195,134,143,100,235,230,141,140,25,59,142,241,227,70,163,40,10,131,134,12,229,129,105,211,69,67,107,174,248,212,15,250,136,129,
245,118,210,253,58,133,253,247,238,222,205,49,151,83,59,118,216,240,17,12,28,60,20,139,197,130,53,46,142,173,155,55,105,223,73,245,206,33,1,214,184,56,242,243,15,104,219,247,103,103,241,212,226,37,237,
182,205,212,255,173,18,80,94,90,202,190,221,95,50,250,154,113,140,24,58,8,9,72,72,72,64,150,141,44,95,177,82,59,246,152,203,73,82,82,50,118,251,81,106,20,5,9,40,46,44,60,237,123,72,234,84,226,83,47,143,
71,164,245,180,151,216,79,203,27,181,162,184,181,227,76,38,51,83,167,205,96,194,181,234,83,123,250,204,217,33,229,26,141,114,200,57,36,9,42,109,21,36,37,37,107,219,19,147,146,41,200,203,107,183,109,166,
254,239,147,36,213,187,235,63,224,183,124,252,225,118,238,184,107,50,171,86,174,96,127,78,22,46,151,147,251,239,153,20,114,188,44,203,88,44,49,90,57,113,113,113,167,125,15,117,150,188,58,17,45,238,196,
40,138,27,69,113,51,108,248,72,76,102,51,137,73,201,236,243,119,159,246,231,100,115,203,173,19,81,220,10,185,57,117,93,175,74,91,5,57,217,89,204,154,51,143,131,249,121,92,59,126,2,171,86,190,208,97,174,
137,44,203,204,91,176,144,69,79,46,160,32,255,0,207,174,120,137,220,236,44,114,115,178,200,201,206,226,201,69,75,248,248,163,237,152,77,106,16,58,55,39,139,189,123,190,228,201,69,75,216,183,103,55,233,
25,253,68,195,106,38,122,32,227,162,62,189,199,5,111,60,118,188,250,164,7,126,111,251,1,163,24,106,111,163,167,181,58,218,101,138,138,108,209,113,46,167,147,226,162,66,126,250,233,71,64,29,89,217,181,
243,51,18,147,147,177,85,84,176,102,213,75,148,149,149,226,114,169,251,185,156,46,18,147,147,57,240,245,126,10,242,243,248,254,187,111,241,120,60,236,219,179,155,234,234,106,226,19,122,179,246,213,213,
33,226,212,158,40,200,207,227,72,85,21,0,54,91,5,101,101,135,1,137,60,255,239,245,120,60,236,254,98,23,6,131,1,135,221,206,238,47,62,7,9,226,227,123,83,117,228,7,190,57,116,144,234,234,106,62,223,249,
25,149,182,10,44,150,24,222,90,183,150,221,95,124,126,90,35,128,93,163,162,58,116,251,253,166,228,240,38,160,74,2,238,188,110,228,149,43,131,191,172,58,122,242,11,183,47,251,0,102,179,89,12,181,183,145,
248,152,205,102,98,99,186,139,139,209,1,57,47,198,210,161,127,223,123,219,62,157,4,228,27,180,96,128,64,32,56,71,158,46,157,227,103,138,62,147,64,32,104,19,78,185,207,100,52,26,137,140,140,20,49,159,182,
120,98,232,116,90,130,155,64,208,233,196,39,45,45,141,232,232,104,33,62,109,36,62,17,17,17,84,126,119,88,92,12,65,251,22,159,6,121,5,205,200,51,208,83,195,79,142,31,196,21,108,211,216,128,8,214,117,76,
179,118,14,187,10,183,69,32,16,8,241,17,8,4,66,124,4,2,129,64,136,143,64,32,16,226,35,16,8,4,66,124,4,2,65,251,197,63,159,79,189,41,53,196,251,22,2,65,155,209,89,238,63,225,249,8,4,130,54,244,124,26,76,
38,38,60,31,129,160,205,60,31,145,100,40,16,8,4,66,124,4,2,129,16,31,129,64,32,16,226,35,16,8,132,248,8,4,2,129,16,31,129,160,93,162,215,119,158,91,82,136,143,64,112,14,33,71,68,116,154,223,218,200,100,
98,162,17,8,4,109,65,151,200,200,78,182,104,160,16,27,129,160,205,137,48,24,144,141,157,199,243,17,221,46,129,224,28,64,146,36,186,117,51,117,170,223,44,86,252,19,8,218,218,3,208,233,232,217,163,27,17,
157,108,1,78,33,62,2,65,91,117,179,34,12,68,26,141,68,117,137,236,148,239,83,10,241,233,164,46,190,209,40,19,41,203,232,13,250,78,247,196,21,156,67,226,83,95,115,69,252,185,227,138,142,169,107,23,186,
70,69,137,139,33,16,158,143,224,236,9,79,143,238,102,140,98,165,83,193,57,130,24,237,234,36,116,55,155,132,240,8,206,193,110,151,152,76,172,67,163,215,235,233,210,37,50,236,119,74,77,13,110,183,66,77,
109,45,138,82,35,46,150,224,148,145,229,8,12,6,3,70,57,162,89,15,58,209,237,234,4,116,137,52,54,216,230,245,122,57,118,188,154,99,199,171,197,5,18,156,17,20,165,6,69,169,225,248,241,106,186,68,26,49,155,
186,162,211,233,78,38,62,34,228,220,145,137,136,136,104,96,83,215,177,106,142,87,159,16,182,22,180,10,213,39,20,188,94,31,61,123,116,111,116,31,17,243,233,12,221,174,122,79,31,69,169,241,11,143,64,208,
122,184,149,26,170,79,156,16,226,211,153,49,212,203,227,57,161,184,197,69,17,156,21,78,184,21,33,62,130,80,207,71,32,104,235,182,38,196,167,19,82,91,235,17,23,65,112,86,240,249,124,141,123,228,103,226,
4,151,246,191,156,232,104,11,219,182,110,22,87,219,79,108,172,149,113,215,143,71,81,20,182,109,217,140,162,40,56,28,118,113,97,4,130,51,233,249,68,71,91,136,181,90,155,220,71,150,101,250,166,103,116,154,
11,59,237,161,153,84,86,218,248,98,215,78,250,102,100,210,55,35,83,180,54,129,224,76,120,62,38,147,137,62,137,73,40,138,18,86,140,122,197,199,83,82,92,132,203,229,2,96,194,141,55,211,43,62,30,128,131,
5,249,97,143,59,25,178,44,115,113,74,42,0,149,54,27,149,149,54,0,46,78,73,69,150,101,202,203,202,66,188,139,216,88,43,177,86,107,200,190,177,177,86,20,69,65,150,101,162,45,22,14,22,228,135,148,187,63,
55,71,59,190,87,124,60,209,209,150,22,215,55,54,214,74,159,164,36,94,255,215,26,28,118,59,251,157,217,218,241,125,18,147,40,47,43,229,226,148,84,20,69,225,96,65,126,200,177,129,122,212,223,46,16,116,52,
244,64,70,74,114,159,113,193,27,93,199,142,159,84,4,86,175,93,135,201,108,38,237,215,191,230,242,223,94,65,121,89,25,251,115,115,232,147,152,196,188,39,22,162,40,10,19,110,188,25,189,222,128,203,233,228,
198,63,222,130,201,108,6,160,240,155,67,167,36,62,207,174,88,73,239,11,46,68,54,26,49,153,205,148,20,23,49,243,145,57,92,61,114,20,93,186,116,225,142,187,239,161,240,155,67,28,57,82,69,159,196,36,254,
240,167,91,49,153,205,76,184,233,102,0,74,138,139,152,112,227,205,92,61,114,36,131,135,94,133,82,83,67,165,205,198,223,151,46,195,227,241,208,43,62,129,95,156,119,62,37,197,69,140,28,61,150,123,238,159,
138,162,40,220,115,255,84,74,138,139,56,114,164,170,89,245,156,112,227,205,164,253,186,47,14,135,157,35,71,170,184,242,234,225,116,239,209,131,146,226,34,230,60,190,128,203,127,123,5,177,214,56,250,102,
100,112,253,132,223,107,221,213,153,143,204,33,243,55,151,242,139,243,206,227,174,63,223,199,182,173,155,241,120,78,63,62,99,234,26,250,34,233,201,236,43,16,156,73,234,183,191,130,194,146,77,64,213,41,
121,62,23,167,164,82,82,84,196,194,249,143,105,55,77,128,43,135,93,205,43,47,175,228,139,93,59,137,142,182,240,247,165,207,176,109,235,102,246,231,100,3,240,202,203,43,57,213,115,58,236,118,30,153,57,
35,196,251,234,155,145,201,77,227,175,85,99,79,251,246,50,238,250,241,28,44,200,167,164,184,174,126,151,22,228,51,238,186,241,218,77,30,107,141,227,207,147,110,7,160,111,122,6,38,147,153,109,91,54,107,
222,81,224,119,60,244,224,84,28,14,59,229,101,101,140,28,61,182,217,222,200,43,47,175,100,228,152,177,218,111,189,98,208,224,144,239,75,138,139,180,239,94,125,227,109,162,163,45,184,92,78,122,197,39,104,
245,154,54,99,38,87,12,26,194,167,31,127,40,90,175,64,116,187,52,33,72,77,163,164,184,72,251,251,96,65,62,209,209,22,245,166,189,122,56,125,51,50,153,112,163,234,109,4,186,93,167,75,223,140,204,144,115,
2,92,218,127,0,37,69,65,245,200,207,211,132,240,226,148,84,38,220,120,147,191,251,148,16,82,143,128,16,6,186,89,175,188,188,146,191,47,93,70,73,113,33,47,254,115,57,14,135,157,190,25,153,204,121,124,65,
157,96,20,21,158,177,139,30,44,98,14,135,93,141,135,101,100,18,107,181,242,244,242,21,97,247,19,8,58,164,248,248,8,29,14,171,255,119,125,202,202,74,185,106,216,213,218,126,191,236,21,207,49,151,11,31,
62,114,115,178,249,106,239,158,6,79,108,69,81,232,106,50,157,180,236,198,40,200,207,227,134,27,111,14,57,190,172,236,48,125,146,146,180,109,23,38,38,177,63,39,27,31,62,238,123,96,26,207,62,253,15,14,22,
228,115,229,176,225,92,123,253,120,109,63,69,81,66,202,249,228,227,237,124,242,241,118,174,189,254,119,76,123,104,38,51,166,77,161,188,172,148,39,31,127,52,196,27,106,41,161,191,213,231,255,219,135,219,
237,14,250,78,221,94,92,84,136,203,233,98,234,189,119,159,113,35,183,212,190,2,65,107,182,191,211,242,124,190,218,187,155,187,239,185,143,137,119,220,5,192,101,253,7,104,98,179,241,221,119,120,248,145,
71,177,90,227,40,43,43,197,106,181,242,246,155,111,144,155,147,197,220,199,159,96,127,110,54,7,243,243,90,236,17,29,44,200,35,218,114,31,247,77,157,198,183,229,101,148,149,150,114,176,32,143,242,210,82,
102,62,50,151,67,254,174,213,11,207,63,167,122,20,118,59,87,12,26,66,124,124,2,151,246,191,188,209,114,47,237,127,57,41,41,105,228,230,100,211,55,61,131,175,246,237,81,127,199,123,27,88,240,212,98,214,
191,249,6,0,118,135,157,175,246,238,105,53,3,57,28,118,74,138,11,89,176,112,49,31,108,221,140,197,98,33,55,39,155,242,178,82,209,122,5,29,146,83,10,56,123,60,30,182,108,122,143,243,206,59,15,187,195,206,
139,207,63,75,121,89,41,46,151,139,35,71,170,200,206,250,138,248,248,4,122,244,232,65,214,255,125,165,5,94,75,138,138,184,228,215,125,57,88,144,215,226,128,179,122,206,247,65,2,179,217,76,225,161,131,
252,244,211,79,236,220,241,9,213,213,213,196,199,39,176,250,229,149,90,87,229,171,189,187,233,209,163,7,178,209,200,218,127,189,194,193,130,124,28,14,59,149,182,138,144,81,184,234,227,213,120,188,30,46,
249,117,95,62,219,241,169,38,162,133,223,28,162,164,184,136,139,126,117,49,74,141,210,98,193,60,152,159,167,5,168,43,109,21,148,151,149,81,93,93,77,73,113,17,229,101,165,218,239,47,41,46,162,178,210,134,
199,227,97,231,142,79,1,184,224,130,11,169,170,170,162,164,184,240,148,2,243,39,11,248,53,101,95,89,150,233,125,193,133,103,53,39,233,210,254,151,51,100,232,48,242,14,236,23,119,100,7,164,126,251,59,88,
248,239,77,64,149,4,220,121,195,184,17,33,81,224,170,163,14,188,94,175,184,106,29,132,216,243,98,66,254,174,172,58,218,232,190,163,70,143,101,218,67,15,51,102,248,208,51,34,124,205,97,212,232,177,252,
58,35,147,133,243,231,157,211,215,177,79,98,18,151,245,31,192,218,127,189,210,102,117,184,111,234,52,53,133,163,5,15,135,214,168,119,75,234,81,191,253,189,189,113,251,36,32,63,108,146,161,193,160,23,119,
108,71,113,109,245,45,179,229,132,27,111,230,131,45,155,24,53,230,154,70,247,185,56,37,85,29,105,76,207,212,242,146,122,197,39,208,55,61,19,147,41,116,237,169,192,246,62,137,73,161,79,195,122,199,55,229,
137,245,77,207,164,111,122,102,216,114,235,223,100,64,216,114,27,43,167,69,79,112,147,153,95,250,115,213,218,138,196,164,36,228,22,206,72,217,26,245,62,149,122,132,141,249,212,159,209,37,66,175,167,6,
241,242,97,71,32,82,142,104,246,108,77,125,18,147,112,216,237,188,243,214,58,230,60,182,128,141,239,190,19,118,191,185,143,63,65,73,145,218,125,236,155,145,73,165,173,2,147,73,205,187,90,240,212,98,238,
252,211,31,168,172,180,113,105,255,203,185,111,234,95,248,98,215,103,244,205,200,228,171,189,123,120,229,229,23,1,88,180,244,89,28,118,187,150,98,80,94,86,218,160,94,106,170,198,50,190,216,181,19,147,
201,132,213,106,101,219,214,205,140,28,61,150,145,99,198,178,63,39,135,187,255,124,31,75,254,254,36,37,197,69,220,255,192,52,20,183,162,214,199,108,38,218,98,225,129,123,39,55,40,199,104,148,79,41,126,
39,5,125,2,34,28,8,55,168,73,183,201,148,151,149,226,112,216,49,153,76,196,90,227,66,70,104,131,247,15,8,112,83,251,244,138,79,32,58,218,194,254,220,236,176,245,56,213,122,183,180,174,167,91,143,198,246,
9,235,249,68,134,153,249,78,208,78,197,199,216,124,91,6,114,161,2,49,169,250,222,74,48,95,236,250,140,23,159,127,142,231,158,254,7,87,12,26,194,35,51,167,243,226,243,207,177,241,221,119,184,98,240,16,
127,121,191,99,201,223,159,228,197,231,159,227,129,123,239,102,220,245,227,145,101,217,159,25,239,230,145,153,211,89,56,127,30,7,243,243,194,123,88,169,105,184,92,78,182,109,217,196,115,207,44,209,242,
180,38,220,120,51,143,252,117,58,175,188,252,34,235,223,124,131,145,163,199,106,199,124,181,111,15,75,22,45,228,177,57,179,233,21,159,160,229,130,185,92,78,94,255,215,43,60,247,204,146,51,50,112,112,219,
29,119,49,238,250,223,225,114,185,136,142,182,240,244,242,23,184,180,255,229,76,123,232,97,254,240,191,183,161,40,10,243,159,90,172,165,160,168,2,248,108,72,87,86,81,20,254,190,116,153,230,45,70,71,91,
152,255,212,98,20,69,97,228,232,177,76,123,104,38,125,51,50,121,105,205,90,122,197,39,156,145,246,208,88,93,207,118,61,26,21,31,57,34,162,193,28,48,130,246,135,193,96,64,150,155,183,246,183,201,100,98,
228,152,107,152,112,227,205,60,189,124,5,209,22,11,227,174,27,223,232,254,129,192,190,195,110,167,164,184,72,187,169,20,69,193,100,82,51,217,47,237,127,185,246,180,84,20,133,242,178,82,250,36,38,169,57,
91,65,249,89,245,243,183,130,5,238,211,143,63,226,233,127,190,192,204,71,230,170,79,232,88,43,189,226,19,152,255,212,98,158,94,190,130,113,215,135,214,49,56,135,43,80,151,79,63,254,144,47,118,237,228,
213,117,235,181,114,78,87,120,98,173,86,45,70,117,197,224,33,108,124,111,3,47,62,255,28,143,205,153,165,137,225,167,31,125,200,149,87,15,7,96,228,152,107,216,182,101,83,3,241,81,247,25,1,168,57,114,159,
126,244,161,246,118,64,64,96,55,190,183,129,43,135,13,63,35,109,226,15,255,123,43,219,182,110,110,164,174,103,175,30,90,183,43,28,61,187,155,113,252,248,243,25,73,239,23,156,125,36,73,162,123,11,214,254,
30,57,230,26,54,190,251,14,207,61,179,68,139,145,108,216,188,157,231,158,89,18,54,240,172,184,221,65,55,81,248,201,201,2,98,19,16,151,94,241,9,148,20,23,33,203,198,144,216,75,172,53,174,209,122,109,124,
247,29,54,190,251,14,183,221,113,23,211,30,122,152,199,230,204,198,225,176,243,216,223,102,135,13,118,186,156,206,176,229,172,127,243,13,214,191,249,6,183,221,113,23,119,221,115,31,75,22,45,60,165,235,
218,55,35,19,147,201,28,18,28,191,114,216,213,152,76,102,174,28,118,181,42,200,142,163,152,76,102,54,190,251,14,243,253,233,26,35,71,143,229,177,57,179,26,148,183,109,235,102,166,61,244,48,27,223,125,
135,43,135,13,103,225,252,121,33,2,171,9,116,81,209,25,105,23,234,107,61,153,90,214,125,160,174,103,187,30,154,248,132,155,115,67,167,211,209,179,187,153,31,127,118,82,83,83,43,238,230,118,68,96,237,111,
131,94,31,214,182,225,182,141,28,61,150,39,31,127,84,251,206,237,118,243,201,71,219,25,57,122,44,239,215,143,253,248,252,169,145,62,127,226,164,47,184,76,159,118,142,245,111,190,193,204,71,230,178,109,
203,102,250,102,100,176,111,207,110,220,110,55,185,57,89,76,123,104,38,147,38,223,75,77,141,194,165,253,251,83,86,90,218,160,94,125,51,50,73,73,77,163,32,63,143,139,83,82,249,106,239,30,181,220,117,111,
48,255,169,69,108,124,119,3,0,78,167,147,47,118,125,22,82,175,224,122,14,29,118,53,86,107,156,86,206,167,31,127,216,228,60,51,141,225,195,71,73,81,33,207,62,253,15,158,89,254,34,197,69,223,80,105,179,
177,63,71,125,113,120,237,171,175,52,56,166,210,86,193,111,7,14,70,81,220,20,135,201,146,47,46,42,68,150,101,117,31,183,155,178,210,195,154,71,57,239,145,89,13,5,182,254,111,108,102,189,125,62,245,115,
176,32,143,131,5,121,13,234,106,183,31,109,181,122,52,182,79,80,158,143,68,253,143,78,167,35,170,75,23,34,34,34,208,73,58,60,94,31,106,57,146,248,156,131,159,136,136,8,186,70,69,209,163,155,217,63,202,
21,126,63,215,177,234,144,191,101,217,72,225,161,67,20,126,243,77,200,246,194,67,135,112,56,28,252,244,211,79,33,219,15,230,231,241,253,119,223,225,241,120,81,20,133,194,111,212,253,64,162,210,102,211,
242,168,74,138,139,56,152,159,79,124,66,111,14,28,248,154,127,189,178,74,43,227,221,245,111,211,189,103,79,126,250,233,39,94,121,233,69,74,138,139,27,156,71,241,79,193,121,209,175,82,248,96,203,38,127,
30,148,196,193,130,124,190,255,238,59,18,147,146,81,20,133,188,3,251,181,243,85,218,108,120,60,222,144,122,186,92,46,244,122,3,137,73,201,124,176,101,19,123,190,252,226,148,174,111,172,53,142,94,241,9,
108,219,186,133,74,155,141,251,31,252,11,31,109,251,128,239,191,251,142,63,223,255,0,191,248,197,249,232,13,6,134,143,28,205,254,156,28,245,55,40,53,60,252,183,71,121,253,95,107,40,252,230,80,216,114,
37,36,238,188,251,30,214,190,182,134,195,255,249,143,127,27,252,105,226,29,72,146,68,98,82,50,177,214,255,71,121,89,25,163,198,140,229,139,93,59,253,65,235,230,215,187,79,98,50,95,236,218,201,145,170,
170,144,186,14,185,114,24,121,95,127,221,170,245,48,117,237,26,218,126,138,130,243,124,174,25,177,82,248,11,157,135,166,242,124,4,77,199,197,162,45,49,90,214,121,240,136,80,172,213,202,192,65,67,48,153,
205,236,219,179,91,139,137,201,178,204,150,143,118,112,253,152,17,141,38,169,202,178,204,197,169,105,28,204,15,77,190,237,155,145,73,122,70,38,14,187,157,125,123,119,83,105,179,105,83,178,180,36,7,171,
126,189,155,170,107,107,212,163,65,158,207,38,53,207,71,136,143,16,31,65,43,50,241,206,187,136,136,144,121,209,255,218,79,103,164,49,241,17,115,56,11,4,173,64,159,196,36,158,89,190,130,243,99,173,90,110,
147,32,76,192,89,32,16,156,89,74,138,139,152,122,239,100,113,33,78,71,124,106,106,106,56,33,214,242,110,23,200,114,4,17,254,220,30,227,105,166,190,11,4,103,71,124,194,228,63,135,93,203,91,172,172,123,
78,163,212,212,160,212,212,112,172,250,36,107,101,11,59,10,206,38,82,19,226,19,110,28,222,233,58,38,150,212,109,199,28,175,62,129,199,227,165,103,143,110,13,190,59,149,28,23,129,224,84,105,172,189,133,
13,56,139,181,188,59,6,110,69,105,114,173,108,129,160,237,187,93,97,26,109,115,248,98,95,142,184,130,109,200,21,151,157,124,29,52,183,91,161,75,100,164,184,88,130,246,33,62,45,9,44,119,49,26,195,199,21,
4,173,134,78,167,163,91,183,110,205,218,87,169,17,131,4,130,115,88,124,234,199,131,106,107,107,155,21,147,212,75,18,70,163,81,188,1,127,150,145,252,215,189,57,54,242,121,125,205,158,207,71,32,104,149,
246,218,216,67,84,92,26,129,64,208,38,30,188,184,4,2,129,64,136,143,64,32,16,226,35,16,8,4,173,73,216,36,67,145,130,214,62,104,174,157,132,125,5,109,218,78,91,146,100,40,16,8,4,162,219,37,16,8,132,248,
8,4,2,129,16,31,129,64,32,196,71,32,16,8,90,138,255,189,8,145,112,223,177,17,246,21,156,123,237,79,120,62,2,129,160,237,60,159,6,227,240,34,17,164,125,208,76,59,9,251,10,218,180,153,138,60,31,129,64,112,
46,33,196,71,32,16,180,93,183,75,18,19,190,180,79,154,105,39,97,95,65,155,54,83,73,120,62,2,129,64,116,187,4,2,129,16,31,129,64,32,16,226,35,56,27,232,197,132,255,130,179,68,83,225,197,70,242,124,68,34,
72,187,160,153,118,170,111,223,136,8,3,158,19,110,113,253,4,173,78,68,68,132,200,243,17,212,33,71,68,136,139,32,56,75,226,99,16,221,46,65,29,93,34,141,66,128,4,173,223,189,215,235,233,26,213,69,136,143,
32,20,179,169,43,17,98,189,53,65,43,10,79,247,110,38,36,169,241,168,143,104,125,157,20,131,65,79,116,207,238,28,59,94,141,219,173,80,83,91,43,46,138,224,140,180,43,89,150,49,69,117,105,82,120,132,248,
8,232,26,213,165,73,215,88,32,104,45,68,183,75,32,16,8,241,17,8,4,66,124,4,2,129,160,85,9,191,104,96,51,147,215,140,70,35,145,145,145,232,68,198,236,217,125,98,232,116,200,178,220,108,59,53,181,95,77,
77,45,110,69,161,166,166,22,165,166,70,92,92,193,41,35,71,68,104,1,103,163,124,242,84,142,211,10,56,167,165,165,17,29,29,45,196,167,13,196,39,34,34,130,31,190,47,61,229,50,188,94,47,199,171,79,112,236,
120,181,184,160,130,51,130,82,83,131,82,83,195,241,234,19,68,70,26,49,119,141,106,82,27,78,75,124,12,212,240,179,227,7,113,213,219,33,174,227,213,84,87,159,16,23,66,208,42,156,56,225,198,235,245,210,179,
123,183,198,31,162,226,50,117,206,39,148,16,30,65,171,183,51,165,134,234,38,222,33,20,226,211,9,113,187,149,118,255,27,250,36,37,113,203,173,19,91,173,252,101,207,175,108,149,114,163,45,22,162,45,150,
206,211,214,20,69,136,143,32,216,243,105,255,217,204,102,147,153,94,189,18,90,173,252,140,204,126,173,82,110,122,70,63,210,51,78,94,246,85,87,143,232,48,222,79,187,23,31,89,150,73,207,200,12,249,200,178,
28,198,184,225,183,7,120,116,254,147,103,244,201,115,217,229,3,24,53,246,154,118,213,32,106,59,208,171,20,189,226,19,72,207,200,36,214,106,13,217,102,50,153,232,21,159,64,159,164,164,144,182,17,252,119,
253,118,213,212,57,130,203,15,246,190,130,143,175,223,238,82,82,211,72,207,200,12,105,111,5,249,7,40,200,63,208,224,248,148,212,52,109,159,88,171,149,41,15,78,39,61,35,147,94,241,9,237,218,62,77,141,180,
250,39,144,15,125,7,227,100,239,100,180,5,150,152,24,22,63,179,156,131,249,121,117,66,242,200,195,56,28,118,76,38,19,115,231,63,137,217,100,70,81,20,162,45,22,114,115,178,248,199,83,79,54,40,39,37,245,
18,140,70,227,25,251,141,22,75,12,177,214,184,115,242,154,53,102,207,115,185,174,45,248,81,164,164,165,113,251,164,187,113,216,237,12,28,60,148,89,15,77,163,164,184,136,91,110,157,72,180,197,130,226,86,
248,98,215,103,252,187,184,152,135,255,246,40,0,46,167,147,148,191,166,49,249,206,219,0,152,124,239,20,92,46,23,178,44,51,125,230,108,110,185,241,119,33,215,233,178,254,3,152,120,231,93,76,127,224,190,
6,215,109,234,131,51,112,43,110,42,109,21,68,71,199,112,187,217,204,148,63,223,5,192,253,15,252,133,148,212,52,10,242,243,152,126,249,0,158,93,250,15,246,237,221,205,232,177,215,2,176,250,165,23,152,250,
224,12,156,78,39,14,199,81,100,217,200,148,7,167,51,249,206,219,200,200,252,13,150,152,24,210,51,127,67,73,113,33,223,150,151,181,115,83,73,141,139,207,169,230,249,156,109,5,117,216,237,220,127,207,164,
6,79,174,101,255,92,201,107,175,174,230,147,143,182,55,187,172,192,111,12,60,113,10,252,162,150,146,154,70,113,81,33,138,191,175,26,109,177,96,50,153,41,47,43,197,100,50,145,152,148,76,89,89,41,14,187,
93,45,11,159,250,223,115,120,2,182,246,96,223,83,248,81,218,3,8,160,184,184,144,145,99,174,225,217,165,139,193,7,142,163,118,158,120,124,174,102,195,88,107,28,83,252,109,231,209,249,79,210,55,61,131,220,
156,108,150,45,93,172,21,217,55,35,147,11,19,19,41,41,42,82,255,78,207,224,182,59,239,226,47,83,239,197,229,114,53,172,2,112,48,63,143,85,43,95,0,96,197,203,107,56,63,54,86,19,195,27,174,27,163,122,92,
59,51,185,118,252,4,246,238,249,146,192,138,141,62,159,218,114,74,138,11,181,227,215,190,181,129,158,209,209,108,221,188,145,89,115,230,177,106,229,138,14,225,157,54,214,222,218,253,139,165,41,169,105,
56,93,206,102,11,79,48,179,254,54,15,0,167,203,201,244,191,206,230,238,59,254,196,168,49,215,208,39,41,153,247,55,172,7,96,202,131,211,249,228,163,237,184,92,78,254,241,244,114,246,238,249,146,27,110,
250,35,7,11,242,120,109,205,106,17,64,106,67,236,254,7,0,64,110,118,22,191,191,241,143,117,127,231,102,133,116,141,227,227,19,66,130,200,177,113,113,144,147,205,221,127,190,31,107,92,28,209,150,24,226,
19,122,99,54,153,181,125,166,207,156,77,110,118,86,88,225,9,80,92,84,24,212,165,202,35,37,245,18,92,46,103,200,246,220,156,108,158,88,180,52,236,241,5,65,158,188,221,110,111,50,100,208,209,104,87,226,
19,109,177,132,52,160,41,247,76,34,37,237,146,16,67,143,26,123,13,86,107,28,46,167,147,183,214,189,222,100,12,169,87,66,2,147,239,184,85,109,104,127,157,197,192,193,67,121,239,221,245,76,255,235,108,222,
223,176,30,147,201,68,74,234,37,60,241,216,92,126,127,243,31,121,239,221,245,188,191,97,61,178,44,179,250,181,117,188,245,198,90,161,0,109,72,98,82,178,246,239,248,132,222,90,44,165,62,170,128,56,53,207,
39,88,148,18,147,146,153,254,192,125,154,231,17,204,253,247,76,226,137,191,47,97,212,216,107,248,96,243,166,70,235,240,249,206,207,180,127,191,191,97,61,138,226,14,169,91,159,164,36,10,242,194,215,77,
113,135,31,138,118,187,221,66,124,206,37,28,118,123,131,6,100,171,168,224,138,65,67,66,158,68,138,91,97,242,189,83,154,20,159,244,204,126,88,173,113,33,98,86,80,144,71,73,81,17,70,217,168,6,50,51,251,
177,107,231,14,20,69,225,210,254,3,48,155,204,218,40,132,221,110,199,100,54,11,5,104,99,30,157,255,36,7,243,243,24,53,102,28,203,150,46,10,187,79,165,205,70,89,105,41,179,254,54,143,207,119,237,192,106,
141,35,39,39,11,187,253,40,214,184,56,6,14,30,66,223,48,35,80,14,187,157,89,15,77,227,133,151,95,165,32,47,143,242,178,210,6,251,92,117,245,8,20,69,161,87,175,4,44,22,139,182,79,110,118,22,179,254,54,
143,130,130,60,174,187,126,2,171,94,106,89,23,42,55,59,139,219,39,221,205,174,157,59,180,110,160,16,159,115,140,220,156,44,102,205,153,71,172,213,74,165,205,70,73,81,17,46,167,243,164,199,21,23,21,134,
125,26,2,124,176,101,35,195,134,143,160,111,70,63,22,47,92,0,192,254,156,44,20,69,17,93,173,115,132,226,162,66,38,222,114,35,38,179,153,65,131,135,178,248,169,5,90,23,230,181,87,87,227,114,133,182,129,
71,31,153,201,192,193,67,73,76,74,166,184,168,144,202,138,10,92,46,23,115,31,153,201,160,193,67,249,244,163,237,188,189,110,173,214,118,238,159,124,167,38,64,247,223,115,39,178,108,12,91,143,101,75,23,
19,107,141,163,164,184,48,68,252,22,63,181,128,244,204,126,164,164,166,177,224,241,57,154,128,108,221,188,49,232,216,69,84,86,84,132,252,29,136,37,62,241,248,92,6,14,30,138,213,26,39,196,231,92,192,100,
54,115,251,164,187,181,191,223,122,99,45,14,187,157,197,79,45,224,217,231,95,226,131,45,27,41,200,207,227,210,254,3,154,229,69,21,23,21,242,196,223,151,240,193,150,141,88,173,113,236,221,179,155,242,178,
82,182,110,222,200,11,171,94,197,233,116,106,79,178,173,155,55,242,143,103,150,211,181,171,137,253,185,217,164,164,166,105,129,66,193,217,199,229,114,169,177,24,255,3,39,152,112,30,138,162,40,97,227,130,
37,69,69,97,111,238,220,156,236,16,207,169,49,20,183,91,139,15,214,63,223,190,61,187,217,183,103,119,3,47,44,248,220,245,235,18,220,62,195,149,219,145,208,3,25,191,74,188,96,92,240,198,115,241,101,67,
69,81,200,251,58,151,74,91,69,208,199,134,199,227,161,164,168,136,207,119,238,240,7,13,19,168,180,217,216,240,246,155,28,169,170,106,80,206,193,252,60,190,255,238,91,60,30,15,159,125,250,9,0,23,92,216,
7,155,205,70,137,127,148,75,81,20,14,124,157,203,135,219,182,106,193,70,151,203,197,238,47,118,113,254,249,231,243,63,191,252,37,251,246,236,230,72,85,21,14,187,157,255,252,187,164,201,160,100,155,139,
118,215,40,206,117,251,182,71,250,36,37,83,80,144,167,121,43,130,230,181,191,67,197,135,55,1,85,18,112,231,248,209,87,133,228,146,255,112,68,92,204,142,196,249,191,8,77,170,20,246,21,180,101,251,219,176,
245,147,73,64,190,152,195,89,208,110,169,245,120,240,212,122,58,102,151,196,160,199,160,215,119,104,251,181,155,36,67,193,169,211,81,237,235,58,118,28,215,177,106,186,117,51,171,191,41,36,145,86,7,120,
155,56,250,76,124,79,43,156,67,194,249,179,19,83,215,46,116,55,155,58,100,251,11,17,31,129,160,61,34,33,209,37,42,146,56,107,28,62,124,120,106,106,33,36,149,223,71,211,171,133,7,237,70,208,174,62,95,93,
57,129,34,66,182,249,15,168,191,79,232,29,87,175,46,52,171,30,122,191,96,81,138,0,0,28,104,73,68,65,84,131,158,50,119,13,82,39,176,159,16,31,65,59,127,172,170,255,59,118,188,154,138,242,111,209,27,12,
72,146,20,164,7,62,124,170,122,248,247,151,66,116,163,161,160,213,105,81,176,166,168,165,72,33,251,5,235,86,227,85,243,249,247,149,78,162,119,62,140,178,204,121,231,157,23,168,162,16,31,129,224,92,71,
39,73,56,28,255,229,191,63,254,136,193,104,36,210,40,135,127,153,81,146,192,235,5,157,206,47,50,62,255,102,9,9,73,21,24,73,2,159,132,215,235,5,201,167,149,227,243,169,231,209,202,241,249,37,68,242,59,
66,65,221,190,192,63,181,242,53,25,244,31,26,210,13,145,252,213,242,97,140,52,214,149,33,196,71,32,104,31,158,143,94,175,67,142,144,233,214,221,76,183,110,102,116,146,206,239,117,72,33,226,227,243,121,
209,73,58,36,73,194,235,243,250,183,249,208,235,116,32,73,232,144,240,225,197,227,241,106,229,34,73,120,60,94,36,80,203,149,84,193,82,95,14,245,225,245,120,144,116,122,36,212,185,177,125,254,46,151,20,
44,122,190,58,183,202,231,243,161,211,73,117,106,132,15,175,207,7,94,95,167,138,183,10,241,17,116,8,253,209,73,58,12,6,29,166,174,81,244,232,102,70,175,215,251,5,66,187,191,241,249,125,17,157,36,33,73,
18,58,157,14,143,199,163,121,55,122,189,94,245,120,252,222,144,215,171,138,132,78,167,3,159,143,90,143,7,73,39,161,247,139,151,199,191,175,42,56,18,58,29,90,121,234,121,37,240,121,85,9,148,212,137,255,
3,101,6,234,67,80,183,203,229,58,222,169,236,38,196,71,208,129,36,72,2,36,116,58,61,122,189,30,159,175,78,72,2,65,227,128,215,19,216,174,238,231,67,167,211,161,247,127,188,62,31,94,175,23,189,94,135,215,
235,197,235,245,162,147,36,109,232,91,242,119,219,130,69,43,32,66,129,242,180,238,149,4,58,41,208,189,146,208,235,85,143,73,210,73,117,221,49,159,207,223,245,235,92,163,204,98,26,85,65,7,65,82,93,28,73,
21,162,128,240,4,255,91,146,164,160,1,171,186,120,79,157,64,133,11,13,251,143,243,139,146,79,43,179,97,250,66,112,156,201,231,243,214,117,205,252,93,173,128,87,21,124,108,232,210,50,58,58,83,150,75,216,
60,31,65,7,243,9,58,129,125,125,106,48,37,100,60,42,48,105,156,36,233,252,2,36,249,5,72,210,60,21,157,78,135,78,167,83,247,163,97,160,87,239,23,135,64,92,200,227,245,226,241,248,130,186,102,222,16,145,
10,17,67,234,98,67,154,151,21,180,191,118,94,255,62,106,128,187,243,180,63,209,237,18,180,123,135,39,248,31,190,160,255,170,55,127,157,240,224,143,241,250,188,30,191,16,233,180,27,67,175,243,119,177,130,
60,20,0,143,63,128,28,232,90,249,124,62,53,248,44,161,197,149,60,30,143,38,36,117,49,159,192,140,133,117,2,164,117,225,252,251,226,171,19,48,85,184,164,78,101,58,33,62,130,246,31,234,169,243,51,144,36,
112,29,171,230,251,138,74,124,18,72,62,9,73,39,225,243,250,2,250,163,142,68,249,71,190,234,198,164,36,144,124,218,104,84,64,190,116,146,132,87,139,201,168,98,226,245,121,67,134,224,37,80,207,225,243,169,
251,227,67,242,213,13,182,7,60,42,41,48,44,239,223,106,208,235,249,229,255,196,97,54,117,213,196,167,211,117,187,36,73,180,225,14,237,28,116,22,251,74,62,124,62,9,167,235,24,199,142,87,243,11,75,52,17,
17,17,212,212,214,162,215,233,52,17,146,36,9,157,94,237,78,121,61,94,106,106,106,137,136,48,224,241,120,212,124,30,157,14,175,215,131,199,235,213,68,74,39,233,208,235,245,232,244,58,106,106,106,209,249,
149,204,171,6,116,212,64,118,96,100,204,31,243,169,245,120,208,75,122,144,64,175,211,83,235,243,32,249,212,99,60,181,30,116,122,29,158,218,218,208,174,91,39,106,127,194,243,17,116,168,62,152,26,115,150,
136,136,136,160,155,217,76,215,168,46,106,44,72,175,3,159,127,68,202,160,215,186,59,94,79,93,87,72,169,169,65,246,139,149,207,231,195,231,245,250,61,22,73,243,128,34,34,34,208,235,116,212,212,214,226,
118,187,49,248,51,170,117,58,29,114,68,132,150,251,227,169,245,168,195,250,58,29,110,183,27,163,209,72,77,77,13,58,255,16,125,96,132,45,34,34,66,187,65,131,131,222,162,219,37,16,180,171,216,143,218,103,
49,155,187,82,235,169,69,111,208,225,245,121,209,251,99,44,6,189,30,189,94,167,138,130,94,205,221,209,69,24,240,249,61,28,157,94,13,62,7,146,8,61,30,47,122,157,42,58,129,46,150,33,66,175,230,249,232,36,
53,1,209,47,120,90,80,217,160,211,226,60,30,143,58,92,31,25,105,68,146,116,68,26,101,124,72,232,60,181,126,193,81,69,50,48,34,38,225,235,84,189,16,33,62,130,142,228,247,160,147,116,116,51,155,233,222,
205,28,50,140,30,220,181,1,48,232,245,120,245,122,188,254,81,44,157,127,40,93,146,36,60,181,181,106,66,162,191,11,230,241,168,211,118,4,70,198,128,208,192,113,32,252,164,141,174,129,193,160,215,226,59,
6,189,94,75,72,172,59,198,71,96,244,45,80,22,157,44,232,44,242,124,4,29,3,127,100,55,240,38,67,132,193,128,20,52,76,30,60,2,21,8,0,123,181,104,177,164,5,148,213,46,154,62,200,123,169,27,201,10,94,239,
77,231,31,29,147,130,142,213,233,116,254,191,117,254,110,149,90,53,111,189,209,50,181,155,166,215,70,192,130,135,227,133,231,35,16,180,195,110,151,68,96,196,200,27,146,183,227,13,242,58,116,254,55,222,
9,74,10,212,105,121,54,146,63,232,236,11,201,7,2,117,88,93,231,207,108,38,100,120,28,237,88,175,127,8,62,224,253,120,189,117,229,4,11,85,176,8,5,188,168,186,115,117,50,207,199,31,176,215,62,130,14,230,
20,52,195,190,178,44,135,172,23,222,28,18,147,146,153,242,224,244,51,86,207,41,15,78,15,89,215,188,229,191,81,253,129,250,128,7,18,184,157,195,101,49,7,9,129,218,37,146,252,163,86,146,118,124,168,40,248,
223,225,10,18,139,96,111,200,231,245,170,239,108,17,20,60,14,58,79,176,247,21,120,249,52,248,245,12,205,131,210,53,79,124,212,53,222,251,145,30,102,201,159,166,136,182,88,206,184,205,130,215,40,107,73,
251,19,221,46,129,191,81,198,48,111,193,194,22,29,99,50,153,73,76,78,62,229,115,246,138,79,8,105,184,137,201,201,141,46,81,19,14,189,161,238,109,40,45,92,18,184,217,131,68,39,208,29,10,126,197,193,227,
79,248,171,243,72,234,142,13,188,231,165,211,233,66,186,75,129,248,79,64,112,130,179,163,67,186,80,65,30,140,65,111,104,32,98,170,7,166,171,19,28,255,249,165,22,244,185,162,45,49,252,99,217,114,110,191,
235,110,86,191,182,142,245,239,111,57,169,8,168,162,101,60,45,155,69,91,44,13,108,102,50,157,218,250,117,162,219,37,104,17,170,135,116,73,227,98,148,148,140,205,191,186,72,160,177,202,178,17,89,150,177,
88,98,180,239,100,89,230,150,91,39,226,176,219,49,153,204,228,230,100,133,60,209,235,47,57,28,182,241,234,245,72,120,26,4,127,130,3,204,129,0,113,96,202,140,218,218,90,205,211,8,116,185,164,160,119,186,
124,1,145,242,11,138,26,243,241,79,123,17,36,34,193,175,74,4,191,13,175,150,163,230,0,25,12,134,144,132,196,64,125,2,1,236,128,103,164,197,146,36,169,69,157,46,135,253,40,247,79,86,215,157,251,253,205,
127,100,202,180,233,218,223,245,9,120,72,54,91,69,88,123,6,219,204,100,50,107,11,98,90,173,113,216,237,71,41,47,43,85,109,246,167,137,40,138,130,201,100,14,89,33,54,61,163,31,138,226,14,89,254,89,136,
143,224,140,50,123,206,99,68,199,88,40,43,45,37,62,33,33,228,137,248,220,138,151,216,187,251,75,172,113,113,148,149,150,178,98,249,50,250,95,254,91,110,184,233,15,148,151,150,98,183,31,101,208,144,161,
60,60,99,154,38,84,149,182,10,20,69,209,196,103,234,180,25,216,108,21,152,77,102,100,163,204,195,51,166,53,222,120,13,186,32,215,222,167,102,49,251,189,32,189,78,79,77,109,109,136,247,131,20,24,30,175,
123,3,61,248,101,46,31,80,235,63,70,231,15,28,27,12,146,63,118,163,211,222,31,11,196,126,124,18,218,219,237,190,224,248,143,63,238,4,254,243,249,131,225,94,175,7,41,48,151,144,215,131,78,210,7,29,131,
230,125,157,10,46,167,19,199,209,240,171,146,204,155,191,80,179,89,98,82,50,138,226,214,132,231,217,21,47,81,144,119,0,139,37,6,187,253,40,203,150,46,86,187,211,211,166,55,176,89,192,211,113,57,157,40,
138,162,61,28,110,191,235,110,202,74,85,113,154,124,223,148,70,5,80,136,143,224,148,49,153,204,164,164,165,49,225,218,49,106,163,155,52,153,244,204,76,0,250,95,254,91,222,219,176,158,183,222,88,139,44,
203,188,254,246,187,172,90,89,183,68,240,220,71,102,2,80,89,105,99,224,224,161,172,90,185,130,226,162,66,246,231,100,135,172,226,185,111,239,110,222,122,99,45,0,235,223,223,130,201,100,110,176,250,104,
128,136,8,189,250,174,150,207,71,143,238,221,57,225,58,70,141,187,134,31,108,71,181,87,25,130,187,83,146,20,152,12,76,141,253,4,2,208,58,157,206,159,227,163,247,103,41,171,175,72,104,19,20,74,161,211,
176,214,122,124,120,188,30,127,128,59,48,75,80,64,116,8,204,137,232,31,45,83,189,40,117,207,192,203,101,234,247,30,143,71,11,126,251,240,225,243,130,100,104,190,248,168,139,104,78,38,214,106,197,26,23,
199,178,37,139,195,199,134,50,251,49,110,212,48,0,174,27,63,129,171,134,171,75,126,15,28,50,148,220,236,44,86,44,95,166,93,239,192,191,205,102,179,102,179,146,226,34,70,141,185,134,101,75,23,147,155,157,
77,165,173,34,196,102,185,217,217,154,173,95,127,251,93,162,45,150,102,173,101,38,196,71,208,108,210,51,251,145,147,157,21,212,232,178,52,241,185,172,255,0,122,37,36,48,112,240,16,205,189,15,184,238,229,
165,165,218,49,197,133,133,220,114,235,196,70,207,145,27,84,126,224,6,107,76,124,244,6,29,17,178,58,137,152,217,20,69,84,159,222,154,72,132,143,159,4,36,64,170,251,51,240,151,68,19,199,157,57,2,1,215,
186,23,79,125,161,65,88,157,58,41,89,176,87,215,24,138,91,33,55,59,139,203,46,87,87,232,13,215,77,77,76,74,14,233,30,229,100,103,105,226,115,89,255,1,164,166,93,66,74,90,154,102,179,248,132,222,0,148,
5,219,172,168,144,27,110,250,67,163,245,8,46,223,110,63,218,236,184,157,16,31,65,179,41,46,42,12,89,174,58,184,219,85,80,144,71,89,89,105,136,183,163,5,150,131,246,75,76,78,214,110,18,69,81,26,236,235,
116,58,155,93,31,79,173,7,217,32,225,58,230,64,242,129,164,15,140,24,129,116,14,14,89,251,124,62,188,158,192,219,237,170,167,83,27,232,46,250,188,120,124,32,121,37,60,181,53,72,242,201,215,236,82,20,55,
185,57,89,20,228,31,224,149,181,111,146,146,154,214,32,230,18,232,106,5,95,255,0,251,115,178,81,20,133,197,11,23,52,136,15,133,28,147,148,28,82,174,44,203,13,68,240,84,16,226,35,104,224,198,7,216,186,
121,163,22,132,4,168,180,85,224,114,57,153,62,115,54,229,101,165,140,26,115,141,230,149,124,252,225,54,94,92,245,42,178,44,179,111,207,110,82,210,210,120,109,205,106,0,44,150,24,102,205,153,71,121,89,
41,191,191,233,143,60,60,227,65,213,203,201,201,226,247,55,253,17,91,69,133,22,243,105,9,53,138,132,132,1,215,207,213,180,175,55,194,125,13,60,161,96,223,204,28,213,21,131,161,249,11,6,42,138,194,51,75,
22,49,125,230,108,238,190,253,79,33,162,30,8,220,207,154,51,143,131,249,121,154,215,19,176,217,45,183,78,100,202,131,211,249,124,231,103,12,28,60,132,101,75,213,174,155,108,148,153,53,103,30,37,197,69,
252,254,166,63,176,96,222,92,205,51,157,50,109,58,101,165,165,33,30,207,169,160,7,50,146,47,76,56,231,215,106,23,156,58,93,163,186,112,50,251,42,110,55,7,190,222,143,205,86,81,247,169,168,208,130,147,
193,130,228,241,120,208,235,245,60,255,220,50,10,242,243,176,219,143,82,125,252,56,31,127,184,13,107,92,28,241,9,9,252,223,190,189,84,85,253,64,98,82,50,30,143,135,143,63,220,142,53,46,142,23,159,95,206,
55,135,14,2,240,159,127,151,240,211,79,63,146,152,156,204,215,251,115,41,46,42,196,86,241,189,54,26,84,144,119,128,239,190,45,15,25,29,10,185,81,253,19,116,5,62,134,246,248,49,132,255,132,206,112,72,120,
123,237,207,165,170,234,7,0,190,251,246,91,138,139,10,113,58,157,13,108,246,241,135,219,81,20,5,89,150,121,249,197,21,154,205,60,30,15,59,62,249,136,30,61,123,114,193,133,23,146,147,157,205,119,223,150,
19,27,23,135,44,27,217,186,121,35,241,9,9,252,235,149,85,28,248,58,87,235,154,149,149,149,146,154,118,9,249,121,7,248,230,208,65,202,74,15,107,231,172,111,195,112,237,175,240,223,165,117,107,181,95,59,
98,72,200,90,237,85,71,29,226,142,237,64,156,23,19,77,91,217,119,244,216,113,164,103,246,99,193,188,57,194,16,237,40,182,55,122,236,184,51,102,179,250,237,239,253,237,159,213,173,213,46,133,9,203,9,58,
14,109,105,95,135,221,78,121,89,169,104,83,237,136,99,78,231,25,181,153,36,98,62,130,182,96,223,158,47,217,183,231,75,113,33,218,17,197,69,133,39,77,240,60,19,136,215,43,4,2,65,155,32,196,71,32,16,180,
9,103,188,219,117,203,109,183,115,221,248,9,76,24,55,186,213,42,29,107,141,227,158,251,166,208,203,159,16,149,155,157,197,178,37,139,90,237,124,189,18,18,184,231,190,169,152,76,102,100,163,145,226,194,
111,26,228,70,180,22,215,253,238,6,102,60,252,8,191,237,247,107,209,90,5,29,80,124,206,80,68,242,201,69,75,235,146,145,90,49,194,232,114,57,121,111,195,122,45,55,100,245,107,111,146,158,217,239,148,114,
69,154,131,195,110,231,249,231,158,161,188,172,84,251,157,3,135,12,229,243,157,59,90,213,56,189,226,19,24,53,118,28,182,138,239,79,239,122,138,17,5,65,91,34,157,133,110,215,51,75,22,241,218,154,85,173,
254,91,92,46,103,136,208,148,151,30,62,173,105,2,154,115,190,128,240,4,60,175,112,217,185,103,18,89,150,153,61,247,113,22,204,251,91,139,166,153,16,8,58,101,183,171,178,222,235,250,103,131,88,107,28,41,
105,151,240,204,210,69,173,122,158,196,164,100,174,29,63,129,140,204,223,240,218,154,85,173,62,130,115,251,164,201,124,242,209,54,202,203,74,177,196,196,136,150,42,16,226,115,46,17,107,141,99,201,178,
127,178,104,225,130,102,189,69,123,58,216,237,71,249,228,195,237,56,236,118,174,29,127,195,41,191,18,208,28,210,51,250,17,159,208,91,123,195,88,32,16,226,115,14,10,207,51,75,22,157,149,60,18,135,221,142,
195,110,39,55,39,11,69,81,184,110,252,132,86,19,159,41,211,102,0,240,236,138,151,180,109,207,174,120,137,185,179,255,218,234,34,43,16,8,241,57,135,132,167,87,124,130,22,243,81,103,218,203,12,153,114,224,
76,51,241,150,27,67,254,254,242,255,190,230,254,201,119,138,214,218,14,153,242,224,12,94,123,117,21,14,187,157,196,164,228,179,146,188,215,206,196,167,53,134,67,90,111,72,229,246,73,147,137,79,232,205,
146,101,255,212,182,229,100,255,95,179,103,80,107,41,131,134,92,201,45,183,78,196,86,81,65,82,242,69,108,217,244,62,171,86,190,192,217,29,54,18,195,93,167,251,0,81,20,229,172,199,37,213,121,169,35,1,137,
219,39,77,110,114,102,198,142,139,116,246,60,159,192,76,119,173,197,19,143,205,229,137,199,230,158,181,75,247,218,154,213,218,244,16,109,193,111,127,211,87,60,38,195,96,50,153,137,182,88,112,185,156,196,
199,247,166,32,255,0,138,162,144,146,154,134,44,27,41,46,42,196,229,114,34,203,50,119,76,154,76,65,65,30,197,133,133,90,119,185,87,124,2,22,75,140,118,92,99,231,8,76,61,26,60,167,77,224,28,129,249,141,
131,183,53,86,94,160,13,5,234,173,40,10,86,107,28,101,101,135,67,186,211,177,214,56,172,214,56,109,190,101,151,211,217,232,132,106,237,25,145,225,44,104,183,36,38,37,51,123,238,99,252,227,153,229,164,
103,246,67,81,20,70,143,29,199,85,87,143,32,61,179,31,175,172,93,167,142,134,166,94,66,175,132,4,250,36,38,145,158,169,78,164,62,122,236,56,102,60,60,155,244,204,126,188,176,234,213,176,203,6,37,38,37,
243,228,226,37,164,103,246,99,212,216,113,218,4,91,83,30,156,206,244,153,234,177,131,134,12,213,202,11,156,119,253,251,91,195,46,1,20,88,29,36,49,41,153,133,139,151,50,117,218,116,210,51,251,241,226,170,
87,181,217,8,19,147,146,121,110,197,74,6,14,30,194,236,185,243,120,114,209,146,102,173,74,33,98,62,130,118,77,77,77,13,165,223,217,56,98,255,239,89,61,111,76,207,30,252,79,220,249,68,117,137,108,241,177,
241,9,9,76,24,55,70,243,12,130,231,22,150,101,153,65,67,134,242,214,27,107,41,46,42,228,131,205,155,52,175,231,170,171,71,48,119,246,76,28,118,59,101,101,135,25,53,118,92,131,89,0,7,14,30,138,227,168,
61,100,118,70,89,150,25,54,124,164,54,39,114,128,224,243,154,76,38,210,51,251,241,201,135,219,27,173,119,172,53,142,219,254,120,35,138,162,80,86,118,152,129,131,135,178,111,207,110,6,14,30,202,91,235,
94,215,230,177,222,248,193,199,29,214,126,66,124,4,26,255,46,251,14,199,143,63,19,41,203,218,122,85,173,141,207,231,227,232,127,127,228,248,137,19,244,77,105,249,19,126,223,238,221,33,93,146,171,134,143,
96,208,160,161,68,199,88,176,90,227,216,186,121,83,131,99,2,147,170,7,175,83,86,92,88,24,166,155,180,138,91,110,189,157,215,223,126,151,189,187,191,100,197,242,101,164,103,246,11,59,131,223,85,195,71,
112,89,255,1,88,227,212,46,83,73,113,81,147,245,46,46,42,212,186,102,142,163,118,109,106,210,148,212,180,144,20,139,250,115,90,119,36,251,25,26,15,7,9,58,10,205,181,175,227,199,159,49,69,69,33,203,242,
73,103,210,59,83,120,189,94,34,35,35,27,204,11,220,92,220,65,179,246,153,76,102,166,62,56,131,9,215,142,70,81,20,166,207,156,29,42,58,70,245,28,138,162,80,86,122,152,5,243,230,54,25,128,86,20,133,85,43,
87,240,218,154,85,76,159,57,155,223,223,252,71,222,123,103,61,83,253,169,16,1,162,45,22,238,185,119,10,127,184,225,122,20,69,97,214,156,121,39,173,119,253,217,6,131,69,41,120,84,44,120,254,235,246,106,
63,49,159,143,224,164,232,80,23,186,59,91,13,23,234,22,245,235,210,165,203,105,151,165,40,110,20,197,205,176,225,35,49,153,213,64,241,190,61,187,1,117,178,244,91,110,157,168,174,248,144,147,197,251,27,
214,243,228,162,37,188,189,238,117,64,77,34,13,236,27,224,186,241,19,144,141,70,108,21,234,170,14,111,175,123,29,151,203,73,126,222,1,230,205,95,200,190,189,234,254,31,127,184,13,89,54,50,112,200,80,226,
227,123,19,159,208,155,253,57,217,167,244,27,62,223,185,131,217,115,31,195,173,184,73,207,232,135,53,46,174,195,218,79,15,100,252,170,79,111,49,135,115,7,198,212,140,57,156,1,190,183,85,97,52,26,207,106,
227,5,117,46,102,163,209,136,41,170,101,49,3,151,83,157,28,253,167,159,126,4,192,227,241,176,107,231,103,36,38,39,99,171,168,96,205,170,151,40,43,43,213,38,81,119,57,93,36,38,39,115,224,235,253,124,115,
232,32,37,69,133,92,244,171,20,109,36,171,254,136,210,241,227,199,233,18,21,197,121,231,159,207,134,183,223,212,188,145,207,119,126,198,127,254,93,194,69,23,95,204,129,175,247,115,164,170,138,47,191,216,
69,106,218,37,124,115,232,32,175,173,89,141,205,86,65,117,117,53,37,69,69,84,218,42,240,120,60,20,228,231,113,164,170,10,151,211,201,193,252,60,109,132,43,248,119,28,169,170,226,192,215,251,185,228,215,
233,124,246,233,199,244,232,222,147,3,95,231,114,164,170,234,164,215,227,92,181,95,253,246,247,77,73,208,28,206,215,143,28,26,50,135,243,15,98,14,231,14,197,249,245,230,208,109,204,190,251,178,15,96,54,
155,49,24,12,103,189,241,154,205,102,98,99,186,119,122,91,5,150,151,174,180,85,208,43,62,129,231,86,188,164,117,35,79,26,255,58,71,237,87,191,253,189,187,109,71,221,28,206,2,129,224,220,192,98,137,97,
202,180,233,106,12,231,168,157,69,11,23,180,250,12,10,109,133,161,201,136,144,160,99,32,236,219,110,40,46,42,108,181,76,253,115,173,253,137,36,67,129,64,208,38,8,241,17,8,4,66,124,4,2,129,16,31,129,64,
32,16,226,35,16,8,132,248,8,4,2,129,16,31,129,64,32,196,71,32,16,8,132,248,8,4,2,33,62,2,129,64,16,150,70,38,144,23,116,44,132,125,5,231,94,251,19,158,143,64,32,16,221,46,65,27,63,159,36,9,73,18,94,146,
176,159,16,31,193,89,38,50,50,178,205,26,239,217,158,0,75,216,175,237,237,39,230,243,17,104,196,89,99,169,62,225,198,227,241,156,213,243,70,68,68,240,139,152,24,240,186,133,17,58,145,253,194,78,32,47,
28,239,14,230,142,55,211,190,221,186,70,18,19,19,67,183,238,61,206,218,234,7,160,174,128,224,56,82,137,78,52,188,211,226,92,181,159,152,64,94,112,82,140,114,4,120,220,56,29,63,156,245,115,235,133,240,
116,58,251,137,142,182,64,32,104,19,132,248,8,0,117,33,189,112,75,6,11,206,125,187,165,103,244,35,61,163,159,16,31,65,251,36,218,18,195,163,65,43,120,10,218,143,221,22,47,91,206,196,187,238,102,245,107,
235,120,251,253,45,244,105,39,107,187,171,226,35,137,143,248,248,91,68,51,246,75,207,236,71,122,102,63,117,53,77,255,223,193,223,167,164,165,129,4,38,179,153,94,9,9,152,204,102,210,51,251,209,39,57,153,
232,24,139,182,159,201,108,166,79,114,50,72,234,106,162,193,101,138,79,243,63,14,251,81,166,220,51,137,137,255,123,19,111,175,123,93,93,253,162,145,125,83,210,210,66,174,115,192,86,193,182,13,216,163,
190,237,98,227,226,180,253,100,163,28,114,108,96,159,102,183,51,218,105,192,89,237,34,92,18,178,173,32,255,64,131,37,70,210,51,250,133,221,46,56,117,30,157,191,144,88,107,28,95,237,221,141,203,233,164,
188,172,148,103,87,188,196,21,151,246,13,217,231,134,235,198,144,152,148,204,196,73,119,3,234,138,161,118,251,81,210,51,250,241,232,35,51,1,184,238,119,19,232,218,213,76,73,81,33,79,252,125,169,182,116,
113,180,197,194,172,135,166,137,139,125,10,56,93,78,109,49,194,250,76,255,235,108,82,82,211,248,124,215,103,40,138,155,215,214,172,214,108,21,32,96,203,104,75,12,243,230,47,196,233,114,178,63,39,155,178,
210,195,140,26,51,142,233,15,220,11,192,168,177,227,232,21,159,64,65,126,30,139,159,94,174,217,174,87,66,2,83,238,105,222,234,27,237,82,124,162,45,49,44,126,102,57,5,249,7,234,26,252,35,51,113,216,237,
152,76,102,30,157,191,16,147,217,140,162,184,177,88,98,200,205,206,98,241,83,11,78,235,156,151,93,62,160,193,114,186,157,141,148,212,52,82,82,211,66,26,235,201,143,185,132,107,71,13,195,229,114,34,203,
50,183,252,105,34,38,147,25,151,203,201,168,49,227,248,203,212,123,73,73,77,195,97,63,170,217,104,197,203,175,18,107,141,107,114,29,117,65,29,38,179,153,219,39,77,38,54,214,74,108,92,28,203,150,46,110,
176,79,172,53,142,171,134,143,96,212,85,131,154,93,110,98,242,69,76,184,118,180,102,135,219,39,77,38,218,98,193,97,183,51,106,204,56,22,63,181,128,88,107,28,138,226,214,108,183,248,233,229,164,164,166,
81,144,159,215,49,197,7,234,92,205,250,30,209,179,207,175,228,181,87,87,243,201,71,219,155,117,51,21,228,231,145,146,154,134,221,110,167,210,86,65,180,197,66,124,124,111,236,246,163,148,151,149,2,48,112,
240,80,174,189,126,2,138,91,161,172,236,176,38,114,137,73,201,216,108,21,157,230,38,137,181,198,145,155,157,213,162,99,138,139,10,181,101,136,21,69,97,215,206,29,92,53,124,4,37,69,133,216,237,71,169,180,
85,48,122,236,56,210,51,251,177,236,249,149,254,253,220,196,39,36,8,241,105,38,138,91,33,55,59,139,75,251,15,0,160,196,191,172,115,48,214,83,176,93,126,222,129,16,27,124,242,209,118,6,14,30,74,110,118,
22,70,89,166,164,168,144,107,199,79,32,49,41,89,179,93,64,12,59,172,231,211,212,83,214,233,114,54,75,120,2,221,131,226,162,66,28,118,59,159,124,180,29,69,113,51,229,193,25,148,151,149,210,39,49,137,146,
226,34,222,122,99,45,3,7,13,193,98,177,144,158,217,15,167,255,70,122,246,249,151,216,187,231,75,172,214,56,202,74,75,121,225,159,203,58,124,35,175,180,85,144,24,38,152,105,63,122,84,243,102,234,7,59,21,
37,52,235,245,131,45,155,152,242,224,116,18,19,147,121,127,195,122,0,114,179,179,184,56,37,77,115,233,5,45,20,31,197,77,110,78,22,5,249,7,88,253,218,155,97,61,15,167,203,25,214,118,138,162,104,222,76,
172,53,174,73,219,189,183,225,109,30,157,191,16,139,37,134,247,222,93,239,15,119,228,97,179,85,52,187,171,213,33,196,39,218,18,19,162,182,83,238,153,68,74,90,26,197,65,170,63,106,236,56,172,214,56,92,
78,39,111,173,91,27,182,156,207,119,125,198,7,155,55,134,116,223,0,122,197,39,48,111,254,66,86,173,92,193,7,91,54,1,176,106,229,10,173,220,247,55,172,231,173,117,107,145,101,153,181,111,189,203,234,151,
86,180,251,216,82,192,125,15,176,117,243,198,144,39,95,65,126,30,78,151,147,89,127,155,71,65,65,30,138,162,240,193,230,141,124,190,115,7,83,30,156,78,65,65,30,3,7,13,109,242,58,4,158,202,233,153,253,88,
182,116,145,42,62,57,89,220,125,239,20,166,255,117,54,159,239,218,65,74,234,37,188,183,225,237,70,99,23,130,198,68,72,97,217,210,69,76,255,235,108,238,190,227,79,33,118,40,41,42,164,172,180,148,71,231,
47,100,223,94,53,124,240,193,230,141,236,250,108,7,83,30,156,65,110,78,22,151,245,31,128,211,249,115,19,189,13,59,138,91,97,212,152,107,152,120,203,77,90,185,178,108,100,214,223,230,241,201,199,219,73,
76,74,102,235,230,141,205,178,93,135,234,118,217,42,42,184,98,208,208,16,151,95,113,187,153,124,239,148,70,197,39,216,21,237,21,159,192,237,147,38,163,184,221,244,74,232,221,168,251,120,89,255,1,196,199,
39,112,197,224,33,234,121,109,21,152,204,230,118,125,179,56,236,71,153,53,35,52,200,235,114,58,27,236,55,229,158,73,164,164,170,35,38,123,253,49,176,197,79,45,96,224,224,161,88,173,113,60,241,248,28,162,
45,49,218,245,15,23,127,120,226,177,185,254,152,92,221,205,49,125,234,189,12,28,50,148,148,212,75,212,174,90,152,115,11,194,219,45,240,192,4,216,183,71,29,8,144,101,99,131,135,192,244,7,238,165,87,124,
2,131,134,12,213,108,247,194,63,151,105,182,91,182,116,177,214,230,29,246,163,97,109,183,248,169,5,152,204,102,173,43,173,182,137,59,185,106,248,200,22,219,174,67,117,187,114,115,178,152,53,231,49,45,
88,89,210,194,70,124,251,164,201,124,190,115,7,159,124,180,157,148,212,52,30,157,95,151,247,34,27,141,218,191,15,230,231,81,94,86,170,121,66,29,229,169,153,155,211,188,152,64,65,126,94,3,183,254,243,157,
59,66,158,144,0,46,151,51,108,252,161,210,86,1,182,208,109,46,151,51,196,3,21,52,223,110,245,109,209,84,176,183,188,172,148,215,214,172,110,212,118,1,187,40,138,210,108,219,5,60,224,51,210,237,210,235,
245,103,253,205,216,211,237,34,188,245,198,90,28,118,59,139,159,90,192,179,207,175,228,131,45,155,40,200,63,160,5,225,154,131,221,126,148,203,252,251,95,214,127,128,246,228,40,200,63,192,163,243,23,114,
213,213,35,200,205,201,226,227,143,182,241,194,203,175,18,17,33,243,213,222,221,164,164,165,53,48,232,185,66,184,41,22,218,131,125,5,29,131,166,166,248,208,3,233,191,74,236,61,46,120,99,77,109,45,181,
181,231,110,227,84,20,55,121,95,239,167,210,63,210,20,248,120,60,30,74,138,10,249,124,231,103,234,168,85,66,111,42,109,21,108,120,251,77,142,84,85,53,40,231,96,126,30,223,127,247,173,118,35,238,207,201,
66,111,48,96,177,196,240,214,155,107,217,183,119,55,14,187,29,143,199,195,238,47,118,145,154,118,9,182,138,10,42,109,54,62,249,104,59,113,113,255,143,248,132,222,100,125,181,47,108,249,231,2,114,68,4,
93,34,141,180,39,251,10,58,14,225,218,223,161,226,195,155,128,31,36,96,226,248,209,87,174,10,254,178,250,132,155,159,157,46,113,229,58,0,93,163,186,96,234,26,133,176,175,224,92,105,127,27,182,126,122,
7,144,111,0,106,165,122,51,110,68,69,70,226,62,161,160,212,212,136,171,215,142,209,235,245,152,162,162,16,246,21,156,75,237,15,240,0,94,29,160,124,247,125,197,143,245,191,53,155,186,18,17,33,166,251,105,
207,134,239,222,205,212,104,159,91,216,87,208,22,237,175,162,162,162,22,80,0,143,14,56,246,227,79,63,255,187,254,193,6,131,158,232,30,221,49,117,141,18,141,180,29,97,48,24,136,138,234,130,165,103,119,
34,12,134,38,246,19,246,21,156,253,246,231,241,250,190,5,170,1,197,0,56,13,178,49,191,162,162,34,51,46,46,46,108,159,173,107,84,23,113,85,59,112,159,92,216,87,112,182,168,241,120,15,1,78,224,132,30,232,
121,196,254,223,170,40,217,240,27,79,109,109,79,115,51,223,203,16,8,4,130,150,240,245,129,188,35,255,254,214,182,216,227,241,126,7,56,244,64,36,32,69,118,233,82,89,171,156,184,200,83,91,219,221,233,116,
34,68,72,32,16,156,9,42,42,42,248,207,225,210,35,39,106,121,230,191,63,57,15,0,71,0,167,4,88,128,158,192,249,128,245,162,11,126,121,139,167,70,201,168,81,220,191,20,151,77,32,16,156,14,134,8,217,102,144,
141,249,135,191,171,124,213,173,212,148,3,63,0,14,192,37,1,81,254,143,217,47,66,61,128,110,254,109,50,106,34,162,88,91,64,32,16,52,23,31,234,112,186,130,26,92,118,2,63,2,255,5,126,6,142,3,238,255,15,177,
173,18,134,62,227,250,56,0,0,0,0,73,69,78,68,174,66,96,130,0,0};
const char* OperatorEditor::operatorEditor_287x218_png = (const char*) resource_OperatorEditor_operatorEditor_287x218_png;
const int OperatorEditor::operatorEditor_287x218_pngSize = 15614;
//[EndFile] You can add extra defines here...
//[/EndFile]

@ -39,7 +39,7 @@
*/
class OperatorEditor : public Component,
public SliderListener,
public ComboBoxListener
public ButtonListener
{
public:
//==============================================================================
@ -58,12 +58,16 @@ public:
void paint (Graphics& g);
void resized();
void sliderValueChanged (Slider* sliderThatWasMoved);
void comboBoxChanged (ComboBox* comboBoxThatHasChanged);
void buttonClicked (Button* buttonThatWasClicked);
// Binary resources:
static const char* operatorEditor_287x218_png;
static const int operatorEditor_287x218_pngSize;
private:
//[UserVariables] -- You can add your own custom variables in this section.
String opNum;
//[/UserVariables]
//==============================================================================
@ -75,7 +79,6 @@ private:
ScopedPointer<Slider> s_egv2;
ScopedPointer<Slider> s_egv3;
ScopedPointer<Slider> s_egv4;
ScopedPointer<ComboBox> opMode;
ScopedPointer<Slider> opLevel;
ScopedPointer<Slider> opFine;
ScopedPointer<Slider> opCoarse;
@ -84,13 +87,15 @@ private:
ScopedPointer<EnvDisplay> envDisplay;
ScopedPointer<Slider> sclLeftLevel;
ScopedPointer<Slider> sclRightLevel;
ScopedPointer<ComboBox> kbdLeftCurve;
ScopedPointer<ComboBox> kbdRightCurve;
ScopedPointer<Slider> sclLvlBrkPt;
ScopedPointer<Slider> sclRateScaling;
ScopedPointer<Slider> keyVelSens;
ScopedPointer<Slider> ampModSens;
ScopedPointer<VuMeter> vu;
ScopedPointer<ToggleButton> opMode;
ScopedPointer<ComboBoxImage> kbdLeftCurve;
ScopedPointer<ComboBoxImage> kbdRightCurve;
Image cachedImage_operatorEditor_287x218_png;
//==============================================================================

@ -111,91 +111,43 @@ DexedAudioProcessorEditor::DexedAudioProcessorEditor (DexedAudioProcessor* owner
{
LookAndFeel::setDefaultLookAndFeel(&dx_lnf);
setSize (866, 420);
setSize (866, 677);
processor = ownerFilter;
addAndMakeVisible (cartButton = new TextButton("CART"));
cartButton->setButtonText ("CART");
cartButton->addListener (this);
cartButton->setBounds(5, 6, 50, 18);
addAndMakeVisible (loadButton = new TextButton("LOAD"));
loadButton->setButtonText ("LOAD");
loadButton->addListener(this);
loadButton->setBounds(59, 6, 50, 18);
addAndMakeVisible(saveButton = new TextButton("SAVE"));
saveButton->setButtonText ("SAVE");
saveButton->addListener (this);
saveButton->setBounds(113, 6, 50, 18);
addAndMakeVisible (&programs);
programs.setEditableText(false);
programs.setJustificationType (Justification::centredLeft);
programs.setTextWhenNothingSelected (String::empty);
programs.setBounds(167, 6, 160, 18);
rebuildProgramCombobox();
programs.addListener(this);
addAndMakeVisible(storeButton = new TextButton("STORE"));
storeButton->setButtonText("STORE");
storeButton->addListener(this);
storeButton->setBounds(331, 6, 50, 18);
addAndMakeVisible(initButton = new TextButton("INIT"));
initButton->setButtonText("INIT");
initButton->addListener(this);
initButton->setBounds(385, 6, 50, 18);
addAndMakeVisible(monoButton = new ToggleButton("MONO"));
monoButton->setButtonText("MONO");
monoButton->addListener(this);
monoButton->setBounds(439, 6, 50, 18);
addAndMakeVisible(sendButton = new TextButton("SEND"));
sendButton->setVisible(false);
sendButton->setButtonText("SEND");
sendButton->addListener(this);
sendButton->setBounds(493, 6, 50, 18);
sendButton->setVisible(processor->sysexComm.isOutputActive());
//addAndMakeVisible (&programs);
//programs.setEditableText(false);
//programs.setJustificationType (Justification::centredLeft);
//programs.setTextWhenNothingSelected (String::empty);
// programs.setBounds(167, 6, 160, 18);
addAndMakeVisible(midiMonitor = new MidiMonitor(&processor->sysexComm));
midiMonitor->setBounds(645, 6, 110, 18);
addAndMakeVisible(settingsButton = new TextButton("PARMS"));
settingsButton->setButtonText("PARMS");
settingsButton->addListener(this);
settingsButton->setBounds(754, 6, 50, 18);
addAndMakeVisible(aboutButton = new TextButton("ABOUT"));
aboutButton->setButtonText("ABOUT");
aboutButton->addListener(this);
aboutButton->setBounds(807, 6, 50, 18);
// OPERATORS
addAndMakeVisible(&(operators[0]));
operators[0].setBounds(7, 38, 280, 90);
operators[0].setBounds(2, 1, 287, 218);
operators[0].bind(processor, 0);
addAndMakeVisible(&(operators[1]));
operators[1].setBounds(294, 38, 280, 90);
operators[1].setBounds(290, 1, 287, 218);
operators[1].bind(processor, 1);
addAndMakeVisible(&(operators[2]));
operators[2].setBounds(579, 38, 280, 90);
operators[2].setBounds(578, 1, 287, 218);
operators[2].bind(processor, 2);
addAndMakeVisible(&(operators[3]));
operators[3].setBounds(7, 133, 280, 90);
operators[3].setBounds(2, 220, 287, 218);
operators[3].bind(processor, 3);
addAndMakeVisible(&(operators[4]));
operators[4].setBounds(294, 133, 280, 90);
operators[4].setBounds(290, 220, 287, 218);
operators[4].bind(processor, 4);
addAndMakeVisible(&(operators[5]));
operators[5].setBounds(579, 133, 280, 90);
operators[5].setBounds(578, 220, 287, 218);
operators[5].bind(processor, 5);
// add the midi keyboard component..
@ -207,14 +159,18 @@ DexedAudioProcessorEditor::DexedAudioProcessorEditor (DexedAudioProcessor* owner
const int keyboardHeight = 90;
midiKeyboard.setBounds(4, getHeight() - keyboardHeight - 4, getWidth() - 8, keyboardHeight);
global.editor = this;
addAndMakeVisible(&global);
global.setBounds(5,235,855,90);
global.setBounds(2,437,864,144);
global.bind(processor);
sendPopup.addItem(1, "Send program to DX7");
sendPopup.addItem(2, "Send cartridge to DX7");
monoButton->setState(processor->isMonoMode() ? Button::ButtonState::buttonDown : Button::ButtonState::buttonNormal);
global.setMonoState(processor->isMonoMode());
rebuildProgramCombobox();
global.programs->addListener(this);
updateUI();
startTimer(100);
@ -231,8 +187,7 @@ void DexedAudioProcessorEditor::paint (Graphics& g) {
g.fillRoundedRectangle(0.0f, 0.0f, (float) getWidth(), (float) getHeight(), 0);
}
void DexedAudioProcessorEditor::buttonClicked(Button *buttonThatWasClicked) {
if (buttonThatWasClicked == cartButton) {
void DexedAudioProcessorEditor::cartShow() {
int result = processor->cartManager.getCarts()->show();
if ( result < 1 )
return;
@ -240,12 +195,12 @@ void DexedAudioProcessorEditor::buttonClicked(Button *buttonThatWasClicked) {
processor->loadBuiltin(result-1);
processor->setCurrentProgram(0);
rebuildProgramCombobox();
programs.setSelectedId(processor->getCurrentProgram()+1, dontSendNotification);
global.programs->setSelectedId(processor->getCurrentProgram()+1, dontSendNotification);
processor->updateHostDisplay();
return;
}
if (buttonThatWasClicked == loadButton) {
void DexedAudioProcessorEditor::loadCart() {
FileChooser fc ("Import original DX sysex...", File::nonexistent, "*.syx;*.SYX;*.*", 1);
if ( fc.browseForFileToOpen()) {
@ -265,14 +220,14 @@ void DexedAudioProcessorEditor::buttonClicked(Button *buttonThatWasClicked) {
}
processor->setCurrentProgram(0);
rebuildProgramCombobox();
programs.setSelectedId(processor->getCurrentProgram()+1, dontSendNotification);
global.programs->setSelectedId(processor->getCurrentProgram()+1, dontSendNotification);
processor->updateHostDisplay();
}
return;
}
if (buttonThatWasClicked == saveButton) {
void DexedAudioProcessorEditor::saveCart() {
FileChooser fc ("Export DX sysex...", File::nonexistent, "*.syx", 1);
if ( fc.browseForFileToSave(true) ) {
String f = fc.getResults().getReference(0).getFullPathName();
@ -288,18 +243,11 @@ void DexedAudioProcessorEditor::buttonClicked(Button *buttonThatWasClicked) {
AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon,
"Error",
"Unable to write: " + f);
return;
}
}
return;
}
if (buttonThatWasClicked == storeButton) {
storeProgram();
return;
}
if (buttonThatWasClicked == sendButton) {
void DexedAudioProcessorEditor::sendToDx7() {
int result = sendPopup.show();
if ( result == 1 ) {
@ -321,13 +269,10 @@ void DexedAudioProcessorEditor::buttonClicked(Button *buttonThatWasClicked) {
processor->sysexComm.send(MidiMessage(raw, 4104));
}
global.setSystemMessage(String("Done sending cartridge"));
return;
}
return;
}
if (buttonThatWasClicked == settingsButton) {
void DexedAudioProcessorEditor::parmShow() {
int tp = processor->getEngineType();
AlertWindow window("","", AlertWindow::NoIcon, this);
@ -349,15 +294,14 @@ void DexedAudioProcessorEditor::buttonClicked(Button *buttonThatWasClicked) {
AlertWindow::showMessageBoxAsync(AlertWindow::WarningIcon, "Midi Interface", "Error opening midi ports");
}
sendButton->setVisible(processor->sysexComm.isOutputActive());
return;
//sendButton->setVisible(processor->sysexComm.isOutputActive());
}
if (buttonThatWasClicked == initButton ) {
void DexedAudioProcessorEditor::initProgram() {
processor->resetToInitVoice();
return;
}
/*
if (buttonThatWasClicked == monoButton ) {
processor->setMonoMode(monoButton->getToggleState());
monoButton->setState(processor->isMonoMode() ? Button::ButtonState::buttonDown : Button::ButtonState::buttonNormal);
@ -371,10 +315,10 @@ void DexedAudioProcessorEditor::buttonClicked(Button *buttonThatWasClicked) {
}
AlertWindow::showMessageBoxAsync(AlertWindow::WarningIcon, "Sorry", "Soon !");
}
}*/
void DexedAudioProcessorEditor::comboBoxChanged (ComboBox* comboBoxThatHasChanged) {
processor->setCurrentProgram(programs.getSelectedId()-1);
processor->setCurrentProgram(global.programs->getSelectedId()-1);
processor->updateHostDisplay();
}
@ -408,13 +352,13 @@ void DexedAudioProcessorEditor::updateUI() {
}
void DexedAudioProcessorEditor::rebuildProgramCombobox() {
programs.clear(dontSendNotification);
global.programs->clear(dontSendNotification);
for(int i=0;i<processor->getNumPrograms();i++) {
String id;
id << (i+1) << ". " << processor->getProgramName(i);
programs.addItem(id, i+1);
global.programs->addItem(id, i+1);
}
programs.setSelectedId(processor->getCurrentProgram()+1, dontSendNotification);
global.programs->setSelectedId(processor->getCurrentProgram()+1, dontSendNotification);
}
void DexedAudioProcessorEditor::storeProgram() {

@ -32,48 +32,35 @@
/**
*/
class DexedAudioProcessorEditor : public AudioProcessorEditor,
public ButtonListener,
public ComboBoxListener,
public Timer {
DexedAudioProcessor *processor;
ComboBox programs;
PopupMenu cartPopup;
PopupMenu sendPopup;
MidiKeyboardComponent midiKeyboard;
DXLookNFeel dx_lnf;
ScopedPointer<TextButton> cartButton;
ScopedPointer<TextButton> loadButton;
ScopedPointer<TextButton> saveButton;
ScopedPointer<TextButton> storeButton;
ScopedPointer<TextButton> aboutButton;
ScopedPointer<TextButton> settingsButton;
ScopedPointer<TextButton> sendButton;
ScopedPointer<TextButton> initButton;
ScopedPointer<ToggleButton> monoButton;
ScopedPointer<Component> midiMonitor;
void storeProgram();
OperatorEditor operators[6];
public:
DexedAudioProcessor *processor;
GlobalEditor global;
DexedAudioProcessorEditor (DexedAudioProcessor* ownerFilter);
~DexedAudioProcessorEditor();
void timerCallback();
//==============================================================================
// This is just a standard Juce paint method...
void paint (Graphics& g);
void buttonClicked (Button* buttonThatWasClicked);
void comboBoxChanged (ComboBox* comboBoxThatHasChanged);
OperatorEditor operators[6];
GlobalEditor global;
void updateUI();
void rebuildProgramCombobox();
void loadCart();
void saveCart();
void initProgram();
void storeProgram();
void sendToDx7();
void cartShow();
void parmShow();
};

@ -179,7 +179,7 @@ void CtrlDX::updateDisplayName() {
}
String msg;
msg << label << " = " << getValueDisplay();
editor->global.setParamMessage(msg);
//editor->global.setParamMessage(msg);
editor->global.repaint();
}

@ -166,7 +166,7 @@ void DexedAudioProcessor::processBlock(AudioSampleBuffer& buffer, MidiBuffer& mi
}
extra_buf_size -= numSamples;
// flush the event, they will be process in next cycle
// flush the events, they will be process in the next cycle
while(getNextEvent(&it, numSamples)) {
processMidiMessage(midiMsg);
}
@ -350,7 +350,7 @@ void DexedAudioProcessor::keydown(uint8_t pitch, uint8_t velo) {
}
if ( voices[i].midi_note < pitch ) {
voices[i].live = false;
voices[note].dx7_note->transfertState(*voices[i].dx7_note);
voices[note].dx7_note->transferState(*voices[i].dx7_note);
break;
}
return;
@ -391,7 +391,7 @@ void DexedAudioProcessor::keyup(uint8_t pitch) {
if ( highNote != -1 ) {
voices[note].live = false;
voices[target].live = true;
voices[target].dx7_note->transfertState(*voices[note].dx7_note);
voices[target].dx7_note->transferState(*voices[note].dx7_note);
}
}

@ -267,11 +267,10 @@ void Dx7Note::peekVoiceStatus(VoiceStatus &status) {
/**
* Used in monophonic mode to transfert voice state from different notes
*/
void Dx7Note::transfertState(Dx7Note &src) {
void Dx7Note::transferState(Dx7Note &src) {
for (int i=0;i<6;i++) {
env_[i].transfert(src.env_[i]);
env_[i].transfer(src.env_[i]);
params_[i].gain_out = src.params_[i].gain_out;
}
}

@ -52,7 +52,7 @@ class Dx7Note {
// PG:add the update
void update(const char patch[156], int midinote);
void peekVoiceStatus(VoiceStatus &status);
void transfertState(Dx7Note& src);
void transferState(Dx7Note& src);
private:
Env env_[6];

@ -115,7 +115,7 @@ void Env::getPosition(char *step) {
*step = ix_;
}
void Env::transfert(Env &src) {
void Env::transfer(Env &src) {
for(int i=0;i<4;i++) {
rates_[i] = src.rates_[i];
levels_[i] = src.levels_[i];

@ -45,7 +45,7 @@ class Env {
void getPosition(char *step);
static void init_sr(double sample_rate);
void transfert(Env &src);
void transfer(Env &src);
private:
// PG: This code is normalized to 44100, need to put a multiplier

Loading…
Cancel
Save