Browse Source

Update dexed

tags/2018-04-16
falkTX 7 years ago
parent
commit
7bf5c7e729
37 changed files with 1217 additions and 807 deletions
  1. +464
    -276
      ports/dexed/source/BinaryData.cpp
  2. +6
    -6
      ports/dexed/source/BinaryData.h
  3. +1
    -1
      ports/dexed/source/CartManager.h
  4. +2
    -2
      ports/dexed/source/DXComponents.cpp
  5. +3
    -19
      ports/dexed/source/DXLookNFeel.cpp
  6. +4
    -10
      ports/dexed/source/DXLookNFeel.h
  7. +1
    -1
      ports/dexed/source/EngineMkI.cpp
  8. +1
    -1
      ports/dexed/source/EngineMkI.h
  9. +1
    -1
      ports/dexed/source/EngineOpl.cpp
  10. +46
    -33
      ports/dexed/source/GlobalEditor.cpp
  11. +12
    -12
      ports/dexed/source/GlobalEditor.h
  12. +38
    -29
      ports/dexed/source/OperatorEditor.cpp
  13. +5
    -5
      ports/dexed/source/OperatorEditor.h
  14. +210
    -105
      ports/dexed/source/ParamDialog.cpp
  15. +12
    -15
      ports/dexed/source/ParamDialog.h
  16. +18
    -11
      ports/dexed/source/PluginData.cpp
  17. +5
    -7
      ports/dexed/source/PluginEditor.cpp
  18. +5
    -4
      ports/dexed/source/PluginEditor.h
  19. +20
    -1
      ports/dexed/source/PluginParam.cpp
  20. +4
    -2
      ports/dexed/source/PluginParam.h
  21. +64
    -23
      ports/dexed/source/PluginProcessor.cpp
  22. +1
    -1
      ports/dexed/source/PluginProcessor.h
  23. +5
    -18
      ports/dexed/source/ProgramListBox.cpp
  24. +0
    -1
      ports/dexed/source/ProgramListBox.h
  25. +36
    -36
      ports/dexed/source/msfa/aligned_buf.h
  26. +126
    -126
      ports/dexed/source/msfa/controllers.h
  27. +25
    -12
      ports/dexed/source/msfa/dx7note.cc
  28. +1
    -0
      ports/dexed/source/msfa/dx7note.h
  29. +94
    -47
      ports/dexed/source/msfa/env.cc
  30. +7
    -1
      ports/dexed/source/msfa/env.h
  31. +0
    -0
      ports/dexed/source/msfa/exp2.cc
  32. +0
    -0
      ports/dexed/source/msfa/exp2.h
  33. +0
    -0
      ports/dexed/source/msfa/freqlut.cc
  34. +0
    -0
      ports/dexed/source/msfa/freqlut.h
  35. +0
    -0
      ports/dexed/source/msfa/module.h
  36. +0
    -0
      ports/dexed/source/msfa/pitchenv.h
  37. +0
    -1
      ports/dexed/source/msfa/synth.h

+ 464
- 276
ports/dexed/source/BinaryData.cpp View File

@@ -7,8 +7,209 @@
namespace BinaryData namespace BinaryData
{ {
//================== Switch_32x32.png ==================
//================== dexedIcon.png ==================
static const unsigned char temp_binary_data_0[] = static const unsigned char temp_binary_data_0[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,2,0,0,0,2,0,8,6,0,0,0,244,120,212,250,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,226,2,15,2,57,31,53,243,7,62,
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,96,86,213,157,255,241,207,125,150,44,100,7,178,66,128,0,33,129,16,146,0,226,
130,10,226,86,151,42,106,213,177,243,107,103,218,233,58,90,107,157,169,182,213,78,181,155,86,91,173,109,109,167,211,169,211,214,214,169,29,157,182,211,42,69,68,68,65,144,45,9,97,11,129,132,176,101,129,144,144,132,108,207,114,127,127,104,109,171,108,129,
36,207,189,231,190,95,255,185,36,121,206,185,247,124,159,207,61,247,222,115,172,155,175,191,194,22,0,0,240,20,31,93,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,
0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,
0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,
0,0,0,0,8,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,32,0,208,5,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,
0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,
0,32,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,
0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,
0,0,2,0,93,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,
0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,4,0,0,0,64,0,0,0,0,230,10,208,5,56,83,151,92,118,165,62,125,199,221,198,180,103,107,77,181,30,252,242,61,28,88,128,154,227,137,154,195,12,0,0,0,30,68,0,0,0,128,0,0,
0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,
0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,16,0,0,0,0,1,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,32,0,0,0,0,2,0,0,0,4,0,0,0,64,0,0,0,
0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,128,73,236,168,77,39,0,160,230,16,0,224,53,209,104,148,78,0,64,205,33,0,192,107,34,209,8,157,0,128,154,67,0,0,105,28,0,168,57,4,0,24,47,60,48,64,39,0,160,230,16,0,224,53,253,3,253,116,2,0,106,14,1,
0,158,27,140,125,125,116,2,0,106,14,1,0,94,211,199,96,4,64,205,33,0,192,131,105,188,159,193,8,128,154,67,0,128,231,28,59,118,140,78,0,64,205,113,169,0,93,112,102,18,18,18,149,157,147,163,172,172,28,101,102,231,40,43,43,91,169,105,233,74,73,73,85,114,
74,138,82,82,82,21,23,23,175,96,48,168,64,32,160,64,224,173,174,14,135,195,10,133,67,10,135,194,26,24,232,87,87,87,167,186,187,186,212,213,121,84,157,93,157,58,212,218,162,214,150,102,181,182,52,169,165,185,89,125,125,189,206,29,140,221,93,156,8,0,53,
135,154,67,0,48,215,168,81,73,42,158,81,162,201,83,166,105,98,193,100,77,154,52,89,217,57,185,103,244,187,252,129,128,226,149,240,206,63,103,101,231,156,244,255,63,124,168,85,123,26,234,181,167,97,183,246,52,236,86,237,142,109,58,218,209,238,136,126,
137,70,163,234,237,233,81,226,168,81,156,36,0,53,135,154,67,0,48,160,83,2,1,149,150,205,86,89,197,28,77,159,81,170,137,147,10,228,243,197,230,110,201,216,204,44,141,205,204,210,220,121,231,189,243,239,246,239,219,171,109,91,170,181,165,166,90,213,149,
27,213,219,219,19,179,190,234,62,214,205,96,4,168,57,212,28,2,128,123,197,39,36,232,220,243,46,212,57,231,93,160,89,101,179,149,152,152,232,216,207,58,62,127,130,198,231,79,208,21,87,189,95,161,129,1,109,169,169,214,186,181,171,181,254,205,55,212,217,
121,116,68,63,75,87,231,81,101,102,102,157,209,207,254,219,75,127,84,117,211,126,103,117,238,13,55,12,199,101,139,130,175,189,38,95,123,59,3,237,36,236,81,163,52,112,217,165,146,223,252,178,100,117,28,85,234,218,181,154,119,238,5,212,156,17,172,57,32,
0,252,141,146,210,50,93,178,232,10,205,59,127,190,18,18,18,93,247,249,131,113,113,170,152,115,142,42,230,156,163,143,125,242,14,109,218,180,94,175,188,180,68,155,54,174,147,109,15,255,206,89,71,59,58,206,248,103,239,184,96,129,62,243,251,223,168,47,28,
50,251,36,243,249,20,46,47,83,112,197,171,178,168,57,39,20,42,47,51,254,203,223,146,84,154,157,167,203,166,78,215,185,159,188,147,154,51,194,53,7,4,0,197,197,197,107,225,165,151,235,154,247,223,168,220,188,113,198,180,203,31,8,232,156,121,231,235,156,
121,231,235,72,219,97,189,252,210,139,90,242,194,239,117,172,187,123,216,254,102,71,199,145,51,254,217,172,228,20,125,120,206,185,250,143,55,87,153,127,117,155,158,161,72,193,100,5,26,234,169,58,199,17,201,203,147,125,138,123,211,110,150,16,8,104,209,
212,98,93,55,163,84,185,41,105,212,156,24,213,28,120,56,0,36,37,37,235,253,139,111,210,229,239,187,86,41,41,169,70,183,117,244,152,177,186,229,182,15,235,253,139,111,214,43,203,150,232,143,191,127,94,109,109,135,135,126,48,158,229,180,246,213,197,51,
181,106,207,110,109,107,105,50,254,252,11,151,76,151,255,192,1,89,44,103,250,183,225,200,239,87,184,180,212,200,182,37,199,199,107,113,73,153,174,42,42,81,114,92,60,53,199,1,53,7,127,21,224,74,138,167,60,96,122,35,227,227,227,117,221,13,55,235,115,159,
191,79,101,21,115,20,31,31,239,153,3,28,12,6,53,173,104,186,174,188,234,253,74,78,73,213,174,157,181,10,133,134,110,67,141,241,249,19,84,49,103,222,25,255,188,37,105,70,86,174,150,213,237,80,196,54,123,167,47,203,239,87,52,33,94,254,166,38,225,175,174,
254,103,206,148,157,157,109,216,21,127,80,55,206,172,208,61,11,46,87,121,222,120,197,249,189,115,173,229,244,154,227,36,135,90,91,180,114,197,50,2,192,112,185,228,210,43,117,239,125,15,106,238,188,243,21,23,23,231,221,164,231,247,107,90,209,116,93,118,
229,213,138,70,34,218,189,107,231,144,220,175,27,61,102,172,46,184,112,193,89,253,142,148,248,4,5,253,126,85,29,220,111,254,129,72,75,147,239,208,33,89,189,189,130,20,73,73,85,120,246,108,89,150,25,79,71,88,146,46,47,44,214,253,151,94,165,115,242,39,
42,232,247,83,115,28,88,115,8,0,111,49,118,37,192,137,147,10,244,181,135,30,211,167,63,115,183,210,210,51,168,180,111,75,78,78,209,135,62,242,9,61,242,248,143,84,88,52,253,172,127,95,219,225,67,67,242,185,174,159,49,75,211,198,122,227,201,222,80,121,
249,219,95,21,222,102,75,138,204,174,144,229,51,163,12,21,140,30,171,135,175,190,65,119,92,176,80,105,46,124,184,207,107,53,7,6,6,0,191,223,175,15,126,232,163,122,248,219,63,80,209,244,18,142,240,9,228,79,152,168,175,61,244,152,62,250,137,219,21,159,
144,112,198,191,231,240,16,13,70,159,101,233,206,249,151,40,224,243,192,234,212,169,169,10,21,78,225,234,127,210,68,217,163,71,187,190,29,1,159,79,31,158,115,174,30,187,246,38,21,103,102,11,238,168,57,48,44,0,140,27,63,65,223,124,244,123,90,124,211,173,
242,7,88,226,224,148,7,223,231,211,251,174,190,78,143,60,246,67,21,76,158,122,70,191,227,104,71,187,66,161,161,121,141,47,63,61,67,183,150,205,241,68,223,71,139,138,21,77,244,238,85,98,52,24,84,184,196,253,1,125,66,250,104,125,251,154,27,117,211,204,
10,249,44,102,117,220,86,115,8,0,134,184,252,202,107,244,240,119,126,112,198,39,149,151,229,230,141,211,215,31,126,92,87,93,115,253,25,253,252,145,33,124,210,247,166,210,10,21,140,30,107,126,167,7,131,198,62,249,126,58,194,165,165,178,92,254,84,252,85,
69,37,250,206,181,55,121,227,124,53,184,230,16,0,92,204,239,15,232,83,119,220,173,143,127,250,78,79,61,221,63,228,223,71,113,113,250,200,199,255,89,159,251,252,125,10,14,242,97,201,214,150,230,161,59,158,150,79,159,157,191,80,126,203,252,91,1,246,184,
113,138,100,121,111,202,56,58,102,140,236,137,19,221,59,86,252,126,221,57,127,161,62,117,222,69,138,243,240,67,126,166,212,28,2,128,75,101,100,140,214,215,30,126,76,139,46,187,146,35,57,68,206,159,127,177,190,250,205,239,40,61,227,244,31,156,108,105,
30,218,215,218,10,70,143,213,77,165,21,222,184,18,46,47,147,109,121,105,87,110,75,225,178,114,215,126,250,49,163,146,244,240,85,139,117,233,212,98,138,133,65,53,135,0,224,50,227,198,231,235,235,143,60,161,169,133,69,28,197,33,54,101,234,52,61,244,232,
247,53,97,98,193,105,253,255,205,205,7,135,252,51,220,90,54,71,19,210,71,155,223,217,73,73,10,23,21,122,230,220,10,21,78,145,157,230,206,69,184,242,211,51,244,200,213,55,104,234,152,76,138,132,129,53,135,0,224,18,69,197,51,244,213,135,30,99,67,136,225,
188,210,25,155,169,7,190,241,168,166,156,70,192,106,105,26,250,193,24,240,249,116,231,252,133,158,120,176,42,58,173,72,209,36,243,119,55,139,38,36,40,90,236,206,43,231,25,89,57,122,248,170,197,26,155,148,76,113,48,180,230,16,0,92,96,86,249,108,221,255,
224,195,198,47,229,235,4,201,201,41,250,242,131,15,157,242,117,202,225,74,227,133,99,179,116,253,140,89,230,119,180,223,175,240,172,50,227,155,25,46,47,147,2,65,215,125,238,138,188,124,61,120,197,251,141,95,202,151,154,67,0,112,180,210,89,21,250,252,
23,31,224,97,191,17,52,106,84,146,238,251,202,55,84,60,125,230,9,255,159,166,131,7,21,141,14,207,50,190,31,172,56,71,121,169,105,198,247,179,157,147,163,72,94,158,177,237,139,228,230,200,206,117,95,251,202,243,198,235,75,139,222,199,195,126,30,170,57,
4,0,7,42,41,45,211,61,95,226,203,63,22,18,18,18,117,239,253,15,106,226,164,227,223,159,27,24,232,31,150,77,63,36,41,206,31,208,103,230,95,226,137,117,243,194,165,165,178,13,252,162,177,125,62,87,206,112,148,229,142,211,125,124,249,123,174,230,16,0,28,
102,242,148,66,221,123,223,131,103,181,122,20,206,78,82,82,178,190,244,149,111,42,59,39,247,184,255,253,224,254,125,195,246,183,103,100,229,232,234,226,153,94,184,244,81,164,216,188,167,203,195,197,197,210,40,119,61,227,80,56,54,75,247,45,186,202,83,
155,248,80,115,8,0,142,147,153,149,173,47,220,255,53,37,176,182,118,204,101,100,140,214,253,15,60,164,228,228,148,247,252,183,3,7,134,119,48,126,120,206,121,202,58,206,223,53,77,100,202,84,69,82,204,105,103,52,37,89,145,66,119,45,206,149,147,146,170,
47,95,122,149,226,89,77,212,211,53,135,0,16,99,201,201,41,186,239,43,223,28,212,251,161,24,94,217,57,185,186,251,222,251,101,189,235,221,245,3,251,246,14,235,223,77,8,4,116,199,5,11,205,239,96,191,239,173,135,229,12,17,42,47,151,229,115,207,20,122,106,
124,130,190,114,217,53,108,230,67,205,33,0,196,146,101,249,116,247,189,247,43,111,220,120,142,146,195,204,44,45,215,71,62,246,169,191,249,119,123,247,238,25,246,191,91,150,59,78,151,23,78,55,191,131,199,102,42,50,33,223,245,205,8,231,79,144,198,186,231,
157,121,191,229,211,189,11,175,240,196,67,167,212,28,56,58,0,124,232,31,63,166,153,165,229,28,33,135,122,223,53,215,107,193,162,203,255,50,24,27,27,70,228,239,126,244,156,243,53,102,84,146,241,253,27,42,153,41,59,232,222,41,104,59,16,84,164,212,93,207,
109,252,227,220,243,52,51,39,143,193,77,205,33,0,196,210,249,23,46,208,181,215,223,196,209,113,184,127,250,196,237,202,205,27,39,73,234,237,233,209,225,67,173,195,254,55,71,5,227,116,251,249,11,140,239,91,43,33,65,225,25,238,221,45,47,60,179,68,114,209,
27,59,23,21,76,213,117,94,88,115,130,154,3,39,7,128,236,156,92,125,234,246,207,113,100,92,32,33,33,81,159,253,151,47,202,255,246,107,82,123,27,247,140,200,223,157,51,126,130,46,153,50,205,248,254,141,20,20,40,154,158,238,186,207,29,205,200,80,212,69,
155,253,228,165,166,121,227,249,18,106,14,156,28,0,44,203,167,59,239,254,130,18,19,121,0,199,45,38,79,41,212,135,62,242,9,141,205,204,26,209,45,58,63,118,206,124,101,36,154,189,124,174,101,89,10,149,185,235,129,64,91,82,184,162,92,242,185,99,137,17,191,
229,211,221,23,93,170,4,158,248,167,230,120,144,163,206,250,91,110,251,144,10,167,177,203,150,219,92,125,237,98,93,125,237,226,17,253,155,201,241,241,250,228,185,23,233,225,87,151,154,221,185,163,71,43,60,105,146,2,123,220,113,165,19,153,50,69,118,154,
123,102,45,110,43,159,171,194,177,236,41,66,205,97,6,32,166,10,167,21,107,241,141,183,112,68,112,218,206,159,88,160,249,147,166,24,223,206,112,73,137,236,65,238,151,30,11,209,132,4,133,167,187,39,192,23,103,102,123,102,219,105,192,177,1,192,231,243,233,
147,183,223,37,63,211,112,24,164,79,158,123,161,82,227,205,94,33,210,138,139,83,104,166,243,159,168,143,148,150,202,10,198,185,162,79,253,62,159,110,191,96,129,39,118,155,4,28,29,0,174,191,225,150,211,222,7,26,248,107,105,9,137,250,248,188,249,198,183,
211,158,56,81,209,209,163,157,251,229,159,149,165,232,120,247,172,217,113,227,204,114,77,72,31,205,0,2,1,32,150,178,115,114,117,227,45,31,228,72,224,140,93,60,185,80,243,242,39,25,223,206,112,121,185,108,7,94,176,218,150,79,225,114,247,172,217,145,155,
146,166,91,102,205,97,224,128,0,16,235,15,240,143,31,251,52,59,252,225,172,125,250,188,139,148,100,248,126,237,118,90,154,194,83,156,183,174,126,184,184,72,74,114,207,226,76,31,159,55,159,29,254,128,88,7,128,153,179,202,53,103,238,185,28,5,156,181,209,
163,146,244,209,185,231,27,223,206,72,241,116,217,14,218,21,51,154,148,164,72,97,161,107,250,175,44,119,188,230,140,159,192,128,1,98,29,0,62,244,143,159,224,8,96,200,92,86,88,172,138,188,124,163,219,104,5,3,10,149,150,58,231,234,191,172,76,150,75,174,
166,45,203,210,71,60,16,18,1,199,7,128,133,139,174,80,193,228,41,28,1,12,169,219,47,88,160,196,96,208,232,54,218,227,199,43,154,21,251,77,118,34,227,198,201,206,206,118,77,191,93,58,181,72,5,163,199,48,72,128,88,6,0,159,207,167,155,110,229,193,63,12,
189,204,164,100,125,120,206,121,198,183,51,52,171,92,118,12,95,97,179,253,1,133,103,185,103,237,124,191,207,167,91,121,240,15,136,125,0,88,176,232,114,101,103,231,210,251,24,22,87,21,149,152,191,171,91,74,178,34,211,138,98,246,231,195,37,37,82,130,123,
214,95,88,52,165,72,89,201,41,12,14,32,150,1,192,178,124,186,241,3,183,209,243,24,190,115,76,210,103,46,88,168,120,195,23,150,138,20,21,42,26,131,253,16,162,233,233,138,76,118,207,186,29,126,203,167,155,103,205,102,96,0,177,14,0,23,47,92,164,236,28,174,
254,49,188,114,82,82,245,255,42,230,153,221,72,127,64,145,242,145,223,44,40,84,86,38,203,69,43,232,45,156,82,168,108,174,254,129,216,7,128,107,174,187,145,94,199,136,120,255,244,82,21,103,102,27,221,198,104,78,142,34,185,35,23,168,35,5,5,210,104,119,
173,160,119,221,140,89,12,6,224,56,70,116,142,180,164,180,76,147,10,120,242,255,100,14,29,106,213,190,198,61,218,183,119,143,58,143,118,168,167,183,71,189,61,61,234,233,57,38,73,138,143,139,87,92,66,130,18,226,19,20,23,31,175,148,148,84,101,231,228,42,
43,43,71,89,217,217,74,75,207,160,19,223,102,89,150,62,51,255,18,221,245,135,255,81,40,18,49,182,157,161,89,179,228,107,109,149,53,204,109,180,227,226,21,42,153,33,55,173,158,95,150,59,78,147,50,120,242,159,154,131,152,7,128,107,185,250,127,143,214,150,
102,109,88,191,86,27,214,173,209,238,186,157,234,237,237,57,171,223,23,31,31,175,130,201,133,42,158,81,162,233,51,74,53,173,104,186,146,146,147,61,219,191,227,211,210,245,119,101,115,245,244,166,55,205,13,58,163,70,41,92,84,164,224,182,109,195,28,52,
220,179,217,15,87,255,212,28,56,40,0,100,231,228,170,98,206,60,122,92,82,111,111,175,86,44,95,170,87,150,253,73,123,27,27,134,244,119,247,247,247,107,199,246,45,218,177,125,139,126,247,252,179,146,164,41,133,69,186,104,193,34,93,48,127,129,210,51,188,
151,214,111,152,89,166,55,26,235,181,187,237,144,177,109,140,20,78,149,127,239,94,249,186,187,135,231,247,143,205,148,157,239,174,69,150,114,83,210,52,103,252,68,10,14,53,7,177,14,0,151,92,122,165,124,62,159,167,59,187,163,189,93,75,94,248,157,94,90,
242,71,29,59,214,61,98,127,119,119,93,173,118,215,213,234,231,63,253,177,202,42,102,235,210,203,175,210,57,231,94,224,153,227,225,183,124,186,115,254,66,221,253,199,231,21,137,70,205,156,5,240,249,21,46,47,87,220,170,85,67,254,187,109,203,82,56,6,15,
27,158,173,203,10,139,229,245,205,126,169,57,136,121,0,176,44,75,11,22,93,238,217,78,142,68,34,90,182,244,5,61,243,139,167,212,215,215,27,179,207,97,219,81,85,109,218,160,170,77,27,52,113,82,129,110,249,224,63,232,156,121,222,88,26,117,82,198,24,125,
160,180,66,207,86,111,52,182,141,118,102,166,34,227,199,203,191,127,255,16,207,46,76,147,82,220,245,20,189,207,178,180,104,202,52,106,14,53,7,177,14,0,229,179,207,209,152,49,99,61,217,193,123,27,27,244,227,39,191,171,186,157,59,28,245,185,26,247,52,232,
209,111,62,160,130,41,83,245,241,79,221,169,169,133,69,198,31,139,91,103,205,209,218,189,13,106,108,63,98,108,27,195,165,51,229,107,106,150,21,9,15,201,239,139,38,142,82,164,216,125,95,164,115,198,77,208,232,81,73,242,34,106,14,78,59,40,143,196,31,89,
120,233,21,158,236,220,149,43,150,233,222,187,239,112,220,64,252,107,13,187,119,233,190,123,238,210,111,254,251,105,133,195,97,163,143,135,223,231,211,157,243,47,145,207,50,120,98,56,33,81,225,146,25,67,119,37,89,94,38,249,221,183,160,210,162,169,222,
252,114,161,230,192,81,1,32,62,33,65,179,61,246,240,95,52,26,213,51,79,63,165,39,159,248,182,34,17,231,159,224,182,29,213,115,207,254,82,247,223,123,151,154,14,30,48,250,216,76,29,147,169,197,37,101,70,183,49,82,80,160,104,106,218,217,255,158,188,60,
69,115,114,92,215,254,196,96,80,115,61,246,240,31,53,7,142,12,0,231,204,187,64,241,241,241,158,233,208,80,40,164,239,124,235,107,239,60,13,235,38,245,187,235,116,255,23,62,167,134,250,93,70,31,163,219,202,207,209,184,180,116,99,219,103,249,124,10,157,
229,67,123,182,223,175,176,131,182,29,30,140,115,243,11,20,231,146,45,138,169,57,222,168,57,158,13,0,231,95,120,177,103,58,51,18,137,232,7,79,60,170,245,111,190,225,218,54,116,117,30,213,87,190,244,175,218,186,101,179,177,199,41,206,239,215,157,23,44,
116,213,114,182,131,54,102,140,194,147,206,252,42,56,52,125,186,52,106,148,43,155,126,225,36,239,44,54,70,205,129,99,3,64,66,66,162,202,202,189,179,9,199,79,127,252,3,173,89,181,210,245,237,232,235,235,213,55,30,248,162,106,170,43,141,61,86,197,89,57,
186,182,120,166,209,231,99,184,164,68,118,92,112,240,95,42,41,169,138,78,113,231,151,232,168,96,156,202,243,198,83,115,168,57,136,117,0,40,159,61,87,113,113,222,152,254,255,205,127,63,173,151,95,122,209,156,47,143,112,88,143,61,242,117,163,239,207,125,
104,246,185,202,73,73,53,182,125,86,92,188,194,37,131,155,198,183,37,69,42,202,101,185,244,125,237,217,227,242,21,244,200,244,63,53,7,142,14,0,179,231,158,235,137,78,220,92,189,73,207,61,251,75,227,218,117,236,88,183,190,245,141,127,27,209,5,68,70,82,
124,32,160,59,46,88,96,244,98,49,209,9,249,138,14,98,37,182,200,196,137,178,199,184,119,237,124,175,60,252,71,205,129,227,3,64,89,197,28,227,59,176,163,189,93,223,127,236,91,198,182,239,224,129,253,250,254,227,230,182,175,52,103,156,174,152,54,195,224,
17,238,83,184,188,66,246,233,92,253,199,5,21,158,89,226,218,166,90,146,42,242,242,101,58,106,14,28,31,0,38,79,41,84,70,198,104,163,59,47,26,141,234,7,79,60,162,163,71,59,140,110,231,166,13,235,180,98,249,82,99,219,247,145,185,231,107,108,146,185,155,
151,216,233,105,138,156,198,61,253,240,204,153,178,92,124,203,110,234,216,44,165,39,38,82,115,168,57,136,117,0,240,194,213,255,202,21,203,180,185,106,147,39,78,148,159,253,244,223,117,180,163,221,200,182,37,6,131,186,253,252,5,70,31,191,240,244,98,69,
79,242,58,110,116,244,104,69,243,39,184,186,141,94,184,250,167,230,192,21,1,160,164,212,236,197,86,122,122,142,233,153,95,60,229,153,19,165,183,167,71,191,126,230,231,198,182,111,246,184,124,85,140,206,52,182,125,86,48,238,36,239,245,91,10,151,87,72,
46,223,168,101,102,78,30,53,135,154,131,88,7,0,159,207,167,105,69,211,141,238,184,231,159,253,149,241,211,112,239,182,252,165,37,58,176,127,175,177,237,187,54,127,146,236,222,94,99,219,103,231,231,43,146,249,222,61,57,66,133,83,100,167,185,251,109,8,
191,207,167,226,204,108,106,14,53,7,177,14,0,83,11,139,148,144,96,238,189,184,166,131,7,244,226,31,127,231,201,19,230,185,223,60,99,108,219,18,253,1,5,171,171,140,62,126,225,178,114,217,127,181,0,82,52,49,81,209,226,98,215,183,107,218,216,44,197,7,2,
198,30,55,106,14,92,19,0,102,204,156,101,116,167,253,246,185,95,43,18,137,120,242,132,89,253,218,10,181,52,55,25,219,62,127,83,179,172,125,251,204,61,128,41,41,138,20,22,254,37,16,204,42,147,2,65,215,55,107,102,182,217,211,255,212,156,38,193,37,1,160,
168,216,220,215,170,142,180,29,214,235,43,151,123,250,164,249,211,11,191,55,186,125,193,205,213,82,127,191,185,179,0,69,197,138,38,38,42,146,157,35,59,47,215,136,54,21,103,153,59,253,79,205,49,191,230,24,21,0,166,24,188,21,231,146,23,126,239,217,36,254,
103,175,44,95,170,126,131,191,32,173,129,144,2,213,213,230,182,47,224,87,184,188,92,225,114,115,30,212,45,28,155,69,205,161,230,32,214,1,96,204,152,177,74,31,196,202,99,110,210,219,211,163,101,127,122,193,243,39,77,111,79,143,54,172,91,99,116,27,253,
7,14,200,119,240,160,177,237,179,115,114,92,187,217,207,187,101,38,37,43,205,208,103,142,168,57,222,169,57,70,4,128,41,133,230,94,253,175,126,253,85,245,244,28,227,172,145,244,234,43,203,140,111,163,191,178,82,234,31,224,96,115,245,79,205,161,230,16,
0,78,43,0,76,157,102,108,103,189,254,218,43,156,49,111,171,169,222,164,238,238,46,179,7,199,192,128,2,108,81,234,120,83,199,152,187,126,3,53,199,91,53,199,245,1,96,226,164,201,70,118,84,219,225,67,218,190,181,134,51,230,109,209,104,84,27,215,175,53,127,
22,96,239,62,249,154,155,57,224,14,54,105,244,24,35,219,69,205,241,102,205,113,117,0,200,159,96,230,110,92,171,13,216,115,123,168,109,218,176,206,19,237,244,87,86,74,3,33,14,184,67,77,72,55,115,207,17,106,142,119,107,142,43,3,64,124,66,130,198,140,53,
115,58,110,213,74,166,226,222,109,115,213,38,79,60,157,236,235,235,83,96,235,22,14,184,3,37,6,131,198,110,228,68,205,241,110,205,113,101,0,200,207,159,40,159,203,215,19,63,158,246,35,109,218,211,176,155,179,229,93,142,29,235,86,253,238,58,111,12,148,
61,123,100,29,106,229,160,59,240,234,223,50,176,93,212,28,106,142,235,2,192,248,124,51,167,255,107,54,87,113,166,156,192,142,109,222,184,50,182,36,5,54,85,74,33,110,5,56,73,126,186,153,175,28,83,115,168,57,174,11,0,121,227,198,155,57,24,171,55,113,166,
156,192,118,15,13,70,95,79,143,252,219,183,113,208,29,36,119,148,153,211,255,212,28,106,142,235,2,64,86,118,14,105,220,99,118,238,240,214,23,98,96,119,189,116,248,48,7,222,41,1,32,106,102,187,168,57,212,28,215,5,128,236,156,92,227,58,232,192,254,125,
58,210,70,193,63,145,206,206,163,158,235,159,224,166,77,82,36,204,193,143,117,241,106,110,86,78,106,170,113,237,162,230,80,115,152,1,112,136,186,218,237,156,37,167,80,191,123,151,183,6,205,177,99,242,111,223,193,129,143,33,59,52,32,127,101,37,53,135,
154,3,39,4,128,196,81,163,148,146,98,94,26,111,168,231,68,59,149,125,123,247,120,174,205,254,186,58,89,237,237,28,252,24,9,84,215,40,201,231,163,230,80,115,224,132,0,48,214,208,247,255,121,21,231,212,246,239,107,244,92,155,45,73,254,141,27,101,243,78,
242,200,247,125,75,179,2,251,246,82,115,168,57,112,74,0,200,48,116,57,206,61,13,245,156,37,167,28,140,123,61,217,110,127,87,151,2,181,59,57,1,70,210,64,232,173,215,49,169,57,212,28,16,0,134,83,115,211,65,245,246,246,112,150,156,66,211,193,3,158,109,123,
160,182,86,214,209,14,78,130,145,234,239,45,155,229,235,235,163,230,80,115,232,4,39,5,128,209,25,230,13,198,198,198,6,206,144,211,208,215,215,171,174,206,78,143,182,222,86,96,195,38,41,18,229,68,24,102,86,75,139,252,141,123,169,57,240,120,205,113,226,
12,192,24,243,6,99,107,115,19,103,200,105,106,105,241,110,95,249,58,143,202,183,139,91,1,195,26,179,66,3,10,84,86,82,115,64,205,113,98,0,72,75,75,55,111,48,182,182,112,134,156,166,195,30,95,39,63,176,125,135,196,21,201,240,245,239,150,45,242,245,246,
82,115,64,205,113,98,0,72,54,240,117,156,214,22,246,129,63,93,237,71,142,120,186,253,150,109,43,184,105,147,108,219,230,100,24,234,190,109,105,81,96,79,35,53,7,212,28,199,6,128,228,20,227,58,231,16,105,252,180,177,50,151,228,107,111,151,111,23,239,112,
15,37,59,20,86,96,211,38,106,14,168,57,206,158,1,48,113,48,146,198,79,59,141,183,147,198,37,41,184,109,155,212,213,77,71,12,145,192,150,154,119,158,250,167,230,128,154,227,212,0,144,100,214,174,92,93,93,157,234,239,239,231,12,25,68,127,65,178,162,81,
5,170,54,73,81,222,10,56,235,190,108,61,36,255,158,61,212,28,80,115,156,28,0,44,203,167,196,81,163,204,58,185,120,160,107,80,186,25,140,239,240,31,110,147,175,129,215,185,206,74,40,164,64,229,38,89,212,28,80,115,156,29,0,18,18,19,204,59,185,186,187,56,
59,6,161,179,243,40,157,240,87,2,91,183,74,61,44,232,114,54,253,231,59,73,255,81,115,64,205,113,74,0,136,55,112,48,118,49,24,7,163,239,93,175,104,121,157,21,137,156,240,225,53,156,162,239,14,181,158,114,6,133,154,3,106,142,67,2,64,92,124,60,105,220,227,
122,88,190,244,61,252,135,14,201,119,146,123,216,56,142,80,72,129,141,149,39,156,250,167,230,128,154,227,180,25,128,4,19,211,56,247,151,6,85,183,7,6,20,14,135,233,136,119,9,108,174,145,205,149,202,233,135,166,173,219,228,59,141,194,78,205,1,53,199,49,
51,0,220,143,131,52,48,192,19,204,239,102,69,194,10,86,86,209,17,167,227,208,33,249,79,115,39,60,106,14,168,57,78,9,0,193,56,227,58,166,255,4,239,30,227,228,137,28,199,185,170,109,105,150,181,111,31,29,113,50,225,144,226,54,109,58,229,212,63,53,7,212,
28,135,5,0,159,223,103,92,199,132,35,17,206,142,193,166,241,80,136,78,56,129,96,117,181,108,10,252,137,67,210,182,109,178,6,241,214,4,53,7,212,28,167,4,0,159,223,188,193,200,189,165,51,184,136,99,48,158,136,21,10,41,88,93,77,71,28,175,111,14,31,86,96,
119,253,160,126,134,154,3,106,142,99,2,128,121,105,60,194,96,28,180,104,148,43,152,147,94,229,30,60,40,29,59,70,71,188,187,95,234,234,168,57,212,28,106,14,1,128,52,238,238,193,200,242,183,39,61,167,38,77,148,146,146,232,136,119,127,241,205,152,46,157,
246,221,127,106,14,168,57,4,128,225,46,74,17,6,35,131,113,8,251,38,33,65,145,146,82,58,226,56,236,180,116,133,138,138,168,57,212,28,106,142,27,3,128,145,87,37,60,144,115,6,131,209,166,19,78,116,117,87,81,33,197,5,233,136,19,141,183,226,105,138,166,166,
82,115,64,205,113,91,0,48,49,133,89,62,178,17,134,232,203,63,127,130,236,156,28,58,226,164,227,205,175,240,220,57,58,221,91,1,212,28,128,0,48,108,2,129,0,103,7,206,126,108,36,36,40,92,198,212,255,233,176,211,210,21,46,158,70,205,1,92,21,0,12,156,186,
10,248,25,140,24,130,171,255,242,10,89,6,46,90,51,108,253,85,84,164,72,202,169,111,5,80,115,0,102,0,72,227,112,172,200,132,124,217,185,76,253,15,198,159,111,5,216,22,53,7,112,69,0,136,24,248,46,38,131,17,103,195,142,143,87,120,230,44,58,226,76,164,167,
43,50,173,152,154,3,184,33,0,12,244,155,183,33,131,159,193,56,104,113,113,76,117,255,89,168,188,66,138,167,63,206,84,184,120,154,162,169,41,212,28,80,115,156,30,0,250,13,28,140,193,32,175,108,13,86,98,98,34,157,32,41,50,126,188,236,188,92,58,226,44,88,
62,191,66,179,79,124,43,128,154,3,106,142,99,2,128,121,155,156,164,164,164,114,118,12,122,48,142,242,124,31,216,113,241,10,149,49,245,63,36,50,50,20,41,44,162,230,128,154,195,12,192,200,74,78,78,225,236,24,164,248,132,4,207,247,65,168,188,76,86,92,60,
39,195,16,9,79,47,82,244,56,95,140,212,28,80,115,28,18,0,76,188,31,151,76,26,31,148,132,132,68,35,151,103,29,140,200,184,113,178,199,141,227,100,24,66,111,189,21,48,251,61,183,2,168,57,160,230,56,36,0,244,246,246,24,247,90,78,114,10,105,124,48,188,126,
47,46,26,12,42,60,139,169,255,225,96,167,191,247,86,0,53,7,220,255,119,72,0,144,164,222,158,30,163,58,38,133,193,56,184,193,56,202,219,247,226,194,229,229,18,211,145,195,215,191,197,239,189,21,64,205,161,230,192,33,1,160,187,187,203,172,52,206,253,184,
65,201,200,24,227,217,182,71,242,242,100,143,31,207,73,48,140,44,191,95,161,57,127,123,43,128,154,67,205,1,1,96,120,210,120,106,26,11,115,12,66,250,232,209,158,108,183,29,23,84,168,172,140,19,96,118,0,194,99,0,0,22,247,73,68,65,84,100,42,190,34,133,211,
168,57,240,116,205,33,0,140,68,199,248,124,202,204,98,25,215,211,175,205,222,28,140,161,89,101,178,152,250,31,49,225,226,226,119,110,5,80,115,168,57,112,72,0,232,234,236,52,174,115,178,178,25,140,167,107,244,104,239,77,199,69,114,115,101,231,231,115,
240,71,208,95,223,10,160,230,80,115,224,144,0,208,209,209,110,222,96,204,202,230,12,57,77,233,30,75,227,118,32,248,214,131,127,136,197,165,159,34,133,211,168,57,212,28,58,193,41,1,160,189,237,48,105,220,203,53,217,99,105,60,84,54,139,167,254,99,40,92,
92,172,35,199,186,169,57,212,28,56,34,0,180,27,152,198,115,88,207,253,116,229,228,230,121,166,173,145,236,28,217,19,38,112,208,99,200,242,251,213,150,145,78,205,161,230,192,17,1,224,72,155,113,157,51,105,210,100,206,144,211,16,159,144,160,49,99,198,122,
162,173,118,32,160,80,5,83,255,78,112,196,103,81,115,168,57,112,66,0,56,114,196,188,91,0,217,57,185,74,72,96,181,169,83,25,55,206,59,15,194,133,102,205,146,197,10,100,142,208,214,115,140,154,67,205,129,19,2,192,161,214,22,227,150,230,244,249,124,42,152,
60,133,179,228,20,242,60,50,24,35,89,217,178,39,78,228,128,59,196,161,238,46,217,166,21,100,106,14,53,199,141,1,32,28,14,171,189,253,136,113,29,84,48,165,144,179,228,84,105,124,188,249,131,209,246,7,20,102,234,223,81,6,34,17,181,27,56,11,64,205,161,230,
184,46,0,72,82,107,115,147,113,29,52,121,242,84,206,146,83,24,159,111,254,3,113,225,89,165,18,107,143,59,78,179,97,139,1,81,115,168,57,174,13,0,45,45,205,198,117,80,97,209,116,206,146,83,245,209,180,98,163,219,23,205,202,84,116,210,36,14,180,3,181,116,
153,183,24,16,53,135,154,227,206,0,208,116,208,184,14,202,205,27,167,204,76,22,231,56,145,49,99,51,53,218,224,167,113,109,191,95,3,21,179,57,208,14,213,212,117,148,154,67,205,129,19,2,192,129,3,251,140,236,164,89,124,1,156,208,52,195,175,86,194,165,165,
178,152,250,119,172,3,71,59,168,57,212,28,56,33,0,236,219,219,104,230,96,44,159,195,153,114,2,38,79,87,70,198,102,42,90,80,192,65,118,176,189,6,46,7,76,205,241,110,205,113,117,0,104,58,184,95,161,80,200,184,78,154,89,90,38,203,178,56,91,142,163,168,120,
134,145,237,178,253,126,133,103,27,252,212,127,95,159,236,104,196,253,51,0,157,29,138,24,246,250,49,53,199,155,53,199,245,1,32,26,141,170,185,233,128,113,157,148,146,146,170,226,25,51,57,91,222,37,53,53,77,83,166,78,51,178,109,225,153,51,165,164,100,
99,143,157,191,178,82,254,186,93,174,111,71,36,26,213,193,78,243,158,3,160,230,120,175,230,184,62,0,72,210,190,198,61,70,118,212,197,11,47,229,108,121,151,217,115,207,149,207,231,51,174,93,145,177,99,140,126,234,223,106,58,168,64,115,179,2,181,181,210,
49,247,191,71,223,216,113,196,200,227,68,205,241,78,205,49,38,0,212,215,239,50,178,163,206,187,224,34,5,2,1,206,152,191,50,103,222,121,198,181,233,173,169,255,57,146,169,69,38,28,82,160,122,243,91,65,32,18,145,127,243,102,215,55,169,222,192,157,72,169,
57,222,169,57,70,5,128,221,117,59,141,236,168,164,164,100,205,157,119,62,103,204,219,2,129,128,102,149,153,247,164,114,184,164,68,74,74,50,246,184,249,119,212,202,215,219,251,151,227,216,220,44,95,147,187,23,240,170,107,107,165,230,80,115,224,136,25,
128,221,117,198,237,9,240,103,11,22,93,206,25,243,182,217,115,207,85,162,97,155,226,236,233,238,50,251,169,255,206,163,10,28,231,190,191,191,186,90,118,216,189,15,4,238,106,59,100,220,158,0,212,28,111,212,28,227,2,64,111,111,143,154,14,30,48,178,179,
42,102,159,163,220,188,241,156,53,146,46,191,242,26,163,218,211,31,14,235,185,134,58,115,167,254,37,5,171,170,165,227,124,85,250,122,123,21,168,221,238,218,118,245,12,12,168,201,192,7,1,169,57,102,215,28,35,3,128,36,237,170,219,97,102,103,249,124,186,
225,166,91,61,127,210,100,102,102,171,180,172,194,168,54,253,178,114,157,142,132,250,141,61,102,86,99,163,124,109,109,39,252,239,254,186,93,178,92,188,172,110,237,161,22,106,14,53,7,78,8,0,219,182,214,24,219,97,243,47,190,68,99,60,190,12,229,101,87,94,
109,212,147,184,219,91,155,245,135,237,230,158,179,246,64,191,2,53,39,111,159,101,219,242,87,85,185,182,141,91,91,154,140,61,126,212,28,243,106,142,217,1,96,203,102,99,59,44,24,12,234,186,27,110,241,236,9,19,23,23,175,75,46,189,210,152,246,12,68,34,250,
222,234,21,178,109,219,216,99,22,216,178,85,190,211,88,160,203,127,184,77,214,222,189,46,13,0,7,141,61,126,212,28,179,106,142,241,1,160,165,185,73,71,12,125,53,71,146,46,187,226,42,207,222,151,187,230,186,27,148,158,145,97,76,123,126,85,185,206,200,133,
100,222,185,178,111,107,147,191,241,244,151,232,14,214,108,145,61,48,224,186,118,30,236,60,170,246,222,30,106,14,53,7,177,14,0,146,217,183,1,130,113,113,250,216,167,62,227,185,147,37,41,41,89,215,45,190,217,152,246,212,30,106,209,239,183,153,59,91,165,
72,84,254,202,42,13,102,65,89,107,160,95,193,109,219,92,217,220,45,205,6,207,2,80,115,224,166,0,176,185,106,147,209,29,87,58,171,92,243,47,190,196,83,39,203,226,155,110,85,82,178,25,203,227,134,60,48,245,239,219,189,75,254,51,120,176,207,223,208,32,29,
113,223,234,122,85,77,251,169,57,212,28,56,33,0,84,85,174,55,190,243,62,252,145,79,120,230,228,156,56,169,64,87,95,187,216,152,246,60,83,181,94,251,13,221,74,86,146,236,158,30,5,118,156,249,219,56,193,234,106,215,133,163,77,134,110,71,78,205,129,235,
2,64,71,123,187,26,234,119,27,221,121,25,25,163,245,217,187,191,104,252,73,18,8,4,244,153,207,221,171,96,92,156,17,237,169,59,220,170,223,109,173,54,250,152,5,55,215,200,138,156,249,226,62,190,142,14,249,235,235,93,213,230,35,61,199,212,112,164,141,154,
67,205,65,172,3,128,36,85,110,92,103,124,7,150,207,158,171,91,63,248,15,70,183,241,239,63,252,79,154,48,209,140,21,242,194,209,168,190,183,250,85,69,13,158,250,183,154,155,228,111,58,251,251,225,129,173,219,164,190,94,87,181,125,227,129,189,50,29,53,
7,174,8,0,155,54,188,233,137,78,188,225,3,127,167,217,115,231,25,217,182,11,47,94,164,171,12,154,134,251,117,213,6,237,53,116,247,56,73,178,195,145,119,54,251,57,235,32,17,9,43,80,179,197,85,237,223,176,191,81,94,64,205,129,227,3,192,206,218,237,106,
59,124,200,252,78,244,249,116,215,191,126,73,211,13,219,191,187,98,246,57,250,231,59,255,197,152,5,56,118,183,29,214,255,110,169,50,250,92,12,212,110,151,175,103,232,94,135,243,239,223,47,171,213,61,99,120,71,107,179,218,122,142,201,116,212,28,56,62,
0,72,210,155,107,86,121,162,35,19,18,18,245,133,47,127,93,197,211,205,24,144,69,211,75,116,247,61,247,27,179,29,105,36,26,213,19,171,95,81,196,142,26,123,14,90,93,157,242,215,13,253,118,220,129,234,42,217,17,119,108,22,100,75,90,211,88,47,47,160,230,
192,241,1,96,205,234,215,60,211,153,137,137,137,250,226,151,191,166,233,37,165,174,110,199,252,139,47,209,253,15,60,164,248,132,4,99,142,205,179,155,55,170,177,253,136,209,231,159,191,170,74,214,48,60,219,224,235,238,86,160,174,206,53,253,176,122,143,
217,15,31,83,115,224,154,0,80,187,99,155,39,110,3,188,51,32,71,141,210,253,15,60,164,247,93,115,157,43,63,255,223,253,253,63,232,179,119,127,65,241,241,241,198,28,147,134,35,135,245,92,77,165,217,3,121,111,163,252,135,135,239,9,120,127,109,173,116,172,
219,21,125,177,221,35,183,1,168,57,56,235,113,93,82,60,229,129,225,254,35,169,169,105,198,221,171,58,105,167,250,253,170,152,51,79,57,185,227,84,185,105,189,162,46,152,62,205,206,201,213,221,159,191,95,11,23,93,97,212,177,136,68,163,250,234,242,37,58,
98,240,23,130,61,48,160,184,53,107,207,234,181,191,83,177,108,91,86,247,49,69,243,243,93,209,39,105,9,137,154,145,157,75,205,161,230,56,218,161,214,22,173,92,177,204,220,25,0,73,90,177,124,169,39,15,238,69,11,22,233,145,199,126,168,89,229,179,157,123,
229,232,243,105,241,77,183,234,219,79,252,216,200,237,54,159,171,169,84,195,145,195,70,159,103,193,173,219,100,141,192,250,253,254,150,22,249,14,186,99,185,221,151,119,237,144,23,81,115,224,184,25,128,238,238,46,205,156,85,161,204,204,44,207,117,112,
106,106,154,46,94,120,153,38,21,76,81,221,206,29,234,57,230,140,43,81,191,63,160,69,151,93,169,207,254,203,23,117,193,133,11,140,124,240,166,177,253,136,30,123,125,185,209,239,252,171,173,77,193,234,145,91,212,200,58,114,68,209,137,19,37,191,223,209,
221,210,213,223,175,242,188,241,202,76,242,222,50,178,212,28,102,0,78,215,136,29,129,87,94,254,147,167,110,3,188,219,57,231,94,160,178,138,57,90,253,250,171,90,242,199,223,107,79,67,108,30,84,74,75,207,208,194,69,151,235,234,107,23,43,99,244,24,99,251,
59,98,71,245,196,234,21,10,71,205,125,234,223,142,70,21,87,61,178,175,53,250,122,123,229,175,173,85,100,166,243,199,242,178,186,29,154,158,149,67,205,161,230,224,68,129,254,230,235,175,24,145,203,163,96,48,168,31,253,231,175,148,154,150,70,175,75,170,
221,190,85,203,150,190,168,202,141,235,212,117,6,27,182,12,70,122,70,134,206,61,239,66,157,55,255,98,21,79,47,145,223,225,87,111,67,225,127,54,111,210,47,43,205,94,137,210,191,107,151,2,53,177,216,117,211,210,192,162,69,178,211,82,29,221,63,113,254,128,
158,186,249,255,41,37,158,39,203,169,57,206,180,181,166,90,15,126,249,30,243,103,0,66,161,144,94,126,233,69,221,120,243,109,28,117,189,245,206,107,209,244,18,69,163,81,237,222,181,83,213,149,27,180,165,166,90,251,247,54,170,243,44,246,167,143,143,143,
87,222,248,124,21,78,43,214,180,105,211,53,117,90,177,242,198,121,107,31,241,189,29,71,244,235,234,13,70,183,209,238,237,149,63,102,219,246,218,10,84,85,42,180,96,129,163,251,104,32,18,214,210,157,219,245,129,82,238,51,83,115,16,211,25,0,233,173,141,
44,158,252,201,211,220,251,57,133,174,174,78,29,216,191,79,205,77,7,213,211,115,76,125,189,61,234,237,233,85,95,95,175,44,159,165,184,184,120,197,199,39,40,46,46,78,241,9,9,202,24,61,70,153,153,89,202,204,204,86,74,106,170,167,251,46,106,219,186,231,
197,223,170,238,112,171,209,237,12,188,249,166,252,49,126,32,111,96,246,108,217,19,39,58,186,159,198,140,74,210,79,62,240,247,242,91,172,44,71,205,97,6,32,102,51,0,146,212,222,126,68,107,87,191,166,11,23,44,226,200,159,68,74,74,170,138,167,151,168,120,
122,9,157,49,72,191,221,90,101,252,151,191,213,220,28,243,47,127,73,10,212,212,40,148,147,43,197,59,119,199,182,182,158,99,90,189,167,94,23,23,76,101,112,80,115,240,46,35,30,139,127,251,252,179,138,26,252,96,22,98,103,255,209,14,253,186,202,236,169,127,
69,194,35,250,212,255,73,139,71,40,164,192,182,173,142,239,178,231,107,42,101,51,60,128,216,7,128,125,123,247,104,253,186,53,244,60,134,148,109,219,250,222,234,21,26,112,201,154,245,103,202,191,99,167,172,33,220,236,231,172,11,200,158,61,82,91,155,163,
251,108,79,123,155,222,220,219,192,32,1,98,29,0,36,233,185,95,255,146,158,199,144,250,221,182,205,170,61,212,98,118,35,187,186,228,175,219,233,168,143,100,73,10,86,85,201,118,248,172,222,179,213,27,25,36,128,19,2,64,227,158,122,173,127,243,13,122,31,
67,226,96,231,81,61,83,185,222,248,118,6,170,170,135,101,179,159,179,46,34,157,157,242,215,59,123,7,190,250,35,135,181,110,223,30,6,11,16,235,0,32,73,191,250,197,79,21,9,135,57,2,56,43,127,153,250,55,251,92,178,246,237,147,223,193,155,106,5,182,111,147,
221,219,235,232,62,252,249,198,55,205,94,21,18,112,75,0,56,120,96,191,150,47,91,194,17,192,89,249,195,246,26,109,111,109,54,59,228,132,6,20,220,92,227,232,207,104,133,35,10,214,56,251,51,238,63,218,174,151,118,110,103,208,0,177,14,0,146,244,236,127,63,
173,30,15,109,219,137,161,213,220,213,105,252,106,127,146,20,216,186,77,214,64,191,227,63,167,255,192,1,89,173,206,126,14,227,153,170,245,234,13,133,24,60,64,172,3,64,87,231,81,61,255,236,175,56,10,24,252,85,177,164,239,173,94,161,126,195,111,35,89,237,
237,10,52,184,231,9,246,64,101,181,228,224,55,49,142,246,245,234,217,205,60,16,8,196,60,0,72,210,31,255,239,183,49,219,164,2,238,245,194,246,45,218,218,210,100,118,200,177,109,5,54,85,186,171,160,244,28,147,111,103,173,163,63,227,255,109,221,172,61,237,
109,12,34,16,0,98,95,228,162,250,143,31,62,161,136,225,239,111,99,232,180,116,119,233,233,77,107,141,111,167,191,126,183,124,103,177,70,123,204,102,1,106,235,164,238,110,199,126,190,136,29,213,15,215,188,38,155,7,2,65,0,136,189,93,117,181,90,182,244,
5,142,6,78,29,24,37,125,127,245,171,234,51,124,234,223,238,237,85,32,102,155,253,156,29,203,142,42,224,144,213,10,79,164,246,80,139,150,236,220,198,128,2,1,192,9,126,249,179,255,84,211,193,3,28,17,23,9,135,195,234,237,237,85,127,95,223,136,253,205,37,
181,91,85,211,108,254,121,18,172,169,145,21,118,239,172,152,191,181,85,214,254,253,142,254,140,63,223,176,70,77,93,71,25,200,212,28,2,64,172,13,12,244,235,251,143,127,139,181,1,92,34,26,141,234,107,255,118,175,254,225,182,197,250,232,135,62,48,236,251,
139,75,82,107,119,151,126,190,193,252,169,127,171,181,69,254,3,238,15,57,129,154,26,217,33,231,142,231,190,112,88,143,191,254,10,107,3,80,115,8,0,78,176,171,174,86,255,251,220,175,57,42,46,176,228,143,191,211,246,109,91,36,73,161,80,72,175,191,186,124,
216,255,230,15,222,88,169,190,176,225,175,112,69,34,111,61,73,111,66,113,233,235,83,96,135,179,223,187,175,61,212,162,255,217,188,137,1,77,205,33,0,56,193,115,207,254,74,91,107,170,57,50,14,118,240,192,126,61,243,244,83,127,243,239,134,251,25,142,165,
59,183,169,186,105,191,241,125,235,223,89,43,159,65,107,99,248,119,239,146,213,225,236,105,246,103,171,55,106,75,203,65,6,54,53,135,0,16,107,182,29,213,227,143,126,67,109,109,135,57,58,14,20,10,133,244,253,239,62,162,208,187,22,83,57,176,127,159,182,
111,29,158,149,224,14,31,235,214,207,60,48,245,175,174,110,249,107,119,26,213,36,203,150,2,85,149,146,131,55,11,138,216,81,61,186,114,153,142,176,40,25,53,135,0,16,123,157,157,71,245,248,35,95,127,207,1,71,236,253,242,103,63,209,238,186,227,191,231,189,
108,233,139,195,242,55,127,240,198,74,245,132,6,140,239,219,64,117,149,35,55,251,57,235,34,211,222,46,95,99,163,163,63,99,71,111,175,30,89,185,76,17,135,239,106,72,205,25,153,154,67,0,136,177,157,181,219,245,212,127,60,201,17,114,144,53,171,95,211,146,
23,126,127,194,255,190,246,141,215,212,213,57,180,15,230,44,171,219,161,202,131,251,140,239,91,107,255,62,249,15,29,50,182,125,129,173,91,101,247,59,123,57,227,237,173,205,250,241,155,171,24,232,30,175,57,4,0,135,88,190,108,137,126,247,252,179,28,37,
7,216,191,111,175,126,244,253,199,78,250,255,132,195,97,173,124,245,229,33,251,155,109,61,199,244,212,6,15,108,27,61,16,114,252,102,63,103,29,112,66,33,5,182,108,117,252,231,92,186,115,155,158,223,82,201,128,247,104,205,33,0,56,204,51,79,63,165,85,175,
173,224,72,197,80,123,251,17,61,244,213,251,213,215,119,234,237,94,151,253,105,232,30,204,121,114,205,74,245,12,152,63,245,239,223,182,77,86,127,191,249,237,220,219,40,29,118,254,179,61,79,111,124,83,175,55,236,98,224,123,176,230,16,0,28,232,201,39,30,
85,229,198,245,28,173,24,232,235,235,213,183,190,254,111,58,116,232,244,118,121,107,58,184,95,91,183,108,62,235,191,251,202,238,90,109,220,191,215,248,254,181,58,218,21,104,168,247,196,185,100,73,10,86,85,75,17,103,223,103,183,37,125,119,213,43,218,116,
96,31,5,192,67,53,135,0,224,80,145,72,68,143,62,244,128,54,87,243,190,238,72,10,133,66,250,238,183,191,169,250,221,117,131,250,185,151,207,242,245,156,246,222,30,253,116,157,249,83,255,182,109,203,95,233,173,233,102,95,87,167,124,187,157,127,117,29,142,
70,245,208,138,63,169,186,137,213,73,189,80,115,8,0,78,31,144,225,176,190,245,141,175,176,70,192,8,246,247,119,191,253,77,109,218,176,110,208,63,187,246,141,85,234,60,122,230,239,126,63,185,102,165,186,7,60,48,37,94,95,47,127,135,247,150,162,13,236,216,
33,187,167,199,241,159,115,32,18,209,55,94,89,194,26,1,30,168,57,4,0,55,164,195,129,1,125,243,171,247,105,195,186,181,28,185,97,30,136,143,63,250,13,173,127,243,204,174,194,35,145,176,86,174,88,118,70,63,251,106,253,78,173,223,215,104,126,39,247,245,
42,176,213,155,155,209,88,145,136,130,155,221,49,101,219,31,14,235,193,101,47,106,253,254,70,10,131,161,53,135,0,224,166,16,16,10,233,209,135,30,212,43,47,47,229,232,13,199,247,82,95,175,190,243,240,87,207,120,32,254,217,203,47,13,254,253,220,142,222,
94,253,100,221,106,111,92,5,111,174,145,21,241,238,190,23,254,166,38,249,154,155,93,241,89,7,34,97,61,244,202,82,45,223,181,131,2,97,88,205,33,0,184,144,109,71,245,239,63,120,76,207,61,251,75,69,89,184,99,200,28,237,104,215,131,95,190,87,27,55,188,121,
214,191,171,233,224,1,109,169,169,26,212,207,252,104,237,107,234,246,192,211,240,86,139,25,155,253,156,117,8,168,170,150,92,18,130,34,118,84,223,91,253,170,158,173,222,40,182,14,50,167,230,16,0,92,236,55,255,253,180,30,123,228,235,234,117,193,253,68,
167,59,176,127,159,238,187,247,174,19,174,184,117,38,6,179,74,215,235,13,187,180,118,111,131,241,253,108,71,34,10,84,243,28,139,36,249,122,123,228,223,225,174,165,143,159,169,90,175,71,94,125,201,252,77,169,60,80,115,224,242,0,32,73,235,214,174,214,125,
247,222,165,131,7,246,115,52,207,208,154,213,175,233,139,255,250,25,181,182,12,237,148,236,186,53,171,116,180,163,253,212,87,1,125,189,250,15,143,172,192,22,168,219,41,223,49,214,156,127,103,22,160,110,167,212,213,229,170,207,252,70,99,189,238,121,225,
183,58,216,201,67,103,110,173,57,120,123,252,149,20,79,121,192,237,141,232,236,60,170,21,203,151,42,61,61,67,5,83,166,114,84,79,83,40,20,210,47,158,250,177,158,254,217,79,20,14,15,253,84,172,109,219,74,77,77,83,241,244,146,147,254,127,79,172,90,161,93,
109,135,204,239,240,238,110,5,215,109,144,197,36,242,59,44,73,86,87,167,162,19,38,186,234,115,31,237,235,213,242,93,181,202,72,28,165,201,99,198,114,32,93,86,115,156,226,80,107,75,76,31,94,244,153,114,98,245,247,247,235,223,159,124,92,143,62,244,32,175,
131,156,134,134,250,221,250,210,231,239,60,233,58,219,67,225,229,151,94,60,233,115,26,111,52,214,235,141,70,111,44,132,19,168,174,150,101,243,204,202,123,174,66,14,29,150,181,223,125,139,238,244,133,67,250,254,27,175,234,225,87,151,170,171,191,143,3,
233,146,154,3,3,3,192,159,173,127,243,13,221,117,251,63,105,197,242,165,156,4,199,75,224,3,3,122,246,87,63,215,23,255,245,14,53,238,25,254,47,222,150,230,166,19,174,221,208,217,223,167,127,95,251,186,55,174,116,15,28,144,191,181,149,19,240,4,130,155,
107,164,1,119,222,87,95,211,216,160,127,254,237,175,181,124,87,45,115,59,14,175,57,120,87,248,54,225,22,192,187,13,12,12,104,195,186,53,218,178,185,90,147,167,78,83,122,122,6,71,90,82,229,198,245,122,244,225,7,181,110,237,106,217,35,184,237,236,192,64,
191,206,159,127,241,123,254,253,247,86,175,80,221,97,243,191,20,237,208,128,130,111,172,145,21,137,112,18,158,40,32,69,34,82,36,44,59,39,199,149,159,191,63,18,214,155,251,246,168,166,249,128,166,142,205,82,122,66,34,7,213,129,53,199,105,98,125,11,32,
96,242,201,183,99,251,22,125,254,174,79,105,193,37,151,233,150,219,62,172,204,172,108,79,14,194,198,61,13,250,197,127,253,88,53,213,177,89,118,118,221,218,213,234,104,111,87,122,198,95,130,216,218,189,13,90,181,103,183,39,250,63,176,125,187,124,30,120,
189,241,172,175,70,234,235,21,153,48,65,202,112,111,96,223,218,210,164,207,254,223,255,104,209,148,105,186,173,252,28,101,38,37,83,115,28,82,115,224,145,25,128,247,158,140,245,90,250,226,31,212,213,121,84,227,39,76,84,82,82,146,39,14,110,67,253,110,253,
236,63,127,164,167,126,242,228,144,63,109,59,168,43,96,219,86,74,106,170,138,103,204,148,36,117,247,247,235,171,203,95,244,198,171,84,29,29,10,110,170,148,69,173,57,245,44,128,36,95,71,135,34,147,38,201,178,220,221,99,13,71,218,180,164,118,171,58,251,
250,52,33,125,180,70,197,197,81,115,98,88,115,152,1,56,193,152,187,249,250,43,60,117,219,202,178,124,154,127,209,66,189,127,241,7,84,48,121,138,145,109,220,82,83,165,63,252,238,121,85,110,92,231,152,207,148,149,157,163,239,253,232,191,228,243,249,244,
216,235,203,181,178,190,206,248,115,205,182,109,197,173,92,41,95,59,175,37,13,198,64,89,153,236,201,147,205,185,202,178,124,186,168,96,170,22,151,148,169,96,244,24,106,78,12,106,142,83,109,173,169,214,131,95,190,39,102,127,223,232,91,0,199,47,202,81,
173,122,237,21,173,122,237,21,77,43,154,174,75,46,187,82,231,207,191,88,163,70,185,123,86,160,163,189,93,43,87,44,211,203,47,189,168,150,230,38,199,125,190,214,150,102,213,84,87,106,96,236,88,79,124,249,75,146,191,161,158,47,255,51,16,220,182,85,253,
121,121,178,18,18,140,104,79,196,142,234,213,250,157,122,181,126,167,166,103,229,232,210,169,197,186,112,210,20,37,6,131,212,156,17,168,57,101,21,115,24,84,4,128,247,218,89,187,93,59,107,183,235,191,126,242,35,205,59,111,190,206,61,127,190,102,149,207,
81,98,162,59,30,224,57,218,209,174,245,235,214,232,205,55,86,169,102,115,165,227,223,122,88,178,236,69,237,152,52,209,19,231,150,221,215,167,192,182,109,194,224,89,161,176,130,91,182,40,60,119,174,113,109,219,222,218,172,237,173,205,250,207,117,171,116,
222,132,201,58,127,98,129,202,178,243,148,24,31,79,205,25,6,203,150,190,64,0,56,217,88,243,218,45,128,83,38,162,64,64,101,229,115,84,54,123,174,74,102,206,82,254,132,73,142,249,108,161,129,1,237,170,171,213,214,45,213,218,92,85,169,218,29,91,71,244,201,
90,0,212,28,106,14,1,192,51,82,82,222,122,144,100,106,97,145,38,21,76,209,164,130,201,202,24,129,251,120,145,112,88,7,15,238,215,158,134,122,53,212,239,82,253,238,58,213,213,110,87,40,196,26,228,0,53,135,154,3,2,64,76,36,39,167,40,59,55,79,217,217,57,
202,202,206,209,216,204,44,165,166,166,41,37,53,77,41,41,41,74,74,78,81,92,48,78,129,64,64,129,96,80,126,191,95,209,104,84,161,80,72,225,112,72,225,112,88,125,189,189,234,234,234,84,87,231,81,117,117,117,233,104,71,187,90,91,91,212,218,220,164,214,214,
102,181,182,180,40,226,225,237,98,1,80,115,64,0,0,0,0,67,204,71,23,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,0,4,0,0,0,64,0,0,0,128,0,0,0,0,8,0,0,
0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,8,0,0,0,128,0,0,0,0,142,231,255,3,55,250,199,177,55,164,241,111,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* dexedIcon_png = (const char*) temp_binary_data_0;
//================== Switch_32x32.png ==================
static const unsigned char temp_binary_data_1[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,64,8,6,0,0,0,123,142,117,174,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,9,112,72,89,115,0,0,14,195,0,0,14,195,1,199,111,168,100,0,0,2,222,73,68, { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,64,8,6,0,0,0,123,142,117,174,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,9,112,72,89,115,0,0,14,195,0,0,14,195,1,199,111,168,100,0,0,2,222,73,68,
65,84,104,67,237,153,77,79,19,81,20,134,177,206,208,66,233,116,166,45,29,98,218,41,165,223,45,138,9,229,163,124,136,11,91,18,117,33,223,110,132,4,113,225,194,53,174,136,63,130,21,236,216,251,31,52,254,13,227,214,144,184,237,250,120,222,59,67,236,144, 65,84,104,67,237,153,77,79,19,81,20,134,177,206,208,66,233,116,166,45,29,98,218,41,165,223,45,138,9,229,163,124,136,11,91,18,117,33,223,110,132,4,113,225,194,53,174,136,63,130,21,236,216,251,31,52,254,13,227,214,144,184,237,250,120,222,59,67,236,144,
178,243,140,49,153,55,121,194,237,123,223,48,151,211,222,233,153,203,72,168,80,161,254,55,117,25,186,139,104,108,140,242,78,1,25,49,189,97,40,26,141,13,101,246,225,35,234,246,54,145,17,147,90,128,145,52,135,178,186,182,78,187,123,251,225,2,194,5,136, 178,243,140,49,153,55,121,194,237,123,223,48,151,211,222,233,153,203,72,168,80,161,254,55,117,25,186,139,104,108,140,242,78,1,25,49,189,97,40,26,141,13,101,246,225,35,234,246,54,145,17,147,90,128,145,52,135,178,186,182,78,187,123,251,225,2,194,5,136,
@@ -22,10 +223,10 @@ static const unsigned char temp_binary_data_0[] =
68,52,26,139,221,98,76,29,84,26,134,129,140,152,112,250,65,241,248,196,80,218,124,63,176,44,75,244,132,4,239,47,37,120,223,15,99,133,191,17,203,229,138,232,103,32,60,39,252,247,11,208,52,141,28,52,33,67,120,214,237,209,254,193,107,185,5,68,34,247,187, 68,52,26,139,221,98,76,29,84,26,134,129,140,152,112,250,65,241,248,196,80,218,124,63,176,44,75,244,132,4,239,47,37,120,223,15,99,133,191,17,203,229,138,232,103,32,60,39,252,247,11,208,52,141,28,52,33,67,120,214,237,209,254,193,107,185,5,68,34,247,187,
57,190,229,118,123,155,67,217,219,63,160,157,221,61,209,127,88,132,10,21,234,47,107,100,228,55,171,12,230,253,182,31,107,115,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; 57,190,229,118,123,155,67,217,219,63,160,157,221,61,209,127,88,132,10,21,234,47,107,100,228,55,171,12,230,253,182,31,107,115,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* Switch_32x32_png = (const char*) temp_binary_data_0;
const char* Switch_32x32_png = (const char*) temp_binary_data_1;
//================== Switch_48x26.png ================== //================== Switch_48x26.png ==================
static const unsigned char temp_binary_data_1[] =
static const unsigned char temp_binary_data_2[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,48,0,0,0,52,8,6,0,0,0,204,147,187,145,0,0,0,6,98,75,71,68,0,0,0,230,0,0,84,44,23,109,0,0,8,138,73,68,65,84,104,222,237,153,203,146,92,71,17,134,191,204,170,115,122,46,109,100,89,8,73,182,9,155,192,198, { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,48,0,0,0,52,8,6,0,0,0,204,147,187,145,0,0,0,6,98,75,71,68,0,0,0,230,0,0,84,44,23,109,0,0,8,138,73,68,65,84,104,222,237,153,203,146,92,71,17,134,191,204,170,115,122,46,109,100,89,8,73,182,9,155,192,198,
17,108,88,176,100,207,130,61,15,192,139,16,65,240,28,108,216,178,231,21,88,177,99,225,0,54,88,72,8,203,88,30,205,69,211,167,170,50,89,84,157,75,247,140,100,141,199,14,135,35,166,38,58,230,116,247,233,83,121,253,51,243,47,184,89,223,238,146,245,122,253, 17,108,88,176,100,207,130,61,15,192,139,16,65,240,28,108,216,178,231,21,88,177,99,225,0,54,88,72,8,203,88,30,205,69,211,167,170,50,89,84,157,75,247,140,100,141,199,14,135,35,166,38,58,230,116,247,233,83,121,253,51,243,47,184,89,223,238,146,245,122,253,
35,224,215,223,81,249,255,20,129,119,223,190,127,255,23,63,255,217,79,126,21,52,68,4,220,253,162,166,8,142,79,215,230,142,224,32,2,108,255,102,186,22,104,63,169,159,45,174,139,27,102,142,153,227,14,230,142,91,221,97,126,214,184,15,184,8,120,253,190,148, 35,224,215,223,81,249,255,20,129,119,223,190,127,255,23,63,255,217,79,126,21,52,68,4,220,253,162,166,8,142,79,215,230,142,224,32,2,108,255,102,186,22,104,63,169,159,45,174,139,27,102,142,153,227,14,230,142,91,221,97,126,214,184,15,184,8,120,253,190,148,
@@ -59,10 +260,10 @@ static const unsigned char temp_binary_data_1[] =
170,245,214,237,55,249,225,59,239,112,112,112,192,217,233,233,52,29,93,135,153,123,217,82,160,3,86,237,117,11,184,211,94,183,129,239,181,215,173,198,238,189,206,122,12,252,161,177,119,95,47,51,119,69,2,44,2,107,224,141,166,192,123,192,7,141,16,123,31, 170,245,214,237,55,249,225,59,239,112,112,112,192,217,233,233,52,29,93,135,153,123,217,82,160,3,86,237,117,11,184,211,94,183,129,239,181,215,173,198,238,189,206,122,12,252,161,177,119,95,47,51,119,69,2,44,2,107,224,141,166,192,123,192,7,141,16,123,31,
184,15,220,5,30,52,229,199,245,219,147,147,147,223,127,99,204,220,215,172,220,26,120,19,120,183,41,247,33,240,199,147,147,147,191,222,112,46,223,133,245,127,146,199,98,107,0,177,99,238,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; 184,15,220,5,30,52,229,199,245,219,147,147,147,223,127,99,204,220,215,172,220,26,120,19,120,183,41,247,33,240,199,147,147,147,191,222,112,46,223,133,245,127,146,199,98,107,0,177,99,238,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* Switch_48x26_png = (const char*) temp_binary_data_1;
const char* Switch_48x26_png = (const char*) temp_binary_data_2;
//================== ButtonUnlabeled_50x30.png ================== //================== ButtonUnlabeled_50x30.png ==================
static const unsigned char temp_binary_data_2[] =
static const unsigned char temp_binary_data_3[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,50,0,0,0,60,8,6,0,0,0,36,53,233,193,0,0,7,1,73,68,65,84,120,218,237,152,89,115,84,85,16,199,17,2,162,200,50,36,72,162,147,9,165,24,182,84,48,40,22,123,50,89,36,179,79,112,65,4,67,74,32,9,168,133,143, { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,50,0,0,0,60,8,6,0,0,0,36,53,233,193,0,0,7,1,73,68,65,84,120,218,237,152,89,115,84,85,16,199,17,2,162,200,50,36,72,162,147,9,165,24,182,84,48,40,22,123,50,89,36,179,79,112,65,4,67,74,32,9,168,133,143,
190,248,96,41,1,13,202,146,109,88,50,201,100,82,128,154,68,95,172,242,73,191,134,96,197,42,31,228,107,92,187,207,237,190,211,119,155,185,153,12,84,160,50,85,255,234,62,203,61,221,191,219,231,222,153,57,75,150,44,126,22,238,231,25,208,82,208,178,39,68, 190,248,96,41,1,13,202,146,109,88,50,201,100,82,128,154,68,95,172,242,73,191,134,96,197,42,31,228,107,92,187,207,237,190,211,119,155,185,153,12,84,160,50,85,255,234,62,203,61,221,191,219,231,222,153,57,75,150,44,126,22,238,231,25,208,82,208,178,39,68,
75,41,103,211,7,59,107,64,97,208,177,39,68,97,202,121,169,4,41,3,237,121,117,207,91,3,215,102,166,238,95,154,6,161,157,153,249,43,231,79,235,109,101,167,105,142,244,229,117,22,31,116,17,174,237,3,219,7,253,104,47,76,235,234,147,18,227,60,71,182,251,212, 75,41,103,211,7,59,107,64,97,208,177,39,68,97,202,121,169,4,41,3,237,121,117,207,91,3,215,102,166,238,95,154,6,161,157,153,249,43,231,79,235,109,101,167,105,142,244,229,117,22,31,116,17,174,237,3,219,7,253,104,47,76,235,234,147,18,227,60,71,182,251,212,
@@ -90,10 +291,10 @@ static const unsigned char temp_binary_data_2[] =
234,97,47,5,140,189,191,119,126,191,197,138,5,241,178,248,163,248,237,229,26,251,81,109,173,82,192,120,134,120,220,32,115,253,255,50,167,255,41,133,64,214,84,84,140,188,25,105,255,187,185,243,248,131,214,147,39,30,180,128,90,79,118,42,191,149,253,174, 234,97,47,5,140,189,191,119,126,191,197,138,5,241,178,248,163,248,237,229,26,251,81,109,173,82,192,120,134,120,220,32,115,253,255,50,167,255,41,133,64,214,84,84,140,188,25,105,255,187,185,243,248,131,214,147,39,30,180,128,90,79,118,42,191,149,253,174,
78,234,235,52,181,219,186,230,39,199,117,173,125,164,22,200,175,252,229,170,97,39,144,167,230,56,232,169,57,160,91,252,44,148,207,255,202,67,236,221,252,78,22,31,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; 78,234,235,52,181,219,186,230,39,199,117,173,125,164,22,200,175,252,229,170,97,39,144,167,230,56,232,169,57,160,91,252,44,148,207,255,202,67,236,221,252,78,22,31,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* ButtonUnlabeled_50x30_png = (const char*) temp_binary_data_2;
const char* ButtonUnlabeled_50x30_png = (const char*) temp_binary_data_3;
//================== Knob_34x34.png ================== //================== Knob_34x34.png ==================
static const unsigned char temp_binary_data_3[] =
static const unsigned char temp_binary_data_4[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,34,0,0,6,96,8,6,0,0,0,27,7,149,159,0,0,50,154,73,68,65,84,120,218,237,221,247,87,215,87,186,47,240,156,115,79,38,55,197,134,8,118,64,58,130,40,72,17,68,122,239,189,87,41,138,32,54,84,84,80,84,236,189, { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,34,0,0,6,96,8,6,0,0,0,27,7,149,159,0,0,50,154,73,68,65,84,120,218,237,221,247,87,215,87,186,47,240,156,115,79,38,55,197,134,8,118,64,58,130,40,72,17,68,122,239,189,87,41,138,32,54,84,84,80,84,236,189,
247,154,88,99,65,177,247,26,77,76,98,98,108,201,76,214,202,111,103,221,123,255,128,204,50,115,223,247,121,30,192,51,51,119,206,36,103,38,223,207,39,201,121,246,90,123,209,249,236,239,254,236,189,191,159,231,181,118,121,227,13,77,191,161,244,175,148,223, 247,154,88,99,65,177,247,26,77,76,98,98,108,201,76,214,202,111,103,221,123,255,128,204,50,115,223,247,121,30,192,51,51,119,206,36,103,38,223,207,39,201,121,246,90,123,209,249,236,239,254,236,189,191,159,231,181,118,121,227,13,77,191,161,244,175,148,223,
162,220,147,178,13,229,1,93,217,166,235,123,111,117,253,142,197,210,191,81,238,71,217,119,128,173,117,149,155,203,176,53,163,70,120,30,25,61,210,171,99,180,183,87,199,8,15,215,35,46,195,236,215,88,91,91,85,241,239,116,253,238,191,253,220,53,208,231,205, 162,220,147,178,13,229,1,93,217,166,235,123,111,117,253,142,197,210,191,81,238,71,217,119,128,173,117,149,155,203,176,53,163,70,120,30,25,61,210,171,99,180,183,87,199,8,15,215,35,46,195,236,215,88,91,91,85,241,239,116,253,238,191,253,220,53,208,231,205,
@@ -280,10 +481,10 @@ static const unsigned char temp_binary_data_3[] =
77,171,124,207,139,98,100,83,196,40,159,6,192,245,171,91,165,48,203,22,207,198,8,7,187,191,60,43,205,72,49,226,54,178,108,113,147,104,209,194,230,105,84,8,7,243,206,74,27,65,183,132,11,33,133,89,48,3,163,232,205,207,180,157,175,93,135,57,72,33,62,186, 77,171,124,207,139,98,100,83,196,40,159,6,192,245,171,91,165,48,203,22,207,198,8,7,187,191,60,43,205,72,49,226,54,178,108,113,147,104,209,194,230,105,84,8,7,243,206,74,27,65,183,132,11,33,133,89,48,3,163,232,205,207,180,157,175,93,135,57,72,33,62,186,
119,22,113,49,97,212,232,221,204,219,199,104,184,155,51,98,162,67,209,215,170,207,255,237,221,171,199,238,55,204,156,99,100,55,100,240,171,46,182,242,84,49,82,49,82,49,250,77,166,255,7,121,17,68,51,15,166,168,239,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; 119,22,113,49,97,212,232,221,204,219,199,104,184,155,51,98,162,67,209,215,170,207,255,237,221,171,199,238,55,204,156,99,100,55,100,240,171,46,182,242,84,49,82,49,82,49,250,77,166,255,7,121,17,68,51,15,166,168,239,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* Knob_34x34_png = (const char*) temp_binary_data_3;
const char* Knob_34x34_png = (const char*) temp_binary_data_4;
//================== LFO_36_26.png ================== //================== LFO_36_26.png ==================
static const unsigned char temp_binary_data_4[] =
static const unsigned char temp_binary_data_5[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,36,0,0,0,156,8,6,0,0,0,23,153,9,128,0,0,6,109,73,68,65,84,120,218,237,92,123,136,84,85,24,183,44,123,63,169,168,232,101,81,68,4,21,81,66,255,100,6,217,238,206,185,119,52,55,165,39,244,36,130,176,210, { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,36,0,0,0,156,8,6,0,0,0,23,153,9,128,0,0,6,109,73,68,65,84,120,218,237,92,123,136,84,85,24,183,44,123,63,169,168,232,101,81,68,4,21,81,66,255,100,6,217,238,206,185,119,52,55,165,39,244,36,130,176,210,
160,168,88,144,94,68,86,235,158,115,238,180,115,207,89,23,45,148,94,246,128,77,49,72,169,68,147,202,48,43,202,178,76,55,50,67,114,181,172,109,250,125,231,158,187,141,53,59,51,123,157,189,119,179,243,131,195,157,157,189,51,247,119,191,243,184,223,239, 160,168,88,144,94,68,86,235,158,115,238,180,115,207,89,23,45,148,94,246,128,77,49,72,169,68,147,202,48,43,202,178,76,55,50,67,114,181,172,109,250,125,231,158,187,141,53,59,51,123,157,189,119,179,243,131,195,157,157,189,51,247,119,191,243,184,223,239,
251,190,51,163,70,57,56,56,56,84,135,175,197,53,158,230,87,102,207,164,84,218,199,83,226,70,180,223,208,250,88,40,175,202,148,143,37,211,135,182,214,11,197,231,56,238,240,180,188,41,43,50,215,69,150,145,171,189,112,206,137,147,59,219,79,242,84,240,33, 251,190,51,163,70,57,56,56,56,84,135,175,197,53,158,230,87,102,207,164,84,218,199,83,226,70,180,223,208,250,88,40,175,202,148,143,37,211,135,182,214,11,197,231,56,238,240,180,188,41,43,50,215,69,150,145,171,189,112,206,137,147,59,219,79,242,84,240,33,
@@ -310,10 +511,10 @@ static const unsigned char temp_binary_data_4[] =
56,228,32,36,63,163,27,161,64,195,48,16,250,187,213,71,200,88,168,100,171,214,75,13,35,68,131,149,72,237,222,58,198,213,94,163,130,230,242,207,80,156,146,126,25,204,121,0,14,14,14,35,21,127,1,145,198,91,134,223,250,76,248,0,0,0,0,73,69,78,68,174,66,96, 56,228,32,36,63,163,27,161,64,195,48,16,250,187,213,71,200,88,168,100,171,214,75,13,35,68,131,149,72,237,222,58,198,213,94,163,130,230,242,207,80,156,146,126,25,204,121,0,14,14,14,35,21,127,1,145,198,91,134,223,250,76,248,0,0,0,0,73,69,78,68,174,66,96,
130,0,0 }; 130,0,0 };
const char* LFO_36_26_png = (const char*) temp_binary_data_4;
const char* LFO_36_26_png = (const char*) temp_binary_data_5;
//================== Light_14x14.png ================== //================== Light_14x14.png ==================
static const unsigned char temp_binary_data_5[] =
static const unsigned char temp_binary_data_6[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,14,0,0,0,28,8,6,0,0,0,81,86,142,65,0,0,0,6,98,75,71,68,0,0,0,230,0,0,84,44,23,109,0,0,2,209,73,68,65,84,56,203,213,146,203,111,19,87,20,135,191,59,115,103,236,120,252,8,13,142,19,18,89,136,180,69,168, { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,14,0,0,0,28,8,6,0,0,0,81,86,142,65,0,0,0,6,98,75,71,68,0,0,0,230,0,0,84,44,23,109,0,0,2,209,73,68,65,84,56,203,213,146,203,111,19,87,20,135,191,59,115,103,236,120,252,8,13,142,19,18,89,136,180,69,168,
60,20,30,18,109,36,216,176,101,211,69,55,149,186,52,255,64,255,0,254,4,182,201,178,93,119,67,54,221,33,36,42,40,175,144,200,60,20,129,148,132,36,216,14,6,143,51,227,204,227,142,47,11,59,144,144,68,8,169,155,206,242,232,124,115,206,253,157,15,254,55,159, 60,20,30,18,109,36,216,176,101,211,69,55,149,186,52,255,64,255,0,254,4,182,201,178,93,119,67,54,221,33,36,42,40,175,144,200,60,20,129,148,132,36,216,14,6,143,51,227,204,227,142,47,11,59,144,144,68,8,169,155,206,242,232,124,115,206,253,157,15,254,55,159,
216,175,56,61,93,177,210,233,161,60,64,16,52,219,215,174,205,196,95,4,43,149,171,229,215,75,141,63,83,182,117,9,32,138,212,237,241,163,197,223,102,102,102,87,14,4,167,167,43,150,215,30,191,213,122,183,58,101,73,5,192,219,166,199,234,122,235,110,156,52, 216,175,56,61,93,177,210,233,161,60,64,16,52,219,215,174,205,196,95,4,43,149,171,229,215,75,141,63,83,182,117,9,32,138,212,237,241,163,197,223,102,102,102,87,14,4,167,167,43,150,215,30,191,213,122,183,58,101,73,5,192,219,166,199,234,122,235,110,156,52,
@@ -326,10 +527,10 @@ static const unsigned char temp_binary_data_5[] =
183,14,212,13,165,215,59,15,223,45,203,68,127,151,217,112,76,115,20,54,159,117,88,253,187,233,13,198,221,53,3,106,253,222,64,10,208,26,86,66,40,89,144,29,112,163,220,218,157,134,8,230,228,88,2,50,242,85,39,163,244,211,67,240,192,132,87,118,79,4,45,251, 183,14,212,13,165,215,59,15,223,45,203,68,127,151,217,112,76,115,20,54,159,117,88,253,187,233,13,198,221,53,3,106,253,222,64,10,208,26,86,66,40,89,144,29,112,163,220,218,157,134,8,230,228,88,2,50,242,85,39,163,244,211,67,240,192,132,87,118,79,4,45,251,
22,184,30,84,77,208,69,240,187,74,215,106,110,124,52,128,84,6,54,198,160,58,12,11,10,170,233,190,61,98,63,229,52,148,146,94,122,66,131,103,65,221,62,72,185,175,149,252,3,249,209,60,170,202,77,183,53,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; 22,184,30,84,77,208,69,240,187,74,215,106,110,124,52,128,84,6,54,198,160,58,12,11,10,170,233,190,61,98,63,229,52,148,146,94,122,66,131,103,65,221,62,72,185,175,149,252,3,249,209,60,170,202,77,183,53,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* Light_14x14_png = (const char*) temp_binary_data_5;
const char* Light_14x14_png = (const char*) temp_binary_data_6;
//================== Meter_140x8.png ================== //================== Meter_140x8.png ==================
static const unsigned char temp_binary_data_6[] =
static const unsigned char temp_binary_data_7[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,140,0,0,0,16,8,6,0,0,0,196,100,151,6,0,0,1,89,73,68,65,84,120,218,237,152,205,74,195,64,20,133,211,141,174,74,43,21,236,127,10,182,197,133,184,85,215,1,27,17,74,23,198,133,89,233,3,248,48,250,66,77, { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,140,0,0,0,16,8,6,0,0,0,196,100,151,6,0,0,1,89,73,68,65,84,120,218,237,152,205,74,195,64,20,133,211,141,174,74,43,21,236,127,10,182,197,133,184,85,215,1,27,17,74,23,198,133,89,233,3,248,48,250,66,77,
147,186,117,209,62,138,136,187,235,157,144,208,97,96,200,116,145,54,166,103,241,49,39,135,36,220,59,28,152,203,88,39,213,42,157,214,235,0,100,114,214,104,144,117,222,233,208,197,96,0,64,38,87,227,241,38,48,126,179,25,3,13,173,211,8,12,52,2,3,141,192, 147,186,117,209,62,138,136,187,235,157,144,208,97,96,200,116,145,54,166,103,241,49,39,135,36,220,59,28,152,203,88,39,213,42,157,214,235,0,100,114,214,104,144,117,222,233,208,197,96,0,64,38,87,227,241,38,48,126,179,25,3,13,173,211,8,12,52,2,3,141,192,
64,23,49,48,0,24,13,189,15,142,67,51,215,5,32,147,167,233,148,172,244,30,166,197,244,107,53,178,153,93,175,42,69,169,163,136,53,237,163,142,150,122,15,115,107,219,244,216,235,209,139,1,175,255,124,205,131,178,239,137,200,134,200,72,124,36,93,182,219, 64,23,49,48,0,24,13,189,15,142,67,51,215,5,32,147,167,233,148,172,244,30,166,197,244,107,53,178,153,93,175,42,69,169,163,136,53,237,163,142,150,122,15,115,107,219,244,216,235,209,139,1,175,255,124,205,131,178,239,137,200,134,200,72,124,36,93,182,219,
@@ -337,10 +538,10 @@ static const unsigned char temp_binary_data_6[] =
104,224,31,194,158,4,154,126,231,172,69,54,190,25,103,56,220,4,134,238,172,24,241,114,170,23,146,142,36,29,228,224,47,115,254,127,164,233,43,52,240,15,97,79,2,77,191,115,73,199,129,193,145,132,35,105,171,35,9,67,47,134,222,173,134,222,244,30,198,99,158, 104,224,31,194,158,4,154,126,231,172,69,54,190,25,103,56,220,4,134,238,172,24,241,114,170,23,146,142,36,29,228,224,47,115,254,127,164,233,43,52,240,15,97,79,2,77,191,115,73,199,129,193,145,132,35,105,171,35,9,67,47,134,222,173,134,222,244,30,198,99,158,
39,19,242,153,93,175,42,69,169,163,136,53,237,163,14,79,186,135,249,3,16,33,129,174,117,203,43,132,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; 39,19,242,153,93,175,42,69,169,163,136,53,237,163,14,79,186,135,249,3,16,33,129,174,117,203,43,132,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* Meter_140x8_png = (const char*) temp_binary_data_6;
const char* Meter_140x8_png = (const char*) temp_binary_data_7;
//================== Scaling_36_26.png ================== //================== Scaling_36_26.png ==================
static const unsigned char temp_binary_data_7[] =
static const unsigned char temp_binary_data_8[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,36,0,0,0,156,8,6,0,0,0,23,153,9,128,0,0,5,201,73,68,65,84,120,218,237,92,91,143,84,69,16,94,197,75,68,209,168,120,125,48,241,138,215,68,125,23,89,140,36,235,206,57,103,119,117,222,20,81,162,70,12,18, { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,36,0,0,0,156,8,6,0,0,0,23,153,9,128,0,0,5,201,73,68,65,84,120,218,237,92,91,143,84,69,16,94,197,75,68,209,168,120,125,48,241,138,215,68,125,23,89,140,36,235,206,57,103,119,117,222,20,81,162,70,12,18,
244,145,32,171,139,24,111,171,238,78,119,159,227,204,233,158,93,118,21,135,7,227,79,0,89,80,76,140,15,42,183,40,222,163,49,17,137,10,202,101,198,175,186,207,4,246,129,4,77,118,186,140,93,73,103,118,178,15,243,77,87,157,174,175,190,170,158,174,174,96, 244,145,32,171,139,24,111,171,238,78,119,159,227,204,233,158,93,118,21,135,7,227,79,0,89,80,76,140,15,42,183,40,222,163,49,17,137,10,202,101,198,175,186,207,4,246,129,4,77,118,186,140,93,73,103,118,178,15,243,77,87,157,174,175,190,170,158,174,174,96,
193,254,75,214,106,157,18,233,202,237,44,176,244,143,171,139,99,157,174,143,181,60,28,231,114,158,87,48,125,70,45,0,144,189,37,45,247,39,90,61,230,13,200,163,89,118,122,108,212,26,128,57,130,245,65,100,178,235,189,129,33,183,0,196,54,172,163,177,22,175, 193,254,75,214,106,157,18,233,202,237,44,176,244,143,171,139,99,157,174,143,181,60,28,231,114,158,87,48,125,70,45,0,144,189,37,45,247,39,90,61,230,13,200,163,89,118,122,108,212,26,128,57,130,245,65,100,178,235,189,129,33,183,0,196,54,172,163,177,22,175,
@@ -364,10 +565,10 @@ static const unsigned char temp_binary_data_7[] =
27,71,242,197,170,226,98,219,86,10,222,80,6,181,31,101,123,175,204,168,35,136,21,255,133,34,220,179,210,186,201,164,203,185,136,13,244,91,102,57,15,57,198,168,77,36,90,177,144,99,220,47,50,169,38,170,135,126,22,73,17,1,60,66,169,128,133,164,215,22,61, 27,71,242,197,170,226,98,219,86,10,222,80,6,181,31,101,123,175,204,168,35,136,21,255,133,34,220,179,210,186,201,164,203,185,136,13,244,91,102,57,15,57,198,168,77,36,90,177,144,99,220,47,50,169,38,170,135,126,22,73,17,1,60,66,169,128,133,164,215,22,61,
233,174,51,139,221,41,100,225,191,104,166,158,5,32,118,194,57,187,214,66,176,96,39,105,127,3,136,107,241,8,229,27,0,90,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; 233,174,51,139,221,41,100,225,191,104,166,158,5,32,118,194,57,187,214,66,176,96,39,105,127,3,136,107,241,8,229,27,0,90,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* Scaling_36_26_png = (const char*) temp_binary_data_7;
const char* Scaling_36_26_png = (const char*) temp_binary_data_8;
//================== Slider_26x26.png ================== //================== Slider_26x26.png ==================
static const unsigned char temp_binary_data_8[] =
static const unsigned char temp_binary_data_9[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,26,0,0,0,26,8,6,0,0,0,169,74,76,206,0,0,0,6,98,75,71,68,0,0,0,230,0,0,84,44,23,109,0,0,2,157,73,68,65,84,72,199,229,150,65,111,212,86,16,199,127,243,252,236,221,77,130,68,4,148,74,105,65,81,133,84,42, { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,26,0,0,0,26,8,6,0,0,0,169,74,76,206,0,0,0,6,98,75,71,68,0,0,0,230,0,0,84,44,23,109,0,0,2,157,73,68,65,84,72,199,229,150,65,111,212,86,16,199,127,243,252,236,221,77,130,68,4,148,74,105,65,81,133,84,42,
33,56,113,172,184,114,234,169,23,14,124,22,62,74,63,70,41,170,90,137,83,175,72,109,69,4,17,80,137,68,172,150,144,44,235,181,159,61,51,61,120,9,40,106,118,183,155,67,15,29,201,146,237,247,252,255,121,222,127,222,216,240,191,138,59,119,190,94,122,238,189, 33,56,113,172,184,114,234,169,23,14,124,22,62,74,63,70,41,170,90,137,83,175,72,109,69,4,17,80,137,68,172,150,144,44,235,181,159,61,51,61,120,9,40,106,118,183,155,67,15,29,201,146,237,247,252,255,121,222,127,222,216,240,191,138,59,119,190,94,122,238,189,
123,223,205,29,151,69,2,247,239,127,127,187,109,249,220,172,69,21,218,182,197,221,81,109,81,53,154,166,17,240,253,71,143,126,253,109,158,78,92,4,186,116,105,243,65,93,213,119,15,14,142,8,226,228,49,162,170,52,45,4,113,54,207,159,35,198,248,35,112,119, 123,223,205,29,151,69,2,247,239,127,127,187,109,249,220,172,69,21,218,182,197,221,81,109,81,53,154,166,17,240,253,71,143,126,253,109,158,78,92,4,186,116,105,243,65,93,213,119,15,14,142,8,226,228,49,162,170,52,45,4,113,54,207,159,35,198,248,35,112,119,
@@ -380,10 +581,10 @@ static const unsigned char temp_binary_data_8[] =
209,232,232,65,149,210,15,101,85,93,41,203,233,13,119,187,172,234,225,131,247,239,39,226,102,94,1,9,208,211,26,223,220,156,47,92,232,51,26,85,31,46,123,192,117,224,234,63,124,115,4,104,128,103,192,14,208,254,235,159,147,19,145,3,197,156,231,210,12,232, 209,232,232,65,149,210,15,101,85,93,41,203,233,13,119,187,172,234,225,131,247,239,39,226,102,94,1,9,208,211,26,223,220,156,47,92,232,51,26,85,31,46,123,192,117,224,234,63,124,115,4,104,128,103,192,14,208,254,235,159,147,19,145,3,197,156,231,210,12,232,
252,87,241,55,44,143,105,246,6,50,28,31,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; 252,87,241,55,44,143,105,246,6,50,28,31,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* Slider_26x26_png = (const char*) temp_binary_data_8;
const char* Slider_26x26_png = (const char*) temp_binary_data_9;
//================== NotoSans-Regular.ttf ================== //================== NotoSans-Regular.ttf ==================
static const unsigned char temp_binary_data_9[] =
static const unsigned char temp_binary_data_10[] =
{ 0,1,0,0,0,17,1,0,0,4,0,16,71,68,69,70,114,119,111,105,0,4,1,248,0,0,1,246,71,80,79,83,237,98,240,38,0,4,3,240,0,0,162,22,71,83,85,66,124,176,53,44,0,4,166,8,0,0,8,92,79,83,47,50,247,201,153,79,0,0,1,152,0,0,0,96,99,109,97,112,88,98,29,225,0,0,39,160, { 0,1,0,0,0,17,1,0,0,4,0,16,71,68,69,70,114,119,111,105,0,4,1,248,0,0,1,246,71,80,79,83,237,98,240,38,0,4,3,240,0,0,162,22,71,83,85,66,124,176,53,44,0,4,166,8,0,0,8,92,79,83,47,50,247,201,153,79,0,0,1,152,0,0,0,96,99,109,97,112,88,98,29,225,0,0,39,160,
0,0,14,210,99,118,116,32,25,175,26,197,0,0,64,68,0,0,0,254,102,112,103,109,54,11,22,12,0,0,54,116,0,0,7,180,103,97,115,112,0,22,0,35,0,4,1,232,0,0,0,16,103,108,121,102,170,127,220,169,0,0,102,240,0,3,150,146,104,101,97,100,245,231,74,201,0,0,1,28,0,0, 0,0,14,210,99,118,116,32,25,175,26,197,0,0,64,68,0,0,0,254,102,112,103,109,54,11,22,12,0,0,54,116,0,0,7,180,103,97,115,112,0,22,0,35,0,4,1,232,0,0,0,16,103,108,121,102,170,127,220,169,0,0,102,240,0,3,150,146,104,101,97,100,245,231,74,201,0,0,1,28,0,0,
0,54,104,104,101,97,14,175,12,74,0,0,1,84,0,0,0,36,104,109,116,120,220,134,79,22,0,0,1,248,0,0,37,168,108,111,99,97,16,223,58,96,0,0,65,68,0,0,37,172,109,97,120,112,11,236,5,22,0,0,1,120,0,0,0,32,110,97,109,101,103,90,145,24,0,3,253,132,0,0,4,66,112, 0,54,104,104,101,97,14,175,12,74,0,0,1,84,0,0,0,36,104,109,116,120,220,134,79,22,0,0,1,248,0,0,37,168,108,111,99,97,16,223,58,96,0,0,65,68,0,0,37,172,109,97,120,112,11,236,5,22,0,0,1,120,0,0,0,32,110,97,109,101,103,90,145,24,0,3,253,132,0,0,4,66,112,
@@ -3989,10 +4190,10 @@ static const unsigned char temp_binary_data_9[] =
9,43,0,4,4,229,4,243,2,96,9,44,0,4,4,229,4,243,2,97,9,45,0,4,4,229,4,244,2,96,9,46,0,4,4,229,4,244,2,97,9,47,0,4,4,231,4,243,2,96,9,48,0,4,4,231,4,243,2,97,9,49,0,4,4,231,4,244,2,96,9,50,0,4,4,231,4,244,2,97,9,55,0,4,4,233,4,229,2,96,9,56,0,4,4,233,4, 9,43,0,4,4,229,4,243,2,96,9,44,0,4,4,229,4,243,2,97,9,45,0,4,4,229,4,244,2,96,9,46,0,4,4,229,4,244,2,97,9,47,0,4,4,231,4,243,2,96,9,48,0,4,4,231,4,243,2,97,9,49,0,4,4,231,4,244,2,96,9,50,0,4,4,231,4,244,2,97,9,55,0,4,4,233,4,229,2,96,9,56,0,4,4,233,4,
229,2,97,9,57,0,4,4,233,4,231,2,96,9,58,0,4,4,233,4,231,2,97,0,2,0,3,1,126,1,126,0,0,1,134,1,134,0,1,1,146,1,146,0,2,0,2,0,12,0,3,0,243,2,55,6,3,0,2,0,2,0,76,0,77,0,0,4,87,4,87,0,2,0,0 }; 229,2,97,9,57,0,4,4,233,4,231,2,96,9,58,0,4,4,233,4,231,2,97,0,2,0,3,1,126,1,126,0,0,1,134,1,134,0,1,1,146,1,146,0,2,0,2,0,12,0,3,0,243,2,55,6,3,0,2,0,2,0,76,0,77,0,0,4,87,4,87,0,2,0,0 };
const char* NotoSansRegular_ttf = (const char*) temp_binary_data_9;
const char* NotoSansRegular_ttf = (const char*) temp_binary_data_10;
//================== NotoSans-Bold.ttf ================== //================== NotoSans-Bold.ttf ==================
static const unsigned char temp_binary_data_10[] =
static const unsigned char temp_binary_data_11[] =
{ 0,1,0,0,0,17,1,0,0,4,0,16,71,68,69,70,114,119,111,105,0,4,18,180,0,0,1,246,71,80,79,83,163,246,48,16,0,4,20,172,0,0,163,204,71,83,85,66,124,176,53,44,0,4,184,120,0,0,8,92,79,83,47,50,248,245,156,138,0,0,1,152,0,0,0,96,99,109,97,112,88,98,29,225,0,0,39, { 0,1,0,0,0,17,1,0,0,4,0,16,71,68,69,70,114,119,111,105,0,4,18,180,0,0,1,246,71,80,79,83,163,246,48,16,0,4,20,172,0,0,163,204,71,83,85,66,124,176,53,44,0,4,184,120,0,0,8,92,79,83,47,50,248,245,156,138,0,0,1,152,0,0,0,96,99,109,97,112,88,98,29,225,0,0,39,
160,0,0,14,210,99,118,116,32,39,8,39,208,0,0,64,212,0,0,1,18,102,112,103,109,54,11,22,12,0,0,54,116,0,0,7,180,103,97,115,112,0,17,0,35,0,4,18,164,0,0,0,16,103,108,121,102,161,3,188,9,0,0,103,148,0,3,166,130,104,101,97,100,246,93,74,203,0,0,1,28,0,0,0, 160,0,0,14,210,99,118,116,32,39,8,39,208,0,0,64,212,0,0,1,18,102,112,103,109,54,11,22,12,0,0,54,116,0,0,7,180,103,97,115,112,0,17,0,35,0,4,18,164,0,0,0,16,103,108,121,102,161,3,188,9,0,0,103,148,0,3,166,130,104,101,97,100,246,93,74,203,0,0,1,28,0,0,0,
54,104,104,101,97,15,36,13,50,0,0,1,84,0,0,0,36,104,109,116,120,60,227,229,135,0,0,1,248,0,0,37,168,108,111,99,97,17,55,17,102,0,0,65,232,0,0,37,172,109,97,120,112,12,8,5,21,0,0,1,120,0,0,0,32,110,97,109,101,106,81,151,19,0,4,14,24,0,0,4,108,112,111, 54,104,104,101,97,15,36,13,50,0,0,1,84,0,0,0,36,104,109,116,120,60,227,229,135,0,0,1,248,0,0,37,168,108,111,99,97,17,55,17,102,0,0,65,232,0,0,37,172,109,97,120,112,12,8,5,21,0,0,1,120,0,0,0,32,110,97,109,101,106,81,151,19,0,4,14,24,0,0,4,108,112,111,
@@ -7642,10 +7843,10 @@ static const unsigned char temp_binary_data_10[] =
0,4,4,231,4,244,2,96,9,50,0,4,4,231,4,244,2,97,9,55,0,4,4,233,4,229,2,96,9,56,0,4,4,233,4,229,2,97,9,57,0,4,4,233,4,231,2,96,9,58,0,4,4,233,4,231,2,97,0,2,0,3,1,126,1,126,0,0,1,134,1,134,0,1,1,146,1,146,0,2,0,2,0,12,0,3,0,243,2,55,6,3,0,2,0,2,0,76,0, 0,4,4,231,4,244,2,96,9,50,0,4,4,231,4,244,2,97,9,55,0,4,4,233,4,229,2,96,9,56,0,4,4,233,4,229,2,97,9,57,0,4,4,233,4,231,2,96,9,58,0,4,4,233,4,231,2,97,0,2,0,3,1,126,1,126,0,0,1,134,1,134,0,1,1,146,1,146,0,2,0,2,0,12,0,3,0,243,2,55,6,3,0,2,0,2,0,76,0,
77,0,0,4,87,4,87,0,2,0,0 }; 77,0,0,4,87,4,87,0,2,0,0 };
const char* NotoSansBold_ttf = (const char*) temp_binary_data_10;
const char* NotoSansBold_ttf = (const char*) temp_binary_data_11;
//================== builtin_pgm.zip ================== //================== builtin_pgm.zip ==================
static const unsigned char temp_binary_data_11[] =
static const unsigned char temp_binary_data_12[] =
{ 80,75,3,4,20,0,0,0,8,0,235,124,51,68,91,179,46,131,152,9,0,0,8,16,0,0,12,0,28,0,68,101,120,101,100,95,48,49,46,115,121,120,85,84,9,0,3,249,55,220,82,77,94,228,82,117,120,11,0,1,4,245,1,0,0,4,20,0,0,0,93,151,219,87,26,217,18,135,139,238,6,26,108,185,5, { 80,75,3,4,20,0,0,0,8,0,235,124,51,68,91,179,46,131,152,9,0,0,8,16,0,0,12,0,28,0,68,101,120,101,100,95,48,49,46,115,121,120,85,84,9,0,3,249,55,220,82,77,94,228,82,117,120,11,0,1,4,245,1,0,0,4,20,0,0,0,93,151,219,87,26,217,18,135,139,238,6,26,108,185,5,
161,81,130,45,87,229,38,23,81,80,146,128,8,104,64,32,92,4,21,21,168,100,77,178,214,76,226,36,153,153,117,230,101,254,229,243,118,94,79,237,110,64,152,78,92,43,249,252,85,213,174,221,181,107,87,255,183,2,38,5,140,165,4,38,16,212,39,15,244,15,115,41,141, 161,81,130,45,87,229,38,23,81,80,146,128,8,104,64,32,92,4,21,21,168,100,77,178,214,76,226,36,153,153,117,230,101,254,229,243,118,94,79,237,110,64,152,78,92,43,249,252,85,213,174,221,181,107,87,255,183,2,38,5,140,165,4,38,16,212,39,15,244,15,115,41,141,
201,23,32,192,230,58,0,176,18,136,175,42,60,4,50,171,138,218,126,26,113,188,4,28,32,61,25,122,118,173,1,66,105,185,55,253,143,82,254,101,250,229,107,242,178,105,86,112,208,129,52,147,138,125,39,52,175,204,94,28,223,65,134,128,44,220,9,144,126,111,86, 201,23,32,192,230,58,0,176,18,136,175,42,60,4,50,171,138,218,126,26,113,188,4,28,32,61,25,122,118,173,1,66,105,185,55,253,143,82,254,101,250,229,107,242,178,105,86,112,208,129,52,147,138,125,39,52,175,204,94,28,223,65,134,128,44,220,9,144,126,111,86,
@@ -8892,10 +9093,10 @@ static const unsigned char temp_binary_data_11[] =
227,193,80,81,117,120,11,0,1,4,245,1,0,0,4,20,0,0,0,80,75,1,2,30,3,20,0,0,0,8,0,198,139,121,66,196,112,97,144,143,10,0,0,8,16,0,0,16,0,24,0,0,0,0,0,0,0,0,0,192,129,57,69,1,0,83,121,110,112,114,101,122,70,77,95,51,50,46,115,121,120,85,84,5,0,3,227,193, 227,193,80,81,117,120,11,0,1,4,245,1,0,0,4,20,0,0,0,80,75,1,2,30,3,20,0,0,0,8,0,198,139,121,66,196,112,97,144,143,10,0,0,8,16,0,0,16,0,24,0,0,0,0,0,0,0,0,0,192,129,57,69,1,0,83,121,110,112,114,101,122,70,77,95,51,50,46,115,121,120,85,84,5,0,3,227,193,
80,81,117,120,11,0,1,4,245,1,0,0,4,20,0,0,0,80,75,5,6,0,0,0,0,33,0,33,0,18,11,0,0,18,80,1,0,0,0,0,0 }; 80,81,117,120,11,0,1,4,245,1,0,0,4,20,0,0,0,80,75,5,6,0,0,0,0,33,0,33,0,18,11,0,0,18,80,1,0,0,0,0,0 };
const char* builtin_pgm_zip = (const char*) temp_binary_data_11;
const char* builtin_pgm_zip = (const char*) temp_binary_data_12;
//================== about.png ================== //================== about.png ==================
static const unsigned char temp_binary_data_12[] =
static const unsigned char temp_binary_data_13[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,44,0,0,1,64,8,6,0,0,0,6,75,65,84,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,7,116,73,77,69,7,223,12,27,4,11,5,249,195,188, { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,44,0,0,1,64,8,6,0,0,0,6,75,65,84,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,7,116,73,77,69,7,223,12,27,4,11,5,249,195,188,
93,0,0,32,0,73,68,65,84,120,218,236,157,119,152,85,197,249,199,63,231,220,190,189,247,94,89,122,7,233,29,65,4,236,177,70,77,136,137,141,88,126,150,244,196,36,166,154,152,98,162,49,106,162,6,43,54,80,16,84,122,239,109,129,93,118,217,93,216,222,203,237, 93,0,0,32,0,73,68,65,84,120,218,236,157,119,152,85,197,249,199,63,231,220,190,189,247,94,89,122,7,233,29,65,4,236,177,70,77,136,137,141,88,126,150,244,196,36,166,154,152,98,162,49,106,162,6,43,54,80,16,84,122,239,109,129,93,118,217,93,216,222,203,237,
247,158,223,31,203,94,89,216,122,238,221,101,209,249,60,15,143,114,57,103,206,204,59,51,223,51,243,158,153,119,164,27,150,204,83,16,8,4,130,203,0,89,152,64,32,16,8,193,18,8,4,2,33,88,2,129,64,8,150,64,32,16,8,193,18,8,4,2,33,88,2,129,64,8,150,64,32,16, 247,158,223,31,203,94,89,216,122,238,221,101,209,249,60,15,143,114,57,103,206,204,59,51,223,51,243,158,153,119,164,27,150,204,83,16,8,4,130,203,0,89,152,64,32,16,8,193,18,8,4,2,33,88,2,129,64,8,150,64,32,16,8,193,18,8,4,2,33,88,2,129,64,8,150,64,32,16,
@@ -9251,260 +9452,245 @@ static const unsigned char temp_binary_data_12[] =
69,16,4,65,130,69,16,4,65,130,69,16,4,9,22,65,16,4,9,22,65,16,4,9,22,65,16,36,88,4,65,16,36,88,4,65,16,36,88,4,65,144,96,17,4,65,144,96,17,4,65,144,96,17,4,65,130,69,16,4,65,130,69,16,4,65,130,69,16,4,9,22,65,16,4,9,22,65,16,4,9,22,65,16,36,88,4,65,16, 69,16,4,65,130,69,16,4,65,130,69,16,4,9,22,65,16,4,9,22,65,16,4,9,22,65,16,36,88,4,65,16,36,88,4,65,16,36,88,4,65,144,96,17,4,65,144,96,17,4,65,144,96,17,4,65,130,69,16,4,65,130,69,16,4,65,130,69,16,4,9,22,65,16,4,9,22,65,16,4,9,22,65,16,36,88,4,65,16,
36,88,4,65,16,36,88,4,65,144,96,17,4,65,144,96,17,4,65,130,69,16,4,81,69,248,63,125,98,180,101,153,101,182,227,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; 36,88,4,65,16,36,88,4,65,144,96,17,4,65,144,96,17,4,65,130,69,16,4,81,69,248,63,125,98,180,101,153,101,182,227,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* about_png = (const char*) temp_binary_data_12;
const char* about_png = (const char*) temp_binary_data_13;
//================== GlobalEditor_864x144.png ================== //================== GlobalEditor_864x144.png ==================
static const unsigned char temp_binary_data_13[] =
{ 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,1,115,82,71,66,0,174,206,28,233,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,9,112,72,89,115,0,0,14,195,0,0,14,195,1,199,111,168,100,0,0,67,75,73,68,65,
84,120,94,237,157,9,152,36,85,149,239,25,71,7,26,92,112,235,215,44,190,65,6,121,46,131,11,208,128,52,34,52,116,45,93,221,244,66,131,208,208,236,32,139,200,38,251,14,54,139,130,32,32,139,195,174,192,115,97,20,7,25,70,6,29,65,118,81,92,16,70,133,39,155,
172,202,34,155,58,51,247,197,47,168,211,117,234,214,201,234,140,170,172,172,204,172,127,124,223,239,203,200,27,247,156,184,247,198,137,136,251,207,123,35,114,153,254,229,111,10,254,182,96,217,130,55,21,188,179,224,93,5,107,22,172,85,176,118,193,212,130,
245,11,54,16,66,136,54,131,107,23,215,48,174,101,92,211,184,182,253,239,130,201,5,111,46,88,174,128,107,32,215,66,93,15,133,24,91,116,62,138,78,66,241,44,60,245,198,195,146,96,32,97,197,130,85,11,62,80,176,97,65,79,193,150,5,219,21,236,84,176,107,193,
110,66,8,209,102,112,237,226,26,182,125,193,130,130,222,130,141,10,184,56,114,97,124,91,193,164,2,174,133,186,30,10,49,182,232,124,20,157,132,226,89,120,234,141,135,101,94,87,128,18,39,24,86,43,88,183,160,239,31,86,91,245,196,174,77,167,221,184,195,182,
243,254,223,81,135,236,155,14,59,112,47,33,132,104,107,14,218,119,183,180,205,150,125,191,235,218,116,195,155,222,183,230,187,207,40,174,117,91,20,172,87,176,122,129,93,20,65,215,67,33,198,24,157,143,162,147,80,60,11,79,29,241,176,204,27,10,24,6,101,
8,116,221,55,174,48,105,251,158,205,55,190,129,32,216,113,219,185,37,221,155,110,32,132,16,29,129,93,215,184,56,206,236,218,248,206,21,150,159,180,99,113,237,99,202,192,223,23,188,189,224,173,5,186,30,10,209,4,116,62,138,78,66,241,44,60,75,137,135,114,
40,148,57,168,255,88,48,107,78,223,230,183,236,186,104,65,232,72,8,33,58,137,133,11,250,210,150,91,116,223,95,92,251,230,22,124,184,128,233,1,220,28,63,88,160,235,161,16,77,68,231,163,232,36,20,207,194,147,197,195,135,10,150,121,99,1,65,49,109,141,119,
191,235,212,79,238,188,77,104,40,132,16,157,200,214,115,187,211,90,239,95,227,210,226,26,56,189,224,253,5,239,43,216,248,31,86,91,85,215,67,33,154,140,206,71,209,73,40,158,133,199,197,195,199,11,202,185,168,188,161,163,183,175,123,147,155,102,110,62,
45,52,18,162,19,88,123,173,255,35,38,40,81,60,192,166,211,214,78,115,251,54,191,183,184,6,242,171,20,243,179,121,123,209,236,153,93,31,215,245,80,180,44,81,140,183,19,81,157,96,36,231,227,244,141,214,77,211,214,251,80,90,127,237,15,132,251,18,98,172,
32,230,166,173,247,193,34,110,215,9,99,83,241,60,177,168,16,15,179,11,150,121,71,1,111,230,88,176,245,188,222,199,35,3,33,218,157,232,68,17,19,147,40,62,230,207,218,236,149,226,26,200,219,167,248,85,106,227,130,109,182,154,219,163,235,161,104,57,162,
152,110,103,162,58,214,123,62,206,248,248,250,101,71,53,242,43,68,179,249,232,212,181,202,152,204,227,84,241,60,49,89,74,60,124,162,160,124,47,61,239,170,223,126,139,158,143,15,201,40,68,187,19,157,24,98,98,147,199,200,199,214,255,96,42,174,129,188,58,
118,70,193,230,5,59,207,238,222,120,72,62,33,198,147,40,150,59,129,188,158,245,158,143,27,78,253,96,232,79,136,241,98,253,117,254,113,72,156,42,158,39,46,195,196,195,14,5,203,76,41,96,72,116,103,9,48,209,137,68,39,133,152,216,228,49,210,127,65,220,163,
128,255,98,129,61,36,192,68,171,17,197,114,39,144,215,179,158,243,113,211,141,214,9,125,9,49,222,124,252,163,31,25,20,171,138,231,137,77,141,120,216,165,96,153,149,10,120,37,226,174,18,96,162,211,136,78,6,33,192,199,73,255,5,113,175,130,153,253,236,41,
1,38,90,137,40,134,59,9,95,215,122,206,71,158,179,136,252,8,49,222,108,176,238,224,81,143,177,136,231,194,135,24,71,162,99,82,139,26,241,192,31,54,151,2,108,3,190,72,128,137,78,35,58,25,132,0,31,39,238,6,217,215,207,94,18,96,162,149,136,98,184,147,240,
117,173,231,124,92,239,35,239,15,253,140,37,107,189,239,31,210,219,86,124,243,146,78,216,88,243,214,183,188,41,189,239,61,171,133,101,17,173,203,58,31,122,239,160,88,29,139,120,38,62,38,45,187,108,90,97,210,36,209,68,222,180,194,10,105,149,149,86,10,
143,73,45,106,196,131,4,152,232,108,162,147,65,8,240,113,34,1,38,90,157,40,134,59,9,95,215,122,206,199,200,199,88,243,150,55,191,177,236,248,46,247,119,127,23,118,206,26,201,242,203,45,247,90,39,123,185,101,195,178,136,214,198,199,234,88,196,243,223,
254,205,223,164,21,223,252,230,244,142,183,189,77,52,145,119,190,253,237,105,245,213,170,255,40,226,143,181,4,152,152,16,68,39,130,16,224,227,68,2,76,180,58,81,12,119,18,190,174,173,42,192,138,114,164,55,46,191,124,122,219,138,43,134,157,179,70,194,62,
96,202,228,201,97,89,68,107,227,99,85,2,172,115,144,0,19,162,78,162,19,65,8,240,113,34,1,38,90,157,40,134,59,9,95,215,86,21,96,175,43,4,88,179,59,189,239,254,251,191,15,203,34,90,27,31,171,18,96,157,67,91,10,176,190,25,27,165,163,15,63,40,157,125,230,
231,135,176,248,248,35,211,188,190,233,161,157,24,204,126,251,236,22,182,225,105,167,156,152,22,110,53,43,180,153,200,68,39,130,16,224,227,68,2,76,180,58,81,12,119,18,190,174,173,42,192,154,221,233,29,105,103,79,140,63,62,86,37,192,58,135,182,20,96,243,
102,109,150,110,254,225,15,210,203,47,191,60,132,123,127,249,243,180,227,194,249,161,157,24,160,119,179,105,233,138,203,47,14,219,240,177,71,31,73,159,217,111,207,208,110,34,19,157,8,66,128,143,19,9,48,209,234,68,49,220,73,248,186,74,128,189,134,4,88,
251,226,99,85,2,172,115,104,91,1,118,199,109,183,164,104,249,237,111,254,51,237,180,112,203,208,78,12,128,0,251,218,149,151,167,255,254,239,255,238,111,185,129,229,153,103,158,78,7,239,191,87,104,55,145,137,78,4,33,192,199,137,4,152,104,117,162,24,238,
36,124,93,37,192,94,67,2,172,125,241,177,42,1,214,57,72,128,77,80,36,192,170,19,157,8,66,128,143,19,9,48,209,234,68,49,220,73,248,186,74,128,189,134,4,88,251,226,99,85,2,172,115,144,0,155,160,72,128,85,39,58,17,132,0,31,39,18,96,162,213,137,98,184,147,
240,117,149,0,123,13,9,176,246,197,199,170,4,88,231,32,1,54,65,145,0,171,78,116,34,8,1,62,78,36,192,68,171,19,197,112,39,225,235,42,1,246,26,18,96,237,139,143,85,9,176,206,65,2,108,130,34,1,86,157,232,68,16,2,124,156,72,128,137,86,39,138,225,78,194,215,
85,2,236,53,36,192,218,23,31,171,18,96,157,131,4,216,4,69,2,172,58,209,137,32,4,248,56,169,231,6,89,164,9,209,52,124,236,65,20,195,157,132,175,171,4,216,107,72,128,181,47,62,86,37,192,58,135,182,21,96,183,223,246,163,126,185,48,120,145,0,171,15,4,216,
85,87,92,42,1,86,129,232,68,16,2,124,156,212,43,192,38,45,187,108,90,97,210,36,33,198,140,55,173,176,66,90,101,165,149,6,197,30,68,49,220,73,248,186,74,128,189,134,4,88,251,226,99,85,2,172,115,104,57,1,182,245,220,158,180,247,30,59,164,35,15,217,63,29,
119,212,33,233,240,131,247,75,123,237,182,40,45,152,211,181,36,207,220,153,211,211,205,55,253,160,95,46,12,94,150,38,192,182,220,98,70,218,125,167,109,211,193,7,236,157,142,57,226,51,229,62,142,56,100,191,180,239,94,59,167,237,182,222,34,205,234,122,
45,144,187,54,89,63,117,117,109,84,155,233,31,29,226,59,167,107,122,65,100,107,244,231,235,221,108,195,178,222,159,220,101,97,58,244,192,79,165,99,143,60,56,29,127,244,107,117,255,212,39,119,74,11,23,204,42,202,245,177,33,254,107,129,64,197,215,97,159,
217,183,172,223,81,135,30,80,214,111,155,45,251,82,79,127,185,17,96,151,95,242,101,9,176,10,68,39,130,16,224,227,164,158,27,164,110,120,162,25,216,13,222,199,30,68,49,220,73,248,186,74,128,189,134,4,88,251,226,99,85,2,172,115,104,25,1,198,159,39,159,
127,206,25,233,238,187,238,72,79,62,241,120,122,241,79,127,74,47,189,244,98,122,225,133,231,211,227,191,127,44,221,126,235,205,233,172,47,156,154,182,219,106,118,41,146,174,191,238,59,161,120,136,4,24,98,227,211,123,237,146,46,185,240,188,116,215,157,
183,165,71,31,125,56,61,247,236,179,233,197,23,7,246,241,244,83,79,166,251,239,187,55,125,247,95,190,149,62,123,220,17,105,171,133,243,82,207,65,123,167,158,19,142,24,66,239,9,135,165,238,79,238,48,172,8,43,5,220,142,91,167,158,227,14,13,125,116,31,121,
64,154,185,85,95,58,240,211,159,76,95,189,236,194,244,147,187,239,76,191,127,236,209,244,252,115,207,13,42,215,83,79,62,153,238,187,247,151,233,154,111,125,163,20,83,91,206,158,17,238,15,16,169,159,63,249,248,116,243,15,191,95,214,241,249,231,159,43,
253,208,150,248,249,217,61,119,167,139,255,233,220,66,128,110,83,10,177,243,206,249,66,250,175,255,250,175,254,150,27,88,36,192,98,162,19,65,8,240,113,34,1,38,90,5,9,48,9,48,67,2,172,125,241,177,42,1,214,57,180,132,0,251,204,126,123,166,31,221,244,131,
244,242,75,47,133,162,138,5,161,128,144,248,247,239,253,107,218,127,159,221,211,85,95,141,167,207,229,2,108,225,86,179,210,69,95,254,82,250,127,15,62,144,94,125,245,149,210,166,214,62,72,255,235,95,255,154,158,125,246,143,229,126,14,62,255,172,212,247,
229,179,210,172,139,206,25,66,239,233,139,83,247,39,182,24,84,143,65,204,237,78,51,23,31,157,250,46,57,55,180,223,185,176,255,202,87,46,73,143,60,252,80,81,174,87,107,150,137,229,181,114,253,37,253,225,153,103,210,117,215,94,83,138,201,124,127,136,170,
107,175,249,231,178,236,180,85,228,143,180,87,94,121,165,20,185,71,31,126,96,58,249,196,163,203,125,231,139,4,88,76,116,34,8,1,62,78,36,192,68,171,32,1,38,1,102,72,128,181,47,62,86,37,192,58,135,113,23,96,251,237,179,91,57,250,19,141,196,68,203,159,255,
252,231,116,235,143,126,152,190,243,173,111,164,191,252,229,47,253,169,3,139,23,96,59,111,191,32,93,251,157,127,78,127,42,132,91,213,133,242,252,234,183,191,73,199,92,251,205,52,187,16,76,91,92,122,222,32,16,81,61,135,31,144,186,250,167,44,122,186,54,
219,48,245,236,191,71,154,121,193,89,161,221,94,87,94,156,110,184,243,214,244,242,203,47,15,43,188,162,133,58,211,94,76,85,180,253,81,223,27,254,237,186,80,76,69,11,62,24,237,67,196,62,247,220,179,253,169,3,139,4,88,76,116,34,8,1,62,78,36,192,68,171,
32,1,38,1,102,72,128,181,47,62,86,37,192,58,135,113,21,96,140,78,49,210,196,168,83,149,5,17,198,20,59,70,133,242,197,4,216,54,243,103,150,211,246,16,57,209,130,240,65,136,224,171,214,254,255,167,224,206,223,61,152,118,251,230,87,75,225,148,139,169,190,
115,79,79,221,187,108,59,180,110,11,231,165,89,95,60,105,72,126,124,236,116,213,197,233,198,95,253,34,253,165,134,224,164,44,86,174,72,96,178,32,14,127,124,231,237,105,239,221,119,72,115,122,55,77,87,92,126,81,205,122,214,90,216,15,109,248,74,32,2,37,
192,98,162,19,65,8,240,113,34,1,38,90,5,9,48,9,48,67,2,172,125,241,177,42,1,214,57,140,171,0,251,194,231,23,151,207,98,213,90,16,88,60,199,244,212,83,79,166,63,254,241,15,75,166,16,178,212,26,57,66,128,237,186,195,39,210,57,103,126,62,61,251,199,63,246,
167,14,94,158,126,250,169,114,202,35,35,64,151,93,124,65,57,117,239,190,95,253,50,28,65,122,181,16,65,87,221,125,71,90,112,217,249,161,160,234,89,124,84,234,218,98,224,185,172,174,162,222,61,71,127,38,205,188,240,236,33,249,231,21,92,122,215,109,233,
229,96,63,212,135,103,223,126,248,131,127,47,4,213,197,101,185,174,187,246,219,69,125,126,29,10,68,4,218,213,95,191,170,124,46,236,225,135,126,215,159,58,116,65,172,49,2,136,168,250,227,31,158,25,52,205,179,86,27,74,128,197,68,39,130,16,224,227,68,2,
76,180,10,18,96,173,43,192,94,255,186,215,165,183,190,229,45,225,113,27,11,36,192,218,23,31,171,18,96,157,195,184,10,176,91,110,254,143,154,34,0,97,134,0,57,233,132,163,210,33,7,236,83,190,177,144,23,72,252,242,23,247,212,28,25,98,65,128,241,22,193,95,
252,252,158,254,148,129,133,125,61,250,200,195,233,244,83,63,155,182,158,215,155,102,110,62,173,124,3,33,193,187,207,39,119,44,95,192,129,200,203,151,199,10,241,119,196,119,174,46,159,231,202,69,213,172,139,206,74,61,251,237,158,186,54,253,104,249,226,
141,238,61,22,165,153,231,157,25,228,59,39,237,127,245,149,233,129,66,76,230,11,229,250,245,127,222,87,62,147,181,213,156,238,242,165,33,148,107,139,222,77,202,231,189,110,188,225,250,82,140,230,203,147,79,62,145,126,126,207,79,66,129,198,130,216,186,
249,135,63,72,167,127,238,179,233,176,131,246,45,223,44,249,165,47,158,150,110,187,229,230,114,91,173,69,2,44,38,58,17,132,0,31,39,18,96,162,85,144,0,107,93,1,246,198,229,151,79,111,91,113,197,240,184,141,5,196,194,26,171,175,30,150,69,180,54,62,86,37,
192,58,135,113,21,96,191,249,245,253,253,93,254,193,11,211,233,120,99,33,175,140,247,249,17,37,188,78,253,214,31,221,84,243,153,177,7,126,251,155,114,100,136,183,255,229,11,35,92,231,127,233,204,82,224,120,191,6,35,103,119,221,113,235,16,81,200,190,174,
46,196,226,188,115,79,31,50,21,145,239,189,103,158,146,186,183,153,147,186,230,23,162,238,115,199,13,201,3,115,11,81,118,217,141,223,11,133,20,111,62,100,52,16,65,24,149,107,207,93,183,79,191,186,247,23,67,202,197,247,90,98,148,253,240,252,91,254,70,
72,216,105,187,45,203,233,153,81,89,88,36,192,98,162,19,65,8,240,113,34,1,38,90,5,9,176,214,21,96,239,89,253,221,233,93,171,172,146,86,158,50,165,41,252,253,187,222,149,54,88,111,106,88,22,209,218,248,88,149,0,235,28,198,85,128,33,150,242,5,81,193,168,
205,214,243,122,66,27,56,230,240,131,210,51,79,63,213,111,49,120,121,226,241,223,167,95,223,127,95,40,86,16,124,59,108,59,47,244,9,8,188,115,207,254,66,56,21,241,167,63,251,105,218,238,184,195,211,204,47,127,113,136,184,234,187,248,220,114,218,97,207,
161,251,165,190,139,134,78,61,196,102,225,73,71,167,59,127,122,119,191,183,129,133,114,221,253,227,59,202,215,235,71,101,50,46,189,232,252,97,71,254,242,133,186,238,181,251,162,208,23,240,63,97,180,83,180,72,128,197,68,39,130,16,224,227,68,2,76,180,10,
18,96,173,43,192,214,122,223,26,165,32,234,233,234,74,125,189,189,99,206,204,158,238,180,246,135,62,16,150,69,180,54,62,86,37,192,58,135,150,19,96,136,159,51,62,127,82,152,223,96,154,222,29,183,221,50,68,100,177,48,122,22,141,126,49,138,245,189,235,191,
155,250,102,108,20,250,52,16,30,60,43,149,47,76,93,220,179,216,214,115,252,161,133,224,250,210,80,145,117,225,217,133,208,138,223,122,216,123,202,177,233,83,135,31,88,254,159,89,190,80,174,111,126,253,202,37,127,0,93,11,166,85,214,251,54,71,218,229,27,
255,247,171,195,214,149,109,140,20,70,109,40,1,22,19,157,8,66,128,143,19,9,48,209,42,72,128,181,174,0,19,162,94,124,172,74,128,117,14,45,37,192,16,3,188,136,130,41,119,81,126,131,169,122,95,191,234,43,161,120,32,45,74,71,232,32,218,62,127,242,241,233,
115,39,29,87,147,175,92,250,79,233,15,133,0,201,23,94,220,81,138,146,237,231,167,190,51,79,9,167,25,70,244,157,115,122,234,217,117,97,58,254,232,67,67,1,197,168,214,127,124,255,134,116,218,41,39,134,229,49,174,186,226,210,242,127,208,234,89,94,122,233,
165,180,248,248,35,195,182,243,156,118,202,9,229,203,60,242,69,2,44,38,58,17,132,0,31,39,18,96,162,85,144,0,147,0,19,237,143,143,85,9,176,206,161,229,4,24,211,226,120,133,124,148,223,232,153,254,209,116,246,153,159,175,249,12,83,180,224,219,94,241,190,
52,34,1,199,75,65,14,63,120,191,212,181,217,180,212,179,223,39,211,172,96,180,43,7,145,214,115,200,167,82,79,209,22,103,159,241,185,112,106,35,11,245,136,202,145,19,149,43,95,200,195,8,94,244,103,205,57,252,151,88,36,234,36,192,98,162,19,65,8,240,113,
210,8,1,54,103,246,244,81,17,249,204,137,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,148,0,147,0,19,237,143,143,85,9,176,206,161,229,4,216,207,238,185,59,205,155,181,89,152,223,115,234,226,
99,107,10,154,177,88,120,81,198,81,135,30,80,238,187,107,246,230,105,230,9,71,134,162,203,211,123,234,113,175,189,152,99,243,105,233,162,47,127,169,146,96,28,233,66,27,50,213,145,23,138,228,109,150,195,11,77,120,189,127,190,72,128,197,68,39,130,16,224,
227,68,2,108,128,200,174,10,145,207,156,200,174,10,145,207,156,200,174,10,145,207,156,200,174,10,145,79,9,48,9,48,209,254,248,88,149,0,235,28,90,78,128,221,125,215,29,229,159,11,71,249,61,159,61,238,136,66,128,13,125,101,252,88,45,94,128,117,207,216,
40,245,28,126,64,248,95,95,6,163,95,51,143,59,36,205,40,218,1,1,118,249,37,95,46,71,224,198,122,161,13,31,121,248,161,240,237,135,57,123,239,177,67,41,182,176,241,139,4,88,76,116,34,8,1,62,78,36,192,6,136,236,170,16,249,204,137,236,170,16,249,204,137,
236,170,16,249,204,137,236,170,16,249,148,0,107,125,1,182,251,206,139,150,172,247,117,79,47,137,182,237,184,221,214,229,247,13,214,89,171,252,62,127,118,79,154,177,201,180,37,219,55,222,112,221,180,205,130,57,229,58,121,200,235,125,181,42,86,86,234,23,
109,31,75,174,191,238,218,65,109,216,170,248,88,149,0,235,28,90,78,128,253,228,238,59,211,220,153,75,23,96,252,63,88,21,1,134,239,103,159,253,99,249,140,217,72,224,255,197,152,178,87,254,215,215,162,5,169,247,139,167,132,194,203,51,235,156,211,83,247,
174,11,83,239,230,27,165,75,46,60,191,166,0,227,153,179,104,159,75,227,149,87,134,214,191,20,96,143,60,148,118,89,180,85,216,110,30,254,251,236,15,207,60,35,1,86,39,209,137,32,4,248,56,145,0,27,32,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,
228,51,39,178,171,66,228,83,2,172,245,5,216,99,143,62,178,68,40,221,114,243,77,37,172,147,246,179,123,126,90,174,31,123,212,97,233,171,151,95,154,206,63,247,236,242,121,116,68,203,97,7,31,80,10,8,243,115,241,133,23,164,179,206,56,109,137,159,111,124,
237,202,116,205,183,174,46,63,45,79,43,66,61,95,120,254,249,116,215,157,183,167,7,31,124,32,125,255,198,27,74,49,25,229,109,52,190,237,91,25,31,171,18,96,157,67,203,9,176,123,127,249,243,242,45,135,81,126,131,103,192,120,83,98,149,41,136,60,67,245,205,
175,93,145,246,219,123,215,17,177,239,158,59,151,83,35,187,182,232,74,189,199,31,81,215,75,56,202,81,176,147,143,77,189,91,205,42,95,111,31,189,240,130,183,54,50,58,182,223,62,187,133,251,173,5,127,172,28,189,9,146,239,79,63,245,100,57,186,21,181,157,
231,160,79,239,89,142,236,229,139,4,88,76,116,34,8,1,62,78,36,192,6,136,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,148,0,107,125,1,134,176,66,96,33,58,16,78,136,46,4,214,226,19,142,45,5,87,148,255,192,79,239,93,
230,65,64,240,73,58,235,140,230,48,10,230,133,217,253,247,253,170,165,71,121,16,64,136,47,251,78,253,78,59,117,241,160,60,64,251,144,151,145,63,70,204,168,147,141,158,145,150,231,39,221,242,249,116,111,63,156,0,35,157,124,126,187,237,47,79,195,167,229,
175,181,191,90,251,169,7,31,171,18,96,157,67,203,9,176,71,31,125,56,237,178,104,235,48,191,193,31,41,243,182,194,232,207,152,241,145,139,18,22,70,159,174,184,252,226,208,95,189,204,40,95,192,177,71,154,117,193,208,255,2,67,108,69,162,108,230,63,157,149,
122,15,217,55,157,116,202,9,233,197,23,135,190,240,2,81,118,254,57,103,148,255,65,22,237,179,22,156,112,215,252,243,215,195,54,96,63,199,28,113,80,104,231,97,26,103,52,138,38,1,22,19,157,8,66,128,143,19,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,
34,187,42,68,62,115,34,187,42,68,62,37,192,90,95,128,33,166,24,169,66,132,33,184,24,201,34,141,145,32,58,238,228,177,209,46,132,10,35,96,228,37,221,196,27,249,108,228,12,241,130,176,32,175,97,83,19,91,17,132,137,23,96,140,226,69,163,118,212,17,49,73,
59,80,111,70,203,108,157,186,123,177,74,186,141,2,146,207,196,15,237,64,219,208,198,8,221,90,2,140,54,196,7,62,249,52,145,235,71,22,217,47,105,216,219,200,157,141,80,218,113,195,15,121,115,63,85,241,177,58,22,241,188,252,114,203,165,41,147,39,135,127,
224,45,198,142,85,87,94,57,189,119,205,53,195,99,50,28,254,88,55,76,128,177,188,252,210,75,165,48,136,242,27,243,250,166,151,175,110,143,132,22,130,226,197,23,135,254,15,24,121,111,187,229,166,210,54,242,89,23,139,22,164,190,96,234,33,194,171,247,11,
39,165,222,211,78,72,125,151,156,59,100,59,175,162,223,255,244,147,211,227,79,60,222,95,154,129,133,114,253,219,191,94,91,215,139,71,60,8,54,94,236,17,141,2,34,202,46,187,248,130,82,168,70,182,240,154,136,189,48,20,112,18,96,49,209,137,32,98,248,181,
146,95,112,185,89,241,139,32,55,41,63,69,166,211,240,113,34,1,54,64,100,87,133,200,103,78,100,87,133,200,103,78,100,87,133,200,103,78,100,87,133,200,167,4,88,235,11,48,58,229,116,224,233,168,219,104,9,235,136,3,182,115,45,181,105,135,124,71,4,152,0,67,
80,152,40,64,164,145,198,39,105,172,183,3,220,27,168,171,137,79,234,26,61,15,70,187,48,85,209,190,83,71,27,41,163,221,16,103,172,115,191,177,169,155,128,95,19,116,136,38,196,45,235,180,43,75,36,192,16,83,249,189,138,50,113,92,236,59,251,227,152,96,207,
130,63,210,185,239,153,56,67,88,54,226,158,231,99,117,44,226,121,253,169,83,83,111,119,119,248,7,222,98,236,152,221,215,151,230,207,157,27,30,147,225,240,199,186,161,2,12,65,242,175,223,189,102,88,161,196,20,188,135,31,250,93,191,197,224,229,201,39,159,
72,191,249,245,253,161,56,227,141,127,199,31,125,72,232,115,56,202,209,169,45,102,164,153,199,31,54,100,148,171,20,95,23,156,145,186,247,88,148,186,119,250,68,234,253,210,105,97,158,237,47,248,98,250,201,3,67,235,203,194,159,60,243,124,89,180,239,225,
56,241,216,195,203,215,227,71,203,61,63,249,113,218,113,225,252,208,14,182,219,122,139,196,11,79,162,69,2,44,38,58,17,150,134,221,20,59,1,110,54,118,243,90,26,220,24,185,233,217,47,129,220,44,185,49,181,242,47,177,163,193,199,137,4,216,0,145,93,21,34,
159,57,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,18,96,173,47,192,128,142,186,23,13,8,18,68,0,235,92,119,249,206,189,4,49,65,199,223,4,152,217,34,224,76,160,241,73,30,174,191,251,236,185,235,18,49,208,170,152,0,67,168,12,247,34,14,238,
37,214,38,128,24,178,251,139,249,96,157,118,242,117,38,143,141,176,209,46,94,112,97,19,9,48,68,28,254,105,87,187,231,209,246,124,199,151,193,253,12,123,19,127,192,177,49,161,22,249,25,9,62,86,219,33,158,197,216,226,143,245,136,5,24,47,182,136,22,132,
210,153,167,159,156,34,31,8,135,239,254,203,183,194,145,27,22,68,221,213,223,184,42,189,244,82,60,10,118,231,237,183,150,47,159,224,57,178,220,119,14,251,231,79,161,143,60,252,160,52,231,144,125,195,169,135,125,23,158,157,122,142,254,76,234,42,78,128,
25,155,79,75,61,7,127,42,245,93,52,244,63,194,230,92,118,126,186,236,174,91,211,159,131,87,209,83,174,31,254,224,223,211,238,59,109,19,150,195,67,185,121,75,36,207,164,157,119,206,23,210,67,191,123,176,223,203,224,133,169,141,87,125,245,210,180,245,220,
158,33,62,182,156,61,35,93,114,225,121,229,243,103,209,34,1,22,19,157,8,195,193,205,143,11,51,55,0,27,5,242,23,123,126,181,179,95,205,184,144,115,227,36,111,36,82,184,49,141,133,120,177,125,90,25,249,238,247,67,26,229,100,29,1,133,144,34,175,149,155,
237,102,111,54,108,163,51,129,8,195,150,58,219,180,12,242,91,190,209,194,126,240,109,101,176,116,246,233,191,27,180,33,233,86,118,48,219,225,110,252,245,224,227,68,2,108,128,200,174,10,145,207,156,200,174,10,145,207,156,200,174,10,145,207,156,200,174,
10,145,79,9,176,246,232,176,114,205,178,235,44,88,199,222,190,179,206,245,148,123,10,215,44,127,29,101,91,126,111,224,26,103,207,144,97,227,183,181,26,148,223,4,210,112,112,157,246,35,80,181,4,24,105,222,31,237,198,244,63,179,177,246,224,94,199,12,34,
223,206,57,180,51,247,112,187,167,248,253,27,121,249,189,0,51,240,195,61,208,31,183,42,248,88,149,0,19,254,88,143,88,128,69,47,145,176,229,177,199,30,45,5,4,66,0,97,194,75,37,78,249,236,49,229,212,195,87,106,8,7,22,68,221,49,133,96,250,249,61,63,9,125,
147,198,200,207,169,139,143,75,219,127,98,78,218,162,119,147,52,171,107,227,242,153,42,70,221,182,93,48,171,20,104,167,157,114,98,186,238,218,111,167,7,31,248,109,186,254,103,63,73,91,93,60,244,249,46,70,182,102,158,121,114,234,94,56,111,73,157,186,182,
236,75,51,63,119,226,144,81,48,216,239,219,255,55,61,240,204,83,253,37,25,188,240,140,218,173,63,186,169,156,126,185,221,86,179,7,151,107,214,102,105,97,81,46,254,183,11,97,250,189,235,175,45,71,0,17,147,223,255,247,127,171,41,70,95,120,225,249,116,237,
119,254,57,29,117,216,129,105,143,157,23,22,98,114,187,116,204,17,159,73,255,242,237,171,195,255,255,178,69,2,44,38,58,17,134,131,139,48,55,5,110,130,220,32,249,4,191,221,110,32,92,192,249,117,143,95,45,185,89,216,13,3,176,97,27,191,234,213,115,163,170,
23,251,165,148,125,217,141,186,214,205,132,27,58,101,32,63,121,201,199,205,132,250,81,102,132,153,149,25,27,210,177,227,87,63,242,51,117,132,207,70,138,72,218,142,50,81,94,155,138,194,190,249,206,190,40,171,221,92,41,27,211,91,72,183,95,71,185,169,82,
78,190,83,254,252,166,89,5,31,39,18,96,3,68,118,85,136,124,230,68,118,85,136,124,230,68,118,85,136,124,230,68,118,85,136,124,74,128,169,195,218,234,228,247,156,90,228,2,200,223,63,241,97,2,140,251,154,221,75,185,47,144,110,247,29,242,115,95,64,156,98,
207,125,201,238,17,30,236,184,151,0,249,241,73,58,235,54,179,195,238,35,121,249,237,158,201,58,247,28,243,195,40,152,229,169,138,143,85,197,179,240,199,122,196,2,236,156,47,126,62,28,169,178,5,81,194,43,218,249,99,225,167,158,124,178,124,62,12,1,101,
68,11,2,108,231,237,23,148,111,73,124,230,233,167,251,83,135,46,127,250,211,159,210,175,255,243,190,82,244,32,98,24,129,186,235,142,91,139,19,236,222,114,26,35,175,184,103,31,143,63,255,92,58,254,123,215,14,17,83,48,235,203,103,165,158,253,247,72,51,
54,29,24,77,43,95,83,191,231,142,169,239,188,51,135,228,159,119,217,5,233,162,59,110,73,175,252,249,207,97,249,73,123,238,185,103,203,50,220,114,243,127,148,229,186,233,63,110,76,63,46,78,238,255,188,255,190,242,237,134,252,98,99,245,191,249,135,63,72,
39,159,120,116,122,252,241,199,250,61,12,93,200,247,124,81,7,242,240,234,250,23,139,122,219,190,237,51,95,36,192,98,162,19,97,56,184,72,251,11,51,157,127,176,239,254,6,98,162,193,182,241,107,25,159,38,146,44,221,46,254,246,125,52,248,27,133,49,220,205,
36,207,207,148,17,110,100,246,157,27,157,141,36,225,195,151,211,110,142,141,4,255,248,181,155,35,32,164,236,87,70,202,70,25,217,206,141,54,111,55,234,226,203,207,13,210,143,142,85,193,199,137,4,216,0,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,
34,159,57,145,93,21,34,159,18,96,234,176,182,58,92,159,235,249,97,142,107,179,31,37,100,221,174,215,248,240,179,24,72,103,42,34,215,255,92,96,113,127,64,96,97,207,126,253,253,195,32,157,123,3,247,60,111,143,95,210,185,87,251,145,52,95,126,252,91,57,41,
19,249,41,203,72,71,191,192,199,170,226,89,248,99,61,98,1,198,8,20,34,162,234,194,212,185,7,31,248,77,40,32,16,96,252,9,49,211,236,174,186,226,210,82,180,141,116,193,255,21,63,185,51,205,191,252,130,33,98,170,28,253,90,124,116,234,154,211,53,164,94,93,
51,55,77,61,199,28,18,142,130,109,115,197,69,233,154,95,220,83,115,212,170,222,133,178,209,118,180,225,55,191,126,101,101,127,188,150,159,103,229,162,255,38,147,0,139,137,78,132,225,160,195,95,69,128,249,169,34,38,88,216,142,24,99,187,193,77,193,242,
141,6,202,98,35,71,70,21,1,134,216,241,55,30,182,89,217,240,225,5,207,88,9,48,63,82,200,141,144,31,40,124,91,217,3,208,220,8,41,47,105,86,102,191,14,148,127,164,243,244,125,156,72,128,13,16,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,153,
19,217,85,33,242,41,1,166,14,171,104,127,124,172,182,91,60,115,95,230,94,189,180,105,254,150,207,83,43,15,159,249,54,195,247,9,26,1,253,178,70,245,185,26,133,63,214,35,22,96,112,200,1,251,148,255,253,85,239,130,248,226,255,188,152,74,247,228,19,79,244,
167,14,44,38,192,240,205,243,79,87,126,229,146,242,207,134,171,46,255,243,63,255,147,110,127,232,193,180,243,215,47,27,34,162,160,239,60,254,100,121,219,33,245,89,194,118,91,166,190,179,78,29,98,55,251,226,47,165,69,133,8,251,118,209,249,123,225,79,47,
212,28,133,90,218,98,2,108,254,172,205,203,63,93,102,189,94,95,136,46,70,214,248,47,177,251,238,253,229,16,59,9,176,152,232,68,24,14,46,56,116,242,237,59,191,132,249,135,131,121,78,202,46,50,228,243,23,28,19,44,92,104,70,51,117,97,56,16,95,94,80,1,191,
210,249,253,33,210,44,15,191,226,249,252,94,112,1,35,117,38,34,107,213,167,145,224,63,47,63,101,24,238,151,70,108,172,126,81,249,71,250,43,165,143,147,70,8,48,33,26,129,4,152,4,152,104,127,124,172,182,91,60,243,163,110,61,127,180,77,190,252,7,84,219,
70,126,126,64,165,207,68,58,253,9,251,113,53,167,209,125,13,250,8,254,135,243,86,192,31,235,81,9,48,94,42,113,212,161,7,148,211,236,254,26,188,160,194,22,68,2,211,17,25,237,97,212,103,238,204,233,229,20,189,92,60,120,1,6,228,251,220,73,199,149,254,249,
127,172,122,68,10,226,235,137,23,158,79,39,220,240,221,33,2,10,24,217,234,57,124,255,212,213,253,177,65,117,241,148,47,228,56,104,175,52,235,194,179,67,251,5,95,60,57,157,121,209,121,69,64,221,189,100,106,101,189,11,163,87,4,217,165,23,157,95,62,43,198,
254,246,218,109,81,186,241,134,235,75,129,58,156,47,246,69,187,241,156,27,111,119,228,85,244,249,40,152,4,88,76,116,34,12,7,226,137,227,100,211,15,128,239,8,49,166,18,218,139,41,200,203,69,165,150,96,33,47,23,45,70,103,16,77,126,212,102,52,152,216,98,
158,186,247,203,69,206,70,199,88,55,145,99,229,167,28,92,16,201,143,104,161,62,228,33,175,249,30,174,62,141,34,18,96,148,133,125,115,209,4,68,48,229,70,248,82,110,234,106,54,108,163,254,38,68,105,99,239,171,10,62,78,36,192,68,171,32,1,38,1,38,218,31,
31,171,237,40,192,188,152,226,94,204,61,215,231,1,242,69,253,4,250,81,244,51,232,71,229,219,34,114,31,220,231,125,159,137,117,63,130,198,126,129,117,250,10,244,43,248,180,237,29,45,192,0,17,182,235,14,91,151,255,93,197,203,51,120,214,137,103,149,16,76,
207,63,247,92,122,228,225,135,202,103,180,78,93,124,108,154,63,123,243,37,118,188,134,157,255,246,186,235,206,219,150,192,159,19,47,220,106,214,16,255,139,62,49,183,20,98,215,95,247,157,244,171,123,127,145,158,120,252,247,165,111,246,193,115,104,60,19,
198,119,246,253,219,223,254,58,93,248,157,111,166,45,78,58,58,245,126,246,168,33,244,28,117,80,234,206,246,17,50,175,187,16,106,7,132,62,122,79,60,60,245,238,188,77,218,105,209,86,229,243,106,223,187,254,187,69,144,221,91,62,235,198,51,91,148,11,172,
92,164,255,246,55,191,78,55,255,240,251,229,255,127,29,176,239,30,105,110,246,170,126,94,32,194,115,117,183,223,246,163,242,153,47,94,194,129,15,62,127,255,251,71,203,103,220,206,61,251,11,229,155,36,205,6,33,246,131,27,191,55,168,13,17,114,8,58,239,
91,140,236,162,198,92,112,63,15,157,79,46,62,156,228,172,219,47,65,92,20,252,175,66,249,112,61,23,31,46,2,124,70,191,30,141,6,124,34,92,236,162,131,127,46,58,182,47,63,239,158,114,82,14,43,3,219,168,15,249,253,69,109,105,245,105,4,121,217,12,218,150,
50,82,38,234,68,185,72,227,56,32,194,124,57,107,149,191,42,62,78,36,192,68,171,32,1,38,1,38,218,31,31,171,237,46,192,184,15,243,163,178,207,3,228,139,4,24,125,137,42,63,224,250,188,252,176,10,136,62,43,3,63,194,210,223,177,60,252,112,108,63,212,34,244,
216,78,94,203,211,241,2,204,152,213,245,177,114,116,235,160,79,239,153,142,63,250,208,180,248,248,35,203,55,248,241,6,196,5,115,186,134,188,58,158,63,19,222,114,139,25,131,96,74,158,207,147,195,136,216,14,219,206,75,251,237,179,91,233,155,183,14,158,
116,194,81,165,152,227,251,129,133,176,217,101,209,214,105,139,89,155,165,25,69,80,71,116,21,229,236,10,124,71,116,205,248,88,232,163,100,243,141,202,60,140,68,241,6,70,70,238,14,248,212,238,233,232,195,7,202,117,194,49,135,149,35,132,251,23,229,101,
170,33,207,182,205,220,124,184,63,88,222,48,109,51,127,102,249,95,105,199,30,121,112,217,134,124,242,29,129,22,217,226,115,80,59,22,223,203,255,62,203,242,9,221,168,197,80,242,24,145,0,19,173,130,4,152,4,152,104,127,124,172,182,163,0,67,20,33,98,16,55,
204,252,137,126,144,37,159,159,130,104,207,114,33,132,188,96,227,7,83,251,129,213,210,60,38,192,248,65,213,207,202,193,31,251,229,71,87,75,103,159,246,72,2,126,77,116,33,198,44,125,194,8,48,33,90,157,232,100,16,19,155,60,70,36,192,68,171,32,1,38,1,38,
218,31,31,171,237,42,192,24,249,26,110,38,76,173,17,48,102,173,120,33,133,15,196,146,31,85,243,152,15,158,71,207,95,96,102,207,168,227,15,33,134,176,178,103,201,16,104,140,128,249,252,164,75,128,9,209,66,68,39,132,152,152,68,241,33,1,38,90,5,9,48,9,48,
209,254,248,88,109,71,1,102,98,102,56,106,9,48,70,163,242,63,204,230,145,130,90,62,205,135,77,41,204,183,3,35,93,136,42,70,185,200,71,26,66,204,196,152,71,2,76,136,22,36,58,49,196,196,32,138,7,67,2,76,180,10,18,96,18,96,162,253,241,177,218,201,2,140,
183,37,34,118,12,219,198,243,232,8,43,210,24,197,226,185,174,165,9,48,96,84,139,188,246,2,51,19,91,60,63,142,248,226,205,138,150,151,253,147,198,62,200,63,225,158,1,19,66,136,118,71,2,76,180,10,163,17,96,60,252,238,255,54,163,17,224,51,122,217,13,29,
163,70,254,127,143,175,171,4,152,104,119,124,172,182,91,60,115,190,115,222,71,219,60,228,99,100,203,227,183,35,144,108,228,10,81,84,203,103,62,205,209,94,96,150,191,128,11,123,63,170,6,124,183,145,48,243,207,181,41,207,55,222,248,99,45,1,38,132,16,253,
72,128,137,86,97,52,2,108,184,105,62,35,5,65,103,111,46,181,231,49,128,14,78,52,253,104,164,248,186,74,128,137,118,199,199,170,226,89,248,99,45,1,38,132,16,253,52,66,128,205,153,61,125,84,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,
62,115,34,187,42,68,62,115,34,187,42,68,62,235,21,96,252,202,139,224,242,127,235,144,11,48,203,131,88,2,255,55,19,216,177,205,255,42,109,127,19,97,118,164,177,157,95,161,73,99,186,143,237,211,4,24,159,164,177,221,252,176,14,216,178,13,191,192,58,249,
45,159,199,215,85,29,86,209,238,248,88,85,60,11,127,172,37,192,132,16,162,31,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,235,17,96,8,34,166,255,49,77,135,63,35,183,231,29,16,56,38,192,16,64,188,81,140,215,65,147,
134,88,98,59,219,24,201,178,231,51,16,85,76,15,50,123,222,54,70,126,243,201,58,162,137,60,246,188,7,83,131,72,227,187,229,197,143,141,144,145,151,116,202,200,254,121,176,158,114,242,74,107,191,63,143,175,171,58,172,162,221,241,177,170,120,22,254,88,75,
128,137,113,35,10,78,33,198,154,40,22,13,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,171,78,65,100,100,201,222,28,230,5,152,253,247,142,229,67,140,153,0,227,65,118,27,57,67,72,217,43,163,217,142,168,242,35,101,
38,192,88,247,83,14,73,99,177,109,136,50,251,239,31,4,150,127,155,25,251,102,59,235,136,180,232,79,93,125,93,213,97,21,237,142,143,85,197,179,240,199,90,2,76,52,157,40,40,133,104,54,81,108,74,128,13,16,217,85,33,242,153,19,217,85,33,242,153,19,217,85,
33,242,153,19,217,85,33,242,89,143,0,99,116,139,55,133,49,194,132,120,50,97,228,5,24,35,78,38,122,128,188,38,192,16,68,150,14,216,219,20,193,252,197,26,195,9,48,239,7,91,202,196,58,2,204,191,12,4,59,243,225,243,121,124,93,213,97,21,237,142,143,85,197,
179,240,199,90,2,76,52,149,40,32,133,24,47,242,248,148,0,27,32,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,179,30,1,198,84,62,70,184,88,231,13,98,145,0,99,244,203,242,128,61,191,197,186,23,68,8,47,182,177,30,137,163,
92,128,217,91,201,72,243,130,44,23,96,126,244,77,2,76,76,52,124,172,42,158,133,63,214,18,96,162,169,68,1,41,196,120,145,199,167,4,216,0,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,245,8,48,132,21,35,92,188,174,25,49,227,
5,148,9,48,166,24,34,124,16,67,76,249,99,221,4,24,246,228,227,21,209,124,218,159,153,46,77,128,177,13,97,229,95,194,97,249,36,192,132,24,192,199,170,226,89,248,99,45,1,38,154,70,20,140,66,140,55,62,70,37,192,6,136,236,170,16,249,204,137,236,170,16,249,
204,137,236,170,16,249,204,137,236,170,16,249,172,247,25,48,166,23,34,164,236,109,131,164,49,154,229,223,106,200,58,66,136,81,50,166,22,250,255,219,97,157,109,254,213,242,216,219,179,97,134,189,5,209,182,35,218,176,33,205,251,243,182,148,201,4,23,144,
207,251,200,247,1,190,174,234,176,138,118,199,199,170,226,89,248,99,45,1,38,154,70,20,140,66,140,55,62,70,37,192,6,136,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,172,250,18,142,90,32,130,76,232,228,163,85,173,
136,175,171,58,172,162,221,241,177,170,120,22,254,88,75,128,137,166,17,5,163,16,227,141,143,81,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,27,37,192,24,185,226,109,135,76,33,100,244,203,143,116,181,34,190,174,234,
176,138,118,199,199,170,226,89,248,99,45,1,38,154,70,20,140,66,140,55,62,70,37,192,6,136,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,108,148,0,107,55,124,93,213,97,21,237,142,143,85,197,179,240,199,90,2,76,52,141,
40,24,133,24,111,124,140,74,128,13,16,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,41,1,166,14,171,104,127,124,172,42,158,133,63,214,18,96,162,105,68,193,40,196,120,227,99,84,2,108,128,200,174,10,145,207,156,200,174,10,
145,207,156,200,174,10,145,207,156,200,174,10,145,79,9,48,117,88,69,251,227,99,85,241,44,252,177,150,0,19,77,35,10,70,33,198,27,31,163,141,16,96,66,52,2,9,48,117,88,69,251,227,99,85,241,44,252,177,150,0,19,77,35,10,70,33,198,27,31,163,18,96,162,85,144,
0,83,135,85,180,63,62,86,21,207,194,31,107,9,48,209,52,162,96,20,98,188,241,49,42,1,38,90,5,9,48,117,88,69,251,227,99,85,241,44,252,177,150,0,19,77,35,10,70,33,198,27,31,163,18,96,162,85,144,0,83,135,85,180,63,62,86,21,207,194,31,107,9,48,209,52,162,
96,20,98,188,241,49,42,1,38,90,5,9,48,117,88,69,251,227,99,85,241,44,252,177,150,0,19,77,35,10,70,33,198,27,31,163,18,96,162,85,144,0,83,135,85,180,63,62,86,21,207,194,31,107,9,48,209,52,162,96,20,98,188,241,49,42,1,38,90,5,9,48,117,88,69,251,227,99,
85,241,44,252,177,150,0,19,77,35,10,70,33,198,27,31,163,18,96,162,85,144,0,83,135,85,180,63,62,86,21,207,194,31,107,9,48,209,52,162,96,20,98,188,241,49,42,1,38,90,5,9,48,117,88,69,251,227,99,85,241,44,252,177,150,0,19,77,35,10,70,33,198,27,31,163,141,
16,96,115,102,79,31,21,145,207,156,200,174,10,145,207,156,200,174,10,145,207,156,200,174,10,145,207,156,200,174,10,145,207,156,200,174,10,145,79,9,48,117,88,69,251,227,99,85,241,44,252,177,150,0,19,77,35,10,70,33,198,27,31,163,18,96,3,68,118,85,136,124,
230,68,118,85,136,124,230,68,118,85,136,124,230,68,118,85,136,124,74,128,169,195,42,218,31,31,171,138,103,225,143,181,4,152,104,26,81,48,10,49,222,248,24,149,0,27,32,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,83,2,76,
29,86,209,254,248,88,85,60,11,127,172,37,192,68,211,136,130,81,136,241,198,199,168,4,216,0,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,18,96,234,176,138,246,199,199,170,226,89,248,99,45,1,38,154,70,20,140,66,140,55,62,
70,37,192,6,136,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,148,0,107,191,14,235,177,71,29,150,246,217,115,215,112,155,152,152,248,88,149,0,19,254,88,75,128,137,166,17,5,163,16,227,141,143,81,9,176,1,34,187,42,
68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,37,192,218,175,195,122,254,185,103,151,34,44,218,86,133,122,132,220,120,138,189,13,214,89,43,237,190,243,162,180,227,118,91,15,217,54,127,118,79,218,102,193,156,33,233,125,221,211,7,229,
103,29,31,164,251,124,141,100,227,13,215,45,203,147,167,177,95,234,224,211,173,78,108,231,59,229,170,85,199,42,248,88,149,0,19,254,88,75,128,137,166,17,5,163,16,227,141,143,81,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,
42,68,62,37,192,26,211,97,157,177,201,180,178,35,109,29,113,58,218,8,4,235,96,215,234,160,99,23,165,231,130,193,210,241,217,40,1,86,143,159,70,237,107,36,208,6,47,60,255,124,186,235,206,219,211,131,15,62,144,190,127,227,13,75,132,203,53,223,186,58,189,
250,234,171,67,218,143,188,143,61,250,200,146,239,172,255,236,158,159,46,241,241,141,175,93,185,196,71,163,160,141,240,237,211,56,86,44,167,157,186,120,80,58,109,201,194,118,190,99,75,25,41,31,220,127,223,175,70,36,198,124,172,74,128,9,127,172,37,192,
68,211,136,130,81,136,241,198,199,168,4,216,0,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,18,96,163,239,176,30,248,233,189,211,45,55,223,84,118,166,175,191,238,218,82,20,32,30,232,88,35,26,46,190,240,130,114,221,58,221,
108,167,163,77,58,118,139,79,56,182,76,71,180,33,22,190,122,249,165,75,236,44,29,123,68,7,254,233,236,143,84,20,153,80,140,132,156,137,69,63,106,147,231,193,206,231,193,198,139,69,196,77,52,50,53,18,240,139,40,177,239,180,139,9,26,218,130,109,94,224,
88,126,218,202,210,88,247,229,67,128,209,182,246,189,17,112,60,40,143,29,95,96,221,4,149,207,75,26,88,94,218,23,108,59,226,235,233,167,159,26,34,44,151,134,143,85,9,48,225,143,181,4,152,104,26,81,48,10,49,222,248,24,149,0,27,32,178,171,66,228,51,39,178,
171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,83,2,108,244,29,86,132,1,120,225,66,167,159,17,26,75,67,164,209,249,103,29,65,99,194,1,193,98,163,39,228,201,69,23,159,116,214,189,104,160,3,63,18,1,102,62,35,33,135,104,66,44,32,6,114,129,96,121,40,
31,245,36,13,63,38,230,16,145,182,143,179,206,56,109,73,29,70,75,46,192,240,109,109,72,29,40,151,23,56,236,151,180,225,4,24,235,44,141,26,5,99,122,38,109,73,59,240,105,233,124,55,145,104,130,148,81,80,218,202,242,147,150,11,48,160,30,38,202,235,197,199,
170,4,152,240,199,186,46,1,86,164,9,81,55,62,118,60,81,48,10,49,222,248,24,149,0,27,32,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,83,2,108,244,29,86,58,243,116,154,17,52,214,153,166,163,111,194,202,190,155,88,160,3,
206,58,157,115,131,116,196,13,54,62,29,145,131,240,240,157,116,19,26,246,189,94,16,11,136,2,251,142,127,243,131,176,49,81,192,40,140,229,99,191,209,190,40,235,97,7,31,80,174,83,102,19,57,212,43,159,110,57,82,240,137,128,162,12,212,153,145,33,155,158,
71,249,40,47,117,48,129,67,57,216,247,112,2,12,40,227,104,159,185,50,16,198,246,140,28,251,183,145,43,19,96,180,29,109,69,26,117,160,205,40,243,112,2,44,74,91,26,62,86,37,192,132,63,214,117,11,176,73,203,46,155,86,152,52,73,136,154,188,105,133,21,210,
42,43,173,52,40,118,60,81,48,10,49,222,248,24,149,0,27,32,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,83,2,172,113,29,86,132,24,35,28,140,20,209,233,103,241,35,96,38,106,24,253,66,84,121,91,240,35,60,30,108,253,232,10,
157,254,145,8,48,58,245,126,202,158,23,114,8,21,19,125,96,251,195,198,242,216,104,15,219,201,111,233,248,196,23,226,135,41,148,164,53,2,19,96,180,75,46,152,76,128,153,192,161,141,104,59,179,177,124,145,0,27,201,20,191,8,124,48,202,105,109,134,95,107,
95,19,96,54,234,104,35,157,124,39,239,112,2,140,237,26,1,19,163,193,31,235,186,4,216,210,58,28,66,64,173,14,131,17,5,163,16,227,141,143,81,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,37,192,70,223,97,69,4,208,97,
102,116,131,209,21,58,230,116,250,121,129,4,98,137,78,57,157,112,27,49,98,59,157,113,58,222,136,26,235,108,91,58,130,130,116,19,105,116,218,45,63,66,7,95,38,126,170,96,83,8,237,187,23,114,38,104,108,155,97,2,204,202,96,130,210,70,119,88,71,92,80,111,
202,86,85,56,12,7,109,136,24,137,182,89,121,77,224,32,124,17,105,75,19,96,148,185,81,34,209,132,167,125,71,128,210,14,172,155,0,99,157,79,48,113,61,156,0,163,172,136,186,170,163,136,62,86,155,33,192,104,119,98,169,214,241,105,20,180,7,162,159,216,163,
109,163,31,46,26,9,49,68,44,81,47,226,100,172,247,231,33,14,124,236,142,6,127,172,37,192,68,195,144,0,19,237,136,143,209,70,8,48,33,26,129,4,216,232,59,172,116,150,233,216,35,62,172,227,108,226,129,233,113,116,172,114,113,131,216,162,115,7,254,165,21,
164,211,177,199,198,143,250,208,225,101,31,136,40,242,128,109,171,23,132,18,29,60,246,73,231,153,17,27,19,81,236,139,109,38,36,45,157,114,216,186,109,199,158,14,177,165,3,226,130,237,38,208,26,129,181,97,180,205,4,152,173,83,30,214,177,241,157,88,214,
169,43,176,78,167,154,60,182,125,52,176,207,92,40,225,159,182,244,2,140,117,22,59,158,185,0,227,187,125,34,218,77,168,87,193,199,106,51,4,24,245,108,134,0,35,102,173,173,76,108,143,36,246,235,5,223,62,62,16,125,254,252,28,43,136,13,132,166,143,221,209,
224,143,181,4,152,104,24,18,96,162,29,241,49,42,1,38,90,5,9,176,177,233,176,14,39,30,198,19,19,114,140,176,229,66,14,49,129,16,64,0,122,33,105,121,88,103,27,34,144,142,177,183,197,167,9,142,70,65,89,107,117,126,41,31,101,96,157,114,88,121,177,241,194,
213,196,144,97,233,163,37,223,143,65,27,1,101,243,226,204,239,155,58,89,217,201,235,203,103,233,85,241,177,218,12,1,70,155,83,246,102,199,184,9,220,104,91,163,225,24,243,35,133,63,142,99,1,251,177,31,6,36,192,68,75,35,1,38,218,17,31,163,18,96,162,85,
144,0,27,155,14,43,29,84,70,8,162,109,157,6,29,200,102,141,20,136,24,31,171,205,16,96,208,108,1,70,124,17,103,196,91,180,189,81,176,31,70,116,217,215,72,70,35,171,194,190,216,143,4,152,104,121,36,192,68,59,226,99,84,2,76,180,10,18,96,205,235,176,118,
34,140,124,209,9,247,211,17,69,243,241,177,218,137,2,140,125,53,75,228,243,227,9,35,196,140,6,179,79,246,29,229,107,4,140,38,219,200,177,4,152,104,121,26,37,192,56,145,27,253,128,37,115,120,253,180,140,70,195,47,63,181,46,64,249,179,4,30,123,163,21,101,
179,245,145,128,255,145,78,145,152,232,248,24,149,0,19,173,130,4,152,4,152,104,127,124,172,118,154,0,107,166,248,202,97,116,170,209,253,68,143,189,92,132,118,100,26,162,189,85,51,202,91,5,127,172,37,192,68,195,104,148,0,99,190,117,163,231,172,243,235,
197,88,254,90,194,92,228,90,101,38,221,207,51,247,216,175,42,35,253,133,133,11,144,93,36,248,228,151,161,40,159,168,141,143,81,9,48,209,42,72,128,73,128,137,246,199,199,106,39,9,176,102,139,47,255,188,23,63,54,55,115,223,35,237,159,69,248,99,45,1,38,
26,198,88,9,48,70,135,252,67,176,124,230,39,158,23,56,108,203,31,6,29,169,0,99,95,216,113,242,179,15,202,66,26,235,249,5,193,151,9,27,203,147,11,48,242,241,29,155,90,2,140,17,53,242,12,87,102,222,122,197,69,168,209,243,174,235,173,179,65,186,213,199,
210,200,103,117,136,30,204,181,7,176,135,171,95,179,240,49,42,1,38,90,5,9,48,9,48,209,254,248,88,237,36,1,70,191,38,95,106,253,8,221,8,248,177,153,55,81,218,15,206,99,57,250,149,147,247,207,70,131,63,214,18,96,162,97,140,133,0,163,243,207,9,199,127,122,
240,31,16,60,16,73,199,158,55,224,88,135,159,206,60,67,196,172,115,82,146,143,252,216,89,158,145,10,48,202,130,31,202,195,131,219,12,75,227,159,117,246,105,255,173,66,62,187,224,81,102,202,199,16,57,255,231,194,190,217,206,54,230,227,243,157,242,217,
168,21,233,254,4,167,126,164,179,15,166,37,214,122,96,28,223,182,255,70,82,111,157,129,58,80,70,234,74,62,234,78,58,182,148,143,116,214,253,205,128,81,58,252,208,6,190,109,198,11,31,163,18,96,162,85,144,0,147,0,19,237,143,143,85,197,179,240,199,90,2,
76,52,140,177,16,96,8,42,123,136,152,206,189,117,228,233,216,91,58,194,0,81,128,112,161,67,111,35,66,116,240,45,15,233,35,21,96,38,140,0,225,192,235,126,89,103,36,11,97,98,249,172,108,236,211,139,38,47,50,200,111,35,101,222,183,23,96,164,231,246,86,39,
15,34,111,36,117,90,26,245,214,153,81,174,92,88,153,56,51,241,102,219,16,103,94,12,91,125,120,160,22,255,150,111,60,240,49,42,1,38,90,5,9,48,117,88,69,251,227,99,85,241,44,252,177,150,0,19,13,99,44,4,24,29,124,70,99,248,52,72,103,212,203,214,233,208,
211,185,71,16,48,68,237,243,218,48,53,121,70,42,192,252,203,49,240,73,26,235,248,179,50,144,102,235,136,67,222,160,99,54,216,155,13,229,179,116,48,161,227,5,24,66,6,193,98,117,0,63,189,209,160,93,162,244,209,82,111,157,17,101,94,100,81,103,70,189,88,
231,248,249,54,192,6,91,127,220,128,227,102,245,30,47,124,140,54,66,128,205,153,61,125,84,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,37,192,212,97,21,237,143,143,85,197,179,240,199,90,2,76,
52,140,177,16,96,126,84,37,7,145,66,39,223,139,5,58,243,209,104,209,104,4,152,149,5,106,137,17,210,188,48,241,47,195,64,40,153,13,121,236,57,42,47,186,252,58,163,66,126,159,181,64,252,120,1,212,40,170,212,217,4,23,32,118,77,240,98,111,54,128,13,182,8,
46,47,66,201,195,113,180,239,227,129,143,81,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,37,192,212,97,21,237,143,143,85,197,179,240,199,186,46,1,182,252,114,203,165,41,147,39,167,149,167,76,17,162,38,171,174,188,
114,122,239,154,107,14,138,29,79,20,140,17,94,0,208,105,167,131,78,199,30,177,101,83,225,128,52,58,243,8,22,75,179,103,171,120,86,12,225,102,34,160,153,2,204,151,153,209,48,166,10,154,13,229,39,31,101,67,56,154,248,192,198,4,24,2,146,116,108,177,171,
37,178,152,146,73,62,64,240,65,35,70,196,234,173,51,229,100,157,114,82,87,202,97,109,92,75,128,217,54,132,27,109,129,56,109,198,31,42,14,135,143,81,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,37,192,212,97,21,237,
143,143,85,197,179,240,199,186,46,1,182,254,212,169,169,183,187,59,245,245,246,10,81,147,217,125,125,105,254,220,185,131,98,199,19,5,99,132,77,39,180,239,116,220,233,224,131,23,24,228,243,157,124,195,254,168,143,103,177,236,165,16,76,125,139,70,198,150,
70,94,22,246,79,26,235,248,179,242,144,150,151,13,145,197,126,41,191,217,0,254,16,31,164,155,13,190,200,155,219,83,143,168,142,6,118,8,83,242,225,211,234,59,26,216,119,61,117,182,188,8,40,142,141,9,44,192,222,215,25,27,223,254,118,140,252,126,198,11,
31,163,18,96,3,68,118,85,136,124,230,68,118,85,136,124,230,68,118,85,136,124,230,68,118,85,136,124,74,128,169,195,42,218,31,31,171,138,103,225,143,117,93,2,76,136,70,17,5,164,16,227,69,30,159,18,96,3,68,118,85,136,124,230,68,118,85,136,124,230,68,118,
85,136,124,230,68,118,85,136,124,74,128,169,195,42,218,31,31,171,138,103,225,143,181,4,152,104,42,81,64,10,49,94,228,241,41,1,54,64,100,87,133,200,103,78,100,87,133,200,103,78,100,87,133,200,103,78,100,87,133,200,167,4,152,58,172,162,253,241,177,170,
120,22,254,88,75,128,137,166,19,5,165,16,205,38,138,77,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,37,192,212,97,21,237,143,143,85,197,179,240,199,90,2,76,140,27,81,112,10,49,214,68,177,104,72,128,13,16,217,85,
33,242,153,19,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,41,1,166,14,171,104,127,124,172,42,158,133,63,214,18,96,66,8,209,143,4,216,0,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,18,96,234,176,138,246,199,
199,170,226,89,248,99,45,1,38,132,16,253,72,128,13,16,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,41,1,166,14,171,104,127,124,172,42,158,133,63,214,18,96,66,8,209,143,4,216,0,145,93,21,34,159,57,145,93,21,34,159,57,145,
93,21,34,159,57,145,93,21,34,159,18,96,234,176,138,246,199,199,170,226,89,248,99,45,1,38,132,16,253,72,128,13,16,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,41,1,166,14,171,104,127,124,172,42,158,133,63,214,18,96,66,8,
209,79,35,4,152,16,141,64,2,76,29,86,209,254,248,88,85,60,11,127,172,37,192,132,16,162,31,9,48,209,42,72,128,169,195,42,218,31,31,171,138,103,225,143,181,4,152,104,26,69,108,137,14,34,58,198,237,142,4,152,104,21,36,192,212,97,21,237,143,143,85,197,179,
240,199,90,2,76,52,141,34,182,210,164,101,151,77,43,76,154,36,218,152,55,173,176,66,90,101,165,149,194,99,220,238,72,128,137,86,65,2,76,29,86,209,254,248,88,85,60,11,127,172,37,192,68,211,80,199,181,51,168,213,49,236,4,36,192,68,171,80,85,128,205,159,
221,147,190,241,181,43,211,105,167,46,14,183,87,225,172,51,78,75,219,44,152,83,174,127,245,242,75,151,172,143,6,252,204,216,100,90,184,205,227,235,170,14,171,104,119,124,172,42,158,133,63,214,18,96,162,105,168,227,218,25,72,128,41,142,197,216,83,85,128,
221,117,231,237,233,176,131,15,104,136,88,186,230,91,87,167,221,119,94,84,174,227,215,214,71,3,126,250,186,167,135,219,60,190,174,234,176,138,118,199,199,170,226,89,248,99,45,1,38,154,134,58,174,157,129,4,152,226,88,140,61,85,4,24,194,230,233,167,159,
42,133,210,198,27,174,91,166,49,218,228,191,27,150,158,143,70,89,58,35,105,185,0,219,103,207,93,203,239,150,102,108,176,206,90,101,218,142,219,109,61,40,29,72,51,127,124,247,2,140,79,75,207,241,117,85,135,85,180,59,62,86,21,207,194,31,107,9,48,209,52,
212,113,237,12,36,192,20,199,98,236,169,34,192,206,63,247,236,244,194,243,207,151,159,136,27,70,193,238,191,239,87,229,119,132,207,129,159,222,187,204,135,200,34,253,226,11,47,72,183,220,124,83,90,124,194,177,101,58,34,13,1,199,20,70,210,201,227,5,216,
207,238,249,105,57,133,144,109,136,51,219,47,105,236,131,79,242,89,58,254,109,255,54,37,210,4,152,149,205,196,88,142,175,171,58,172,162,221,241,177,170,120,22,254,88,75,128,137,166,161,142,107,103,32,1,166,56,22,99,79,21,1,6,143,61,250,200,146,117,132,
143,137,46,70,154,16,78,172,35,148,188,232,122,240,193,7,202,117,166,46,178,141,117,192,151,23,96,254,185,50,108,24,249,178,239,6,2,14,159,108,243,101,49,240,195,72,218,112,226,11,124,93,213,97,21,237,142,143,85,197,179,240,199,90,2,76,52,13,117,92,59,
3,9,48,197,177,24,123,70,35,192,24,177,2,68,15,92,127,221,181,101,250,247,111,188,161,20,64,150,14,164,35,190,142,61,234,176,37,246,209,20,68,219,134,15,155,114,200,72,23,121,201,243,234,171,175,150,194,138,109,230,215,67,26,226,205,143,160,69,248,186,
170,195,42,218,29,31,171,138,103,225,143,181,4,152,104,26,234,184,118,6,18,96,138,99,49,246,140,70,128,229,130,202,224,237,134,144,167,147,23,49,101,223,17,111,181,70,192,16,112,140,116,33,202,16,99,164,49,234,197,20,72,4,24,235,140,134,89,126,3,63,76,
63,196,38,42,155,225,235,170,14,171,104,119,124,172,42,158,133,63,214,18,96,162,105,168,227,218,25,72,128,41,142,197,216,51,26,1,134,208,97,180,9,225,196,84,68,166,24,146,142,64,34,157,41,138,8,40,155,142,104,233,228,231,57,48,123,161,7,219,16,78,136,
46,219,102,211,25,25,233,194,6,255,164,179,127,155,90,200,40,23,163,110,248,55,177,133,31,182,219,212,71,189,132,67,76,4,124,172,42,158,133,63,214,18,96,162,105,168,227,218,25,72,128,41,142,197,216,83,85,128,229,111,34,68,236,48,218,133,112,242,98,199,
210,253,127,125,1,194,8,193,132,240,50,161,68,58,121,120,121,7,66,138,237,254,249,47,242,34,230,240,15,126,27,223,253,62,248,180,237,248,111,166,0,99,191,190,174,6,229,160,14,70,94,38,219,238,211,114,104,27,155,226,57,17,161,93,107,29,75,218,61,143,75,
207,112,109,75,236,248,169,175,237,138,143,85,9,48,225,143,181,4,152,104,26,234,184,118,6,18,96,138,99,49,246,84,21,96,157,130,175,107,163,58,172,8,41,70,224,242,116,196,35,35,119,108,3,58,253,150,159,105,152,140,4,242,201,243,109,54,138,152,67,94,63,
250,56,81,160,61,152,118,202,104,38,245,7,47,114,105,75,123,14,49,223,198,20,89,123,22,145,109,81,219,50,138,58,220,84,213,118,193,199,170,4,152,240,199,90,2,76,52,13,117,92,59,131,137,46,192,150,95,110,185,52,101,242,228,180,242,148,41,66,140,25,171,
174,188,114,122,239,154,107,14,138,61,136,110,234,157,132,175,107,51,4,24,228,233,60,167,102,98,12,76,100,213,26,69,99,155,125,39,143,253,199,26,35,64,140,242,144,199,182,231,163,62,228,183,209,70,15,105,228,181,125,50,146,228,71,24,241,105,144,151,237,
209,136,18,163,83,222,79,35,160,126,136,82,63,186,133,136,162,29,172,140,8,51,95,94,3,241,181,180,23,177,128,23,96,86,63,219,102,117,178,239,214,14,246,157,252,181,234,75,58,182,228,161,30,249,232,157,249,37,31,219,249,238,125,131,29,87,243,227,183,229,
248,88,149,0,19,254,88,75,128,137,166,33,1,214,25,76,116,1,182,254,212,169,169,183,187,59,245,245,246,10,49,102,204,238,235,75,243,231,206,29,20,123,16,221,212,59,9,95,215,241,16,96,116,168,89,242,142,53,130,192,191,168,196,192,183,9,48,4,3,207,200,209,
65,7,70,121,16,28,76,81,228,147,60,148,195,196,4,121,236,245,253,230,15,232,252,51,122,68,217,216,47,223,177,247,47,67,49,63,228,33,47,251,224,89,60,132,143,229,161,60,148,141,114,71,101,31,41,248,165,110,121,58,35,98,38,96,40,147,253,21,130,135,242,
44,77,180,128,9,48,242,226,203,166,35,146,70,221,169,55,101,160,253,217,102,207,38,2,226,57,170,47,194,154,116,108,105,79,4,150,23,207,222,15,117,33,191,237,135,253,146,206,49,163,141,105,111,124,89,125,107,225,99,85,2,76,248,99,45,1,38,154,134,4,88,
103,48,209,5,152,16,227,73,116,83,239,36,124,93,155,33,192,232,128,179,13,232,100,35,106,188,136,49,120,254,45,26,185,49,1,198,8,144,137,47,210,233,152,155,232,2,242,176,141,124,230,7,129,18,61,63,134,208,34,221,11,21,70,106,76,244,176,79,43,35,117,176,
183,81,2,101,48,129,71,157,200,107,219,26,5,251,68,236,229,233,236,219,132,10,162,145,253,83,102,19,79,8,158,232,13,153,17,180,17,109,238,197,23,176,15,252,176,206,118,202,194,58,237,107,233,180,77,244,92,154,127,185,140,65,219,153,127,218,220,166,67,
178,80,7,214,105,79,107,99,242,70,113,80,11,31,171,237,40,192,136,89,218,204,98,170,22,150,207,83,43,143,157,35,19,17,127,172,37,192,68,211,144,0,235,12,36,192,132,24,63,162,155,122,39,225,235,218,12,1,70,103,218,58,140,228,163,19,207,244,186,188,147,
136,152,242,130,202,192,134,209,18,58,247,38,62,0,223,8,1,19,119,64,135,30,191,136,5,196,21,29,126,47,46,12,242,48,138,131,61,251,180,178,152,15,182,217,20,73,246,227,71,198,172,62,172,215,43,118,170,130,72,137,218,147,122,229,245,161,188,94,132,209,
86,126,123,45,168,7,254,176,181,250,243,137,189,111,83,59,38,214,38,8,5,68,155,247,101,152,144,98,187,181,17,229,50,177,75,123,217,190,124,57,125,252,176,63,223,222,75,195,199,106,59,10,48,139,111,234,79,60,210,126,209,8,38,249,56,111,252,177,177,109,
228,71,56,211,238,164,115,92,45,126,71,67,116,238,180,58,254,88,75,128,137,166,33,1,214,25,72,128,9,49,126,68,55,245,78,194,215,181,25,2,204,70,80,60,116,250,173,131,110,208,249,140,166,212,225,155,142,59,194,205,143,188,208,57,172,53,82,194,212,53,70,
111,232,136,70,219,13,196,0,62,172,195,207,254,177,101,63,54,218,67,249,189,240,243,2,140,122,80,62,219,214,40,216,55,157,114,19,43,96,29,112,43,151,135,50,90,135,155,78,120,212,142,57,86,111,240,237,200,126,163,58,177,95,142,177,181,109,190,221,131,
40,244,226,148,246,196,198,143,234,249,99,227,227,199,143,96,214,131,143,213,118,21,96,254,220,169,37,64,201,23,197,51,49,66,28,218,200,226,210,176,145,54,98,216,98,9,223,124,247,199,157,24,66,212,145,110,130,144,79,111,215,138,248,99,45,1,38,154,134,
4,88,103,32,1,38,196,248,17,221,212,59,9,95,215,70,10,48,58,135,38,184,76,116,249,117,15,157,56,251,149,158,142,35,29,189,104,244,11,124,199,147,206,163,141,216,0,29,123,58,245,248,243,246,116,16,17,0,209,190,129,206,37,157,92,62,17,44,54,21,206,58,179,
126,202,33,62,106,9,48,124,208,121,102,123,212,105,30,13,248,163,108,8,23,214,125,39,155,242,82,95,190,211,134,38,80,217,70,217,16,81,180,169,181,191,239,88,27,212,195,234,69,125,109,221,246,197,119,240,83,227,200,199,177,240,194,208,67,153,104,83,202,
228,219,208,202,104,237,12,94,76,80,62,19,33,118,92,41,55,101,241,54,17,62,86,59,65,128,209,86,209,244,83,127,30,120,104,159,40,189,22,228,101,68,146,99,133,45,113,195,119,218,219,98,153,124,196,7,113,96,241,67,62,190,35,192,137,173,165,137,240,241,194,
31,107,9,48,209,52,36,192,58,3,9,48,33,198,143,232,166,222,73,248,186,54,170,195,74,167,153,142,191,135,116,58,110,144,231,7,58,116,116,246,232,224,249,78,126,14,190,253,118,235,52,178,206,47,242,116,4,241,145,79,151,162,163,89,107,223,164,35,94,162,
14,62,157,81,63,130,100,157,79,251,206,8,156,159,34,198,118,58,205,86,231,70,194,190,40,35,117,244,207,92,217,72,4,251,165,30,190,60,64,121,73,167,93,104,227,124,59,224,207,183,163,111,99,214,205,214,215,157,114,12,55,58,101,101,162,253,252,62,241,71,
231,221,231,245,251,227,24,231,199,129,242,179,63,191,255,8,31,171,237,42,192,136,85,218,27,113,131,80,245,109,227,243,249,41,136,196,41,233,180,145,23,108,196,139,29,59,75,243,176,175,90,219,56,6,38,156,57,150,254,88,99,131,111,214,57,182,249,241,108,
21,252,177,150,0,19,77,67,2,172,51,144,0,19,98,252,136,110,234,157,132,175,107,59,118,88,235,129,206,187,117,80,171,128,40,161,99,89,107,132,103,34,67,155,248,209,194,42,208,145,231,152,68,219,70,139,143,213,118,22,96,8,215,72,120,25,150,47,79,183,81,
92,251,142,15,132,146,31,85,243,224,195,199,55,49,207,185,2,248,49,187,92,128,217,136,152,9,192,90,254,199,27,127,172,37,192,68,211,144,0,235,12,36,192,132,24,63,162,155,122,39,225,235,90,207,249,184,238,135,223,23,250,105,85,232,24,210,153,92,218,200,
73,14,83,178,152,90,53,92,39,120,162,194,232,7,237,90,107,228,164,22,136,53,236,16,23,209,246,81,243,193,246,143,103,132,85,61,98,166,150,0,35,206,25,25,99,187,165,33,158,106,249,204,125,112,174,152,56,246,118,172,251,31,49,56,63,24,89,179,239,45,73,
28,15,75,4,216,250,5,187,74,128,137,177,64,2,172,51,152,32,2,108,102,63,123,74,128,137,86,34,188,177,119,16,190,174,245,156,143,31,157,170,209,32,209,154,172,191,246,7,6,197,106,59,198,115,21,1,198,179,125,136,32,195,182,33,160,16,86,164,217,203,105,
234,21,96,8,43,166,48,34,174,189,29,163,100,76,135,100,132,13,145,103,2,144,105,146,236,131,169,143,222,79,43,80,35,30,74,1,54,165,96,189,130,157,37,192,196,88,176,252,114,203,165,41,147,39,167,149,167,76,17,109,204,170,43,175,156,222,187,230,154,225,
49,110,119,250,47,136,123,20,244,20,244,178,46,1,38,90,141,232,230,222,9,228,245,172,231,124,252,248,71,63,18,250,18,98,188,217,104,253,15,13,138,213,118,140,231,232,249,183,8,242,49,42,229,241,219,17,72,136,34,68,24,98,170,150,207,124,132,23,191,8,56,
166,45,242,108,151,127,214,144,117,70,47,109,116,13,33,70,62,210,70,50,21,117,172,169,17,15,187,20,44,243,191,10,214,41,88,36,1,38,198,130,245,167,78,77,189,221,221,169,175,183,87,180,49,179,251,250,210,252,185,115,195,99,220,238,184,95,164,186,10,102,
20,236,34,1,38,90,141,232,230,222,9,228,245,172,247,124,228,151,229,200,159,16,227,197,212,15,191,63,117,109,178,254,160,56,85,60,79,92,134,137,135,29,11,150,121,71,193,135,10,62,177,206,90,239,121,214,103,18,66,136,137,192,26,255,251,157,127,45,174,
129,139,10,54,45,216,164,96,187,181,255,113,13,93,15,69,203,17,221,228,219,153,168,142,245,158,143,155,109,60,53,173,247,17,117,90,69,107,64,103,123,179,143,173,59,40,70,65,241,60,49,89,74,60,108,91,176,204,91,11,222,91,48,107,245,119,77,254,241,204,
205,167,13,201,44,132,16,157,202,166,211,214,78,239,89,109,202,131,197,53,112,65,193,71,11,120,38,118,238,187,87,125,167,174,135,162,101,137,110,248,237,68,84,39,24,201,249,248,177,13,62,172,142,171,24,55,214,251,200,251,211,180,245,62,52,100,164,3,20,
207,19,143,58,227,97,110,193,50,111,42,88,173,224,227,239,89,125,213,75,167,126,168,51,159,241,16,66,136,8,46,136,107,172,182,242,119,139,107,32,83,67,62,88,176,86,193,244,53,222,189,138,174,135,66,52,25,157,143,162,147,80,60,11,143,139,135,205,10,150,
153,84,192,115,96,31,46,152,255,238,85,223,241,192,71,62,176,122,104,40,132,16,157,198,219,222,248,250,167,222,240,134,215,111,87,92,255,166,22,188,187,128,31,164,214,214,245,80,136,230,163,243,81,116,18,138,103,225,113,241,192,187,55,150,249,187,130,
183,20,16,20,27,78,126,199,91,15,90,109,149,183,63,68,80,252,227,154,239,10,29,8,33,68,187,195,245,141,139,225,228,119,172,120,100,113,237,251,88,193,63,20,76,46,224,185,88,110,148,186,30,10,209,36,116,62,138,78,66,241,44,60,53,226,97,153,191,45,88,174,
224,237,5,107,20,76,43,88,176,218,170,147,191,253,174,41,43,62,60,229,109,147,210,219,223,244,122,33,132,232,24,38,191,117,210,239,87,249,95,43,126,239,13,111,120,253,246,197,245,110,227,130,255,83,240,206,130,21,10,150,47,208,245,80,136,38,161,243,81,
116,18,138,103,225,25,38,30,150,249,155,130,215,23,16,20,166,204,25,30,157,94,192,67,98,11,11,118,42,216,181,128,215,104,10,33,68,59,194,53,140,107,25,215,180,121,5,155,23,172,91,192,47,81,118,115,228,90,168,235,161,16,99,143,206,71,209,73,40,158,133,
167,158,120,40,23,19,97,60,15,182,98,193,74,5,171,23,188,191,224,35,5,204,93,229,205,45,176,129,16,66,180,33,92,191,184,150,113,77,251,64,1,23,194,149,11,120,19,44,215,62,174,129,175,43,208,245,80,136,177,71,231,163,232,36,20,207,194,179,148,120,88,230,
245,255,31,190,10,252,25,242,221,162,193,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
static const unsigned char temp_binary_data_14[] =
{ 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,1,115,82,71,66,0,174,206,28,233,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,9,112,72,89,115,0,0,14,195,0,0,14,195,1,199,111,168,100,0,0,62,230,73,68,
65,84,120,94,237,157,11,152,28,85,153,191,163,171,11,33,162,136,154,13,183,21,16,89,111,136,2,1,36,136,16,72,102,38,147,129,16,34,247,139,16,64,46,162,6,22,69,197,197,101,23,21,69,163,176,34,162,34,139,226,122,89,255,202,42,138,34,186,162,174,44,234,
138,202,197,85,65,87,65,84,16,197,27,241,246,212,191,222,78,127,233,175,207,124,61,211,103,166,167,187,171,231,119,158,231,125,186,250,212,249,190,58,167,234,171,170,243,235,115,170,122,78,61,61,172,228,175,74,54,42,217,180,228,9,37,219,148,236,88,178,
83,201,46,37,11,75,246,40,217,83,8,33,42,6,215,46,174,97,92,203,184,166,113,109,251,219,146,249,37,143,46,217,184,132,107,32,215,66,93,15,133,152,89,116,62,138,65,66,241,44,60,237,198,195,134,96,32,99,179,146,173,75,158,94,178,87,201,112,201,33,37,71,
149,188,160,100,117,201,137,66,8,81,49,184,118,113,13,59,186,100,85,201,72,201,222,37,92,28,185,48,110,94,50,183,132,107,161,174,135,66,204,44,58,31,197,32,161,120,22,158,118,227,97,206,195,75,80,226,4,195,182,37,187,149,140,62,105,219,173,255,105,233,
126,139,110,56,246,136,131,127,112,238,203,206,40,206,57,243,84,33,132,168,52,103,157,113,98,113,248,33,163,63,92,186,223,94,55,62,117,199,237,214,150,215,186,3,75,118,47,217,190,196,46,138,160,235,161,16,51,140,206,71,49,72,40,158,133,167,141,120,152,
243,200,18,134,65,25,2,221,237,81,243,230,30,61,124,192,62,215,19,4,199,29,177,162,198,208,126,123,10,33,196,64,96,215,53,46,142,203,150,238,115,243,188,77,230,30,87,94,251,152,50,240,196,146,199,149,60,182,68,215,67,33,186,128,206,71,49,72,40,158,133,
103,146,120,168,13,133,50,7,245,25,37,203,15,26,61,224,203,171,143,89,21,58,18,66,136,65,226,200,85,163,197,33,7,14,125,167,188,246,173,40,121,86,9,211,3,184,57,62,179,68,215,67,33,186,136,206,71,49,72,40,158,133,39,137,135,157,75,230,60,170,132,160,
88,180,195,118,219,92,248,194,227,15,15,13,133,16,98,16,57,116,197,80,177,211,211,118,184,178,188,6,46,46,121,90,201,83,75,246,121,210,182,91,235,122,40,68,151,209,249,40,6,9,197,179,240,184,120,120,94,73,109,46,42,111,232,24,25,29,218,247,198,101,7,
44,10,141,132,24,4,118,217,233,239,196,44,37,138,7,216,111,209,46,197,138,209,3,110,43,175,129,252,42,197,252,108,222,94,52,182,108,233,243,116,61,20,125,75,20,227,85,34,106,19,76,229,124,92,188,247,110,197,162,221,119,46,246,216,229,233,225,182,132,
152,41,136,185,69,187,63,179,140,219,93,195,216,84,60,207,46,50,226,97,172,100,206,227,75,120,51,199,170,67,15,30,185,55,50,16,162,234,68,39,138,152,157,68,241,177,114,249,254,15,149,215,64,222,62,197,175,82,251,148,28,254,252,21,195,186,30,138,190,35,
138,233,42,19,181,177,221,243,113,201,243,246,168,117,84,35,191,66,116,155,231,44,220,169,22,147,105,156,42,158,103,39,147,196,195,97,37,181,247,210,243,174,250,163,15,28,126,222,184,130,66,84,157,232,196,16,179,155,52,70,158,187,199,51,139,242,26,200,
171,99,151,148,28,80,114,252,216,208,62,227,202,9,209,75,162,88,30,4,210,118,182,123,62,238,181,240,153,161,63,33,122,197,30,187,62,99,92,156,42,158,103,47,19,196,195,177,37,115,22,148,48,36,122,188,4,152,24,68,162,147,66,204,110,210,24,169,95,16,79,
46,225,191,88,224,100,9,48,209,111,68,177,60,8,164,237,108,231,124,220,111,239,93,67,95,66,244,154,231,61,231,217,77,177,170,120,158,221,180,136,135,19,74,230,108,81,194,43,17,87,75,128,137,65,35,58,25,132,0,31,39,245,11,226,169,37,203,234,156,34,1,38,
250,137,40,134,7,9,223,214,118,206,71,158,179,136,252,8,209,107,246,220,173,121,212,99,38,226,185,244,33,122,72,116,76,90,209,34,30,248,195,230,154,0,219,147,47,18,96,98,208,136,78,6,33,192,199,137,187,65,142,214,57,85,2,76,244,19,81,12,15,18,190,173,
237,156,143,187,63,251,105,161,159,153,100,167,167,62,169,216,124,179,71,111,232,132,205,52,143,125,204,166,197,83,159,188,109,88,23,209,191,236,186,243,83,154,98,117,38,226,153,248,152,187,209,70,197,188,185,115,69,23,217,116,222,188,98,171,45,182,8,
143,73,43,90,196,131,4,152,24,108,162,147,65,8,240,113,34,1,38,250,157,40,134,7,9,223,214,118,206,199,200,199,76,243,152,71,63,170,214,241,221,248,175,255,58,236,156,117,146,77,54,222,120,125,39,123,227,141,194,186,136,254,198,199,234,76,196,243,95,61,
236,97,197,102,143,126,116,241,248,205,55,23,93,228,9,143,123,92,177,253,182,249,63,138,248,99,45,1,38,102,5,209,137,32,4,248,56,145,0,19,253,78,20,195,131,132,111,107,191,10,176,178,30,197,163,54,217,164,216,124,179,205,194,206,89,39,97,27,176,96,254,
252,176,46,162,191,241,177,42,1,54,56,84,86,128,141,46,217,187,56,249,248,35,199,113,244,97,7,133,229,197,120,70,246,95,84,156,112,204,161,227,246,225,234,99,15,11,203,207,118,162,19,65,8,240,113,34,1,38,250,157,40,134,7,9,223,214,126,21,96,15,47,5,88,
183,59,189,219,61,241,137,97,93,68,127,227,99,85,2,108,112,168,172,0,59,246,240,21,197,31,255,248,199,226,161,135,30,106,226,11,159,255,108,88,94,140,231,249,7,13,21,63,185,231,238,113,251,240,222,123,239,9,203,207,118,162,19,65,8,240,113,34,1,38,250,
157,40,134,7,9,223,214,126,21,96,221,238,244,78,181,179,39,122,143,143,85,9,176,193,161,186,2,236,136,131,139,40,253,215,151,190,16,150,23,227,57,116,197,112,113,255,125,63,175,239,185,70,250,197,253,247,135,229,103,59,209,137,32,4,248,56,145,0,19,253,
78,20,195,131,132,111,171,4,216,122,36,192,170,139,143,85,9,176,193,65,2,108,22,35,1,150,71,116,34,8,1,62,78,36,192,68,191,19,197,240,32,225,219,42,1,182,30,9,176,234,226,99,85,2,108,112,144,0,155,197,72,128,229,17,157,8,66,128,143,19,9,48,209,239,68,
49,60,72,248,182,74,128,173,71,2,172,186,248,88,149,0,27,28,36,192,102,49,18,96,121,68,39,130,16,224,227,68,2,76,244,59,81,12,15,18,190,173,18,96,235,145,0,171,46,62,86,37,192,6,7,9,176,89,140,4,88,30,209,137,32,4,248,56,145,0,19,253,78,20,195,131,132,
111,171,4,216,122,36,192,170,139,143,85,9,176,193,65,2,108,22,35,1,150,71,116,34,8,1,62,78,36,192,68,191,19,197,240,32,225,219,42,1,182,30,9,176,234,226,99,85,2,108,112,232,75,1,198,235,209,17,88,39,30,119,88,113,202,234,163,107,255,75,117,204,97,43,
138,149,203,15,216,80,70,2,108,98,14,57,112,73,211,62,228,147,87,247,31,50,182,100,67,25,9,176,60,162,19,65,8,240,113,210,206,13,178,204,19,162,107,248,216,131,40,134,7,9,223,86,9,176,245,72,128,85,23,31,171,18,96,131,67,95,9,176,191,127,201,41,197,87,
111,254,74,241,179,159,222,91,252,225,15,127,168,203,129,245,137,255,167,186,251,238,31,21,215,127,250,218,154,184,56,242,249,203,235,107,154,211,108,23,96,47,57,253,196,226,166,175,124,169,246,95,94,235,214,173,171,239,149,245,105,221,186,135,106,255,
251,197,127,165,29,177,106,121,113,240,242,253,37,192,50,136,78,4,33,192,199,73,187,2,108,238,70,27,21,243,230,206,21,98,198,216,116,222,188,98,171,45,182,104,138,61,136,98,120,144,240,109,149,0,91,143,4,88,117,241,177,42,1,54,56,244,133,0,35,120,16,
86,57,233,162,215,159,95,95,106,78,145,0,59,243,197,47,44,46,188,224,188,226,117,255,244,234,182,57,251,165,167,22,67,75,246,46,134,150,182,32,217,70,202,82,62,35,187,37,207,45,134,15,88,84,156,189,230,180,226,245,255,252,15,225,182,91,241,146,211,86,
135,219,130,145,253,23,21,239,127,239,123,234,123,161,189,244,150,55,189,174,248,233,189,63,169,127,107,36,9,176,152,232,68,16,2,124,156,180,115,131,212,13,79,116,3,187,193,251,216,131,40,134,7,9,223,86,9,176,245,72,128,85,23,31,171,18,96,131,67,95,8,
176,219,111,251,118,189,235,223,126,250,211,159,254,88,95,106,78,169,0,187,250,189,87,212,215,228,167,247,125,246,186,98,255,139,254,185,88,126,241,235,155,121,219,69,197,200,241,135,55,109,39,101,228,197,39,21,203,255,229,13,227,108,151,173,125,93,241,
241,235,175,171,111,33,63,93,245,158,203,199,109,107,249,210,231,22,95,187,249,166,122,137,188,20,237,71,9,176,152,232,68,16,2,124,156,72,128,137,126,65,2,76,2,204,144,0,171,46,62,86,37,192,6,135,158,11,48,166,28,118,50,121,1,118,201,218,55,212,115,167,
158,206,187,254,19,197,216,123,46,45,14,188,242,237,77,140,93,182,182,24,26,217,183,169,45,27,56,100,217,184,242,176,236,138,183,21,255,250,229,255,172,123,158,122,90,251,198,215,54,109,239,131,239,191,170,190,166,51,73,2,44,38,58,17,132,0,31,39,18,96,
162,95,144,0,147,0,51,36,192,170,139,143,85,9,176,193,161,167,2,236,156,191,63,163,222,229,111,157,126,112,215,157,197,157,223,255,94,241,219,223,254,166,158,51,113,50,1,182,230,69,39,213,115,226,244,187,223,253,182,54,242,118,199,109,183,22,191,255,
253,239,235,185,227,211,47,126,255,187,226,240,171,223,29,10,170,209,87,157,53,174,77,67,139,159,83,140,174,189,96,92,217,177,146,243,63,253,241,186,215,56,61,248,224,175,138,219,110,253,86,113,199,237,183,142,123,6,206,167,95,255,250,193,226,224,209,
197,181,237,49,189,114,178,244,195,31,220,85,124,255,123,223,45,30,252,213,175,234,57,19,39,9,176,152,232,68,16,2,124,156,72,128,137,126,65,2,76,2,204,144,0,171,46,62,86,37,192,6,135,158,10,176,232,5,16,164,63,253,233,79,197,135,63,240,190,113,229,79,
62,254,200,82,144,125,191,94,42,78,38,192,254,231,235,55,215,115,154,19,66,238,53,231,190,108,156,239,55,191,241,130,113,47,173,176,244,201,91,111,41,134,222,249,214,113,162,10,134,143,59,180,201,207,200,233,39,132,229,86,190,231,178,226,123,247,222,
83,247,216,156,16,94,231,156,117,70,147,31,120,231,101,151,180,156,106,249,31,31,251,247,90,153,159,255,236,103,245,156,241,233,134,235,175,43,70,246,223,171,201,231,241,71,175,170,137,206,137,146,4,88,76,116,34,8,1,62,78,36,192,68,191,32,1,38,1,102,
72,128,85,23,31,171,18,96,131,67,207,4,216,63,188,242,239,235,221,253,241,9,49,20,217,24,19,189,176,227,139,95,248,124,113,202,234,163,234,223,154,19,111,1,60,225,152,102,193,228,121,249,153,47,170,151,28,159,14,123,237,63,212,70,177,82,97,53,118,217,
91,54,76,69,28,62,116,108,220,122,88,254,158,75,139,179,223,18,79,135,68,124,29,245,252,177,113,117,49,16,139,173,210,43,206,126,73,241,199,63,198,2,237,210,75,222,28,250,51,62,117,237,127,212,75,142,79,18,96,49,209,137,32,4,248,56,145,0,19,253,130,4,
88,255,10,176,71,60,252,225,197,99,31,243,152,240,184,205,4,18,96,213,197,199,170,4,216,224,208,51,1,214,234,165,17,159,251,236,167,195,242,30,94,58,209,106,228,135,81,159,86,190,207,60,227,228,208,159,231,99,31,249,80,189,116,115,122,231,21,151,23,203,
222,250,250,80,96,141,190,250,172,218,212,195,229,111,126,109,184,126,223,53,47,44,190,245,205,111,212,61,53,167,23,158,112,100,88,15,207,231,111,248,76,189,116,115,226,181,252,81,98,10,227,178,3,22,133,190,60,173,166,94,74,128,197,68,39,130,16,224,227,
68,2,76,244,11,18,96,253,43,192,30,181,201,38,197,230,155,109,22,30,183,153,128,88,216,97,251,237,195,186,136,254,198,199,170,4,216,224,208,19,1,182,98,217,226,226,158,187,127,92,239,238,55,18,211,237,94,122,250,73,161,77,202,167,174,189,166,110,213,
156,90,137,47,158,129,26,46,69,82,228,203,195,51,85,127,254,243,159,235,86,141,116,243,77,255,85,44,105,49,194,5,163,231,189,44,204,103,132,108,197,202,145,186,151,230,244,173,91,254,39,172,67,202,107,207,127,117,241,151,191,252,165,110,53,121,186,232,
245,255,20,250,73,97,138,99,148,36,192,98,162,19,65,8,240,113,34,1,38,250,5,9,176,254,21,96,79,222,126,187,98,155,173,182,42,182,92,176,160,43,60,113,155,109,138,61,119,95,24,214,69,244,55,62,86,37,192,6,135,158,8,176,163,15,59,168,246,34,137,52,253,
242,151,15,20,135,174,24,14,109,82,120,19,96,148,30,120,224,23,245,165,230,244,217,207,124,170,246,95,89,147,113,202,234,163,195,145,33,94,4,194,118,71,206,88,29,10,173,86,12,173,26,45,94,245,242,151,214,189,52,167,127,187,250,202,114,155,123,141,171,
67,202,203,214,156,222,242,89,176,40,97,147,238,175,136,19,143,59,172,110,209,156,36,192,98,162,19,65,8,240,113,34,1,38,250,5,9,176,254,21,96,59,61,117,135,154,32,26,94,186,180,24,29,25,153,113,150,13,15,21,187,236,252,244,176,46,162,191,241,177,42,1,
54,56,244,68,128,157,244,130,195,107,47,218,72,211,189,247,222,19,150,143,104,245,246,191,104,244,170,19,233,199,63,250,191,226,160,145,253,138,165,165,184,89,190,54,158,106,152,50,114,230,105,181,186,190,251,242,183,213,189,204,124,186,255,254,251,198,
237,171,86,240,236,25,111,131,76,147,4,88,76,116,34,8,1,62,78,36,192,68,191,32,1,214,191,2,76,136,118,241,177,42,1,54,56,244,68,128,157,118,242,177,245,174,126,115,250,246,183,110,9,203,71,240,54,191,110,38,166,76,218,171,223,135,198,246,15,5,151,103,
236,237,111,42,134,234,207,97,125,252,99,31,169,123,153,249,196,20,76,191,159,38,226,208,131,71,106,98,43,77,18,96,49,209,137,32,4,248,56,145,0,19,253,130,4,152,4,152,168,62,62,86,37,192,6,135,158,8,176,86,163,87,188,193,48,42,31,113,196,170,229,117,
171,238,164,154,0,91,190,255,134,237,143,156,116,116,40,188,140,225,21,75,55,148,229,197,32,221,74,76,181,180,237,78,198,170,131,150,22,63,251,217,79,235,150,141,36,1,22,19,157,8,66,128,143,147,78,8,176,131,198,22,79,139,200,103,74,100,151,67,228,51,
37,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,37,192,36,192,68,245,241,177,42,1,54,56,244,68,128,157,189,230,180,122,87,191,57,241,182,191,168,124,4,163,55,221,76,227,4,216,201,199,134,194,203,24,62,184,241,44,91,
171,183,24,206,68,186,238,147,255,177,97,187,147,113,200,129,75,138,159,222,251,147,186,101,35,73,128,197,68,39,130,16,224,227,68,2,172,65,100,151,67,228,51,37,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,74,128,73,128,137,234,227,99,85,
2,108,112,232,137,0,123,201,233,39,214,187,250,205,201,254,68,185,29,14,95,185,172,110,213,94,122,224,23,247,23,63,252,193,93,83,134,169,125,60,3,198,182,135,87,14,135,162,203,51,246,246,55,23,67,75,247,174,149,191,254,211,159,172,215,162,57,241,42,253,
104,91,147,241,131,187,238,44,126,114,207,221,117,47,205,169,157,215,248,27,8,176,159,253,244,222,186,101,35,73,128,197,68,39,130,16,224,227,68,2,172,65,100,151,67,228,51,37,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,74,128,245,191,0,
59,233,248,99,54,44,143,14,45,174,17,173,59,238,168,67,107,223,247,220,117,167,218,247,149,99,195,197,146,125,23,109,88,191,207,94,187,21,135,175,58,168,182,76,25,202,122,95,253,138,213,149,246,69,235,103,146,235,62,249,137,166,125,216,175,248,88,149,
0,27,28,122,34,192,120,211,96,148,190,251,191,119,132,229,35,94,112,228,33,117,171,246,18,111,28,68,64,241,10,252,169,112,96,253,207,150,135,14,216,187,88,222,226,255,192,82,150,157,243,146,154,205,71,255,253,3,245,90,52,18,175,149,191,100,237,27,194,
109,77,6,251,150,255,15,139,18,255,55,230,247,211,68,240,198,73,94,218,145,38,9,176,152,232,68,16,2,124,156,72,128,53,136,236,114,136,124,166,68,118,57,68,62,83,34,187,28,34,159,41,145,93,14,145,79,9,176,254,23,96,204,174,49,161,244,229,47,222,88,131,
101,242,190,121,203,55,106,203,231,157,123,78,241,190,171,174,44,46,187,244,146,226,190,251,126,94,19,45,231,156,189,166,38,32,204,207,21,239,122,71,113,241,218,139,54,248,249,240,7,223,95,92,243,209,143,212,62,173,76,63,66,59,127,253,224,131,197,87,
111,190,169,184,235,174,59,139,207,221,112,125,77,76,70,101,59,141,223,247,253,140,143,85,9,176,193,161,39,2,140,23,104,172,91,247,80,189,187,223,72,60,143,212,206,127,117,193,154,23,157,84,183,106,78,173,94,215,254,153,235,174,13,253,228,178,108,205,
41,161,216,106,197,208,81,43,139,183,190,249,245,245,90,52,167,171,175,122,119,184,141,118,137,18,111,53,140,202,70,28,249,252,229,197,111,127,251,155,186,101,35,73,128,197,68,39,130,16,224,227,68,2,172,65,100,151,67,228,51,37,178,203,33,242,153,18,217,
229,16,249,76,137,236,114,136,124,74,128,245,191,0,67,88,33,176,16,29,8,39,68,23,2,235,130,243,207,171,9,174,168,252,153,47,62,173,86,6,1,193,39,249,44,51,154,195,40,152,23,102,223,185,227,246,190,30,229,65,0,33,190,236,59,237,187,232,194,11,154,202,
0,251,135,178,140,252,49,98,70,155,108,244,140,188,180,60,249,86,206,231,123,251,137,4,24,249,148,243,235,109,123,105,30,62,173,124,171,237,181,218,78,59,248,88,149,0,27,28,122,34,192,152,62,72,39,63,77,252,55,24,255,17,22,217,164,188,229,77,175,171,
91,53,39,78,168,40,253,223,15,239,106,251,255,177,90,49,114,220,161,161,200,130,101,175,120,105,152,63,122,249,91,139,53,47,95,83,175,69,115,186,227,246,91,195,237,180,11,211,42,163,132,176,138,202,167,156,244,130,35,234,22,205,73,2,44,38,58,17,132,0,
31,39,18,96,13,34,187,28,34,159,41,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,83,2,172,255,5,24,98,138,145,42,68,24,130,139,145,44,242,24,9,162,227,78,25,27,237,66,168,48,2,70,89,242,77,188,81,206,70,206,16,47,244,131,40,107,216,212,196,
126,4,97,226,5,24,163,120,209,168,29,109,68,76,178,31,104,55,163,101,182,76,219,189,88,37,223,70,1,41,103,226,135,253,192,190,97,31,35,116,91,9,48,246,33,62,240,201,167,137,92,63,178,200,118,201,195,222,70,238,108,132,210,142,27,126,40,155,250,201,197,
199,234,76,196,243,38,27,111,92,44,152,63,63,252,3,111,49,115,108,189,229,150,197,83,118,220,49,60,38,19,225,143,117,182,0,27,93,178,119,113,215,157,223,171,119,247,155,211,63,190,250,101,161,77,74,171,23,91,124,225,243,159,13,255,72,153,244,234,87,156,
21,250,106,135,225,178,61,99,151,173,13,69,214,178,87,174,169,149,25,125,227,249,225,250,161,115,207,10,255,247,140,196,27,33,211,109,181,11,109,141,82,187,35,107,31,124,255,85,117,139,230,36,1,22,19,157,8,34,134,95,43,249,5,151,155,21,191,8,114,147,
242,83,100,6,13,31,39,18,96,13,34,187,28,34,159,41,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,83,2,172,255,5,24,157,114,58,240,116,212,109,180,132,101,196,1,235,185,150,218,180,67,190,35,2,76,128,33,40,76,20,32,210,200,227,147,60,150,
171,0,247,6,218,106,226,147,182,70,207,131,177,95,152,170,104,223,105,163,141,148,177,223,16,103,44,115,191,177,169,155,128,95,19,116,136,38,196,45,203,236,87,82,36,192,16,83,233,189,138,58,113,92,236,59,219,227,152,96,79,194,31,249,220,247,76,156,33,
44,59,113,207,243,177,58,19,241,188,199,194,133,197,200,208,80,248,7,222,98,230,24,27,29,45,86,174,88,17,30,147,137,240,199,58,91,128,193,53,255,239,67,181,160,77,19,47,166,136,202,123,158,127,208,80,177,110,221,186,186,69,115,66,152,189,247,202,119,
213,191,53,39,108,120,254,44,242,217,138,149,203,15,40,214,190,241,181,197,146,87,172,9,197,213,242,183,175,45,134,44,248,203,122,69,101,134,222,117,73,241,177,91,190,90,175,69,115,250,237,111,126,83,28,123,196,193,227,182,59,17,135,31,50,90,92,246,47,
107,139,11,254,241,85,117,47,205,137,231,186,54,60,179,214,130,137,222,34,41,1,22,19,157,8,147,97,55,197,65,128,155,141,221,188,38,131,27,35,55,61,251,37,144,155,37,55,166,126,254,37,118,58,248,56,145,0,107,16,217,229,16,249,76,137,236,114,136,124,166,
68,118,57,68,62,83,34,187,28,34,159,18,96,253,47,192,128,142,186,23,13,8,18,68,0,203,92,119,249,206,189,4,49,65,199,223,4,152,217,34,224,76,160,241,73,25,174,191,167,159,178,122,131,24,232,87,76,128,33,84,38,122,17,7,247,18,219,39,128,24,178,251,139,
249,96,153,253,228,219,76,25,27,97,99,191,120,193,133,77,36,192,16,113,248,103,191,218,61,143,125,207,119,124,25,220,207,176,55,241,7,28,27,19,106,145,159,169,224,99,181,10,241,44,102,22,127,172,167,36,192,142,61,124,69,189,187,63,62,221,126,219,183,
107,111,232,75,109,120,62,236,184,35,87,22,15,62,248,171,122,201,241,137,55,41,82,174,149,64,251,77,41,120,120,126,172,85,253,150,29,176,168,246,255,88,47,122,225,11,138,27,255,243,134,154,205,245,223,189,189,24,126,247,37,161,184,26,62,122,101,147,253,
200,41,199,133,229,142,120,255,21,197,159,255,242,151,154,191,52,49,149,240,212,19,143,41,210,147,200,96,196,16,209,73,189,111,250,202,151,106,54,188,176,132,151,104,252,254,119,191,171,125,79,211,109,183,126,171,241,199,209,14,246,13,130,239,238,187,
127,84,47,57,62,73,128,197,68,39,194,68,112,243,227,194,204,13,192,70,129,252,197,158,95,237,236,87,51,46,228,220,56,41,27,137,20,110,76,51,33,94,108,155,86,71,190,251,237,144,71,61,89,70,64,33,164,40,107,245,102,189,217,155,13,235,232,76,32,194,176,
165,205,54,45,131,242,86,110,186,176,29,124,91,29,44,223,126,69,246,101,129,125,72,190,213,29,204,118,162,27,127,59,248,56,145,0,107,16,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,83,34,187,28,34,159,18,96,213,232,176,114,205,178,235,44,
88,199,222,190,179,204,245,148,123,10,215,44,127,29,101,93,122,111,224,26,103,207,144,97,227,215,245,27,212,223,4,210,68,112,157,246,35,80,173,4,24,121,222,31,251,141,233,127,102,99,251,131,123,29,253,68,191,159,83,216,207,220,195,237,158,226,183,111,
164,245,247,2,204,192,15,247,64,127,220,114,240,177,42,1,38,252,177,158,146,0,131,235,63,125,109,189,203,63,62,241,66,142,207,125,246,186,226,242,75,47,46,222,254,47,111,46,254,253,131,87,151,157,186,175,23,15,61,52,254,229,29,62,217,171,236,175,124,
247,59,234,57,113,250,193,93,223,175,253,241,51,126,121,67,226,199,62,242,161,226,75,55,126,190,184,245,219,183,52,253,57,241,125,191,253,77,113,216,213,239,10,69,213,178,51,79,29,215,166,161,82,224,180,154,138,248,169,239,220,86,247,26,167,239,127,239,
127,107,162,239,195,31,120,95,109,122,224,53,31,253,112,173,61,136,169,251,203,147,215,167,59,110,91,255,252,216,127,126,238,250,122,206,248,244,203,95,62,80,91,127,249,219,47,46,222,118,241,155,138,15,253,219,123,139,175,127,245,191,107,34,116,162,36,
1,22,19,157,8,19,193,69,152,155,2,55,65,110,144,124,130,95,111,55,16,46,224,252,186,199,175,150,220,44,236,134,1,216,176,142,95,245,218,185,81,181,139,253,82,202,182,236,70,221,234,102,194,13,157,58,80,158,178,148,227,102,66,251,168,51,194,204,234,140,
13,249,216,241,171,31,229,153,58,194,103,39,69,36,251,142,58,81,95,155,138,194,182,249,206,182,168,171,221,92,169,27,211,91,200,183,95,71,185,169,82,79,190,83,255,244,166,153,131,143,19,9,176,6,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,
51,37,178,203,33,242,41,1,166,14,107,191,147,222,115,90,145,10,32,127,255,196,135,9,48,238,107,118,47,229,190,64,190,221,119,40,207,125,1,113,138,61,247,37,187,71,120,176,227,94,2,148,199,39,249,44,219,204,14,187,143,164,245,183,123,38,203,220,115,204,
15,163,96,86,38,23,31,171,138,103,225,143,245,148,5,24,83,233,120,241,198,84,19,207,85,241,58,119,159,252,127,137,221,253,227,214,163,60,237,166,115,63,253,241,98,249,123,46,29,39,166,198,46,190,176,24,90,250,220,166,246,24,195,7,46,29,87,190,198,191,
190,189,120,160,197,243,105,185,201,4,24,180,26,5,107,39,69,207,166,73,128,197,68,39,194,68,112,145,246,23,102,58,255,96,223,253,13,196,68,131,173,227,215,50,62,77,36,89,190,93,252,237,251,116,240,55,10,99,162,155,73,90,158,41,35,220,200,236,59,55,58,
27,73,194,135,175,167,221,28,59,9,254,241,107,55,71,64,72,217,175,140,212,141,58,178,158,27,109,186,223,104,139,175,63,55,72,63,58,150,131,143,19,9,176,6,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,41,1,166,14,107,
191,195,245,185,157,31,230,184,54,251,81,66,150,237,122,141,15,63,139,129,124,166,34,114,253,79,5,22,247,7,4,22,246,108,215,223,63,12,242,185,55,112,207,243,246,248,37,159,123,181,31,73,243,245,199,191,213,147,58,81,158,186,76,117,244,11,124,172,42,158,
133,63,214,83,22,96,240,207,175,121,101,189,219,159,159,24,25,251,243,159,255,92,255,182,62,121,1,118,240,242,253,107,83,245,166,154,174,250,250,77,181,231,183,34,49,53,188,106,180,169,29,41,35,39,30,53,206,6,33,119,236,7,174,44,238,153,96,10,101,187,
201,11,176,179,215,156,86,203,75,197,104,59,233,234,247,94,81,95,106,36,9,176,152,232,68,152,8,58,252,57,2,204,79,21,49,193,194,122,196,24,235,13,110,10,86,110,58,80,23,27,57,50,114,4,24,98,199,223,120,88,103,117,195,135,23,60,51,37,192,252,72,33,55,
66,166,148,248,125,101,15,64,115,35,164,190,228,89,157,253,50,80,255,169,206,211,247,113,34,1,214,32,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,37,192,212,97,21,213,199,199,106,213,226,153,251,50,247,234,201,166,249,
91,57,79,171,50,124,166,235,12,223,39,232,4,244,203,58,213,231,234,20,254,88,79,75,128,1,111,62,108,245,255,93,173,18,211,243,120,173,124,154,188,0,3,158,159,226,153,178,220,116,231,47,238,43,86,189,247,242,113,34,10,70,94,180,186,105,27,33,139,159,83,
44,127,221,121,161,253,170,119,175,127,152,115,58,41,253,195,229,243,94,117,118,125,77,251,233,235,95,251,239,218,243,110,105,146,0,139,137,78,132,137,224,130,67,39,223,190,243,75,152,127,56,152,231,164,236,34,67,57,127,193,49,193,194,133,102,58,83,23,
38,2,241,229,5,21,240,43,157,223,30,34,205,202,240,43,158,47,239,5,23,48,82,103,34,178,85,123,58,9,254,211,250,83,135,137,126,105,196,198,218,23,213,127,170,191,82,250,56,233,132,0,19,162,19,72,128,73,128,137,234,227,99,181,106,241,204,143,186,237,252,
209,54,229,210,31,80,109,29,229,249,1,149,62,19,249,244,39,236,199,213,148,78,247,53,232,35,248,31,206,251,1,127,172,167,45,192,224,140,83,142,47,190,242,229,27,235,18,160,117,250,213,47,127,89,92,178,246,13,53,155,229,75,247,169,231,54,210,215,202,131,
147,250,134,127,124,245,203,139,91,254,231,107,245,82,147,167,183,124,241,134,112,234,225,242,183,188,174,88,218,238,255,137,141,29,48,206,30,198,74,134,95,249,210,226,53,231,190,172,184,237,219,223,172,111,177,189,68,27,46,126,243,133,225,127,125,157,
120,220,97,45,95,77,239,19,207,209,241,92,24,54,188,236,36,77,76,105,76,125,139,252,139,26,226,137,139,129,77,63,0,190,35,196,152,74,104,47,166,160,44,23,149,86,130,133,178,92,180,24,157,65,52,249,81,155,233,96,98,139,121,234,222,47,23,57,27,29,99,217,
68,142,213,159,122,112,65,164,60,162,133,246,80,134,178,230,123,162,246,116,138,72,128,81,23,182,205,69,19,16,193,212,27,225,75,189,105,171,217,176,142,246,155,16,101,31,123,95,57,248,56,145,0,19,253,130,4,152,4,152,168,62,62,86,171,40,192,188,152,226,
94,204,61,215,151,1,202,69,253,4,250,81,244,51,232,71,165,235,34,82,31,220,231,125,159,137,101,63,130,198,118,129,101,250,10,244,43,248,180,245,179,66,128,25,135,173,28,169,189,64,131,23,79,240,182,195,63,252,225,15,181,23,80,32,206,120,237,186,47,203,
27,253,248,31,45,222,14,104,32,66,124,153,20,94,43,207,11,41,120,155,224,79,239,253,73,169,184,31,170,9,146,7,30,248,69,241,189,239,126,167,248,204,117,215,22,23,94,112,94,113,224,161,7,22,195,135,141,21,195,135,58,14,59,176,24,202,109,87,41,194,176,
75,253,12,31,60,180,161,12,175,132,231,101,35,136,71,94,195,191,161,78,191,184,191,54,133,242,83,215,94,83,188,246,252,115,75,193,25,63,115,150,194,212,203,119,94,118,73,109,148,12,193,202,62,196,215,87,255,251,191,138,55,188,246,53,77,101,121,235,227,
89,47,62,165,105,31,158,113,234,241,77,101,196,122,162,19,97,50,152,11,238,231,161,243,201,197,135,147,156,101,251,37,136,139,130,255,85,40,29,174,231,226,195,69,128,207,232,215,163,233,128,79,132,139,93,116,240,207,69,199,182,229,231,221,83,79,234,97,
117,96,29,237,161,188,191,168,77,214,158,78,144,214,205,96,223,82,71,234,68,155,168,23,121,28,7,68,152,175,103,171,250,231,226,227,68,2,76,244,11,18,96,18,96,162,250,248,88,173,186,0,227,62,204,143,202,190,12,80,46,18,96,244,37,114,126,192,245,101,249,
97,21,16,125,86,7,126,132,165,191,99,101,248,225,216,126,168,69,232,177,158,178,86,102,86,9,48,33,250,153,232,100,16,179,155,52,70,36,192,68,191,32,1,38,1,38,170,143,143,213,42,10,48,68,17,34,6,113,195,204,159,232,7,89,202,249,41,136,246,44,23,66,200,
11,54,126,48,181,31,88,45,207,99,2,140,31,84,253,172,28,252,177,93,126,116,181,124,182,105,143,36,224,215,68,23,98,204,242,37,192,132,232,19,162,147,65,204,110,210,24,145,0,19,253,130,4,152,4,152,168,62,62,86,171,42,192,24,249,154,104,38,76,171,17,48,
102,173,120,33,133,15,196,146,31,85,243,152,15,158,71,79,95,96,102,207,168,227,15,33,134,176,178,103,201,16,104,140,128,249,242,228,75,128,9,209,71,68,39,132,152,157,68,241,33,1,38,250,5,9,48,9,48,81,125,124,172,86,81,128,153,152,153,136,86,2,140,209,
168,244,15,179,121,164,160,149,79,243,97,83,10,211,245,192,72,23,162,138,81,46,202,145,135,16,51,49,230,145,0,19,162,15,137,78,12,49,59,136,226,193,144,0,19,253,130,4,152,4,152,168,62,62,86,7,89,128,241,182,68,196,142,97,235,120,30,29,97,69,30,163,88,
60,215,53,153,0,3,70,181,40,107,47,48,51,177,197,243,227,136,47,222,172,104,101,217,62,121,108,131,242,122,6,76,8,33,42,134,4,152,232,23,166,35,192,120,248,221,255,109,70,39,192,103,244,178,27,58,70,246,204,71,39,240,109,149,0,19,85,199,199,106,213,226,
153,243,157,243,62,90,231,161,28,35,91,30,191,30,129,100,35,87,136,162,86,62,211,105,142,246,2,179,244,5,92,216,251,81,53,224,187,141,132,153,127,174,77,105,185,94,227,143,181,4,152,16,66,212,145,0,19,253,194,116,4,216,68,211,124,166,10,130,206,222,92,
106,207,99,0,29,156,104,250,209,84,241,109,149,0,19,85,199,199,170,226,89,248,99,45,1,38,132,16,117,58,33,192,14,26,91,60,45,34,159,41,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,153,18,217,229,16,249,108,87,128,241,
43,47,130,203,255,173,67,42,192,172,12,98,9,252,223,76,96,199,58,255,171,180,253,77,132,217,145,199,122,126,133,38,143,233,62,182,77,19,96,124,146,199,122,243,195,50,96,203,58,252,2,203,148,183,114,30,223,86,117,88,69,213,241,177,170,120,22,254,88,75,
128,9,33,68,29,9,176,6,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,217,142,0,67,16,49,253,143,105,58,252,25,185,61,239,128,192,49,1,134,0,226,141,98,188,14,154,60,196,18,235,89,199,72,150,61,159,129,168,98,122,144,
217,243,182,49,202,155,79,150,17,77,148,177,231,61,152,26,68,30,223,173,44,126,108,132,140,178,228,83,71,182,207,131,245,212,147,87,90,251,237,121,124,91,213,97,21,85,199,199,170,226,89,248,99,45,1,38,122,70,20,156,66,204,52,81,44,26,18,96,13,34,187,
28,34,159,41,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,119,10,34,35,75,246,230,48,47,192,236,191,119,172,28,98,204,4,24,15,178,219,200,25,66,202,94,25,205,122,68,149,31,41,51,1,198,178,159,114,72,30,201,214,33,202,236,191,127,16,88,
254,109,102,108,155,245,44,35,210,162,63,117,245,109,85,135,85,84,29,31,171,138,103,225,143,181,4,152,232,58,81,80,10,209,109,162,216,148,0,107,16,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,83,34,187,28,34,159,237,8,48,70,183,120,83,24,
35,76,136,39,19,70,94,128,49,226,100,162,7,40,107,2,12,65,100,249,128,189,77,17,76,95,172,49,145,0,243,126,176,165,78,44,35,192,252,203,64,176,51,31,190,156,199,183,85,29,86,81,117,124,172,42,158,133,63,214,18,96,162,171,68,1,41,68,175,72,227,83,2,172,
65,100,151,67,228,51,37,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,182,35,192,152,202,199,8,23,203,188,65,44,18,96,140,126,89,25,176,231,183,88,246,130,8,225,197,58,150,35,113,148,10,48,123,43,25,121,94,144,165,2,204,143,190,73,128,137,
217,134,143,85,197,179,240,199,90,2,76,116,149,40,32,133,232,21,105,124,74,128,53,136,236,114,136,124,166,68,118,57,68,62,83,34,187,28,34,159,41,145,93,14,145,207,118,4,24,194,138,17,46,94,215,140,152,241,2,202,4,24,83,12,17,62,136,33,166,252,177,108,
2,12,123,202,241,138,104,62,237,207,76,39,19,96,172,67,88,249,151,112,88,57,9,48,33,26,248,88,85,60,11,127,172,37,192,68,215,136,130,81,136,94,227,99,84,2,172,65,100,151,67,228,51,37,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,182,251,
12,24,211,11,17,82,246,182,65,242,24,205,242,111,53,100,25,33,196,40,25,83,11,253,255,237,176,204,58,255,106,121,236,237,217,48,195,222,130,104,235,17,109,216,144,231,253,121,91,234,100,130,11,40,231,125,164,219,0,223,86,117,88,69,213,241,177,170,120,
22,254,88,75,128,137,174,17,5,163,16,189,198,199,168,4,88,131,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,153,18,217,229,16,249,204,125,9,71,43,16,65,38,116,210,209,170,126,196,183,85,29,86,81,117,124,172,42,158,133,63,214,18,96,162,107,
68,193,40,68,175,241,49,42,1,214,32,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,59,37,192,24,185,226,109,135,76,33,100,244,203,143,116,245,35,190,173,234,176,138,170,227,99,85,241,44,252,177,150,0,19,93,35,10,70,33,
122,141,143,81,9,176,6,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,217,41,1,86,53,124,91,213,97,21,85,199,199,170,226,89,248,99,45,1,38,186,70,20,140,66,244,26,31,163,18,96,13,34,187,28,34,159,41,145,93,14,145,207,
148,200,46,135,200,103,74,100,151,67,228,83,2,76,29,86,81,125,124,172,42,158,133,63,214,18,96,162,107,68,193,40,68,175,241,49,42,1,214,32,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,37,192,212,97,21,213,199,199,170,
226,89,248,99,45,1,38,186,70,20,140,66,244,26,31,163,157,16,96,66,116,2,9,48,117,88,69,245,241,177,170,120,22,254,88,75,128,137,174,17,5,163,16,189,198,199,168,4,152,232,23,36,192,212,97,21,213,199,199,170,226,89,248,99,45,1,38,186,70,20,140,66,244,26,
31,163,18,96,162,95,144,0,83,135,85,84,31,31,171,138,103,225,143,181,4,152,232,26,81,48,10,209,107,124,140,74,128,137,126,65,2,76,29,86,81,125,124,172,42,158,133,63,214,18,96,162,107,68,193,40,68,175,241,49,42,1,38,250,5,9,48,117,88,69,245,241,177,170,
120,22,254,88,75,128,137,174,17,5,163,16,189,198,199,168,4,152,232,23,36,192,212,97,21,213,199,199,170,226,89,248,99,45,1,38,186,70,20,140,66,244,26,31,163,18,96,162,95,144,0,83,135,85,84,31,31,171,138,103,225,143,181,4,152,232,26,81,48,10,209,107,124,
140,74,128,137,126,65,2,76,29,86,81,125,124,172,42,158,133,63,214,18,96,162,107,68,193,40,68,175,241,49,42,1,38,250,5,9,48,117,88,69,245,241,177,170,120,22,254,88,75,128,137,174,17,5,163,16,189,198,199,104,39,4,216,65,99,139,167,69,228,51,37,178,203,
33,242,153,18,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,83,34,187,28,34,159,18,96,234,176,138,234,227,99,85,241,44,252,177,150,0,19,93,35,10,70,33,122,141,143,81,9,176,6,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,37,
178,203,33,242,41,1,166,14,171,168,62,62,86,21,207,194,31,107,9,48,209,53,162,96,20,162,215,248,24,149,0,107,16,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,83,34,187,28,34,159,18,96,234,176,138,234,227,99,85,241,44,252,177,150,0,19,93,35,
10,70,33,122,141,143,81,9,176,6,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,41,1,166,14,171,168,62,62,86,21,207,194,31,107,9,48,209,53,162,96,20,162,215,248,24,149,0,107,16,217,229,16,249,76,137,236,114,136,124,166,
68,118,57,68,62,83,34,187,28,34,159,18,96,213,235,176,158,119,238,57,197,233,167,172,14,215,137,217,137,143,85,9,48,225,143,181,4,152,232,26,81,48,10,209,107,124,140,74,128,53,136,236,114,136,124,166,68,118,57,68,62,83,34,187,28,34,159,41,145,93,14,145,
79,9,176,234,117,88,47,187,244,146,154,8,139,214,229,208,142,144,235,165,216,219,115,215,157,138,147,142,63,166,56,238,168,67,199,173,91,57,54,92,28,190,234,160,113,249,163,67,139,155,202,179,140,15,242,125,185,78,178,207,94,187,213,234,147,230,177,93,
218,224,243,173,77,172,231,59,245,106,213,198,28,124,172,74,128,9,127,172,37,192,68,215,136,130,81,136,94,227,99,84,2,172,65,100,151,67,228,51,37,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,74,128,117,166,195,186,100,223,69,181,142,180,
117,196,233,104,35,16,172,131,221,170,131,142,93,148,159,10,6,203,199,103,167,4,88,59,126,58,181,173,169,192,62,248,245,131,15,22,95,189,249,166,226,174,187,238,44,62,119,195,245,27,132,203,53,31,253,72,177,110,221,186,113,251,143,178,247,220,253,227,
13,223,89,254,230,45,223,216,224,227,195,31,124,255,6,31,157,130,125,132,111,159,199,177,34,93,116,225,5,77,249,236,75,18,235,249,142,45,117,164,126,240,157,59,110,159,146,24,243,177,42,1,38,252,177,150,0,19,93,35,10,70,33,122,141,143,81,9,176,6,145,
93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,41,1,54,253,14,235,153,47,62,173,248,242,23,111,172,117,166,175,251,228,39,106,162,0,241,64,199,26,209,112,197,187,222,81,91,182,78,55,235,233,104,147,143,221,5,231,159,87,203,
71,180,33,22,222,119,213,149,27,236,44,31,123,68,7,254,233,236,79,85,20,153,80,140,132,156,137,69,63,106,147,150,193,206,151,193,198,139,69,196,77,52,50,53,21,240,139,40,177,239,236,23,19,52,236,11,214,121,129,99,229,217,87,150,199,178,175,31,2,140,125,
107,223,59,1,199,131,250,216,241,5,150,77,80,249,178,228,129,149,101,255,130,173,71,124,221,119,223,207,199,9,203,201,240,177,42,1,38,252,177,150,0,19,93,35,10,70,33,122,141,143,81,9,176,6,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,
37,178,203,33,242,41,1,54,253,14,43,194,0,188,112,161,211,207,8,141,229,33,210,232,252,179,140,160,49,225,128,96,177,209,19,202,164,162,139,79,58,235,94,52,208,129,159,138,0,51,159,145,144,67,52,33,22,16,3,169,64,176,50,212,143,118,146,135,31,19,115,
136,72,219,198,197,107,47,218,208,134,233,146,10,48,124,219,62,164,13,212,203,11,28,182,75,222,68,2,140,101,82,167,70,193,152,158,201,190,100,63,240,105,249,124,55,145,104,130,148,81,80,246,149,149,39,47,21,96,64,59,76,148,183,139,143,85,9,48,225,143,
117,91,2,172,204,19,162,109,124,236,120,162,96,20,162,215,248,24,149,0,107,16,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,83,34,187,28,34,159,18,96,211,239,176,210,153,167,211,140,160,177,206,52,29,125,19,86,246,221,196,2,29,112,150,233,
156,27,228,35,110,176,241,249,136,28,132,135,239,164,155,208,176,239,237,130,88,64,20,216,119,252,155,31,132,141,137,2,70,97,172,28,219,141,182,69,93,207,57,123,77,109,153,58,155,200,161,93,233,116,203,169,130,79,4,20,117,160,205,140,12,217,244,60,234,
71,125,105,131,9,28,234,193,182,39,18,96,64,29,167,251,204,149,129,48,182,103,228,216,190,141,92,153,0,99,223,177,175,200,163,13,236,51,234,60,145,0,139,242,38,195,199,170,4,152,240,199,186,109,1,54,119,163,141,138,121,115,231,10,209,146,77,231,205,43,
182,218,98,139,166,216,241,68,193,40,68,175,241,49,42,1,214,32,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,37,192,58,215,97,69,136,49,194,193,72,17,157,126,146,31,1,51,81,195,232,23,162,202,219,130,31,225,241,96,235,
71,87,232,244,79,69,128,209,169,247,83,246,188,144,67,168,152,232,3,219,30,54,86,198,70,123,88,79,121,203,199,39,190,16,63,76,161,36,175,19,152,0,99,191,164,130,201,4,152,9,28,246,17,251,206,108,172,92,36,192,166,50,197,47,2,31,140,114,218,62,195,175,
237,95,19,96,54,234,104,35,157,124,167,236,68,2,140,245,26,1,19,211,193,31,235,182,4,216,100,29,14,33,160,85,135,193,136,130,81,136,94,227,99,84,2,172,65,100,151,67,228,51,37,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,74,128,77,191,195,
138,8,160,195,204,232,6,163,43,116,204,233,244,243,2,9,196,18,157,114,58,225,54,98,196,122,58,227,116,188,17,53,214,217,182,124,4,5,249,38,210,232,180,91,121,132,14,190,76,252,228,96,83,8,237,187,23,114,38,104,108,157,97,2,204,234,96,130,210,70,119,88,
70,92,208,110,234,150,43,28,38,130,125,136,24,137,214,89,125,77,224,32,124,17,105,147,9,48,234,220,41,145,104,194,211,190,35,64,217,15,44,155,0,99,153,79,48,113,61,145,0,163,174,136,186,220,81,68,31,171,221,16,96,236,119,98,169,213,241,233,20,236,15,
68,63,177,199,190,141,126,184,232,36,196,16,177,68,187,136,147,153,222,158,135,56,240,177,59,29,252,177,150,0,19,29,67,2,76,84,17,31,163,157,16,96,66,116,2,9,176,233,119,88,233,44,211,177,71,124,88,199,217,196,3,211,227,232,88,165,226,6,177,69,231,14,
252,75,43,200,167,99,143,141,31,245,161,195,203,54,16,81,148,1,91,215,46,8,37,58,120,108,147,206,51,35,54,38,162,216,22,235,76,72,90,62,245,176,101,91,143,61,29,98,203,7,196,5,235,77,160,117,2,219,135,209,58,19,96,182,76,125,88,198,198,119,98,89,166,
173,192,50,157,106,202,216,250,233,192,54,83,161,132,127,246,165,23,96,44,147,236,120,166,2,140,239,246,137,104,55,161,158,131,143,213,110,8,48,218,217,13,1,70,204,218,190,50,177,61,149,216,111,23,124,251,248,64,244,249,243,115,166,32,54,16,154,62,118,
167,131,63,214,18,96,162,99,72,128,137,42,226,99,84,2,76,244,11,18,96,51,211,97,157,72,60,244,18,19,114,140,176,165,66,14,49,129,16,64,0,122,33,105,101,88,102,29,34,144,142,177,183,197,167,9,142,78,65,93,91,117,126,169,31,117,96,153,122,88,125,177,241,
194,213,196,144,97,249,211,37,221,142,193,62,2,234,230,197,153,223,54,109,178,186,83,214,215,207,242,115,241,177,218,13,1,198,62,167,238,221,142,113,19,184,209,186,78,195,49,230,71,10,127,28,103,2,182,99,63,12,72,128,137,190,70,2,76,84,17,31,163,18,96,
162,95,144,0,155,153,14,43,29,84,70,8,162,117,131,6,29,200,110,141,20,136,24,31,171,221,16,96,208,109,1,70,124,17,103,196,91,180,190,83,176,29,70,116,217,214,84,70,35,115,97,91,108,71,2,76,244,61,18,96,162,138,248,24,149,0,19,253,130,4,88,247,58,172,
131,8,35,95,116,194,253,116,68,209,125,124,172,14,162,0,99,91,221,18,249,252,120,194,8,49,163,193,108,147,109,71,229,58,1,163,201,54,114,44,1,38,250,158,78,9,48,78,228,78,63,96,201,28,94,63,45,163,211,240,203,79,171,11,80,250,44,129,199,222,104,69,221,
108,121,42,224,127,170,83,36,102,59,62,70,37,192,68,191,32,1,38,1,38,170,143,143,213,65,19,96,221,20,95,41,140,78,117,186,159,232,177,151,139,176,31,153,134,104,111,213,140,202,230,224,143,181,4,152,232,24,157,18,96,204,183,238,244,156,117,126,189,152,
201,95,75,152,139,220,170,206,228,251,121,230,30,251,85,101,170,191,176,112,1,178,139,4,159,252,50,20,149,19,173,241,49,42,1,38,250,5,9,48,9,48,81,125,124,172,14,146,0,235,182,248,242,207,123,241,99,115,55,183,61,213,254,89,132,63,214,18,96,162,99,204,
148,0,99,116,200,63,4,203,103,122,226,121,129,195,186,244,97,208,169,10,48,182,133,29,39,63,219,160,46,228,177,156,94,16,124,157,176,177,50,169,0,163,28,223,177,105,37,192,24,81,163,204,68,117,230,173,87,92,132,58,61,239,186,221,54,27,228,91,123,44,143,
114,214,134,232,193,92,123,0,123,162,246,117,11,31,163,18,96,162,95,144,0,147,0,19,213,199,199,234,32,9,48,250,53,105,106,245,35,116,39,224,199,102,222,68,105,63,56,207,228,232,87,74,218,63,155,14,254,88,75,128,137,142,49,19,2,140,206,63,39,28,255,233,
193,127,64,240,64,36,29,123,222,128,99,29,126,58,243,12,17,179,204,73,73,57,202,99,103,101,166,42,192,168,11,126,168,15,15,110,51,44,141,127,150,217,166,253,183,10,229,236,130,71,157,169,31,67,228,252,159,11,219,102,61,235,152,143,207,119,234,103,163,
86,228,251,19,156,246,145,207,54,152,150,216,234,129,113,124,219,246,59,73,187,109,6,218,64,29,105,43,229,104,59,249,216,82,63,242,89,246,55,3,70,233,240,195,62,240,251,166,87,248,24,149,0,19,253,130,4,152,4,152,168,62,62,86,21,207,194,31,107,9,48,209,
49,102,66,128,33,168,236,33,98,58,247,214,145,167,99,111,249,8,3,68,1,194,133,14,189,141,8,209,193,183,50,228,79,85,128,153,48,2,132,3,175,251,101,153,145,44,132,137,149,179,186,177,77,47,154,188,200,160,188,141,148,121,223,94,128,145,159,218,91,155,
60,136,188,169,180,105,50,218,109,51,163,92,169,176,50,113,102,226,205,214,33,206,188,24,182,246,240,64,45,254,173,92,47,240,49,42,1,38,250,5,9,48,117,88,69,245,241,177,170,120,22,254,88,75,128,137,142,49,19,2,140,14,62,163,49,124,26,228,51,234,101,203,
116,232,233,220,35,8,24,162,246,101,109,152,154,50,83,21,96,254,229,24,248,36,143,101,252,89,29,200,179,101,196,33,111,208,49,27,236,205,134,250,89,62,152,208,241,2,12,33,131,96,177,54,128,159,222,104,176,95,162,252,233,210,110,155,17,101,94,100,209,
102,70,189,88,230,248,249,125,128,13,182,254,184,1,199,205,218,221,43,124,140,118,66,128,29,52,182,120,90,68,62,83,34,187,28,34,159,41,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,41,1,166,14,171,168,62,62,86,21,207,
194,31,107,9,48,209,49,102,66,128,249,81,149,20,68,10,157,124,47,22,232,204,71,163,69,211,17,96,86,23,104,37,70,200,243,194,196,191,12,3,161,100,54,148,177,231,168,188,232,242,203,140,10,249,109,182,2,241,227,5,80,167,200,105,179,9,46,64,236,154,224,
197,222,108,0,27,108,17,92,94,132,82,134,227,104,223,123,129,143,81,9,176,6,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,41,1,166,14,171,168,62,62,86,21,207,194,31,235,182,4,216,38,27,111,92,44,152,63,191,216,114,193,
2,33,90,178,245,150,91,22,79,217,113,199,166,216,241,68,193,24,225,5,0,157,118,58,232,116,236,17,91,54,21,14,200,163,51,143,96,177,60,123,182,138,103,197,16,110,38,2,186,41,192,124,157,25,13,99,170,160,217,80,127,202,81,55,132,163,137,15,108,76,128,33,
32,201,199,22,187,86,34,139,41,153,148,3,4,31,116,98,68,172,221,54,83,79,150,169,39,109,165,30,182,143,91,9,48,91,135,112,99,95,32,78,187,241,135,138,19,225,99,84,2,172,65,100,151,67,228,51,37,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,
74,128,169,195,42,170,143,143,85,197,179,240,199,186,45,1,182,199,194,133,197,200,208,80,49,58,50,34,68,75,198,70,71,139,149,43,86,52,197,142,39,10,198,8,155,78,104,223,233,184,211,193,7,47,48,40,231,59,249,134,253,81,31,207,98,217,75,33,152,250,22,141,
140,77,70,90,23,182,79,30,203,248,179,250,144,151,214,13,145,197,118,169,191,217,0,254,16,31,228,155,13,190,40,155,218,211,142,168,141,6,118,8,83,202,225,211,218,59,29,216,118,59,109,182,178,8,40,142,141,9,44,192,222,183,25,27,191,255,237,24,249,237,
244,10,31,163,18,96,13,34,187,28,34,159,41,145,93,14,145,207,148,200,46,135,200,103,74,100,151,67,228,83,2,76,29,86,81,125,124,172,42,158,133,63,214,109,9,48,33,58,69,20,144,66,244,138,52,62,37,192,26,68,118,57,68,62,83,34,187,28,34,159,41,145,93,14,
145,207,148,200,46,135,200,167,4,152,58,172,162,250,248,88,85,60,11,127,172,37,192,68,87,137,2,82,136,94,145,198,167,4,88,131,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,153,18,217,229,16,249,148,0,83,135,85,84,31,31,171,138,103,225,143,
181,4,152,232,58,81,80,10,209,109,162,216,148,0,107,16,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,83,34,187,28,34,159,18,96,234,176,138,234,227,99,85,241,44,252,177,150,0,19,61,35,10,78,33,102,154,40,22,13,9,176,6,145,93,14,145,207,148,
200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,41,1,166,14,171,168,62,62,86,21,207,194,31,107,9,48,33,132,168,35,1,214,32,178,203,33,242,153,18,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,37,192,212,97,21,213,199,199,170,226,
89,248,99,45,1,38,132,16,117,36,192,26,68,118,57,68,62,83,34,187,28,34,159,41,145,93,14,145,207,148,200,46,135,200,167,4,152,58,172,162,250,248,88,85,60,11,127,172,37,192,132,16,162,142,4,88,131,200,46,135,200,103,74,100,151,67,228,51,37,178,203,33,242,
153,18,217,229,16,249,148,0,83,135,85,84,31,31,171,138,103,225,143,181,4,152,16,66,212,145,0,107,16,217,229,16,249,76,137,236,114,136,124,166,68,118,57,68,62,83,34,187,28,34,159,18,96,234,176,138,234,227,99,85,241,44,252,177,150,0,19,66,136,58,157,16,
96,66,116,2,9,48,117,88,69,245,241,177,170,120,22,254,88,75,128,9,33,68,29,9,48,209,47,72,128,169,195,42,170,143,143,85,197,179,240,199,90,2,76,116,141,50,182,196,0,17,29,227,170,35,1,38,250,5,9,48,117,88,69,245,241,177,170,120,22,254,88,75,128,137,174,
81,198,86,49,119,163,141,138,121,115,231,138,10,179,233,188,121,197,86,91,108,17,30,227,170,35,1,38,250,5,9,48,117,88,69,245,241,177,170,120,22,254,88,75,128,137,174,161,142,235,96,208,170,99,56,8,72,128,137,126,33,87,128,173,28,27,46,62,252,193,247,
23,23,93,120,65,184,62,135,139,215,94,84,28,190,234,160,218,242,251,174,186,114,195,242,116,192,207,146,125,23,133,235,60,190,173,234,176,138,170,227,99,85,241,44,252,177,150,0,19,93,67,29,215,193,64,2,76,113,44,102,158,92,1,246,213,155,111,42,206,57,
123,77,71,196,210,53,31,253,72,113,210,241,199,212,150,241,107,203,211,1,63,163,67,139,195,117,30,223,86,117,88,69,213,241,177,170,120,22,254,88,75,128,137,174,161,142,235,96,32,1,166,56,22,51,79,142,0,67,216,220,119,223,207,107,66,105,159,189,118,171,
229,49,218,228,191,27,150,159,142,70,89,62,35,105,169,0,59,253,148,213,181,239,150,103,236,185,235,78,181,188,227,142,58,180,41,31,200,51,127,124,247,2,140,79,203,79,241,109,85,135,85,84,29,31,171,138,103,225,143,181,4,152,232,26,234,184,14,6,18,96,138,
99,49,243,228,8,176,203,46,189,164,248,245,131,15,214,62,17,55,140,130,125,231,142,219,107,223,17,62,103,190,248,180,90,57,68,22,249,87,188,235,29,197,151,191,120,99,113,193,249,231,213,242,17,105,8,56,166,48,146,79,25,47,192,190,121,203,55,106,83,8,
89,135,56,179,237,146,199,54,248,164,156,229,227,223,182,111,83,34,77,128,89,221,76,140,165,248,182,170,195,42,170,142,143,85,197,179,240,199,90,2,76,116,13,117,92,7,3,9,48,197,177,152,121,114,4,24,220,115,247,143,55,44,35,124,76,116,49,210,132,112,98,
25,161,228,69,215,93,119,221,89,91,102,234,34,235,88,6,124,121,1,230,159,43,195,134,145,47,251,110,32,224,240,201,58,95,23,3,63,140,164,77,36,190,192,183,85,29,86,81,117,124,172,42,158,133,63,214,18,96,162,107,168,227,58,24,72,128,41,142,197,204,51,29,
1,198,136,21,32,122,224,186,79,126,162,150,255,185,27,174,175,9,32,203,7,242,17,95,231,157,123,206,6,251,104,10,162,173,195,135,77,57,100,164,139,178,148,89,183,110,93,77,88,177,206,252,122,200,67,188,249,17,180,8,223,86,117,88,69,213,241,177,170,120,
22,254,88,75,128,137,174,161,142,235,96,32,1,166,56,22,51,207,116,4,88,42,168,12,222,110,8,105,62,101,17,83,246,29,241,214,106,4,12,1,199,72,23,162,12,49,70,30,163,94,76,129,68,128,177,204,104,152,149,55,240,195,244,67,108,162,186,25,190,173,234,176,
138,170,227,99,85,241,44,252,177,150,0,19,93,67,29,215,193,64,2,76,113,44,102,158,233,8,48,132,14,163,77,8,39,166,34,50,197,144,124,4,18,249,76,81,68,64,217,116,68,203,167,60,207,129,217,11,61,88,135,112,66,116,217,58,155,206,200,72,23,54,248,39,159,
237,219,212,66,70,185,24,117,195,191,137,45,252,176,222,166,62,234,37,28,98,54,224,99,85,241,44,252,177,150,0,19,93,67,29,215,193,64,2,76,113,44,102,158,92,1,150,190,137,16,177,195,104,23,194,201,139,29,203,247,255,245,5,8,35,4,19,194,203,132,18,249,
148,225,229,29,8,41,214,251,231,191,40,139,152,195,63,248,117,124,247,219,224,211,214,227,191,155,2,140,237,250,182,26,212,131,54,24,105,157,108,189,207,75,97,223,216,20,207,217,8,251,181,213,177,100,191,167,113,233,153,104,223,18,59,126,234,107,85,241,
177,42,1,38,252,177,150,0,19,93,67,29,215,193,64,2,76,113,44,102,158,92,1,54,40,248,182,118,170,195,138,144,98,4,46,205,71,60,50,114,199,58,160,211,111,229,153,134,201,72,32,159,60,223,102,163,136,41,148,245,163,143,179,5,246,7,211,78,25,205,164,253,
224,69,46,251,210,158,67,76,215,49,69,214,158,69,100,93,180,111,25,69,157,104,170,106,85,240,177,42,1,38,252,177,150,0,19,93,67,29,215,193,96,182,11,176,77,54,222,184,88,48,127,126,177,229,130,5,66,204,24,91,111,185,101,241,148,29,119,108,138,61,136,
110,234,131,132,111,107,55,4,24,164,249,60,167,102,98,12,76,100,181,26,69,99,157,125,167,140,253,199,26,35,64,140,242,80,198,214,167,163,62,148,183,209,70,15,121,148,181,109,50,146,228,71,24,241,105,80,150,245,209,136,18,163,83,222,79,39,160,125,136,
82,63,186,133,136,98,63,88,29,17,102,190,190,6,226,107,178,23,177,128,23,96,214,62,91,103,109,178,239,182,31,236,59,229,91,181,151,124,108,41,67,59,210,209,59,243,75,57,214,243,221,251,6,59,174,230,199,175,75,241,177,42,1,38,252,177,150,0,19,93,67,2,
108,48,152,237,2,108,143,133,11,139,145,161,161,98,116,100,68,136,25,99,108,116,180,88,185,98,69,83,236,65,116,83,31,36,124,91,123,33,192,232,80,147,210,142,53,130,192,191,168,196,192,183,9,48,4,3,207,200,209,65,7,70,121,16,28,76,81,228,147,50,212,195,
196,4,101,236,245,253,230,15,232,252,51,122,68,221,216,46,223,177,247,47,67,49,63,148,161,44,219,224,89,60,132,143,149,161,62,212,141,122,71,117,159,42,248,165,109,105,62,35,98,38,96,168,147,253,21,130,135,250,76,38,90,192,4,24,101,241,101,211,17,201,
163,237,180,155,58,176,255,89,103,207,38,2,226,57,106,47,194,154,124,108,217,159,8,44,47,158,189,31,218,66,121,219,14,219,37,159,99,198,62,102,127,227,203,218,219,10,31,171,18,96,194,31,107,9,48,209,53,36,192,6,131,217,46,192,132,232,37,209,77,125,144,
240,109,237,134,0,163,3,206,58,160,147,141,168,241,34,198,224,249,183,104,228,198,4,24,35,64,38,190,200,167,99,110,162,11,40,195,58,202,153,31,4,74,244,252,24,66,139,124,47,84,24,169,49,209,195,54,173,142,180,193,222,70,9,212,193,4,30,109,162,172,173,
235,20,108,19,177,151,230,179,109,19,42,136,70,182,79,157,77,60,33,120,162,55,100,70,176,143,216,231,94,124,1,219,192,15,203,172,167,46,44,179,127,45,159,125,19,61,151,230,95,46,99,176,239,204,63,251,220,166,67,146,104,3,203,236,79,219,199,148,141,226,
160,21,62,86,171,40,192,136,89,246,153,197,84,43,172,156,167,85,25,59,71,102,35,254,88,75,128,137,174,33,1,54,24,72,128,9,209,59,162,155,250,32,225,219,218,13,1,70,103,218,58,140,148,163,19,207,244,186,180,147,136,152,242,130,202,192,134,209,18,58,247,
38,62,0,223,8,1,19,119,64,135,30,191,136,5,196,21,29,126,47,46,12,202,48,138,131,61,219,180,186,152,15,214,217,20,73,182,227,71,198,172,61,44,183,43,118,114,65,164,68,251,147,118,165,237,161,190,94,132,177,175,252,250,86,208,14,252,97,107,237,231,19,
123,191,79,237,152,216,62,65,40,32,218,188,47,195,132,20,235,109,31,81,47,19,187,236,47,219,150,175,167,143,31,182,231,247,247,100,248,88,173,162,0,179,248,166,253,196,35,251,47,26,193,164,28,231,141,63,54,182,142,242,8,103,246,59,249,28,87,139,223,233,
16,157,59,253,142,63,214,18,96,162,107,72,128,13,6,18,96,66,244,142,232,166,62,72,248,182,118,67,128,217,8,138,135,78,191,117,208,13,58,159,209,148,58,124,211,113,71,184,249,145,23,58,135,173,70,74,152,186,198,232,13,29,209,104,189,129,24,192,135,117,
248,217,62,182,108,199,70,123,168,191,23,126,94,128,209,14,234,103,235,58,5,219,166,83,110,98,5,172,3,110,245,242,80,71,235,112,211,9,143,246,99,138,181,27,252,126,100,187,81,155,216,46,199,216,246,109,186,222,131,40,244,226,148,253,137,141,31,213,243,
199,198,199,143,31,193,108,7,31,171,85,21,96,254,220,105,37,64,41,23,197,51,49,66,28,218,200,226,100,216,72,27,49,108,177,132,111,190,251,227,78,12,33,234,200,55,65,200,167,183,235,71,252,177,150,0,19,93,67,2,108,48,144,0,19,162,119,68,55,245,65,194,
183,181,147,2,140,206,161,9,46,19,93,126,217,67,39,206,126,165,167,227,72,71,47,26,253,2,223,241,164,243,104,35,54,64,199,158,78,61,254,188,61,29,68,4,64,180,109,160,115,73,39,151,79,4,139,77,133,179,206,172,159,114,136,143,86,2,12,31,116,158,89,31,117,
154,167,3,254,168,27,194,133,101,223,201,166,190,180,151,239,236,67,19,168,172,163,110,136,40,246,169,237,127,223,177,54,104,135,181,139,246,218,178,109,139,239,224,167,198,81,142,99,225,133,161,135,58,177,79,169,147,223,135,86,71,219,207,224,197,4,245,
51,17,98,199,149,122,83,23,111,19,225,99,117,16,4,24,251,42,154,126,234,207,3,15,251,39,202,111,5,101,25,145,228,88,97,75,220,240,157,253,109,177,76,57,226,131,56,176,248,161,28,223,17,224,196,214,100,34,188,87,248,99,45,1,38,186,134,4,216,96,32,1,38,
68,239,136,110,234,131,132,111,107,167,58,172,116,154,233,248,123,200,167,227,6,105,121,160,67,71,103,143,14,158,239,228,167,224,219,175,183,78,35,203,252,34,79,71,16,31,233,116,41,58,154,173,182,77,62,226,37,234,224,211,25,245,35,72,214,249,180,239,
140,192,249,41,98,172,167,211,108,109,238,36,108,139,58,210,70,255,204,149,141,68,176,93,218,225,235,3,212,151,124,246,11,251,56,93,15,248,243,251,209,239,99,150,205,214,183,157,122,76,52,58,101,117,98,255,249,109,226,143,206,187,47,235,183,199,49,78,
143,3,245,103,123,126,251,17,62,86,171,42,192,136,85,246,55,226,6,161,234,247,141,47,231,167,32,18,167,228,179,143,188,96,35,94,236,216,89,158,135,109,181,90,199,49,48,225,204,177,244,199,26,27,124,179,204,177,77,143,103,191,224,143,181,4,152,232,26,
18,96,131,129,4,152,16,189,35,186,169,15,18,190,173,85,236,176,182,3,157,119,235,160,230,128,40,161,99,217,106,132,103,54,195,62,241,163,133,57,208,145,231,152,68,235,166,139,143,213,42,11,48,132,107,36,188,12,43,151,230,219,40,174,125,199,7,66,201,143,
170,121,240,225,227,155,152,231,92,1,252,152,93,42,192,108,68,204,4,96,43,255,189,198,31,107,9,48,209,53,36,192,6,3,9,48,33,122,71,116,83,31,36,124,91,219,57,31,119,123,214,83,67,63,253,10,29,67,58,147,147,141,156,164,48,37,139,169,85,19,117,130,103,
43,140,126,176,95,91,141,156,180,2,177,134,29,226,34,90,63,109,158,89,253,120,70,88,181,35,102,90,9,48,226,156,145,49,214,91,30,226,169,149,207,212,7,231,138,137,99,111,199,178,255,17,131,243,131,145,53,251,222,151,196,241,176,65,128,237,81,178,90,2,
76,204,4,18,96,131,193,44,17,96,203,234,156,34,1,38,250,137,240,198,62,64,248,182,182,115,62,62,103,161,70,131,68,127,178,199,46,79,111,138,213,42,198,115,142,0,227,217,62,68,144,97,235,16,80,8,43,242,236,229,52,237,10,48,132,21,83,24,17,215,222,142,
81,50,166,67,50,194,134,200,51,1,200,52,73,182,193,212,71,239,167,31,104,17,15,53,1,182,160,100,247,146,227,37,192,196,76,176,201,198,27,23,11,230,207,47,182,92,176,64,84,152,173,183,220,178,120,202,142,59,134,199,184,234,212,47,136,39,151,12,151,140,
176,44,1,38,250,141,232,230,62,8,164,237,108,231,124,124,222,115,158,29,250,18,162,215,236,189,199,206,77,177,90,197,120,142,158,127,139,160,28,163,82,30,191,30,129,132,40,66,132,33,166,90,249,76,71,120,241,139,128,99,218,34,207,118,249,103,13,89,102,
244,210,70,215,16,98,148,35,111,42,83,81,103,154,22,241,112,66,201,156,191,41,217,181,228,24,9,48,49,19,236,177,112,97,49,50,52,84,140,142,140,136,10,51,54,58,90,172,92,177,34,60,198,85,199,253,34,181,180,100,73,201,9,18,96,162,223,136,110,238,131,64,
218,206,118,207,71,126,89,142,252,9,209,43,22,62,235,105,197,210,125,247,104,138,83,197,243,236,101,130,120,56,174,100,206,227,75,118,46,57,108,215,157,158,252,75,95,72,8,33,102,3,59,252,237,19,254,84,94,3,143,41,217,175,100,223,146,163,118,121,198,14,
186,30,138,190,35,186,201,87,153,168,141,237,158,143,251,239,179,176,216,253,217,234,180,138,254,128,206,246,254,207,221,173,41,70,65,241,60,59,153,36,30,142,40,153,243,216,146,167,148,44,223,126,155,249,95,91,118,192,162,113,133,133,16,98,80,217,111,
209,46,197,147,183,93,112,87,121,13,92,85,242,156,18,158,137,93,177,221,214,79,208,245,80,244,45,209,13,191,74,68,109,130,169,156,143,207,221,243,89,234,184,138,158,177,251,179,159,86,44,218,125,231,113,35,29,160,120,158,125,180,25,15,43,74,230,108,90,
178,109,201,243,158,188,253,214,87,46,220,121,48,159,241,16,66,136,8,46,136,59,108,187,229,181,229,53,144,169,33,207,44,217,169,100,241,14,219,109,165,235,161,16,93,70,231,163,24,36,20,207,194,227,226,97,255,146,57,115,75,120,14,236,89,37,43,183,219,
250,241,119,62,251,233,219,135,134,66,8,49,104,108,254,168,71,252,252,145,143,124,196,81,229,245,111,97,201,118,37,252,32,181,139,174,135,66,116,31,157,143,98,144,80,60,11,143,139,7,222,189,49,231,175,75,30,83,66,80,236,53,255,241,143,61,107,219,173,
30,247,127,4,197,51,118,220,38,116,32,132,16,85,135,235,27,23,195,249,143,223,236,85,229,181,239,185,37,79,42,153,95,194,115,177,220,40,117,61,20,162,75,232,124,20,131,132,226,89,120,90,196,195,156,191,42,217,184,228,113,37,59,148,44,42,89,181,237,214,
243,63,182,205,130,205,126,180,96,243,185,197,227,54,125,132,16,66,12,12,243,31,59,247,39,91,253,205,102,159,121,228,35,31,113,116,121,189,219,167,228,239,74,158,80,50,175,100,147,18,93,15,133,232,18,58,31,197,32,161,120,22,158,9,226,97,206,195,74,30,
81,66,80,152,50,103,120,116,113,9,15,137,29,89,242,130,146,213,37,188,70,83,8,33,170,8,215,48,174,101,92,211,14,46,57,160,100,183,18,126,137,178,155,35,215,66,93,15,133,152,121,116,62,138,65,66,241,44,60,237,196,67,45,153,8,227,121,176,205,74,182,40,
217,190,228,105,37,207,46,97,238,42,111,110,129,61,133,16,162,130,112,253,226,90,198,53,237,233,37,92,8,183,44,225,77,176,92,251,184,6,62,188,68,215,67,33,102,30,157,143,98,144,80,60,11,207,36,241,48,231,17,255,31,194,152,166,96,81,95,137,222,0,0,0,0,
73,69,78,68,174,66,96,130,0,0 };
const char* GlobalEditor_864x144_png = (const char*) temp_binary_data_13;
const char* GlobalEditor_864x144_png = (const char*) temp_binary_data_14;
//================== OperatorEditor_287x218.png ================== //================== OperatorEditor_287x218.png ==================
static const unsigned char temp_binary_data_14[] =
static const unsigned char temp_binary_data_15[] =
{ 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,1,115,82,71,66,0,174,206,28,233,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,9,112,72,89,115,0,0,14,195,0,0,14,195,1,199,111,168,100,0,0,42,68,73,68,65, { 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,1,115,82,71,66,0,174,206,28,233,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,9,112,72,89,115,0,0,14,195,0,0,14,195,1,199,111,168,100,0,0,42,68,73,68,65,
84,120,94,237,157,107,136,101,89,149,231,179,180,91,243,209,86,101,101,102,101,101,70,190,51,35,34,51,50,51,30,25,239,136,27,239,136,140,200,168,200,180,179,170,108,203,71,217,85,150,218,182,35,232,96,151,96,183,14,66,53,66,13,136,130,80,32,20,72,33, 84,120,94,237,157,107,136,101,89,149,231,179,180,91,243,209,86,101,101,102,101,101,70,190,51,35,34,51,50,51,30,25,239,136,27,239,136,140,200,168,200,180,179,170,108,203,71,217,85,150,218,182,35,232,96,151,96,183,14,66,53,66,13,136,130,80,32,20,72,33,
130,130,136,35,50,162,51,142,72,139,126,80,63,40,50,168,31,212,153,193,154,129,41,161,177,190,116,194,124,216,179,127,251,198,138,92,113,98,159,251,136,251,136,115,206,93,1,63,206,57,123,175,189,247,185,103,173,253,63,235,156,115,227,158,125,254,111, 130,130,136,35,50,162,51,142,72,139,126,80,63,40,50,168,31,212,153,193,154,129,41,161,177,190,116,194,124,216,179,127,251,198,138,92,113,98,159,251,136,251,136,115,206,93,1,63,206,57,123,175,189,247,185,103,173,253,63,235,156,115,227,158,125,254,111,
@@ -9663,7 +9849,7 @@ static const unsigned char temp_binary_data_14[] =
167,228,121,91,207,133,83,255,169,251,236,241,255,117,238,228,97,215,117,236,144,97,24,198,174,57,253,232,67,255,251,252,233,71,254,139,207,120,158,246,250,50,231,185,236,121,196,115,192,179,239,160,231,152,231,130,103,216,179,228,225,134,208,187,60, 167,228,121,91,207,133,83,255,169,251,236,241,255,117,238,228,97,215,117,236,144,97,24,198,174,57,253,232,67,255,251,252,233,71,254,139,207,120,158,246,250,50,231,185,236,121,196,115,192,179,239,160,231,152,231,130,103,216,179,228,225,134,208,187,60,
207,122,222,231,225,75,65,134,97,24,181,128,102,160,29,104,200,227,158,21,15,143,214,201,120,16,158,67,251,246,237,251,139,255,15,171,227,103,50,233,85,150,225,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; 207,122,222,231,225,75,65,134,97,24,181,128,102,160,29,104,200,227,158,21,15,143,214,201,120,16,158,67,251,246,237,251,139,255,15,171,227,103,50,233,85,150,225,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* OperatorEditor_287x218_png = (const char*) temp_binary_data_14;
const char* OperatorEditor_287x218_png = (const char*) temp_binary_data_15;
const char* getNamedResource (const char*, int&) throw(); const char* getNamedResource (const char*, int&) throw();
@@ -9676,6 +9862,7 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) throw
switch (hash) switch (hash)
{ {
case 0x23112e79: numBytes = 14239; return dexedIcon_png;
case 0xb5f9cc57: numBytes = 841; return Switch_32x32_png; case 0xb5f9cc57: numBytes = 841; return Switch_32x32_png;
case 0xb808cdf7: numBytes = 2261; return Switch_48x26_png; case 0xb808cdf7: numBytes = 2261; return Switch_48x26_png;
case 0x5fe3afed: numBytes = 1850; return ButtonUnlabeled_50x30_png; case 0x5fe3afed: numBytes = 1850; return ButtonUnlabeled_50x30_png;
@@ -9689,7 +9876,7 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) throw
case 0x654b711b: numBytes = 311508; return NotoSansBold_ttf; case 0x654b711b: numBytes = 311508; return NotoSansBold_ttf;
case 0x796d1c9c: numBytes = 88890; return builtin_pgm_zip; case 0x796d1c9c: numBytes = 88890; return builtin_pgm_zip;
case 0xb02b7677: numBytes = 24863; return about_png; case 0xb02b7677: numBytes = 24863; return about_png;
case 0xff44b02a: numBytes = 17334; return GlobalEditor_864x144_png;
case 0xff44b02a: numBytes = 16209; return GlobalEditor_864x144_png;
case 0x081c7d0e: numBytes = 10927; return OperatorEditor_287x218_png; case 0x081c7d0e: numBytes = 10927; return OperatorEditor_287x218_png;
default: break; default: break;
} }
@@ -9700,6 +9887,7 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) throw
const char* namedResourceList[] = const char* namedResourceList[] =
{ {
"dexedIcon_png",
"Switch_32x32_png", "Switch_32x32_png",
"Switch_48x26_png", "Switch_48x26_png",
"ButtonUnlabeled_50x30_png", "ButtonUnlabeled_50x30_png",


+ 6
- 6
ports/dexed/source/BinaryData.h View File

@@ -4,11 +4,13 @@
*/ */
#ifndef BINARYDATA_H_22182922_INCLUDED
#define BINARYDATA_H_22182922_INCLUDED
#pragma once
namespace BinaryData namespace BinaryData
{ {
extern const char* dexedIcon_png;
const int dexedIcon_pngSize = 14239;
extern const char* Switch_32x32_png; extern const char* Switch_32x32_png;
const int Switch_32x32_pngSize = 841; const int Switch_32x32_pngSize = 841;
@@ -49,7 +51,7 @@ namespace BinaryData
const int about_pngSize = 24863; const int about_pngSize = 24863;
extern const char* GlobalEditor_864x144_png; extern const char* GlobalEditor_864x144_png;
const int GlobalEditor_864x144_pngSize = 17334;
const int GlobalEditor_864x144_pngSize = 16209;
extern const char* OperatorEditor_287x218_png; extern const char* OperatorEditor_287x218_png;
const int OperatorEditor_287x218_pngSize = 10927; const int OperatorEditor_287x218_pngSize = 10927;
@@ -58,11 +60,9 @@ namespace BinaryData
extern const char* namedResourceList[]; extern const char* namedResourceList[];
// Number of elements in the namedResourceList array. // Number of elements in the namedResourceList array.
const int namedResourceListSize = 15;
const int namedResourceListSize = 16;
// If you provide the name of one of the binary resource variables above, this function will // 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). // return the corresponding data and its size (or a null pointer if the name isn't found).
const char* getNamedResource (const char* resourceNameUTF8, int& dataSizeInBytes) throw(); const char* getNamedResource (const char* resourceNameUTF8, int& dataSizeInBytes) throw();
} }
#endif

+ 1
- 1
ports/dexed/source/CartManager.h View File

@@ -26,7 +26,7 @@
#include "ProgramListBox.h" #include "ProgramListBox.h"
#include "PluginData.h" #include "PluginData.h"
class CartManager : public Component, public ButtonListener, public DragAndDropContainer, public FileBrowserListener
class CartManager : public Component, public Button::Listener, public DragAndDropContainer, public FileBrowserListener
, public ProgramListBoxListener, public KeyListener { , public ProgramListBoxListener, public KeyListener {
ScopedPointer<TextButton> newButton; ScopedPointer<TextButton> newButton;
ScopedPointer<TextButton> loadButton; ScopedPointer<TextButton> loadButton;


+ 2
- 2
ports/dexed/source/DXComponents.cpp View File

@@ -1,6 +1,6 @@
/** /**
* *
* Copyright (c) 2014 Pascal Gauthier.
* Copyright (c) 2014-2018 Pascal Gauthier.
* *
* DX7 Envelope Tables from legasynth-0.4.1 / DX7 Patch Editor * DX7 Envelope Tables from legasynth-0.4.1 / DX7 Patch Editor
* Copyright (C) 2002 Juan Linietsky <coding@reduz.com.ar> * Copyright (C) 2002 Juan Linietsky <coding@reduz.com.ar>
@@ -346,7 +346,7 @@ void LcdDisplay::paint(Graphics &g) {
g.setColour (Colours::white); g.setColour (Colours::white);
g.drawText (paramMsg, g.drawText (paramMsg,
0, 0, 140, 14, 0, 0, 140, 14,
Justification::centred, true);
Justification::centred, false);
} }
void ComboBoxImage::paint(Graphics &g) { void ComboBoxImage::paint(Graphics &g) {


+ 3
- 19
ports/dexed/source/DXLookNFeel.cpp View File

@@ -1,6 +1,6 @@
/** /**
* *
* Copyright (c) 2013-2016 Pascal Gauthier.
* Copyright (c) 2013-2018 Pascal Gauthier.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@@ -36,7 +36,7 @@ Image findImage(String path) {
DXLookNFeel::DXLookNFeel() { DXLookNFeel::DXLookNFeel() {
Colour ctrlBackground; Colour ctrlBackground;
DexedAudioProcessor::dexedAppDir.setAsCurrentWorkingDirectory(); DexedAudioProcessor::dexedAppDir.setAsCurrentWorkingDirectory();
ctrlBackground = Colour(20,18,18); ctrlBackground = Colour(20,18,18);
@@ -73,9 +73,6 @@ DXLookNFeel::DXLookNFeel() {
imageOperator = ImageCache::getFromMemory(BinaryData::OperatorEditor_287x218_png, BinaryData::OperatorEditor_287x218_pngSize); imageOperator = ImageCache::getFromMemory(BinaryData::OperatorEditor_287x218_png, BinaryData::OperatorEditor_287x218_pngSize);
imageGlobal = ImageCache::getFromMemory (BinaryData::GlobalEditor_864x144_png, BinaryData::GlobalEditor_864x144_pngSize); imageGlobal = ImageCache::getFromMemory (BinaryData::GlobalEditor_864x144_png, BinaryData::GlobalEditor_864x144_pngSize);
defaultFont = Typeface::createSystemTypefaceFor(BinaryData::NotoSansRegular_ttf, BinaryData::NotoSansRegular_ttfSize);
defaultFontBold = Typeface::createSystemTypefaceFor(BinaryData::NotoSansBold_ttf, BinaryData::NotoSansBold_ttfSize);
File dexedTheme = DexedAudioProcessor::dexedAppDir.getChildFile("DexedTheme.xml"); File dexedTheme = DexedAudioProcessor::dexedAppDir.getChildFile("DexedTheme.xml");
if ( ! dexedTheme.existsAsFile() ) if ( ! dexedTheme.existsAsFile() )
@@ -158,7 +155,7 @@ DXLookNFeel::DXLookNFeel() {
} }
Typeface::Ptr DXLookNFeel::getTypefaceForFont(const Font &) { Typeface::Ptr DXLookNFeel::getTypefaceForFont(const Font &) {
return defaultFont;
return Typeface::createSystemTypefaceFor(BinaryData::NotoSansRegular_ttf, BinaryData::NotoSansRegular_ttfSize);
} }
void DXLookNFeel::drawRotarySlider( Graphics &g, int x, int y, int width, int height, float sliderPosProportional, void DXLookNFeel::drawRotarySlider( Graphics &g, int x, int y, int width, int height, float sliderPosProportional,
@@ -223,10 +220,6 @@ void DXLookNFeel::drawLinearSliderThumb (Graphics& g, int x, int y, int width, i
g.drawImage(imageSlider, p, 0, 26, 26, 0, 0, 26, 26); g.drawImage(imageSlider, p, 0, 26, 26, 0, 0, 26, 26);
} }
Font DXLookNFeel::getTextButtonFont(TextButton& button, int buttonHeight) {
return Font(defaultFontBold);
}
void DXLookNFeel::positionComboBoxText(ComboBox& box, Label& label) { void DXLookNFeel::positionComboBoxText(ComboBox& box, Label& label) {
ComboBox *src = &box; ComboBox *src = &box;
@@ -239,17 +232,8 @@ void DXLookNFeel::positionComboBoxText(ComboBox& box, Label& label) {
LookAndFeel_V3::positionComboBoxText(box, label); LookAndFeel_V3::positionComboBoxText(box, label);
} }
CriticalSection DXLookNFeel::lock;
DXLookNFeel * DXLookNFeel::ins = NULL;
Colour DXLookNFeel::fillColour = Colour(77,159,151); Colour DXLookNFeel::fillColour = Colour(77,159,151);
Colour DXLookNFeel::lightBackground = Colour(78,72,63); Colour DXLookNFeel::lightBackground = Colour(78,72,63);
Colour DXLookNFeel::background = Colour(60,50,47); Colour DXLookNFeel::background = Colour(60,50,47);
Colour DXLookNFeel::roundBackground = Colour(58,52,48); Colour DXLookNFeel::roundBackground = Colour(58,52,48);
DXLookNFeel *DXLookNFeel::getLookAndFeel() {
const ScopedLock locker(lock);
if ( ins != NULL )
return ins;
ins = new DXLookNFeel();
return ins;
}

+ 4
- 10
ports/dexed/source/DXLookNFeel.h View File

@@ -1,6 +1,6 @@
/** /**
* *
* Copyright (c) 2013-2016 Pascal Gauthier.
* Copyright (c) 2013-2018 Pascal Gauthier.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@@ -24,16 +24,11 @@
#include "JuceHeader.h" #include "JuceHeader.h"
class DXLookNFeel : public LookAndFeel_V3 { class DXLookNFeel : public LookAndFeel_V3 {
static CriticalSection lock;
static DXLookNFeel *ins;
DXLookNFeel();
HashMap<String, int> colourMap; HashMap<String, int> colourMap;
public: public:
Typeface::Ptr defaultFont;
Typeface::Ptr defaultFontBold;
DXLookNFeel();
Image imageKnob, imageSwitch, imageButton, imageSlider, imageScaling, imageLight, imageLFO; Image imageKnob, imageSwitch, imageButton, imageSlider, imageScaling, imageLight, imageLFO;
Image imageSwitchOperator; Image imageSwitchOperator;
Image imageOperator, imageGlobal; Image imageOperator, imageGlobal;
@@ -49,11 +44,10 @@ public:
const Slider::SliderStyle, Slider&) override; const Slider::SliderStyle, Slider&) override;
virtual void drawButtonBackground (Graphics&, Button&, const Colour& backgroundColour, virtual void drawButtonBackground (Graphics&, Button&, const Colour& backgroundColour,
bool isMouseOverButton, bool isButtonDown) override; bool isMouseOverButton, bool isButtonDown) override;
virtual Font getTextButtonFont(TextButton&, int buttonHeight) override;
//virtual Font getTextButtonFont(TextButton&, int buttonHeight) override;
virtual Typeface::Ptr getTypefaceForFont(const Font &) override; virtual Typeface::Ptr getTypefaceForFont(const Font &) override;
virtual void positionComboBoxText (ComboBox& box, Label& label) override; virtual void positionComboBoxText (ComboBox& box, Label& label) override;
static DXLookNFeel *getLookAndFeel();
static Colour fillColour; static Colour fillColour;
static Colour lightBackground; static Colour lightBackground;
static Colour background; static Colour background;


+ 1
- 1
ports/dexed/source/EngineMkI.cpp View File

@@ -292,7 +292,7 @@ void EngineMkI::compute_fb3(int32_t *output, FmOpParams *parms, int32_t gain01,
fb_buf[1] = y; fb_buf[1] = y;
} }
void EngineMkI::render(int32_t *output, FmOpParams *params, int algorithm, int32_t *fb_buf, int feedback_shift) {
void EngineMkI::render(int32_t *output, FmOpParams *params, int algorithm, int32_t *fb_buf, int32_t feedback_shift) {
const int kLevelThresh = ENV_MAX-100; const int kLevelThresh = ENV_MAX-100;
FmAlgorithm alg = algorithms[algorithm]; FmAlgorithm alg = algorithms[algorithm];
bool has_contents[3] = { true, false, false }; bool has_contents[3] = { true, false, false };


+ 1
- 1
ports/dexed/source/EngineMkI.h View File

@@ -29,7 +29,7 @@ class EngineMkI : public FmCore {
public: public:
EngineMkI(); EngineMkI();
void render(int32_t *output, FmOpParams *params, int algorithm, int32_t *fb_buf, int feedback_shift) override;
void render(int32_t *output, FmOpParams *params, int algorithm, int32_t *fb_buf, int32_t feedback_shift) override;
void compute(int32_t *output, const int32_t *input, int32_t phase0, int32_t freq, int32_t gain1, int32_t gain2, void compute(int32_t *output, const int32_t *input, int32_t phase0, int32_t freq, int32_t gain1, int32_t gain2,
bool add); bool add);


+ 1
- 1
ports/dexed/source/EngineOpl.cpp View File

@@ -169,7 +169,7 @@ void EngineOpl::compute_fb(int32_t *output, int32_t phase0, int32_t freq,
void EngineOpl::render(int32_t *output, FmOpParams *params, int algorithm, void EngineOpl::render(int32_t *output, FmOpParams *params, int algorithm,
int32_t *fb_buf, int feedback_shift) {
int32_t *fb_buf, int32_t feedback_shift) {
const int kLevelThresh = 507; // really ???? const int kLevelThresh = 507; // really ????
const FmAlgorithm alg = algorithms[algorithm]; const FmAlgorithm alg = algorithms[algorithm];
bool has_contents[3] = { true, false, false }; bool has_contents[3] = { true, false, false };


+ 46
- 33
ports/dexed/source/GlobalEditor.cpp View File

@@ -1,17 +1,17 @@
/* /*
============================================================================== ==============================================================================
This is an automatically generated GUI class created by the Introjucer!
This is an automatically generated GUI class created by the Projucer!
Be careful when adding custom code to these files, as only the code within Be careful when adding custom code to these files, as only the code within
the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded
and re-saved. and re-saved.
Created with Introjucer version: 3.2.0
Created with Projucer version: 4.3.1
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions"
The Projucer is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright (c) 2015 - ROLI Ltd. Copyright (c) 2015 - ROLI Ltd.
============================================================================== ==============================================================================
@@ -30,7 +30,7 @@
/** /**
* Ugly but usefull midi monitor to know if you are really sending/receiving something from the DX7 * Ugly but usefull midi monitor to know if you are really sending/receiving something from the DX7
* If the midi is not configured this component wont show up * If the midi is not configured this component wont show up
*/
*
class MidiMonitor : public Component { class MidiMonitor : public Component {
SysexComm *midi; SysexComm *midi;
Image light; Image light;
@@ -58,7 +58,7 @@ public:
midi->outActivity = false; midi->outActivity = false;
} }
} }
};
};*/
class AboutBox : public DialogWindow { class AboutBox : public DialogWindow {
public: public:
@@ -274,18 +274,19 @@ GlobalEditor::GlobalEditor ()
//[Constructor] You can add your own custom stuff here.. //[Constructor] You can add your own custom stuff here..
SharedResourcePointer<DXLookNFeel> lookAndFeel;
lfoType->addItem("TRIANGLE", 1); lfoType->addItem("TRIANGLE", 1);
lfoType->addItem("SAW DOWN", 2); lfoType->addItem("SAW DOWN", 2);
lfoType->addItem("SAW UP", 3); lfoType->addItem("SAW UP", 3);
lfoType->addItem("SQUARE", 4); lfoType->addItem("SQUARE", 4);
lfoType->addItem("SINE", 5); lfoType->addItem("SINE", 5);
lfoType->addItem("S&HOLD", 6); lfoType->addItem("S&HOLD", 6);
lfoType->setImage(DXLookNFeel::getLookAndFeel()->imageLFO);
lfoType->setImage(lookAndFeel->imageLFO);
programs = programSelector; programs = programSelector;
background = DXLookNFeel::getLookAndFeel()->imageGlobal;
imageLight = DXLookNFeel::getLookAndFeel()->imageLight;
background = lookAndFeel->imageGlobal;
imageLight = lookAndFeel->imageLight;
//[/Constructor] //[/Constructor]
} }
@@ -602,10 +603,10 @@ void GlobalEditor::bind(DexedAudioProcessorEditor *edit) {
pitchEnvDisplay->pvalues = &(processor->data[126]); pitchEnvDisplay->pvalues = &(processor->data[126]);
algoDisplay->opStatus = processor->controllers.opSwitch; algoDisplay->opStatus = processor->controllers.opSwitch;
editor = edit; editor = edit;
midiMonitor = new MidiMonitor(&(processor->sysexComm));
//midiMonitor = new MidiMonitor(&(processor->sysexComm));
//addAndMakeVisible(midiMonitor); //addAndMakeVisible(midiMonitor);
//midiMonitor->setBounds(155, 21, 80, 45); //midiMonitor->setBounds(155, 21, 80, 45);
@@ -632,7 +633,7 @@ void GlobalEditor::updatePitchPos(int pos) {
void GlobalEditor::updateVu(float f) { void GlobalEditor::updateVu(float f) {
vuOutput->v = f; vuOutput->v = f;
vuOutput->repaint(); vuOutput->repaint();
midiMonitor->repaint();
//midiMonitor->repaint();
} }
void GlobalEditor::setMonoState(bool state) { void GlobalEditor::setMonoState(bool state) {
@@ -652,9 +653,9 @@ void GlobalEditor::mouseDown(const MouseEvent &e) {
//============================================================================== //==============================================================================
#if 0 #if 0
/* -- Introjucer information section --
/* -- Projucer information section --
This is where the Introjucer stores the metadata that describe this GUI layout, so
This is where the Projucer stores the metadata that describe this GUI layout, so
make changes in here at your peril! make changes in here at your peril!
BEGIN_JUCER_METADATA BEGIN_JUCER_METADATA
@@ -667,70 +668,82 @@ BEGIN_JUCER_METADATA
<SLIDER name="lfoSpeed" id="b10eaf327ab3bff5" memberName="lfoSpeed" virtualName="" <SLIDER name="lfoSpeed" id="b10eaf327ab3bff5" memberName="lfoSpeed" virtualName=""
explicitFocusOrder="0" pos="564 50 34 34" min="0" max="99" int="1" explicitFocusOrder="0" pos="564 50 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="lfoAmDepth" id="3e95a6206fa4a891" memberName="lfoAmDepth" <SLIDER name="lfoAmDepth" id="3e95a6206fa4a891" memberName="lfoAmDepth"
virtualName="" explicitFocusOrder="0" pos="686 50 34 34" min="0" virtualName="" explicitFocusOrder="0" pos="686 50 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="lfoPitchDepth" id="6ead769ca786c813" memberName="lfoPitchDepth" <SLIDER name="lfoPitchDepth" id="6ead769ca786c813" memberName="lfoPitchDepth"
virtualName="" explicitFocusOrder="0" pos="646 50 34 34" min="0" virtualName="" explicitFocusOrder="0" pos="646 50 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="lfoDelay" id="1fce68dc81619ef5" memberName="lfoDelay" virtualName="" <SLIDER name="lfoDelay" id="1fce68dc81619ef5" memberName="lfoDelay" virtualName=""
explicitFocusOrder="0" pos="603 50 34 34" 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" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="cutoff" id="40531f16bb0bd225" memberName="cutoff" virtualName="" <SLIDER name="cutoff" id="40531f16bb0bd225" memberName="cutoff" virtualName=""
explicitFocusOrder="0" pos="234 9 34 34" min="0" max="1" int="0" explicitFocusOrder="0" pos="234 9 34 34" min="0" max="1" int="0"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="reso" id="c8c13464e81a8d83" memberName="reso" virtualName="" <SLIDER name="reso" id="c8c13464e81a8d83" memberName="reso" virtualName=""
explicitFocusOrder="0" pos="278 9 34 34" min="0" max="1" int="0" explicitFocusOrder="0" pos="278 9 34 34" min="0" max="1" int="0"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="pitchRate2" id="73f386b3c91d3de4" memberName="pitchRate2" <SLIDER name="pitchRate2" id="73f386b3c91d3de4" memberName="pitchRate2"
virtualName="" explicitFocusOrder="0" pos="767 96 34 34" min="0" virtualName="" explicitFocusOrder="0" pos="767 96 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="pitchRate3" id="187c25b24413fccf" memberName="pitchRate3" <SLIDER name="pitchRate3" id="187c25b24413fccf" memberName="pitchRate3"
virtualName="" explicitFocusOrder="0" pos="795 96 35 34" min="0" virtualName="" explicitFocusOrder="0" pos="795 96 35 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="pitchRate4" id="1aeb2a8fbbcbeaab" memberName="pitchRate4" <SLIDER name="pitchRate4" id="1aeb2a8fbbcbeaab" memberName="pitchRate4"
virtualName="" explicitFocusOrder="0" pos="823 96 34 34" min="0" virtualName="" explicitFocusOrder="0" pos="823 96 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="pitchRate1" id="419d613b3fb9604e" memberName="pitchRate1" <SLIDER name="pitchRate1" id="419d613b3fb9604e" memberName="pitchRate1"
virtualName="" explicitFocusOrder="0" pos="739 96 34 34" min="0" virtualName="" explicitFocusOrder="0" pos="739 96 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="pitchLevel2" id="3a355ad2221887d9" memberName="pitchLevel2" <SLIDER name="pitchLevel2" id="3a355ad2221887d9" memberName="pitchLevel2"
virtualName="" explicitFocusOrder="0" pos="767 57 34 34" min="0" virtualName="" explicitFocusOrder="0" pos="767 57 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="pitchLevel3" id="5c5d782e8a7f3ad7" memberName="pitchLevel3" <SLIDER name="pitchLevel3" id="5c5d782e8a7f3ad7" memberName="pitchLevel3"
virtualName="" explicitFocusOrder="0" pos="795 56 34 34" min="0" virtualName="" explicitFocusOrder="0" pos="795 56 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="pitchLevel4" id="eb900b141fbad8ff" memberName="pitchLevel4" <SLIDER name="pitchLevel4" id="eb900b141fbad8ff" memberName="pitchLevel4"
virtualName="" explicitFocusOrder="0" pos="823 56 34 34" min="0" virtualName="" explicitFocusOrder="0" pos="823 56 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="pitchLevel1" id="344cbe26ec9fa128" memberName="pitchLevel1" <SLIDER name="pitchLevel1" id="344cbe26ec9fa128" memberName="pitchLevel1"
virtualName="" explicitFocusOrder="0" pos="739 57 34 34" min="0" virtualName="" explicitFocusOrder="0" pos="739 57 34 34" min="0"
max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="transpose" id="7d1266b1c1534947" memberName="transpose" <SLIDER name="transpose" id="7d1266b1c1534947" memberName="transpose"
virtualName="" explicitFocusOrder="0" pos="202 60 34 34" min="0" virtualName="" explicitFocusOrder="0" pos="202 60 34 34" min="0"
max="48" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" max="48" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="0" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="0" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<TOGGLEBUTTON name="oscSync" id="8f3fe641537cd00" memberName="oscSync" virtualName="" <TOGGLEBUTTON name="oscSync" id="8f3fe641537cd00" memberName="oscSync" virtualName=""
explicitFocusOrder="0" pos="650 96 48 26" buttonText="" connectedEdges="0" explicitFocusOrder="0" pos="650 96 48 26" buttonText="" connectedEdges="0"
needsCallback="1" radioGroupId="0" state="0"/> needsCallback="1" radioGroupId="0" state="0"/>
<SLIDER name="pitchModSens" id="904f73df85a9f886" memberName="pitchModSens" <SLIDER name="pitchModSens" id="904f73df85a9f886" memberName="pitchModSens"
virtualName="" explicitFocusOrder="0" pos="666 5 34 34" min="0" virtualName="" explicitFocusOrder="0" pos="666 5 34 34" min="0"
max="7" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" max="7" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<TOGGLEBUTTON name="lfoSync" id="ff92bb0a5a4f7187" memberName="lfoSync" virtualName="" <TOGGLEBUTTON name="lfoSync" id="ff92bb0a5a4f7187" memberName="lfoSync" virtualName=""
explicitFocusOrder="0" pos="565 96 48 26" buttonText="" connectedEdges="0" explicitFocusOrder="0" pos="565 96 48 26" buttonText="" connectedEdges="0"
needsCallback="1" radioGroupId="0" state="0"/> needsCallback="1" radioGroupId="0" state="0"/>
@@ -743,18 +756,18 @@ BEGIN_JUCER_METADATA
<SLIDER name="feedback" id="4fac1940c29ab8c" memberName="feedback" virtualName="" <SLIDER name="feedback" id="4fac1940c29ab8c" memberName="feedback" virtualName=""
explicitFocusOrder="0" pos="501 81 34 34" min="0" max="7" int="1" explicitFocusOrder="0" pos="501 81 34 34" min="0" max="7" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="algo" id="8a226ddf9bbff752" memberName="algo" virtualName="" <SLIDER name="algo" id="8a226ddf9bbff752" memberName="algo" virtualName=""
explicitFocusOrder="0" pos="501 22 34 34" min="1" max="32" int="1" explicitFocusOrder="0" pos="501 22 34 34" min="1" max="32" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<GENERICCOMPONENT name="lcdDisplay" id="30c7bb8f114cbbe3" memberName="lcdDisplay" <GENERICCOMPONENT name="lcdDisplay" id="30c7bb8f114cbbe3" memberName="lcdDisplay"
virtualName="" explicitFocusOrder="0" pos="6 87 140 13" class="LcdDisplay" virtualName="" explicitFocusOrder="0" pos="6 87 140 13" class="LcdDisplay"
params=""/> params=""/>
<SLIDER name="output" id="7697fdd54fd1593e" memberName="output" virtualName="" <SLIDER name="output" id="7697fdd54fd1593e" memberName="output" virtualName=""
explicitFocusOrder="0" pos="157 60 34 34" min="0" max="1" int="0" explicitFocusOrder="0" pos="157 60 34 34" min="0" max="1" int="0"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<GENERICCOMPONENT name="vuOutput" id="dac75af912267f51" memberName="vuOutput" virtualName="" <GENERICCOMPONENT name="vuOutput" id="dac75af912267f51" memberName="vuOutput" virtualName=""
explicitFocusOrder="0" pos="6 103 140 8" class="VuMeter" params=""/> explicitFocusOrder="0" pos="6 103 140 8" class="VuMeter" params=""/>
<TEXTBUTTON name="initButton" id="92b278163c42e21d" memberName="initButton" <TEXTBUTTON name="initButton" id="92b278163c42e21d" memberName="initButton"
@@ -787,7 +800,7 @@ BEGIN_JUCER_METADATA
<SLIDER name="tune" id="d22c34aa3363a28a" memberName="tune" virtualName="" <SLIDER name="tune" id="d22c34aa3363a28a" memberName="tune" virtualName=""
explicitFocusOrder="0" pos="190 9 34 34" min="0" max="1" int="0" explicitFocusOrder="0" pos="190 9 34 34" min="0" max="1" int="0"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
</JUCER_COMPONENT> </JUCER_COMPONENT>
END_JUCER_METADATA END_JUCER_METADATA


+ 12
- 12
ports/dexed/source/GlobalEditor.h View File

@@ -1,17 +1,17 @@
/* /*
============================================================================== ==============================================================================
This is an automatically generated GUI class created by the Introjucer!
This is an automatically generated GUI class created by the Projucer!
Be careful when adding custom code to these files, as only the code within Be careful when adding custom code to these files, as only the code within
the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded
and re-saved. and re-saved.
Created with Introjucer version: 3.2.0
Created with Projucer version: 4.3.1
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions"
The Projucer is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright (c) 2015 - ROLI Ltd. Copyright (c) 2015 - ROLI Ltd.
============================================================================== ==============================================================================
@@ -40,8 +40,8 @@ class DexedAudioProcessorEditor;
//[/Comments] //[/Comments]
*/ */
class GlobalEditor : public Component, class GlobalEditor : public Component,
public SliderListener,
public ButtonListener
public Slider::Listener,
public Button::Listener
{ {
public: public:
//============================================================================== //==============================================================================
@@ -61,14 +61,14 @@ public:
void setMonoState(bool state); void setMonoState(bool state);
ProgramSelector *programs; ProgramSelector *programs;
ScopedPointer<Component> midiMonitor; ScopedPointer<Component> midiMonitor;
void mouseDown(const MouseEvent& e) override;
void mouseDown(const MouseEvent& e) override;
//[/UserMethods] //[/UserMethods]
void paint (Graphics& g);
void resized();
void sliderValueChanged (Slider* sliderThatWasMoved);
void buttonClicked (Button* buttonThatWasClicked);
void paint (Graphics& g) override;
void resized() override;
void sliderValueChanged (Slider* sliderThatWasMoved) override;
void buttonClicked (Button* buttonThatWasClicked) override;
@@ -76,7 +76,7 @@ private:
//[UserVariables] -- You can add your own custom variables in this section. //[UserVariables] -- You can add your own custom variables in this section.
DexedAudioProcessorEditor *editor; DexedAudioProcessorEditor *editor;
DexedAudioProcessor *processor; DexedAudioProcessor *processor;
Image background; Image background;
Image imageLight; Image imageLight;
//[/UserVariables] //[/UserVariables]


+ 38
- 29
ports/dexed/source/OperatorEditor.cpp View File

@@ -1,17 +1,17 @@
/* /*
============================================================================== ==============================================================================
This is an automatically generated GUI class created by the Introjucer!
This is an automatically generated GUI class created by the Projucer!
Be careful when adding custom code to these files, as only the code within Be careful when adding custom code to these files, as only the code within
the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded
and re-saved. and re-saved.
Created with Introjucer version: 3.2.0
Created with Projucer version: 4.3.1
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions"
The Projucer is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright (c) 2015 - ROLI Ltd. Copyright (c) 2015 - ROLI Ltd.
============================================================================== ==============================================================================
@@ -30,9 +30,10 @@
class OperatorSwitch : public ToggleButton { class OperatorSwitch : public ToggleButton {
Image image; Image image;
SharedResourcePointer<DXLookNFeel> lookAndFeel;
public : public :
OperatorSwitch() : ToggleButton("opSwitch") { OperatorSwitch() : ToggleButton("opSwitch") {
image = DXLookNFeel::getLookAndFeel()->imageSwitchOperator;
image = lookAndFeel->imageSwitchOperator;
setSize(32, 32); setSize(32, 32);
} }
@@ -197,8 +198,10 @@ OperatorEditor::OperatorEditor ()
//[Constructor] You can add your own custom stuff here.. //[Constructor] You can add your own custom stuff here..
light = DXLookNFeel::getLookAndFeel()->imageLight;
Image tmp = DXLookNFeel::getLookAndFeel()->imageScaling;
SharedResourcePointer<DXLookNFeel> lookAndFeel;
light = lookAndFeel->imageLight;
Image tmp = lookAndFeel->imageScaling;
kbdLeftCurve->addItem("-LN", 1); kbdLeftCurve->addItem("-LN", 1);
kbdLeftCurve->addItem("-EX", 2); kbdLeftCurve->addItem("-EX", 2);
@@ -214,7 +217,7 @@ OperatorEditor::OperatorEditor ()
int posRight[] = {3,2,1,0}; int posRight[] = {3,2,1,0};
kbdRightCurve->setImage(tmp, posRight); kbdRightCurve->setImage(tmp, posRight);
background = DXLookNFeel::getLookAndFeel()->imageOperator;
background = lookAndFeel->imageOperator;
//[/Constructor] //[/Constructor]
} }
@@ -263,12 +266,12 @@ void OperatorEditor::paint (Graphics& g)
//[/UserPrePaint] //[/UserPrePaint]
//[UserPaint] Add your own custom painting code here.. //[UserPaint] Add your own custom painting code here..
if ( opSwitch->getToggleState() ) if ( opSwitch->getToggleState() )
g.setColour(Colours::white); g.setColour(Colours::white);
else else
g.setColour(DXLookNFeel::roundBackground); g.setColour(DXLookNFeel::roundBackground);
g.setFont(Font (30.00f, Font::plain)); g.setFont(Font (30.00f, Font::plain));
g.drawText(opNum, 250, 14, 30, 30, Justification::centred, true); g.drawText(opNum, 250, 14, 30, 30, Justification::centred, true);
@@ -550,9 +553,9 @@ void OperatorEditor::mouseDown(const MouseEvent &event) {
//============================================================================== //==============================================================================
#if 0 #if 0
/* -- Introjucer information section --
/* -- Projucer information section --
This is where the Introjucer stores the metadata that describe this GUI layout, so
This is where the Projucer stores the metadata that describe this GUI layout, so
make changes in here at your peril! make changes in here at your peril!
BEGIN_JUCER_METADATA BEGIN_JUCER_METADATA
@@ -565,47 +568,47 @@ BEGIN_JUCER_METADATA
<SLIDER name="egl1" id="dc070cc41347df47" memberName="s_egl1" virtualName="" <SLIDER name="egl1" id="dc070cc41347df47" memberName="s_egl1" virtualName=""
explicitFocusOrder="0" pos="5 128 34 34" 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" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="egl2" id="66f5195e9c374029" memberName="s_egl2" virtualName="" <SLIDER name="egl2" id="66f5195e9c374029" memberName="s_egl2" virtualName=""
explicitFocusOrder="0" pos="33 129 34 34" 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" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="egl3" id="9d57bd53203dcdb4" memberName="s_egl3" virtualName="" <SLIDER name="egl3" id="9d57bd53203dcdb4" memberName="s_egl3" virtualName=""
explicitFocusOrder="0" pos="61 128 34 34" 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" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="egl4" id="4f7c3ece3ea2cf9c" memberName="s_egl4" virtualName="" <SLIDER name="egl4" id="4f7c3ece3ea2cf9c" memberName="s_egl4" virtualName=""
explicitFocusOrder="0" pos="89 128 34 34" 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" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="egr1" id="2ca8137d80da46fb" memberName="s_egv1" virtualName="" <SLIDER name="egr1" id="2ca8137d80da46fb" memberName="s_egv1" virtualName=""
explicitFocusOrder="0" pos="5 169 34 34" 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" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="egr3" id="4ad6d0c532d15973" memberName="s_egv2" virtualName="" <SLIDER name="egr3" id="4ad6d0c532d15973" memberName="s_egv2" virtualName=""
explicitFocusOrder="0" pos="33 169 34 34" 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" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="egr3" id="8a2027f9ede16b4f" memberName="s_egv3" virtualName="" <SLIDER name="egr3" id="8a2027f9ede16b4f" memberName="s_egv3" virtualName=""
explicitFocusOrder="0" pos="61 169 34 34" 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" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="egr4" id="8c04f1c943d837e8" memberName="s_egv4" virtualName="" <SLIDER name="egr4" id="8c04f1c943d837e8" memberName="s_egv4" virtualName=""
explicitFocusOrder="0" pos="89 169 34 34" 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" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="opLevel" id="f8521c8214fb8993" memberName="opLevel" virtualName="" <SLIDER name="opLevel" id="f8521c8214fb8993" memberName="opLevel" virtualName=""
explicitFocusOrder="0" pos="245 76 34 34" min="0" max="99" int="1" explicitFocusOrder="0" pos="245 76 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="opFine" id="e445aa61bd6cddcb" memberName="opFine" virtualName="" <SLIDER name="opFine" id="e445aa61bd6cddcb" memberName="opFine" virtualName=""
explicitFocusOrder="0" pos="78 24 34 34" 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" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="opCoarse" id="4eec63d30d7488d2" memberName="opCoarse" virtualName="" <SLIDER name="opCoarse" id="4eec63d30d7488d2" memberName="opCoarse" virtualName=""
explicitFocusOrder="0" pos="43 24 34 34" min="0" max="31" int="1" explicitFocusOrder="0" pos="43 24 34 34" min="0" max="31" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<LABEL name="khz" id="eb961eed8902a6fc" memberName="khzDisplay" virtualName="" <LABEL name="khz" id="eb961eed8902a6fc" memberName="khzDisplay" virtualName=""
explicitFocusOrder="0" pos="15 10 95 10" 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" outlineCol="0" edTextCol="ff000000" edBkgCol="0" labelText="1,000 kHz"
@@ -615,34 +618,40 @@ BEGIN_JUCER_METADATA
<SLIDER name="detune" id="f093ec8defca2fc2" memberName="detune" virtualName="" <SLIDER name="detune" id="f093ec8defca2fc2" memberName="detune" virtualName=""
explicitFocusOrder="0" pos="6 24 34 34" min="-7" max="7" int="1" explicitFocusOrder="0" pos="6 24 34 34" min="-7" max="7" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<GENERICCOMPONENT name="envDisplay" id="b18856de924c6340" memberName="envDisplay" <GENERICCOMPONENT name="envDisplay" id="b18856de924c6340" memberName="envDisplay"
virtualName="" explicitFocusOrder="0" pos="16 83 94 30" class="EnvDisplay" virtualName="" explicitFocusOrder="0" pos="16 83 94 30" class="EnvDisplay"
params=""/> params=""/>
<SLIDER name="sclLeftLevel" id="bd6f338ae68e454f" memberName="sclLeftLevel" <SLIDER name="sclLeftLevel" id="bd6f338ae68e454f" memberName="sclLeftLevel"
virtualName="" explicitFocusOrder="0" pos="131 115 34 34" 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" min="0" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="sclRightLevel" id="b9e23ed5187fc7e5" memberName="sclRightLevel" <SLIDER name="sclRightLevel" id="b9e23ed5187fc7e5" memberName="sclRightLevel"
virtualName="" explicitFocusOrder="0" pos="241 115 34 34" 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" min="0" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="sclLvlBrkPt" id="c563ac3116923bbc" memberName="sclLvlBrkPt" <SLIDER name="sclLvlBrkPt" id="c563ac3116923bbc" memberName="sclLvlBrkPt"
virtualName="" explicitFocusOrder="0" pos="178 130 54 24" tooltip="Scale Level Breakpoint" virtualName="" explicitFocusOrder="0" pos="178 130 54 24" tooltip="Scale Level Breakpoint"
min="0" max="99" int="1" style="LinearHorizontal" textBoxPos="NoTextBox" min="0" max="99" int="1" style="LinearHorizontal" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="sclRateScaling" id="f0d17c8e09aa4c49" memberName="sclRateScaling" <SLIDER name="sclRateScaling" id="f0d17c8e09aa4c49" memberName="sclRateScaling"
virtualName="" explicitFocusOrder="0" pos="186 179 34 34" 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" min="0" max="7" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="keyVelSens" id="21795d045d07602b" memberName="keyVelSens" <SLIDER name="keyVelSens" id="21795d045d07602b" memberName="keyVelSens"
virtualName="" explicitFocusOrder="0" pos="204 76 34 34" min="0" virtualName="" explicitFocusOrder="0" pos="204 76 34 34" min="0"
max="7" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" max="7" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="ampModSens" id="634ceaa7b0f81a6c" memberName="ampModSens" <SLIDER name="ampModSens" id="634ceaa7b0f81a6c" memberName="ampModSens"
virtualName="" explicitFocusOrder="0" pos="140 76 34 34" min="0" virtualName="" explicitFocusOrder="0" pos="140 76 34 34" min="0"
max="3" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" max="3" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<GENERICCOMPONENT name="vu" id="6f952594ea99dc1e" memberName="vu" virtualName="" <GENERICCOMPONENT name="vu" id="6f952594ea99dc1e" memberName="vu" virtualName=""
explicitFocusOrder="0" pos="132 52 140 8" class="VuMeter" params=""/> explicitFocusOrder="0" pos="132 52 140 8" class="VuMeter" params=""/>
<TOGGLEBUTTON name="opMode" id="15db8e5c9dd13966" memberName="opMode" virtualName="" <TOGGLEBUTTON name="opMode" id="15db8e5c9dd13966" memberName="opMode" virtualName=""


+ 5
- 5
ports/dexed/source/OperatorEditor.h View File

@@ -1,17 +1,17 @@
/* /*
============================================================================== ==============================================================================
This is an automatically generated GUI class created by the Introjucer!
This is an automatically generated GUI class created by the Projucer!
Be careful when adding custom code to these files, as only the code within Be careful when adding custom code to these files, as only the code within
the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded
and re-saved. and re-saved.
Created with Introjucer version: 3.2.0
Created with Projucer version: 4.3.1
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions"
The Projucer is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright (c) 2015 - ROLI Ltd. Copyright (c) 2015 - ROLI Ltd.
============================================================================== ==============================================================================
@@ -38,8 +38,8 @@
//[/Comments] //[/Comments]
*/ */
class OperatorEditor : public Component, class OperatorEditor : public Component,
public SliderListener,
public ButtonListener
public Slider::Listener,
public Button::Listener
{ {
public: public:
//============================================================================== //==============================================================================


+ 210
- 105
ports/dexed/source/ParamDialog.cpp View File

@@ -1,17 +1,17 @@
/* /*
============================================================================== ==============================================================================
This is an automatically generated GUI class created by the Introjucer!
This is an automatically generated GUI class created by the Projucer!
Be careful when adding custom code to these files, as only the code within Be careful when adding custom code to these files, as only the code within
the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded
and re-saved. and re-saved.
Created with Introjucer version: 3.2.0
Created with Projucer version: 5.2.0
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions"
The Projucer is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright (c) 2015 - ROLI Ltd. Copyright (c) 2015 - ROLI Ltd.
============================================================================== ==============================================================================
@@ -170,6 +170,9 @@ ParamDialog::ParamDialog ()
output.addArray(MidiOutput::getDevices()); output.addArray(MidiOutput::getDevices());
sysexOut->addItemList(output, 2); sysexOut->addItemList(output, 2);
if ( JUCEApplication::isStandaloneApp() ) {
sysexIn->setVisible(false);
}
//[/Constructor] //[/Constructor]
} }
@@ -215,100 +218,191 @@ void ParamDialog::paint (Graphics& g)
g.fillAll (Colour (0xff3c322f)); g.fillAll (Colour (0xff3c322f));
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("Pitch Bend Range"),
20, 16, 276, 23,
Justification::centredLeft, true);
{
int x = 20, y = 16, width = 276, height = 23;
String text (TRANS("Pitch Bend Range"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("Pitch Bend Step"),
20, 56, 276, 23,
Justification::centredLeft, true);
{
int x = 20, y = 56, width = 276, height = 23;
String text (TRANS("Pitch Bend Step"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("DX7 In"),
20, 224, 131, 23,
Justification::centredLeft, true);
{
int x = 20, y = 304, width = 245, height = 23;
String text (TRANS("DX7 Channel"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("DX7 Out"),
20, 264, 131, 23,
Justification::centredLeft, true);
{
int x = 20, y = 156, width = 276, height = 23;
String text (TRANS("Engine Resolution"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("DX7 Channel"),
20, 304, 245, 23,
Justification::centredLeft, true);
{
int x = 22, y = 138, width = 306, height = 1;
Colour fillColour = Colours::black;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.fillRect (x, y, width, height);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("Engine Resolution"),
20, 156, 276, 23,
Justification::centredLeft, true);
{
int x = 22, y = 195, width = 306, height = 1;
Colour fillColour = Colours::black;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.fillRect (x, y, width, height);
}
g.setColour (Colours::black);
g.fillRect (22, 138, 306, 1);
{
int x = 20, y = 96, width = 276, height = 23;
String text (TRANS("Show Keyboard"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::black);
g.fillRect (22, 195, 306, 1);
{
int x = 352, y = 11, width = 1, height = 325;
Colour fillColour = Colours::black;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.fillRect (x, y, width, height);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("Show Keyboard"),
20, 96, 276, 23,
Justification::centredLeft, true);
{
int x = 368, y = 16, width = 276, height = 23;
String text (TRANS("Wheel"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::black);
g.fillRect (352, 11, 1, 325);
{
int x = 368, y = 96, width = 276, height = 23;
String text (TRANS("Foot"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("Wheel"),
368, 16, 276, 23,
Justification::centredLeft, true);
{
int x = 368, y = 56, width = 276, height = 23;
String text (TRANS("Breath"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("Foot"),
368, 96, 276, 23,
Justification::centredLeft, true);
{
int x = 368, y = 136, width = 276, height = 23;
String text (TRANS("After Touch"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("Breath"),
368, 56, 276, 23,
Justification::centredLeft, true);
{
int x = 533, y = 163, width = 48, height = 23;
String text (TRANS("PITCH"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("After Touch"),
368, 136, 276, 23,
Justification::centredLeft, true);
{
int x = 589, y = 163, width = 48, height = 23;
String text (TRANS("AMP"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("PITCH"),
533, 163, 48, 23,
Justification::centredLeft, true);
{
int x = 645, y = 163, width = 48, height = 23;
String text (TRANS("EG BIAS"));
Colour fillColour = Colours::white;
//[UserPaintCustomArguments] Customize the painting arguments here..
//[/UserPaintCustomArguments]
g.setColour (fillColour);
g.setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
g.drawText (text, x, y, width, height,
Justification::centredLeft, true);
}
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("AMP"),
589, 163, 48, 23,
Justification::centredLeft, true);
//[UserPaint] Add your own custom painting code here..
if ( ! JUCEApplication::isStandaloneApp() ) {
g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("DX7 In"),
20, 224, 131, 23,
Justification::centredLeft, true);
}
g.setColour (Colours::white); g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain)); g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("EG BIAS"),
645, 163, 48, 23,
g.drawText (TRANS("DX7 Out"),
20, 264, 131, 23,
Justification::centredLeft, true); Justification::centredLeft, true);
//[UserPaint] Add your own custom painting code here..
//[/UserPaint] //[/UserPaint]
} }
@@ -557,12 +651,13 @@ bool ParamDialog::getDialogValues(Controllers &c, SysexComm &mgr, int *reso, boo
c.refresh(); c.refresh();
ret &= mgr.setInput(sysexIn->getItemText(sysexIn->getSelectedItemIndex()));
if ( ! JUCEApplication::isStandaloneApp() ) {
ret &= mgr.setInput(sysexIn->getItemText(sysexIn->getSelectedItemIndex()));
}
ret &= mgr.setOutput(sysexOut->getItemText(sysexOut->getSelectedItemIndex())); ret &= mgr.setOutput(sysexOut->getItemText(sysexOut->getSelectedItemIndex()));
mgr.setChl(sysexChl->getValue() - 1); mgr.setChl(sysexChl->getValue() - 1);
*reso = engineReso->getSelectedItemIndex(); *reso = engineReso->getSelectedItemIndex();
// *showKey = showKeyboard->getToggleStateValue() == Button::ButtonState::buttonDown;
*showKey = showKeyboard->getToggleState(); *showKey = showKeyboard->getToggleState();
return ret; return ret;
} }
@@ -572,9 +667,9 @@ bool ParamDialog::getDialogValues(Controllers &c, SysexComm &mgr, int *reso, boo
//============================================================================== //==============================================================================
#if 0 #if 0
/* -- Introjucer information section --
/* -- Projucer information section --
This is where the Introjucer stores the metadata that describe this GUI layout, so
This is where the Projucer stores the metadata that describe this GUI layout, so
make changes in here at your peril! make changes in here at your peril!
BEGIN_JUCER_METADATA BEGIN_JUCER_METADATA
@@ -585,45 +680,55 @@ BEGIN_JUCER_METADATA
fixedSize="1" initialWidth="710" initialHeight="350"> fixedSize="1" initialWidth="710" initialHeight="350">
<BACKGROUND backgroundColour="ff3c322f"> <BACKGROUND backgroundColour="ff3c322f">
<TEXT pos="20 16 276 23" fill="solid: ffffffff" hasStroke="0" text="Pitch Bend Range" <TEXT pos="20 16 276 23" fill="solid: ffffffff" hasStroke="0" text="Pitch Bend Range"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<TEXT pos="20 56 276 23" fill="solid: ffffffff" hasStroke="0" text="Pitch Bend Step" <TEXT pos="20 56 276 23" fill="solid: ffffffff" hasStroke="0" text="Pitch Bend Step"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
<TEXT pos="20 224 131 23" fill="solid: ffffffff" hasStroke="0" text="DX7 In"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
<TEXT pos="20 264 131 23" fill="solid: ffffffff" hasStroke="0" text="DX7 Out"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<TEXT pos="20 304 245 23" fill="solid: ffffffff" hasStroke="0" text="DX7 Channel" <TEXT pos="20 304 245 23" fill="solid: ffffffff" hasStroke="0" text="DX7 Channel"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<TEXT pos="20 156 276 23" fill="solid: ffffffff" hasStroke="0" text="Engine Resolution" <TEXT pos="20 156 276 23" fill="solid: ffffffff" hasStroke="0" text="Engine Resolution"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<RECT pos="22 138 306 1" fill="solid: ff000000" hasStroke="0"/> <RECT pos="22 138 306 1" fill="solid: ff000000" hasStroke="0"/>
<RECT pos="22 195 306 1" fill="solid: ff000000" hasStroke="0"/> <RECT pos="22 195 306 1" fill="solid: ff000000" hasStroke="0"/>
<TEXT pos="20 96 276 23" fill="solid: ffffffff" hasStroke="0" text="Show Keyboard" <TEXT pos="20 96 276 23" fill="solid: ffffffff" hasStroke="0" text="Show Keyboard"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<RECT pos="352 11 1 325" fill="solid: ff000000" hasStroke="0"/> <RECT pos="352 11 1 325" fill="solid: ff000000" hasStroke="0"/>
<TEXT pos="368 16 276 23" fill="solid: ffffffff" hasStroke="0" text="Wheel" <TEXT pos="368 16 276 23" fill="solid: ffffffff" hasStroke="0" text="Wheel"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<TEXT pos="368 96 276 23" fill="solid: ffffffff" hasStroke="0" text="Foot" <TEXT pos="368 96 276 23" fill="solid: ffffffff" hasStroke="0" text="Foot"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<TEXT pos="368 56 276 23" fill="solid: ffffffff" hasStroke="0" text="Breath" <TEXT pos="368 56 276 23" fill="solid: ffffffff" hasStroke="0" text="Breath"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<TEXT pos="368 136 276 23" fill="solid: ffffffff" hasStroke="0" text="After Touch" <TEXT pos="368 136 276 23" fill="solid: ffffffff" hasStroke="0" text="After Touch"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<TEXT pos="533 163 48 23" fill="solid: ffffffff" hasStroke="0" text="PITCH" <TEXT pos="533 163 48 23" fill="solid: ffffffff" hasStroke="0" text="PITCH"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<TEXT pos="589 163 48 23" fill="solid: ffffffff" hasStroke="0" text="AMP" <TEXT pos="589 163 48 23" fill="solid: ffffffff" hasStroke="0" text="AMP"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
<TEXT pos="645 163 48 23" fill="solid: ffffffff" hasStroke="0" text="EG BIAS" <TEXT pos="645 163 48 23" fill="solid: ffffffff" hasStroke="0" text="EG BIAS"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
fontname="Default font" fontsize="15" kerning="0" bold="0" italic="0"
justification="33"/>
</BACKGROUND> </BACKGROUND>
<SLIDER name="pitchRange" id="7409be5a8dfaa91" memberName="pitchRange" <SLIDER name="pitchRange" id="7409be5a8dfaa91" memberName="pitchRange"
virtualName="" explicitFocusOrder="0" pos="264 16 72 24" min="0" virtualName="" explicitFocusOrder="0" pos="264 16 72 24" min="0"
max="12" int="1" style="RotaryVerticalDrag" textBoxPos="TextBoxLeft" max="12" int="1" style="RotaryVerticalDrag" textBoxPos="TextBoxLeft"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<SLIDER name="pitchStep" id="b86af4b792e768ca" memberName="pitchStep" <SLIDER name="pitchStep" id="b86af4b792e768ca" memberName="pitchStep"
virtualName="" explicitFocusOrder="0" pos="264 56 72 24" min="0" virtualName="" explicitFocusOrder="0" pos="264 56 72 24" min="0"
max="12" int="1" style="RotaryVerticalDrag" textBoxPos="TextBoxLeft" max="12" int="1" style="RotaryVerticalDrag" textBoxPos="TextBoxLeft"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"
needsCallback="1"/>
<COMBOBOX name="sysexIn" id="3750642d8b5be11" memberName="sysexIn" virtualName="" <COMBOBOX name="sysexIn" id="3750642d8b5be11" memberName="sysexIn" virtualName=""
explicitFocusOrder="0" pos="104 224 224 24" editable="0" layout="33" explicitFocusOrder="0" pos="104 224 224 24" editable="0" layout="33"
items="" textWhenNonSelected="" textWhenNoItems="(no choices)"/> items="" textWhenNonSelected="" textWhenNoItems="(no choices)"/>
@@ -633,7 +738,7 @@ BEGIN_JUCER_METADATA
<SLIDER name="sysexChl" id="7fdc8830f90a7c86" memberName="sysexChl" virtualName="" <SLIDER name="sysexChl" id="7fdc8830f90a7c86" memberName="sysexChl" virtualName=""
explicitFocusOrder="0" pos="264 304 72 24" min="1" max="16" int="1" explicitFocusOrder="0" pos="264 304 72 24" min="1" max="16" int="1"
style="RotaryVerticalDrag" textBoxPos="TextBoxLeft" textBoxEditable="1" style="RotaryVerticalDrag" textBoxPos="TextBoxLeft" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<COMBOBOX name="new combo box" id="4087ff978c3d9e8d" memberName="engineReso" <COMBOBOX name="new combo box" id="4087ff978c3d9e8d" memberName="engineReso"
virtualName="" explicitFocusOrder="0" pos="160 156 168 24" editable="0" virtualName="" explicitFocusOrder="0" pos="160 156 168 24" editable="0"
layout="33" items="Modern (24-bit)&#10;Mark I&#10;OPL Series" layout="33" items="Modern (24-bit)&#10;Mark I&#10;OPL Series"
@@ -644,19 +749,19 @@ BEGIN_JUCER_METADATA
<SLIDER name="whlRange" id="3d6522f5f581e580" memberName="whlRange" virtualName="" <SLIDER name="whlRange" id="3d6522f5f581e580" memberName="whlRange" virtualName=""
explicitFocusOrder="0" pos="448 16 72 24" min="0" max="99" int="1" explicitFocusOrder="0" pos="448 16 72 24" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="TextBoxLeft" textBoxEditable="1" style="RotaryVerticalDrag" textBoxPos="TextBoxLeft" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="ftRange" id="cf553f74c3fb0d12" memberName="ftRange" virtualName="" <SLIDER name="ftRange" id="cf553f74c3fb0d12" memberName="ftRange" virtualName=""
explicitFocusOrder="0" pos="448 56 72 24" min="0" max="99" int="1" explicitFocusOrder="0" pos="448 56 72 24" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="TextBoxLeft" textBoxEditable="1" style="RotaryVerticalDrag" textBoxPos="TextBoxLeft" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="brRange" id="c4aa6814f75016a7" memberName="brRange" virtualName="" <SLIDER name="brRange" id="c4aa6814f75016a7" memberName="brRange" virtualName=""
explicitFocusOrder="0" pos="448 96 72 24" min="0" max="99" int="1" explicitFocusOrder="0" pos="448 96 72 24" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="TextBoxLeft" textBoxEditable="1" style="RotaryVerticalDrag" textBoxPos="TextBoxLeft" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<SLIDER name="atRange" id="d0aa1ebb24284577" memberName="atRange" virtualName="" <SLIDER name="atRange" id="d0aa1ebb24284577" memberName="atRange" virtualName=""
explicitFocusOrder="0" pos="448 136 72 24" min="0" max="99" int="1" explicitFocusOrder="0" pos="448 136 72 24" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="TextBoxLeft" textBoxEditable="1" style="RotaryVerticalDrag" textBoxPos="TextBoxLeft" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
textBoxWidth="80" textBoxHeight="20" skewFactor="1" needsCallback="1"/>
<TOGGLEBUTTON name="whlEg" id="d8242ae592c912a" memberName="whlEg" virtualName="" <TOGGLEBUTTON name="whlEg" id="d8242ae592c912a" memberName="whlEg" virtualName=""
explicitFocusOrder="0" pos="640 16 56 24" buttonText="" connectedEdges="0" explicitFocusOrder="0" pos="640 16 56 24" buttonText="" connectedEdges="0"
needsCallback="1" radioGroupId="0" state="0"/> needsCallback="1" radioGroupId="0" state="0"/>


+ 12
- 15
ports/dexed/source/ParamDialog.h View File

@@ -1,24 +1,23 @@
/* /*
============================================================================== ==============================================================================
This is an automatically generated GUI class created by the Introjucer!
This is an automatically generated GUI class created by the Projucer!
Be careful when adding custom code to these files, as only the code within Be careful when adding custom code to these files, as only the code within
the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded
and re-saved. and re-saved.
Created with Introjucer version: 3.2.0
Created with Projucer version: 5.2.0
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions"
The Projucer is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright (c) 2015 - ROLI Ltd. Copyright (c) 2015 - ROLI Ltd.
============================================================================== ==============================================================================
*/ */
#ifndef __JUCE_HEADER_D00F97AD887A66__
#define __JUCE_HEADER_D00F97AD887A66__
#pragma once
//[Headers] -- You can add your own extra header files here -- //[Headers] -- You can add your own extra header files here --
#include "JuceHeader.h" #include "JuceHeader.h"
@@ -37,9 +36,9 @@
//[/Comments] //[/Comments]
*/ */
class ParamDialog : public Component, class ParamDialog : public Component,
public SliderListener,
public ComboBoxListener,
public ButtonListener
public Slider::Listener,
public ComboBox::Listener,
public Button::Listener
{ {
public: public:
//============================================================================== //==============================================================================
@@ -52,11 +51,11 @@ public:
bool getDialogValues(Controllers &c, SysexComm &mgr, int *reso, bool *showKeyboard); bool getDialogValues(Controllers &c, SysexComm &mgr, int *reso, bool *showKeyboard);
//[/UserMethods] //[/UserMethods]
void paint (Graphics& g);
void resized();
void sliderValueChanged (Slider* sliderThatWasMoved);
void comboBoxChanged (ComboBox* comboBoxThatHasChanged);
void buttonClicked (Button* buttonThatWasClicked);
void paint (Graphics& g) override;
void resized() override;
void sliderValueChanged (Slider* sliderThatWasMoved) override;
void comboBoxChanged (ComboBox* comboBoxThatHasChanged) override;
void buttonClicked (Button* buttonThatWasClicked) override;
@@ -96,5 +95,3 @@ private:
//[EndFile] You can add extra defines here... //[EndFile] You can add extra defines here...
//[/EndFile] //[/EndFile]
#endif // __JUCE_HEADER_D00F97AD887A66__

+ 18
- 11
ports/dexed/source/PluginData.cpp View File

@@ -159,7 +159,6 @@ void Cartridge::unpackProgram(uint8_t *unpackPgm, int idx) {
unpackPgm[142] = (lpms_lfw_lks >> 1) & 7; unpackPgm[142] = (lpms_lfw_lks >> 1) & 7;
unpackPgm[143] = lpms_lfw_lks >> 4; unpackPgm[143] = lpms_lfw_lks >> 4;
memcpy(unpackPgm + 144, bulk + 117, 11); // transpose, name memcpy(unpackPgm + 144, bulk + 117, 11); // transpose, name
unpackPgm[155] = 63; // operator on/off (DEPRECATED)
} }
void DexedAudioProcessor::loadCartridge(Cartridge &sysex) { void DexedAudioProcessor::loadCartridge(Cartridge &sysex) {
@@ -178,19 +177,22 @@ void DexedAudioProcessor::packOpSwitch() {
} }
void DexedAudioProcessor::unpackOpSwitch(char packOpValue) { void DexedAudioProcessor::unpackOpSwitch(char packOpValue) {
controllers.opSwitch[5] = (packOpValue & 32) + 48;
controllers.opSwitch[4] = (packOpValue & 16) + 48;
controllers.opSwitch[3] = (packOpValue & 8) + 48;
controllers.opSwitch[2] = (packOpValue & 4) + 48;
controllers.opSwitch[1] = (packOpValue & 2) + 48;
controllers.opSwitch[0] = (packOpValue & 1) + 48;
controllers.opSwitch[5] = ((packOpValue >> 5) &1) + 48;
controllers.opSwitch[4] = ((packOpValue >> 4) &1) + 48;
controllers.opSwitch[3] = ((packOpValue >> 3) &1) + 48;
controllers.opSwitch[2] = ((packOpValue >> 2) &1) + 48;
controllers.opSwitch[1] = ((packOpValue >> 1) &1) + 48;
controllers.opSwitch[0] = (packOpValue &1) + 48;
} }
void DexedAudioProcessor::updateProgramFromSysex(const uint8_t *rawdata) {
int DexedAudioProcessor::updateProgramFromSysex(const uint8_t *rawdata) {
memcpy(data, rawdata, 155); memcpy(data, rawdata, 155);
unpackOpSwitch(rawdata[155]);
unpackOpSwitch(0x3F);
lfo.reset(data + 137); lfo.reset(data + 137);
triggerAsyncUpdate(); triggerAsyncUpdate();
if (sysexChecksum(rawdata, 155) != rawdata[155]) // rawdata[155] is a checksum in a sysex dump
return 1; // just return 1 if the checksum doesn't match, might be normal if it is loaded from a cartridge
return 0;
} }
void DexedAudioProcessor::setupStartupCart() { void DexedAudioProcessor::setupStartupCart() {
@@ -250,6 +252,7 @@ void DexedAudioProcessor::sendCurrentSysexProgram() {
packOpSwitch(); packOpSwitch();
exportSysexPgm(raw, data); exportSysexPgm(raw, data);
raw[2] = raw[2] | sysexComm.getChl();
if ( sysexComm.isOutputActive() ) { if ( sysexComm.isOutputActive() ) {
sysexComm.send(MidiMessage(raw, 163)); sysexComm.send(MidiMessage(raw, 163));
} }
@@ -259,6 +262,7 @@ void DexedAudioProcessor::sendCurrentSysexCartridge() {
uint8_t raw[4104]; uint8_t raw[4104];
currentCart.saveVoice(raw); currentCart.saveVoice(raw);
raw[2] = raw[2] | sysexComm.getChl();
if ( sysexComm.isOutputActive() ) { if ( sysexComm.isOutputActive() ) {
sysexComm.send(MidiMessage(raw, 4104)); sysexComm.send(MidiMessage(raw, 4104));
} }
@@ -313,6 +317,7 @@ void DexedAudioProcessor::getStateInformation(MemoryBlock& destData) {
dexedState.setAttribute("monoMode", monoMode); dexedState.setAttribute("monoMode", monoMode);
dexedState.setAttribute("engineType", (int) engineType); dexedState.setAttribute("engineType", (int) engineType);
dexedState.setAttribute("masterTune", controllers.masterTune); dexedState.setAttribute("masterTune", controllers.masterTune);
//TRACE("saving opswitch %s", controllers.opSwitch);
dexedState.setAttribute("opSwitch", controllers.opSwitch); dexedState.setAttribute("opSwitch", controllers.opSwitch);
char mod_cfg[15]; char mod_cfg[15];
@@ -333,6 +338,7 @@ void DexedAudioProcessor::getStateInformation(MemoryBlock& destData) {
blobSet.set("program", var((void *) &data, 161)); blobSet.set("program", var((void *) &data, 161));
blobSet.copyToXmlAttributes(*dexedBlob); blobSet.copyToXmlAttributes(*dexedBlob);
copyXmlToBinary(dexedState, destData); copyXmlToBinary(dexedState, destData);
} }
@@ -354,6 +360,7 @@ void DexedAudioProcessor::setStateInformation(const void* source, int sizeInByte
currentProgram = root->getIntAttribute("currentProgram"); currentProgram = root->getIntAttribute("currentProgram");
String opSwitchValue = root->getStringAttribute("opSwitch"); String opSwitchValue = root->getStringAttribute("opSwitch");
//TRACE("opSwitch value %s", opSwitchValue.toRawUTF8());
if ( opSwitchValue.length() != 6 ) { if ( opSwitchValue.length() != 6 ) {
strcpy(controllers.opSwitch, "111111"); strcpy(controllers.opSwitch, "111111");
} else { } else {
@@ -396,8 +403,8 @@ void DexedAudioProcessor::setStateInformation(const void* source, int sizeInByte
cart.load((uint8 *)sysex_blob.getBinaryData()->getData(), 4104); cart.load((uint8 *)sysex_blob.getBinaryData()->getData(), 4104);
loadCartridge(cart); loadCartridge(cart);
memcpy(data, program.getBinaryData()->getData(), 161); memcpy(data, program.getBinaryData()->getData(), 161);
lastStateSave = (long) time(NULL);
lastStateSave = (long) time(NULL);
TRACE("setting VST STATE"); TRACE("setting VST STATE");
updateUI(); updateUI();
} }


+ 5
- 7
ports/dexed/source/PluginEditor.cpp View File

@@ -1,6 +1,6 @@
/** /**
* *
* Copyright (c) 2013-2015 Pascal Gauthier.
* Copyright (c) 2013-2018 Pascal Gauthier.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@@ -25,7 +25,6 @@
#include "SysexComm.h" #include "SysexComm.h"
#include "Dexed.h" #include "Dexed.h"
#include "math.h" #include "math.h"
#include "DXLookNFeel.h"
#include <fstream> #include <fstream>
#include "msfa/fm_op_kernel.h" #include "msfa/fm_op_kernel.h"
@@ -36,13 +35,12 @@ DexedAudioProcessorEditor::DexedAudioProcessorEditor (DexedAudioProcessor* owner
midiKeyboard (ownerFilter->keyboardState, MidiKeyboardComponent::horizontalKeyboard), midiKeyboard (ownerFilter->keyboardState, MidiKeyboardComponent::horizontalKeyboard),
cartManager(this) cartManager(this)
{ {
LookAndFeel::setDefaultLookAndFeel(DXLookNFeel::getLookAndFeel());
setSize(866, ownerFilter->showKeyboard ? 674 : 581); setSize(866, ownerFilter->showKeyboard ? 674 : 581);
processor = ownerFilter; processor = ownerFilter;
background = DXLookNFeel::getLookAndFeel()->background;
lookAndFeel->setDefaultLookAndFeel(lookAndFeel);
background = lookAndFeel->background;
// OPERATORS // OPERATORS
addAndMakeVisible(&(operators[0])); addAndMakeVisible(&(operators[0]));
@@ -95,6 +93,7 @@ DexedAudioProcessorEditor::DexedAudioProcessorEditor (DexedAudioProcessor* owner
DexedAudioProcessorEditor::~DexedAudioProcessorEditor() { DexedAudioProcessorEditor::~DexedAudioProcessorEditor() {
stopTimer(); stopTimer();
processor->unbindUI(); processor->unbindUI();
setLookAndFeel(nullptr);
} }
//============================================================================== //==============================================================================
@@ -161,7 +160,7 @@ void DexedAudioProcessorEditor::parmShow() {
ParamDialog param; ParamDialog param;
param.setColour(AlertWindow::backgroundColourId, Colour(0x32FFFFFF)); param.setColour(AlertWindow::backgroundColourId, Colour(0x32FFFFFF));
param.setDialogValues(processor->controllers, processor->sysexComm, tp, processor->showKeyboard); param.setDialogValues(processor->controllers, processor->sysexComm, tp, processor->showKeyboard);
window.addCustomComponent(&param); window.addCustomComponent(&param);
window.addButton("OK", 0); window.addButton("OK", 0);
window.addButton("Cancel" ,1); window.addButton("Cancel" ,1);
@@ -265,7 +264,6 @@ void DexedAudioProcessorEditor::storeProgram() {
destSysex.getProgramNames(programs); destSysex.getProgramNames(programs);
dialog.addComboBox("Dest", programs, "Program Destination"); dialog.addComboBox("Dest", programs, "Program Destination");
if ( externalFile == NULL ) { if ( externalFile == NULL ) {
StringArray saveAction; StringArray saveAction;
saveAction.add("Store program to DAW plugin song state"); saveAction.add("Store program to DAW plugin song state");


+ 5
- 4
ports/dexed/source/PluginEditor.h View File

@@ -1,6 +1,6 @@
/** /**
* *
* Copyright (c) 2013-2016 Pascal Gauthier.
* Copyright (c) 2013-2018 Pascal Gauthier.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@@ -31,16 +31,17 @@
//============================================================================== //==============================================================================
/** /**
*/ */
class DexedAudioProcessorEditor : public AudioProcessorEditor, public ComboBoxListener, public Timer {
class DexedAudioProcessorEditor : public AudioProcessorEditor, public ComboBox::Listener, public Timer {
MidiKeyboardComponent midiKeyboard; MidiKeyboardComponent midiKeyboard;
OperatorEditor operators[6]; OperatorEditor operators[6];
Colour background; Colour background;
CartManager cartManager; CartManager cartManager;
SharedResourcePointer<DXLookNFeel> lookAndFeel;
public: public:
DexedAudioProcessor *processor; DexedAudioProcessor *processor;
GlobalEditor global; GlobalEditor global;
DexedAudioProcessorEditor (DexedAudioProcessor* ownerFilter); DexedAudioProcessorEditor (DexedAudioProcessor* ownerFilter);
~DexedAudioProcessorEditor(); ~DexedAudioProcessorEditor();
void timerCallback(); void timerCallback();


+ 20
- 1
ports/dexed/source/PluginParam.cpp View File

@@ -26,6 +26,20 @@
#include "PluginEditor.h" #include "PluginEditor.h"
#include "Dexed.h" #include "Dexed.h"
// Async updater
class CtrlUpdate : public CallbackMessage {
Ctrl *ctrl;
float value;
public:
CtrlUpdate(Ctrl *ctrl, float value) {
this->ctrl = ctrl;
this->value = value;
}
void messageCallback() {
ctrl->publishValue(value);
}
};
// ************************************************************************ // ************************************************************************
// Custom displays // Custom displays
@@ -237,6 +251,11 @@ void Ctrl::unbind() {
} }
} }
void Ctrl::publishValueAsync(float value) {
CtrlUpdate *update = new CtrlUpdate(this, value);
update->post();
}
void Ctrl::publishValue(float value) { void Ctrl::publishValue(float value) {
parent->beginParameterChangeGesture(idx); parent->beginParameterChangeGesture(idx);
parent->setParameterNotifyingHost(idx, value); parent->setParameterNotifyingHost(idx, value);
@@ -637,7 +656,7 @@ void DexedAudioProcessor::setCurrentProgram(int index) {
index = index > 31 ? 31 : index; index = index > 31 ? 31 : index;
currentCart.unpackProgram(data, index); currentCart.unpackProgram(data, index);
strcpy(controllers.opSwitch, "111111");
unpackOpSwitch(0x3F);
lfo.reset(data + 137); lfo.reset(data + 137);
currentProgram = index; currentProgram = index;
triggerAsyncUpdate(); triggerAsyncUpdate();


+ 4
- 2
ports/dexed/source/PluginParam.h View File

@@ -25,7 +25,7 @@
class DexedAudioProcessor; class DexedAudioProcessor;
class Ctrl : public SliderListener, public ButtonListener, public ComboBoxListener, public MouseListener {
class Ctrl : public Slider::Listener, public Button::Listener, public ComboBox::Listener, public MouseListener {
protected: protected:
/** /**
* Binded components of the UI * Binded components of the UI
@@ -46,6 +46,9 @@ public:
// use this to signal a parameter change to the host // use this to signal a parameter change to the host
void publishValue(float value); void publishValue(float value);
// use this to publish a new value to be computed on the event thread
void publishValueAsync(float value);
/** /**
* Host value is related 0.0 to 1.0 values * Host value is related 0.0 to 1.0 values
*/ */
@@ -104,7 +107,6 @@ public:
void updateDisplayName(); void updateDisplayName();
}; };
struct OperatorCtrl { struct OperatorCtrl {
ScopedPointer<CtrlDX> egRate[4]; ScopedPointer<CtrlDX> egRate[4];
ScopedPointer<CtrlDX> egLevel[4]; ScopedPointer<CtrlDX> egLevel[4];


+ 64
- 23
ports/dexed/source/PluginProcessor.cpp View File

@@ -1,6 +1,6 @@
/** /**
* *
* Copyright (c) 2013-2017 Pascal Gauthier.
* Copyright (c) 2013-2018 Pascal Gauthier.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@@ -34,9 +34,39 @@
#include "msfa/aligned_buf.h" #include "msfa/aligned_buf.h"
#include "msfa/fm_op_kernel.h" #include "msfa/fm_op_kernel.h"
#if JUCE_MSVC
#pragma comment (lib, "kernel32.lib")
#pragma comment (lib, "user32.lib")
#pragma comment (lib, "wininet.lib")
#pragma comment (lib, "advapi32.lib")
#pragma comment (lib, "ws2_32.lib")
#pragma comment (lib, "version.lib")
#pragma comment (lib, "shlwapi.lib")
#pragma comment (lib, "winmm.lib")
#pragma comment (lib, "DbgHelp.lib")
#pragma comment (lib, "Imm32.lib")
#ifdef _NATIVE_WCHAR_T_DEFINED
#ifdef _DEBUG
#pragma comment (lib, "comsuppwd.lib")
#else
#pragma comment (lib, "comsuppw.lib")
#endif
#else
#ifdef _DEBUG
#pragma comment (lib, "comsuppd.lib")
#else
#pragma comment (lib, "comsupp.lib")
#endif
#endif
#endif
//============================================================================== //==============================================================================
DexedAudioProcessor::DexedAudioProcessor() { DexedAudioProcessor::DexedAudioProcessor() {
#ifdef DEBUG #ifdef DEBUG
// avoid creating the log file if it is in standalone mode
Logger *tmp = Logger::getCurrentLogger(); Logger *tmp = Logger::getCurrentLogger();
if ( tmp == NULL ) { if ( tmp == NULL ) {
Logger::setCurrentLogger(FileLogger::createDateStampedLogger("Dexed", "DebugSession-", "log", "DexedAudioProcessor Created")); Logger::setCurrentLogger(FileLogger::createDateStampedLogger("Dexed", "DebugSession-", "log", "DexedAudioProcessor Created"));
@@ -56,8 +86,6 @@ DexedAudioProcessor::DexedAudioProcessor() {
monoMode = 0; monoMode = 0;
resolvAppDir(); resolvAppDir();
TRACE("controler %s", controllers.opSwitch);
initCtrl(); initCtrl();
sendSysexChange = true; sendSysexChange = true;
@@ -71,7 +99,7 @@ DexedAudioProcessor::DexedAudioProcessor() {
controllers.values_[kControllerPitchRange] = 3; controllers.values_[kControllerPitchRange] = 3;
controllers.values_[kControllerPitchStep] = 0; controllers.values_[kControllerPitchStep] = 0;
controllers.masterTune = 0; controllers.masterTune = 0;
loadPreference(); loadPreference();
for (int note = 0; note < MAX_ACTIVE_NOTES; ++note) { for (int note = 0; note < MAX_ACTIVE_NOTES; ++note) {
@@ -85,6 +113,11 @@ DexedAudioProcessor::DexedAudioProcessor() {
} }
DexedAudioProcessor::~DexedAudioProcessor() { DexedAudioProcessor::~DexedAudioProcessor() {
Logger *tmp = Logger::getCurrentLogger();
if ( tmp != NULL ) {
Logger::setCurrentLogger(NULL);
delete tmp;
}
TRACE("Bye"); TRACE("Bye");
} }
@@ -109,7 +142,8 @@ void DexedAudioProcessor::prepareToPlay(double sampleRate, int samplesPerBlock)
controllers.foot_cc = 0; controllers.foot_cc = 0;
controllers.breath_cc = 0; controllers.breath_cc = 0;
controllers.aftertouch_cc = 0; controllers.aftertouch_cc = 0;
controllers.refresh();
sustain = false; sustain = false;
extra_buf_size = 0; extra_buf_size = 0;
@@ -262,6 +296,11 @@ bool DexedAudioProcessor::getNextEvent(MidiBuffer::Iterator* iter,const int samp
} }
void DexedAudioProcessor::processMidiMessage(const MidiMessage *msg) { void DexedAudioProcessor::processMidiMessage(const MidiMessage *msg) {
if ( msg->isSysEx() ) {
handleIncomingMidiMessage(NULL, *msg);
return;
}
const uint8 *buf = msg->getRawData(); const uint8 *buf = msg->getRawData();
uint8_t cmd = buf[0]; uint8_t cmd = buf[0];
@@ -302,10 +341,18 @@ void DexedAudioProcessor::processMidiMessage(const MidiMessage *msg) {
} }
} }
break; break;
case 123:
case 120:
panic(); panic();
break; break;
}
case 123:
for (int note = 0; note < MAX_ACTIVE_NOTES; note++) {
if (voices[note].keydown)
keyup(voices[note].midi_note);
}
break;
default:
TRACE("handle CC %d %d", ctrl, value);
}
} }
return; return;
@@ -321,13 +368,13 @@ void DexedAudioProcessor::processMidiMessage(const MidiMessage *msg) {
} }
switch (cmd) {
case 0xe0 :
controllers.values_[kControllerPitch] = buf[1] | (buf[2] << 7);
break;
if ( cmd & 0xe0 ) {
controllers.values_[kControllerPitch] = buf[1] | (buf[2] << 7);
} }
} }
#define ACT(v) (v.keydown ? v.midi_note : -1)
void DexedAudioProcessor::keydown(uint8_t pitch, uint8_t velo) { void DexedAudioProcessor::keydown(uint8_t pitch, uint8_t velo) {
if ( velo == 0 ) { if ( velo == 0 ) {
keyup(pitch); keyup(pitch);
@@ -377,6 +424,7 @@ void DexedAudioProcessor::keydown(uint8_t pitch, uint8_t velo) {
} }
voices[note].live = true; voices[note].live = true;
//TRACE("activate %d [ %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d ]", pitch, ACT(voices[0]), ACT(voices[1]), ACT(voices[2]), ACT(voices[3]), ACT(voices[4]), ACT(voices[5]), ACT(voices[6]), ACT(voices[7]), ACT(voices[8]), ACT(voices[9]), ACT(voices[10]), ACT(voices[11]), ACT(voices[12]), ACT(voices[13]), ACT(voices[14]), ACT(voices[15]));
} }
void DexedAudioProcessor::keyup(uint8_t pitch) { void DexedAudioProcessor::keyup(uint8_t pitch) {
@@ -386,13 +434,14 @@ void DexedAudioProcessor::keyup(uint8_t pitch) {
for (note=0; note<MAX_ACTIVE_NOTES; ++note) { for (note=0; note<MAX_ACTIVE_NOTES; ++note) {
if ( voices[note].midi_note == pitch && voices[note].keydown ) { if ( voices[note].midi_note == pitch && voices[note].keydown ) {
voices[note].keydown = false; voices[note].keydown = false;
//TRACE("deactivate %d [ %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d ]", pitch, ACT(voices[0]), ACT(voices[1]), ACT(voices[2]), ACT(voices[3]), ACT(voices[4]), ACT(voices[5]), ACT(voices[6]), ACT(voices[7]), ACT(voices[8]), ACT(voices[9]), ACT(voices[10]), ACT(voices[11]), ACT(voices[12]), ACT(voices[13]), ACT(voices[14]), ACT(voices[15]));
break; break;
} }
} }
// note not found ? // note not found ?
if ( note >= MAX_ACTIVE_NOTES ) { if ( note >= MAX_ACTIVE_NOTES ) {
TRACE("note-off not found???");
TRACE("note found ??? %d [ %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d ]", pitch, ACT(voices[0]), ACT(voices[1]), ACT(voices[2]), ACT(voices[3]), ACT(voices[4]), ACT(voices[5]), ACT(voices[6]), ACT(voices[7]), ACT(voices[8]), ACT(voices[9]), ACT(voices[10]), ACT(voices[11]), ACT(voices[12]), ACT(voices[13]), ACT(voices[14]), ACT(voices[15]));
return; return;
} }
@@ -406,7 +455,7 @@ void DexedAudioProcessor::keyup(uint8_t pitch) {
} }
} }
if ( highNote != -1 ) {
if ( highNote != -1 && voices[note].live ) {
voices[note].live = false; voices[note].live = false;
voices[target].live = true; voices[target].live = true;
voices[target].dx7_note->transferState(*voices[note].dx7_note); voices[target].dx7_note->transferState(*voices[note].dx7_note);
@@ -460,8 +509,8 @@ void DexedAudioProcessor::handleIncomingMidiMessage(MidiInput* source, const Mid
TRACE("wrong single voice datasize %d", sz); TRACE("wrong single voice datasize %d", sz);
return; return;
} }
updateProgramFromSysex(buf+6);
if ( updateProgramFromSysex(buf+6) )
TRACE("bad checksum when updating program from sysex message");
} }
// 32 voice dump // 32 voice dump
@@ -580,19 +629,11 @@ bool DexedAudioProcessor::isOutputChannelStereoPair (int index) const {
} }
bool DexedAudioProcessor::acceptsMidi() const { bool DexedAudioProcessor::acceptsMidi() const {
#if JucePlugin_WantsMidiInput
return true; return true;
#else
return false;
#endif
} }
bool DexedAudioProcessor::producesMidi() const { bool DexedAudioProcessor::producesMidi() const {
#if JucePlugin_ProducesMidiOutput
return true; return true;
#else
return false;
#endif
} }
bool DexedAudioProcessor::silenceInProducesSilenceOut() const { bool DexedAudioProcessor::silenceInProducesSilenceOut() const {


+ 1
- 1
ports/dexed/source/PluginProcessor.h View File

@@ -189,7 +189,7 @@ public :
bool hasEditor() const; bool hasEditor() const;
void updateUI(); void updateUI();
bool peekVoiceStatus(); bool peekVoiceStatus();
void updateProgramFromSysex(const uint8 *rawdata);
int updateProgramFromSysex(const uint8 *rawdata);
void setupStartupCart(); void setupStartupCart();
//============================================================================== //==============================================================================


+ 5
- 18
ports/dexed/source/ProgramListBox.cpp View File

@@ -29,7 +29,6 @@ ProgramListBox::ProgramListBox(const String name, int numCols) : Component(name)
selectedPgm = -1; selectedPgm = -1;
hasContent = false; hasContent = false;
dragCandidate = -1; dragCandidate = -1;
pgmCandidate = -1;
readOnly = false; readOnly = false;
programNames.clear(); programNames.clear();
} }
@@ -103,35 +102,23 @@ int ProgramListBox::programPosition(int x, int y) {
} }
void ProgramListBox::mouseDown(const MouseEvent &event) { void ProgramListBox::mouseDown(const MouseEvent &event) {
pgmCandidate = -1;
if ( ! hasContent ) if ( ! hasContent )
return; return;
int pos = programPosition(event.getMouseDownX(), event.getMouseDownY());
if ( event.mods.isRightButtonDown() || event.mods.isAnyModifierKeyDown() ) { if ( event.mods.isRightButtonDown() || event.mods.isAnyModifierKeyDown() ) {
int pos = programPosition(event.getMouseDownX(), event.getMouseDownY());
if ( listener != nullptr )
listener->programRightClicked(this, pos);
listener->programRightClicked(this, pos);
return; return;
} }
pgmCandidate = programPosition(event.getMouseDownX(), event.getMouseDownY());
listener->programSelected(this, pos);
} }
void ProgramListBox::mouseUp(const MouseEvent &event) { void ProgramListBox::mouseUp(const MouseEvent &event) {
if ( pgmCandidate == -1 )
return;
int pos = programPosition(event.getMouseDownX(), event.getMouseDownY());
if ( pgmCandidate == pos) {
if ( listener != nullptr )
listener->programSelected(this, pgmCandidate);
pgmCandidate = -1;
}
} }
void ProgramListBox::mouseDrag(const MouseEvent &event) { void ProgramListBox::mouseDrag(const MouseEvent &event) {
pgmCandidate = -1;
if ( ! hasContent ) if ( ! hasContent )
return; return;
if ( dragCandidate != -1 ) if ( dragCandidate != -1 )


+ 0
- 1
ports/dexed/source/ProgramListBox.h View File

@@ -45,7 +45,6 @@ class ProgramListBox : public Component, public DragAndDropTarget {
Cartridge cartContent; Cartridge cartContent;
int dragCandidate; int dragCandidate;
int pgmCandidate;
public: public:
StringArray programNames; StringArray programNames;


+ 36
- 36
ports/dexed/source/msfa/aligned_buf.h View File

@@ -1,36 +1,36 @@
/*
* Copyright 2013 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// A convenient wrapper for buffers with alignment constraints
// Note that if we were on C++11, we'd use aligned_storage or somesuch.
#ifndef __ALIGNED_BUF_H
#define __ALIGNED_BUF_H
#include<stddef.h>
template<typename T, size_t size, size_t alignment = 16>
class AlignedBuf {
public:
T *get() {
return (T *)((((intptr_t)storage_) + alignment - 1) & -alignment);
}
private:
unsigned char storage_[size * sizeof(T) + alignment];
};
#endif // __ALIGNED_BUF_H
/*
* Copyright 2013 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// A convenient wrapper for buffers with alignment constraints
// Note that if we were on C++11, we'd use aligned_storage or somesuch.
#ifndef __ALIGNED_BUF_H
#define __ALIGNED_BUF_H
#include<stddef.h>
template<typename T, size_t size, size_t alignment = 16>
class AlignedBuf {
public:
T *get() {
return (T *)((((intptr_t)storage_) + alignment - 1) & -alignment);
}
private:
unsigned char storage_[size * sizeof(T) + alignment];
};
#endif // __ALIGNED_BUF_H

+ 126
- 126
ports/dexed/source/msfa/controllers.h View File

@@ -1,126 +1,126 @@
/*
* Copyright 2013 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __CONTROLLERS_H
#define __CONTROLLERS_H
#include "synth.h"
#include "../Dexed.h"
#include <stdio.h>
#include <string.h>
#ifdef _WIN32
#define snprintf _snprintf
#endif
// State of MIDI controllers
const int kControllerPitch = 128;
const int kControllerPitchRange = 129;
const int kControllerPitchStep = 130;
class FmCore;
struct FmMod {
int range;
bool pitch;
bool amp;
bool eg;
FmMod() {
range = 0;
pitch = false;
amp = false;
eg = false;
}
void parseConfig(const char *cfg) {
int r = 0, p = 0, a = 0, e = 0;
sscanf(cfg, "%d %d %d %d", &r, &p, &a, &e);
range = r < 0 && r > 127 ? 0 : r;
pitch = p != 0;
amp = a != 0;
eg = e != 0;
}
void setConfig(char *cfg) {
snprintf(cfg, 13, "%d %d %d %d", range, pitch, amp, eg);
}
};
class Controllers {
void applyMod(int cc, FmMod &mod) {
float range = 0.01 * mod.range;
int total = cc * range;
if ( mod.amp )
amp_mod = max(amp_mod, total);
if ( mod.pitch )
pitch_mod = max(pitch_mod, total);
if ( mod.eg )
eg_mod = max(eg_mod, total);
}
public:
int values_[131];
char opSwitch[7];
int amp_mod;
int pitch_mod;
int eg_mod;
int aftertouch_cc;
int breath_cc;
int foot_cc;
int modwheel_cc;
int masterTune;
FmMod wheel;
FmMod foot;
FmMod breath;
FmMod at;
Controllers() {
amp_mod = 0;
pitch_mod = 0;
eg_mod = 0;
strcpy(opSwitch, "111111");
}
void refresh() {
amp_mod = 0;
pitch_mod = 0;
eg_mod = 0;
applyMod(modwheel_cc, wheel);
applyMod(breath_cc, breath);
applyMod(foot_cc, foot);
applyMod(aftertouch_cc, at);
if ( ! ((wheel.eg || foot.eg) || (breath.eg || at.eg)) )
eg_mod = 127;
TRACE("amp_mod %d pitch_mod %d", amp_mod, pitch_mod);
}
FmCore *core;
};
#endif // __CONTROLLERS_H
/*
* Copyright 2013 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __CONTROLLERS_H
#define __CONTROLLERS_H
#include "synth.h"
#include "../Dexed.h"
#include <stdio.h>
#include <string.h>
#ifdef _WIN32
#define snprintf _snprintf
#endif
// State of MIDI controllers
const int kControllerPitch = 128;
const int kControllerPitchRange = 129;
const int kControllerPitchStep = 130;
class FmCore;
struct FmMod {
int range;
bool pitch;
bool amp;
bool eg;
FmMod() {
range = 0;
pitch = false;
amp = false;
eg = false;
}
void parseConfig(const char *cfg) {
int r = 0, p = 0, a = 0, e = 0;
sscanf(cfg, "%d %d %d %d", &r, &p, &a, &e);
range = r < 0 && r > 127 ? 0 : r;
pitch = p != 0;
amp = a != 0;
eg = e != 0;
}
void setConfig(char *cfg) {
snprintf(cfg, 13, "%d %d %d %d", range, pitch, amp, eg);
}
};
class Controllers {
void applyMod(int cc, FmMod &mod) {
float range = 0.01 * mod.range;
int total = cc * range;
if ( mod.amp )
amp_mod = max(amp_mod, total);
if ( mod.pitch )
pitch_mod = max(pitch_mod, total);
if ( mod.eg )
eg_mod = max(eg_mod, total);
}
public:
int values_[131];
char opSwitch[7];
int amp_mod;
int pitch_mod;
int eg_mod;
int aftertouch_cc;
int breath_cc;
int foot_cc;
int modwheel_cc;
int masterTune;
FmMod wheel;
FmMod foot;
FmMod breath;
FmMod at;
Controllers() {
amp_mod = 0;
pitch_mod = 0;
eg_mod = 0;
strcpy(opSwitch, "111111");
}
void refresh() {
amp_mod = 0;
pitch_mod = 0;
eg_mod = 0;
applyMod(modwheel_cc, wheel);
applyMod(breath_cc, breath);
applyMod(foot_cc, foot);
applyMod(aftertouch_cc, at);
if ( ! ((wheel.eg || foot.eg) || (breath.eg || at.eg)) )
eg_mod = 127;
TRACE("controllers refresh>>> amp_mod %d pitch_mod %d", amp_mod, pitch_mod);
}
FmCore *core;
};
#endif // __CONTROLLERS_H

+ 25
- 12
ports/dexed/source/msfa/dx7note.cc View File

@@ -44,14 +44,20 @@ int32_t osc_freq(int midinote, int mode, int coarse, int fine, int detune) {
int32_t logfreq; int32_t logfreq;
if (mode == 0) { if (mode == 0) {
logfreq = midinote_to_logfreq(midinote); logfreq = midinote_to_logfreq(midinote);
// could use more precision, closer enough for now. those numbers comes from my DX7
double detuneRatio = 0.0209 * exp(-0.396 * (((float)logfreq)/(1<<24))) / 7;
logfreq += detuneRatio * logfreq * (detune - 7);
logfreq += coarsemul[coarse & 31]; logfreq += coarsemul[coarse & 31];
if (fine) { if (fine) {
// (1 << 24) / log(2) // (1 << 24) / log(2)
logfreq += (int32_t)floor(24204406.323123 * log(1 + 0.01 * fine) + 0.5); logfreq += (int32_t)floor(24204406.323123 * log(1 + 0.01 * fine) + 0.5);
} }
// This was measured at 7.213Hz per count at 9600Hz, but the exact
// value is somewhat dependent on midinote. Close enough for now.
logfreq += 12606 * (detune - 7);
// // This was measured at 7.213Hz per count at 9600Hz, but the exact
// // value is somewhat dependent on midinote. Close enough for now.
// //logfreq += 12606 * (detune -7);
} else { } else {
// ((1 << 24) * log(10) / log(2) * .01) << 3 // ((1 << 24) * log(10) / log(2) * .01) << 3
logfreq = (4458616 * ((coarse & 3) * 100 + fine)) >> 3; logfreq = (4458616 * ((coarse & 3) * 100 + fine)) >> 3;
@@ -164,6 +170,7 @@ void Dx7Note::init(const uint8_t patch[156], int midinote, int velocity) {
int fine = patch[off + 19]; int fine = patch[off + 19];
int detune = patch[off + 20]; int detune = patch[off + 20];
int32_t freq = osc_freq(midinote, mode, coarse, fine, detune); int32_t freq = osc_freq(midinote, mode, coarse, fine, detune);
opMode[op] = mode;
basepitch_[op] = freq; basepitch_[op] = freq;
ampmodsens_[op] = ampmodsenstab[patch[off + 14] & 3]; ampmodsens_[op] = ampmodsenstab[patch[off + 14] & 3];
} }
@@ -186,7 +193,7 @@ void Dx7Note::compute(int32_t *buf, int32_t lfo_val, int32_t lfo_delay, const Co
int32_t senslfo = pitchmodsens_ * (lfo_val - (1 << 23)); int32_t senslfo = pitchmodsens_ * (lfo_val - (1 << 23));
int32_t pmod_1 = (((int64_t) pmd) * (int64_t) senslfo) >> 39; int32_t pmod_1 = (((int64_t) pmd) * (int64_t) senslfo) >> 39;
pmod_1 = abs(pmod_1); pmod_1 = abs(pmod_1);
int32_t pmod_2 = ((int64_t)ctrls->pitch_mod * (int64_t)senslfo) >> 14;
int32_t pmod_2 = (int32_t)(((int64_t)ctrls->pitch_mod * (int64_t)senslfo) >> 14);
pmod_2 = abs(pmod_2); pmod_2 = abs(pmod_2);
int32_t pitch_mod = max(pmod_1, pmod_2); int32_t pitch_mod = max(pmod_1, pmod_2);
pitch_mod = pitchenv_.getsample() + (pitch_mod * (senslfo < 0 ? -1 : 1)); pitch_mod = pitchenv_.getsample() + (pitch_mod * (senslfo < 0 ? -1 : 1));
@@ -203,13 +210,14 @@ void Dx7Note::compute(int32_t *buf, int32_t lfo_val, int32_t lfo_delay, const Co
pb = (pb * (8191 / stp)) << 11; pb = (pb * (8191 / stp)) << 11;
} }
} }
pitch_mod += pb;
pitch_mod += ctrls->masterTune;
int32_t pitch_base = pb + ctrls->masterTune;
pitch_mod += pitch_base;
// ==== AMP MOD ==== // ==== AMP MOD ====
uint32_t amod_1 = ((int64_t) ampmoddepth_ * (int64_t) lfo_delay) >> 8; // Q24 :D
amod_1 = ((int64_t) amod_1 * (int64_t) lfo_val) >> 24;
uint32_t amod_2 = ((int64_t) ctrls->amp_mod * (int64_t) lfo_val) >> 7; // Q?? :|
lfo_val = (1<<24) - lfo_val;
uint32_t amod_1 = (uint32_t)(((int64_t) ampmoddepth_ * (int64_t) lfo_delay) >> 8); // Q24 :D
amod_1 = (uint32_t)(((int64_t) amod_1 * (int64_t) lfo_val) >> 24);
uint32_t amod_2 = (uint32_t)(((int64_t) ctrls->amp_mod * (int64_t) lfo_val) >> 7); // Q?? :|
uint32_t amd_mod = max(amod_1, amod_2); uint32_t amd_mod = max(amod_1, amod_2);
// ==== EG AMP MOD ==== // ==== EG AMP MOD ====
@@ -223,15 +231,19 @@ void Dx7Note::compute(int32_t *buf, int32_t lfo_val, int32_t lfo_delay, const Co
params_[op].level_in = 0; params_[op].level_in = 0;
} else { } else {
//int32_t gain = pow(2, 10 + level * (1.0 / (1 << 24))); //int32_t gain = pow(2, 10 + level * (1.0 / (1 << 24)));
params_[op].freq = Freqlut::lookup(basepitch_[op] + pitch_mod);
if ( opMode[op] )
params_[op].freq = Freqlut::lookup(basepitch_[op] + pitch_base);
else
params_[op].freq = Freqlut::lookup(basepitch_[op] + pitch_mod);
int32_t level = env_[op].getsample(); int32_t level = env_[op].getsample();
if (ampmodsens_[op] != 0) { if (ampmodsens_[op] != 0) {
uint32_t sensamp = ((uint64_t) amd_mod) * ((uint64_t) ampmodsens_[op]) >> 24;
uint32_t sensamp = (uint32_t)(((uint64_t) amd_mod) * ((uint64_t) ampmodsens_[op]) >> 24);
// TODO: mehhh.. this needs some real tuning. // TODO: mehhh.. this needs some real tuning.
uint32_t pt = exp(((float)sensamp)/262144 * 0.07 + 12.2); uint32_t pt = exp(((float)sensamp)/262144 * 0.07 + 12.2);
uint32_t ldiff = ((uint64_t)level) * (((uint64_t)pt<<4)) >> 28;
uint32_t ldiff = (uint32_t)(((uint64_t)level) * (((uint64_t)pt<<4)) >> 28);
level -= ldiff; level -= ldiff;
} }
params_[op].level_in = level; params_[op].level_in = level;
@@ -258,6 +270,7 @@ void Dx7Note::update(const uint8_t patch[156], int midinote, int velocity) {
int detune = patch[off + 20]; int detune = patch[off + 20];
basepitch_[op] = osc_freq(midinote, mode, coarse, fine, detune); basepitch_[op] = osc_freq(midinote, mode, coarse, fine, detune);
ampmodsens_[op] = ampmodsenstab[patch[off + 14] & 3]; ampmodsens_[op] = ampmodsenstab[patch[off + 14] & 3];
opMode[op] = mode;
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
rates[i] = patch[off + i]; rates[i] = patch[off + i];


+ 1
- 0
ports/dexed/source/msfa/dx7note.h View File

@@ -66,6 +66,7 @@ private:
int32_t fb_buf_[2]; int32_t fb_buf_[2];
int32_t fb_shift_; int32_t fb_shift_;
int32_t ampmodsens_[6]; int32_t ampmodsens_[6];
int32_t opMode[6];
int ampmoddepth_; int ampmoddepth_;
int algorithm_; int algorithm_;


+ 94
- 47
ports/dexed/source/msfa/env.cc View File

@@ -24,16 +24,31 @@
//using namespace std; //using namespace std;
uint32_t Env::sr_multiplier = (1<<24); uint32_t Env::sr_multiplier = (1<<24);
const int levellut[] = { const int levellut[] = {
0, 5, 9, 13, 17, 20, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 42, 43, 45, 46 0, 5, 9, 13, 17, 20, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 42, 43, 45, 46
};
void Env::init_sr(double sampleRate) {
};

#ifdef ACCURATE_ENVELOPE
const int statics[] = {
1764000, 1764000, 1411200, 1411200, 1190700, 1014300, 992250,
882000, 705600, 705600, 584325, 507150, 502740, 441000, 418950,
352800, 308700, 286650, 253575, 220500, 220500, 176400, 145530,
145530, 125685, 110250, 110250, 88200, 88200, 74970, 61740,
61740, 55125, 48510, 44100, 37485, 31311, 30870, 27562, 27562,
22050, 18522, 17640, 15435, 14112, 13230, 11025, 9261, 9261, 7717,
6615, 6615, 5512, 5512, 4410, 3969, 3969, 3439, 2866, 2690, 2249,
1984, 1896, 1808, 1411, 1367, 1234, 1146, 926, 837, 837, 705,
573, 573, 529, 441, 441
// and so on, I stopped measuring after R=76 (needs to be double-checked anyway)
};
#endif

void Env::init_sr(double sampleRate) {
sr_multiplier = (44100.0 / sampleRate) * (1<<24); sr_multiplier = (44100.0 / sampleRate) * (1<<24);
} }
void Env::init(const int r[4], const int l[4], int32_t ol, int rate_scaling) {
void Env::init(const int r[4], const int l[4], int ol, int rate_scaling) {
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
rates_[i] = r[i]; rates_[i] = r[i];
levels_[i] = l[i]; levels_[i] = l[i];
@@ -41,33 +56,47 @@ void Env::init(const int r[4], const int l[4], int32_t ol, int rate_scaling) {
outlevel_ = ol; outlevel_ = ol;
rate_scaling_ = rate_scaling; rate_scaling_ = rate_scaling;
level_ = 0; level_ = 0;
down_ = true;
down_ = true;
advance(0); advance(0);
} }
int32_t Env::getsample() {
if (ix_ < 3 || ((ix_ < 4) && !down_)) {
if (rising_) {
const int jumptarget = 1716;
if (level_ < (jumptarget << 16)) {
level_ = jumptarget << 16;
}
level_ += (((17 << 24) - level_) >> 24) * inc_;
// TODO: should probably be more accurate when inc is large
if (level_ >= targetlevel_) {
level_ = targetlevel_;
advance(ix_ + 1);
}
} else { // !rising
level_ -= inc_;
if (level_ <= targetlevel_) {
level_ = targetlevel_;
advance(ix_ + 1);
}
}
}
int32_t Env::getsample() {
#ifdef ACCURATE_ENVELOPE
if (staticcount_) {
staticcount_ -= N;
if (staticcount_ <= 0) {
staticcount_ = 0;
advance(ix_ + 1);
}
}
#endif

if (ix_ < 3 || ((ix_ < 4) && !down_)) {
if (rising_) {
const int jumptarget = 1716;
if (level_ < (jumptarget << 16)) {
level_ = jumptarget << 16;
}
level_ += (((17 << 24) - level_) >> 24) * inc_;
// TODO: should probably be more accurate when inc is large
if (level_ >= targetlevel_) {
level_ = targetlevel_;
advance(ix_ + 1);
}
}
else if (staticcount_) {
;
}
else { // !rising
level_ -= inc_;
if (level_ <= targetlevel_) {
level_ = targetlevel_;
advance(ix_ + 1);
}
}
}
// TODO: this would be a good place to set level to 0 when under threshold // TODO: this would be a good place to set level to 0 when under threshold
return level_;
return level_;
} }
void Env::keydown(bool d) { void Env::keydown(bool d) {
@@ -79,44 +108,59 @@ void Env::keydown(bool d) {
int Env::scaleoutlevel(int outlevel) { int Env::scaleoutlevel(int outlevel) {
return outlevel >= 20 ? 28 + outlevel : levellut[outlevel]; return outlevel >= 20 ? 28 + outlevel : levellut[outlevel];
}
}
void Env::advance(int newix) { void Env::advance(int newix) {
ix_ = newix; ix_ = newix;
if (ix_ < 4) { if (ix_ < 4) {
int newlevel = levels_[ix_];
int newlevel = levels_[ix_];
int actuallevel = scaleoutlevel(newlevel) >> 1; int actuallevel = scaleoutlevel(newlevel) >> 1;
actuallevel = (actuallevel << 6) + outlevel_ - 4256; actuallevel = (actuallevel << 6) + outlevel_ - 4256;
actuallevel = actuallevel < 16 ? 16 : actuallevel;
// level here is same as Java impl
targetlevel_ = actuallevel << 16;
rising_ = (targetlevel_ > level_);
actuallevel = actuallevel < 16 ? 16 : actuallevel;
// level here is same as Java impl
targetlevel_ = actuallevel << 16;
rising_ = (targetlevel_ > level_);
// rate // rate
int qrate = (rates_[ix_] * 41) >> 6; int qrate = (rates_[ix_] * 41) >> 6;
qrate += rate_scaling_; qrate += rate_scaling_;
qrate = min(qrate, 63);
inc_ = (4 + (qrate & 3)) << (2 + LG_N + (qrate >> 2));
qrate = min(qrate, 63);

#ifdef ACCURATE_ENVELOPE
if (targetlevel_ == level_) {
// approximate number of samples at 44.100 kHz to achieve the time
// empirically gathered using 2 TF1s, could probably use some double-checking
// and cleanup, but it's pretty close for now.
int staticrate = rates_[ix_];
staticrate += rate_scaling_; // needs to be checked, as well, but seems correct
staticrate = min(staticrate, 99);
staticcount_ = staticrate < 77 ? statics[staticrate] : 20 * (99 - staticrate);
staticcount_ = (int)(((int64_t)staticcount_ * (int64_t)sr_multiplier) >> 24);
}
else {
staticcount_ = 0;
}
#endif
inc_ = (4 + (qrate & 3)) << (2 + LG_N + (qrate >> 2));
// meh, this should be fixed elsewhere // meh, this should be fixed elsewhere
inc_ = ((int64_t)inc_ * (int64_t)sr_multiplier) >> 24;
inc_ = (int)(((int64_t)inc_ * (int64_t)sr_multiplier) >> 24);
} }
} }
void Env::update(const int r[4], const int l[4], int32_t ol, int rate_scaling) {
void Env::update(const int r[4], const int l[4], int ol, int rate_scaling) {
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
rates_[i] = r[i]; rates_[i] = r[i];
levels_[i] = l[i]; levels_[i] = l[i];
}
}
outlevel_ = ol; outlevel_ = ol;
rate_scaling_ = rate_scaling; rate_scaling_ = rate_scaling;
if ( down_ ) {
if ( down_ ) {
// for now we simply reset ourselve at level 3 // for now we simply reset ourselve at level 3
int newlevel = levels_[2]; int newlevel = levels_[2];
int actuallevel = scaleoutlevel(newlevel) >> 1; int actuallevel = scaleoutlevel(newlevel) >> 1;
actuallevel = (actuallevel << 6) - 4256; actuallevel = (actuallevel << 6) - 4256;
actuallevel = actuallevel < 16 ? 16 : actuallevel;
targetlevel_ = actuallevel << 16;
actuallevel = actuallevel < 16 ? 16 : actuallevel;
targetlevel_ = actuallevel << 16;
advance(2); advance(2);
} }
} }
@@ -136,7 +180,10 @@ void Env::transfer(Env &src) {
targetlevel_ = src.targetlevel_; targetlevel_ = src.targetlevel_;
rising_= src.rising_; rising_= src.rising_;
ix_ = src.ix_; ix_ = src.ix_;
inc_ = src.inc_;
down_ = src.down_;
down_ = src.down_;
#ifdef ACCURATE_ENVELOPE
staticcount_ = src.staticcount_;
#endif
inc_ = src.inc_;
} }

+ 7
- 1
ports/dexed/source/msfa/env.h View File

@@ -22,6 +22,8 @@


// DX7 envelope generation // DX7 envelope generation


#define ACCURATE_ENVELOPE

class Env { class Env {
public: public:


@@ -50,10 +52,11 @@ class Env {
void transfer(Env &src); void transfer(Env &src);
private: private:

// PG: This code is normalized to 44100, need to put a multiplier // PG: This code is normalized to 44100, need to put a multiplier
// if we are not using 44100. // if we are not using 44100.
static uint32_t sr_multiplier; static uint32_t sr_multiplier;
int rates_[4]; int rates_[4];
int levels_[4]; int levels_[4];
int outlevel_; int outlevel_;
@@ -66,6 +69,9 @@ class Env {
bool rising_; bool rising_;
int ix_; int ix_;
int inc_; int inc_;
#ifdef ACCURATE_ENVELOPE
int staticcount_;
#endif


bool down_; bool down_;




+ 0
- 0
ports/dexed/source/msfa/exp2.cc View File


+ 0
- 0
ports/dexed/source/msfa/exp2.h View File


+ 0
- 0
ports/dexed/source/msfa/freqlut.cc View File


+ 0
- 0
ports/dexed/source/msfa/freqlut.h View File


+ 0
- 0
ports/dexed/source/msfa/module.h View File


+ 0
- 0
ports/dexed/source/msfa/pitchenv.h View File


+ 0
- 1
ports/dexed/source/msfa/synth.h View File

@@ -38,7 +38,6 @@ typedef __int16 SInt16;
#endif #endif
#endif #endif
#include "../Dexed.h"
// #undef SynthMemoryBarrier() // #undef SynthMemoryBarrier()


Loading…
Cancel
Save