Răsfoiți Sursa

Cleans up quantum/keymap situation, removes extra lufa folders (#416)

* sorts out keycodes

* move midi around

* remove mbed

* replaces keymap with qmk/keymap_common

* fixes keymap.h

* keymap, config, quantum rearrange

* removes unneeded lufa stuff
Jack Humbert 10 ani în urmă
părinte
comite
db32864ce7
100 a modificat fișierele cu 2197 adăugiri și 10317 ștergeri
  1. 2 1
      Makefile
  2. 1 1
      keyboard/arrow_pad/arrow_pad.h
  3. 1 1
      keyboard/atreus/atreus.h
  4. 1 1
      keyboard/bantam44/bantam44.h
  5. 1 1
      keyboard/clueboard1/clueboard1.h
  6. 1 1
      keyboard/clueboard2/clueboard2.h
  7. 1 1
      keyboard/cluepad/cluepad.h
  8. 1 1
      keyboard/ergodox_ez/keymaps/german-manuneo/keymap.c
  9. 1 1
      keyboard/ergodox_ez/keymaps/townk_osx/keymap.c
  10. 1 1
      keyboard/gh60/gh60.h
  11. 1 1
      keyboard/hhkb/hhkb.h
  12. 1 1
      keyboard/jd45/jd45.h
  13. 1 1
      keyboard/kc60/kc60.h
  14. 1 1
      keyboard/phantom/phantom.h
  15. 1 1
      keyboard/planck/keymaps/alexey/keymap.c
  16. 1 1
      keyboard/planck/keymaps/angerthosenear/keymap.c
  17. 1 1
      keyboard/planck/keymaps/austin/keymap.c
  18. 1 1
      keyboard/planck/keymaps/charlie/keymap.c
  19. 1 1
      keyboard/planck/keymaps/daniel/keymap.c
  20. 1 1
      keyboard/planck/keymaps/david/keymap.c
  21. 1427 1426
      keyboard/planck/keymaps/default/compiled.hex
  22. 1 1
      keyboard/planck/keymaps/dzobert/keymap.c
  23. 1 1
      keyboard/planck/keymaps/joe/keymap.c
  24. 1 1
      keyboard/planck/keymaps/kyle/keymap.c
  25. 1 1
      keyboard/planck/keymaps/leo/keymap.c
  26. 1 1
      keyboard/planck/keymaps/lucas/keymap.c
  27. 1 1
      keyboard/planck/keymaps/max/keymap.c
  28. 1 1
      keyboard/planck/old_keymap_files/common_keymaps/keymap_brett.c
  29. 1 1
      keyboard/planck/old_keymap_files/common_keymaps/keymap_dotcom.c
  30. 1 1
      keyboard/planck/old_keymap_files/common_keymaps/keymap_jack.c
  31. 1 1
      keyboard/planck/old_keymap_files/common_keymaps/keymap_joe.c
  32. 1 1
      keyboard/planck/old_keymap_files/common_keymaps/keymap_matthew.c
  33. 1 1
      keyboard/planck/old_keymap_files/common_keymaps/keymap_mitch.c
  34. 1 1
      keyboard/planck/old_keymap_files/common_keymaps/keymap_nathan.c
  35. 1 1
      keyboard/planck/old_keymap_files/common_keymaps/keymap_paul.c
  36. 1 1
      keyboard/planck/old_keymap_files/common_keymaps/keymap_peasant.c
  37. 1 1
      keyboard/planck/old_keymap_files/common_keymaps/keymap_reed.c
  38. 1 1
      keyboard/planck/old_keymap_files/common_keymaps/keymap_sean.c
  39. 1 1
      keyboard/planck/old_keymap_files/common_keymaps/keymap_shane.c
  40. 1 1
      keyboard/planck/old_keymap_files/common_keymaps/keymap_simon.c
  41. 1 1
      keyboard/planck/old_keymap_files/common_keymaps/keymap_tim.c
  42. 1 1
      keyboard/planck/old_keymap_files/common_keymaps/keymap_wilba.c
  43. 1 1
      keyboard/planck/old_keymap_files/keymap_common.c
  44. 1 1
      keyboard/retro_refit/retro_refit.h
  45. 1 1
      keyboard/satan/satan.h
  46. 1 1
      quantum/audio/audio.c
  47. 1 1
      quantum/audio/audio_pwm.c
  48. 74 0
      quantum/keycode_config.c
  49. 21 0
      quantum/keycode_config.h
  50. 163 0
      quantum/keymap.c
  51. 315 0
      quantum/keymap.h
  52. 0 323
      quantum/keymap_common.c
  53. 0 292
      quantum/keymap_common.h
  54. 1 1
      quantum/keymap_extras/keymap_bepo.h
  55. 1 1
      quantum/keymap_extras/keymap_colemak.h
  56. 1 1
      quantum/keymap_extras/keymap_dvorak.h
  57. 1 1
      quantum/keymap_extras/keymap_fr_ch.h
  58. 1 1
      quantum/keymap_extras/keymap_french.h
  59. 1 1
      quantum/keymap_extras/keymap_french_osx.h
  60. 1 1
      quantum/keymap_extras/keymap_german.h
  61. 1 1
      quantum/keymap_extras/keymap_german_ch.h
  62. 1 1
      quantum/keymap_extras/keymap_german_osx.h
  63. 1 1
      quantum/keymap_extras/keymap_neo2.h
  64. 1 1
      quantum/keymap_extras/keymap_nordic.h
  65. 1 1
      quantum/keymap_extras/keymap_plover.h
  66. 1 1
      quantum/keymap_extras/keymap_spanish.h
  67. 1 1
      quantum/keymap_extras/keymap_uk.h
  68. 1 1
      quantum/keymap_midi.c
  69. 124 59
      quantum/quantum.c
  70. 9 4
      quantum/quantum.h
  71. 1 1
      quantum/template/template.h
  72. 0 1
      tmk_core/common.mk
  73. 0 193
      tmk_core/common/keymap.c
  74. 0 68
      tmk_core/common/keymap.h
  75. 1 5
      tmk_core/protocol/lufa.mk
  76. 0 274
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioInput/AudioInput.c
  77. 0 94
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioInput/AudioInput.h
  78. 0 92
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioInput/AudioInput.txt
  79. 0 51
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioInput/Config/AppConfig.h
  80. 0 93
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioInput/Config/LUFAConfig.h
  81. 0 312
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioInput/Descriptors.c
  82. 0 106
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioInput/Descriptors.h
  83. 0 52
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioInput/asf.xml
  84. 0 2364
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioInput/doxyfile
  85. 0 38
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioInput/makefile
  86. 0 311
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c
  87. 0 87
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioOutput/AudioOutput.h
  88. 0 92
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioOutput/AudioOutput.txt
  89. 0 50
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioOutput/Config/AppConfig.h
  90. 0 93
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioOutput/Config/LUFAConfig.h
  91. 0 312
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioOutput/Descriptors.c
  92. 0 106
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioOutput/Descriptors.h
  93. 0 50
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioOutput/asf.xml
  94. 0 2364
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioOutput/doxyfile
  95. 0 38
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioOutput/makefile
  96. 0 126
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/DualMIDI/Config/LUFAConfig.h
  97. 0 366
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/DualMIDI/Descriptors.c
  98. 0 124
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/DualMIDI/Descriptors.h
  99. 0 211
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/DualMIDI/DualMIDI.c
  100. 0 78
      tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/DualMIDI/DualMIDI.h

+ 2 - 1
Makefile

@@ -80,7 +80,8 @@ endif
 SRC += $(KEYBOARD_FILE) \
 	$(KEYMAP_FILE) \
 	$(QUANTUM_DIR)/quantum.c \
-	$(QUANTUM_DIR)/keymap_common.c \
+	$(QUANTUM_DIR)/keymap.c \
+	$(QUANTUM_DIR)/keycode_config.c \
 	$(QUANTUM_DIR)/led.c
 
 ifndef CUSTOM_MATRIX

+ 1 - 1
keyboard/arrow_pad/arrow_pad.h

@@ -2,7 +2,7 @@
 #define ARROW_PAD_H
 
 #include "matrix.h"
-#include "keymap_common.h"
+#include "keymap.h"
 #ifdef BACKLIGHT_ENABLE
 	#include "backlight.h"
 #endif

+ 1 - 1
keyboard/atreus/atreus.h

@@ -2,7 +2,7 @@
 #define ATREUS_H
 
 #include "matrix.h"
-#include "keymap_common.h"
+#include "keymap.h"
 #include "backlight.h"
 #include <stddef.h>
 

+ 1 - 1
keyboard/bantam44/bantam44.h

@@ -2,7 +2,7 @@
 #define BANTAM44_H
 
 #include "matrix.h"
-#include "keymap_common.h"
+#include "keymap.h"
 #include "backlight.h"
 #include <stddef.h>
 

+ 1 - 1
keyboard/clueboard1/clueboard1.h

@@ -2,7 +2,7 @@
 #define CLUEBOARD1_H
 
 #include "matrix.h"
-#include "keymap_common.h"
+#include "keymap.h"
 #include <stddef.h>
 
 

+ 1 - 1
keyboard/clueboard2/clueboard2.h

@@ -2,7 +2,7 @@
 #define CLUEBOARD2_H
 
 #include "matrix.h"
-#include "keymap_common.h"
+#include "keymap.h"
 #include <stddef.h>
 
 

+ 1 - 1
keyboard/cluepad/cluepad.h

@@ -2,7 +2,7 @@
 #define CLUEPAD_H
 
 #include "matrix.h"
-#include "keymap_common.h"
+#include "keymap.h"
 #include <stddef.h>
 
 

+ 1 - 1
keyboard/ergodox_ez/keymaps/german-manuneo/keymap.c

@@ -1,6 +1,6 @@
 #include "ergodox_ez.h"
 #include "action_layer.h"
-#include "keymap_common.h"
+#include "keymap.h"
 #include "keymap_extras/keymap_german.h"
 
 #define UC_ASYMPTOTICALLY_EQUAL_TO 0

+ 1 - 1
keyboard/ergodox_ez/keymaps/townk_osx/keymap.c

@@ -3,7 +3,7 @@
 #include "action_layer.h"
 #include "action_util.h"
 #include "led.h"
-#include "keymap_common.h"
+#include "keymap.h"
 #include "timer.h"
 
 /*

+ 1 - 1
keyboard/gh60/gh60.h

@@ -2,7 +2,7 @@
 #define GH60_H
 
 #include "matrix.h"
-#include "keymap_common.h"
+#include "keymap.h"
 #include "backlight.h"
 #include <stddef.h>
 

+ 1 - 1
keyboard/hhkb/hhkb.h

@@ -2,7 +2,7 @@
 #define HHKB_H
 
 #include "matrix.h"
-#include "keymap_common.h"
+#include "keymap.h"
 //#include "backlight.h"
 #include <stddef.h>
 

+ 1 - 1
keyboard/jd45/jd45.h

@@ -2,7 +2,7 @@
 #define JD45_H
 
 #include "matrix.h"
-#include "keymap_common.h"
+#include "keymap.h"
 #include "backlight.h"
 #include <stddef.h>
 

+ 1 - 1
keyboard/kc60/kc60.h

@@ -2,7 +2,7 @@
 #define KC60_H
 
 #include "matrix.h"
-#include "keymap_common.h"
+#include "keymap.h"
 #ifdef BACKLIGHT_ENABLE
 #include "backlight.h"
 #endif

+ 1 - 1
keyboard/phantom/phantom.h

@@ -2,7 +2,7 @@
 #define PHANTOM_H
 
 #include "matrix.h"
-#include "keymap_common.h"
+#include "keymap.h"
 #include <stddef.h>
 
 

+ 1 - 1
keyboard/planck/keymaps/alexey/keymap.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 #include "planck.h"
 #include "backlight.h"
 

+ 1 - 1
keyboard/planck/keymaps/angerthosenear/keymap.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [0] = { /* Qwerty */

+ 1 - 1
keyboard/planck/keymaps/austin/keymap.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [0] = { /* Qwerty */

+ 1 - 1
keyboard/planck/keymaps/charlie/keymap.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     [0] = { /* Native */

+ 1 - 1
keyboard/planck/keymaps/daniel/keymap.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [0] = { /* Qwerty */

+ 1 - 1
keyboard/planck/keymaps/david/keymap.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [0] = { /* Qwerty */

+ 1427 - 1426
keyboard/planck/keymaps/default/compiled.hex

@@ -1,22 +1,22 @@
 :100000000C941D050C9461050C9461050C9461051C
 :100010000C9461050C9461050C9461050C946105C8
-:100020000C9461050C9461050C94D2180C94A419DD
-:100030000C9406270C9461050C9461050C946105E1
+:100020000C9461050C9461050C94D5180C94A719D7
+:100030000C9409270C9461050C9461050C946105DE
 :100040000C9461050C94C2050C9461050C94610537
-:100050000C9461050C946E270C9461050C94610559
+:100050000C9461050C9471270C9461050C94610556
 :100060000C9461050C9461050C9461050C94610578
 :100070000C9461050C9461050C9461050C94610568
-:100080000C94B80E0C9461050C9461050C946105F8
+:100080000C94BB0E0C9461050C9461050C946105F5
 :100090000C9461050C9461050C9461050C94610548
 :1000A0000C9461050C9461050C9461052A063C06CC
 :1000B0005006620671067B06CF06CF06CF06CF0636
-:1000C000CF06CF068906B906CB06111A331A211BB3
-:1000D000331A211B781A9B1A211BF01A031BED1DE2
-:1000E000ED1D1C1E1C1E5B1E7B1ED11FD11F861EFC
-:1000F000D11F361F361F9D1FA61FD11FCB1F431FA9
-:10010000431F431F431F431F431F431F431F431FDF
-:10011000431F431F431F431F431F431F431F531FBF
-:10012000611F681F6F1F791F07634236B79BD8A7EF
+:1000C000CF06CF068906B906CB06141A361A241BAA
+:1000D000361A241B7B1A9E1A241BF31A061BF01DCA
+:1000E000F01D1F1E1F1E5E1E7E1ED41FD41F891EE4
+:1000F000D41F391F391FA01FA91FD41FCE1F461F91
+:10010000461F461F461F461F461F461F461F461FC7
+:10011000461F461F461F461F461F461F461F561FA7
+:10012000641F6B1F721F7C1F07634236B79BD8A7E3
 :100130001A39685618AEBAAB558C1D3CB7CC57630C
 :10014000BD6DEDFD753EF6177231BF000000803FBA
 :1001500008000000BE922449123EABAAAA2ABECDD6
@@ -126,11 +126,11 @@
 :1007D0000000000000000000000000000000000019
 :1007E0000000000000000000000000000000000009
 :1007F00000000000000000000000000000000000F9
-:100800000000000100005001000100010001000192
+:100800000000000100007001000100010001000172
 :100810000001000100010001004C00010001000185
-:100820000020502150135012500030013002300C83
-:100830003001000100275026502350245028502911
-:100840005001000100010001000100010001000150
+:10082000001570167013700A700030013002300C21
+:1008300030010001001C701B70187019701D701EB3
+:100840007001000100010001000100010001000130
 :100850000001000100010001000100010001000190
 :100860000001002803540068006500200050006C5F
 :100870000061006E0063006B0020004B0065007992
@@ -162,16 +162,16 @@
 :100A100095017508810105081901290595057501DC
 :100A200091029501750391010507190029FF150031
 :100A300026FF00950675088100C011241FBECFEF68
-:100A4000DAE0DEBFCDBF04B603FE24C080918E0481
-:100A500090918F04A0919004B09191048730904BB5
-:100A6000A740B04BB9F410928E0410928F041092EC
-:100A700090041092910414BE84B7877F84BF88E1EC
+:100A4000DAE0DEBFCDBF04B603FE24C080918F0480
+:100A500090919004A0919104B09192048730904BB2
+:100A6000A740B04BB9F410928F04109290041092EA
+:100A700091041092920414BE84B7877F84BF88E1EA
 :100A80000FB6F89480936000109260000FBEE0E013
-:100A9000F8E3099513E0A0E0B1E0E0E7F2E602C078
+:100A9000F8E3099513E0A0E0B1E0ECE7F2E602C06C
 :100AA00005900D92A033B107D9F714E0A0E3B3E0AD
-:100AB00001C01D92AE38B107E1F70E941C160C94DC
-:100AC00036310C940000089581E0089508950C9447
-:100AD00063050C9464050C9466050E94002D23E0C8
+:100AB00001C01D92AF38B107E1F70E941F160C94D8
+:100AC0003C310C940000089581E0089508950C9441
+:100AD00063050C9464050C9466050E94062D23E0C2
 :100AE00030E0281B3109220F209334030895282F6A
 :100AF0002F9880918000211108C0877F809380000B
 :100B000010928D0010928C001BC088608093800032
@@ -181,7 +181,7 @@
 :100B40000C946D050E946D0584E080933303109230
 :100B500030030895279A2F988FEF9FEF9093870087
 :100B6000809386008AE08093800089E180938100F1
-:100B70000E94692C0C94A2050E94AA056E9A769A8E
+:100B70000E946F2C0C94A2050E94AA056E9A769A88
 :100B80000C94EF061F920F920FB60F9211242F9321
 :100B90003F938F939F93EF93FF93E0913103F091F5
 :100BA0003203CF010196909332038093310300907A
@@ -192,1420 +192,1421 @@
 :100BF000900D11240090340302C0969587950A94B5
 :100C0000E2F790938D0080938C00FF91EF919F917C
 :100C10008F913F912F910F900FBE0F901F901895BD
-:100C2000CF93DF93EC010E940728BE0180E090E0A3
-:100C3000DF91CF910C94FC230F931F93462F50E02C
+:100C2000CF93DF93EC010E940D28BE0180E090E09D
+:100C3000DF91CF910C94FF230F931F93462F50E029
 :100C40004F30510508F0ABC0DC01FA01EA5AFF4F02
-:100C50000C94FA3012968C91882309F4A0C000E01D
+:100C50000C94003112968C91882309F4A0C000E016
 :100C600010E0980140E064E070E088E292E00E94C9
-:100C7000361281E090E011C012968C91882309F41D
+:100C7000391281E090E011C012968C91882309F41A
 :100C80008EC000E010E0980140E066E070E088EB84
-:100C900091E00E94361282E090E00E9410067FC030
+:100C900091E00E94391282E090E00E9410067FC02D
 :100CA00012968C91882309F47AC000E010E0980134
-:100CB00040E068E070E088EE91E00E94361284E047
+:100CB00040E068E070E088EE91E00E94391284E044
 :100CC00090E0EBCF12968C91882311F083E00EC058
-:100CD00083E00E949A2440E164E083E00E949B0C40
-:100CE0005EC012968C91882321F084E00E947924C2
+:100CD00083E00E949D2440E164E083E00E942007BD
+:100CE0005EC012968C91882321F084E00E947C24BF
 :100CF000F2CF84E0EECF12968C91882331F085EE0E
-:100D00000E94911C0E94C02C4AC085EE0E94591D71
-:100D100046C012968C91882309F441C00E94EB0DC5
+:100D00000E94941C0E94C62C4AC085EE0E945C1D65
+:100D100046C012968C91882309F441C00E94EE0DC2
 :100D200000E010E0980140E066E070E088E891E0C3
-:100D30000E94361284E00E949A2483E00E949A2442
-:100D400080E10E949A2485E00E9479240E94F42781
-:100D5000811102C00E94D0270E940C2890E090933D
-:100D60008D0480938C04806880938C040E941028EA
+:100D30000E94391284E00E949D2483E00E949D2439
+:100D400080E10E949D2485E00E947C240E94FA2775
+:100D5000811102C00E94D6270E94122890E0909331
+:100D60007404809373048068809373040E9416282F
 :100D700016C012968C91882391F000E010E0980143
-:100D800040E066E070E088E591E00E94361285E080
-:100D90000E949A2404C012968C91811103C080E0B5
+:100D800040E066E070E088E591E00E94391285E07D
+:100D90000E949D2404C012968C91811103C080E0B2
 :100DA00090E002C08AEE91E01F910F9108950F9399
 :100DB0001F932FEF89EF90E0215080409040E1F7A2
 :100DC00000C0000000E010E0980140E065E070E045
-:100DD00088E492E00E9436121F910F9108950C94BE
+:100DD00088E492E00E9439121F910F9108950C94BB
 :100DE000D7060F931F9300E010E0980140E063E006
-:100DF00070E080E091E00E9436122FEF82E597E0EC
+:100DF00070E080E091E00E9439122FEF82E597E0E9
 :100E0000215080409040E1F700C000001F910F91F9
-:100E10000C94EB0D0F931F9300E010E0980140E05D
-:100E200068E070E088E191E00E9436121F910F9116
+:100E10000C94EE0D0F931F9300E010E0980140E05A
+:100E200068E070E088E191E00E9439121F910F9113
 :100E300008950C940A0781E008950C941B07089507
-:100E40000C94BC0580918503882309F448C08091E7
-:100E5000410390914203009779F40E9438279093C0
-:100E60004203809341038091430390E0009771F423
-:100E70008091440390E00AC00E94442720917002B0
-:100E8000309171022817390740F329C00197880F64
-:100E9000991F880F991FFC01EB5BFC4F60817181EA
-:100EA000828193810E941E0EE091430384E0E89FBB
-:100EB000F0011124EB5BFC4F608171818281938191
-:100EC0004FE050E00E94D6118091430390E00196DC
-:100ED0006091440370E00E94E630809343030C94D9
-:100EE0006705109287030C94EB0D81E080938703D4
-:100EF0000C94190708958F929F92AF92BF92EF9230
-:100F0000FF920F931F93CF93DF93CDB7DEB7A397D5
-:100F10000FB6F894DEBF0FBECDBF7C01FC0100818F
-:100F20001181C8010E943525B8010E947D098C01FC
-:100F3000B7010E941D07882309F4CCC10032F0E5F7
-:100F40001F0741F4F7018281882309F458C00E94E9
-:100F5000CD12C0C10132F0E51F0741F4F7018281D3
-:100F6000882309F44CC00E94D612B4C10232F0E5C5
-:100F70001F0751F4F7018281882309F440C00E94C1
-:100F8000C9128111F0CFE3CF0332F0E51F0739F426
-:100F9000F7018281882399F10E9475079BC1043271
-:100FA000F0E51F0739F4F7018281882341F10E949F
-:100FB000710790C10532F0E51F0749F4F7018281FE
-:100FC0008823E9F0809187038111F1CFE5CF0632C4
-:100FD000F0E51F0739F4F7018281882381F00E9430
-:100FE000DD120AC00732F0E51F0749F4F7018281DC
-:100FF000882329F00E94E8120E940A076BC18091A1
-:101000008703811105C0F70182818111CFC018C10A
-:10101000003E110579F4F7018281882309F44DC05F
-:101020000E94EB0D81E0809386031092850310925D
-:10103000440350C1023E110559F4F701828188230F
-:10104000E1F10E94EB0D109286031092850342C1DC
-:10105000033E110591F4F7018281882371F10E940A
-:10106000EB0D1092860381E0809385031092430379
-:1010700010924203109241032DC10235110559F41B
-:10108000F7018281882309F425C180917002909133
-:1010900071020A970DC00135110579F4F7018281BB
-:1010A000882309F417C180917002909171020A9609
-:1010B00090937102809370020DC14091740283E29B
-:1010C000EFE8F2E0DE01119601900D928A95E1F7CA
-:1010D000F701808121E030E02C0F3D1F280F311DEA
-:1010E000C9012091720230917302FC01E20FF31FDB
-:1010F0006081772767FD7095640F711D882777FDE4
-:101100008095982F0E94082E20E030E040E451E4C2
-:101110000E946D2D4B015C01F701218184E090E07C
-:10112000821B9109BC01882777FD8095982F0E942A
-:10113000082E9B01AC01C501B4010E94052D9B0145
-:10114000AC0160E070E080E090E40E947B2F20E042
-:1011500030E04CED50E40E94182F4B015C01F70188
-:1011600082818823D1F04FE050E0C501B4010E9494
-:10117000D611809186038823A1F08091440324E056
-:10118000829FF0011124EB5BFC4F80829182A2824E
-:10119000B3828F5F8093440304C0C501B4010E94F1
-:1011A0001E0E0F3F110508F02ECF94C08091400312
-:1011B00081111FC0043130E5130709F051C00E94AE
-:1011C0001F0781E0809340030E94382790933F03DC
-:1011D00080933E0310923703109239031092380324
-:1011E00010923B0310923A0310923D0310923C037D
-:1011F00071C080913E0390913F030E944427883C38
-:10120000910570F480913703E82FF0E0EE0FFF1F97
-:10121000E85CFC4F118300838F5F809337035AC0D3
-:10122000043880E5180721F00538104501F13AC06F
-:10123000F7018281882341F01092350382E01EC0BD
-:10124000043830E5130759F580913503811106C044
-:1012500086E20E94911C86E20E94591D82E01CC019
-:101260000438F0E51F0741F305381045D9F4F701BC
-:101270008281882331F01092360380E20E94A81DFB
-:1012800029C080913603811106C087E20E94911C1B
-:1012900087E20E94591D80E20E94AF1D1BC00538E5
-:1012A000104529F381E08093350380933603C7010D
-:1012B000A3960FB6F894DEBF0FBECDBFDF91CF91DE
-:1012C0001F910F91FF90EF90BF90AF909F908F90E4
-:1012D0000C94690580E0A3960FB6F894DEBF0FBEAC
-:1012E000CDBFDF91CF911F910F91FF90EF90BF90F5
-:1012F000AF909F908F90089508959CE0799FF001A2
-:10130000112490E3899FE00DF11D1124E60FF11DDA
-:10131000EE0FFF1FED5FFD4F859194910895880FAB
-:10132000991FFC01ED57FF4F859194910895880F07
-:10133000991FFC01ED5FFD4F8591949108950F93E6
-:101340001F93CF93DF93EC01811521E39207A0F562
-:10135000C11580E3D80708F0D7C0C83ED105D8F43E
-:10136000C03ED10508F007C2C83AD10578F4C53AA5
-:10137000D10508F06AC0C130D10509F463C008F492
-:10138000F7C1C430D10508F0F6C1F2C1CB3BD1059D
-:1013900008F466C0EDC1C11590E2D90708F0AFC0EE
-:1013A000C11521E0D20708F0E6C1C03FD10508F41D
-:1013B000DFC18E0110651FC2C03880E5D80700F577
-:1013C000C03790E5D90708F0A3C0C11520E5D207C2
-:1013D00009F4ACC050F4CE01905480319F4008F025
-:1013E000C7C1DF708E01106A06C2C13080E5D80720
-:1013F00009F4AEC0C43190E5D90708F4AFC0B8C154
-:10140000C33820E5D20709F48EC050F4C13890E506
-:10141000D90709F482C008F083C000E011EDEBC1E8
-:10142000C03181E5D80708F4A3C1C11597E5D907F4
-:1014300008F436C1CE0190578115904108F098C14B
-:10144000DF7093C101E010E0D6C1C53AD10509F4BF
-:1014500094C1C63AD10509F093C102E810E4CBC1AA
-:10146000C83AD10509F48FC1C93AD10509F48EC132
-:10147000CA3AD10509F48DC1CB3AD10509F48CC122
-:10148000CC3AD10509F48BC1CD3AD10509F48AC112
-:10149000C03BD10509F489C1CE3AD10509F488C110
-:1014A000CF3AD10509F487C1C13BD10509F486C102
-:1014B000C23BD10509F485C1C33BD10509F484C100
-:1014C000C43BD10509F483C1C53BD10509F482C1F0
-:1014D000C63BD10509F481C1C73BD10509F480C1E0
-:1014E000C83BD10509F47FC1C93BD10509F47EC1D0
-:1014F000CA3BD10509F47DC100E014E47CC1CE01F2
-:101500009F700E94970978C1DD278E01106C73C10E
-:10151000CF70DD278E01146D6EC100E010ED6BC140
-:1015200000E012ED68C100E013ED65C10E943C20AF
-:101530000E94EB0D0E94F1068FEF94E32CE08150A6
-:1015400090402040E1F700C000000E94932753C163
-:10155000809162048160809362044DC10E94F427EF
-:10156000811102C00E94D0270E940C2890E0909325
-:101570008D0480938C04C23080E5D80721F48091DB
-:101580008C04816086C0C43090E5D90721F4809135
-:101590008C0482607EC0C63020E5D20721F48091A1
-:1015A0008C04846076C0C83080E5D80719F4809137
-:1015B0008C0427C0CA3090E5D90721F480918C04AF
-:1015C000806167C0CC3020E5D20721F480918C0483
-:1015D00080625FC0CE3080E5D80721F480918C0412
-:1015E000806457C0C03190E5D90721F480918C0404
-:1015F00080684FC0C23120E5D20729F480918C0465
-:101600008460886046C0C33080E5D80721F48091AB
-:101610008C048E7F3EC0C53090E5D90721F48091BF
-:101620008C048D7F36C0C73020E5D20721F480912D
-:101630008C048B7F2EC0C93080E5D80719F48091C7
-:101640008C0426C0CB3090E5D90721F480918C041E
-:101650008F7E1FC0CD3020E5D20721F480918C040D
-:101660008F7D17C0CF3080E5D80721F480918C049E
-:101670008F7B0FC0C13190E5D90721F480918C0494
-:101680008F7707C0C331D04531F480918C048B7FB4
-:10169000877F80938C0480918C040E941028ABC0BB
-:1016A0008D2F99278F70992781309105D9F49E014C
-:1016B0002370332702C0880F991F2A95E2F79C6890
-:1016C0008E0144E0000F111F4A95E1F700271370C7
-:1016D000802B912B53E0CC0FDD1F5A95E1F7C0769C
-:1016E000DD272FC08230910531F4DC2FCC278E010D
-:1016F000016F106A80C08330910569F4CE01837058
-:10170000992701E010E002C0000F111F8A95E2F74F
-:10171000C8019C680FC084309105B9F4CE01837074
-:10172000992701E010E002C0000F111F8A95E2F72F
-:10173000C8019A6823E0CC0FDD1F2A95E1F7C07E2F
-:10174000D7708C010C2B1D2B56C08530910531F4C0
-:10175000DC2FCC278E01046F106A4DC0069709F06C
-:101760004AC0CF71DD27DC2FCC278E01106243C029
-:1017700000E010E040C08E013EC001E810E43BC034
-:1017800003E810E438C002EE14E435C009EE14E4B6
-:1017900032C00AEE14E42FC005EB14E42CC006EBB3
-:1017A00014E429C007EB14E426C00CEC14E423C0B5
-:1017B0000DEC14E420C003E815E41DC00AE815E4AC
-:1017C0001AC002E915E417C004E915E414C001E2E7
-:1017D00016E411C003E216E40EC004E216E40BC0E6
-:1017E00005E216E408C006E216E405C007E216E4C6
-:1017F00002C00AE216E4C801DF91CF911F910F9158
-:1018000008959CE0799FF001112490E3899FE00DF9
-:10181000F11D1124E60FF11DEE0FFF1FED5FFD4FCF
-:1018200085919491803E9105E0F4803C910558F5B6
-:101830008133910509F46FC048F48932910509F4A8
-:1018400063C08A32910509F46DC072C08933910575
-:10185000E9F082389105D1F08533910509F44DC046
-:1018600067C0833E910581F138F4803E9105B9F05F
-:10187000823E9105D9F05CC0863E910561F1873EBC
-:101880009105A1F155C00E948F09089520918C0403
-:1018900020FD02C021FF4CC080EE90E049C0809145
-:1018A0008C0480FFF9CF89E390E042C080918C04E2
-:1018B00082FF0EC080918C0484FF03C080E090E022
-:1018C00037C083EE90E034C080918C0482FFF2CF69
-:1018D00082EE90E02DC080918C0483FF0BC080913C
-:1018E0008C0484FDEBCF87EE90E022C080918C04C5
-:1018F00083FFF5CF86EE90E01BC080918C0485FFBE
-:1019000007C089E290E014C080918C0485FFF9CF74
-:1019100085E390E00DC080918C0486FF07C08AE2C9
-:1019200090E006C080918C0486FFF9CF81E390E0BF
-:101930000E949F090895CF92DF92EF92FF920F933A
-:101940001F9301E010E020E030E06801790104C05D
-:10195000CC0CDD1CEE1CFF1C8A95D2F704C0000FD6
-:10196000111F221F331F6A95D2F70C291D292E291A
-:101970003F29C0904504D0904604E0904704F09081
-:101980004804C022D122E222F322842FC016D106BD
-:10199000E206F30641F41F910F91FF90EF90DF9064
-:1019A000CF900C9479241F910F91FF90EF90DF90CE
-:1019B000CF900C949A240C946B05E82FF0E0E2543D
-:1019C000FD4F8081E82FEF70F0E082958F7021E06D
-:1019D00030E0A90102C0440F551F8A95E2F740A3E9
-:1019E00008950F931F93CF93DF9385B7806885BFCA
-:1019F00085B7806885BFC3E0D0E001E010E0FE015C
-:101A0000E254FD4F8081E82FEF70F0E021A1829534
-:101A10008F70A80102C0440F551F8A95E2F7CA01D2
-:101A2000822B81A38C2F0E94DD0C219740F78BE045
-:101A300090E061E070E0FC01EE54FD4F2081E22F68
-:101A4000EF70F0E042A122952F70DB0102C0AA0FD7
-:101A5000BB1F2A95E2F79D01242B22A3019758F77B
-:101A6000DF91CF911F910F910C942007EF92FF927D
-:101A70000F931F93CF93DF9300E913E0C3E0EE24AD
-:101A8000E394F12CD5E08C2F0E94DD0C8BE090E0EC
-:101A900040E050E0FC01EE54FD4F6081E62FEF7016
-:101AA000F0E020A130E062956F7002C03595279577
-:101AB0006A95E2F720FD09C09701082E02C0220FA7
-:101AC000331F0A94E2F7422B532B019718F7F801C2
-:101AD000929182918F018417950721F05183408361
-:101AE000D09375028C2F0E94DD0CC15060F680915E
-:101AF000750287FD2CC08150809375028F3F39F0AD
-:101B00008FE99FE00197F1F700C0000020C08091AD
-:101B10008E0390918F039093970380939603809107
-:101B20008C0390918D0390939503809394038091FF
-:101B30008A0390918B0390939303809392038091F7
-:101B400088039091890390939103809390030E945E
-:101B5000220781E0DF91CF911F910F91FF90EF90CD
-:101B60000895E82FF0E0EE0FFF1FE057FC4F808153
-:101B70009181089508950F931F93CF9308E913E07F
-:101B8000C0E0F801929182918F010E94B026C80FA7
-:101B9000F3E000391F07A9F78C2FCF911F910F9108
-:101BA00008950E94F427811102C00E94D0270E944C
-:101BB0001E28809377043E9A809171008D7F8093D8
-:101BC000710082E0809390008AE18093910081E02F
-:101BD00080939A03089580919A03811102C00E9414
-:101BE000D10D1092EA031092E903809171008D7F6C
-:101BF00080937100809190008F7380939000109279
-:101C0000AC031092AB031092E3031092E403109222
-:101C1000E5031092E6031092E2031092E103E1EC77
-:101C2000F3E0A1EBB3E011921192119211921D9287
-:101C30001D9283E0E13EF807B1F70895CF92DF925D
-:101C4000EF92FF920F931F93CF93DF932091AB03FB
-:101C5000222309F484C06B017C0180919A038111D5
-:101C600002C00E94D10D01EE13E0C7E0D0E0A70151
-:101C70009601F80192918291729162918F010E9476
-:101C8000692D811131C0FE01EE0FFF1FEE0FFF1F06
-:101C9000EF53FC4F1082118212821382DE01AA0FD1
-:101CA000BB1FAF54BC4F11961C921E92C730D1057A
-:101CB000E9F0219644815581668177814083518383
-:101CC00062837383148215821682178212968D9115
-:101CD0009C91139711969C938E9313961C921E922F
-:101CE000129734961296E2CF219708F68091E90375
-:101CF0009091EA03019797FD05C09093EA038093C2
-:101D0000E90304C01092EA031092E9038091E90309
-:101D10009091EA032091E7033091E80328173907EF
-:101D200024F01092E8031092E703892BC1F480910C
-:101D300071008D7F80937100809190008F738093EC
-:101D400090001092E3031092E4031092E5031092C6
-:101D5000E6031092E2031092E1031092AB03DF91CD
-:101D6000CF911F910F91FF90EF90DF90CF9008954A
-:101D70001F920F920FB60F9211244F925F926F92A3
-:101D80007F928F929F92AF92BF92CF92DF92EF920B
-:101D9000FF922F933F934F935F936F937F938F9314
-:101DA0009F93AF93BF93CF93DF93EF93FF93809174
-:101DB000AB03882309F49BC1C091E903D091EA03E6
-:101DC0001C161D060CF093C140909B0350909C0381
-:101DD00060909D0370909E0320E030E0A901C30154
-:101DE000B2010E94142F18160CF065C0C130D10545
-:101DF00009F452C08091E7039091E803BE010E946C
-:101E0000E6307C019093E8038093E7038090AD0374
-:101E10009090AE03A090AF03B090B00320E030E00C
-:101E200040E85FE3C501B4010E94052D6093AD0356
-:101E30007093AE038093AF039093B003F701EE0F5E
-:101E4000FF1FEE0FFF1FEF53FC4FA30192016081B4
-:101E50007181828193810E946D2D20E030E040E00D
-:101E60005EE30E94182F9B01AC01C501B4010E94E2
-:101E7000142F18168CF4C7010196BE010E94E6309B
-:101E80009093E8038093E7031092AD031092AE03A2
-:101E90001092AF031092B003E091E703F091E803D2
-:101EA000EE0FFF1FEE0FFF1FEF53FC4F608171819C
-:101EB00082819381D0C0C090E303D090E403E0908E
-:101EC000E503F090E60320E030E0A901C701B60188
-:101ED0000E94692D2197882309F4A2C0FE01EE0F0C
-:101EE000FF1FEE0FFF1FEF53FC4F80809180A280F9
-:101EF000B380A5019401C701B6010E94692D87FF37
-:101F000031C0A501940160E070E08CED93EC0E947B
-:101F10006D2D20E030E040E451E40E946D2D20E082
-:101F200030E040E05FE30E94182F9B01AC0160E0CD
-:101F300070E080E090E40E947B2F9B01AC01C50122
-:101F4000B4010E94182F9B01AC01C701B6010E9489
-:101F5000692D87FF07C0A701960160E070E08CED56
-:101F600093E439C0A5019401C701B6010E94142F62
-:101F700018160CF055C0A501940160E070E08CEDDE
-:101F800093E40E946D2D20E030E040E451E40E9493
-:101F90006D2D20E030E040E05FE30E94182F9B01B0
-:101FA000AC0160E070E080E090E40E947B2F9B0138
-:101FB000AC01C501B4010E94182F9B01AC01C701FF
-:101FC000B6010E94142F18165CF5A701960160E077
-:101FD00070E08CED93EC0E946D2D20E030E040E449
-:101FE00051E40E946D2D20E030E040E05FE30E946C
-:101FF000182F9B01AC0160E070E080E090E40E944B
-:102000007B2F9B01AC01C701B6010E94182F609382
-:10201000E3037093E4038093E5039093E60313C016
-:10202000FE01EE0FFF1FEE0FFF1FEF53FC4F8081ED
-:102030009181A281B3818093E3039093E403A09301
-:10204000E503B093E6036091E3037091E4038091AC
-:10205000E5039091E60320919803309199032F3F77
-:102060004FEF340731F02F5F3F4F309399032093A8
-:1020700098030E94F3126B017C0120E034E244EFEC
-:1020800051E40E94692D87FF08C086EFC82E88E2C0
-:10209000D82E84EFE82E81E4F82E20E030E040E0F6
-:1020A00051E4C701B6010E94182F9B01AC0160E00A
-:1020B00074E284E79BE40E946D2D6B017C010E9419
-:1020C000DA2D7093970060939600209176023091FC
-:1020D00077024091780250917902C701B6010E94BF
-:1020E000182F0E94DA2D70939900609398008091C8
-:1020F000AC03882309F433C1C090A703D090A80390
-:10210000E090A903F090AA0320E030E0A901C70104
-:10211000B6010E94142F1816D4F58091980390915F
-:1021200099038F3F2FEF920729F00196909399031F
-:1021300080939803C701B6010E94F31220E030E0BB
-:1021400040E051E40E94182F9B01AC0160E074E272
-:1021500084E79BE40E946D2D6B017C010E94DA2DC7
-:1021600070939700609396002091760230917702E9
-:102170004091780250917902C701B6010E94182F50
-:102180000E94DA2D709399006093980008C0109215
-:10219000970010929600109299001092980060910A
-:1021A000A1037091A2036F5F7F4F7093A2036093AE
-:1021B000A103209196003091970080E090E0232BBE
-:1021C000F1F0C0919600D09197000E94062E6B010D
-:1021D0007C01BE0180E090E00E94062E9B01AC01D4
-:1021E0006091A3037091A4038091A5039091A6032D
-:1021F0000E946D2D20E03FEF4FE757E410C00E9492
-:10220000062E6B017C0120E030EE4FEF54E460912C
-:10221000A3037091A4038091A5039091A6030E944B
-:10222000182F9B01AC01C701B6010E94142F87FD36
-:1022300096C080919F038F5F80939F0390E02091D1
-:1022400073043091740482179307A0F080917E0488
-:10225000882319F010929F030DC0809171008D7F2B
-:1022600080937100809190008F7380939000109202
-:10227000AC037DC08091A003C0919F03811128C051
-:10228000C0907804D0907904E0907A04F0907B04B8
-:1022900020E030E0A901C701B6010E94142F1816F2
-:1022A000BCF481E08093A0031092A7031092A803CE
-:1022B0001092A9031092AA03C092A303D092A40380
-:1022C000E092A503F092A603C150C0939F0343C0C0
-:1022D0001092A0031092990310929803E091750454
-:1022E000F091760448E0C49FE00DF11D1124808137
-:1022F0009181A281B3818093A7039093A803A093B7
-:10230000A903B093AA0320E030E040E85EE36481D3
-:102310007581868197810E94182F6B017C018091C5
-:102320007A02682F70E080E090E00E94062E20E0A4
-:1023300030E048EC52E40E946D2D9B01AC01C701D6
-:10234000B6010E94182F6093A3037093A403809397
-:10235000A5039093A6031092A2031092A10380916B
-:10236000770480FD04C01092AC031092AB03FF9180
-:10237000EF91DF91CF91BF91AF919F918F917F911D
-:102380006F915F914F913F912F91FF90EF90DF9070
-:10239000CF90BF90AF909F908F907F906F905F9005
-:1023A0004F900F900FBE0F901F901895CF92DF9215
-:1023B000EF92FF92CF93DF936B017C01EA01809152
-:1023C0009A03811102C00E94D10D8091770480FF91
-:1023D00046C08091E9039091EA0308970CF03FC052
-:1023E000809171008D7F809371008091AC03811189
-:1023F0000E94EB0D81E08093AB0310929903109241
-:10240000980320E030E0A901C701B6010E94142F13
-:102410001816DCF48091E9039091EA03FC01EE0FB9
-:10242000FF1FEE0FFF1FEF53FC4FC082D182E282ED
-:10243000F382FC01EE0FFF1FEF54FC4FD183C083EA
-:1024400001969093EA038093E90380917100826082
-:102450008093710080919000806880939000DF915C
-:10246000CF91FF90EF90DF90CF9008958F929F9241
-:10247000AF92BF92CF92DF92EF92FF920F931F9392
-:10248000CF93DF93EC017B01D42E48015901809159
-:102490009A03811102C00E94D10D8091770480FFC0
-:1024A0006BC0809171008D7F809371008091AB0330
-:1024B00081110E94EB0D81E08093AC03D0937604F0
-:1024C000C0937504F0927404E0927304D0927E0479
-:1024D0008092780490927904A0927A04B0927B045E
-:1024E0001092AD031092AE031092AF031092B0039E
-:1024F00010929F0388819981AA81BB818093A70351
-:102500009093A803A093A903B093AA0320E030E01E
-:1025100040E85EE36C817D818E819F810E94182F4F
-:102520006B017C0180917A02682F70E080E090E07E
-:102530000E94062E20E030E048EC52E40E946D2D0F
-:102540009B01AC01C701B6010E94182F6093A30341
-:102550007093A4038093A5039093A6031092A20303
-:102560001092A1038091710082608093710080912C
-:102570009000806880939000DF91CF911F910F9120
-:10258000FF90EF90DF90CF90BF90AF909F908F9093
-:102590000895809177048170089580917704816017
-:1025A000809377040E9422280C947A078091770404
-:1025B0008E7F809377040C9422288091EB0390E027
-:1025C000019666E070E00E94E6308093EB03089588
-:1025D0008091EB0390E0019766E070E00E94E630A6
-:1025E0008093EB0308958F929F92AF92BF92CF9208
-:1025F000DF92EF92FF920F931F93CF93DF936B01C4
-:102600007C01C0919803D0919903BE0180E090E0D5
-:102610000E94062E4B015C01A701960160E070E06C
-:102620008CE594E40E946D2D9B01AC01C501B401C1
-:102630000E94182F0E94DA2D2091EB03233009F419
-:1026400073C028F4222351F02130E9F02CC124304A
-:1026500009F4A0C0253009F4E0C025C180E090E075
-:10266000A0E0BFE38093760290937702A093780274
-:10267000B093790210929B0310929C0310929D03D9
-:1026800010929E0310C110929B0310929C03109213
-:102690009D0310929E036431710540F46A30710508
-:1026A00060F520E030E040E85EE32BC0693C710556
-:1026B00008F0AAC080E090E00E94062E20E030E002
-:1026C00040EA51E40E94042D20E030E044E353E46A
-:1026D0000E946D2D9B01AC010E94182F20E030E07C
-:1026E00040E05EE30E94182F9B01AC0160E070E0C7
-:1026F00080E09EE30E94042D44C020E030E040E0F2
-:102700005FE3C701B6010E94182F6B017C0180E0D6
-:1027100090E0A0E0BEE38093760290937702A093CE
-:102720007802B0937902BFC010929B0310929C0371
-:1027300010929D0310929E034AE0469F9001479F8E
-:10274000300D1124C90168EB7BE00E94D230BC013E
-:102750006C5D754077FF03C071956195710988279D
-:1027600077FD8095982F0E94082E2EE333EC4EE2E1
-:1027700059E30E94182F20E030E040EC5EE30E9415
-:10278000052D609376027093770280937802909380
-:10279000790289C010929B0310929C0310929D03B2
-:1027A00010929E03CE0183709927892BE1F0BE0120
-:1027B0006170772780E090E00E94062E20E030E0F4
-:1027C00040E05EE30E94182F20E030E040E45FE349
-:1027D0000E94052D609376027093770280937802B1
-:1027E000909379020CC080E090E0A0E0BFE380937A
-:1027F000760290937702A0937802B0937902C77023
-:10280000DD27CD2B09F04FC010927602109277028F
-:10281000109278021092790246C010929B03109297
-:102820009C0310929D0310929E0300E010E020E0B4
-:102830003FE300937602109377022093780230935F
-:1028400079026739710578F180E090E00E94062EE8
-:1028500020E030E047E153E40E94042D20E030E026
-:102860004AE754E40E946D2D20E030E048E452E451
-:102870000E94182F20E030E040EA51E40E944A2EE6
-:102880000E94D52D660F771F660F771FFB01EE5351
-:10289000FD4F2081318142815381C701B6010E94E1
-:1028A000182F6B017C01C701B601DF91CF911F91F9
-:1028B0000F91FF90EF90DF90CF90BF90AF909F90DF
-:1028C0008F9008958091FC030895CF93DF9300D0FB
-:1028D0001F92CDB7DEB79C0180918304843019F537
-:1028E00093E099833B832A839093E9008FEF909143
-:1028F000E800815095FD06C095ED9A95F1F700002E
-:102900008111F5CF8091E80085FF0DC040E050E0D7
-:1029100063E070E0CE0101960E94C2168091E8004B
-:102920008E778093E8000F900F900F90DF91CF91FA
-:102930000895CF93DF9300D01F92CDB7DEB72091DB
-:102940008304243021F522E029839B838A8383E05A
-:102950008093E9008FEF9091E800815095FD06C0CB
-:1029600095ED9A95F1F700008111F5CF8091E8007F
-:1029700085FF0DC040E050E063E070E0CE010196BD
-:102980000E94C2168091E8008E778093E8000F9035
-:102990000F900F90DF91CF91089520918304243000
-:1029A000F1F422E02093E9002FEF3091E80021506C
-:1029B00035FD06C035ED3A95F1F700002111F5CF50
-:1029C0002091E80025FF0BC040E050E065E070E09A
-:1029D0000E94C2168091E8008E778093E8000895E7
-:1029E000CF93DF93EC0190918304943009F046C0BB
-:1029F000809185028823D9F0809186028823B9F0DE
-:102A00009093E9008FEF9091E800815095FD06C00A
-:102A100095E19A95F1F700008111F5CF8091E800DA
-:102A200085FF2CC040E050E060E170E017C081E01D
-:102A30008093E9008FEF9091E800815095FD06C0EA
-:102A400095ED9A95F1F700008111F5CF8091E8009E
-:102A500085FF14C040E050E068E070E0CE010E94C5
-:102A6000C2168091E8008E778093E80080E1FE0135
-:102A7000ACEEB3E001900D928A95E1F7DF91CF9132
-:102A8000089580918204811109C00E9457180E9404
-:102A9000B4188091E20084608093E200089510925F
-:102AA00082040895089508950C94FB2642E061EC99
-:102AB00081E00E94D11742E061EC82E00E94D117D0
-:102AC00042E061EC83E00E94D11742E161EC84E0D6
-:102AD0000C94D11780918504833009F455C030F4EB
-:102AE000813071F0823009F48EC008958A3009F483
-:102AF0007AC08B3009F460C0893009F09CC020C0D6
-:102B000080918404813A09F096C08091E800877F23
-:102B10008093E8008091880490918904892B21F4A6
-:102B200060E18CEE93E003C060E080E090E070E054
-:102B30000E940D178091E8008B778093E80008953C
-:102B400080918404813209F076C08091880490914C
-:102B50008904009719F0039709F06DC08091E8008F
-:102B6000877F8093E8008091E80082FD05C0809116
-:102B700083048111F8CF5FC08091F1008093FC0342
-:102B80008091E8008B7753C080918404813A09F0EA
-:102B900052C08091880490918904892B09F04BC020
-:102BA0008091E800877F8093E8008091E80080FFB3
-:102BB000FCCF8091850236C0809184048132D9F5A2
-:102BC0008091880490918904892BA9F58091E8006F
-:102BD000877F8093E8000E94061880918604809386
-:102BE00085020C943C2080918404813221F58091EF
-:102BF000E800877F8093E8000E9406188091870490
-:102C00008093FD03089580918404813AA1F480911A
-:102C1000E800877F8093E8008091E80080FFFCCF88
-:102C20008091FD038093F1008091E8008E7780937E
-:102C3000E8000C940618089584B7877F84BF88E164
-:102C40000FB6F89480936000109260000FBE80E889
-:102C500080936100109261000E94A91B0E94571886
-:102C60000E94B4188091E20084608093E20078941E
-:102C70000E943A1B0E94AB1B8BE792E00E94551BFF
-:102C800080918304853069F40E94BC268091810480
-:102C90008823B1F30E94EA26882391F30E94AC16A0
-:102CA000EFCF0E94B31BECCF292F33272330310500
-:102CB000C9F064F42130310581F02230310509F08A
-:102CC00043C08DE690E02FEB38E042C02132310561
-:102CD000F1F02232310541F137C082E190E02CE27F
-:102CE00039E036C099278130910541F08230910555
-:102CF00041F0892B49F5EBEBF8E005C0EDE8F8E091
-:102D000002C0E3E6F8E0849190E09F0121C06430C6
-:102D1000D8F4E62FF0E0EE0FFF1FE25EFC4F2081BB
-:102D2000318189E090E014C0643070F470E0FB0100
-:102D3000EE0FFF1FEA5EFC4F20813181FB01EE5E4A
-:102D4000FC4F808190E004C080E090E020E030E023
-:102D5000FA0131832083089580E189BD82E189BD34
-:102D600009B400FEFDCF8091D8008F7D8093D800FC
-:102D70008091E00082608093E0008091E00081FD1E
-:102D8000FCCF0895CF92DF92EF92FF920F931F93A3
-:102D9000CF93DF93EC018B016A010E94251881110A
-:102DA00033C0C114D10439F0F60180819181081B30
-:102DB000190BC80FD91FE12CF12C0115110519F1C0
-:102DC0008091E80085FD16C08091E8008E778093A1
-:102DD000E800C114D10449F0F60180819181E80E28
-:102DE000F91EF182E08285E00FC00E942518882339
-:102DF00021F30AC089918093F10001501109FFEF7E
-:102E0000EF1AFF0ADACF80E0DF91CF911F910F9187
-:102E1000FF90EF90DF90CF90089520918A04309139
-:102E20008B042617370748F06115710539F4209196
-:102E3000E8002E772093E80001C0B90140E0611559
-:102E40007105A9F120918304222309F443C02530A0
-:102E500009F442C02091E80023FD40C02091E80021
-:102E600022FD32C02091E80020FFE9CF4091F3001D
-:102E70002091F20030E0342BFC01CF016115710587
-:102E800059F02830310540F481918093F100615070
-:102E900071092F5F3F4FF1CF41E02830310509F034
-:102EA00040E02091E8002E772093E800C8CF411140
-:102EB000C9CF0AC080918304882361F0853061F016
-:102EC0008091E80083FD0AC08091E80082FFF2CF84
-:102ED00080E0089582E0089583E0089581E00895F8
-:102EE00020918A0430918B042617370748F061152A
-:102EF000710539F42091E8002E772093E80001C095
-:102F0000B901FC0120E06115710591F18091830404
-:102F1000882309F440C0853009F43FC08091E8005F
-:102F200083FD3DC08091E80082FD2FC08091E800C4
-:102F300080FFE9CF2091F3008091F20090E0922B86
-:102F40006115710559F08830910540F42491209362
-:102F5000F1003196615071090196F2CF21E0089796
-:102F600009F020E08091E8008E778093E800CBCFD5
-:102F70002111CCCF0AC080918304882361F0853071
-:102F800061F08091E80083FD0AC08091E80082FF33
-:102F9000F2CF80E0089582E0089583E0089581E013
-:102FA0000895982F973058F59093E900981739F0C5
-:102FB0007091EC002091ED005091F00003C0242F9F
-:102FC000762F50E021FF19C03091EB003E7F309307
-:102FD000EB003091ED003D7F3093ED003091EB0040
-:102FE00031603093EB007093EC002093ED00509330
-:102FF000F0002091EE0027FF07C09F5FD3CF8F70B6
-:103000008093E90081E0089580E008958091840430
-:1030100087FF11C08091E80082FD05C08091830484
-:103020008111F8CF11C08091E8008B770BC080919F
-:103030008304882349F08091E80080FFF8CF8091D5
-:10304000E8008E778093E80008952091E4003091A5
-:10305000E50095E64091EC00842F817040FF22C08E
-:103060008091E80080FD1CC080918304882391F04A
-:10307000853091F08091EB0085FD10C04091E40017
-:103080005091E5004217530729F39A01915011F727
-:1030900084E0089582E0089583E0089581E0089532
-:1030A00080E008954091E80042FFDECF08950E943D
-:1030B000C5180E94CD18E0EEF0E080818160808329
-:1030C000E8EDF0E080818F77808319BCA7EDB0E058
-:1030D0008C918E7F8C9380818F7E8083109282046E
-:1030E00008950F931F93CF93DF930E94C5180E94FA
-:1030F000CD18C8EDD0E088818F778883888180687B
-:10310000888388818F7D888319BC109283041092F4
-:103110007F04109281041092800400EE10E0F80108
-:1031200080818B7F808388818160888342E060E03A
-:1031300080E00E94D117E1EEF0E080818E7F8083F5
-:10314000E2EEF0E08081816080838081886080830E
-:10315000F80180818E7F8083888180618883DF9100
-:10316000CF911F910F910895E8EDF0E080818F7E5F
-:103170008083E7EDF0E080818160808384E082BF1E
-:1031800081E0809382040C947118E8EDF0E0808176
-:103190008E7F80831092E20008951092DA001092E0
-:1031A000E10008951F920F920FB60F9211242F93F2
-:1031B0003F934F935F936F937F938F939F93AF93BF
-:1031C000BF93EF93FF938091E10082FF0BC080914A
-:1031D000E20082FF07C08091E1008B7F8093E100D5
-:1031E0000E94391B8091DA0080FF1FC08091D800B7
-:1031F00080FF1BC08091DA008E7F8093DA0080917F
-:10320000D90080FF0DC080E189BD82E189BD09B48C
-:1032100000FEFDCF81E0809383040E94411505C02C
-:1032200019BC109283040E944F158091E10080FF29
-:1032300019C08091E20080FF15C08091E2008E7F6E
-:103240008093E2008091E20080618093E2008091AF
-:10325000D80080628093D80019BC85E080938304F5
-:103260000E9453158091E10084FF30C08091E200FC
-:1032700084FF2CC080E189BD82E189BD09B400FED4
-:10328000FDCF8091D8008F7D8093D8008091E100A0
-:103290008F7E8093E1008091E2008F7E8093E20038
-:1032A0008091E20081608093E20080917F04882316
-:1032B00011F084E007C08091E30087FD02C081E047
-:1032C00001C083E0809383040E9454158091E10043
-:1032D00083FF29C08091E20083FF25C08091E10037
-:1032E000877F8093E10082E08093830410927F04C3
-:1032F0008091E1008E7F8093E1008091E2008E7FDB
-:103300008093E2008091E20080618093E20042E0DD
-:1033100060E080E00E94D1178091F0008860809387
-:10332000F0000E945215FF91EF91BF91AF919F91D4
-:103330008F917F916F915F914F913F912F910F905E
-:103340000FBE0F901F9018951F920F920FB60F92FD
-:1033500011242F933F934F935F936F937F938F939A
-:103360009F93AF93BF93CF93DF93EF93FF93C0915E
-:10337000E900CF708091EC00D82FD17080FDD0E8AB
-:103380001092E9008091F000877F8093F00078949C
-:103390000E94E8191092E9008091F0008860809303
-:1033A000F000CD2BCF70C093E900FF91EF91DF913A
-:1033B000CF91BF91AF919F918F917F916F915F91CD
-:1033C0004F913F912F910F900FBE0F901F90189526
-:1033D0001F93CF93DF93CDB7DEB7AA970FB6F894BC
-:1033E000DEBF0FBECDBFE4E8F4E088E08E0F909121
-:1033F000F10091938E13FBCF0E946A158091E80033
-:1034000083FF1FC18091840490918504492F50E06F
-:103410004A30510508F015C1FA01EB59FF4F0C94E1
-:10342000FA30803881F0823809F00BC1809188042D
-:103430008F708093E9008091EB0085FB882780F9ED
-:103440001092E90006C0809180049091810491114E
-:1034500082609091E800977F9093E8008093F1005C
-:103460001092F100C8C0282F2D7F09F0EAC08823F0
-:1034700019F0823061F0E5C080918604813009F056
-:10348000E0C0933009F080E0809381042BC08091EC
-:103490008604811127C0809188048F7009F4D1C0FF
-:1034A0008093E9002091EB0020FF1CC0933021F4B1
-:1034B0008091EB00806214C09091EB00906190933A
-:1034C000EB0021E030E0A90102C0440F551F8A95AE
-:1034D000E2F74093EA001092EA008091EB008860E6
-:1034E0008093EB001092E9008091E800877F86C00E
-:1034F0008111A7C0109186041F778091E300807826
-:10350000812B8093E3008091E800877F8093E8001F
-:103510000E9406188091E80080FFFCCF8091E300B4
-:1035200080688093E300111102C082E001C083E053
-:103530008093830486C08058823008F082C08091D6
-:103540008604909187048C3D53E0950779F583E0DC
-:103550008A838AE289834FB7F894DE01139620E0CC
-:103560003EE051E2E32FF0E050935700E49120FF5A
-:1035700003C0E295EF703F5FEF708E2F90E0EA306E
-:1035800010F0C79601C0C0968D939D932F5F243194
-:1035900049F74FBF8091E800877F8093E8006AE297
-:1035A00070E0CE0101960E940D1714C0AE014F5F6E
-:1035B0005F4F609188040E945416BC01009709F483
-:1035C00040C09091E800977F9093E80089819A81AC
-:1035D0000E9470178091E8008B778093E80031C0DB
-:1035E000803879F58091E800877F8093E8008091AA
-:1035F0007F048093F1008091E8008E778093E8004B
-:103600000E9406181EC081111CC090918604923041
-:10361000C0F48091E800877F8093E80090937F0456
-:103620000E94061880917F04811106C08091E300FA
-:1036300087FD02C081E001C084E0809383040E9482
-:1036400056158091E80083FF0AC08091E800877FCB
-:103650008093E8008091EB0080628093EB00AA9653
-:103660000FB6F894DEBF0FBECDBFDF91CF911F9193
-:1036700008950895CF93809183048823A1F0C09189
-:10368000E900CF709091EC00892F817090FD80E867
-:10369000C82B1092E9008091E80083FD0E94E81990
-:1036A000CF70C093E900CF91089590930304809365
-:1036B00002040895E0910204F0910304309721F090
-:1036C0000190F081E02D099480E00895E0910204DA
-:1036D000F0910304309721F00280F381E02D0994EA
-:1036E0000895E0910204F0910304309721F00480E2
-:1036F000F581E02D09940895209100043091010492
-:103700008217930771F09093010480930004E09175
-:103710000204F0910304309721F00680F781E02D38
-:10372000099408952091FE033091FF0382179307B7
-:1037300071F09093FF038093FE03E0910204F091F7
-:103740000304309721F00084F185E02D0994089559
-:1037500008950C94A81B0E942F270E94F10C0E9430
-:10376000B5270C94692C5F926F927F928F929F92F3
-:10377000AF92BF92CF92DF92EF92FF920F931F937F
-:10378000CF93DF9300D000D01F92CDB7DEB70E9459
-:10379000360D9DE0C92E94E0D92E03E010E0AA2456
-:1037A000A394B12C502E802F0E94B10D4C01F60134
-:1037B000729062906F016826792661147104A1F4F9
-:1037C0000150110978F78FEF89838A831B820E9449
-:1037D00038278160782F9D838C8349815A816B8142
-:1037E0008D810E94631C38C08091620481FD0E941B
-:1037F000BA0D2BE030E07501022E02C0EE0CFF1C6A
-:103800000A94E2F7C70186219721892B09F12983C0
-:103810005A828E209F2091E0892809F490E09B83B2
-:103820000E9438278160782F9D838C8349815A813B
-:103830006B818D810E94631C000F111FF801EB5FEB
-:10384000FB4F80819181E826F926F182E08204C055
-:103850002150310980F6B4CF0E94A12910910404AF
-:103860000E945A1B1817D1F00E945A1B809304041F
-:103870000F900F900F900F900F90DF91CF911F91AD
-:103880000F91FF90EF90DF90CF90BF90AF909F90FF
-:103890008F907F906F905F900C94DB0C0F900F9047
-:1038A0000F900F900F90DF91CF911F910F91FF908C
-:1038B000EF90DF90CF90BF90AF909F908F907F90D0
-:1038C0006F905F900895CF93DF93CDB7DEB72B97BE
-:1038D0000FB6F894DEBF0FBECDBF4F835887698700
-:1038E0007A878B87DE01119686E0FD0111928A9519
-:1038F000E9F785E0FE01379601900D928A95E1F790
-:1039000049815A816B817C818D819E810E94DA225E
-:103910002B960FB6F894DEBF0FBECDBFDF91CF91CF
-:103920000895CF93882309F4C2C0C82F823859F470
-:103930000E945A1B81FDBBC089E30E94B4250E94EE
-:10394000812689E30CC0833879F40E945A1B80FDDC
-:10395000AEC083E50E94B4250E94812683E50E94C3
-:10396000F625CF910C948126843859F40E945A1B75
-:1039700082FD9DC087E40E94B4250E94812687E4D1
-:10398000EECF8CEF8C0F813A48F48C2F0E94D12B14
-:1039900081118DC08C2F0E94B425E3CF80E28C0F63
-:1039A000883048F4C77081E001C0880FCA95EAF7F3
-:1039B0000E943A26D6CF8BE58C0F833078F4C53A37
-:1039C00029F0C63A31F083E890E005C081E890E044
-:1039D00002C082E890E0CF910C947C1B88E58C0FAC
-:1039E000833108F064C0C83A39F1C93A41F1CA3AA2
-:1039F00049F1CB3A51F1CC3A59F1CD3A61F1C03BA2
-:103A000069F1CE3A71F1CF3A79F1C13B81F1C23B14
-:103A100089F1C33B91F1C43B99F1C53BA1F1C63B90
-:103A2000A9F1C73BB1F1C83BB9F1C93BC1F1CA3BF0
-:103A3000C9F180E090E038C082EE90E035C089EEB8
-:103A400090E032C08AEE90E02FC085EB90E02CC071
-:103A500086EB90E029C087EB90E026C08CEC90E0EC
-:103A600023C08DEC90E020C083E891E01DC08AE87F
-:103A700091E01AC082E991E017C084E991E014C096
-:103A800081E292E011C083E292E00EC084E292E013
-:103A90000BC085E292E008C086E292E005C087E2B2
-:103AA00092E002C08AE292E0CF910C94921BCF91F7
-:103AB0000895882309F44BC0823859F40E945A1B98
-:103AC00081FF45C089E30E94B4250E94812689E3D5
-:103AD0000CC0833871F40E945A1B80FF38C083E504
-:103AE0000E94B4250E94812683E50E94F6250C944D
-:103AF0008126843859F40E945A1B82FF28C087E42B
-:103B00000E94B4250E94812687E4EFCF9CEF980F96
-:103B1000913A58F390E2980F983050F4877091E002
-:103B200001C0990F8A95EAF7892F0E944026DFCFBE
-:103B30009BE5980F933020F480E090E00C947C1B80
-:103B4000885A833120F480E090E00C94921B089511
-:103B5000882321F00E943A260C9481260895882318
-:103B600021F00E9440260C94812608957F928F9226
-:103B70009F92AF92BF92CF92DF92EF92FF920F93FC
-:103B80001F93CF93DF931F92CDB7DEB77C01C62E74
-:103B9000772EFC01058102950F70128111110E9490
-:103BA00057260E94AD25882379F0112369F080E221
-:103BB0008C0D883048F082E00E9496250E94AD2549
-:103BC00091E0D82ED92601C0D12CE72DE295EF70D7
-:103BD000F0E0E159FF4F0C94FA30872D807F072DDC
-:103BE0000F70882311F00295007F112389F00023C4
-:103BF00009F499C180E28C0D883020F4802F0E9456
-:103C00003A2603C0802F0E944A260E9481268BC13B
-:103C10008C2D0E94591D002309F4C3C180E28C0D34
-:103C2000883020F4802F0E94402603C0802F0E94FD
-:103C300050260E948126B5C1872D807F972D9F70C9
-:103C4000803211F4892F03C0892F8295807FCC2088
-:103C500021F0F1E0CF16A1F01DC0112339F00023AF
-:103C600019F1013009F50E946A269BC1002319F061
-:103C7000013009F496C189830E946D26898110C1A3
-:103C8000112321F0063008F08CC10EC0053008F079
-:103C900088C106C1112359F0002331F0F701958145
-:103CA00090FF41C19F7095830E94A81D7AC1002397
-:103CB00009F4F6C03EC1872D86958695837090E005
-:103CC000009719F0019761F06CC1112321F08C2D40
-:103CD000972D937002C080E090E00E947C1B61C130
-:103CE000112321F08C2D972D937002C080E090E07D
-:103CF0000E94921B56C18C2D112319F00E94A928F5
-:103D000002C00E9411290E9496294BC1872D837001
-:103D100009F052C0111145C18C2D8295869587708E
-:103D2000880F880F9C2D9F70892E912CA12CB12C6F
-:103D3000082E04C0880C991CAA1CBB1C0A94D2F73C
-:103D4000C4FE14C00FE010E020E030E0B901A8018B
-:103D500004C0440F551F661F771F8A95D2F7CB0109
-:103D6000BA01609570958095909503C060E070E011
-:103D7000CB01272D26952695237030E02230310582
-:103D800069F02330310589F0682979298A299B292E
-:103D90002130310571F00E94222403C1682979295C
-:103DA0008A299B290E943E24FCC00E942224C5012E
-:103DB000B4010E940624F5C0112319F0872D8170EB
-:103DC00001C08695882309F4ECC08C2D82958695D8
-:103DD0008770880F880F9C2D9F70892E912CA12CA5
-:103DE000B12C082E04C0880C991CAA1CBB1C0A9478
-:103DF000D2F7C4FE14C00FE010E020E030E0B901BB
-:103E0000A80104C0440F551F661F771F8A95D2F77B
-:103E1000CB01BA01609570958095909503C060E0E4
-:103E200070E0CB01272D269526952370422F50E078
-:103E30004230510569F04330510589F068297929EC
-:103E40008A299B294130510571F00E94FC24A9C0A8
-:103E5000682979298A299B290E941825A2C00E94D5
-:103E6000FC24C501B4010E94E0249BC08C2D90E08D
-:103E7000FC01E05EF109E531F10508F050C0E158C0
-:103E8000FF4F0C94FA300C2D0F70872D8F7111237A
-:103E900021F00E947924802F07CF0E949A24802F3E
-:103EA0000E94AF1D7EC0112341F0053008F079C09B
-:103EB000872D8F710E94BF2474C0063008F071C036
-:103EC000F7CF112339F0872D8F710E94792469C0B3
-:103ED0001123C9F3872D8F710E949A2462C0112388
-:103EE00029F0872D8F710E9464245BC00E945A24A0
-:103EF00058C0112351F0172D1F71812F0E94792472
-:103F000063E0812F0E948D254CC081E00E949625A0
-:103F1000023008F446C082E00E94962542C0112378
-:103F200031F0002381F28C2D0E94911C3AC00023B5
-:103F300089F28C2D0E94591D34C0472D4F706C2D75
-:103F4000C7010E941C060E947E232BC0111129C0AC
-:103F5000472D4F7050E042305105B9F04CF44115F7
-:103F6000510581F041305105E1F40E94912C19C0B6
-:103F70004330510569F04430510599F48C2D0E946D
-:103F8000E32C0FC00E947A2C0CC00E94AD2C09C0FB
-:103F90000E94C02C06C0472D4F706C2DC7010E9497
-:103FA0007C09DD20F9F00E94892580FD1BC0F70106
-:103FB00012820E9483250E947924C7010E94012059
-:103FC0000E9483250F90DF91CF911F910F91FF9059
-:103FD000EF90DF90CF90BF90AF909F908F907F90A9
-:103FE0000C949A240F90DF91CF911F910F91FF9025
-:103FF000EF90DF90CF90BF90AF909F908F907F9089
-:1040000008950F931F93CF93DF93EC0188819981DB
-:104010002B813C81232BB9F09F3F11F48F3F99F006
-:10402000CE010E947B07882371F0688179818A81A3
-:104030000E947F258C010E9434250E94FB23B80139
-:10404000CE010E94B61DDF91CF911F910F9108956F
-:104050000E9457260E9467260E942C260E948126D5
-:104060000E94472A0E94962980E090E00E947C1BD3
-:1040700080E090E00C94921B0E9447260C9428202C
-:104080000E947425292F22952F7030E02C303105A5
-:104090004CF42A3031056CF42250310922303105BC
-:1040A000A8F407C02C30310569F02F30310551F0EC
-:1040B0000DC0803F69F018F4803E40F409C0843F91
-:1040C00029F406C093FB882780F9089580E00895BD
-:1040D00081E00895CF93DF9300D000D01F92CDB739
-:1040E000DEB70F900F900F900F900F90DF91CF9150
-:1040F0000895CF93DF9300D000D000D0CDB7DEB7C6
-:1041000026960FB6F894DEBF0FBECDBFDF91CF91DC
-:1041100008951F93CF93DF93C0910D0416E0809113
-:104120000E04C81799F0D0E01C9FF0011D9FF00D00
-:104130001124E15FFB4F4081518162817381848151
-:1041400095810E9479202196C770E9CFDF91CF91A8
-:104150001F91089540913F045091400460914104A3
-:104160007091420480914304909144040C9479200E
-:104170008091440482958F7009F054C0809141046D
-:10418000882309F44FC080910D04A0910E04609122
-:104190003F04709140044091420450914304B6E0C2
-:1041A0008A1709F43FC090E041155105C1F17F3FE6
-:1041B00011F46F3FA1F1B89FF001B99FF00D1124E8
-:1041C000E15FFB4F218172132AC02081621327C057
-:1041D0002281211124C0238134812417350710F452
-:1041E00021503109241B350B283C3105C0F42091A6
-:1041F00044042F7020612093440426E0289FF0019E
-:10420000299FF00D1124EC5EFB4F80818F7080613F
-:1042100080838FE394E00E9401200C948920019612
-:104220008770BECF0895CF92DF92EF92FF920F93E7
-:104230001F93CF93DF93CDB7DEB762970FB6F89495
-:10424000DEBF0FBECDBF8C0185E0F801DE011D96FB
-:1042500001900D928A95E1F7D8014C9111965C91ED
-:10426000119712966C9112971396CD90DC9014973B
-:1042700030913F0470914004809142049091430436
-:10428000009709F46BC17F3F19F43F3F09F466C101
-:10429000E0904104EE2009F4C0C020914404C81607
-:1042A000D90628F0F601E81BF90BCF0104C0809570
-:1042B00090958C0D9D1DFF24F394883C910578F01A
-:1042C000F12C207F09F0C6C07C2DD98AC88A898943
-:1042D0000E946A208FE394E00E940120B1C0822FE7
-:1042E000807F09F046C0751314C0341312C06111E9
-:1042F00010C02F702061209344040E94AA208FE3F5
-:1043000094E00E94012080914404D80115968C937A
-:104310002EC0CD2819F15F3F11F44F3FF9F0F62E72
-:1043200061111CC080910D0420910E0436E08217AB
-:1043300009F45AC090E0389FF001399FF00D112424
-:10434000E15FFB4F7181571306C07081471303C0B3
-:104350007281711103C001968770E9CFF62E662332
-:1043600009F418C180914404816080934404F12CC5
-:1043700011C1751308C0341306C0611104C08091C7
-:104380004404D801C3C04D875E878D859E856A8BA6
-:104390000E9440206A898823E1F16623D1F12091AF
-:1043A0004404822F82958F7090E0029774F0809180
-:1043B0003F049091400498878F831986DB86CA86D4
-:1043C0002C87CE0107960E94012086E0F801AFE31A
-:1043D000B4E001900D928A95E1F70E94B8200E9406
-:1043E000AA20FF24F394D6C04D875E878D859E85D5
-:1043F0000E947425292F22952F7030E0223031053C
-:104400000CF0BCC09F7009F0B6C0805E883008F424
-:10441000C1C0C8010E940120E4CFC816D90608F423
-:1044200053C0F601E81BF90BCF01883C910508F455
-:1044300050C0F12C7C2DD98AC88A89890E946A20B3
-:10444000EFE3F4E086E0DF011D928A95E9F70E9430
-:10445000AA20A0C0751314C0341312C0611110C07B
-:1044600080914404F8018583C8010E94012086E000
-:10447000EFE3F4E0DF011D928A95E9F7FE2C8AC094
-:104480004D875E878D859E856A8B0E9440206A8954
-:10449000882309F4BECF662309F4BBCF20914404DE
-:1044A000822F82958F7090E002970CF48ECF8091CE
-:1044B0003F04909140049A8389831B82DD82CC82E1
-:1044C0002E83CE0101967FCF809590958C0D9D1DFA
-:1044D000ACCFF62E662309F49CCF75132EC034138F
-:1044E0002CC02091440420FD1FC0822F82958F7024
-:1044F000D9F0D80115962C9315978F3049F08F5F1E
-:10450000982F9295907F822F8F70892B15968C9380
-:10451000C8010E94012086E0F801AFE3B4E00190F9
-:104520000D928A95E1F793CF86E0F801AFE3B4E00E
-:1045300001900D928A95E1F72DC04D875E878D859C
-:104540009E850E944020811140CF8091440481606B
-:1045500080934404C8010E9401201CC0662309F412
-:1045600058CF4D875E878D859E850E944020882389
-:1045700009F44FCF2ACF811148CF0CC02430310528
-:104580000CF047CF9F7009F440CFF8019581907FE0
-:1045900009F03BCF8F2D62960FB6F894DEBF0FBEA9
-:1045A000CDBFDF91CF911F910F91FF90EF90DF90E2
-:1045B000CF9008951F93CF93DF93CDB7DEB72C979D
-:1045C0000FB6F894DEBF0FBECDBF4F835887698703
-:1045D0007A878B879C87CE0107960E9413218823B8
-:1045E00069F08F8198852A853B85232BF1F19F3FC8
-:1045F00009F063C08F3F09F060C037C086E0FE015C
-:104600003796DE01119601900D928A95E1F76F8140
-:104610007885EA85FB85309741F17F3F11F46F3F44
-:1046200021F120910E0430E0C9010196877099278D
-:1046300040910D0450E08417950709F447C0698341
-:104640007A83FD83EC8396E0929FD001939FB00D17
-:104650001124A15FBB4FFE01319601900D929A95F6
-:10466000E1F780930E040E94892016E080910D04EA
-:1046700090910E048917C1F1189FC0011124815F28
-:104680009B4F0E941321882379F1E0910D041E9F16
-:10469000F0011124E15FFB4F408151816281738100
-:1046A000848195810E94792080910D0490E001968B
-:1046B0008770992780930D04D9CF4F8158856985DC
-:1046C0007A858B859C850E947920CFCF0E943C20E3
-:1046D00010920E0410920D04EFE3F4E086E0DF0187
-:1046E0001D928A95E9F7C1CF2C960FB6F894DEBFDC
-:1046F0000FBECDBFDF91CF911F910895EF92FF9232
-:104700000F931F93CF93DF938C01009709F46CC034
-:10471000F12CEE24E394E8012196F801849184378A
-:1047200040F4843008F051C0813081F0823019F1BA
-:104730005BC0853709F444C0A8F19CE7980F903717
-:1047400008F052C08F770E94591D41C00E5F1F4F65
-:10475000FE01C49180E28C0F883048F4C7708E2D22
-:1047600001C0880FCA95EAF70E945A2614C08C2F00
-:104770000E94911C2DC00E5F1F4FFE01C49180E26C
-:104780008C0F883058F4C7708E2D01C0880FCA95E1
-:10479000EAF70E9460260E9481261AC08C2F0E9490
-:1047A000591D16C00E5F1F4FFE01C491CC2381F02E
-:1047B0008FE99FE00197F1F700C00000C150F6CFEC
-:1047C0000E5F1F4FFE01F49003C00E94911C8E01EA
-:1047D0008F2D882309F49FCFEFE9FFE03197F1F7A0
-:1047E00000C000008150F5CFDF91CF911F910F9154
-:1047F000FF90EF90089508956093490470934A04E0
-:1048000080934B0490934C040C9428200F931F9397
-:104810000091490410914A0420914B0430914C04BA
-:10482000DC01CB01802B912BA22BB32B809349046D
-:1048300090934A04A0934B04B0934C041F910F91A2
-:104840000C9428200F931F930091490410914A045F
-:1048500020914B0430914C04DC01CB018023912347
-:10486000A223B3238093490490934A04A0934B045A
-:10487000B0934C041F910F910C9428200F931F9319
-:104880000091490410914A0420914B0430914C044A
-:10489000DC01CB0180279127A227B327809349040D
-:1048A00090934A04A0934B04B0934C041F910F9132
-:1048B0000C9428201092450410924604109247044C
-:1048C000109248040C94282041E050E060E070E031
-:1048D00004C0440F551F661F771F8A95D2F7409377
-:1048E00045045093460460934704709348040C9425
-:1048F000282041E050E060E070E004C0440F551F04
-:10490000661F771F8A95D2F78091450490914604DF
-:10491000A0914704B0914804482B592B6A2B7B2B5C
-:1049200040934504509346046093470470934804B1
-:104930000C94282041E050E060E070E004C0440F97
-:10494000551F661F771F8A95D2F740955095609541
-:1049500070958091450490914604A0914704B091D0
-:104960004804482359236A237B23409345045093EA
-:10497000460460934704709348040C94282041E057
-:1049800050E060E070E004C0440F551F661F771FC1
-:104990008A95D2F78091450490914604A0914704EE
-:1049A000B0914804482759276A277B27409345043C
-:1049B0005093460460934704709348040C94282055
-:1049C0000F931F93009145041091460420914704D2
-:1049D00030914804DC01CB01802B912BA22BB32B0F
-:1049E0008093450490934604A0934704B0934804F1
-:1049F0001F910F910C9428200F931F930091450451
-:104A0000109146042091470430914804DC01CB0109
-:104A100080239123A223B3238093450490934604DB
-:104A2000A0934704B09348041F910F910C94282041
-:104A30000F931F9300914504109146042091470461
-:104A400030914804DC01CB0180279127A227B327AE
-:104A50008093450490934604A0934704B093480480
-:104A60001F910F910C9428200895CF92DF92EF921E
-:104A7000FF920F931F93CF93DF938C01C090490453
-:104A8000D0904A04E0904B04F0904C04809145048F
-:104A900090914604A0914704B0914804C82AD92AAD
-:104AA000EA2AFB2ACFE1D0E0D701C6010C2E04C0D0
-:104AB000B695A795979587950A94D2F780FF06C07B
-:104AC000B8018C2F0E94010C019721F4219760F707
-:104AD00080E001C08C2FDF91CF911F910F91FF904B
-:104AE000EF90DF90CF900895CF93DF93EC010E9479
-:104AF0003525BE010E94010CDF91CF910895CB01B5
-:104B00000E947425089580914D048595859585951D
-:104B1000089580914D048770089598E0899F9001D1
-:104B20001124262B20934D040C94792420914D04BC
-:104B30008095822380934D04982F977069F430E01C
-:104B4000482F552747FD50952417350729F085959F
-:104B5000859585950C949A24089590914D049770AD
-:104B600081E009F480E0089590918502992321F075
-:104B700090918602911109C020918702309188029C
-:104B8000F90132969FEF40E01FC0982F96959695B9
-:104B900096959F3050F5E0918702F0918802E90FD9
-:104BA000F11D877021E030E0A90102C0440F551FBC
-:104BB0008A95E2F7CA019181892B818308959F3FED
-:104BC00039F04F5F4E3041F051915813F8CF0DC07E
-:104BD0005111F7CF942FF5CF9F3F39F0F901E90F2D
-:104BE000F11D97FDFA9582830895089590918502AD
-:104BF000992321F090918602911109C0209187029A
-:104C000030918802F9013296205F3F4F1FC0982FE4
-:104C10009695969596959F30F0F4E0918702F091E5
-:104C20008802E90FF11D877021E030E0A90102C080
-:104C3000440F551F8A95E2F7CA0180959181892317
-:104C4000818308953196E217F30729F09081981334
-:104C5000F9CF1082F7CF089581E090E0E0918702CC
-:104C6000F0918802E80FF91F1082019680319105BA
-:104C7000A9F7089590916104892B809361040895A8
-:104C80008095909161048923809361040895109226
-:104C90006104089590916004892B809360040895C5
-:104CA0008095909160048923809360040895109208
-:104CB0006004089590915F04892B80935F040895A8
-:104CC000809590915F04892380935F0408951092EA
-:104CD0005F04089580934E04089510924E04089541
-:104CE0008091870290918802FC0131969C01205F9F
-:104CF0003F4F80E0919191118F5FE217F307D1F759
-:104D00000895E0918702F091880280916104808388
-:104D1000E0918702F0918802908180916004892B54
-:104D20008083E0918702F0918802908180915F04F6
-:104D3000892B808380914E04882361F0E091870263
-:104D4000F09188029081892B80830E9470268111C6
-:104D500010924E0480918702909188020C94661BF9
-:104D600020E0009739F0AC0141505109842395238C
-:104D70002F5FF7CF822F089580918304843039F11B
-:104D80001092630420E488E190E00FB6F894A895AF
-:104D9000809360000FBE2093600080E00E94770542
-:104DA00080E00E94DB0C83B7817F846083BF83B780
-:104DB000816083BF7894889583B78E7F83BF88E1B5
-:104DC0000FB6F89480936000109260000FBE0895B3
-:104DD0000895089580E00E9477050E94E8260E94C9
-:104DE000360D0E94E9260E94BB0D91E0811101C0A1
-:104DF00090E0892F08950E943C2080E00E94770572
-:104E00000E94692C0E945A1B0C94DB0C1F920F927B
-:104E10000FB60F9211248F939F93AF93BF938091FE
-:104E20006304811113C08091640490916504A09182
-:104E30006604B09167044196A11DB11D809364047E
-:104E400090936504A0936604B0936704BF91AF91FB
-:104E50009F918F910F900FBE0F901F90189582E039
-:104E600084BD93E095BD9AEF97BD80936E00089541
-:104E70002FB7F8948091640490916504A091660422
-:104E8000B09167042FBF0895CF92DF92EF92FF9207
-:104E90000F931F932FB7F8944091640450916504C9
-:104EA00060916604709167042FBF6A017B01EE2454
-:104EB000FF248C0120E030E0C016D106E206F306A4
-:104EC00010F4415051099A01281B390BC9011F9157
-:104ED0000F91FF90EF90DF90CF9008951F920F9267
-:104EE0000FB60F9211248F939F93AF93BF9380912E
-:104EF000640490916504A0916604B09167040196E2
-:104F0000A11DB11D8093640490936504A093660471
-:104F1000B0936704BF91AF919F918F910F900FBE97
-:104F20000F901F9018950E945718F8942FEF87EA5A
-:104F300091E6215080409040E1F700C0000087E0FA
-:104F400090EBDC0180938E0490938F04A0939004E7
-:104F5000B09391049CE088E10FB6F894A8958093F3
-:104F600060000FBE90936000FFCF0E94F427811174
-:104F700002C00E94D0270E94FF27809362040E94F3
-:104F80000C2880938C0487FB882780F98093860205
-:104F90000E940328682F70E080E090E00C94FC23CE
-:104FA0006DEE7EEF80E090E00E94203160E082E0D4
-:104FB00090E00E940E3160E083E090E00E940E31AC
-:104FC00060E084E090E00E940E3160E085E090E0D7
-:104FD0000E940E3160E086E090E00E940E316FEF9B
-:104FE00087E090E00C940E3180E090E00E94083160
-:104FF00021E08D3E9E4F09F020E0822F089582E04F
-:1050000090E00C94003183E090E00C940031682F24
-:1050100083E090E00C940E3184E090E00C94003139
-:10502000682F84E090E00C940E3186E090E00C94C0
-:105030000031682F86E090E00C940E3187E090E01C
-:105040000C940031682F87E090E00C940E31809131
-:105050006A0480FF0BC060918C0285E0689FB001FC
-:10506000112475956795759567952BC081FF09C0CB
-:1050700060918C0285E0689FB00111247595679559
-:1050800020C082FF07C060918C0285E0689FB0015C
-:10509000112417C090916B049923D1F060918B0279
-:1050A000961788F720918C0285E0289F90011124A3
-:1050B000929FA001939F500D112470E0CA010E949D
-:1050C000E6306038710540F46115710539F002C0B1
-:1050D00065E070E0862F08958FE7089581E00895D8
-:1050E00080916A0480FF08C060918A0270E0759523
-:1050F00067957595679521C081FF06C060918A020A
-:1051000070E07595679519C082FF04C060918A02AE
-:1051100070E010C090916B049923C1F060918902F6
-:105120009617A0F780918A02899FC001112470E030
-:105130000E94E6306038710528F46115710521F090
-:10514000862F08958FE7089581E0089561E070E06B
-:10515000F4CF803F21F40E942728819504C0813F2D
-:1051600029F40E94272880936E040895823F21F439
-:105170000E942728819504C0833F29F40E94272894
-:1051800080936D040895893F19F40E94702805C02A
-:105190008A3F31F40E947028819580936F040895AE
-:1051A0008B3F21F40E947028819504C08C3F29F424
-:1051B0000E947028809370040895843F21F48091A8
-:1051C0006C04816017C0853F21F480916C0482607B
-:1051D00011C0863F21F480916C0484600BC0873F2E
-:1051E00021F480916C04886005C0883F31F480917F
-:1051F0006C04806180936C0408958D3F21F480914C
-:105200006A0481600BC08E3F21F480916A04826041
-:1052100005C08F3F29F480916A04846080936A04FA
-:105220000895803F39F480916E0487FF6CC010921E
-:105230006E0469C0813F29F480916E041816BCF396
-:1052400062C090916D04823F29F497FF5CC0109278
-:105250006D0459C0833F19F41916CCF354C0893F2B
-:1052600041F480916F0418160CF04DC010926F0439
-:105270004AC08A3F29F480916F0487FF44C0F6CF6B
-:105280008B3F39F48091700487FF3DC01092700409
-:105290003AC08C3F29F4809170041816BCF333C0D7
-:1052A000843F21F480916C048E7F17C0853F21F4E8
-:1052B00080916C048D7F11C0863F21F480916C0435
-:1052C0008B7F0BC0873F21F480916C04877F05C0E2
-:1052D000883F31F480916C048F7E80936C0413C0FE
-:1052E0008D3F21F480916A048E7F0BC08E3F21F4A4
-:1052F00080916A048D7F05C08F3F29F480916A04F4
-:105300008B7F80936A0480916D0481110EC080911F
-:105310006E0481110AC080916F04811106C08091D2
-:105320007004811102C010926B0408958CE694E021
-:105330000E94711B0E94382790936904809368042F
-:1053400008951F93CF93DF9380916804909169042F
-:105350000E944427AC0190916B04992321F0209185
-:105360008D0230E006C020918E028AE0289F9001D5
-:1053700011244217530708F486C080916D04C09130
-:105380006E04D0916F0410917004811107C0C11197
-:1053900076C0D11174C0111172C075C09F3F19F051
-:1053A0009F5F90936B04181624F40E942728809323
-:1053B0006D0480916D0487FF05C00E9427288195A8
-:1053C00080936D041C1624F40E94272880936E0499
-:1053D00080916E0487FF05C00E94272881958093E5
-:1053E0006E0460916D04662339F1C0916E04CC2384
-:1053F00019F1772767FD7095872F972F0E94082E48
-:1054000023E333E343E35FE30E94182F0E94D52D8B
-:1054100060936D046C2F772767FD7095872F972F0A
-:105420000E94082E23E333E343E35FE30E94182F37
-:105430000E94D52D60936E041D1624F40E947028DE
-:1054400080936F0480916F0487FF05C00E947028CD
-:10545000819580936F04111624F40E947028809324
-:1054600070048091700487FF05C00E9470288195A8
-:1054700080937004DF91CF911F910C9496299F3FE8
-:1054800009F08ECF96CFDF91CF911F910895ECE672
-:10549000F4E085E0DF011D928A95E9F710926B0434
-:1054A00010926A040895833081F128F4813059F014
-:1054B0008230D1F00895853009F449C0B8F18630C2
-:1054C00009F456C0089580918E02262F30E0280FEF
-:1054D000311D2F3F310524F4680F60938E0208952B
-:1054E0008FEF80938E02089580918D02262F30E0F9
-:1054F000280F311D2F3F310524F4680F60938D0272
-:1055000008958FEF80938D02089580918C02262F4D
-:1055100030E0280F311D2F3F310524F4680F6093D0
-:105520008C0208958FEF80938C02089580918B02F6
-:10553000262F30E0280F311D2F3F310524F4680F4E
-:1055400060938B0208958FEF80938B020895809172
-:105550008A02262F30E0280F311D2F3F310524F419
-:10556000680F60938A0208958FEF80938A020895EE
-:1055700080918902262F30E0280F311D2F3F310501
-:1055800024F4680F6093890208958FEF8093890255
-:105590000895833011F128F4813049F0823091F080
-:1055A0000895853081F120F18630C1F10895809110
-:1055B0008E02681720F4861B80938E020895109245
-:1055C0008E02089580918D02681720F4861B8093C7
-:1055D0008D02089510928D02089580918C026817B3
-:1055E00020F4861B80938C02089510928C020895FB
-:1055F00080918B02681720F4861B80938B0208959C
-:1056000010928B02089580918A02681720F4861BFD
-:1056100080938A02089510928A02089580918902E7
-:10562000681720F4861B80938902089510928902DE
-:1056300008950F931F93873208F048C08E3108F009
-:105640008DC0803109F477C008F5873009F461C056
-:1056500068F4863009F09DC080916204817F8E7F5E
-:105660008093620481E08093720494C08B3009F4CB
-:1056700089C08E3009F08DC08091620482FB2227A0
-:1056800020F991E0922790FB82F95EC0863109F4FF
-:1056900079C060F4813109F07CC00E943C20909177
-:1056A000860281E08927809386026CC0893109F4E3
-:1056B00069C08B3109F06DC08091620481FB2227A3
-:1056C00020F991E0922790FB81F93EC0883309F4DC
-:1056D00059C050F4893209F457C0853309F454C0D5
-:1056E000873209F451C055C0833409F44DC028F401
-:1056F0008A3308F44EC0895332C0883409F049C057
-:105700000E943C200E94EB0D0E94F1060E9493270C
-:1057100039C090916204892F8095817080FB90F947
-:1057200029F0966098609093620434C0997F977FC7
-:105730009093620427C08091620483FB222720F9A2
-:1057400091E0922790FB83F9809362049923D1F032
-:105750008091620481608093620414C08D5141E0A5
-:1057600050E060E070E08A019B0104C0000F111F4F
-:10577000221F331F8A95D2F7C901B8010E94FC236A
-:105780000E943C2081E006C061E070E080E090E093
-:10579000F5CF80E01F910F91089580E0089580E09B
-:1057A0000895CF93C82F80917204813069F018F06A
-:1057B0008230C9F184C0E0918702F0918802808133
-:1057C000823209F07EC007C0E0918702F091880222
-:1057D0008081823261F48C2F0E94CD2B811104C014
-:1057E0008C2F0E94192B1DC081E090E01AC08C2FD5
-:1057F0000E94CF2B811114C0C43179F048F4CB3012
-:1058000079F0C03109F061C082E08093720408C071
-:10581000C93219F0C83321F058C01092720455C033
-:1058200081E0817054C0C93291F120F5C43179F121
-:10583000B0F4C73009F047C08EE180938E0282E356
-:1058400080938D028AE080938C0284E180938B02A6
-:1058500088E080938A0288E28093890234C0CE5126
-:10586000C63088F5EC2FF0E0EA5DFC4F8081809334
-:10587000710429C0CE34E9F020F4CB3421F56AE07C
-:1058800013C0C13579F0C235F1F461E00DC08091EB
-:105890007104882319F01092710415C081E080937F
-:1058A000720415C061E006C0809171040E94532A01
-:1058B0000AC06AE0809171040E94C92A04C0109253
-:1058C000720480E004C081E002C080E0AACFCF91E2
-:1058D00008950E94F427811102C00E94D0270E94DF
-:1058E000152880938D0480FF02C0869501C080E05A
-:1058F0000C94770580918D04982F9695292F30E090
-:10590000233031054CF49F5F990F8170892B8160A2
-:1059100080938D040E94192880918D0486950C94A3
-:10592000770580918D04982F969591F09158990F55
-:105930008170892B80938D048E7F91E009F490E033
-:1059400080918D0490FB80F980938D040E9419282A
-:1059500080918D0486950C94770580918D04982F05
-:10596000909590FB80F980938D040E941928809176
-:105970008D0480FF02C0869501C080E00C947705FD
-:1059800090918D04892F86958F5F8F7791708430E9
-:1059900028F4880F892B80938D0402C090938D0486
-:1059A00080918D048E7F91E009F490E080918D04C8
-:1059B00090FB80F980938D040E94192880918D04BA
-:1059C00086950C94770520918D04922F96958927C2
-:1059D000982F990F822F8170892B80938D048E7F51
-:1059E00091E009F490E080918D0490FB80F9809320
-:1059F0008D040E94192880918D0486950C9477055A
-:105A000080918D04869508955058BB27AA270ED003
-:105A1000D1C1C2D130F0C7D120F031F49F3F11F491
-:105A20001EF4B7C10EF4E095E7FB9FC1E92FD3D177
-:105A300080F3BA17620773078407950718F071F4AB
-:105A40009EF5EBC10EF4E0950B2EBA2FA02D0B01A5
-:105A5000B90190010C01CA01A0011124FF27591BB3
-:105A600099F0593F50F4503E68F11A16F040A22FB9
-:105A7000232F342F4427585FF3CF4695379527952A
-:105A8000A795F0405395C9F77EF41F16BA0B620B29
-:105A9000730B840BBAF09150A1F0FF0FBB1F661F70
-:105AA000771F881FC2F70EC0BA0F621F731F841FB3
-:105AB00048F4879577956795B795F7959E3F08F0D9
-:105AC000B3CF9395880F08F09927EE0F9795879598
-:105AD000089527D108F481E008950CD06BC163D1FB
-:105AE00040F05AD130F021F45F3F19F03EC151111E
-:105AF00095C14FC170D198F39923C9F35523B1F3E0
-:105B0000951B550BBB27AA2762177307840738F02C
-:105B10009F5F5F4F220F331F441FAA1FA9F333D08B
-:105B20000E2E3AF0E0E830D091505040E695001C3F
-:105B3000CAF729D0FE2F27D0660F771F881FBB1FFB
-:105B4000261737074807AB07B0E809F0BB0B802DD5
-:105B5000BF01FF2793585F4F2AF09E3F510568F021
-:105B600004C15CC15F3FECF3983EDCF3869577950A
-:105B70006795B795F7959F5FC9F7880F911D969523
-:105B8000879597F90895E1E0660F771F881FBB1F7F
-:105B9000621773078407BA0720F0621B730B840B2C
-:105BA000BA0BEE1F88F7E095089504D06894B11100
-:105BB00035C1089518D188F09F5790F0B92F9927D3
-:105BC000B751A0F0D1F0660F771F881F991F1AF008
-:105BD000BA95C9F712C0B13081F01FD1B1E0089574
-:105BE0001CC1672F782F8827B85F39F0B93FCCF3F5
-:105BF000869577956795B395D9F73EF490958095FE
-:105C0000709561957F4F8F4F9F4F0895E89409C01D
-:105C100097FB3EF490958095709561957F4F8F4FDF
-:105C20009F4F9923A9F0F92F96E9BB279395F695F5
-:105C3000879577956795B795F111F8CFFAF4BB0F73
-:105C400011F460FF1BC06F5F7F4F8F4F9F4F16C0D7
-:105C5000882311F096E911C0772321F09EE8872F61
-:105C6000762F05C0662371F096E8862F70E060E01D
-:105C70002AF09A95660F771F881FDAF7880F969596
-:105C8000879597F9089588D018F011F08CD038F4E2
-:105C900080C0C4C0E92F9FD0B0F35523C9F3E7FB00
-:105CA0006217730784079507A8F199F3E92FFF2777
-:105CB00088232AF03197660F771F881FDAF7952F10
-:105CC0005527442332F091505040220F331F441F78
-:105CD000D2F7BB27E91BF50B621B730B840BB109D1
-:105CE000C1F222F4620F731F841FB11D31972AF095
-:105CF000660F771F881FBB1FEFCF915050405AF09F
-:105D000041F0882332F0660F771F881F9150504072
-:105D1000C1F7939530C08695779567959F5FD9F7C2
-:105D2000F8CF990F0008550FAA0BE0E8FEEF161602
-:105D30001706E807F907C0F012161306E407F5077F
-:105D400098F0621B730B840B950B39F40A2661F0F3
-:105D5000232B242B252B21F408950A2609F4A14096
-:105D6000A6958FEF811D811D089597F99F6780E8A3
-:105D700070E060E008959F3F31F0915020F48795E6
-:105D800077956795B795880F911D9695879597F9A3
-:105D900008959FEF80EC089500240A9416161706C4
-:105DA00018060906089500240A941216130614060C
-:105DB00005060895092E0394000C11F4882352F06F
-:105DC000BB0F40F4BF2B11F460FF04C06F5F7F4F27
-:105DD0008F4F9F4F089557FD9058440F551F59F00E
-:105DE0005F3F71F04795880F97FB991F61F09F3FC8
-:105DF00079F087950895121613061406551FF2CFF1
-:105E00004695F1DF08C0161617061806991FF1CF40
-:105E100086957105610508940895E894BB27662767
-:105E20007727CB0197F908957CDF08F48FEF089569
-:105E30000BD0C0CFB1DF28F0B6DF18F0952309F002
-:105E400094CFA7CF1124EACFC6DFA0F3959FD1F35B
-:105E5000950F50E0551F629FF001729FBB27F00D18
-:105E6000B11D639FAA27F00DB11DAA1F649F66276D
-:105E7000B00DA11D661F829F2227B00DA11D621FBC
-:105E8000739FB00DA11D621F839FA00D611D221F76
-:105E9000749F3327A00D611D231F849F600D211D5A
-:105EA000822F762F6A2F11249F5750408AF0E1F0FD
-:105EB00088234AF0EE0FFF1FBB1F661F771F881F46
-:105EC00091505040A9F79E3F510570F04ECFA6CF9C
-:105ED0005F3FECF3983EDCF3869577956795B79531
-:105EE000F795E7959F5FC1F7FE2B880F911D96955B
-:105EF000879597F90895FA01EE0FFF1F3096210557
-:105F0000310599F16115710561F48038BFE39B0794
-:105F100049F168949038810561F08038BFEF9B07A4
-:105F200041F0992342F5FF3FE1053105210511F1CB
-:105F3000E8940894E795D901AA2329F4AB2FBE2F42
-:105F4000F85FD0F310C0FF5F70F4A695E0F7F73963
-:105F500050F019F0FF3A38F49F779F930CD00F90D0
-:105F600007FC905808953EF014CF60E070E080E8A0
-:105F70009FE308954FE79F775F934F933F932F934E
-:105F80009ED02F913F914F915F9152DF05C019F440
-:105F90000EF0EBCE42CFFDCE26DFC8F39638C0F729
-:105FA00007F80F92E8942BE33AEA48EB5FE74EDFFD
-:105FB0000F920F920F924DB75EB70F92C0D0E8E2EA
-:105FC000F1E016D04F915F91EF91FF91E595EE1FB3
-:105FD000FF1F49F0FE57E0684427EE0F441FFA9573
-:105FE000E1F74195550B32D00F9007FE26C008957A
-:105FF000DF93CF931F930F93FF92EF92DF927B017A
-:106000008C01689405C0DA2EEF011EDFFE01E894D2
-:10601000A5912591359145915591AEF3EF0106DD9E
-:10602000FE019701A801DA9479F7DF90EF90FF90D5
-:106030000F911F91CF91DF9108959B01AC0160E01A
-:1060400070E080E89FE349CD90CE95CECCDEE8F3BA
-:106050009923D9F3940F511DBBF39150504094F004
-:1060600059F0882332F0660F771F881F91505040F7
-:10607000C1F79E3F510544F7880F911D969587956E
-:1060800097F908955F3FACF0983E9CF0BB2786954A
-:1060900077956795B79508F4B1609395C1F7BB0FF5
-:1060A00058F711F460FFE8CF6F5F7F4F8F4F9F4F1E
-:1060B000E3CFB4CE0EF05FCE6CCE689456CE93DEB6
-:1060C000C8F39923D1F3C6F3DF93CF931F930F93B4
-:1060D000FF92C92FDD2788232AF02197660F771FAB
-:1060E000881FDAF720E030E040E85FEB9FE3883973
-:1060F00020F0803E30F021968F7787DCE0E5F1E0FC
-:1061000003C083DCEDE7F1E073DF8B01BE01EC013E
-:10611000FB2E6F5771097595771F880B990B78DDEA
-:1061200028E132E741E35FE38FDEAF2D9801AE0156
-:10613000FF900F911F91CF91DF9178DC3BCEFA0158
-:10614000DC01AA0FBB1F9B01AC01BF5728F422271B
-:106150003327442750781FC0B75188F4AB2F002451
-:10616000469537952795011CA395D2F3002069F039
-:10617000220F331F441FB395DAF30DD045CC6130A5
-:106180007105A0E88A07B94630F49B01AC01662787
-:10619000772788279078309621F0208331834283B7
-:1061A00053830895AA1BBB1B51E107C0AA1FBB1F45
-:1061B000A617B70710F0A61BB70B881F991F5A9593
-:1061C000A9F780959095BC01CD01089597FB072E06
-:1061D00016F4009407D077FD09D00E94D23007FC56
-:1061E00005D03EF4909581959F4F089570956195E7
-:1061F0007F4F0895EE0FFF1F0590F491E02D099455
-:10620000F999FECF92BD81BDF89A992780B508957E
-:10621000A8E1B0E042E050E00C942831262FF99933
-:10622000FECF92BD81BDF89A019700B4021639F0F5
-:106230001FBA20BD0FB6F894FA9AF99A0FBE0895C6
-:106240000196272F0E940F310C940E31DC01CB01F7
-:10625000FC01F999FECF06C0F2BDE1BDF89A319676
-:1062600000B40D9241505040B8F70895F894FFCF14
-:1062700052D02445000000410000DC4400000041F1
-:1062800052D0A4440000404100005C4400000041A2
-:1062900048F17644000000415C978A4400000041C8
-:1062A0001FD592440000004152D0A4440000004198
-:1062B0005CFFB844000000410AA7CF440000004141
-:1062C0000000DC44000000410AA7CF440000004168
-:1062D0000000DC440000004100000000000080409D
-:1062E00000005C45000040410000000000008040CC
-:1062F00052D02445000040410AA7CF44000000418D
-:106300000000DC440000004100000000000080406C
-:1063100052D02445000040410000000000008040B1
-:1063200000005C45000040410AA7CF440000004146
-:106330000000DC440000004100000000000080403C
-:1063400052D0244500004041000000000000804081
-:106350000AA74F45000040410AA7CF440000004172
-:106360000000DC440000004100000000000080400C
-:1063700052D0244500000041000000000000804091
-:106380005CFF384500000041000000000000804034
-:1063900052D02445000000410AA7CF44000000412C
-:1063A0000000DC44000000410000000000008040CC
-:1063B00052D024450000804152D024450000404185
-:1063C0005C970A450000004152D0A44400000041FF
-:1063D0000000DC44000000415C970A450000A04139
-:1063E000640007000CFF0000003F646214F014CD4D
-:1063F000149914651401014F042808140A321E0070
-:1064000002040507090B0C0E1011131517181A1C9E
-:106410001D1F2123242628292B2D2F3032343537D8
-:10642000393B1F0F03764F5F6F7F496943790959E5
-:1064300053633149803F5D8B803FF8BF803FCAE1A5
-:10644000803F73ED803FCAE1803FF8BF803F5D8BA6
-:10645000803F3149803F0000803FF16D7F3F75EA0A
-:106460007E3F4C827E3F833F7E3F84287E3F833F3A
-:106470007E3F4C827E3F75EA7E3FF16D7F3F00009C
-:10648000803F404D3639FA09AD0977093E09D108F8
-:10649000EA0803091C0901020304050607080900AC
+:100E4000CF92DF92EF92FF920F931F9301E010E099
+:100E500020E030E06801790104C0CC0CDD1CEE1C00
+:100E6000FF1C8A95D2F704C0000F111F221F331FE9
+:100E70006A95D2F70C291D292E293F29C0904504D7
+:100E8000D0904604E0904704F0904804C022D1225C
+:100E9000E222F322842FC016D106E206F30641F4C3
+:100EA0001F910F91FF90EF90DF90CF900C947C24D6
+:100EB0001F910F91FF90EF90DF90CF900C949D24A5
+:100EC0000C94BC0580918503882309F448C0809167
+:100ED000410390914203009779F40E943B2790933D
+:100EE0004203809341038091430390E0009771F4A3
+:100EF0008091440390E00AC00E944727209170022D
+:100F0000309171022817390740F329C00197880FE3
+:100F1000991F880F991FFC01EB5BFC4F6081718169
+:100F2000828193810E94210EE091430384E0E89F37
+:100F3000F0011124EB5BFC4F608171818281938110
+:100F40004FE050E00E94D9118091430390E0019658
+:100F50006091440370E00E94EC30809343030C9452
+:100F60006705109287030C94EE0D81E08093870350
+:100F70000C94190708958F929F92AF92BF92EF92AF
+:100F8000FF920F931F93CF93DF93CDB7DEB7A39755
+:100F90000FB6F894DEBF0FBECDBF7C01FC0100810F
+:100FA0001181C8010E943825B8010E944F0C8C01A4
+:100FB000B7010E941D07882309F4BDC20531F0E77F
+:100FC0001F0741F4F7018281882309F458C00E9469
+:100FD000D012B1C20631F0E71F0741F4F701828158
+:100FE000882309F44CC00E94D912A5C20731F0E74A
+:100FF0001F0751F4F7018281882309F440C00E9441
+:10100000CC128111F0CFE3CF0831F0E71F0739F49C
+:10101000F7018281882399F10E94B5078CC20931BA
+:10102000F0E71F0739F4F7018281882341F10E941C
+:10103000B10781C20A31F0E71F0749F4F701828145
+:101040008823E9F0809187038111F1CFE5CF0B313F
+:10105000F0E71F0739F4F7018281882381F00E94AD
+:10106000E0120AC00C31F0E71F0749F4F701828152
+:10107000882329F00E94EB120E940A075CC280912B
+:101080008703811105C0F70182818111CFC03AC168
+:10109000003E110579F4F7018281882309F44DC0DF
+:1010A0000E94EE0D81E080938603109285031092DA
+:1010B000440341C2023E110559F4F701828188239D
+:1010C000E1F10E94EE0D109286031092850333C267
+:1010D000033E110591F4F7018281882371F10E948A
+:1010E000EE0D1092860381E08093850310924303F6
+:1010F00010924203109241031EC20235110559F4A9
+:10110000F7018281882309F416C2809170029091C0
+:1011100071020A970DC00135110579F4F70182813A
+:10112000882309F408C280917002909171020A9696
+:101130009093710280937002FEC14091740283E229
+:10114000EFE8F2E0DE01119601900D928A95E1F749
+:10115000F701808121E030E02C0F3D1F280F311D69
+:10116000C9012091720230917302FC01E20FF31F5A
+:101170006081772767FD7095640F711D882777FD63
+:101180008095982F0E940E2E20E030E040E451E43C
+:101190000E94732D4B015C01F701218184E090E0F6
+:1011A000821B9109BC01882777FD8095982F0E94AA
+:1011B0000E2E9B01AC01C501B4010E940B2D9B01B9
+:1011C000AC0160E070E080E090E40E94812F20E0BC
+:1011D00030E04CED50E40E941E2F4B015C01F70102
+:1011E00082818823D1F04FE050E0C501B4010E9414
+:1011F000D911809186038823A1F08091440324E0D3
+:10120000829FF0011124EB5BFC4F80829182A282CD
+:10121000B3828F5F8093440304C0C501B4010E9470
+:10122000210E0F3F110508F02ECF85C1809140039C
+:1012300081111FC0043130E7130709F080C00E94FC
+:101240001F0781E0809340030E943B2790933F0358
+:1012500080933E03109237031092390310923803A3
+:1012600010923B0310923A0310923D0310923C03FC
+:1012700062C180913E0390913F030E944727883CC2
+:10128000910570F480913703E82FF0E0EE0FFF1F17
+:10129000E85CFC4F118300838F5F809337034BC161
+:1012A000043180E7180768F4023090E7190708F066
+:1012B00050C00115E0E71E0771F001301047A1F1A1
+:1012C0001CC1033320E7120709F4E8C004331047B8
+:1012D00009F4FBC012C1F7018281882309F412C10D
+:1012E0000E943F200E94EE0D0E94F106FFEF24E3D2
+:1012F0003CE0F15020403040E1F700C000000E9487
+:10130000962719C10431F0E71F0708F0C3C0023067
+:1013100020E71207F0F4011530E7130709F4F2C0D3
+:101320000130104709F0E9C0F7018281882309F4F0
+:10133000E9C080916204816080936204FCC0043142
+:10134000F0E71F0708F0A6C0023020E7120708F4F4
+:10135000ECC0F7018281882309F4D4C00E94FA27E7
+:10136000811102C00E94D6270E94122890E090931B
+:101370007404809373040230F0E71F0721F4809116
+:101380007304816080C0033020E7120721F480914C
+:101390007304826078C0043030E7130721F4809131
+:1013A0007304846070C0053080E7180719F48091D9
+:1013B000730427C0063090E7190721F48091730465
+:1013C000806161C00730E0E71E0721F4809173045B
+:1013D000806259C00830F0E71F0721F48091730440
+:1013E000806451C0093020E7120721F48091730412
+:1013F000806849C00A3030E7130729F480917304EC
+:101400008460886040C00B3080E7180721F4809129
+:1014100073048E7F38C00C3090E7190721F4809157
+:1014200073048D7F30C00D30E0E71E0721F48091FA
+:1014300073048B7F28C00E30F0E71F0719F48091EA
+:10144000730420C00F3020E7120721F48091730449
+:101450008F7E19C0003130E7130721F480917304A7
+:101460008F7D11C0013180E7180721F4809173044A
+:101470008F7B09C0809173040231104711F48F777C
+:1014800002C08B7F877F80937304809173040E94D6
+:10149000162851C0033390E71907A1F4F7018281A0
+:1014A000882321F01092350382E016C08091350325
+:1014B000811106C086E20E94941C86E20E945C1D97
+:1014C00082E018C004331047C1F4F70182818823F9
+:1014D00031F01092360380E20E94AB1D2CC0809147
+:1014E0003603811106C087E20E94941C87E20E94A5
+:1014F0005C1D80E20E94B21D1EC081E08093350316
+:1015000080933603C701A3960FB6F894DEBF0FBED3
+:10151000CDBFDF91CF911F910F91FF90EF90BF90C2
+:10152000AF909F908F900C946905011530E71307D9
+:1015300009F0F6CED5CE80E0A3960FB6F894DEBFC4
+:101540000FBECDBFDF91CF911F910F91FF90EF9014
+:10155000BF90AF909F908F9008952CE0729FF00104
+:10156000112430E3839FE00DF11D1124E60FF11DDE
+:10157000EE0FFF1FED5FFD4F859194910E94610C6E
+:10158000811540E5940708F047C0811520E49207D3
+:1015900008F013C1883E910520F5803E910508F0C2
+:1015A0007CC1883A910578F4853A910508F0A5C088
+:1015B0008130910509F471C108F42EC18430910580
+:1015C00008F06BC129C18B3B910508F4A1C0803C98
+:1015D000910508F421C1FC01EE0FFF1FED57FF4FED
+:1015E000E6C0811530E2930758F4811541E0940775
+:1015F00008F053C1803F910508F40EC1906508952D
+:10160000811520E3920708F0D5C0FC01FF70EE0FB2
+:10161000FF1FED5FFD4FCBC0811535E5930708F047
+:1016200043C0811544E5940708F0DEC0811522E52A
+:10163000920708F5811531E5930708F0C1C0482FDE
+:10164000437021E030E002C0220F331F4A95E2F7D9
+:101650003C68AC0164E0569547956A95E1F74370A4
+:10166000342B8F708695869540E2849FC0011124AB
+:10167000822B932B0895282F26952695AC01437035
+:1016800055278115934508F0A0C080E2289F90015E
+:10169000112481E090E002C0880F991F4A95E2F77B
+:1016A000822B932B9C6808958F3240E7940790F427
+:1016B0008F3120E7920708F0A2C0811536E5930725
+:1016C00008F497C09C0130562115304108F0A4C0A1
+:1016D0009F7093C0803320E7920709F497C008F405
+:1016E00092C0813340E7940709F493C08233904756
+:1016F00009F092C080E093ED0895853A910509F4D0
+:101700008EC0863A910509F08DC082E890E4089574
+:10171000883A910509F489C0893A910509F488C08D
+:101720008A3A910509F487C08B3A910509F486C07D
+:101730008C3A910509F485C08D3A910509F484C06D
+:10174000803B910509F483C08E3A910509F482C06B
+:101750008F3A910509F481C0813B910509F480C05D
+:10176000823B910509F47FC0833B910509F47EC05B
+:10177000843B910509F47DC0853B910509F47CC04B
+:10178000863B910509F47BC0873B910509F47AC03B
+:10179000883B910509F479C0893B910509F478C02B
+:1017A0008A3B910509F477C080E094E4089585911F
+:1017B000949108959927906C08959F70906A089568
+:1017C000982F8827816F906A089590E2299F900151
+:1017D000112481E090E002C0880F991F4A95E2F73A
+:1017E000822B932B9A680895982F8827846F906A8C
+:1017F00008958F719927982F8827906208958F51A7
+:101800009047946D089580E091ED089580E090ED0B
+:10181000089580E092ED089580E090E0089581E8D9
+:1018200090E4089583E890E4089582EE94E40895A6
+:1018300089EE94E408958AEE94E4089585EB94E4A7
+:10184000089586EB94E4089587EB94E408958CEC76
+:1018500094E408958DEC94E4089583E895E4089564
+:101860008AE895E4089582E995E4089584E995E489
+:10187000089581E296E4089583E296E4089584E26F
+:1018800096E4089585E296E4089586E296E4089544
+:1018900087E296E408958AE296E4089508959CE02C
+:1018A000799FF001112490E3899FE00DF11D11242F
+:1018B000E60FF11DEE0FFF1FED5FFD4F8591949137
+:1018C00008958238910549F1B0F48133910509F406
+:1018D00058C048F48932910509F44EC08A32910506
+:1018E00009F454C008958533910509F440C0893343
+:1018F000910599F00895833E910529F138F4803ED1
+:10190000910591F0823E9105A1F00895863E9105E2
+:10191000F9F0873E910531F108952091730420FD7F
+:101920003AC021FD38C008958091730480FD35C010
+:1019300032C08091730482FF32C08091730484FDB1
+:1019400030C083EE39C08091730482FD28C0F5CF8A
+:101950008091730483FF27C08091730484FD21C0AC
+:1019600087EE2AC08091730483FD1DC0F5CF80915E
+:10197000730485FD1AC01BC08091730485FD17C0D8
+:1019800014C08091730486FD14C015C08091730447
+:1019900086FD11C00EC080EE0FC089E30DC082EE3F
+:1019A0000BC080E009C086EE07C089E205C085E370
+:1019B00003C08AE201C081E390E008950C946B05B6
+:1019C000E82FF0E0E254FD4F8081E82FEF70F0E067
+:1019D00082958F7021E030E0A90102C0440F551FAD
+:1019E0008A95E2F740A308950F931F93CF93DF9357
+:1019F00085B7806885BF85B7806885BFC3E0D0E0C4
+:101A000001E010E0FE01E254FD4F8081E82FEF700D
+:101A1000F0E021A182958F70A80102C0440F551FEC
+:101A20008A95E2F7CA01822B81A38C2F0E94E00CD9
+:101A3000219740F78BE090E061E070E0FC01EE540C
+:101A4000FD4F2081E22FEF70F0E042A122952F7030
+:101A5000DB0102C0AA0FBB1F2A95E2F79D01242BD0
+:101A600022A3019758F7DF91CF911F910F910C940A
+:101A70006007EF92FF920F931F93CF93DF9300E9DC
+:101A800013E0C3E0EE24E394F12CD5E08C2F0E9408
+:101A9000E00C8BE090E040E050E0FC01EE54FD4FA4
+:101AA0006081E62FEF70F0E020A130E062956F706A
+:101AB00002C0359527956A95E2F720FD09C0970188
+:101AC000082E02C0220F331F0A94E2F7422B532B39
+:101AD000019718F7F801929182918F018417950769
+:101AE00021F051834083D09375028C2F0E94E00C2B
+:101AF000C15060F68091750287FD2CC081508093A3
+:101B000075028F3F39F08FE99FE00197F1F700C030
+:101B1000000020C080918E0390918F0390939703D3
+:101B20008093960380918C0390918D0390939503FD
+:101B30008093940380918A0390918B0390939303F5
+:101B400080939203809188039091890390939103ED
+:101B5000809390030E94620781E0DF91CF911F91F3
+:101B60000F91FF90EF900895E82FF0E0EE0FFF1F28
+:101B7000E057FC4F80819181089508950F931F9342
+:101B8000CF9308E913E0C0E0F801929182918F01B0
+:101B90000E94B326C80FF3E000391F07A9F78C2F66
+:101BA000CF911F910F9108950E94FA27811102C0D1
+:101BB0000E94D6270E942428809379043E9A80911F
+:101BC00071008D7F8093710082E0809390008AE1A4
+:101BD0008093910081E080939A03089580919A0305
+:101BE000811102C00E94D40D1092EA031092E90301
+:101BF000809171008D7F80937100809190008F7330
+:101C0000809390001092AC031092AB031092E30308
+:101C10001092E4031092E5031092E6031092E2039F
+:101C20001092E103E1ECF3E0A1EBB3E01192119229
+:101C3000119211921D921D9283E0E13EF807B1F7D7
+:101C40000895CF92DF92EF92FF920F931F93CF935D
+:101C5000DF932091AB03222309F484C06B017C0144
+:101C600080919A03811102C00E94D40D01EE13E00D
+:101C7000C7E0D0E0A7019601F8019291829172919C
+:101C800062918F010E946F2D811131C0FE01EE0F14
+:101C9000FF1FEE0FFF1FEF53FC4F108211821282C5
+:101CA0001382DE01AA0FBB1FAF54BC4F11961C92CA
+:101CB0001E92C730D105E9F0219644815581668195
+:101CC00077814083518362837383148215821682E5
+:101CD000178212968D919C91139711969C938E93D7
+:101CE00013961C921E92129734961296E2CF219769
+:101CF00008F68091E9039091EA03019797FD05C0EA
+:101D00009093EA038093E90304C01092EA031092CF
+:101D1000E9038091E9039091EA032091E703309170
+:101D2000E8032817390724F01092E8031092E7031C
+:101D3000892BC1F4809171008D7F80937100809117
+:101D400090008F73809390001092E3031092E4034D
+:101D50001092E5031092E6031092E2031092E10361
+:101D60001092AB03DF91CF911F910F91FF90EF90F5
+:101D7000DF90CF9008951F920F920FB60F9211240B
+:101D80004F925F926F927F928F929F92AF92BF928B
+:101D9000CF92DF92EF92FF922F933F934F935F93F7
+:101DA0006F937F938F939F93AF93BF93CF93DF9363
+:101DB000EF93FF938091AB03882309F49BC1C091FB
+:101DC000E903D091EA031C161D060CF093C1409064
+:101DD0009B0350909C0360909D0370909E0320E0B5
+:101DE00030E0A901C301B2010E941A2F18160CF0AD
+:101DF00065C0C130D10509F452C08091E7039091CC
+:101E0000E803BE010E94EC307C019093E8038093CC
+:101E1000E7038090AD039090AE03A090AF03B09025
+:101E2000B00320E030E040E85FE3C501B4010E9468
+:101E30000B2D6093AD037093AE038093AF0390932B
+:101E4000B003F701EE0FFF1FEE0FFF1FEF53FC4F24
+:101E5000A301920160817181828193810E94732D1F
+:101E600020E030E040E05EE30E941E2F9B01AC01C9
+:101E7000C501B4010E941A2F18168CF4C7010196EF
+:101E8000BE010E94EC309093E8038093E703109228
+:101E9000AD031092AE031092AF031092B003E09125
+:101EA000E703F091E803EE0FFF1FEE0FFF1FEF5364
+:101EB000FC4F6081718182819381D0C0C090E30327
+:101EC000D090E403E090E503F090E60320E030E0FA
+:101ED000A901C701B6010E946F2D2197882309F43B
+:101EE000A2C0FE01EE0FFF1FEE0FFF1FEF53FC4FCE
+:101EF00080809180A280B380A5019401C701B601C2
+:101F00000E946F2D87FF31C0A501940160E070E051
+:101F10008CED93EC0E94732D20E030E040E451E41E
+:101F20000E94732D20E030E040E05FE30E941E2F0E
+:101F30009B01AC0160E070E080E090E40E94812FA2
+:101F40009B01AC01C501B4010E941E2F9B01AC0195
+:101F5000C701B6010E946F2D87FF07C0A701960138
+:101F600060E070E08CED93E439C0A5019401C701F5
+:101F7000B6010E941A2F18160CF055C0A501940145
+:101F800060E070E08CED93E40E94732D20E030E07F
+:101F900040E451E40E94732D20E030E040E05FE334
+:101FA0000E941E2F9B01AC0160E070E080E090E495
+:101FB0000E94812F9B01AC01C501B4010E941E2F1C
+:101FC0009B01AC01C701B6010E941A2F18165CF5DF
+:101FD000A701960160E070E08CED93EC0E94732DF8
+:101FE00020E030E040E451E40E94732D20E030E036
+:101FF00040E05FE30E941E2F9B01AC0160E070E0B7
+:1020000080E090E40E94812F9B01AC01C701B601E2
+:102010000E941E2F6093E3037093E4038093E50313
+:102020009093E60313C0FE01EE0FFF1FEE0FFF1F9C
+:10203000EF53FC4F80819181A281B3818093E303B0
+:102040009093E403A093E503B093E6036091E30368
+:102050007091E4038091E5039091E6032091980349
+:10206000309199032F3F4FEF340731F02F5F3F4FEF
+:1020700030939903209398030E94F6126B017C0120
+:1020800020E034E244EF51E40E946F2D87FF08C046
+:1020900086EFC82E88E2D82E84EFE82E81E4F82E51
+:1020A00020E030E040E051E4C701B6010E941E2F5D
+:1020B0009B01AC0160E074E284E79BE40E94732D15
+:1020C0006B017C010E94E02D709397006093960055
+:1020D00020917602309177024091780250917902F6
+:1020E000C701B6010E941E2F0E94E02D7093990037
+:1020F000609398008091AC03882309F433C1C090A9
+:10210000A703D090A803E090A903F090AA0320E0D1
+:1021100030E0A901C701B6010E941A2F1816D4F5A4
+:1021200080919803909199038F3F2FEF920729F0A8
+:1021300001969093990380939803C701B6010E947A
+:10214000F61220E030E040E051E40E941E2F9B0197
+:10215000AC0160E074E284E79BE40E94732D6B01A4
+:102160007C010E94E02D709397006093960020916F
+:102170007602309177024091780250917902C7013E
+:10218000B6010E941E2F0E94E02D7093990060936B
+:10219000980008C010929700109296001092990033
+:1021A000109298006091A1037091A2036F5F7F4F1E
+:1021B0007093A2036093A103209196003091970041
+:1021C00080E090E0232BF1F0C0919600D091970031
+:1021D0000E940C2E6B017C01BE0180E090E00E9409
+:1021E0000C2E9B01AC016091A3037091A40380911C
+:1021F000A5039091A6030E94732D20E03FEF4FE7C7
+:1022000057E410C00E940C2E6B017C0120E030EEE0
+:102210004FEF54E46091A3037091A4038091A50350
+:102220009091A6030E941E2F9B01AC01C701B6012D
+:102230000E941A2F87FD96C080919F038F5F809325
+:102240009F0390E0209175043091760482179307E4
+:10225000A0F080918004882319F010929F030DC094
+:10226000809171008D7F80937100809190008F73B9
+:10227000809390001092AC037DC08091A003C09128
+:102280009F03811128C0C0907A04D0907B04E09015
+:102290007C04F0907D0420E030E0A901C701B60184
+:1022A0000E941A2F1816BCF481E08093A0031092AC
+:1022B000A7031092A8031092A9031092AA03C09238
+:1022C000A303D092A403E092A503F092A603C15009
+:1022D000C0939F0343C01092A003109299031092E1
+:1022E0009803E0917704F091780448E0C49FE00DF2
+:1022F000F11D112480819181A281B3818093A70374
+:102300009093A803A093A903B093AA0320E030E020
+:1023100040E85EE364817581868197810E941E2F6B
+:102320006B017C0180917A02682F70E080E090E080
+:102330000E940C2E20E030E048EC52E40E94732D05
+:102340009B01AC01C701B6010E941E2F6093A3033D
+:102350007093A4038093A5039093A6031092A20305
+:102360001092A1038091790480FD04C01092AC0307
+:102370001092AB03FF91EF91DF91CF91BF91AF919D
+:102380009F918F917F916F915F914F913F912F918D
+:10239000FF90EF90DF90CF90BF90AF909F908F9085
+:1023A0007F906F905F904F900F900FBE0F901F9097
+:1023B0001895CF92DF92EF92FF92CF93DF936B014C
+:1023C0007C01EA0180919A03811102C00E94D40D20
+:1023D0008091790480FF46C08091E9039091EA03DF
+:1023E00008970CF03FC0809171008D7F8093710041
+:1023F0008091AC0381110E94EE0D81E08093AB03CC
+:10240000109299031092980320E030E0A901C701CF
+:10241000B6010E941A2F1816DCF48091E9039091FE
+:10242000EA03FC01EE0FFF1FEE0FFF1FEF53FC4FFF
+:10243000C082D182E282F382FC01EE0FFF1FEF54D3
+:10244000FC4FD183C08301969093EA038093E90304
+:10245000809171008260809371008091900080680B
+:1024600080939000DF91CF91FF90EF90DF90CF901D
+:1024700008958F929F92AF92BF92CF92DF92EF9288
+:10248000FF920F931F93CF93DF93EC017B01D42E28
+:102490004801590180919A03811102C00E94D40D14
+:1024A0008091790480FF6BC0809171008D7F809353
+:1024B00071008091AB0381110E94EE0D81E0809349
+:1024C000AC03D0937804C0937704F0927604E09242
+:1024D0007504D092800480927A0490927B04A0923A
+:1024E0007C04B0927D041092AD031092AE03109262
+:1024F000AF031092B00310929F0388819981AA8143
+:10250000BB818093A7039093A803A093A903B093E2
+:10251000AA0320E030E040E85EE36C817D818E819B
+:102520009F810E941E2F6B017C0180917A02682F8F
+:1025300070E080E090E00E940C2E20E030E048EC5B
+:1025400052E40E94732D9B01AC01C701B6010E94A9
+:102550001E2F6093A3037093A4038093A50390930D
+:10256000A6031092A2031092A103809171008260D1
+:102570008093710080919000806880939000DF913B
+:10258000CF911F910F91FF90EF90DF90CF90BF9070
+:10259000AF909F908F9008958091790481700895F5
+:1025A000809179048160809379040E9428280C949A
+:1025B000BA07809179048E7F809379040C9428283F
+:1025C0008091EB0390E0019666E070E00E94EC30B1
+:1025D0008093EB0308958091EB0390E0019766E010
+:1025E00070E00E94EC308093EB0308958F929F92ED
+:1025F000AF92BF92CF92DF92EF92FF920F931F9311
+:10260000CF93DF936B017C01C0919803D091990324
+:10261000BE0180E090E00E940C2E4B015C01A701FE
+:10262000960160E070E08CE594E40E94732D9B01BC
+:10263000AC01C501B4010E941E2F0E94E02D209123
+:10264000EB03233009F473C028F4222351F0213026
+:10265000E9F02CC1243009F4A0C0253009F4E0C011
+:1026600025C180E090E0A0E0BFE3809376029093E4
+:102670007702A0937802B093790210929B03109294
+:102680009C0310929D0310929E0310C110929B0315
+:1026900010929C0310929D0310929E036431710569
+:1026A00040F46A30710560F520E030E040E85EE318
+:1026B0002BC0693C710508F0AAC080E090E00E9440
+:1026C0000C2E20E030E040EA51E40E940A2D20E088
+:1026D00030E044E353E40E94732D9B01AC010E945F
+:1026E0001E2F20E030E040E05EE30E941E2F9B01A1
+:1026F000AC0160E070E080E09EE30E940A2D44C0DF
+:1027000020E030E040E05FE3C701B6010E941E2FE9
+:102710006B017C0180E090E0A0E0BEE38093760254
+:1027200090937702A0937802B0937902BFC0109281
+:102730009B0310929C0310929D0310929E034AE00B
+:10274000469F9001479F300D1124C90168EB7BE043
+:102750000E94D830BC016C5D754077FF03C0719555
+:1027600061957109882777FD8095982F0E940E2E1C
+:102770002EE333EC4EE259E30E941E2F20E030E0BE
+:1027800040EC5EE30E940B2D60937602709377021B
+:10279000809378029093790289C010929B031092E3
+:1027A0009C0310929D0310929E03CE018370992783
+:1027B000892BE1F0BE016170772780E090E00E94F4
+:1027C0000C2E20E030E040E05EE30E941E2F20E06F
+:1027D00030E040E45FE30E940B2D6093760270933B
+:1027E000770280937802909379020CC080E090E0A9
+:1027F000A0E0BFE38093760290937702A0937802E3
+:10280000B0937902C770DD27CD2B09F04FC010922D
+:10281000760210927702109278021092790246C0E6
+:1028200010929B0310929C0310929D0310929E03A2
+:1028300000E010E020E03FE300937602109377027F
+:1028400020937802309379026739710578F180E03E
+:1028500090E00E940C2E20E030E047E153E40E941B
+:102860000A2D20E030E04AE754E40E94732D20E076
+:1028700030E048E452E40E941E2F20E030E040EABD
+:1028800051E40E94502E0E94DB2D660F771F660FC9
+:10289000771FFB01EE53FD4F20813181428153812F
+:1028A000C701B6010E941E2F6B017C01C701B60152
+:1028B000DF91CF911F910F91FF90EF90DF90CF901C
+:1028C000BF90AF909F908F9008958091FC030895E2
+:1028D000CF93DF9300D01F92CDB7DEB79C018091DC
+:1028E0008504843019F593E099833B832A83909380
+:1028F000E9008FEF9091E800815095FD06C095EDBD
+:102900009A95F1F700008111F5CF8091E80085FFDD
+:102910000DC040E050E063E070E0CE0101960E94FF
+:10292000C5168091E8008E778093E8000F900F9095
+:102930000F90DF91CF910895CF93DF9300D01F9236
+:10294000CDB7DEB720918504243021F522E029831C
+:102950009B838A8383E08093E9008FEF9091E80066
+:10296000815095FD06C095ED9A95F1F70000811113
+:10297000F5CF8091E80085FF0DC040E050E063E0B6
+:1029800070E0CE0101960E94C5168091E8008E7716
+:102990008093E8000F900F900F90DF91CF910895F2
+:1029A000209185042430F1F422E02093E9002FEFF8
+:1029B0003091E800215035FD06C035ED3A95F1F72C
+:1029C00000002111F5CF2091E80025FF0BC040E069
+:1029D00050E065E070E00E94C5168091E8008E77B7
+:1029E0008093E8000895CF93DF93EC0190918504E4
+:1029F000943009F046C0809185028823D9F08091F7
+:102A000086028823B9F09093E9008FEF9091E80057
+:102A1000815095FD06C095E19A95F1F7000081116E
+:102A2000F5CF8091E80085FF2CC040E050E060E1E8
+:102A300070E017C081E08093E9008FEF9091E8008B
+:102A4000815095FD06C095ED9A95F1F70000811132
+:102A5000F5CF8091E80085FF14C040E050E068E0C9
+:102A600070E0CE010E94C5168091E8008E778093B9
+:102A7000E80080E1FE01ACEEB3E001900D928A9592
+:102A8000E1F7DF91CF91089580918404811109C00D
+:102A90000E945A180E94B7188091E20084608093C7
+:102AA000E2000895109284040895089508950C9406
+:102AB000FE2642E061EC81E00E94D41742E061EC26
+:102AC00082E00E94D41742E061EC83E00E94D417B8
+:102AD00042E161EC84E00C94D41780918704833048
+:102AE00009F455C030F4813071F0823009F48EC0A1
+:102AF00008958A3009F47AC08B3009F460C08930B7
+:102B000009F09CC020C080918604813A09F096C0EB
+:102B10008091E800877F8093E80080918A049091FB
+:102B20008B04892B21F460E18CEE93E003C060E01C
+:102B300080E090E070E00E9410178091E8008B77B1
+:102B40008093E800089580918604813209F076C070
+:102B500080918A0490918B04009719F0039709F0F3
+:102B60006DC08091E800877F8093E8008091E80045
+:102B700082FD05C0809185048111F8CF5FC08091EE
+:102B8000F1008093FC038091E8008B7753C0809123
+:102B90008604813A09F052C080918A0490918B0496
+:102BA000892B09F04BC08091E800877F8093E80073
+:102BB0008091E80080FFFCCF8091850236C0809133
+:102BC00086048132D9F580918A0490918B04892BF7
+:102BD000A9F58091E800877F8093E8000E9409189A
+:102BE00080918804809385020C943F208091860414
+:102BF000813221F58091E800877F8093E8000E9470
+:102C00000918809189048093FD03089580918604BA
+:102C1000813AA1F48091E800877F8093E800809159
+:102C2000E80080FFFCCF8091FD038093F10080914C
+:102C3000E8008E778093E8000C940918089584B713
+:102C4000877F84BF88E10FB6F8948093600010926C
+:102C500060000FBE80E880936100109261000E94C6
+:102C6000AC1B0E945A180E94B7188091E200846041
+:102C70008093E20078940E943D1B0E94AE1B8BE77C
+:102C800092E00E94581B80918504853069F40E946F
+:102C9000BF26809183048823B1F30E94ED26882308
+:102CA00091F30E94AF16EFCF0E94B61BECCF292FF5
+:102CB000332723303105C9F064F42130310581F028
+:102CC0002230310509F043C08DE690E02FEB38E06B
+:102CD00042C021323105F1F02232310541F137C0D5
+:102CE00082E190E02CE239E036C0992781309105ED
+:102CF00041F08230910541F0892B49F5EBEBF8E08A
+:102D000005C0EDE8F8E002C0E3E6F8E0849190E069
+:102D10009F0121C06430D8F4E62FF0E0EE0FFF1FD2
+:102D2000E25EFC4F2081318189E090E014C0643084
+:102D300070F470E0FB01EE0FFF1FEA5EFC4F208194
+:102D40003181FB01EE5EFC4F808190E004C080E0A9
+:102D500090E020E030E0FA0131832083089580E1A3
+:102D600089BD82E189BD09B400FEFDCF8091D80004
+:102D70008F7D8093D8008091E00082608093E00096
+:102D80008091E00081FDFCCF0895CF92DF92EF9219
+:102D9000FF920F931F93CF93DF93EC018B016A0196
+:102DA0000E942818811133C0C114D10439F0F601F2
+:102DB00080819181081B190BC80FD91FE12CF12CC0
+:102DC0000115110519F18091E80085FD16C080916B
+:102DD000E8008E778093E800C114D10449F0F60131
+:102DE00080819181E80EF91EF182E08285E00FC0BA
+:102DF0000E942818882321F30AC089918093F1004A
+:102E000001501109FFEFEF1AFF0ADACF80E0DF91DE
+:102E1000CF911F910F91FF90EF90DF90CF90089589
+:102E200020918C0430918D042617370748F06115E6
+:102E3000710539F42091E8002E772093E80001C055
+:102E4000B90140E061157105A9F1209185042223A3
+:102E500009F443C0253009F442C02091E80023FD65
+:102E600040C02091E80022FD32C02091E80020FF00
+:102E7000E9CF4091F3002091F20030E0342BFC01C7
+:102E8000CF016115710559F02830310540F4819169
+:102E90008093F100615071092F5F3F4FF1CF41E006
+:102EA0002830310509F040E02091E8002E7720938A
+:102EB000E800C8CF4111C9CF0AC08091850488239A
+:102EC00061F0853061F08091E80083FD0AC0809157
+:102ED000E80082FFF2CF80E0089582E0089583E069
+:102EE000089581E0089520918C0430918D04261777
+:102EF000370748F06115710539F42091E8002E7705
+:102F00002093E80001C0B901FC0120E061157105C2
+:102F100091F180918504882309F440C0853009F43B
+:102F20003FC08091E80083FD3DC08091E80082FDB4
+:102F30002FC08091E80080FFE9CF2091F3008091BD
+:102F4000F20090E0922B6115710559F088309105DF
+:102F500040F424912093F10031966150710901965B
+:102F6000F2CF21E0089709F020E08091E8008E7709
+:102F70008093E800CBCF2111CCCF0AC0809185048B
+:102F8000882361F0853061F08091E80083FD0AC0FC
+:102F90008091E80082FFF2CF80E0089582E00895FA
+:102FA00083E0089581E00895982F973058F5909325
+:102FB000E900981739F07091EC002091ED005091E4
+:102FC000F00003C0242F762F50E021FF19C030916C
+:102FD000EB003E7F3093EB003091ED003D7F30936E
+:102FE000ED003091EB0031603093EB007093EC001A
+:102FF0002093ED005093F0002091EE0027FF07C0D2
+:103000009F5FD3CF8F708093E90081E0089580E0C7
+:1030100008958091860487FF11C08091E80082FDA9
+:1030200005C0809185048111F8CF11C08091E8001E
+:103030008B770BC080918504882349F08091E8004C
+:1030400080FFF8CF8091E8008E778093E8000895A4
+:103050002091E4003091E50095E64091EC00842F4A
+:10306000817040FF22C08091E80080FD1CC08091EB
+:103070008504882391F0853091F08091EB0085FDE7
+:1030800010C04091E4005091E5004217530729F326
+:103090009A01915011F784E0089582E0089583E049
+:1030A000089581E0089580E008954091E80042FF8E
+:1030B000DECF08950E94C8180E94D018E0EEF0E01C
+:1030C000808181608083E8EDF0E080818F7780836C
+:1030D00019BCA7EDB0E08C918E7F8C9380818F7EA0
+:1030E00080831092840408950F931F93CF93DF93EE
+:1030F0000E94C8180E94D018C8EDD0E088818F7750
+:10310000888388818068888388818F7D888319BCC3
+:10311000109285041092810410928304109282040C
+:1031200000EE10E0F80180818B7F808388818160D0
+:10313000888342E060E080E00E94D417E1EEF0E096
+:1031400080818E7F8083E2EEF0E0808181608083E9
+:10315000808188608083F80180818E7F8083888170
+:1031600080618883DF91CF911F910F910895E8EDE1
+:10317000F0E080818F7E8083E7EDF0E080818160E8
+:10318000808384E082BF81E0809384040C9474186F
+:10319000E8EDF0E080818E7F80831092E200089558
+:1031A0001092DA001092E10008951F920F920FB66C
+:1031B0000F9211242F933F934F935F936F937F93BD
+:1031C0008F939F93AF93BF93EF93FF938091E10011
+:1031D00082FF0BC08091E20082FF07C08091E10076
+:1031E0008B7F8093E1000E943C1B8091DA0080FF7E
+:1031F0001FC08091D80080FF1BC08091DA008E7FB5
+:103200008093DA008091D90080FF0DC080E189BDF4
+:1032100082E189BD09B400FEFDCF81E08093850481
+:103220000E94441505C019BC109285040E945215D5
+:103230008091E10080FF19C08091E20080FF15C0FD
+:103240008091E2008E7F8093E2008091E2008061B5
+:103250008093E2008091D80080628093D80019BCEE
+:1032600085E0809385040E9456158091E10084FFDB
+:1032700030C08091E20084FF2CC080E189BD82E1F2
+:1032800089BD09B400FEFDCF8091D8008F7D809369
+:10329000D8008091E1008F7E8093E1008091E20070
+:1032A0008F7E8093E2008091E20081608093E20053
+:1032B00080918104882311F084E007C08091E300AD
+:1032C00087FD02C081E001C083E0809385040E94F5
+:1032D00057158091E10083FF29C08091E20083FFB0
+:1032E00025C08091E100877F8093E10082E0809398
+:1032F0008504109281048091E1008E7F8093E1002B
+:103300008091E2008E7F8093E2008091E2008061F4
+:103310008093E20042E060E080E00E94D417809158
+:10332000F00088608093F0000E945515FF91EF91A6
+:10333000BF91AF919F918F917F916F915F914F91CD
+:103340003F912F910F900FBE0F901F9018951F92D5
+:103350000F920FB60F9211242F933F934F935F93C9
+:103360006F937F938F939F93AF93BF93CF93DF938D
+:10337000EF93FF93C091E900CF708091EC00D82FBC
+:10338000D17080FDD0E81092E9008091F000877F35
+:103390008093F00078940E94EB191092E9008091DC
+:1033A000F00088608093F000CD2BCF70C093E900CF
+:1033B000FF91EF91DF91CF91BF91AF919F918F914D
+:1033C0007F916F915F914F913F912F910F900FBE21
+:1033D0000F901F9018951F93CF93DF93CDB7DEB753
+:1033E000AA970FB6F894DEBF0FBECDBFE6E8F4E0B3
+:1033F00088E08E0F9091F10091938E13FBCF0E9485
+:103400006D158091E80083FF1FC180918604909123
+:103410008704492F50E04A30510508F015C1FA01E0
+:10342000EB59FF4F0C940031803881F0823809F05D
+:103430000BC180918A048F708093E9008091EB002A
+:1034400085FB882780F91092E90006C080918204EC
+:1034500090918304911182609091E800977F9093FE
+:10346000E8008093F1001092F100C8C0282F2D7F52
+:1034700009F0EAC0882319F0823061F0E5C080913C
+:103480008804813009F0E0C0933009F080E0809337
+:1034900083042BC080918804811127C080918A0405
+:1034A0008F7009F4D1C08093E9002091EB0020FFD8
+:1034B0001CC0933021F48091EB00806214C0909185
+:1034C000EB0090619093EB0021E030E0A90102C095
+:1034D000440F551F8A95E2F74093EA001092EA00E4
+:1034E0008091EB0088608093EB001092E90080915E
+:1034F000E800877F86C08111A7C0109188041F77DC
+:103500008091E3008078812B8093E3008091E80034
+:10351000877F8093E8000E9409188091E80080FF6F
+:10352000FCCF8091E30080688093E300111102C01A
+:1035300082E001C083E08093850486C08058823099
+:1035400008F082C080918804909189048C3D53E0FA
+:10355000950779F583E08A838AE289834FB7F894E7
+:10356000DE01139620E03EE051E2E32FF0E05093BD
+:103570005700E49120FF03C0E295EF703F5FEF70CA
+:103580008E2F90E0EA3010F0C79601C0C0968D9360
+:103590009D932F5F243149F74FBF8091E800877FCB
+:1035A0008093E8006AE270E0CE0101960E94101755
+:1035B00014C0AE014F5F5F4F60918A040E9457169E
+:1035C000BC01009709F440C09091E800977F909368
+:1035D000E80089819A810E9473178091E8008B77B7
+:1035E0008093E80031C0803879F58091E800877FCA
+:1035F0008093E800809181048093F1008091E8003D
+:103600008E778093E8000E9409181EC081111CC0AB
+:10361000909188049230C0F48091E800877F809375
+:10362000E800909381040E9409188091810481111F
+:1036300006C08091E30087FD02C081E001C084E004
+:10364000809385040E9459158091E80083FF0AC089
+:103650008091E800877F8093E8008091EB00806292
+:103660008093EB00AA960FB6F894DEBF0FBECDBFD5
+:10367000DF91CF911F9108950895CF938091850494
+:103680008823A1F0C091E900CF709091EC00892FC0
+:10369000817090FD80E8C82B1092E9008091E800CD
+:1036A00083FD0E94EB19CF70C093E900CF9108957C
+:1036B00090930304809302040895E0910204F09132
+:1036C0000304309721F00190F081E02D099480E00F
+:1036D0000895E0910204F0910304309721F00280F4
+:1036E000F381E02D09940895E0910204F091030420
+:1036F000309721F00480F581E02D09940895209100
+:103700000004309101048217930771F09093010433
+:1037100080930004E0910204F0910304309721F0BB
+:103720000680F781E02D099408952091FE033091E1
+:10373000FF038217930771F09093FF038093FE03BA
+:10374000E0910204F0910304309721F00084F185A8
+:10375000E02D0994089508950C94AB1B0E94322724
+:103760000E94F40C0E94B8270C946F2C5F926F9209
+:103770007F928F929F92AF92BF92CF92DF92EF9201
+:10378000FF920F931F93CF93DF9300D000D01F922F
+:10379000CDB7DEB70E94390D9DE0C92E94E0D92E39
+:1037A00003E010E0AA24A394B12C502E802F0E9495
+:1037B000B40D4C01F601729062906F016826792673
+:1037C00061147104A1F40150110978F78FEF898316
+:1037D0008A831B820E943B278160782F9D838C8384
+:1037E00049815A816B818D810E94661C38C080910D
+:1037F000620481FD0E94BD0D2BE030E07501022EB8
+:1038000002C0EE0CFF1C0A94E2F7C7018621972143
+:10381000892B09F129835A828E209F2091E08928E3
+:1038200009F490E09B830E943B278160782F9D8361
+:103830008C8349815A816B818D810E94661C000FA7
+:10384000111FF801EB5FFB4F80819181E826F9267B
+:10385000F182E08204C02150310980F6B4CF0E9489
+:10386000A729109104040E945D1B1817D1F00E9433
+:103870005D1B809304040F900F900F900F900F909A
+:10388000DF91CF911F910F91FF90EF90DF90CF903C
+:10389000BF90AF909F908F907F906F905F900C94AF
+:1038A000DE0C0F900F900F900F900F90DF91CF9143
+:1038B0001F910F91FF90EF90DF90CF90BF90AF904E
+:1038C0009F908F907F906F905F900895CF93DF933C
+:1038D000CDB7DEB72B970FB6F894DEBF0FBECDBFC6
+:1038E0004F83588769877A878B87DE01119686E038
+:1038F000FD0111928A95E9F785E0FE013796019066
+:103900000D928A95E1F749815A816B817C818D8185
+:103910009E810E94DD222B960FB6F894DEBF0FBE6B
+:10392000CDBFDF91CF910895CF93882309F4C2C012
+:10393000C82F823859F40E945D1B81FDBBC089E30A
+:103940000E94B7250E94842689E30CC0833879F44D
+:103950000E945D1B80FDAEC083E50E94B7250E94DA
+:10396000842683E50E94F925CF910C94842684381F
+:1039700059F40E945D1B82FD9DC087E40E94B7251B
+:103980000E94842687E4EECF8CEF8C0F813A48F4B6
+:103990008C2F0E94D72B81118DC08C2F0E94B725B0
+:1039A000E3CF80E28C0F883048F4C77081E001C01B
+:1039B000880FCA95EAF70E943D26D6CF8BE58C0F7B
+:1039C000833078F4C53A29F0C63A31F083E890E0C4
+:1039D00005C081E890E002C082E890E0CF910C94AD
+:1039E0007F1B88E58C0F833108F064C0C83A39F139
+:1039F000C93A41F1CA3A49F1CB3A51F1CC3A59F1BD
+:103A0000CD3A61F1C03B69F1CE3A71F1CF3A79F12B
+:103A1000C13B81F1C23B89F1C33B91F1C43B99F1B8
+:103A2000C53BA1F1C63BA9F1C73BB1F1C83BB9F118
+:103A3000C93BC1F1CA3BC9F180E090E038C082EED9
+:103A400090E035C089EE90E032C08AEE90E02FC061
+:103A500085EB90E02CC086EB90E029C087EB90E0EE
+:103A600026C08CEC90E023C08DEC90E020C083E871
+:103A700091E01DC08AE891E01AC082E991E017C088
+:103A800084E991E014C081E292E011C083E292E007
+:103A90000EC084E292E00BC085E292E008C086E2AC
+:103AA00092E005C087E292E002C08AE292E0CF9104
+:103AB0000C94951BCF910895882309F44BC082384C
+:103AC00059F40E945D1B81FF45C089E30E94B72520
+:103AD0000E94842689E30CC0833871F40E945D1B28
+:103AE00080FF38C083E50E94B7250E94842683E5C5
+:103AF0000E94F9250C948426843859F40E945D1B99
+:103B000082FF28C087E40E94B7250E94842687E4AC
+:103B1000EFCF9CEF980F913A58F390E2980F9830BE
+:103B200050F4877091E001C0990F8A95EAF7892FC8
+:103B30000E944326DFCF9BE5980F933020F480E06E
+:103B400090E00C947F1B885A833120F480E090E051
+:103B50000C94951B0895882321F00E943D260C9417
+:103B600084260895882321F00E9443260C948426FD
+:103B700008957F928F929F92AF92BF92CF92DF92E1
+:103B8000EF92FF920F931F93CF93DF931F92CDB7C6
+:103B9000DEB77C01C62E772EFC01058102950F70E1
+:103BA000128111110E945A260E94B025882379F0B3
+:103BB000112369F080E28C0D883048F082E00E9489
+:103BC00099250E94B02591E0D82ED92601C0D12C8C
+:103BD000E72DE295EF70F0E0E159FF4F0C940031D2
+:103BE000872D807F072D0F70882311F00295007FAD
+:103BF000112389F0002309F499C180E28C0D8830EB
+:103C000020F4802F0E943D2603C0802F0E944D2665
+:103C10000E9484268BC18C2D0E945C1D002309F418
+:103C2000C3C180E28C0D883020F4802F0E9443268F
+:103C300003C0802F0E9453260E948426B5C1872D81
+:103C4000807F972D9F70803211F4892F03C0892FB8
+:103C50008295807FCC2021F0F1E0CF16A1F01DC02D
+:103C6000112339F0002319F1013009F50E946D2666
+:103C70009BC1002319F0013009F496C189830E9489
+:103C80007026898110C1112321F0063008F08CC103
+:103C90000EC0053008F088C106C1112359F0002379
+:103CA00031F0F701958190FF41C19F7095830E948B
+:103CB000AB1D7AC1002309F4F6C03EC1872D86955D
+:103CC0008695837090E0009719F0019761F06CC1C0
+:103CD000112321F08C2D972D937002C080E090E08D
+:103CE0000E947F1B61C1112321F08C2D972D9370B1
+:103CF00002C080E090E00E94951B56C18C2D1123DC
+:103D000019F00E94AF2802C00E9417290E949C2926
+:103D10004BC1872D837009F052C0111145C18C2D04
+:103D2000829586958770880F880F9C2D9F70892EAD
+:103D3000912CA12CB12C082E04C0880C991CAA1C13
+:103D4000BB1C0A94D2F7C4FE14C00FE010E020E0C0
+:103D500030E0B901A80104C0440F551F661F771F4A
+:103D60008A95D2F7CB01BA016095709580959095B0
+:103D700003C060E070E0CB01272D269526952370C7
+:103D800030E02230310569F02330310589F06829AF
+:103D900079298A299B292130310571F00E94252437
+:103DA00003C1682979298A299B290E944124FCC0E2
+:103DB0000E942524C501B4010E940924F5C01123E5
+:103DC00019F0872D817001C08695882309F4ECC015
+:103DD0008C2D829586958770880F880F9C2D9F70FB
+:103DE000892E912CA12CB12C082E04C0880C991C72
+:103DF000AA1CBB1C0A94D2F7C4FE14C00FE010E04A
+:103E000020E030E0B901A80104C0440F551F661F2F
+:103E1000771F8A95D2F7CB01BA016095709580958E
+:103E2000909503C060E070E0CB01272D2695269584
+:103E30002370422F50E04230510569F04330510564
+:103E400089F0682979298A299B294130510571F027
+:103E50000E94FF24A9C0682979298A299B290E94E8
+:103E60001B25A2C00E94FF24C501B4010E94E324C7
+:103E70009BC08C2D90E0FC01E05EF109E531F1057D
+:103E800008F050C0E158FF4F0C9400310C2D0F701A
+:103E9000872D8F71112321F00E947C24802F07CF62
+:103EA0000E949D24802F0E94B21D7EC0112341F0EC
+:103EB000053008F079C0872D8F710E94C22474C02C
+:103EC000063008F071C0F7CF112339F0872D8F71BC
+:103ED0000E947C2469C01123C9F3872D8F710E9431
+:103EE0009D2462C0112329F0872D8F710E946724C1
+:103EF0005BC00E945D2458C0112351F0172D1F7123
+:103F0000812F0E947C2463E0812F0E9490254CC069
+:103F100081E00E949925023008F446C082E00E94A8
+:103F2000992542C0112331F0002381F28C2D0E948B
+:103F3000941C3AC0002389F28C2D0E945C1D34C071
+:103F4000472D4F706C2DC7010E941C060E948123D3
+:103F50002BC0111129C0472D4F7050E04230510540
+:103F6000B9F04CF44115510581F041305105E1F4AF
+:103F70000E94972C19C04330510569F04430510517
+:103F800099F48C2D0E94E92C0FC00E94802C0CC04B
+:103F90000E94B32C09C00E94C62C06C0472D4F704A
+:103FA0006C2DC7010E944E0CDD20F9F00E948C257B
+:103FB00080FD1BC0F70112820E9486250E947C248E
+:103FC000C7010E9404200E9486250F90DF91CF91A7
+:103FD0001F910F91FF90EF90DF90CF90BF90AF9027
+:103FE0009F908F907F900C949D240F90DF91CF91A4
+:103FF0001F910F91FF90EF90DF90CF90BF90AF9007
+:104000009F908F907F9008950F931F93CF93DF938E
+:10401000EC01888199812B813C81232BB9F09F3F52
+:1040200011F48F3F99F0CE010E94BB07882371F0F5
+:10403000688179818A810E9482258C010E943725BE
+:104040000E94FE23B801CE010E94B91DDF91CF91DD
+:104050001F910F9108950E945A260E946A260E947D
+:104060002F260E9484260E944D2A0E949C2980E0CF
+:1040700090E00E947F1B80E090E00C94951B0E94D2
+:104080004A260C942B200E947725292F22952F70E9
+:1040900030E02C3031054CF42A3031056CF42250DC
+:1040A000310922303105A8F407C02C30310569F000
+:1040B0002F30310551F00DC0803F69F018F4803E7B
+:1040C00040F409C0843F29F406C093FB882780F997
+:1040D000089580E0089581E00895CF93DF9300D0A4
+:1040E00000D01F92CDB7DEB70F900F900F900F90BA
+:1040F0000F90DF91CF910895CF93DF9300D000D040
+:1041000000D0CDB7DEB726960FB6F894DEBF0FBE4F
+:10411000CDBFDF91CF9108951F93CF93DF93C091CF
+:104120000D0416E080910E04C81799F0D0E01C9F92
+:10413000F0011D9FF00D1124E15FFB4F4081518183
+:1041400062817381848195810E947C202196C77051
+:10415000E9CFDF91CF911F91089540913F04509195
+:104160004004609141047091420480914304909115
+:1041700044040C947C208091440482958F7009F053
+:1041800054C080914104882309F44FC080910D04EC
+:10419000A0910E0460913F0470914004409142044C
+:1041A00050914304B6E08A1709F43FC090E04115EE
+:1041B0005105C1F17F3F11F46F3FA1F1B89FF001AC
+:1041C000B99FF00D1124E15FFB4F218172132AC0CA
+:1041D0002081621327C02281211124C023813481D0
+:1041E0002417350710F421503109241B350B283CC6
+:1041F0003105C0F4209144042F70206120934404C1
+:1042000026E0289FF001299FF00D1124EC5EFB4F62
+:1042100080818F70806180838FE394E00E9404200E
+:104220000C948C2001968770BECF0895CF92DF92B8
+:10423000EF92FF920F931F93CF93DF93CDB7DEB72B
+:1042400062970FB6F894DEBF0FBECDBF8C0185E03C
+:10425000F801DE011D9601900D928A95E1F7D801D3
+:104260004C9111965C91119712966C91129713963E
+:10427000CD90DC90149730913F0470914004809170
+:10428000420490914304009709F46BC17F3F19F4F5
+:104290003F3F09F466C1E0904104EE2009F4C0C03C
+:1042A00020914404C816D90628F0F601E81BF90B42
+:1042B000CF0104C0809590958C0D9D1DFF24F39433
+:1042C000883C910578F0F12C207F09F0C6C07C2D48
+:1042D000D98AC88A89890E946D208FE394E00E9460
+:1042E0000420B1C0822F807F09F046C0751314C02E
+:1042F000341312C0611110C02F7020612093440448
+:104300000E94AD208FE394E00E9404208091440439
+:10431000D80115968C932EC0CD2819F15F3F11F46A
+:104320004F3FF9F0F62E61111CC080910D042091D1
+:104330000E0436E0821709F45AC090E0389FF0016D
+:10434000399FF00D1124E15FFB4F7181571306C0B7
+:104350007081471303C07281711103C00196877089
+:10436000E9CFF62E662309F418C1809144048160D8
+:1043700080934404F12C11C1751308C0341306C096
+:10438000611104C080914404D801C3C04D875E8789
+:104390008D859E856A8B0E9443206A898823E1F17E
+:1043A0006623D1F120914404822F82958F7090E092
+:1043B000029774F080913F049091400498878F8316
+:1043C0001986DB86CA862C87CE0107960E940420B8
+:1043D00086E0F801AFE3B4E001900D928A95E1F731
+:1043E0000E94BB200E94AD20FF24F394D6C04D87CD
+:1043F0005E878D859E850E947725292F22952F70B7
+:1044000030E0223031050CF0BCC09F7009F0B6C01E
+:10441000805E883008F4C1C0C8010E940420E4CF47
+:10442000C816D90608F453C0F601E81BF90BCF01F2
+:10443000883C910508F450C0F12C7C2DD98AC88A9B
+:1044400089890E946D20EFE3F4E086E0DF011D9290
+:104450008A95E9F70E94AD20A0C0751314C03413EB
+:1044600012C0611110C080914404F8018583C80115
+:104470000E94042086E0EFE3F4E0DF011D928A95BC
+:10448000E9F7FE2C8AC04D875E878D859E856A8BF5
+:104490000E9443206A89882309F4BECF662309F469
+:1044A000BBCF20914404822F82958F7090E00297B9
+:1044B0000CF48ECF80913F04909140049A838983BD
+:1044C0001B82DD82CC822E83CE0101967FCF809528
+:1044D00090958C0D9D1DACCFF62E662309F49CCFD4
+:1044E00075132EC034132CC02091440420FD1FC02E
+:1044F000822F82958F70D9F0D80115962C9315973D
+:104500008F3049F08F5F982F9295907F822F8F7018
+:10451000892B15968C93C8010E94042086E0F8012F
+:10452000AFE3B4E001900D928A95E1F793CF86E076
+:10453000F801AFE3B4E001900D928A95E1F72DC048
+:104540004D875E878D859E850E944320811140CFD7
+:1045500080914404816080934404C8010E94042037
+:104560001CC0662309F458CF4D875E878D859E85D4
+:104570000E944320882309F44FCF2ACF811148CFCE
+:104580000CC0243031050CF047CF9F7009F440CFA8
+:10459000F8019581907F09F03BCF8F2D62960FB681
+:1045A000F894DEBF0FBECDBFDF91CF911F910F9169
+:1045B000FF90EF90DF90CF9008951F93CF93DF93FC
+:1045C000CDB7DEB72C970FB6F894DEBF0FBECDBFC8
+:1045D0004F83588769877A878B879C87CE01079698
+:1045E0000E941621882369F08F8198852A853B8552
+:1045F000232BF1F19F3F09F063C08F3F09F060C0AA
+:1046000037C086E0FE013796DE01119601900D92CB
+:104610008A95E1F76F817885EA85FB85309741F1CE
+:104620007F3F11F46F3F21F120910E0430E0C9016A
+:1046300001968770992740910D0450E084179507E3
+:1046400009F447C069837A83FD83EC8396E0929FE7
+:10465000D001939FB00D1124A15FBB4FFE01319695
+:1046600001900D929A95E1F780930E040E948C20A0
+:1046700016E080910D0490910E048917C1F1189FE6
+:10468000C0011124815F9B4F0E941621882379F17C
+:10469000E0910D041E9FF0011124E15FFB4F40816A
+:1046A000518162817381848195810E947C208091F7
+:1046B0000D0490E001968770992780930D04D9CF5F
+:1046C0004F81588569857A858B859C850E947C20E1
+:1046D000CFCF0E943F2010920E0410920D04EFE302
+:1046E000F4E086E0DF011D928A95E9F7C1CF2C96B0
+:1046F0000FB6F894DEBF0FBECDBFDF91CF911F91F3
+:104700000895EF92FF920F931F93CF93DF938C0145
+:10471000009709F46CC0F12CEE24E394E801219693
+:10472000F8018491843740F4843008F051C081301E
+:1047300081F0823019F15BC0853709F444C0A8F1DB
+:104740009CE7980F903708F052C08F770E945C1D4D
+:1047500041C00E5F1F4FFE01C49180E28C0F883074
+:1047600048F4C7708E2D01C0880FCA95EAF70E94E1
+:104770005D2614C08C2F0E94941C2DC00E5F1F4F0D
+:10478000FE01C49180E28C0F883058F4C7708E2DE2
+:1047900001C0880FCA95EAF70E9463260E9484260A
+:1047A0001AC08C2F0E945C1D16C00E5F1F4FFE01A9
+:1047B000C491CC2381F08FE99FE00197F1F700C00D
+:1047C0000000C150F6CF0E5F1F4FFE01F49003C0F2
+:1047D0000E94941C8E018F2D882309F49FCFEFE94E
+:1047E000FFE03197F1F700C000008150F5CFDF9175
+:1047F000CF911F910F91FF90EF90089508956093CE
+:10480000490470934A0480934B0490934C040C9495
+:104810002B200F931F930091490410914A0420917B
+:104820004B0430914C04DC01CB01802B912BA22B4B
+:10483000B32B8093490490934A04A0934B04B09304
+:104840004C041F910F910C942B200F931F930091F8
+:10485000490410914A0420914B0430914C04DC012E
+:10486000CB0180239123A223B32380934904909307
+:104870004A04A0934B04B0934C041F910F910C94E5
+:104880002B200F931F930091490410914A0420910B
+:104890004B0430914C04DC01CB0180279127A227E7
+:1048A000B3278093490490934A04A0934B04B09398
+:1048B0004C041F910F910C942B20109245041092E0
+:1048C000460410924704109248040C942B2041E0B7
+:1048D00050E060E070E004C0440F551F661F771F72
+:1048E0008A95D2F740934504509346046093470459
+:1048F000709348040C942B2041E050E060E070E09D
+:1049000004C0440F551F661F771F8A95D2F7809108
+:10491000450490914604A0914704B0914804482B67
+:10492000592B6A2B7B2B409345045093460460938C
+:104930004704709348040C942B2041E050E060E061
+:1049400070E004C0440F551F661F771F8A95D2F789
+:1049500040955095609570958091450490914604DE
+:10496000A0914704B0914804482359236A237B232C
+:104970004093450450934604609347047093480461
+:104980000C942B2041E050E060E070E004C0440F44
+:10499000551F661F771F8A95D2F780914504909125
+:1049A0004604A0914704B0914804482759276A2734
+:1049B0007B274093450450934604609347047093CB
+:1049C00048040C942B200F931F93009145041091E1
+:1049D00046042091470430914804DC01CB01802B30
+:1049E000912BA22BB32B8093450490934604A09364
+:1049F0004704B09348041F910F910C942B200F9300
+:104A00001F93009145041091460420914704309172
+:104A10004804DC01CB0180239123A223B32380939C
+:104A2000450490934604A0934704B09348041F9113
+:104A30000F910C942B200F931F930091450410911C
+:104A400046042091470430914804DC01CB018027C3
+:104A50009127A227B3278093450490934604A093FF
+:104A60004704B09348041F910F910C942B20089594
+:104A7000CF92DF92EF92FF920F931F93CF93DF932A
+:104A80008C01C0904904D0904A04E0904B04F0900F
+:104A90004C048091450490914604A0914704B09144
+:104AA0004804C82AD92AEA2AFB2ACFE1D0E0D70154
+:104AB000C6010C2E04C0B695A795979587950A94C4
+:104AC000D2F780FF06C0B8018C2F0E94AD0A019773
+:104AD00021F4219760F780E001C08C2FDF91CF9106
+:104AE0001F910F91FF90EF90DF90CF900895CF939B
+:104AF000DF93EC010E943825BE010E94AD0ADF91D0
+:104B0000CF910895CB010E947725089580914D049F
+:104B1000859585958595089580914D0487700895B4
+:104B200098E0899F90011124262B20934D040C942A
+:104B30007C2420914D048095822380934D04982FEE
+:104B4000977069F430E0482F552747FD509524179A
+:104B5000350729F08595859585950C949D240895B4
+:104B600090914D04977081E009F480E00895909150
+:104B70008502992321F090918602911109C020911C
+:104B8000870230918802F90132969FEF40E01FC002
+:104B9000982F9695969596959F3050F5E0918702BF
+:104BA000F0918802E90FF11D877021E030E0A90142
+:104BB00002C0440F551F8A95E2F7CA019181892BE3
+:104BC000818308959F3F39F04F5F4E3041F05191FE
+:104BD0005813F8CF0DC05111F7CF942FF5CF9F3F49
+:104BE00039F0F901E90FF11D97FDFA9582830895D7
+:104BF000089590918502992321F090918602911158
+:104C000009C02091870230918802F9013296205F15
+:104C10003F4F1FC0982F9695969596959F30F0F42C
+:104C2000E0918702F0918802E90FF11D877021E081
+:104C300030E0A90102C0440F551F8A95E2F7CA016E
+:104C4000809591818923818308953196E217F30736
+:104C500029F090819813F9CF1082F7CF089581E061
+:104C600090E0E0918702F0918802E80FF91F10822E
+:104C7000019680319105A9F7089590916104892BDF
+:104C800080936104089580959091610489238093B5
+:104C90006104089510926104089590916004892B35
+:104CA0008093600408958095909160048923809397
+:104CB0006004089510926004089590915F04892B18
+:104CC00080935F040895809590915F048923809379
+:104CD0005F04089510925F04089580934E04089530
+:104CE00010924E0408958091870290918802FC01F1
+:104CF00031969C01205F3F4F80E0919191118F5F31
+:104D0000E217F307D1F70895E0918702F091880246
+:104D1000809161048083E0918702F0918802908104
+:104D200080916004892B8083E0918702F091880252
+:104D3000908180915F04892B808380914E04882329
+:104D400061F0E0918702F09188029081892B808345
+:104D50000E947326811110924E04809187029091D7
+:104D600088020C94691B20E0009739F0AC01415097
+:104D70005109842395232F5FF7CF822F08958091C7
+:104D80008504843039F11092630420E488E190E0D6
+:104D90000FB6F894A895809360000FBE2093600032
+:104DA00080E00E94770580E00E94DE0C83B7817F5F
+:104DB000846083BF83B7816083BF7894889583B70D
+:104DC0008E7F83BF88E10FB6F894809360001092C5
+:104DD00060000FBE08950895089580E00E94770551
+:104DE0000E94EB260E94390D0E94EC260E94BE0D07
+:104DF00091E0811101C090E0892F08950E943F2029
+:104E000080E00E9477050E946F2C0E945D1B0C942D
+:104E1000DE0C1F920F920FB60F9211248F939F9367
+:104E2000AF93BF9380916304811113C08091640498
+:104E300090916504A0916604B09167044196A11D0C
+:104E4000B11D8093640490936504A0936604B093AD
+:104E50006704BF91AF919F918F910F900FBE0F90FC
+:104E60001F90189582E084BD93E095BD9AEF97BDA1
+:104E700080936E0008952FB7F89480916404909108
+:104E80006504A0916604B09167042FBF0895CF9286
+:104E9000DF92EF92FF920F931F932FB7F8944091F8
+:104EA00064045091650460916604709167042FBF9B
+:104EB0006A017B01EE24FF248C0120E030E0C01663
+:104EC000D106E206F30610F4415051099A01281B5D
+:104ED000390BC9011F910F91FF90EF90DF90CF9098
+:104EE00008951F920F920FB60F9211248F939F93E4
+:104EF000AF93BF938091640490916504A091660480
+:104F0000B09167040196A11DB11D80936404909334
+:104F10006504A0936604B0936704BF91AF919F911D
+:104F20008F910F900FBE0F901F9018950E945A18E6
+:104F3000F8942FEF87EA91E6215080409040E1F706
+:104F400000C0000087E090EBDC0180938F04909319
+:104F50009004A0939104B09392049CE088E10FB672
+:104F6000F894A895809360000FBE90936000FFCFE7
+:104F70000E94FA27811102C00E94D6270E940528AC
+:104F8000809362040E94122890E0909374048093AE
+:104F9000730487FB882780F9809386020E94092882
+:104FA000682F70E080E090E00C94FF236DEE7EEFC0
+:104FB00080E090E00E94263160E082E090E00E9474
+:104FC000143160E083E090E00E94143160E084E0FE
+:104FD00090E00E94143160E085E090E00E9414317E
+:104FE00060E086E090E00E9414316FEF87E090E08F
+:104FF0000C94143180E090E00E940E3121E08D3E4F
+:105000009E4F09F020E0822F089582E090E00C94FA
+:10501000063183E090E00C940631682F83E090E045
+:105020000C94143184E090E00C940631682F84E0F5
+:1050300090E00C94143186E090E00C940631682FD7
+:1050400086E090E00C94143187E090E00C940631F7
+:10505000682F87E090E00C94143180916A0480FFFF
+:105060000BC060918C0285E0689FB001112475959A
+:105070006795759567952BC081FF09C060918C027B
+:1050800085E0689FB00111247595679520C082FF67
+:1050900007C060918C0285E0689FB001112417C0A1
+:1050A00090916B049923D1F060918B02961788F749
+:1050B00020918C0285E0289F90011124929FA001ED
+:1050C000939F500D112470E0CA010E94EC306038AB
+:1050D000710540F46115710539F002C065E070E0BA
+:1050E000862F08958FE7089581E0089580916A04DE
+:1050F00080FF08C060918A0270E07595679575958C
+:10510000679521C081FF06C060918A0270E07595A5
+:10511000679519C082FF04C060918A0270E010C0D8
+:1051200090916B049923C1F0609189029617A0F7C2
+:1051300080918A02899FC001112470E00E94EC30A6
+:105140006038710528F46115710521F0862F0895E6
+:105150008FE7089581E0089561E070E0F4CF803F2B
+:1051600021F40E942D28819504C0813F29F40E94DA
+:105170002D2880936E040895823F21F40E942D28EB
+:10518000819504C0833F29F40E942D2880936D04EB
+:105190000895893F19F40E94762805C08A3F31F4AA
+:1051A0000E947628819580936F0408958B3F21F4A7
+:1051B0000E947628819504C08C3F29F40E947628AD
+:1051C000809370040895843F21F480916C04816081
+:1051D00017C0853F21F480916C04826011C0863F26
+:1051E00021F480916C0484600BC0873F21F480918E
+:1051F0006C04886005C0883F31F480916C04806144
+:1052000080936C0408958D3F21F480916A0481603D
+:105210000BC08E3F21F480916A04826005C08F3FED
+:1052200029F480916A04846080936A040895803F21
+:1052300039F480916E0487FF6CC010926E0469C0CF
+:10524000813F29F480916E041816BCF362C09091DE
+:105250006D04823F29F497FF5CC010926D0459C021
+:10526000833F19F41916CCF354C0893F41F480915F
+:105270006F0418160CF04DC010926F044AC08A3F9C
+:1052800029F480916F0487FF44C0F6CF8B3F39F437
+:105290008091700487FF3DC0109270043AC08C3F2B
+:1052A00029F4809170041816BCF333C0843F21F4B4
+:1052B00080916C048E7F17C0853F21F480916C042F
+:1052C0008D7F11C0863F21F480916C048B7F0BC0D1
+:1052D000873F21F480916C04877F05C0883F31F4BB
+:1052E00080916C048F7E80936C0413C08D3F21F4F9
+:1052F00080916A048E7F0BC08E3F21F480916A04F6
+:105300008D7F05C08F3F29F480916A048B7F809345
+:105310006A0480916D0481110EC080916E04811128
+:105320000AC080916F04811106C0809170048111C0
+:1053300002C010926B0408958CE694E00E94741BE6
+:105340000E943B27909369048093680408951F93FB
+:10535000CF93DF9380916804909169040E9447275E
+:10536000AC0190916B04992321F020918D0230E0E3
+:1053700006C020918E028AE0289F900111244217D6
+:10538000530708F486C080916D04C0916E04D091DB
+:105390006F0410917004811107C0C11176C0D11142
+:1053A00074C0111172C075C09F3F19F09F5F909338
+:1053B0006B04181624F40E942D2880936D048091AC
+:1053C0006D0487FF05C00E942D28819580936D0490
+:1053D0001C1624F40E942D2880936E0480916E0484
+:1053E00087FF05C00E942D28819580936E046091EF
+:1053F0006D04662339F1C0916E04CC2319F177272F
+:1054000067FD7095872F972F0E940E2E23E333E3BD
+:1054100043E35FE30E941E2F0E94DB2D60936D0427
+:105420006C2F772767FD7095872F972F0E940E2E80
+:1054300023E333E343E35FE30E941E2F0E94DB2D4F
+:1054400060936E041D1624F40E94762880936F04E6
+:1054500080916F0487FF05C00E9476288195809314
+:105460006F04111624F40E947628809370048091B2
+:10547000700487FF05C00E94762881958093700490
+:10548000DF91CF911F910C949C299F3F09F08ECF03
+:1054900096CFDF91CF911F910895ECE6F4E085E07F
+:1054A000DF011D928A95E9F710926B0410926A044D
+:1054B0000895833081F128F4813059F08230D1F0A1
+:1054C0000895853009F449C0B8F1863009F456C012
+:1054D000089580918E02262F30E0280F311D2F3F36
+:1054E000310524F4680F60938E0208958FEF809346
+:1054F0008E02089580918D02262F30E0280F311DF5
+:105500002F3F310524F4680F60938D0208958FEFCB
+:1055100080938D02089580918C02262F30E0280F11
+:10552000311D2F3F310524F4680F60938C020895DC
+:105530008FEF80938C02089580918B02262F30E0AC
+:10554000280F311D2F3F310524F4680F60938B0223
+:1055500008958FEF80938B02089580918A02262F01
+:1055600030E0280F311D2F3F310524F4680F609380
+:105570008A0208958FEF80938A02089580918902AC
+:10558000262F30E0280F311D2F3F310524F4680FFE
+:105590006093890208958FEF809389020895833084
+:1055A00011F128F4813049F0823091F0089585306E
+:1055B00081F120F18630C1F1089580918E02681743
+:1055C00020F4861B80938E02089510928E02089517
+:1055D00080918D02681720F4861B80938D020895B8
+:1055E00010928D02089580918C02681720F4861B1A
+:1055F00080938C02089510928C02089580918B0202
+:10560000681720F4861B80938B02089510928B02FA
+:10561000089580918A02681720F4861B80938A027D
+:10562000089510928A02089580918902681720F4E3
+:10563000861B8093890208951092890208950F9322
+:105640001F93873208F048C08E3108F08DC080313A
+:1056500009F477C008F5873009F461C068F4863032
+:1056600009F09DC080916204817F8E7F80936204E7
+:1056700081E08093720494C08B3009F489C08E302D
+:1056800009F08DC08091620482FB222720F991E00D
+:10569000922790FB82F95EC0863109F479C060F4EC
+:1056A000813109F07CC00E943F209091860281E008
+:1056B0008927809386026CC0893109F469C08B31D7
+:1056C00009F06DC08091620481FB222720F991E0EE
+:1056D000922790FB81F93EC0883309F459C050F4F9
+:1056E000893209F457C0853309F454C0873209F46C
+:1056F00051C055C0833409F44DC028F48A3308F4EE
+:105700004EC0895332C0883409F049C00E943F20FE
+:105710000E94EE0D0E94F1060E94962739C09091DA
+:105720006204892F8095817080FB90F929F0966042
+:1057300098609093620434C0997F977F909362043D
+:1057400027C08091620483FB222720F991E09227F1
+:1057500090FB83F9809362049923D1F080916204D5
+:1057600081608093620414C08D5141E050E060E09C
+:1057700070E08A019B0104C0000F111F221F331F1C
+:105780008A95D2F7C901B8010E94FF230E943F20E9
+:1057900081E006C061E070E080E090E0F5CF80E05D
+:1057A0001F910F91089580E0089580E00895CF93B0
+:1057B000C82F80917204813069F018F08230C9F1ED
+:1057C00084C0E0918702F09188028081823209F0E2
+:1057D0007EC007C0E0918702F0918802808182320A
+:1057E00061F48C2F0E94D32B811104C08C2F0E9456
+:1057F0001F2B1DC081E090E01AC08C2F0E94D52B7A
+:10580000811114C0C43179F048F4CB3079F0C03143
+:1058100009F061C082E08093720408C0C93219F0B7
+:10582000C83321F058C01092720455C081E08170D5
+:1058300054C0C93291F120F5C43179F1B0F4C730C8
+:1058400009F047C08EE180938E0282E380938D023F
+:105850008AE080938C0284E180938B0288E08093BD
+:105860008A0288E28093890234C0CE51C63088F51E
+:10587000EC2FF0E0EA5DFC4F80818093710429C039
+:10588000CE34E9F020F4CB3421F56AE013C0C13501
+:1058900079F0C235F1F461E00DC080917104882384
+:1058A00019F01092710415C081E08093720415C044
+:1058B00061E006C0809171040E94592A0AC06AE022
+:1058C000809171040E94CF2A04C01092720480E07B
+:1058D00004C081E002C080E0AACFCF9108950E9469
+:1058E000FA27811102C00E94D6270E941B288093AC
+:1058F0008E0480FF02C0869501C080E00C9477057D
+:1059000080918E04982F9695292F30E02330310511
+:105910004CF49F5F990F8170892B816080938E0476
+:105920000E941F2880918E0486950C9477058091A3
+:105930008E04982F969591F09158990F8170892B2C
+:1059400080938E048E7F91E009F490E080918E0424
+:1059500090FB80F980938E040E941F2880918E0412
+:1059600086950C94770580918E04982F909590FBE6
+:1059700080F980938E040E941F2880918E0480FFFE
+:1059800002C0869501C080E00C94770590918E044A
+:10599000892F86958F5F8F779170843028F4880FD8
+:1059A000892B80938E0402C090938E0480918E0484
+:1059B0008E7F91E009F490E080918E0490FB80F955
+:1059C00080938E040E941F2880918E0486950C94EB
+:1059D000770520918E04922F96958927982F990FFD
+:1059E000822F8170892B80938E048E7F91E009F441
+:1059F00090E080918E0490FB80F980938E040E9449
+:105A00001F2880918E0486950C94770580918E04D2
+:105A1000869508955058BB27AA270ED0D1C1C2D170
+:105A200030F0C7D120F031F49F3F11F41EF4B7C11C
+:105A30000EF4E095E7FB9FC1E92FD3D180F3BA17AD
+:105A4000620773078407950718F071F49EF5EBC1A0
+:105A50000EF4E0950B2EBA2FA02D0B01B901900189
+:105A60000C01CA01A0011124FF27591B99F0593FCD
+:105A700050F4503E68F11A16F040A22F232F342F15
+:105A80004427585FF3CF469537952795A795F04063
+:105A90005395C9F77EF41F16BA0B620B730B840B78
+:105AA000BAF09150A1F0FF0FBB1F661F771F881F30
+:105AB000C2F70EC0BA0F621F731F841F48F4879588
+:105AC00077956795B795F7959E3F08F0B3CF939577
+:105AD000880F08F09927EE0F97958795089527D19D
+:105AE00008F481E008950CD06BC163D140F05AD125
+:105AF00030F021F45F3F19F03EC1511195C14FC103
+:105B000070D198F39923C9F35523B1F3951B550B25
+:105B1000BB27AA2762177307840738F09F5F5F4F80
+:105B2000220F331F441FAA1FA9F333D00E2E3AF0C1
+:105B3000E0E830D091505040E695001CCAF729D0DB
+:105B4000FE2F27D0660F771F881FBB1F261737072A
+:105B50004807AB07B0E809F0BB0B802DBF01FF275A
+:105B600093585F4F2AF09E3F510568F004C15CC115
+:105B70005F3FECF3983EDCF3869577956795B79594
+:105B8000F7959F5FC9F7880F911D9695879597F9AF
+:105B90000895E1E0660F771F881FBB1F6217730728
+:105BA0008407BA0720F0621B730B840BBA0BEE1F3D
+:105BB00088F7E095089504D06894B11135C108952F
+:105BC00018D188F09F5790F0B92F9927B751A0F0BE
+:105BD000D1F0660F771F881F991F1AF0BA95C9F781
+:105BE00012C0B13081F01FD1B1E008951CC1672F00
+:105BF000782F8827B85F39F0B93FCCF38695779531
+:105C00006795B395D9F73EF4909580957095619519
+:105C10007F4F8F4F9F4F0895E89409C097FB3EF444
+:105C200090958095709561957F4F8F4F9F4F9923E9
+:105C3000A9F0F92F96E9BB279395F6958795779567
+:105C40006795B795F111F8CFFAF4BB0F11F460FF27
+:105C50001BC06F5F7F4F8F4F9F4F16C0882311F07F
+:105C600096E911C0772321F09EE8872F762F05C093
+:105C7000662371F096E8862F70E060E02AF09A952E
+:105C8000660F771F881FDAF7880F9695879597F923
+:105C9000089588D018F011F08CD038F480C0C4C0BA
+:105CA000E92F9FD0B0F35523C9F3E7FB62177307C1
+:105CB00084079507A8F199F3E92FFF2788232AF095
+:105CC0003197660F771F881FDAF7952F55274423E2
+:105CD00032F091505040220F331F441FD2F7BB27A0
+:105CE000E91BF50B621B730B840BB109C1F222F4A3
+:105CF000620F731F841FB11D31972AF0660F771F43
+:105D0000881FBB1FEFCF915050405AF041F08823BD
+:105D100032F0660F771F881F91505040C1F793955E
+:105D200030C08695779567959F5FD9F7F8CF990F23
+:105D30000008550FAA0BE0E8FEEF16161706E80755
+:105D4000F907C0F012161306E407F50798F0621B76
+:105D5000730B840B950B39F40A2661F0232B242B4B
+:105D6000252B21F408950A2609F4A140A6958FEF6A
+:105D7000811D811D089597F99F6780E870E060E0BC
+:105D800008959F3F31F0915020F48795779567955E
+:105D9000B795880F911D9695879597F908959FEF70
+:105DA00080EC089500240A941616170618060906B2
+:105DB000089500240A941216130614060506089581
+:105DC000092E0394000C11F4882352F0BB0F40F409
+:105DD000BF2B11F460FF04C06F5F7F4F8F4F9F4F49
+:105DE000089557FD9058440F551F59F05F3F71F0CB
+:105DF0004795880F97FB991F61F09F3F79F0879532
+:105E00000895121613061406551FF2CF4695F1DFBA
+:105E100008C0161617061806991FF1CF869571054A
+:105E2000610508940895E894BB2766277727CB017E
+:105E300097F908957CDF08F48FEF08950BD0C0CF59
+:105E4000B1DF28F0B6DF18F0952309F094CFA7CF83
+:105E50001124EACFC6DFA0F3959FD1F3950F50E050
+:105E6000551F629FF001729FBB27F00DB11D639F0C
+:105E7000AA27F00DB11DAA1F649F6627B00DA11DB2
+:105E8000661F829F2227B00DA11D621F739FB00D58
+:105E9000A11D621F839FA00D611D221F749F3327C8
+:105EA000A00D611D231F849F600D211D822F762F61
+:105EB0006A2F11249F5750408AF0E1F088234AF05E
+:105EC000EE0FFF1FBB1F661F771F881F91505040AA
+:105ED000A9F79E3F510570F04ECFA6CF5F3FECF380
+:105EE000983EDCF3869577956795B795F795E79596
+:105EF0009F5FC1F7FE2B880F911D9695879597F9A7
+:105F00000895FA01EE0FFF1F30962105310599F132
+:105F10006115710561F48038BFE39B0749F168940E
+:105F20009038810561F08038BFEF9B0741F09923DD
+:105F300042F5FF3FE1053105210511F1E894089490
+:105F4000E795D901AA2329F4AB2FBE2FF85FD0F330
+:105F500010C0FF5F70F4A695E0F7F73950F019F024
+:105F6000FF3A38F49F779F930CD00F9007FC90581E
+:105F700008953EF014CF60E070E080E89FE308955C
+:105F80004FE79F775F934F933F932F939ED02F912F
+:105F90003F914F915F9152DF05C019F40EF0EBCEA7
+:105FA00042CFFDCE26DFC8F39638C0F707F80F9230
+:105FB000E8942BE33AEA48EB5FE74EDF0F920F924B
+:105FC0000F924DB75EB70F92C0D0E8E2F1E016D065
+:105FD0004F915F91EF91FF91E595EE1FFF1F49F003
+:105FE000FE57E0684427EE0F441FFA95E1F741950C
+:105FF000550B32D00F9007FE26C00895DF93CF9344
+:106000001F930F93FF92EF92DF927B018C016894B4
+:1060100005C0DA2EEF011EDFFE01E894A59125915F
+:10602000359145915591AEF3EF0106DDFE019701E3
+:10603000A801DA9479F7DF90EF90FF900F911F910C
+:10604000CF91DF9108959B01AC0160E070E080E8A2
+:106050009FE349CD90CE95CECCDEE8F39923D9F3DA
+:10606000940F511DBBF39150504094F059F0882388
+:1060700032F0660F771F881F91505040C1F79E3F46
+:10608000510544F7880F911D9695879597F90895C6
+:106090005F3FACF0983E9CF0BB278695779567955F
+:1060A000B79508F4B1609395C1F7BB0F58F711F499
+:1060B00060FFE8CF6F5F7F4F8F4F9F4FE3CFB4CE2E
+:1060C0000EF05FCE6CCE689456CE93DEC8F3992363
+:1060D000D1F3C6F3DF93CF931F930F93FF92C92F92
+:1060E000DD2788232AF02197660F771F881FDAF7AC
+:1060F00020E030E040E85FEB9FE3883920F0803E0D
+:1061000030F021968F7787DCE0E5F1E003C083DC97
+:10611000EDE7F1E073DF8B01BE01EC01FB2E6F5761
+:1061200071097595771F880B990B78DD28E132E7A7
+:1061300041E35FE38FDEAF2D9801AE01FF900F9139
+:106140001F91CF91DF9178DC3BCEFA01DC01AA0FE1
+:10615000BB1F9B01AC01BF5728F4222733274427DC
+:1061600050781FC0B75188F4AB2F0024469537955F
+:106170002795011CA395D2F3002069F0220F331F4D
+:10618000441FB395DAF30DD045CC61307105A0E81A
+:106190008A07B94630F49B01AC0166277727882728
+:1061A0009078309621F02083318342835383089581
+:1061B000AA1BBB1B51E107C0AA1FBB1FA617B7072D
+:1061C00010F0A61BB70B881F991F5A95A9F7809549
+:1061D0009095BC01CD01089597FB072E16F400940D
+:1061E00007D077FD09D00E94D83007FC05D03EF4D7
+:1061F000909581959F4F0895709561957F4F089573
+:10620000EE0FFF1F0590F491E02D0994F999FECF50
+:1062100092BD81BDF89A992780B50895A8E1B0E0B4
+:1062200042E050E00C942E31262FF999FECF92BD1A
+:1062300081BDF89A019700B4021639F01FBA20BD4B
+:106240000FB6F894FA9AF99A0FBE08950196272F7F
+:106250000E9415310C941431DC01CB01FC01F99939
+:10626000FECF06C0F2BDE1BDF89A319600B40D92A2
+:0C62700041505040B8F70895F894FFCF5B
+:10627C0052D02445000000410000DC4400000041E5
+:10628C0052D0A4440000404100005C440000004196
+:10629C0048F17644000000415C978A4400000041BC
+:1062AC001FD592440000004152D0A444000000418C
+:1062BC005CFFB844000000410AA7CF440000004135
+:1062CC000000DC44000000410AA7CF44000000415C
+:1062DC000000DC4400000041000000000000804091
+:1062EC0000005C45000040410000000000008040C0
+:1062FC0052D02445000040410AA7CF440000004181
+:10630C000000DC4400000041000000000000804060
+:10631C0052D02445000040410000000000008040A5
+:10632C0000005C45000040410AA7CF44000000413A
+:10633C000000DC4400000041000000000000804030
+:10634C0052D0244500004041000000000000804075
+:10635C000AA74F45000040410AA7CF440000004166
+:10636C000000DC4400000041000000000000804000
+:10637C0052D0244500000041000000000000804085
+:10638C005CFF384500000041000000000000804028
+:10639C0052D02445000000410AA7CF440000004120
+:1063AC000000DC44000000410000000000008040C0
+:1063BC0052D024450000804152D024450000404179
+:1063CC005C970A450000004152D0A44400000041F3
+:1063DC000000DC44000000415C970A450000A0412D
+:1063EC00640007000CFF0000003F646514F314D038
+:1063FC00149C14681401014F042808140A321E005E
+:10640C0002040507090B0C0E1011131517181A1C92
+:10641C001D1F2123242628292B2D2F3032343537CC
+:10642C00393B1F0F03764F5F6F7F496943790959D9
+:10643C0053633149803F5D8B803FF8BF803FCAE199
+:10644C00803F73ED803FCAE1803FF8BF803F5D8B9A
+:10645C00803F3149803F0000803FF16D7F3F75EAFE
+:10646C007E3F4C827E3F833F7E3F84287E3F833F2E
+:10647C007E3F4C827E3F75EA7E3FF16D7F3F000090
+:10648C00803F404D3639FA09AD0977093E09D108EC
+:10649C00EA0803091C0901020304050607080900A0
 :00000001FF

+ 1 - 1
keyboard/planck/keymaps/dzobert/keymap.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [0] = { /* Qwerty */

+ 1 - 1
keyboard/planck/keymaps/joe/keymap.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 #include "keymap_colemak.h"
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

+ 1 - 1
keyboard/planck/keymaps/kyle/keymap.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [0] = { /* Qwerty */

+ 1 - 1
keyboard/planck/keymaps/leo/keymap.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [0] = { /* BASE */

+ 1 - 1
keyboard/planck/keymaps/lucas/keymap.c

@@ -8,7 +8,7 @@ The "Gaming" layer is mainly customized for CS:GO.
 If you have any question about this keymap feel free to shoot me a message on reddit!
 */
 
-#include "keymap_common.h"
+#include "keymap.h"
 #include "keymap_extras/keymap_german.h"
 #include "backlight.h"
 #include "debug.h"

+ 1 - 1
keyboard/planck/keymaps/max/keymap.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [0] = { /* Qwerty */

+ 1 - 1
keyboard/planck/old_keymap_files/common_keymaps/keymap_brett.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [0] = KEYMAP( 

+ 1 - 1
keyboard/planck/old_keymap_files/common_keymaps/keymap_dotcom.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [0] = KEYMAP( 

+ 1 - 1
keyboard/planck/old_keymap_files/common_keymaps/keymap_jack.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [0] = KEYMAP( /* Jack */

+ 1 - 1
keyboard/planck/old_keymap_files/common_keymaps/keymap_joe.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [0] = KEYMAP( /* Joe qwerty */

+ 1 - 1
keyboard/planck/old_keymap_files/common_keymaps/keymap_matthew.c

@@ -20,7 +20,7 @@
 `-----------------------------------------------------------------------------------------------'
 */
 
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   /* 0: dvorak */

+ 1 - 1
keyboard/planck/old_keymap_files/common_keymaps/keymap_mitch.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [0] = KEYMAP(

+ 1 - 1
keyboard/planck/old_keymap_files/common_keymaps/keymap_nathan.c

@@ -1,7 +1,7 @@
 // Author: Nathan Ross Powell <nathanrospowell@gmail.com>
 // https://github.com/nathanrosspowell/tmk_keyboard/blob/planck-jack/keyboard/planck/keymap_nathan.c
 
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    /* 0: main layer

+ 1 - 1
keyboard/planck/old_keymap_files/common_keymaps/keymap_paul.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [0] = KEYMAP( /* Paul */

+ 1 - 1
keyboard/planck/old_keymap_files/common_keymaps/keymap_peasant.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     [0] = KEYMAP( /* Native */

+ 1 - 1
keyboard/planck/old_keymap_files/common_keymaps/keymap_reed.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 
 /*
  * BUILD:

+ 1 - 1
keyboard/planck/old_keymap_files/common_keymaps/keymap_sean.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     [0] = KEYMAP( /* Matrix Dvorak */

+ 1 - 1
keyboard/planck/old_keymap_files/common_keymaps/keymap_shane.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 #include "action_layer.h"
 #include "action.h"
 #include "action_util.h"

+ 1 - 1
keyboard/planck/old_keymap_files/common_keymaps/keymap_simon.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [0] = KEYMAP( /* Jack */

+ 1 - 1
keyboard/planck/old_keymap_files/common_keymaps/keymap_tim.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [0] = KEYMAP(

+ 1 - 1
keyboard/planck/old_keymap_files/common_keymaps/keymap_wilba.c

@@ -1,4 +1,4 @@
-#include "keymap_common.h"
+#include "keymap.h"
 
 const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [0] = KEYMAP( /* Wilba */

+ 1 - 1
keyboard/planck/old_keymap_files/keymap_common.c

@@ -14,7 +14,7 @@ GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
-#include "keymap_common.h"
+#include "keymap.h"
 
 
 /* translates key to keycode */

+ 1 - 1
keyboard/retro_refit/retro_refit.h

@@ -2,7 +2,7 @@
 #define RETRO_REFIT_H
 
 #include "matrix.h"
-#include "keymap_common.h"
+#include "keymap.h"
 #include "led.h"
 #include <stddef.h>
 

+ 1 - 1
keyboard/satan/satan.h

@@ -2,7 +2,7 @@
 #define SATAN_H
 
 #include "matrix.h"
-#include "keymap_common.h"
+#include "keymap.h"
 #include <stddef.h>
 
 

+ 1 - 1
quantum/audio/audio.c

@@ -6,7 +6,7 @@
 #include <avr/io.h>
 #include "print.h"
 #include "audio.h"
-#include "keymap_common.h"
+#include "keymap.h"
 
 #include "eeconfig.h"
 

+ 1 - 1
quantum/audio/audio_pwm.c

@@ -6,7 +6,7 @@
 #include <avr/io.h>
 #include "print.h"
 #include "audio.h"
-#include "keymap_common.h"
+#include "keymap.h"
 
 #include "eeconfig.h"
 

+ 74 - 0
quantum/keycode_config.c

@@ -0,0 +1,74 @@
+#include "keycode_config.h"
+
+extern keymap_config_t keymap_config;
+
+uint16_t keycode_config(uint16_t keycode) {
+
+    switch (keycode) {
+        case KC_CAPSLOCK:
+        case KC_LOCKING_CAPS:
+            if (keymap_config.swap_control_capslock || keymap_config.capslock_to_control) {
+                return KC_LCTL;
+            }
+            return keycode;
+        case KC_LCTL:
+            if (keymap_config.swap_control_capslock) {
+                return KC_CAPSLOCK;
+            }
+            return KC_LCTL;
+        case KC_LALT:
+            if (keymap_config.swap_lalt_lgui) {
+                if (keymap_config.no_gui) {
+                    return KC_NO;
+                }
+                return KC_LGUI;
+            }
+            return KC_LALT;
+        case KC_LGUI:
+            if (keymap_config.swap_lalt_lgui) {
+                return KC_LALT;
+            }
+            if (keymap_config.no_gui) {
+                return KC_NO;
+            }
+            return KC_LGUI;
+        case KC_RALT:
+            if (keymap_config.swap_ralt_rgui) {
+                if (keymap_config.no_gui) {
+                    return KC_NO;
+                }
+                return KC_RGUI;
+            }
+            return KC_RALT;
+        case KC_RGUI:
+            if (keymap_config.swap_ralt_rgui) {
+                return KC_RALT;
+            }
+            if (keymap_config.no_gui) {
+                return KC_NO;
+            }
+            return KC_RGUI;
+        case KC_GRAVE:
+            if (keymap_config.swap_grave_esc) {
+                return KC_ESC;
+            }
+            return KC_GRAVE;
+        case KC_ESC:
+            if (keymap_config.swap_grave_esc) {
+                return KC_GRAVE;
+            }
+            return KC_ESC;
+        case KC_BSLASH:
+            if (keymap_config.swap_backslash_backspace) {
+                return KC_BSPACE;
+            }
+            return KC_BSLASH;
+        case KC_BSPACE:
+            if (keymap_config.swap_backslash_backspace) {
+                return KC_BSLASH;
+            }
+            return KC_BSPACE;
+        default:
+            return keycode;
+    }
+}

+ 21 - 0
quantum/keycode_config.h

@@ -0,0 +1,21 @@
+#include "eeconfig.h"
+#include "keycode.h"
+
+uint16_t keycode_config(uint16_t keycode);
+
+/* NOTE: Not portable. Bit field order depends on implementation */
+typedef union {
+    uint16_t raw;
+    struct {
+        bool swap_control_capslock:1;
+        bool capslock_to_control:1;
+        bool swap_lalt_lgui:1;
+        bool swap_ralt_rgui:1;
+        bool no_gui:1;
+        bool swap_grave_esc:1;
+        bool swap_backslash_backspace:1;
+        bool nkro:1;
+    };
+} keymap_config_t;
+
+keymap_config_t keymap_config;

+ 163 - 0
quantum/keymap.c

@@ -0,0 +1,163 @@
+/*
+Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "keymap.h"
+#include "report.h"
+#include "keycode.h"
+#include "action_layer.h"
+#include <util/delay.h>
+#include "action.h"
+#include "action_macro.h"
+#include "debug.h"
+#include "backlight.h"
+#include "quantum.h"
+
+#ifdef MIDI_ENABLE
+	#include "keymap_midi.h"
+#endif
+
+extern keymap_config_t keymap_config;
+
+#include <stdio.h>
+#include <inttypes.h>
+
+/* converts key to action */
+action_t action_for_key(uint8_t layer, keypos_t key)
+{
+    // 16bit keycodes - important
+    uint16_t keycode = keymap_key_to_keycode(layer, key);
+
+    // keycode remapping
+    keycode = keycode_config(keycode);
+
+    action_t action;
+    uint8_t action_layer, when, mod;
+
+    switch (keycode) {
+        case KC_FN0 ... KC_FN31:
+            action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]);
+            break;
+        case KC_A ... KC_EXSEL:
+        case KC_LCTRL ... KC_RGUI:
+            action.code = ACTION_KEY(keycode);
+            break;
+        case KC_SYSTEM_POWER ... KC_SYSTEM_WAKE:
+            action.code = ACTION_USAGE_SYSTEM(KEYCODE2SYSTEM(keycode));
+            break;
+        case KC_AUDIO_MUTE ... KC_WWW_FAVORITES:
+            action.code = ACTION_USAGE_CONSUMER(KEYCODE2CONSUMER(keycode));
+            break;
+        case KC_MS_UP ... KC_MS_ACCEL2:
+            action.code = ACTION_MOUSEKEY(keycode);
+            break;
+        case KC_TRNS:
+            action.code = ACTION_TRANSPARENT;
+            break;
+        case QK_MODS ... QK_MODS_MAX: ;
+            // Has a modifier
+            // Split it up
+            action.code = ACTION_MODS_KEY(keycode >> 8, keycode & 0xFF); // adds modifier to key
+            break;
+        case QK_FUNCTION ... QK_FUNCTION_MAX: ;
+            // Is a shortcut for function action_layer, pull last 12bits
+            // This means we have 4,096 FN macros at our disposal
+            action.code = pgm_read_word(&fn_actions[(int)keycode & 0xFFF]);
+            break;
+        case QK_MACRO ... QK_MACRO_MAX:
+            action.code = ACTION_MACRO(keycode & 0xFF);
+            break;
+        case QK_LAYER_TAP ... QK_LAYER_TAP_MAX:
+            action.code = ACTION_LAYER_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF);
+            break;
+        case QK_TO ... QK_TO_MAX: ;
+            // Layer set "GOTO"
+            when = (keycode >> 0x4) & 0x3;
+            action_layer = keycode & 0xF;
+            action.code = ACTION_LAYER_SET(action_layer, when);
+            break;
+        case QK_MOMENTARY ... QK_MOMENTARY_MAX: ;
+            // Momentary action_layer
+            action_layer = keycode & 0xFF;
+            action.code = ACTION_LAYER_MOMENTARY(action_layer);
+            break;
+        case QK_DEF_LAYER ... QK_DEF_LAYER_MAX: ;
+            // Set default action_layer
+            action_layer = keycode & 0xFF;
+            action.code = ACTION_DEFAULT_LAYER_SET(action_layer);
+            break;
+        case QK_TOGGLE_LAYER ... QK_TOGGLE_LAYER_MAX: ;
+            // Set toggle
+            action_layer = keycode & 0xFF;
+            action.code = ACTION_LAYER_TOGGLE(action_layer);
+            break;
+        case QK_ONE_SHOT_LAYER ... QK_ONE_SHOT_LAYER_MAX: ;
+            // OSL(action_layer) - One-shot action_layer
+            action_layer = keycode & 0xFF;
+            action.code = ACTION_LAYER_ONESHOT(action_layer);
+            break;
+        case QK_ONE_SHOT_MOD ... QK_ONE_SHOT_MOD_MAX: ;
+            // OSM(mod) - One-shot mod
+            mod = keycode & 0xFF;
+            action.code = ACTION_MODS_ONESHOT(mod);
+            break;
+        case QK_MOD_TAP ... QK_MOD_TAP_MAX:
+            action.code = ACTION_MODS_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF);
+            break;
+    #ifdef BACKLIGHT_ENABLE
+        case BL_0 ... BL_15:
+            action.code = ACTION_BACKLIGHT_LEVEL(keycode - BL_0);
+            break;
+        case BL_DEC:
+            action.code = ACTION_BACKLIGHT_DECREASE();
+            break;
+        case BL_INC:
+            action.code = ACTION_BACKLIGHT_INCREASE();
+            break;
+        case BL_TOGG:
+            action.code = ACTION_BACKLIGHT_TOGGLE();
+            break;
+        case BL_STEP:
+            action.code = ACTION_BACKLIGHT_STEP();
+            break;
+    #endif
+        default:
+            action.code = ACTION_NO;
+            break;
+    }
+    return action;
+}
+
+
+/* Macro */
+__attribute__ ((weak))
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    return MACRO_NONE;
+}
+
+/* Function */
+__attribute__ ((weak))
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+}
+
+/* translates key to keycode */
+uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
+{
+    // Read entire word (16bits)
+    return pgm_read_word(&keymaps[(layer)][(key.row)][(key.col)]);
+}

+ 315 - 0
quantum/keymap.h

@@ -0,0 +1,315 @@
+/*
+Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef KEYMAP_H
+#define KEYMAP_H
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "action.h"
+#include <avr/pgmspace.h>
+#include "keycode.h"
+#include "action_macro.h"
+#include "report.h"
+#include "host.h"
+// #include "print.h"
+#include "debug.h"
+#include "keycode_config.h"
+
+/* translates key to keycode */
+uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key);
+
+/* translates Fn keycode to action */
+action_t keymap_fn_to_action(uint16_t keycode);
+
+extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
+extern const uint16_t fn_actions[];
+
+enum quantum_keycodes {
+    // Ranges used in shortucuts - not to be used directly
+    QK_TMK                = 0x0000,
+    QK_TMK_MAX            = 0x00FF,
+    QK_MODS               = 0x0100,
+    QK_LCTL               = 0x0100,
+    QK_LSFT               = 0x0200,
+    QK_LALT               = 0x0400,
+    QK_LGUI               = 0x0800,
+    QK_RCTL               = 0x1100,
+    QK_RSFT               = 0x1200,
+    QK_RALT               = 0x1400,
+    QK_RGUI               = 0x1800,
+    QK_MODS_MAX           = 0x1FFF,
+    QK_FUNCTION           = 0x2000,
+    QK_FUNCTION_MAX       = 0x2FFF,
+    QK_MACRO              = 0x3000,
+    QK_MACRO_MAX          = 0x3FFF,
+    QK_LAYER_TAP          = 0x4000,
+    QK_LAYER_TAP_MAX      = 0x4FFF,
+    QK_TO                 = 0x5000,
+    QK_TO_MAX             = 0x50FF,
+    QK_MOMENTARY          = 0x5100,
+    QK_MOMENTARY_MAX      = 0x51FF,
+    QK_DEF_LAYER          = 0x5200,
+    QK_DEF_LAYER_MAX      = 0x52FF,
+    QK_TOGGLE_LAYER       = 0x5300,
+    QK_TOGGLE_LAYER_MAX   = 0x53FF,
+    QK_ONE_SHOT_LAYER     = 0x5400,
+    QK_ONE_SHOT_LAYER_MAX = 0x54FF,
+    QK_ONE_SHOT_MOD       = 0x5500,
+    QK_ONE_SHOT_MOD_MAX   = 0x55FF,
+#ifndef DISABLE_CHORDING
+    QK_CHORDING           = 0x5600,
+    QK_CHORDING_MAX       = 0x56FF,
+#endif
+    QK_MOD_TAP            = 0x6000,
+    QK_MOD_TAP_MAX        = 0x6FFF,
+#ifdef UNICODE_ENABLE
+    QK_UNICODE            = 0x8000,
+    QK_UNICODE_MAX        = 0xFFFF,
+#endif
+
+    // Loose keycodes - to be used directly
+
+    RESET = 0x7000,
+    DEBUG,
+    MAGIC_SWAP_CONTROL_CAPSLOCK,
+    MAGIC_CAPSLOCK_TO_CONTROL,
+    MAGIC_SWAP_LALT_LGUI,
+    MAGIC_SWAP_RALT_RGUI,
+    MAGIC_NO_GUI,
+    MAGIC_SWAP_GRAVE_ESC,
+    MAGIC_SWAP_BACKSLASH_BACKSPACE,
+    MAGIC_HOST_NKRO,
+    MAGIC_SWAP_ALT_GUI,
+    MAGIC_UNSWAP_CONTROL_CAPSLOCK,
+    MAGIC_UNCAPSLOCK_TO_CONTROL,
+    MAGIC_UNSWAP_LALT_LGUI,
+    MAGIC_UNSWAP_RALT_RGUI,
+    MAGIC_UNNO_GUI,
+    MAGIC_UNSWAP_GRAVE_ESC,
+    MAGIC_UNSWAP_BACKSLASH_BACKSPACE,
+    MAGIC_UNHOST_NKRO,
+    MAGIC_UNSWAP_ALT_GUI,
+
+    // Leader key
+#ifndef DISABLE_LEADER
+    KC_LEAD,
+#endif
+
+    // Audio on/off/toggle
+    AU_ON,
+    AU_OFF,
+    AU_TOG,
+
+    // Music mode on/off/toggle
+    MU_ON,
+    MU_OFF,
+    MU_TOG,
+
+    // Music voice iterate
+    MUV_IN,
+    MUV_DE,
+
+    // Midi mode on/off
+    MI_ON,
+    MI_OFF,
+
+    // Backlight functionality
+    BL_0,
+    BL_1,
+    BL_2,
+    BL_3,
+    BL_4,
+    BL_5,
+    BL_6,
+    BL_7,
+    BL_8,
+    BL_9,
+    BL_10,
+    BL_11,
+    BL_12,
+    BL_13,
+    BL_14,
+    BL_15,
+    BL_DEC,
+    BL_INC,
+    BL_TOGG,
+    BL_STEP,
+
+    // Left shift, open paren
+    KC_LSPO,
+
+    // Right shift, close paren
+    KC_RSPC,
+};
+
+// Ability to use mods in layouts
+#define LCTL(kc) (kc | QK_LCTL)
+#define LSFT(kc) (kc | QK_LSFT)
+#define LALT(kc) (kc | QK_LALT)
+#define LGUI(kc) (kc | QK_LGUI)
+#define RCTL(kc) (kc | QK_RCTL)
+#define RSFT(kc) (kc | QK_RSFT)
+#define RALT(kc) (kc | QK_RALT)
+#define RGUI(kc) (kc | QK_RGUI)
+
+#define HYPR(kc) (kc | QK_LCTL | QK_LSFT | QK_LALT | QK_LGUI)
+#define MEH(kc)  (kc | QK_LCTL | QK_LSFT | QK_LALT)
+#define LCAG(kc) (kc | QK_LCTL | QK_LALT | QK_LGUI)
+
+#define MOD_HYPR 0xf
+#define MOD_MEH 0x7
+
+
+// Aliases for shifted symbols
+// Each key has a 4-letter code, and some have longer aliases too.
+// While the long aliases are descriptive, the 4-letter codes
+// make for nicer grid layouts (everything lines up), and are
+// the preferred style for Quantum.
+#define KC_TILD LSFT(KC_GRV)    // ~
+#define KC_TILDE    KC_TILD
+
+#define KC_EXLM LSFT(KC_1)      // !
+#define KC_EXCLAIM  KC_EXLM
+
+#define KC_AT   LSFT(KC_2)      // @
+
+#define KC_HASH LSFT(KC_3)      // #
+
+#define KC_DLR  LSFT(KC_4)      // $
+#define KC_DOLLAR   KC_DLR
+
+#define KC_PERC LSFT(KC_5)      // %
+#define KC_PERCENT  KC_PERC
+
+#define KC_CIRC LSFT(KC_6)      // ^
+#define KC_CIRCUMFLEX   KC_CIRC
+
+#define KC_AMPR LSFT(KC_7)      // &
+#define KC_AMPERSAND    KC_AMPR
+
+#define KC_ASTR LSFT(KC_8)      // *
+#define KC_ASTERISK KC_ASTR
+
+#define KC_LPRN LSFT(KC_9)      // (
+#define KC_LEFT_PAREN   KC_LPRN
+
+#define KC_RPRN LSFT(KC_0)      // )
+#define KC_RIGHT_PAREN  KC_RPRN
+
+#define KC_UNDS LSFT(KC_MINS)   // _
+#define KC_UNDERSCORE   KC_UNDS
+
+#define KC_PLUS LSFT(KC_EQL)    // +
+
+#define KC_LCBR LSFT(KC_LBRC)   // {
+#define KC_LEFT_CURLY_BRACE KC_LCBR
+
+#define KC_RCBR LSFT(KC_RBRC)   // }
+#define KC_RIGHT_CURLY_BRACE    KC_RCBR
+
+#define KC_LABK LSFT(KC_COMM)   // <
+#define KC_LEFT_ANGLE_BRACKET   KC_LABK
+
+#define KC_RABK LSFT(KC_DOT)    // >
+#define KC_RIGHT_ANGLE_BRACKET  KC_RABK
+
+#define KC_COLN LSFT(KC_SCLN)   // :
+#define KC_COLON    KC_COLN
+
+#define KC_PIPE LSFT(KC_BSLS)   // |
+
+#define KC_LT LSFT(KC_COMM)     // <
+
+#define KC_GT LSFT(KC_DOT)      // >
+
+#define KC_QUES LSFT(KC_SLSH)   // ?
+#define KC_QUESTION KC_QUES
+
+#define KC_DQT LSFT(KC_QUOT)   // "
+#define KC_DOUBLE_QUOTE KC_DQT
+#define KC_DQUO KC_DQT
+
+#define KC_DELT KC_DELETE // Del key (four letter code)
+
+// Alias for function layers than expand past FN31
+#define FUNC(kc) (kc | QK_FUNCTION)
+
+// Aliases
+#define S(kc) LSFT(kc)
+#define F(kc) FUNC(kc)
+
+#define M(kc) (kc | QK_MACRO)
+
+#define MACRODOWN(...) (record->event.pressed ? MACRO(__VA_ARGS__) : MACRO_NONE)
+
+// L-ayer, T-ap - 256 keycode max, 16 layer max
+#define LT(layer, kc) (kc | QK_LAYER_TAP | ((layer & 0xF) << 8))
+
+#define AG_SWAP MAGIC_SWAP_ALT_GUI
+#define AG_NORM MAGIC_UNSWAP_ALT_GUI
+
+#define BL_ON  BL_9
+#define BL_OFF BL_0
+
+// GOTO layer - 16 layers max
+// when:
+// ON_PRESS    = 1
+// ON_RELEASE  = 2
+// Unless you have a good reason not to do so, prefer  ON_PRESS (1) as your default.
+#define TO(layer, when) (layer | QK_TO | (when << 0x4))
+
+// Momentary switch layer - 256 layer max
+#define MO(layer) (layer | QK_MOMENTARY)
+
+// Set default layer - 256 layer max
+#define DF(layer) (layer | QK_DEF_LAYER)
+
+// Toggle to layer - 256 layer max
+#define TG(layer) (layer | QK_TOGGLE_LAYER)
+
+// One-shot layer - 256 layer max
+#define OSL(layer) (layer | QK_ONE_SHOT_LAYER)
+
+// One-shot mod
+#define OSM(layer) (layer | QK_ONE_SHOT_MOD)
+
+// M-od, T-ap - 256 keycode max
+#define MT(mod, kc) (kc | QK_MOD_TAP | ((mod & 0xF) << 8))
+#define CTL_T(kc) MT(MOD_LCTL, kc)
+#define SFT_T(kc) MT(MOD_LSFT, kc)
+#define ALT_T(kc) MT(MOD_LALT, kc)
+#define GUI_T(kc) MT(MOD_LGUI, kc)
+#define C_S_T(kc) MT(MOD_LCTL | MOD_LSFT, kc) // Control + Shift e.g. for gnome-terminal
+#define MEH_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT, kc) // Meh is a less hyper version of the Hyper key -- doesn't include Win or Cmd, so just alt+shift+ctrl
+#define LCAG_T(kc) MT(MOD_LCTL | MOD_LALT | MOD_LGUI, kc) // Left control alt and gui
+#define ALL_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI, kc) // see http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/
+
+// Dedicated keycode versions for Hyper and Meh, if you want to use them as standalone keys rather than mod-tap
+#define KC_HYPR HYPR(KC_NO)
+#define KC_MEH  MEH(KC_NO)
+
+#ifdef UNICODE_ENABLE
+    // For sending unicode codes.
+    // You may not send codes over 7FFF -- this supports most of UTF8.
+    // To have a key that sends out Œ, go UC(0x0152)
+    #define UNICODE(n) (n | QK_UNICODE)
+    #define UC(n) UNICODE(n)
+#endif
+
+
+#endif

+ 0 - 323
quantum/keymap_common.c

@@ -1,323 +0,0 @@
-/*
-Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "keymap_common.h"
-#include "report.h"
-#include "keycode.h"
-#include "action_layer.h"
-#include <util/delay.h>
-#include "action.h"
-#include "action_macro.h"
-#include "debug.h"
-#include "backlight.h"
-#include "bootloader.h"
-#include "eeconfig.h"
-#include "quantum.h"
-
-#ifdef MIDI_ENABLE
-	#include "keymap_midi.h"
-#endif
-
-extern keymap_config_t keymap_config;
-
-#include <stdio.h>
-#include <inttypes.h>
-#ifdef AUDIO_ENABLE
-    #include "audio.h"
-#endif /* AUDIO_ENABLE */
-
-static action_t keycode_to_action(uint16_t keycode);
-
-/* converts key to action */
-action_t action_for_key(uint8_t layer, keypos_t key)
-{
-    // 16bit keycodes - important
-    uint16_t keycode = keymap_key_to_keycode(layer, key);
-
-    switch (keycode) {
-        case KC_FN0 ... KC_FN31:
-            return keymap_fn_to_action(keycode);
-        case KC_CAPSLOCK:
-        case KC_LOCKING_CAPS:
-            if (keymap_config.swap_control_capslock || keymap_config.capslock_to_control) {
-                return keycode_to_action(KC_LCTL);
-            }
-            return keycode_to_action(keycode);
-        case KC_LCTL:
-            if (keymap_config.swap_control_capslock) {
-                return keycode_to_action(KC_CAPSLOCK);
-            }
-            return keycode_to_action(KC_LCTL);
-        case KC_LALT:
-            if (keymap_config.swap_lalt_lgui) {
-                if (keymap_config.no_gui) {
-                    return keycode_to_action(ACTION_NO);
-                }
-                return keycode_to_action(KC_LGUI);
-            }
-            return keycode_to_action(KC_LALT);
-        case KC_LGUI:
-            if (keymap_config.swap_lalt_lgui) {
-                return keycode_to_action(KC_LALT);
-            }
-            if (keymap_config.no_gui) {
-                return keycode_to_action(ACTION_NO);
-            }
-            return keycode_to_action(KC_LGUI);
-        case KC_RALT:
-            if (keymap_config.swap_ralt_rgui) {
-                if (keymap_config.no_gui) {
-                    return keycode_to_action(ACTION_NO);
-                }
-                return keycode_to_action(KC_RGUI);
-            }
-            return keycode_to_action(KC_RALT);
-        case KC_RGUI:
-            if (keymap_config.swap_ralt_rgui) {
-                return keycode_to_action(KC_RALT);
-            }
-            if (keymap_config.no_gui) {
-                return keycode_to_action(ACTION_NO);
-            }
-            return keycode_to_action(KC_RGUI);
-        case KC_GRAVE:
-            if (keymap_config.swap_grave_esc) {
-                return keycode_to_action(KC_ESC);
-            }
-            return keycode_to_action(KC_GRAVE);
-        case KC_ESC:
-            if (keymap_config.swap_grave_esc) {
-                return keycode_to_action(KC_GRAVE);
-            }
-            return keycode_to_action(KC_ESC);
-        case KC_BSLASH:
-            if (keymap_config.swap_backslash_backspace) {
-                return keycode_to_action(KC_BSPACE);
-            }
-            return keycode_to_action(KC_BSLASH);
-        case KC_BSPACE:
-            if (keymap_config.swap_backslash_backspace) {
-                return keycode_to_action(KC_BSLASH);
-            }
-            return keycode_to_action(KC_BSPACE);
-        default:
-            return keycode_to_action(keycode);
-    }
-}
-
-
-/* Macro */
-__attribute__ ((weak))
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-    return MACRO_NONE;
-}
-
-/* Function */
-__attribute__ ((weak))
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-}
-
-/* translates keycode to action */
-static action_t keycode_to_action(uint16_t keycode)
-{
-    action_t action;
-    switch (keycode) {
-        case KC_A ... KC_EXSEL:
-        case KC_LCTRL ... KC_RGUI:
-            action.code = ACTION_KEY(keycode);
-            break;
-        case KC_SYSTEM_POWER ... KC_SYSTEM_WAKE:
-            action.code = ACTION_USAGE_SYSTEM(KEYCODE2SYSTEM(keycode));
-            break;
-        case KC_AUDIO_MUTE ... KC_WWW_FAVORITES:
-            action.code = ACTION_USAGE_CONSUMER(KEYCODE2CONSUMER(keycode));
-            break;
-        case KC_MS_UP ... KC_MS_ACCEL2:
-            action.code = ACTION_MOUSEKEY(keycode);
-            break;
-        case KC_TRNS:
-            action.code = ACTION_TRANSPARENT;
-            break;
-        case LCTL(0) ... 0x1FFF: ;
-            // Has a modifier
-            // Split it up
-            action.code = ACTION_MODS_KEY(keycode >> 8, keycode & 0xFF); // adds modifier to key
-            break;
-        case FUNC(0) ... FUNC(0xFFF): ;
-            // Is a shortcut for function layer, pull last 12bits
-            // This means we have 4,096 FN macros at our disposal
-            return keymap_func_to_action(keycode & 0xFFF);
-            break;
-        case M(0) ... M(0xFF):
-            action.code = ACTION_MACRO(keycode & 0xFF);
-            break;
-        case LT(0, 0) ... LT(0xFF, 0xF):
-            action.code = ACTION_LAYER_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF);
-            break;
-    #ifdef BACKLIGHT_ENABLE
-        case BL_0 ... BL_15:
-            action.code = ACTION_BACKLIGHT_LEVEL(keycode & 0x000F);
-            break;
-        case BL_DEC:
-            action.code = ACTION_BACKLIGHT_DECREASE();
-            break;
-        case BL_INC:
-            action.code = ACTION_BACKLIGHT_INCREASE();
-            break;
-        case BL_TOGG:
-            action.code = ACTION_BACKLIGHT_TOGGLE();
-            break;
-        case BL_STEP:
-            action.code = ACTION_BACKLIGHT_STEP();
-            break;
-    #endif
-        case RESET: ; // RESET is 0x5000, which is why this is here
-            clear_keyboard();
-            #ifdef AUDIO_ENABLE
-                stop_all_notes();
-                shutdown_user();
-            #endif
-            _delay_ms(250);
-            #ifdef ATREUS_ASTAR
-                *(uint16_t *)0x0800 = 0x7777; // these two are a-star-specific
-            #endif
-            bootloader_jump();
-            break;
-        case DEBUG: ; // DEBUG is 0x5001
-            print("\nDEBUG: enabled.\n");
-            debug_enable = true;
-            break;
-        case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_UNSWAP_ALT_GUI:
-            // MAGIC actions (BOOTMAGIC without the boot)
-            if (!eeconfig_is_enabled()) {
-                eeconfig_init();
-            }
-            /* keymap config */
-            keymap_config.raw = eeconfig_read_keymap();
-            if (keycode == MAGIC_SWAP_CONTROL_CAPSLOCK) {
-                keymap_config.swap_control_capslock = 1;
-            } else if (keycode == MAGIC_CAPSLOCK_TO_CONTROL) {
-                keymap_config.capslock_to_control = 1;
-            } else if (keycode == MAGIC_SWAP_LALT_LGUI) {
-                keymap_config.swap_lalt_lgui = 1;
-            } else if (keycode == MAGIC_SWAP_RALT_RGUI) {
-                keymap_config.swap_ralt_rgui = 1;
-            } else if (keycode == MAGIC_NO_GUI) {
-                keymap_config.no_gui = 1;
-            } else if (keycode == MAGIC_SWAP_GRAVE_ESC) {
-                keymap_config.swap_grave_esc = 1;
-            } else if (keycode == MAGIC_SWAP_BACKSLASH_BACKSPACE) {
-                keymap_config.swap_backslash_backspace = 1;
-            } else if (keycode == MAGIC_HOST_NKRO) {
-                keymap_config.nkro = 1;
-            } else if (keycode == MAGIC_SWAP_ALT_GUI) {
-                keymap_config.swap_lalt_lgui = 1;
-                keymap_config.swap_ralt_rgui = 1;
-            }
-            /* UNs */
-            else if (keycode == MAGIC_UNSWAP_CONTROL_CAPSLOCK) {
-                keymap_config.swap_control_capslock = 0;
-            } else if (keycode == MAGIC_UNCAPSLOCK_TO_CONTROL) {
-                keymap_config.capslock_to_control = 0;
-            } else if (keycode == MAGIC_UNSWAP_LALT_LGUI) {
-                keymap_config.swap_lalt_lgui = 0;
-            } else if (keycode == MAGIC_UNSWAP_RALT_RGUI) {
-                keymap_config.swap_ralt_rgui = 0;
-            } else if (keycode == MAGIC_UNNO_GUI) {
-                keymap_config.no_gui = 0;
-            } else if (keycode == MAGIC_UNSWAP_GRAVE_ESC) {
-                keymap_config.swap_grave_esc = 0;
-            } else if (keycode == MAGIC_UNSWAP_BACKSLASH_BACKSPACE) {
-                keymap_config.swap_backslash_backspace = 0;
-            } else if (keycode == MAGIC_UNHOST_NKRO) {
-                keymap_config.nkro = 0;
-            } else if (keycode == MAGIC_UNSWAP_ALT_GUI) {
-                keymap_config.swap_lalt_lgui = 0;
-                keymap_config.swap_ralt_rgui = 0;
-            }
-            eeconfig_update_keymap(keymap_config.raw);
-            break;
-        case TO(0, 1) ... OSM(0xFF): ;
-            // Layer movement shortcuts
-            // See .h to see constraints/usage
-            int type = (keycode >> 0x8) & 0xF;
-            if (type == 0x1) {
-                // Layer set "GOTO"
-                int when = (keycode >> 0x4) & 0x3;
-                int layer = keycode & 0xF;
-                action.code = ACTION_LAYER_SET(layer, when);
-            } else if (type == 0x2) {
-                // Momentary layer
-                int layer = keycode & 0xFF;
-                action.code = ACTION_LAYER_MOMENTARY(layer);
-            } else if (type == 0x3) {
-                // Set default layer
-                int layer = keycode & 0xFF;
-                action.code = ACTION_DEFAULT_LAYER_SET(layer);
-            } else if (type == 0x4) {
-                // Set default layer
-                int layer = keycode & 0xFF;
-                action.code = ACTION_LAYER_TOGGLE(layer);
-            } else if (type == 0x5) {
-                // OSL(layer) - One-shot layer
-                int layer = keycode & 0xFF;
-                action.code = ACTION_LAYER_ONESHOT(layer);
-            } else if (type == 0x6) {
-                // OSM(mod) - One-shot mod
-                int mod = keycode & 0xFF;
-                action.code = ACTION_MODS_ONESHOT(mod);
-            }
-            break;
-        case MT(0, 0) ... MT(0xF, 0xFF):
-            action.code = ACTION_MODS_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF);
-            break;
-        default:
-            action.code = ACTION_NO;
-            break;
-    }
-    return action;
-}
-
-
-/* translates key to keycode */
-uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
-{
-    // Read entire word (16bits)
-    return pgm_read_word(&keymaps[(layer)][(key.row)][(key.col)]);
-}
-
-/* translates Fn keycode to action */
-action_t keymap_fn_to_action(uint16_t keycode)
-{
-    return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
-}
-
-action_t keymap_func_to_action(uint16_t keycode)
-{
-    // For FUNC without 8bit limit
-    return (action_t){ .code = pgm_read_word(&fn_actions[(int)keycode]) };
-}
-
-void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
-  if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
-    layer_on(layer3);
-  } else {
-    layer_off(layer3);
-  }
-}

+ 0 - 292
quantum/keymap_common.h

@@ -1,292 +0,0 @@
-/*
-Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef KEYMAP_H
-#define KEYMAP_H
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "action.h"
-#include <avr/pgmspace.h>
-#include "keycode.h"
-#include "keymap.h"
-#include "action_macro.h"
-#include "report.h"
-#include "host.h"
-// #include "print.h"
-#include "debug.h"
-
-/* NOTE: Not portable. Bit field order depends on implementation */
-typedef union {
-    uint16_t raw;
-    struct {
-        bool swap_control_capslock:1;
-        bool capslock_to_control:1;
-        bool swap_lalt_lgui:1;
-        bool swap_ralt_rgui:1;
-        bool no_gui:1;
-        bool swap_grave_esc:1;
-        bool swap_backslash_backspace:1;
-        bool nkro:1;
-    };
-} keymap_config_t;
-
-
-/* translates key to keycode */
-uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key);
-
-/* translates Fn keycode to action */
-action_t keymap_fn_to_action(uint16_t keycode);
-
-/* translates Fn keycode to action */
-action_t keymap_func_to_action(uint16_t keycode);
-
-extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
-extern const uint16_t fn_actions[];
-
-// Ability to use mods in layouts
-#define LCTL(kc) kc | 0x0100
-#define LSFT(kc) kc | 0x0200
-#define LALT(kc) kc | 0x0400
-#define LGUI(kc) kc | 0x0800
-#define HYPR(kc) kc | 0x0F00
-#define MEH(kc) kc  | 0x0700
-#define LCAG(kc) kc  | 0x0D00 // Modifier Ctrl Alt and GUI
-
-#define MOD_HYPR 0xf
-#define MOD_MEH 0x7
-
-#define RCTL(kc) kc | 0x1100
-#define RSFT(kc) kc | 0x1200
-#define RALT(kc) kc | 0x1400
-#define RGUI(kc) kc | 0x1800
-
-// Aliases for shifted symbols
-// Each key has a 4-letter code, and some have longer aliases too.
-// While the long aliases are descriptive, the 4-letter codes
-// make for nicer grid layouts (everything lines up), and are
-// the preferred style for Quantum.
-#define KC_TILD LSFT(KC_GRV)    // ~
-#define KC_TILDE    KC_TILD
-
-#define KC_EXLM LSFT(KC_1)      // !
-#define KC_EXCLAIM  KC_EXLM
-
-#define KC_AT   LSFT(KC_2)      // @
-
-#define KC_HASH LSFT(KC_3)      // #
-
-#define KC_DLR  LSFT(KC_4)      // $
-#define KC_DOLLAR   KC_DLR
-
-#define KC_PERC LSFT(KC_5)      // %
-#define KC_PERCENT  KC_PERC
-
-#define KC_CIRC LSFT(KC_6)      // ^
-#define KC_CIRCUMFLEX   KC_CIRC
-
-#define KC_AMPR LSFT(KC_7)      // &
-#define KC_AMPERSAND    KC_AMPR
-
-#define KC_ASTR LSFT(KC_8)      // *
-#define KC_ASTERISK KC_ASTR
-
-#define KC_LPRN LSFT(KC_9)      // (
-#define KC_LEFT_PAREN   KC_LPRN
-
-#define KC_RPRN LSFT(KC_0)      // )
-#define KC_RIGHT_PAREN  KC_RPRN
-
-#define KC_UNDS LSFT(KC_MINS)   // _
-#define KC_UNDERSCORE   KC_UNDS
-
-#define KC_PLUS LSFT(KC_EQL)    // +
-
-#define KC_LCBR LSFT(KC_LBRC)   // {
-#define KC_LEFT_CURLY_BRACE KC_LCBR
-
-#define KC_RCBR LSFT(KC_RBRC)   // }
-#define KC_RIGHT_CURLY_BRACE    KC_RCBR
-
-#define KC_LABK LSFT(KC_COMM)   // <
-#define KC_LEFT_ANGLE_BRACKET   KC_LABK
-
-#define KC_RABK LSFT(KC_DOT)    // >
-#define KC_RIGHT_ANGLE_BRACKET  KC_RABK
-
-#define KC_COLN LSFT(KC_SCLN)   // :
-#define KC_COLON    KC_COLN
-
-#define KC_PIPE LSFT(KC_BSLS)   // |
-
-#define KC_LT LSFT(KC_COMM)     // <
-
-#define KC_GT LSFT(KC_DOT)      // >
-
-#define KC_QUES LSFT(KC_SLSH)   // ?
-#define KC_QUESTION KC_QUES
-
-#define KC_DQT LSFT(KC_QUOT)   // "
-#define KC_DOUBLE_QUOTE KC_DQT
-#define KC_DQUO KC_DQT
-
-#define KC_DELT KC_DELETE // Del key (four letter code)
-
-// Alias for function layers than expand past FN31
-#define FUNC(kc) kc | 0x2000
-
-// Aliases
-#define S(kc) LSFT(kc)
-#define F(kc) FUNC(kc)
-
-#define M(kc) (kc | 0x3000)
-
-#define MACRODOWN(...) (record->event.pressed ? MACRO(__VA_ARGS__) : MACRO_NONE)
-
-// 0x3100+ is free
-
-// L-ayer, T-ap - 256 keycode max, 16 layer max
-#define LT(layer, kc) (kc | 0x4000 | ((layer & 0xF) << 8))
-
-#define RESET 0x5000
-#define DEBUG 0x5001
-
-// MAGIC keycodes
-#define MAGIC_SWAP_CONTROL_CAPSLOCK      0x5002
-#define MAGIC_UNSWAP_CONTROL_CAPSLOCK    0x5003
-#define MAGIC_CAPSLOCK_TO_CONTROL        0x5004
-#define MAGIC_UNCAPSLOCK_TO_CONTROL      0x5005
-#define MAGIC_SWAP_LALT_LGUI             0x5006
-#define MAGIC_UNSWAP_LALT_LGUI           0x5007
-#define MAGIC_SWAP_RALT_RGUI             0x5008
-#define MAGIC_UNSWAP_RALT_RGUI           0x5009
-#define MAGIC_NO_GUI                     0x500a
-#define MAGIC_UNNO_GUI                   0x500b
-#define MAGIC_SWAP_GRAVE_ESC             0x500c
-#define MAGIC_UNSWAP_GRAVE_ESC           0x500d
-#define MAGIC_SWAP_BACKSLASH_BACKSPACE   0x500e
-#define MAGIC_UNSWAP_BACKSLASH_BACKSPACE 0x500f
-#define MAGIC_HOST_NKRO                  0x5010
-#define MAGIC_UNHOST_NKRO                0x5011
-#define MAGIC_SWAP_ALT_GUI               0x5012
-#define MAGIC_UNSWAP_ALT_GUI             0x5013
-
-#define AG_SWAP MAGIC_SWAP_ALT_GUI
-#define AG_NORM MAGIC_UNSWAP_ALT_GUI
-
-#define KC_LEAD 0x5014
-
-// Audio on/off
-#define AU_ON  0x5020
-#define AU_OFF 0x5021
-#define AU_TOG 0x5022
-
-// Music mode on/off
-#define MU_ON  0x5023
-#define MU_OFF 0x5024
-#define MU_TOG 0x5025
-
-// Music voice iterate
-#define MUV_IN 0x5026
-#define MUV_DE 0x5027
-
-// Midi mode on/off
-#define MI_ON  0x5028
-#define MI_OFF 0x5029
-
-// These affect the backlight (if your keyboard has one).
-// We don't need to comment them out if your keyboard doesn't have a backlight,
-// since they don't take up any space.
-#define BL_ON 0x5079
-#define BL_OFF 0x5070
-#define BL_0 0x5070
-#define BL_1 0x5071
-#define BL_2 0x5072
-#define BL_3 0x5073
-#define BL_4 0x5074
-#define BL_5 0x5075
-#define BL_6 0x5076
-#define BL_7 0x5077
-#define BL_8 0x5078
-#define BL_9 0x5079
-#define BL_10 0x507A
-#define BL_11 0x507B
-#define BL_12 0x507C
-#define BL_13 0x507D
-#define BL_14 0x507E
-#define BL_15 0x507F
-#define BL_DEC 0x5080
-#define BL_INC 0x5081
-#define BL_TOGG 0x5082
-#define BL_STEP 0x5083
-
-#define KC_LSPO 0x5084 // Left shift, open parens when tapped
-#define KC_RSPC 0x5085 // Right shift, close parens when tapped
-// GOTO layer - 16 layers max
-// when:
-// ON_PRESS    = 1
-// ON_RELEASE  = 2
-// Unless you have a good reason not to do so, prefer  ON_PRESS (1) as your default.
-#define TO(layer, when) (layer | 0x5100 | (when << 0x4))
-
-// Momentary switch layer - 256 layer max
-#define MO(layer) (layer | 0x5200)
-
-// Set default layer - 256 layer max
-#define DF(layer) (layer | 0x5300)
-
-// Toggle to layer - 256 layer max
-#define TG(layer) (layer | 0x5400)
-
-// One-shot layer - 256 layer max
-#define OSL(layer) (layer | 0x5500)
-
-// One-shot mod
-#define OSM(layer) (layer | 0x5600)
-
-// chording is currently at 0x57xx
-
-// M-od, T-ap - 256 keycode max
-#define MT(mod, kc) (kc | 0x7000 | ((mod & 0xF) << 8))
-#define CTL_T(kc) MT(0x1, kc)
-#define SFT_T(kc) MT(0x2, kc)
-#define ALT_T(kc) MT(0x4, kc)
-#define GUI_T(kc) MT(0x8, kc)
-#define C_S_T(kc) MT(0x3, kc) // Control + Shift e.g. for gnome-terminal
-#define MEH_T(kc) MT(0x7, kc) // Meh is a less hyper version of the Hyper key -- doesn't include Win or Cmd, so just alt+shift+ctrl
-#define LCAG_T(kc) MT(0xD, kc) // Left control alt and gui
-#define ALL_T(kc) MT(0xF, kc) // see http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/
-
-// Dedicated keycode versions for Hyper and Meh, if you want to use them as standalone keys rather than mod-tap
-#define KC_HYPR HYPR(KC_NO)
-#define KC_MEH  MEH(KC_NO)
-
-#ifdef UNICODE_ENABLE
-    // For sending unicode codes.
-    // You may not send codes over 7FFF -- this supports most of UTF8.
-    // To have a key that sends out Œ, go UC(0x0152)
-    #define UNICODE(n) (n | 0x8000)
-    #define UC(n) UNICODE(n)
-#endif
-
-// For tri-layer
-void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3);
-#define IS_LAYER_ON(layer)  (layer_state & (1UL << (layer)))
-#define IS_LAYER_OFF(layer) (~layer_state & (1UL << (layer)))
-
-
-#endif

+ 1 - 1
quantum/keymap_extras/keymap_bepo.h

@@ -2,7 +2,7 @@
 #ifndef KEYMAP_BEPO_H
 #define KEYMAP_BEPO_H
 
-#include "keymap_common.h"
+#include "keymap.h"
 
 // Alt gr
 #ifndef ALTGR

+ 1 - 1
quantum/keymap_extras/keymap_colemak.h

@@ -1,7 +1,7 @@
 #ifndef KEYMAP_COLEMAK_H
 #define KEYMAP_COLEMAK_H
 
-#include "keymap_common.h"
+#include "keymap.h"
 // For software implementation of colemak
 #define CM_Q    KC_Q
 #define CM_W    KC_W

+ 1 - 1
quantum/keymap_extras/keymap_dvorak.h

@@ -1,7 +1,7 @@
 #ifndef KEYMAP_DVORAK_H
 #define KEYMAP_DVORAK_H
 
-#include "keymap_common.h"
+#include "keymap.h"
 
 // Normal characters
 #define DV_GRV	KC_GRV

+ 1 - 1
quantum/keymap_extras/keymap_fr_ch.h

@@ -1,7 +1,7 @@
 #ifndef KEYMAP_FR_CH
 #define KEYMAP_FR_CH
 
-#include "keymap_common.h"
+#include "keymap.h"
 
 // Alt gr
 #define ALGR(kc) kc | 0x1400

+ 1 - 1
quantum/keymap_extras/keymap_french.h

@@ -1,7 +1,7 @@
 #ifndef KEYMAP_FRENCH_H
 #define KEYMAP_FRENCH_H
 
-#include "keymap_common.h"
+#include "keymap.h"
 
 // Alt gr
 #define ALGR(kc) kc | 0x1400

+ 1 - 1
quantum/keymap_extras/keymap_french_osx.h

@@ -1,7 +1,7 @@
 #ifndef KEYMAP_FRENCH_OSX_H
 #define KEYMAP_FRENCH_OSX_H
 
-#include "keymap_common.h"
+#include "keymap.h"
 
 // Normal characters
 #define FR_AT 	KC_GRV

+ 1 - 1
quantum/keymap_extras/keymap_german.h

@@ -1,7 +1,7 @@
 #ifndef KEYMAP_GERMAN
 #define KEYMAP_GERMAN
 
-#include "keymap_common.h"
+#include "keymap.h"
 
 // Alt gr
 #define ALGR(kc) kc | 0x1400

+ 1 - 1
quantum/keymap_extras/keymap_german_ch.h

@@ -1,7 +1,7 @@
 #ifndef KEYMAP_SWISS_GERMAN
 #define KEYMAP_SWISS_GERMAN
 
-#include "keymap_common.h"
+#include "keymap.h"
 
 // Alt gr
 #define ALGR(kc) kc | 0x1400

+ 1 - 1
quantum/keymap_extras/keymap_german_osx.h

@@ -4,7 +4,7 @@
 #ifdef KEYMAP_GERMAN
 	#warning redefining german keys
 #endif
-#include "keymap_common.h"
+#include "keymap.h"
 
 // Alt gr
 

+ 1 - 1
quantum/keymap_extras/keymap_neo2.h

@@ -1,7 +1,7 @@
 #ifndef KEYMAP_NEO2
 #define KEYMAP_NEO2
 
-#include "keymap_common.h"
+#include "keymap.h"
 #include "keymap_extras/keymap_german.h"
 
 #define NEO_A KC_D

+ 1 - 1
quantum/keymap_extras/keymap_nordic.h

@@ -1,7 +1,7 @@
 #ifndef KEYMAP_NORDIC_H
 #define KEYMAP_NORDIC_H
 
-#include "keymap_common.h"
+#include "keymap.h"
 
 // Alt gr
 #define ALGR(kc) kc | 0x1400

+ 1 - 1
quantum/keymap_extras/keymap_plover.h

@@ -1,7 +1,7 @@
 #ifndef KEYMAP_PLOVER_H
 #define KEYMAP_PLOVER_H
 
-#include "keymap_common.h"
+#include "keymap.h"
 
 #define PV_NUM  KC_1
 #define PV_LS   KC_Q

+ 1 - 1
quantum/keymap_extras/keymap_spanish.h

@@ -1,7 +1,7 @@
 #ifndef KEYMAP_SPANISH_H
 #define KEYMAP_SPANISH_H
 
-#include "keymap_common.h"
+#include "keymap.h"
 
 // Alt gr
 #define ALGR(kc) kc | 0x1400

+ 1 - 1
quantum/keymap_extras/keymap_uk.h

@@ -1,7 +1,7 @@
 #ifndef KEYMAP_UK_H
 #define KEYMAP_UK_H
 
-#include "keymap_common.h"
+#include "keymap.h"
 
 // Alt gr
 #define ALGR(kc) kc | 0x1400

+ 1 - 1
quantum/keymap_midi.c

@@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include "keymap_common.h"
+#include "keymap.h"
 #include "keymap_midi.h"
 
 uint8_t starting_note = 0x0C;

+ 124 - 59
quantum/quantum.c

@@ -1,5 +1,4 @@
 #include "quantum.h"
-#include "timer.h"
 
 __attribute__ ((weak))
 void matrix_init_kb(void) {}
@@ -35,15 +34,15 @@ int offset = 7;
 #ifdef AUDIO_ENABLE
   bool music_activated = false;
 
-// music sequencer
-static bool music_sequence_recording = false;
-static bool music_sequence_playing = false;
-static float music_sequence[16] = {0};
-static uint8_t music_sequence_count = 0;
-static uint8_t music_sequence_position = 0;
+  // music sequencer
+  static bool music_sequence_recording = false;
+  static bool music_sequence_playing = false;
+  static float music_sequence[16] = {0};
+  static uint8_t music_sequence_count = 0;
+  static uint8_t music_sequence_position = 0;
 
-static uint16_t music_sequence_timer = 0;
-static uint16_t music_sequence_interval = 100;
+  static uint16_t music_sequence_timer = 0;
+  static uint16_t music_sequence_interval = 100;
 
 #endif
 
@@ -172,10 +171,6 @@ bool process_record_quantum(keyrecord_t *record) {
           if (record->event.pressed) {
               starting_note++; // Change key
               midi_send_cc(&midi_device, 0, 0x7B, 0);
-              // midi_send_cc(&midi_device, 1, 0x7B, 0);
-              // midi_send_cc(&midi_device, 2, 0x7B, 0);
-              // midi_send_cc(&midi_device, 3, 0x7B, 0);
-              // midi_send_cc(&midi_device, 4, 0x7B, 0);
           }
           return false;
       }
@@ -183,29 +178,17 @@ bool process_record_quantum(keyrecord_t *record) {
           if (record->event.pressed) {
               starting_note--; // Change key
               midi_send_cc(&midi_device, 0, 0x7B, 0);
-              // midi_send_cc(&midi_device, 1, 0x7B, 0);
-              // midi_send_cc(&midi_device, 2, 0x7B, 0);
-              // midi_send_cc(&midi_device, 3, 0x7B, 0);
-              // midi_send_cc(&midi_device, 4, 0x7B, 0);
           }
           return false;
       }
       if (record->event.key.col == (MATRIX_COLS - 3) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) {
           offset++; // Change scale
           midi_send_cc(&midi_device, 0, 0x7B, 0);
-          // midi_send_cc(&midi_device, 1, 0x7B, 0);
-          // midi_send_cc(&midi_device, 2, 0x7B, 0);
-          // midi_send_cc(&midi_device, 3, 0x7B, 0);
-          // midi_send_cc(&midi_device, 4, 0x7B, 0);
           return false;
       }
       if (record->event.key.col == (MATRIX_COLS - 4) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) {
           offset--; // Change scale
           midi_send_cc(&midi_device, 0, 0x7B, 0);
-          // midi_send_cc(&midi_device, 1, 0x7B, 0);
-          // midi_send_cc(&midi_device, 2, 0x7B, 0);
-          // midi_send_cc(&midi_device, 3, 0x7B, 0);
-          // midi_send_cc(&midi_device, 4, 0x7B, 0);
           return false;
       }
       // basic
@@ -365,7 +348,7 @@ bool process_record_quantum(keyrecord_t *record) {
 #define DISABLE_CHORDING
 #ifndef DISABLE_CHORDING
 
-  if (keycode >= 0x5700 && keycode <= 0x57FF) {
+  if (keycode >= QK_CHORDING && keycode <= QK_CHORDING_MAX) {
     if (record->event.pressed) {
       if (!chording) {
         chording = true;
@@ -403,7 +386,7 @@ bool process_record_quantum(keyrecord_t *record) {
 
 #ifdef UNICODE_ENABLE
 
-  if (keycode > UNICODE(0) && record->event.pressed) {
+  if (keycode > QK_UNICODE && record->event.pressed) {
     uint16_t unicode = keycode & 0x7FFF;
     switch(input_mode) {
       case UC_OSX:
@@ -443,42 +426,117 @@ bool process_record_quantum(keyrecord_t *record) {
   // Shift / paren setup
 
   switch(keycode) {
+    case RESET:
+      if (record->event.pressed) {
+        clear_keyboard();
+        #ifdef AUDIO_ENABLE
+          stop_all_notes();
+          shutdown_user();
+        #endif
+        _delay_ms(250);
+        #ifdef ATREUS_ASTAR
+            *(uint16_t *)0x0800 = 0x7777; // these two are a-star-specific
+        #endif
+        bootloader_jump();
+        return false;
+      }
+      break;
+    case DEBUG:
+      if (record->event.pressed) {
+          print("\nDEBUG: enabled.\n");
+          debug_enable = true;
+          return false;
+      }
+      break;
+    case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_UNSWAP_ALT_GUI:
+      if (record->event.pressed) {
+        // MAGIC actions (BOOTMAGIC without the boot)
+        if (!eeconfig_is_enabled()) {
+            eeconfig_init();
+        }
+        /* keymap config */
+        keymap_config.raw = eeconfig_read_keymap();
+        if (keycode == MAGIC_SWAP_CONTROL_CAPSLOCK) {
+            keymap_config.swap_control_capslock = 1;
+        } else if (keycode == MAGIC_CAPSLOCK_TO_CONTROL) {
+            keymap_config.capslock_to_control = 1;
+        } else if (keycode == MAGIC_SWAP_LALT_LGUI) {
+            keymap_config.swap_lalt_lgui = 1;
+        } else if (keycode == MAGIC_SWAP_RALT_RGUI) {
+            keymap_config.swap_ralt_rgui = 1;
+        } else if (keycode == MAGIC_NO_GUI) {
+            keymap_config.no_gui = 1;
+        } else if (keycode == MAGIC_SWAP_GRAVE_ESC) {
+            keymap_config.swap_grave_esc = 1;
+        } else if (keycode == MAGIC_SWAP_BACKSLASH_BACKSPACE) {
+            keymap_config.swap_backslash_backspace = 1;
+        } else if (keycode == MAGIC_HOST_NKRO) {
+            keymap_config.nkro = 1;
+        } else if (keycode == MAGIC_SWAP_ALT_GUI) {
+            keymap_config.swap_lalt_lgui = 1;
+            keymap_config.swap_ralt_rgui = 1;
+        }
+        /* UNs */
+        else if (keycode == MAGIC_UNSWAP_CONTROL_CAPSLOCK) {
+            keymap_config.swap_control_capslock = 0;
+        } else if (keycode == MAGIC_UNCAPSLOCK_TO_CONTROL) {
+            keymap_config.capslock_to_control = 0;
+        } else if (keycode == MAGIC_UNSWAP_LALT_LGUI) {
+            keymap_config.swap_lalt_lgui = 0;
+        } else if (keycode == MAGIC_UNSWAP_RALT_RGUI) {
+            keymap_config.swap_ralt_rgui = 0;
+        } else if (keycode == MAGIC_UNNO_GUI) {
+            keymap_config.no_gui = 0;
+        } else if (keycode == MAGIC_UNSWAP_GRAVE_ESC) {
+            keymap_config.swap_grave_esc = 0;
+        } else if (keycode == MAGIC_UNSWAP_BACKSLASH_BACKSPACE) {
+            keymap_config.swap_backslash_backspace = 0;
+        } else if (keycode == MAGIC_UNHOST_NKRO) {
+            keymap_config.nkro = 0;
+        } else if (keycode == MAGIC_UNSWAP_ALT_GUI) {
+            keymap_config.swap_lalt_lgui = 0;
+            keymap_config.swap_ralt_rgui = 0;
+        }
+        eeconfig_update_keymap(keymap_config.raw);
+        return false;
+      }
+      break;
     case KC_LSPO: {
-                    if (record->event.pressed) {
-                      shift_interrupted[0] = false;
-                      register_mods(MOD_LSFT);
-                    }
-                    else {
-                      if (!shift_interrupted[0]) {
-                        register_code(LSPO_KEY);
-                        unregister_code(LSPO_KEY);
-                      }
-                      unregister_mods(MOD_LSFT);
-                    }
-                    return false;
-                    break;
-                  }
+      if (record->event.pressed) {
+        shift_interrupted[0] = false;
+        register_mods(MOD_LSFT);
+      }
+      else {
+        if (!shift_interrupted[0]) {
+          register_code(LSPO_KEY);
+          unregister_code(LSPO_KEY);
+        }
+        unregister_mods(MOD_LSFT);
+      }
+      return false;
+      break;
+    }
 
     case KC_RSPC: {
-                    if (record->event.pressed) {
-                      shift_interrupted[1] = false;
-                      register_mods(MOD_RSFT);
-                    }
-                    else {
-                      if (!shift_interrupted[1]) {
-                        register_code(RSPC_KEY);
-                        unregister_code(RSPC_KEY);
-                      }
-                      unregister_mods(MOD_RSFT);
-                    }
-                    return false;
-                    break;
-                  }
+      if (record->event.pressed) {
+        shift_interrupted[1] = false;
+        register_mods(MOD_RSFT);
+      }
+      else {
+        if (!shift_interrupted[1]) {
+          register_code(RSPC_KEY);
+          unregister_code(RSPC_KEY);
+        }
+        unregister_mods(MOD_RSFT);
+      }
+      return false;
+      break;
+    }
     default: {
-               shift_interrupted[0] = true;
-               shift_interrupted[1] = true;
-               break;
-             }
+      shift_interrupted[0] = true;
+      shift_interrupted[1] = true;
+      break;
+    }
   }
 
   return process_action_kb(record);
@@ -586,6 +644,13 @@ void send_string(const char *str) {
     }
 }
 
+void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+  if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
+    layer_on(layer3);
+  } else {
+    layer_off(layer3);
+  }
+}
 
 void matrix_init_quantum() {
   matrix_init_kb();

+ 9 - 4
quantum/quantum.h

@@ -3,7 +3,7 @@
 
 #include <avr/pgmspace.h>
 #include "matrix.h"
-#include "keymap_common.h"
+#include "keymap.h"
 #ifdef BACKLIGHT_ENABLE
     #include "backlight.h"
 #endif
@@ -25,8 +25,8 @@
 #include <stddef.h>
 #include <avr/io.h>
 #include <util/delay.h>
-
-#define SEND_STRING(str) send_string(PSTR(str))
+#include "bootloader.h"
+#include "timer.h"
 
 extern uint32_t default_layer_state;
 
@@ -62,15 +62,20 @@ extern uint32_t default_layer_state;
 	#define LEADER_DICTIONARY() if (leading && timer_elapsed(leader_time) > LEADER_TIMEOUT)
 #endif
 
+#define SEND_STRING(str) send_string(PSTR(str))
 void send_string(const char *str);
 
+// For tri-layer
+void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3);
+#define IS_LAYER_ON(layer)  (layer_state & (1UL << (layer)))
+#define IS_LAYER_OFF(layer) (~layer_state & (1UL << (layer)))
+
 void matrix_init_kb(void);
 void matrix_scan_kb(void);
 bool process_action_kb(keyrecord_t *record);
 bool process_record_kb(uint16_t keycode, keyrecord_t *record);
 bool process_record_user(uint16_t keycode, keyrecord_t *record);
 
-
 bool is_music_on(void);
 void music_toggle(void);
 void music_on(void);

+ 1 - 1
quantum/template/template.h

@@ -2,7 +2,7 @@
 #define %KEYBOARD_UPPERCASE%_H
 
 #include "matrix.h"
-#include "keymap_common.h"
+#include "keymap.h"
 #ifdef BACKLIGHT_ENABLE
 	#include "backlight.h"
 #endif

+ 0 - 1
tmk_core/common.mk

@@ -6,7 +6,6 @@ SRC +=	$(COMMON_DIR)/host.c \
 	$(COMMON_DIR)/action_macro.c \
 	$(COMMON_DIR)/action_layer.c \
 	$(COMMON_DIR)/action_util.c \
-	$(COMMON_DIR)/keymap.c \
 	$(COMMON_DIR)/print.c \
 	$(COMMON_DIR)/debug.c \
 	$(COMMON_DIR)/util.c \

+ 0 - 193
tmk_core/common/keymap.c

@@ -1,193 +0,0 @@
-/*
-Copyright 2013 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-#include "keymap.h"
-#include "report.h"
-#include "keycode.h"
-#include "action_layer.h"
-#include "action.h"
-#include "action_macro.h"
-#include "wait.h"
-#include "debug.h"
-#include "bootloader.h"
-
-static action_t keycode_to_action(uint8_t keycode);
-
-
-/* converts key to action */
-__attribute__ ((weak))
-action_t action_for_key(uint8_t layer, keypos_t key)
-{
-    uint8_t keycode = keymap_key_to_keycode(layer, key);
-    switch (keycode) {
-        case KC_FN0 ... KC_FN31:
-            return keymap_fn_to_action(keycode);
-#ifdef BOOTMAGIC_ENABLE
-        case KC_CAPSLOCK:
-        case KC_LOCKING_CAPS:
-            if (keymap_config.swap_control_capslock || keymap_config.capslock_to_control) {
-                return keycode_to_action(KC_LCTL);
-            }
-            return keycode_to_action(keycode);
-        case KC_LCTL:
-            if (keymap_config.swap_control_capslock) {
-                return keycode_to_action(KC_CAPSLOCK);
-            }
-            return keycode_to_action(KC_LCTL);
-        case KC_LALT:
-            if (keymap_config.swap_lalt_lgui) {
-                if (keymap_config.no_gui) {
-                    return keycode_to_action(ACTION_NO);
-                }
-                return keycode_to_action(KC_LGUI);
-            }
-            return keycode_to_action(KC_LALT);
-        case KC_LGUI:
-            if (keymap_config.swap_lalt_lgui) {
-                return keycode_to_action(KC_LALT);
-            }
-            if (keymap_config.no_gui) {
-                return keycode_to_action(ACTION_NO);
-            }
-            return keycode_to_action(KC_LGUI);
-        case KC_RALT:
-            if (keymap_config.swap_ralt_rgui) {
-                if (keymap_config.no_gui) {
-                    return keycode_to_action(ACTION_NO);
-                }
-                return keycode_to_action(KC_RGUI);
-            }
-            return keycode_to_action(KC_RALT);
-        case KC_RGUI:
-            if (keymap_config.swap_ralt_rgui) {
-                return keycode_to_action(KC_RALT);
-            }
-            if (keymap_config.no_gui) {
-                return keycode_to_action(ACTION_NO);
-            }
-            return keycode_to_action(KC_RGUI);
-        case KC_GRAVE:
-            if (keymap_config.swap_grave_esc) {
-                return keycode_to_action(KC_ESC);
-            }
-            return keycode_to_action(KC_GRAVE);
-        case KC_ESC:
-            if (keymap_config.swap_grave_esc) {
-                return keycode_to_action(KC_GRAVE);
-            }
-            return keycode_to_action(KC_ESC);
-        case KC_BSLASH:
-            if (keymap_config.swap_backslash_backspace) {
-                return keycode_to_action(KC_BSPACE);
-            }
-            return keycode_to_action(KC_BSLASH);
-        case KC_BSPACE:
-            if (keymap_config.swap_backslash_backspace) {
-                return keycode_to_action(KC_BSLASH);
-            }
-            return keycode_to_action(KC_BSPACE);
-#endif
-        default:
-            return keycode_to_action(keycode);
-    }
-}
-
-
-/* Macro */
-__attribute__ ((weak))
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-    return MACRO_NONE;
-}
-
-/* Function */
-__attribute__ ((weak))
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-}
-
-
-
-/* translates keycode to action */
-static action_t keycode_to_action(uint8_t keycode)
-{
-    action_t action;
-    switch (keycode) {
-        case KC_A ... KC_EXSEL:
-        case KC_LCTRL ... KC_RGUI:
-            action.code = ACTION_KEY(keycode);
-            break;
-        case KC_SYSTEM_POWER ... KC_SYSTEM_WAKE:
-            action.code = ACTION_USAGE_SYSTEM(KEYCODE2SYSTEM(keycode));
-            break;
-        case KC_AUDIO_MUTE ... KC_MEDIA_REWIND:
-            action.code = ACTION_USAGE_CONSUMER(KEYCODE2CONSUMER(keycode));
-            break;
-        case KC_MS_UP ... KC_MS_ACCEL2:
-            action.code = ACTION_MOUSEKEY(keycode);
-            break;
-        case KC_TRNS:
-            action.code = ACTION_TRANSPARENT;
-            break;
-        case KC_BOOTLOADER:
-        	action.code = ACTION_NO;
-            clear_keyboard();
-            wait_ms(50);
-            bootloader_jump(); // not return
-            break;
-        default:
-            action.code = ACTION_NO;
-            break;
-    }
-    return action;
-}
-
-
-
-#ifdef USE_LEGACY_KEYMAP
-/*
- * Legacy keymap support
- *      Consider using new keymap API instead.
- */
-__attribute__ ((weak))
-uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
-{
-    return keymap_get_keycode(layer, key.row, key.col);
-}
-
-
-/* Legacy keymap support */
-__attribute__ ((weak))
-action_t keymap_fn_to_action(uint8_t keycode)
-{
-    action_t action = { .code = ACTION_NO };
-    switch (keycode) {
-        case KC_FN0 ... KC_FN31:
-            {
-                uint8_t layer = keymap_fn_layer(FN_INDEX(keycode));
-                uint8_t key = keymap_fn_keycode(FN_INDEX(keycode));
-                if (key) {
-                    action.code = ACTION_LAYER_TAP_KEY(layer, key);
-                } else {
-                    action.code = ACTION_LAYER_MOMENTARY(layer);
-                }
-            }
-            return action;
-        default:
-            return action;
-    }
-}
-#endif

+ 0 - 68
tmk_core/common/keymap.h

@@ -1,68 +0,0 @@
-/*
-Copyright 2011 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef KEYMAP_H
-#define KEYMAP_H
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "action.h"
-
-/* NOTE: Not portable. Bit field order depends on implementation */
-typedef union {
-    uint8_t raw;
-    struct {
-        bool swap_control_capslock:1;
-        bool capslock_to_control:1;
-        bool swap_lalt_lgui:1;
-        bool swap_ralt_rgui:1;
-        bool no_gui:1;
-        bool swap_grave_esc:1;
-        bool swap_backslash_backspace:1;
-        bool nkro:1;
-    };
-} keymap_config_t;
-keymap_config_t keymap_config;
-
-
-/* translates key to keycode */
-uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key);
-
-/* translates Fn keycode to action */
-action_t keymap_fn_to_action(uint8_t keycode);
-
-
-
-#ifdef USE_LEGACY_KEYMAP
-/* 
- * Legacy keymap
- *      Consider using new keymap API above instead.
- */
-/* keycode of key */
-__attribute__ ((deprecated))
-uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col);
-
-/* layer to move during press Fn key */
-__attribute__ ((deprecated))
-uint8_t keymap_fn_layer(uint8_t fn_bits);
-
-/* keycode to send when release Fn key without using */
-__attribute__ ((deprecated))
-uint8_t keymap_fn_keycode(uint8_t fn_bits);
-#endif
-
-#endif

+ 1 - 5
tmk_core/protocol/lufa.mk

@@ -18,11 +18,7 @@ LUFA_SRC = lufa.c \
 	   $(LUFA_SRC_USB)
 
 ifeq ($(strip $(MIDI_ENABLE)), yes)
-	LUFA_SRC += midi/midi.c \
-	   midi/midi_device.c \
-	   midi/bytequeue/bytequeue.c \
-	   midi/bytequeue/interrupt_setting.c \
-	   $(LUFA_SRC_USBCLASS)
+	include $(TMK_PATH)/protocol/midi.mk
 endif
 
 ifeq ($(strip $(BLUETOOTH_ENABLE)), yes)

+ 0 - 274
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioInput/AudioInput.c

@@ -1,274 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2014.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaims all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  Main source file for the AudioInput demo. This file contains the main tasks of
- *  the demo and is responsible for the initial application hardware configuration.
- */
-
-#include "AudioInput.h"
-
-/** LUFA Audio Class driver interface configuration and state information. This structure is
- *  passed to all Audio Class driver functions, so that multiple instances of the same class
- *  within a device can be differentiated from one another.
- */
-USB_ClassInfo_Audio_Device_t Microphone_Audio_Interface =
-	{
-		.Config =
-			{
-				.ControlInterfaceNumber   = INTERFACE_ID_AudioControl,
-				.StreamingInterfaceNumber = INTERFACE_ID_AudioStream,
-				.DataINEndpoint           =
-					{
-						.Address          = AUDIO_STREAM_EPADDR,
-						.Size             = AUDIO_STREAM_EPSIZE,
-						.Banks            = 2,
-					},
-			},
-	};
-
-/** Current audio sampling frequency of the streaming audio endpoint. */
-static uint32_t CurrentAudioSampleFrequency = 48000;
-
-
-/** Main program entry point. This routine contains the overall program flow, including initial
- *  setup of all components and the main program loop.
- */
-int main(void)
-{
-	SetupHardware();
-
-	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
-	GlobalInterruptEnable();
-
-	for (;;)
-	{
-		Audio_Device_USBTask(&Microphone_Audio_Interface);
-		USB_USBTask();
-	}
-}
-
-/** Configures the board hardware and chip peripherals for the demo's functionality. */
-void SetupHardware(void)
-{
-#if (ARCH == ARCH_AVR8)
-	/* Disable watchdog if enabled by bootloader/fuses */
-	MCUSR &= ~(1 << WDRF);
-	wdt_disable();
-
-	/* Disable clock division */
-	clock_prescale_set(clock_div_1);
-#endif
-
-	/* Hardware Initialization */
-	LEDs_Init();
-	Buttons_Init();
-	ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32);
-	ADC_SetupChannel(MIC_IN_ADC_CHANNEL);
-	USB_Init();
-
-	/* Start the ADC conversion in free running mode */
-	ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | ADC_GET_CHANNEL_MASK(MIC_IN_ADC_CHANNEL));
-}
-
-/** ISR to handle the reloading of the data endpoint with the next sample. */
-ISR(TIMER0_COMPA_vect, ISR_BLOCK)
-{
-	uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint();
-
-	/* Check that the USB bus is ready for the next sample to write */
-	if (Audio_Device_IsReadyForNextSample(&Microphone_Audio_Interface))
-	{
-		int16_t AudioSample;
-
-		#if defined(USE_TEST_TONE)
-			static uint8_t SquareWaveSampleCount;
-			static int16_t CurrentWaveValue;
-
-			/* In test tone mode, generate a square wave at 1/256 of the sample rate */
-			if (SquareWaveSampleCount++ == 0xFF)
-			  CurrentWaveValue ^= 0x8000;
-
-			/* Only generate audio if the board button is being pressed */
-			AudioSample = (Buttons_GetStatus() & BUTTONS_BUTTON1) ? CurrentWaveValue : 0;
-		#else
-			/* Audio sample is ADC value scaled to fit the entire range */
-			AudioSample = ((SAMPLE_MAX_RANGE / ADC_MAX_RANGE) * ADC_GetResult());
-
-			#if defined(MICROPHONE_BIASED_TO_HALF_RAIL)
-			/* Microphone is biased to half rail voltage, subtract the bias from the sample value */
-			AudioSample -= (SAMPLE_MAX_RANGE / 2);
-			#endif
-		#endif
-
-		Audio_Device_WriteSample16(&Microphone_Audio_Interface, AudioSample);
-	}
-
-	Endpoint_SelectEndpoint(PrevEndpoint);
-}
-
-/** Event handler for the library USB Connection event. */
-void EVENT_USB_Device_Connect(void)
-{
-	LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
-
-	/* Sample reload timer initialization */
-	TIMSK0  = (1 << OCIE0A);
-	OCR0A   = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1);
-	TCCR0A  = (1 << WGM01);  // CTC mode
-	TCCR0B  = (1 << CS01);   // Fcpu/8 speed
-}
-
-/** Event handler for the library USB Disconnection event. */
-void EVENT_USB_Device_Disconnect(void)
-{
-	/* Stop the sample reload timer */
-	TCCR0B = 0;
-
-	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
-}
-
-/** Event handler for the library USB Configuration Changed event. */
-void EVENT_USB_Device_ConfigurationChanged(void)
-{
-	bool ConfigSuccess = true;
-
-	ConfigSuccess &= Audio_Device_ConfigureEndpoints(&Microphone_Audio_Interface);
-
-	LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR);
-}
-
-/** Event handler for the library USB Control Request reception event. */
-void EVENT_USB_Device_ControlRequest(void)
-{
-	Audio_Device_ProcessControlRequest(&Microphone_Audio_Interface);
-}
-
-/** Audio class driver callback for the setting and retrieval of streaming endpoint properties. This callback must be implemented
- *  in the user application to handle property manipulations on streaming audio endpoints.
- *
- *  When the DataLength parameter is NULL, this callback should only indicate whether the specified operation is valid for
- *  the given endpoint index, and should return as fast as possible. When non-NULL, this value may be altered for GET operations
- *  to indicate the size of the retrieved data.
- *
- *  \note The length of the retrieved data stored into the Data buffer on GET operations should not exceed the initial value
- *        of the \c DataLength parameter.
- *
- *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state.
- *  \param[in]     EndpointProperty    Property of the endpoint to get or set, a value from Audio_ClassRequests_t.
- *  \param[in]     EndpointAddress     Address of the streaming endpoint whose property is being referenced.
- *  \param[in]     EndpointControl     Parameter of the endpoint to get or set, a value from Audio_EndpointControls_t.
- *  \param[in,out] DataLength          For SET operations, the length of the parameter data to set. For GET operations, the maximum
- *                                     length of the retrieved data. When NULL, the function should return whether the given property
- *                                     and parameter is valid for the requested endpoint without reading or modifying the Data buffer.
- *  \param[in,out] Data                Pointer to a location where the parameter data is stored for SET operations, or where
- *                                     the retrieved data is to be stored for GET operations.
- *
- *  \return Boolean \c true if the property get/set was successful, \c false otherwise
- */
-bool CALLBACK_Audio_Device_GetSetEndpointProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
-                                                  const uint8_t EndpointProperty,
-                                                  const uint8_t EndpointAddress,
-                                                  const uint8_t EndpointControl,
-                                                  uint16_t* const DataLength,
-                                                  uint8_t* Data)
-{
-	/* Check the requested endpoint to see if a supported endpoint is being manipulated */
-	if (EndpointAddress == Microphone_Audio_Interface.Config.DataINEndpoint.Address)
-	{
-		/* Check the requested control to see if a supported control is being manipulated */
-		if (EndpointControl == AUDIO_EPCONTROL_SamplingFreq)
-		{
-			switch (EndpointProperty)
-			{
-				case AUDIO_REQ_SetCurrent:
-					/* Check if we are just testing for a valid property, or actually adjusting it */
-					if (DataLength != NULL)
-					{
-						/* Set the new sampling frequency to the value given by the host */
-						CurrentAudioSampleFrequency = (((uint32_t)Data[2] << 16) | ((uint32_t)Data[1] << 8) | (uint32_t)Data[0]);
-
-						/* Adjust sample reload timer to the new frequency */
-						OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1);
-					}
-
-					return true;
-				case AUDIO_REQ_GetCurrent:
-					/* Check if we are just testing for a valid property, or actually reading it */
-					if (DataLength != NULL)
-					{
-						*DataLength = 3;
-
-						Data[2] = (CurrentAudioSampleFrequency >> 16);
-						Data[1] = (CurrentAudioSampleFrequency >> 8);
-						Data[0] = (CurrentAudioSampleFrequency &  0xFF);
-					}
-
-					return true;
-			}
-		}
-	}
-
-	return false;
-}
-
-/** Audio class driver callback for the setting and retrieval of streaming interface properties. This callback must be implemented
- *  in the user application to handle property manipulations on streaming audio interfaces.
- *
- *  When the DataLength parameter is NULL, this callback should only indicate whether the specified operation is valid for
- *  the given entity and should return as fast as possible. When non-NULL, this value may be altered for GET operations
- *  to indicate the size of the retrieved data.
- *
- *  \note The length of the retrieved data stored into the Data buffer on GET operations should not exceed the initial value
- *        of the \c DataLength parameter.
- *
- *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state.
- *  \param[in]     Property            Property of the interface to get or set, a value from Audio_ClassRequests_t.
- *  \param[in]     EntityAddress       Address of the audio entity whose property is being referenced.
- *  \param[in]     Parameter           Parameter of the entity to get or set, specific to each type of entity (see USB Audio specification).
- *  \param[in,out] DataLength          For SET operations, the length of the parameter data to set. For GET operations, the maximum
- *                                     length of the retrieved data. When NULL, the function should return whether the given property
- *                                     and parameter is valid for the requested endpoint without reading or modifying the Data buffer.
- *  \param[in,out] Data                Pointer to a location where the parameter data is stored for SET operations, or where
- *                                     the retrieved data is to be stored for GET operations.
- *
- *  \return Boolean \c true if the property GET/SET was successful, \c false otherwise
- */
-bool CALLBACK_Audio_Device_GetSetInterfaceProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
-                                                   const uint8_t Property,
-                                                   const uint8_t EntityAddress,
-                                                   const uint16_t Parameter,
-                                                   uint16_t* const DataLength,
-                                                   uint8_t* Data)
-{
-	/* No audio interface entities in the device descriptor, thus no properties to get or set. */
-	return false;
-}

+ 0 - 94
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioInput/AudioInput.h

@@ -1,94 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2014.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaims all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  Header file for AudioInput.c.
- */
-
-#ifndef _AUDIO_INPUT_H_
-#define _AUDIO_INPUT_H_
-
-	/* Includes: */
-		#include <avr/io.h>
-		#include <avr/wdt.h>
-		#include <avr/power.h>
-		#include <avr/interrupt.h>
-
-		#include <LUFA/Drivers/Board/LEDs.h>
-		#include <LUFA/Drivers/Board/Buttons.h>
-		#include <LUFA/Drivers/Peripheral/ADC.h>
-		#include <LUFA/Drivers/USB/USB.h>
-		#include <LUFA/Platform/Platform.h>
-
-		#include "Descriptors.h"
-		#include "Config/AppConfig.h"
-
-	/* Macros: */
-		/** Maximum audio sample value for the microphone input. */
-		#define SAMPLE_MAX_RANGE          0xFFFF
-
-		/** Maximum ADC range for the microphone input. */
-		#define ADC_MAX_RANGE             0x3FF
-
-		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
-		#define LEDMASK_USB_NOTREADY      LEDS_LED1
-
-		/** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */
-		#define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)
-
-		/** LED mask for the library LED driver, to indicate that the USB interface is ready. */
-		#define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)
-
-		/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
-		#define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)
-
-	/* Function Prototypes: */
-		void SetupHardware(void);
-
-		void EVENT_USB_Device_Connect(void);
-		void EVENT_USB_Device_Disconnect(void);
-		void EVENT_USB_Device_ConfigurationChanged(void);
-		void EVENT_USB_Device_ControlRequest(void);
-
-		bool CALLBACK_Audio_Device_GetSetEndpointProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
-		                                                  const uint8_t EndpointProperty,
-		                                                  const uint8_t EndpointAddress,
-		                                                  const uint8_t EndpointControl,
-		                                                  uint16_t* const DataLength,
-		                                                  uint8_t* Data) ATTR_NON_NULL_PTR_ARG(1);
-		bool CALLBACK_Audio_Device_GetSetInterfaceProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
-		                                                   const uint8_t Property,
-		                                                   const uint8_t EntityAddress,
-		                                                   const uint16_t Parameter,
-		                                                   uint16_t* const DataLength,
-		                                                   uint8_t* Data);
-#endif
-

+ 0 - 92
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioInput/AudioInput.txt

@@ -1,92 +0,0 @@
-/** \file
- *
- *  This file contains special DoxyGen information for the generation of the main page and other special
- *  documentation pages. It is not a project source file.
- */
-
-/** \mainpage Audio Input Device Demo
- *
- *  \section Sec_Compat Demo Compatibility:
- *
- *  The following list indicates what microcontrollers are compatible with this demo.
- *
- *  \li Series 7 USB AVRs (AT90USBxxx7)
- *  \li Series 6 USB AVRs (AT90USBxxx6)
- *  \li Series 4 USB AVRs (ATMEGAxxU4)
- *
- *  \section Sec_Info USB Information:
- *
- *  The following table gives a rundown of the USB utilization of this demo.
- *
- *  <table>
- *   <tr>
- *    <td><b>USB Mode:</b></td>
- *    <td>Device</td>
- *   </tr>
- *   <tr>
- *    <td><b>USB Class:</b></td>
- *    <td>Audio Class</td>
- *   </tr>
- *   <tr>
- *    <td><b>USB Subclass:</b></td>
- *    <td>Standard Audio Device</td>
- *   </tr>
- *   <tr>
- *    <td><b>Relevant Standards:</b></td>
- *    <td>USBIF Audio 1.0 Class Specification \n
- *        USBIF Audio 1.0 Class Terminal Types Specification \n
- *        USBIF Audio 1.0 Data Formats Specification</td>
- *   </tr>
- *   <tr>
- *    <td><b>Supported USB Speeds:</b></td>
- *    <td>Full Speed Mode</td>
- *   </tr>
- *  </table>
- *
- *  \section Sec_Description Project Description:
- *
- *  Audio demonstration application. This gives a simple reference
- *  application for implementing a USB Audio Input device using the
- *  basic USB Audio 1.0 drivers in all modern OSes (i.e. no special drivers
- *  required).
- *
- *  On start-up the system will automatically enumerate and function as a
- *  USB microphone. By default, the demo will produce a square wave test tone
- *  when the board button is pressed. If USE_TEST_TONE is not defined in the
- *  project makefile, incoming audio from the ADC channel 1 will be sampled
- *  and sent to the host computer instead.
- *
- *  When in microphone mode, connect a microphone to the ADC channel 2.
- *
- *  Under Windows, if a driver request dialogue pops up, select the option
- *  to automatically install the appropriate drivers.
- *
- *  \section Sec_Options Project Options
- *
- *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.
- *
- *  <table>
- *   <tr>
- *    <th><b>Define Name:</b></th>
- *    <th><b>Location:</b></th>
- *    <th><b>Description:</b></th>
- *   </tr>
- *   <tr>
- *    <td>MIC_IN_ADC_CHANNEL</td>
- *    <td>AppConfig.h</td>
- *    <td>Sets the ADC channel used by the demo for the input audio samples from an attached microphone.</td>
- *   </tr>
- *   <tr>
- *    <td>USE_TEST_TONE</td>
- *    <td>AppConfig.h</td>
- *    <td>When defined, this alters the demo to produce a square wave test tone when the first board button is pressed
- *        instead of sampling the board microphone.</td>
- *   </tr>
- *   <tr>
- *    <td>MICROPHONE_BIASED_TO_HALF_RAIL</td>
- *    <td>AppConfig.h</td>
- *    <td>When defined, this alters the demo so that the half VCC bias of the microphone input is subtracted.</td>
- *   </tr>
- *  </table>
- */
-

+ 0 - 51
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioInput/Config/AppConfig.h

@@ -1,51 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2014.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaims all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *  \brief Application Configuration Header File
- *
- *  This is a header file which is be used to configure some of
- *  the application's compile time options, as an alternative to
- *  specifying the compile time constants supplied through a
- *  makefile or build system.
- *
- *  For information on what each token does, refer to the
- *  \ref Sec_Options section of the application documentation.
- */
-
-#ifndef _APP_CONFIG_H_
-#define _APP_CONFIG_H_
-
-	#define MIC_IN_ADC_CHANNEL               2
-
-	#define MICROPHONE_BIASED_TO_HALF_RAIL
-	#define USE_TEST_TONE
-
-#endif

+ 0 - 93
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioInput/Config/LUFAConfig.h

@@ -1,93 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2014.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaims all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *  \brief LUFA Library Configuration Header File
- *
- *  This header file is used to configure LUFA's compile time options,
- *  as an alternative to the compile time constants supplied through
- *  a makefile.
- *
- *  For information on what each token does, refer to the LUFA
- *  manual section "Summary of Compile Tokens".
- */
-
-#ifndef _LUFA_CONFIG_H_
-#define _LUFA_CONFIG_H_
-
-	#if (ARCH == ARCH_AVR8)
-
-		/* Non-USB Related Configuration Tokens: */
-//		#define DISABLE_TERMINAL_CODES
-
-		/* USB Class Driver Related Tokens: */
-//		#define HID_HOST_BOOT_PROTOCOL_ONLY
-//		#define HID_STATETABLE_STACK_DEPTH       {Insert Value Here}
-//		#define HID_USAGE_STACK_DEPTH            {Insert Value Here}
-//		#define HID_MAX_COLLECTIONS              {Insert Value Here}
-//		#define HID_MAX_REPORTITEMS              {Insert Value Here}
-//		#define HID_MAX_REPORT_IDS               {Insert Value Here}
-//		#define NO_CLASS_DRIVER_AUTOFLUSH
-
-		/* General USB Driver Related Tokens: */
-//		#define ORDERED_EP_CONFIG
-		#define USE_STATIC_OPTIONS               (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)
-		#define USB_DEVICE_ONLY
-//		#define USB_HOST_ONLY
-//		#define USB_STREAM_TIMEOUT_MS            {Insert Value Here}
-//		#define NO_LIMITED_CONTROLLER_CONNECT
-//		#define NO_SOF_EVENTS
-
-		/* USB Device Mode Driver Related Tokens: */
-//		#define USE_RAM_DESCRIPTORS
-		#define USE_FLASH_DESCRIPTORS
-//		#define USE_EEPROM_DESCRIPTORS
-//		#define NO_INTERNAL_SERIAL
-		#define FIXED_CONTROL_ENDPOINT_SIZE      8
-//		#define DEVICE_STATE_AS_GPIOR            {Insert Value Here}
-		#define FIXED_NUM_CONFIGURATIONS         1
-//		#define CONTROL_ONLY_DEVICE
-//		#define INTERRUPT_CONTROL_ENDPOINT
-//		#define NO_DEVICE_REMOTE_WAKEUP
-//		#define NO_DEVICE_SELF_POWER
-
-		/* USB Host Mode Driver Related Tokens: */
-//		#define HOST_STATE_AS_GPIOR              {Insert Value Here}
-//		#define USB_HOST_TIMEOUT_MS              {Insert Value Here}
-//		#define HOST_DEVICE_SETTLE_DELAY_MS	     {Insert Value Here}
-//		#define NO_AUTO_VBUS_MANAGEMENT
-//		#define INVERTED_VBUS_ENABLE_LINE
-
-	#else
-
-		#error Unsupported architecture for this LUFA configuration file.
-
-	#endif
-#endif

+ 0 - 312
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioInput/Descriptors.c

@@ -1,312 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2014.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaims all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
- *  computer-readable structures which the host requests upon device enumeration, to determine
- *  the device's capabilities and functions.
- */
-
-#include "Descriptors.h"
-
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
- *  device characteristics, including the supported USB version, control endpoint size and the
- *  number of device configurations. The descriptor is read out by the USB host when the enumeration
- *  process begins.
- */
-const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
-{
-	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
-
-	.USBSpecification       = VERSION_BCD(2,0,0),
-	.Class                  = USB_CSCP_NoDeviceClass,
-	.SubClass               = USB_CSCP_NoDeviceSubclass,
-	.Protocol               = USB_CSCP_NoDeviceProtocol,
-
-	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
-
-	.VendorID               = 0x03EB,
-	.ProductID              = 0x2047,
-	.ReleaseNumber          = VERSION_BCD(0,0,2),
-
-	.ManufacturerStrIndex   = STRING_ID_Manufacturer,
-	.ProductStrIndex        = STRING_ID_Product,
-	.SerialNumStrIndex      = NO_DESCRIPTOR,
-
-	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
-};
-
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage
- *  of the device in one of its supported configurations, including information about any device interfaces
- *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
- *  a configuration so that the host may correctly communicate with the USB device.
- */
-const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
-{
-	.Config =
-		{
-			.Header                   = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
-
-			.TotalConfigurationSize   = sizeof(USB_Descriptor_Configuration_t),
-			.TotalInterfaces          = 2,
-
-			.ConfigurationNumber      = 1,
-			.ConfigurationStrIndex    = NO_DESCRIPTOR,
-
-			.ConfigAttributes         = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED),
-
-			.MaxPowerConsumption      = USB_CONFIG_POWER_MA(100)
-		},
-
-	.Audio_ControlInterface =
-		{
-			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber          = INTERFACE_ID_AudioControl,
-			.AlternateSetting         = 0,
-
-			.TotalEndpoints           = 0,
-
-			.Class                    = AUDIO_CSCP_AudioClass,
-			.SubClass                 = AUDIO_CSCP_ControlSubclass,
-			.Protocol                 = AUDIO_CSCP_ControlProtocol,
-
-			.InterfaceStrIndex        = NO_DESCRIPTOR
-		},
-
-	.Audio_ControlInterface_SPC =
-		{
-			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_Interface_AC_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_Header,
-
-			.ACSpecification          = VERSION_BCD(1,0,0),
-			.TotalLength              = (sizeof(USB_Audio_Descriptor_Interface_AC_t) +
-			                             sizeof(USB_Audio_Descriptor_InputTerminal_t) +
-			                             sizeof(USB_Audio_Descriptor_OutputTerminal_t)),
-
-			.InCollection             = 1,
-			.InterfaceNumber          = INTERFACE_ID_AudioStream,
-		},
-
-	.Audio_InputTerminal =
-		{
-			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_InputTerminal_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_InputTerminal,
-
-			.TerminalID               = 0x01,
-			.TerminalType             = AUDIO_TERMINAL_IN_MIC,
-			.AssociatedOutputTerminal = 0x00,
-
-			.TotalChannels            = 1,
-			.ChannelConfig            = 0,
-
-			.ChannelStrIndex          = NO_DESCRIPTOR,
-			.TerminalStrIndex         = NO_DESCRIPTOR
-		},
-
-	.Audio_OutputTerminal =
-		{
-			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_OutputTerminal_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_OutputTerminal,
-
-			.TerminalID               = 0x02,
-			.TerminalType             = AUDIO_TERMINAL_STREAMING,
-			.AssociatedInputTerminal  = 0x00,
-
-			.SourceID                 = 0x01,
-
-			.TerminalStrIndex         = NO_DESCRIPTOR
-		},
-
-	.Audio_StreamInterface_Alt0 =
-		{
-			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber          = INTERFACE_ID_AudioStream,
-			.AlternateSetting         = 0,
-
-			.TotalEndpoints           = 0,
-
-			.Class                    = AUDIO_CSCP_AudioClass,
-			.SubClass                 = AUDIO_CSCP_AudioStreamingSubclass,
-			.Protocol                 = AUDIO_CSCP_StreamingProtocol,
-
-			.InterfaceStrIndex        = NO_DESCRIPTOR
-		},
-
-	.Audio_StreamInterface_Alt1 =
-		{
-			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber          = INTERFACE_ID_AudioStream,
-			.AlternateSetting         = 1,
-
-			.TotalEndpoints           = 1,
-
-			.Class                    = AUDIO_CSCP_AudioClass,
-			.SubClass                 = AUDIO_CSCP_AudioStreamingSubclass,
-			.Protocol                 = AUDIO_CSCP_StreamingProtocol,
-
-			.InterfaceStrIndex        = NO_DESCRIPTOR
-		},
-
-	.Audio_StreamInterface_SPC =
-		{
-			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_Interface_AS_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_General,
-
-			.TerminalLink             = 0x02,
-
-			.FrameDelay               = 1,
-			.AudioFormat              = 0x0001
-		},
-
-	.Audio_AudioFormat =
-		{
-			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_Format_t) +
-			                                     sizeof(ConfigurationDescriptor.Audio_AudioFormatSampleRates),
-			                             .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_FormatType,
-
-			.FormatType               = 0x01,
-			.Channels                 = 0x01,
-
-			.SubFrameSize             = 0x02,
-			.BitResolution            = 16,
-
-			.TotalDiscreteSampleRates = (sizeof(ConfigurationDescriptor.Audio_AudioFormatSampleRates) / sizeof(USB_Audio_SampleFreq_t))
-		},
-
-	.Audio_AudioFormatSampleRates =
-		{
-			AUDIO_SAMPLE_FREQ(8000),
-			AUDIO_SAMPLE_FREQ(11025),
-			AUDIO_SAMPLE_FREQ(22050),
-			AUDIO_SAMPLE_FREQ(44100),
-			AUDIO_SAMPLE_FREQ(48000),
-		},
-
-	.Audio_StreamEndpoint =
-		{
-			.Endpoint =
-				{
-					.Header              = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint},
-
-					.EndpointAddress     = AUDIO_STREAM_EPADDR,
-					.Attributes          = (EP_TYPE_ISOCHRONOUS | ENDPOINT_ATTR_SYNC | ENDPOINT_USAGE_DATA),
-					.EndpointSize        = AUDIO_STREAM_EPSIZE,
-					.PollingIntervalMS   = 0x01
-				},
-
-			.Refresh                  = 0,
-			.SyncEndpointNumber       = 0
-		},
-
-	.Audio_StreamEndpoint_SPC =
-		{
-			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Spc_t), .Type = DTYPE_CSEndpoint},
-			.Subtype                  = AUDIO_DSUBTYPE_CSEndpoint_General,
-
-			.Attributes               = (AUDIO_EP_ACCEPTS_SMALL_PACKETS | AUDIO_EP_SAMPLE_FREQ_CONTROL),
-
-			.LockDelayUnits           = 0x00,
-			.LockDelay                = 0x0000
-		}
-};
-
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
- *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate
- *  via the language ID table available at USB.org what languages the device supports for its string descriptors.
- */
-const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(LANGUAGE_ID_ENG);
-
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable
- *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- *  Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(L"Dean Camera");
-
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
- *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- *  Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Audio In Demo");
-
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
- *  documentation) by the application code so that the address and size of a requested descriptor can be given
- *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
- *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
- *  USB host.
- */
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
-                                    const uint8_t wIndex,
-                                    const void** const DescriptorAddress)
-{
-	const uint8_t  DescriptorType   = (wValue >> 8);
-	const uint8_t  DescriptorNumber = (wValue & 0xFF);
-
-	const void* Address = NULL;
-	uint16_t    Size    = NO_DESCRIPTOR;
-
-	switch (DescriptorType)
-	{
-		case DTYPE_Device:
-			Address = &DeviceDescriptor;
-			Size    = sizeof(USB_Descriptor_Device_t);
-			break;
-		case DTYPE_Configuration:
-			Address = &ConfigurationDescriptor;
-			Size    = sizeof(USB_Descriptor_Configuration_t);
-			break;
-		case DTYPE_String:
-			switch (DescriptorNumber)
-			{
-				case STRING_ID_Language:
-					Address = &LanguageString;
-					Size    = pgm_read_byte(&LanguageString.Header.Size);
-					break;
-				case STRING_ID_Manufacturer:
-					Address = &ManufacturerString;
-					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
-					break;
-				case STRING_ID_Product:
-					Address = &ProductString;
-					Size    = pgm_read_byte(&ProductString.Header.Size);
-					break;
-			}
-
-			break;
-	}
-
-	*DescriptorAddress = Address;
-	return Size;
-}
-

+ 0 - 106
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioInput/Descriptors.h

@@ -1,106 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2014.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaims all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  Header file for Descriptors.c.
- */
-
-#ifndef _DESCRIPTORS_H_
-#define _DESCRIPTORS_H_
-
-	/* Includes: */
-		#include <LUFA/Drivers/USB/USB.h>
-
-		#include <avr/pgmspace.h>
-
-		#include "Config/AppConfig.h"
-
-	/* Macros: */
-		/** Endpoint address of the Audio isochronous streaming data IN endpoint. */
-		#define AUDIO_STREAM_EPADDR           (ENDPOINT_DIR_IN | 1)
-
-		/** Endpoint size in bytes of the Audio isochronous streaming data endpoint. */
-		#define AUDIO_STREAM_EPSIZE           256
-
-	/* Type Defines: */
-		/** Type define for the device configuration descriptor structure. This must be defined in the
-		 *  application code, as the configuration descriptor contains several sub-descriptors which
-		 *  vary between devices, and which describe the device's usage to the host.
-		 */
-		typedef struct
-		{
-			USB_Descriptor_Configuration_Header_t     Config;
-
-			// Audio Control Interface
-			USB_Descriptor_Interface_t                Audio_ControlInterface;
-			USB_Audio_Descriptor_Interface_AC_t       Audio_ControlInterface_SPC;
-			USB_Audio_Descriptor_InputTerminal_t      Audio_InputTerminal;
-			USB_Audio_Descriptor_OutputTerminal_t     Audio_OutputTerminal;
-
-			// Audio Streaming Interface
-			USB_Descriptor_Interface_t                Audio_StreamInterface_Alt0;
-			USB_Descriptor_Interface_t                Audio_StreamInterface_Alt1;
-			USB_Audio_Descriptor_Interface_AS_t       Audio_StreamInterface_SPC;
-			USB_Audio_Descriptor_Format_t             Audio_AudioFormat;
-			USB_Audio_SampleFreq_t                    Audio_AudioFormatSampleRates[5];
-			USB_Audio_Descriptor_StreamEndpoint_Std_t Audio_StreamEndpoint;
-			USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC;
-		} USB_Descriptor_Configuration_t;
-
-		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
-		 *  should have a unique ID index associated with it, which can be used to refer to the
-		 *  interface from other descriptors.
-		 */
-		enum InterfaceDescriptors_t
-		{
-			INTERFACE_ID_AudioControl = 0, /**< Audio control interface descriptor ID */
-			INTERFACE_ID_AudioStream  = 1, /**< Audio stream interface descriptor ID */
-		};
-
-		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
-		 *  have a unique ID index associated with it, which can be used to refer to the string from
-		 *  other descriptors.
-		 */
-		enum StringDescriptors_t
-		{
-			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
-			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
-			STRING_ID_Product      = 2, /**< Product string ID */
-		};
-
-	/* Function Prototypes: */
-		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
-		                                    const uint8_t wIndex,
-		                                    const void** const DescriptorAddress)
-		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
-
-#endif
-

+ 0 - 52
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioInput/asf.xml

@@ -1,52 +0,0 @@
-<asf xmlversion="1.0">
-	<project caption="Audio Input Device Demo (Class Driver APIs)" id="lufa.demos.device.class.audio_input.example.avr8">
-		<require idref="lufa.demos.device.class.audio_input"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="at90usb1287"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-	</project>
-
-	<module type="application" id="lufa.demos.device.class.audio_input" caption="Audio Input Device Demo (Class Driver APIs)">
-		<info type="description" value="summary">
-		Audio 1.0 Input device demo, implementing a basic USB microphone. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack.
-		</info>
-
- 		<info type="gui-flag" value="move-to-root"/>
-
-		<info type="keyword" value="Technology">
-			<keyword value="Class Driver APIs"/>
-			<keyword value="USB Device"/>
-			<keyword value="Audio Class"/>
-		</info>
-
-		<device-support-alias value="lufa_avr8"/>
-		<device-support-alias value="lufa_xmega"/>
-		<device-support-alias value="lufa_uc3"/>
-
-		<build type="distribute" subtype="user-file" value="doxyfile"/>
-		<build type="distribute" subtype="user-file" value="AudioInput.txt"/>
-
-		<build type="c-source" value="AudioInput.c"/>
-		<build type="c-source" value="Descriptors.c"/>
-		<build type="header-file" value="AudioInput.h"/>
-		<build type="header-file" value="Descriptors.h"/>
-
-		<build type="module-config" subtype="path" value="Config"/>
-		<build type="module-config" subtype="required-header-file" value="AppConfig.h"/>
-		<build type="header-file" value="Config/AppConfig.h"/>
-		<build type="header-file" value="Config/LUFAConfig.h"/>
-
-		<require idref="lufa.common"/>
-		<require idref="lufa.platform"/>
-		<require idref="lufa.drivers.usb"/>
-		<require idref="lufa.drivers.peripheral.adc"/>
-		<require idref="lufa.drivers.board"/>
-		<require idref="lufa.drivers.board.leds"/>
-		<require idref="lufa.drivers.board.buttons"/>
-	</module>
-</asf>

+ 0 - 2364
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioInput/doxyfile

@@ -1,2364 +0,0 @@
-# Doxyfile 1.8.8
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project.
-#
-# All text after a double hash (##) is considered a comment and is placed in
-# front of the TAG it is preceding.
-#
-# All text after a single hash (#) is considered a comment and will be ignored.
-# The format is:
-# TAG = value [value, ...]
-# For lists, items can also be appended using:
-# TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (\" \").
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# This tag specifies the encoding used for all characters in the config file
-# that follow. The default is UTF-8 which is also the encoding used for all text
-# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
-# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
-# for the list of possible encodings.
-# The default value is: UTF-8.
-
-DOXYFILE_ENCODING      = UTF-8
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
-# double-quotes, unless you are using Doxywizard) that should identify the
-# project for which the documentation is generated. This name is used in the
-# title of most generated pages and in a few other places.
-# The default value is: My Project.
-
-PROJECT_NAME           = "LUFA Library - Audio Input Device Demo"
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
-# could be handy for archiving the generated documentation or if some version
-# control system is used.
-
-PROJECT_NUMBER         =
-
-# Using the PROJECT_BRIEF tag one can provide an optional one line description
-# for a project that appears at the top of each page and should give viewer a
-# quick idea about the purpose of the project. Keep the description short.
-
-PROJECT_BRIEF          =
-
-# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
-# the documentation. The maximum height of the logo should not exceed 55 pixels
-# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
-# to the output directory.
-
-PROJECT_LOGO           =
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
-# into which the generated documentation will be written. If a relative path is
-# entered, it will be relative to the location where doxygen was started. If
-# left blank the current directory will be used.
-
-OUTPUT_DIRECTORY       = ./Documentation/
-
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
-# directories (in 2 levels) under the output directory of each output format and
-# will distribute the generated files over these directories. Enabling this
-# option can be useful when feeding doxygen a huge amount of source files, where
-# putting all generated files in the same directory would otherwise causes
-# performance problems for the file system.
-# The default value is: NO.
-
-CREATE_SUBDIRS         = NO
-
-# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
-# characters to appear in the names of generated files. If set to NO, non-ASCII
-# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
-# U+3044.
-# The default value is: NO.
-
-ALLOW_UNICODE_NAMES    = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
-# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
-# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
-# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
-# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
-# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
-# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
-# Ukrainian and Vietnamese.
-# The default value is: English.
-
-OUTPUT_LANGUAGE        = English
-
-# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
-# descriptions after the members that are listed in the file and class
-# documentation (similar to Javadoc). Set to NO to disable this.
-# The default value is: YES.
-
-BRIEF_MEMBER_DESC      = YES
-
-# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
-# description of a member or function before the detailed description
-#
-# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-# The default value is: YES.
-
-REPEAT_BRIEF           = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator that is
-# used to form the text in various listings. Each string in this list, if found
-# as the leading text of the brief description, will be stripped from the text
-# and the result, after processing the whole list, is used as the annotated
-# text. Otherwise, the brief description is used as-is. If left blank, the
-# following values are used ($name is automatically replaced with the name of
-# the entity):The $name class, The $name widget, The $name file, is, provides,
-# specifies, contains, represents, a, an and the.
-
-ABBREVIATE_BRIEF       = "The $name class" \
-                         "The $name widget" \
-                         "The $name file" \
-                         is \
-                         provides \
-                         specifies \
-                         contains \
-                         represents \
-                         a \
-                         an \
-                         the
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# doxygen will generate a detailed section even if there is only a brief
-# description.
-# The default value is: NO.
-
-ALWAYS_DETAILED_SEC    = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
-# operators of the base classes will not be shown.
-# The default value is: NO.
-
-INLINE_INHERITED_MEMB  = NO
-
-# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
-# before files name in the file list and in the header files. If set to NO the
-# shortest path that makes the file name unique will be used
-# The default value is: YES.
-
-FULL_PATH_NAMES        = YES
-
-# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
-# Stripping is only done if one of the specified strings matches the left-hand
-# part of the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the path to
-# strip.
-#
-# Note that you can specify absolute paths here, but also relative paths, which
-# will be relative from the directory where doxygen is started.
-# This tag requires that the tag FULL_PATH_NAMES is set to YES.
-
-STRIP_FROM_PATH        =
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
-# path mentioned in the documentation of a class, which tells the reader which
-# header file to include in order to use a class. If left blank only the name of
-# the header file containing the class definition is used. Otherwise one should
-# specify the list of include paths that are normally passed to the compiler
-# using the -I flag.
-
-STRIP_FROM_INC_PATH    =
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
-# less readable) file names. This can be useful is your file systems doesn't
-# support long names like on DOS, Mac, or CD-ROM.
-# The default value is: NO.
-
-SHORT_NAMES            = YES
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
-# first line (until the first dot) of a Javadoc-style comment as the brief
-# description. If set to NO, the Javadoc-style will behave just like regular Qt-
-# style comments (thus requiring an explicit @brief command for a brief
-# description.)
-# The default value is: NO.
-
-JAVADOC_AUTOBRIEF      = NO
-
-# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
-# line (until the first dot) of a Qt-style comment as the brief description. If
-# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
-# requiring an explicit \brief command for a brief description.)
-# The default value is: NO.
-
-QT_AUTOBRIEF           = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
-# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
-# a brief description. This used to be the default behavior. The new default is
-# to treat a multi-line C++ comment block as a detailed description. Set this
-# tag to YES if you prefer the old behavior instead.
-#
-# Note that setting this tag to YES also means that rational rose comments are
-# not recognized any more.
-# The default value is: NO.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
-# documentation from any documented member that it re-implements.
-# The default value is: YES.
-
-INHERIT_DOCS           = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
-# new page for each member. If set to NO, the documentation of a member will be
-# part of the file/class/namespace that contains it.
-# The default value is: NO.
-
-SEPARATE_MEMBER_PAGES  = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
-# uses this value to replace tabs by spaces in code fragments.
-# Minimum value: 1, maximum value: 16, default value: 4.
-
-TAB_SIZE               = 4
-
-# This tag can be used to specify a number of aliases that act as commands in
-# the documentation. An alias has the form:
-# name=value
-# For example adding
-# "sideeffect=@par Side Effects:\n"
-# will allow you to put the command \sideeffect (or @sideeffect) in the
-# documentation, which will result in a user-defined paragraph with heading
-# "Side Effects:". You can put \n's in the value part of an alias to insert
-# newlines.
-
-ALIASES                =
-
-# This tag can be used to specify a number of word-keyword mappings (TCL only).
-# A mapping has the form "name=value". For example adding "class=itcl::class"
-# will allow you to use the command class in the itcl::class meaning.
-
-TCL_SUBST              =
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
-# only. Doxygen will then generate output that is more tailored for C. For
-# instance, some of the names that are used will be different. The list of all
-# members will be omitted, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_FOR_C  = YES
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
-# Python sources only. Doxygen will then generate output that is more tailored
-# for that language. For instance, namespaces will be presented as packages,
-# qualified scopes will look different, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_JAVA   = NO
-
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
-# sources. Doxygen will then generate output that is tailored for Fortran.
-# The default value is: NO.
-
-OPTIMIZE_FOR_FORTRAN   = NO
-
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
-# sources. Doxygen will then generate output that is tailored for VHDL.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_VHDL   = NO
-
-# Doxygen selects the parser to use depending on the extension of the files it
-# parses. With this tag you can assign which parser to use for a given
-# extension. Doxygen has a built-in mapping, but you can override or extend it
-# using this tag. The format is ext=language, where ext is a file extension, and
-# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
-# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
-# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
-# Fortran. In the later case the parser tries to guess whether the code is fixed
-# or free formatted code, this is the default for Fortran type files), VHDL. For
-# instance to make doxygen treat .inc files as Fortran files (default is PHP),
-# and .f files as C (default is Fortran), use: inc=Fortran f=C.
-#
-# Note For files without extension you can use no_extension as a placeholder.
-#
-# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
-# the files are not read by doxygen.
-
-EXTENSION_MAPPING      =
-
-# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
-# according to the Markdown format, which allows for more readable
-# documentation. See http://daringfireball.net/projects/markdown/ for details.
-# The output of markdown processing is further processed by doxygen, so you can
-# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
-# case of backward compatibilities issues.
-# The default value is: YES.
-
-MARKDOWN_SUPPORT       = NO
-
-# When enabled doxygen tries to link words that correspond to documented
-# classes, or namespaces to their corresponding documentation. Such a link can
-# be prevented in individual cases by by putting a % sign in front of the word
-# or globally by setting AUTOLINK_SUPPORT to NO.
-# The default value is: YES.
-
-AUTOLINK_SUPPORT       = YES
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
-# to include (a tag file for) the STL sources as input, then you should set this
-# tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string);
-# versus func(std::string) {}). This also make the inheritance and collaboration
-# diagrams that involve STL classes more complete and accurate.
-# The default value is: NO.
-
-BUILTIN_STL_SUPPORT    = NO
-
-# If you use Microsoft's C++/CLI language, you should set this option to YES to
-# enable parsing support.
-# The default value is: NO.
-
-CPP_CLI_SUPPORT        = NO
-
-# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
-# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
-# will parse them like normal C++ but will assume all classes use public instead
-# of private inheritance when no explicit protection keyword is present.
-# The default value is: NO.
-
-SIP_SUPPORT            = NO
-
-# For Microsoft's IDL there are propget and propput attributes to indicate
-# getter and setter methods for a property. Setting this option to YES will make
-# doxygen to replace the get and set methods by a property in the documentation.
-# This will only work if the methods are indeed getting or setting a simple
-# type. If this is not the case, or you want to show the methods anyway, you
-# should set this option to NO.
-# The default value is: YES.
-
-IDL_PROPERTY_SUPPORT   = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-# The default value is: NO.
-
-DISTRIBUTE_GROUP_DOC   = NO
-
-# Set the SUBGROUPING tag to YES to allow class member groups of the same type
-# (for instance a group of public functions) to be put as a subgroup of that
-# type (e.g. under the Public Functions section). Set it to NO to prevent
-# subgrouping. Alternatively, this can be done per class using the
-# \nosubgrouping command.
-# The default value is: YES.
-
-SUBGROUPING            = YES
-
-# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
-# are shown inside the group in which they are included (e.g. using \ingroup)
-# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
-# and RTF).
-#
-# Note that this feature does not work in combination with
-# SEPARATE_MEMBER_PAGES.
-# The default value is: NO.
-
-INLINE_GROUPED_CLASSES = NO
-
-# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
-# with only public data fields or simple typedef fields will be shown inline in
-# the documentation of the scope in which they are defined (i.e. file,
-# namespace, or group documentation), provided this scope is documented. If set
-# to NO, structs, classes, and unions are shown on a separate page (for HTML and
-# Man pages) or section (for LaTeX and RTF).
-# The default value is: NO.
-
-INLINE_SIMPLE_STRUCTS  = NO
-
-# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
-# enum is documented as struct, union, or enum with the name of the typedef. So
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
-# with name TypeT. When disabled the typedef will appear as a member of a file,
-# namespace, or class. And the struct will be named TypeS. This can typically be
-# useful for C code in case the coding convention dictates that all compound
-# types are typedef'ed and only the typedef is referenced, never the tag name.
-# The default value is: NO.
-
-TYPEDEF_HIDES_STRUCT   = NO
-
-# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
-# cache is used to resolve symbols given their name and scope. Since this can be
-# an expensive process and often the same symbol appears multiple times in the
-# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
-# doxygen will become slower. If the cache is too large, memory is wasted. The
-# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
-# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
-# symbols. At the end of a run doxygen will report the cache usage and suggest
-# the optimal cache size from a speed point of view.
-# Minimum value: 0, maximum value: 9, default value: 0.
-
-LOOKUP_CACHE_SIZE      = 0
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available. Private
-# class members and static file members will be hidden unless the
-# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
-# Note: This will also disable the warnings about undocumented members that are
-# normally produced when WARNINGS is set to YES.
-# The default value is: NO.
-
-EXTRACT_ALL            = YES
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
-# be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PRIVATE        = YES
-
-# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
-# scope will be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PACKAGE        = NO
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file will be
-# included in the documentation.
-# The default value is: NO.
-
-EXTRACT_STATIC         = YES
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
-# locally in source files will be included in the documentation. If set to NO
-# only classes defined in header files are included. Does not have any effect
-# for Java sources.
-# The default value is: YES.
-
-EXTRACT_LOCAL_CLASSES  = YES
-
-# This flag is only useful for Objective-C code. When set to YES local methods,
-# which are defined in the implementation section but not in the interface are
-# included in the documentation. If set to NO only methods in the interface are
-# included.
-# The default value is: NO.
-
-EXTRACT_LOCAL_METHODS  = NO
-
-# If this flag is set to YES, the members of anonymous namespaces will be
-# extracted and appear in the documentation as a namespace called
-# 'anonymous_namespace{file}', where file will be replaced with the base name of
-# the file that contains the anonymous namespace. By default anonymous namespace
-# are hidden.
-# The default value is: NO.
-
-EXTRACT_ANON_NSPACES   = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
-# undocumented members inside documented classes or files. If set to NO these
-# members will be included in the various overviews, but no documentation
-# section is generated. This option has no effect if EXTRACT_ALL is enabled.
-# The default value is: NO.
-
-HIDE_UNDOC_MEMBERS     = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy. If set
-# to NO these classes will be included in the various overviews. This option has
-# no effect if EXTRACT_ALL is enabled.
-# The default value is: NO.
-
-HIDE_UNDOC_CLASSES     = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
-# (class|struct|union) declarations. If set to NO these declarations will be
-# included in the documentation.
-# The default value is: NO.
-
-HIDE_FRIEND_COMPOUNDS  = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
-# documentation blocks found inside the body of a function. If set to NO these
-# blocks will be appended to the function's detailed documentation block.
-# The default value is: NO.
-
-HIDE_IN_BODY_DOCS      = NO
-
-# The INTERNAL_DOCS tag determines if documentation that is typed after a
-# \internal command is included. If the tag is set to NO then the documentation
-# will be excluded. Set it to YES to include the internal documentation.
-# The default value is: NO.
-
-INTERNAL_DOCS          = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
-# names in lower-case letters. If set to YES upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
-# and Mac users are advised to set this option to NO.
-# The default value is: system dependent.
-
-CASE_SENSE_NAMES       = NO
-
-# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
-# their full class and namespace scopes in the documentation. If set to YES the
-# scope will be hidden.
-# The default value is: NO.
-
-HIDE_SCOPE_NAMES       = NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
-# the files that are included by a file in the documentation of that file.
-# The default value is: YES.
-
-SHOW_INCLUDE_FILES     = YES
-
-# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
-# grouped member an include statement to the documentation, telling the reader
-# which file to include in order to use the member.
-# The default value is: NO.
-
-SHOW_GROUPED_MEMB_INC  = NO
-
-# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
-# files with double quotes in the documentation rather than with sharp brackets.
-# The default value is: NO.
-
-FORCE_LOCAL_INCLUDES   = NO
-
-# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
-# documentation for inline members.
-# The default value is: YES.
-
-INLINE_INFO            = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
-# (detailed) documentation of file and class members alphabetically by member
-# name. If set to NO the members will appear in declaration order.
-# The default value is: YES.
-
-SORT_MEMBER_DOCS       = YES
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
-# descriptions of file, namespace and class members alphabetically by member
-# name. If set to NO the members will appear in declaration order. Note that
-# this will also influence the order of the classes in the class list.
-# The default value is: NO.
-
-SORT_BRIEF_DOCS        = NO
-
-# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
-# (brief and detailed) documentation of class members so that constructors and
-# destructors are listed first. If set to NO the constructors will appear in the
-# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
-# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
-# member documentation.
-# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
-# detailed member documentation.
-# The default value is: NO.
-
-SORT_MEMBERS_CTORS_1ST = NO
-
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
-# of group names into alphabetical order. If set to NO the group names will
-# appear in their defined order.
-# The default value is: NO.
-
-SORT_GROUP_NAMES       = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
-# fully-qualified names, including namespaces. If set to NO, the class list will
-# be sorted only by class name, not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the alphabetical
-# list.
-# The default value is: NO.
-
-SORT_BY_SCOPE_NAME     = NO
-
-# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
-# type resolution of all parameters of a function it will reject a match between
-# the prototype and the implementation of a member function even if there is
-# only one candidate or it is obvious which candidate to choose by doing a
-# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
-# accept a match between prototype and implementation in such cases.
-# The default value is: NO.
-
-STRICT_PROTO_MATCHING  = NO
-
-# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the
-# todo list. This list is created by putting \todo commands in the
-# documentation.
-# The default value is: YES.
-
-GENERATE_TODOLIST      = NO
-
-# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the
-# test list. This list is created by putting \test commands in the
-# documentation.
-# The default value is: YES.
-
-GENERATE_TESTLIST      = NO
-
-# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
-# list. This list is created by putting \bug commands in the documentation.
-# The default value is: YES.
-
-GENERATE_BUGLIST       = NO
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
-# the deprecated list. This list is created by putting \deprecated commands in
-# the documentation.
-# The default value is: YES.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional documentation
-# sections, marked by \if <section_label> ... \endif and \cond <section_label>
-# ... \endcond blocks.
-
-ENABLED_SECTIONS       =
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
-# initial value of a variable or macro / define can have for it to appear in the
-# documentation. If the initializer consists of more lines than specified here
-# it will be hidden. Use a value of 0 to hide initializers completely. The
-# appearance of the value of individual variables and macros / defines can be
-# controlled using \showinitializer or \hideinitializer command in the
-# documentation regardless of this setting.
-# Minimum value: 0, maximum value: 10000, default value: 30.
-
-MAX_INITIALIZER_LINES  = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
-# the bottom of the documentation of classes and structs. If set to YES the list
-# will mention the files that were used to generate the documentation.
-# The default value is: YES.
-
-SHOW_USED_FILES        = YES
-
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
-# will remove the Files entry from the Quick Index and from the Folder Tree View
-# (if specified).
-# The default value is: YES.
-
-SHOW_FILES             = YES
-
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
-# page. This will remove the Namespaces entry from the Quick Index and from the
-# Folder Tree View (if specified).
-# The default value is: YES.
-
-SHOW_NAMESPACES        = YES
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from
-# the version control system). Doxygen will invoke the program by executing (via
-# popen()) the command command input-file, where command is the value of the
-# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
-# by doxygen. Whatever the program writes to standard output is used as the file
-# version. For an example see the documentation.
-
-FILE_VERSION_FILTER    =
-
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
-# by doxygen. The layout file controls the global structure of the generated
-# output files in an output format independent way. To create the layout file
-# that represents doxygen's defaults, run doxygen with the -l option. You can
-# optionally specify a file name after the option, if omitted DoxygenLayout.xml
-# will be used as the name of the layout file.
-#
-# Note that if you run doxygen from a directory containing a file called
-# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
-# tag is left empty.
-
-LAYOUT_FILE            =
-
-# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
-# the reference definitions. This must be a list of .bib files. The .bib
-# extension is automatically appended if omitted. This requires the bibtex tool
-# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
-# For LaTeX the style of the bibliography can be controlled using
-# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
-# search path. See also \cite for info how to create references.
-
-CITE_BIB_FILES         =
-
-#---------------------------------------------------------------------------
-# Configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated to
-# standard output by doxygen. If QUIET is set to YES this implies that the
-# messages are off.
-# The default value is: NO.
-
-QUIET                  = YES
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
-# this implies that the warnings are on.
-#
-# Tip: Turn warnings on while writing the documentation.
-# The default value is: YES.
-
-WARNINGS               = YES
-
-# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
-# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
-# will automatically be disabled.
-# The default value is: YES.
-
-WARN_IF_UNDOCUMENTED   = YES
-
-# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some parameters
-# in a documented function, or documenting parameters that don't exist or using
-# markup commands wrongly.
-# The default value is: YES.
-
-WARN_IF_DOC_ERROR      = YES
-
-# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
-# are documented, but have no documentation for their parameters or return
-# value. If set to NO doxygen will only warn about wrong or incomplete parameter
-# documentation, but not about the absence of documentation.
-# The default value is: NO.
-
-WARN_NO_PARAMDOC       = YES
-
-# The WARN_FORMAT tag determines the format of the warning messages that doxygen
-# can produce. The string should contain the $file, $line, and $text tags, which
-# will be replaced by the file and line number from which the warning originated
-# and the warning text. Optionally the format may contain $version, which will
-# be replaced by the version of the file (if it could be obtained via
-# FILE_VERSION_FILTER)
-# The default value is: $file:$line: $text.
-
-WARN_FORMAT            = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning and error
-# messages should be written. If left blank the output is written to standard
-# error (stderr).
-
-WARN_LOGFILE           =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag is used to specify the files and/or directories that contain
-# documented source files. You may enter file names like myfile.cpp or
-# directories like /usr/src/myproject. Separate the files or directories with
-# spaces.
-# Note: If this tag is empty the current directory is searched.
-
-INPUT                  = ./
-
-# This tag can be used to specify the character encoding of the source files
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
-# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
-# documentation (see: http://www.gnu.org/software/libiconv) for the list of
-# possible encodings.
-# The default value is: UTF-8.
-
-INPUT_ENCODING         = UTF-8
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
-# *.h) to filter out the source-files in the directories. If left blank the
-# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
-# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
-# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
-# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
-# *.qsf, *.as and *.js.
-
-FILE_PATTERNS          = *.h \
-                         *.c \
-                         *.txt
-
-# The RECURSIVE tag can be used to specify whether or not subdirectories should
-# be searched for input files as well.
-# The default value is: NO.
-
-RECURSIVE              = YES
-
-# The EXCLUDE tag can be used to specify files and/or directories that should be
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-#
-# Note that relative paths are relative to the directory from which doxygen is
-# run.
-
-EXCLUDE                = Documentation/
-
-# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
-# directories that are symbolic links (a Unix file system feature) are excluded
-# from the input.
-# The default value is: NO.
-
-EXCLUDE_SYMLINKS       = NO
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories.
-#
-# Note that the wildcards are matched against the file with absolute path, so to
-# exclude all test directories for example use the pattern */test/*
-
-EXCLUDE_PATTERNS       =
-
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-# (namespaces, classes, functions, etc.) that should be excluded from the
-# output. The symbol name can be a fully qualified name, a word, or if the
-# wildcard * is used, a substring. Examples: ANamespace, AClass,
-# AClass::ANamespace, ANamespace::*Test
-#
-# Note that the wildcards are matched against the file with absolute path, so to
-# exclude all test directories use the pattern */test/*
-
-EXCLUDE_SYMBOLS        = __* \
-                         INCLUDE_FROM_*
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or directories
-# that contain example code fragments that are included (see the \include
-# command).
-
-EXAMPLE_PATH           =
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
-# *.h) to filter out the source-files in the directories. If left blank all
-# files are included.
-
-EXAMPLE_PATTERNS       = *
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude commands
-# irrespective of the value of the RECURSIVE tag.
-# The default value is: NO.
-
-EXAMPLE_RECURSIVE      = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or directories
-# that contain images that are to be included in the documentation (see the
-# \image command).
-
-IMAGE_PATH             =
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command:
-#
-# <filter> <input-file>
-#
-# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
-# name of an input file. Doxygen will then use the output that the filter
-# program writes to standard output. If FILTER_PATTERNS is specified, this tag
-# will be ignored.
-#
-# Note that the filter must not add or remove lines; it is applied before the
-# code is scanned, but not when the output code is generated. If lines are added
-# or removed, the anchors will not be placed correctly.
-
-INPUT_FILTER           =
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis. Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match. The filters are a list of the form: pattern=filter
-# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
-# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
-# patterns match the file name, INPUT_FILTER is applied.
-
-FILTER_PATTERNS        =
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER ) will also be used to filter the input files that are used for
-# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
-# The default value is: NO.
-
-FILTER_SOURCE_FILES    = NO
-
-# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
-# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
-# it is also possible to disable source filtering for a specific pattern using
-# *.ext= (so without naming a filter).
-# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
-
-FILTER_SOURCE_PATTERNS =
-
-# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
-# is part of the input, its contents will be placed on the main page
-# (index.html). This can be useful if you have a project on for instance GitHub
-# and want to reuse the introduction page also for the doxygen output.
-
-USE_MDFILE_AS_MAINPAGE =
-
-#---------------------------------------------------------------------------
-# Configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
-# generated. Documented entities will be cross-referenced with these sources.
-#
-# Note: To get rid of all source code in the generated output, make sure that
-# also VERBATIM_HEADERS is set to NO.
-# The default value is: NO.
-
-SOURCE_BROWSER         = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body of functions,
-# classes and enums directly into the documentation.
-# The default value is: NO.
-
-INLINE_SOURCES         = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
-# special comment blocks from generated source code fragments. Normal C, C++ and
-# Fortran comments will always remain visible.
-# The default value is: YES.
-
-STRIP_CODE_COMMENTS    = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
-# function all documented functions referencing it will be listed.
-# The default value is: NO.
-
-REFERENCED_BY_RELATION = NO
-
-# If the REFERENCES_RELATION tag is set to YES then for each documented function
-# all documented entities called/used by that function will be listed.
-# The default value is: NO.
-
-REFERENCES_RELATION    = NO
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
-# to YES, then the hyperlinks from functions in REFERENCES_RELATION and
-# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
-# link to the documentation.
-# The default value is: YES.
-
-REFERENCES_LINK_SOURCE = NO
-
-# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
-# source code will show a tooltip with additional information such as prototype,
-# brief description and links to the definition and documentation. Since this
-# will make the HTML file larger and loading of large files a bit slower, you
-# can opt to disable this feature.
-# The default value is: YES.
-# This tag requires that the tag SOURCE_BROWSER is set to YES.
-
-SOURCE_TOOLTIPS        = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code will
-# point to the HTML generated by the htags(1) tool instead of doxygen built-in
-# source browser. The htags tool is part of GNU's global source tagging system
-# (see http://www.gnu.org/software/global/global.html). You will need version
-# 4.8.6 or higher.
-#
-# To use it do the following:
-# - Install the latest version of global
-# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
-# - Make sure the INPUT points to the root of the source tree
-# - Run doxygen as normal
-#
-# Doxygen will invoke htags (and that will in turn invoke gtags), so these
-# tools must be available from the command line (i.e. in the search path).
-#
-# The result: instead of the source browser generated by doxygen, the links to
-# source code will now point to the output of htags.
-# The default value is: NO.
-# This tag requires that the tag SOURCE_BROWSER is set to YES.
-
-USE_HTAGS              = NO
-
-# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
-# verbatim copy of the header file for each class for which an include is
-# specified. Set to NO to disable this.
-# See also: Section \class.
-# The default value is: YES.
-
-VERBATIM_HEADERS       = NO
-
-# If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the
-# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
-# cost of reduced performance. This can be particularly helpful with template
-# rich C++ code for which doxygen's built-in parser lacks the necessary type
-# information.
-# Note: The availability of this option depends on whether or not doxygen was
-# compiled with the --with-libclang option.
-# The default value is: NO.
-
-CLANG_ASSISTED_PARSING = NO
-
-# If clang assisted parsing is enabled you can provide the compiler with command
-# line options that you would normally use when invoking the compiler. Note that
-# the include paths will already be set by doxygen for the files and directories
-# specified with INPUT and INCLUDE_PATH.
-# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
-
-CLANG_OPTIONS          =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
-# compounds will be generated. Enable this if the project contains a lot of
-# classes, structs, unions or interfaces.
-# The default value is: YES.
-
-ALPHABETICAL_INDEX     = YES
-
-# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
-# which the alphabetical index list will be split.
-# Minimum value: 1, maximum value: 20, default value: 5.
-# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-
-COLS_IN_ALPHA_INDEX    = 5
-
-# In case all classes in a project start with a common prefix, all classes will
-# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
-# can be used to specify a prefix (or a list of prefixes) that should be ignored
-# while generating the index headers.
-# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-
-IGNORE_PREFIX          =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
-# The default value is: YES.
-
-GENERATE_HTML          = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: html.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_OUTPUT            = html
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
-# generated HTML page (for example: .htm, .php, .asp).
-# The default value is: .html.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FILE_EXTENSION    = .html
-
-# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
-# each generated HTML page. If the tag is left blank doxygen will generate a
-# standard header.
-#
-# To get valid HTML the header file that includes any scripts and style sheets
-# that doxygen needs, which is dependent on the configuration options used (e.g.
-# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
-# default header using
-# doxygen -w html new_header.html new_footer.html new_stylesheet.css
-# YourConfigFile
-# and then modify the file new_header.html. See also section "Doxygen usage"
-# for information on how to generate the default header that doxygen normally
-# uses.
-# Note: The header is subject to change so you typically have to regenerate the
-# default header when upgrading to a newer version of doxygen. For a description
-# of the possible markers and block names see the documentation.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_HEADER            =
-
-# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
-# generated HTML page. If the tag is left blank doxygen will generate a standard
-# footer. See HTML_HEADER for more information on how to generate a default
-# footer and what special commands can be used inside the footer. See also
-# section "Doxygen usage" for information on how to generate the default footer
-# that doxygen normally uses.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FOOTER            =
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
-# sheet that is used by each HTML page. It can be used to fine-tune the look of
-# the HTML output. If left blank doxygen will generate a default style sheet.
-# See also section "Doxygen usage" for information on how to generate the style
-# sheet that doxygen normally uses.
-# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
-# it is more robust and this tag (HTML_STYLESHEET) will in the future become
-# obsolete.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_STYLESHEET        =
-
-# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
-# cascading style sheets that are included after the standard style sheets
-# created by doxygen. Using this option one can overrule certain style aspects.
-# This is preferred over using HTML_STYLESHEET since it does not replace the
-# standard style sheet and is therefor more robust against future updates.
-# Doxygen will copy the style sheet files to the output directory.
-# Note: The order of the extra stylesheet files is of importance (e.g. the last
-# stylesheet in the list overrules the setting of the previous ones in the
-# list). For an example see the documentation.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_EXTRA_STYLESHEET  =
-
-# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the HTML output directory. Note
-# that these files will be copied to the base HTML output directory. Use the
-# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
-# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
-# files will be copied as-is; there are no commands or markers available.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_EXTRA_FILES       =
-
-# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
-# will adjust the colors in the stylesheet and background images according to
-# this color. Hue is specified as an angle on a colorwheel, see
-# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
-# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
-# purple, and 360 is red again.
-# Minimum value: 0, maximum value: 359, default value: 220.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_HUE    = 220
-
-# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
-# in the HTML output. For a value of 0 the output will use grayscales only. A
-# value of 255 will produce the most vivid colors.
-# Minimum value: 0, maximum value: 255, default value: 100.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_SAT    = 100
-
-# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
-# luminance component of the colors in the HTML output. Values below 100
-# gradually make the output lighter, whereas values above 100 make the output
-# darker. The value divided by 100 is the actual gamma applied, so 80 represents
-# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
-# change the gamma.
-# Minimum value: 40, maximum value: 240, default value: 80.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_GAMMA  = 80
-
-# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
-# page will contain the date and time when the page was generated. Setting this
-# to NO can help when comparing the output of multiple runs.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_TIMESTAMP         = NO
-
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
-# documentation will contain sections that can be hidden and shown after the
-# page has loaded.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_DYNAMIC_SECTIONS  = YES
-
-# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
-# shown in the various tree structured indices initially; the user can expand
-# and collapse entries dynamically later on. Doxygen will expand the tree to
-# such a level that at most the specified number of entries are visible (unless
-# a fully collapsed tree already exceeds this amount). So setting the number of
-# entries 1 will produce a full collapsed tree by default. 0 is a special value
-# representing an infinite number of entries and will result in a full expanded
-# tree by default.
-# Minimum value: 0, maximum value: 9999, default value: 100.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_INDEX_NUM_ENTRIES = 100
-
-# If the GENERATE_DOCSET tag is set to YES, additional index files will be
-# generated that can be used as input for Apple's Xcode 3 integrated development
-# environment (see: http://developer.apple.com/tools/xcode/), introduced with
-# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
-# Makefile in the HTML output directory. Running make will produce the docset in
-# that directory and running make install will install the docset in
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
-# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
-# for more information.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_DOCSET        = NO
-
-# This tag determines the name of the docset feed. A documentation feed provides
-# an umbrella under which multiple documentation sets from a single provider
-# (such as a company or product suite) can be grouped.
-# The default value is: Doxygen generated docs.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_FEEDNAME        = "Doxygen generated docs"
-
-# This tag specifies a string that should uniquely identify the documentation
-# set bundle. This should be a reverse domain-name style string, e.g.
-# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_BUNDLE_ID       = org.doxygen.Project
-
-# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
-# the documentation publisher. This should be a reverse domain-name style
-# string, e.g. com.mycompany.MyDocSet.documentation.
-# The default value is: org.doxygen.Publisher.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
-
-# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
-# The default value is: Publisher.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_PUBLISHER_NAME  = Publisher
-
-# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
-# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
-# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
-# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
-# Windows.
-#
-# The HTML Help Workshop contains a compiler that can convert all HTML output
-# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
-# files are now used as the Windows 98 help format, and will replace the old
-# Windows help format (.hlp) on all Windows platforms in the future. Compressed
-# HTML files also contain an index, a table of contents, and you can search for
-# words in the documentation. The HTML workshop also contains a viewer for
-# compressed HTML files.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_HTMLHELP      = NO
-
-# The CHM_FILE tag can be used to specify the file name of the resulting .chm
-# file. You can add a path in front of the file if the result should not be
-# written to the html output directory.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-CHM_FILE               =
-
-# The HHC_LOCATION tag can be used to specify the location (absolute path
-# including file name) of the HTML help compiler ( hhc.exe). If non-empty
-# doxygen will try to run the HTML help compiler on the generated index.hhp.
-# The file has to be specified with full path.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-HHC_LOCATION           =
-
-# The GENERATE_CHI flag controls if a separate .chi index file is generated (
-# YES) or that it should be included in the master .chm file ( NO).
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-GENERATE_CHI           = NO
-
-# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
-# and project file content.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-CHM_INDEX_ENCODING     =
-
-# The BINARY_TOC flag controls whether a binary table of contents is generated (
-# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it
-# enables the Previous and Next buttons.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-BINARY_TOC             = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members to
-# the table of contents of the HTML help documentation and to the tree view.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-TOC_EXPAND             = YES
-
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
-# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
-# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
-# (.qch) of the generated HTML documentation.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_QHP           = NO
-
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
-# the file name of the resulting .qch file. The path specified is relative to
-# the HTML output folder.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QCH_FILE               =
-
-# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
-# Project output. For more information please see Qt Help Project / Namespace
-# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_NAMESPACE          = org.doxygen.Project
-
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
-# Help Project output. For more information please see Qt Help Project / Virtual
-# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
-# folders).
-# The default value is: doc.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_VIRTUAL_FOLDER     = doc
-
-# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
-# filter to add. For more information please see Qt Help Project / Custom
-# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
-# filters).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_CUST_FILTER_NAME   =
-
-# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
-# custom filter to add. For more information please see Qt Help Project / Custom
-# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
-# filters).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_CUST_FILTER_ATTRS  =
-
-# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
-# project's filter section matches. Qt Help Project / Filter Attributes (see:
-# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_SECT_FILTER_ATTRS  =
-
-# The QHG_LOCATION tag can be used to specify the location of Qt's
-# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
-# generated .qhp file.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHG_LOCATION           =
-
-# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
-# generated, together with the HTML files, they form an Eclipse help plugin. To
-# install this plugin and make it available under the help contents menu in
-# Eclipse, the contents of the directory containing the HTML and XML files needs
-# to be copied into the plugins directory of eclipse. The name of the directory
-# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
-# After copying Eclipse needs to be restarted before the help appears.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_ECLIPSEHELP   = NO
-
-# A unique identifier for the Eclipse help plugin. When installing the plugin
-# the directory name containing the HTML and XML files should also have this
-# name. Each documentation set should have its own identifier.
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
-
-ECLIPSE_DOC_ID         = org.doxygen.Project
-
-# If you want full control over the layout of the generated HTML pages it might
-# be necessary to disable the index and replace it with your own. The
-# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
-# of each HTML page. A value of NO enables the index and the value YES disables
-# it. Since the tabs in the index contain the same information as the navigation
-# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-DISABLE_INDEX          = YES
-
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
-# structure should be generated to display hierarchical information. If the tag
-# value is set to YES, a side panel will be generated containing a tree-like
-# index structure (just like the one that is generated for HTML Help). For this
-# to work a browser that supports JavaScript, DHTML, CSS and frames is required
-# (i.e. any modern browser). Windows users are probably better off using the
-# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
-# further fine-tune the look of the index. As an example, the default style
-# sheet generated by doxygen has an example that shows how to put an image at
-# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
-# the same information as the tab index, you could consider setting
-# DISABLE_INDEX to YES when enabling this option.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_TREEVIEW      = YES
-
-# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
-# doxygen will group on one line in the generated HTML documentation.
-#
-# Note that a value of 0 will completely suppress the enum values from appearing
-# in the overview section.
-# Minimum value: 0, maximum value: 20, default value: 4.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-ENUM_VALUES_PER_LINE   = 1
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
-# to set the initial width (in pixels) of the frame in which the tree is shown.
-# Minimum value: 0, maximum value: 1500, default value: 250.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-TREEVIEW_WIDTH         = 250
-
-# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
-# external symbols imported via tag files in a separate window.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-EXT_LINKS_IN_WINDOW    = NO
-
-# Use this tag to change the font size of LaTeX formulas included as images in
-# the HTML documentation. When you change the font size after a successful
-# doxygen run you need to manually remove any form_*.png images from the HTML
-# output directory to force them to be regenerated.
-# Minimum value: 8, maximum value: 50, default value: 10.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-FORMULA_FONTSIZE       = 10
-
-# Use the FORMULA_TRANPARENT tag to determine whether or not the images
-# generated for formulas are transparent PNGs. Transparent PNGs are not
-# supported properly for IE 6.0, but are supported on all modern browsers.
-#
-# Note that when changing this option you need to delete any form_*.png files in
-# the HTML output directory before the changes have effect.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-FORMULA_TRANSPARENT    = YES
-
-# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
-# http://www.mathjax.org) which uses client side Javascript for the rendering
-# instead of using prerendered bitmaps. Use this if you do not have LaTeX
-# installed or if you want to formulas look prettier in the HTML output. When
-# enabled you may also need to install MathJax separately and configure the path
-# to it using the MATHJAX_RELPATH option.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-USE_MATHJAX            = NO
-
-# When MathJax is enabled you can set the default output format to be used for
-# the MathJax output. See the MathJax site (see:
-# http://docs.mathjax.org/en/latest/output.html) for more details.
-# Possible values are: HTML-CSS (which is slower, but has the best
-# compatibility), NativeMML (i.e. MathML) and SVG.
-# The default value is: HTML-CSS.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_FORMAT         = HTML-CSS
-
-# When MathJax is enabled you need to specify the location relative to the HTML
-# output directory using the MATHJAX_RELPATH option. The destination directory
-# should contain the MathJax.js script. For instance, if the mathjax directory
-# is located at the same level as the HTML output directory, then
-# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
-# Content Delivery Network so you can quickly see the result without installing
-# MathJax. However, it is strongly recommended to install a local copy of
-# MathJax from http://www.mathjax.org before deployment.
-# The default value is: http://cdn.mathjax.org/mathjax/latest.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
-
-# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
-# extension names that should be enabled during MathJax rendering. For example
-# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_EXTENSIONS     =
-
-# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
-# of code that will be used on startup of the MathJax code. See the MathJax site
-# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
-# example see the documentation.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_CODEFILE       =
-
-# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
-# the HTML output. The underlying search engine uses javascript and DHTML and
-# should work on any modern browser. Note that when using HTML help
-# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
-# there is already a search function so this one should typically be disabled.
-# For large projects the javascript based search engine can be slow, then
-# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
-# search using the keyboard; to jump to the search box use <access key> + S
-# (what the <access key> is depends on the OS and browser, but it is typically
-# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
-# key> to jump into the search results window, the results can be navigated
-# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
-# the search. The filter options can be selected when the cursor is inside the
-# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
-# to select a filter and <Enter> or <escape> to activate or cancel the filter
-# option.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-SEARCHENGINE           = NO
-
-# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-# implemented using a web server instead of a web client using Javascript. There
-# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
-# setting. When disabled, doxygen will generate a PHP script for searching and
-# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
-# and searching needs to be provided by external tools. See the section
-# "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SERVER_BASED_SEARCH    = NO
-
-# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
-# script for searching. Instead the search results are written to an XML file
-# which needs to be processed by an external indexer. Doxygen will invoke an
-# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
-# search results.
-#
-# Doxygen ships with an example indexer ( doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: http://xapian.org/).
-#
-# See the section "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH        = NO
-
-# The SEARCHENGINE_URL should point to a search engine hosted by a web server
-# which will return the search results when EXTERNAL_SEARCH is enabled.
-#
-# Doxygen ships with an example indexer ( doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: http://xapian.org/). See the section "External Indexing and
-# Searching" for details.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHENGINE_URL       =
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
-# search data is written to a file for indexing by an external tool. With the
-# SEARCHDATA_FILE tag the name of this file can be specified.
-# The default file is: searchdata.xml.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHDATA_FILE        = searchdata.xml
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
-# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
-# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
-# projects and redirect the results back to the right project.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH_ID     =
-
-# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
-# projects other than the one defined by this configuration file, but that are
-# all added to the same external search index. Each project needs to have a
-# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
-# to a relative location where the documentation can be found. The format is:
-# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTRA_SEARCH_MAPPINGS  =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.
-# The default value is: YES.
-
-GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked.
-#
-# Note that when enabling USE_PDFLATEX this option is only used for generating
-# bitmaps for formulas in the HTML output, but not in the Makefile that is
-# written to the output directory.
-# The default file is: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
-# index for LaTeX.
-# The default file is: makeindex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used by the
-# printer.
-# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
-# 14 inches) and executive (7.25 x 10.5 inches).
-# The default value is: a4.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PAPER_TYPE             = a4wide
-
-# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
-# that should be included in the LaTeX output. To get the times font for
-# instance you can specify
-# EXTRA_PACKAGES=times
-# If left blank no extra packages will be included.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-EXTRA_PACKAGES         =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
-# generated LaTeX document. The header should contain everything until the first
-# chapter. If it is left blank doxygen will generate a standard header. See
-# section "Doxygen usage" for information on how to let doxygen write the
-# default header to a separate file.
-#
-# Note: Only use a user-defined header if you know what you are doing! The
-# following commands have a special meaning inside the header: $title,
-# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
-# $projectbrief, $projectlogo. Doxygen will replace $title with the empy string,
-# for the replacement values of the other commands the user is refered to
-# HTML_HEADER.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HEADER           =
-
-# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
-# generated LaTeX document. The footer should contain everything after the last
-# chapter. If it is left blank doxygen will generate a standard footer. See
-# LATEX_HEADER for more information on how to generate a default footer and what
-# special commands can be used inside the footer.
-#
-# Note: Only use a user-defined footer if you know what you are doing!
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_FOOTER           =
-
-# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the LATEX_OUTPUT output
-# directory. Note that the files will be copied as-is; there are no commands or
-# markers available.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_FILES      =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
-# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
-# contain links (just like the HTML output) instead of page references. This
-# makes the output suitable for online browsing using a PDF viewer.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PDF_HYPERLINKS         = YES
-
-# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
-# the PDF file directly from the LaTeX files. Set this option to YES to get a
-# higher quality PDF documentation.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-USE_PDFLATEX           = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
-# command to the generated LaTeX files. This will instruct LaTeX to keep running
-# if errors occur, instead of asking the user for help. This option is also used
-# when generating formulas in HTML.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BATCHMODE        = NO
-
-# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
-# index chapters (such as File Index, Compound Index, etc.) in the output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HIDE_INDICES     = NO
-
-# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
-# code with syntax highlighting in the LaTeX output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_SOURCE_CODE      = NO
-
-# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
-# bibliography, e.g. plainnat, or ieeetr. See
-# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
-# The default value is: plain.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BIB_STYLE        = plain
-
-#---------------------------------------------------------------------------
-# Configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The
-# RTF output is optimized for Word 97 and may not look too pretty with other RTF
-# readers/editors.
-# The default value is: NO.
-
-GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: rtf.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
-# contain hyperlink fields. The RTF file will contain links (just like the HTML
-# output) instead of page references. This makes the output suitable for online
-# browsing using Word or some other Word compatible readers that support those
-# fields.
-#
-# Note: WordPad (write) and others do not support links.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's config
-# file, i.e. a series of assignments. You only have to provide replacements,
-# missing definitions are set to their default value.
-#
-# See also section "Doxygen usage" for information on how to generate the
-# default style sheet that doxygen normally uses.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_STYLESHEET_FILE    =
-
-# Set optional variables used in the generation of an RTF document. Syntax is
-# similar to doxygen's config file. A template extensions file can be generated
-# using doxygen -e rtf extensionFile.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_EXTENSIONS_FILE    =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for
-# classes and files.
-# The default value is: NO.
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it. A directory man3 will be created inside the directory specified by
-# MAN_OUTPUT.
-# The default directory is: man.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to the generated
-# man pages. In case the manual section does not start with a number, the number
-# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
-# optional.
-# The default value is: .3.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_EXTENSION          = .3
-
-# The MAN_SUBDIR tag determines the name of the directory created within
-# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
-# MAN_EXTENSION with the initial . removed.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_SUBDIR             =
-
-# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
-# will generate one additional man file for each entity documented in the real
-# man page(s). These additional files only source the real man page, but without
-# them the man command would be unable to find the correct page.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that
-# captures the structure of the code including all documentation.
-# The default value is: NO.
-
-GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: xml.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_OUTPUT             = xml
-
-# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
-# listings (including syntax highlighting and cross-referencing information) to
-# the XML output. Note that enabling this will significantly increase the size
-# of the XML output.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_PROGRAMLISTING     = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to the DOCBOOK output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files
-# that can be used to generate PDF.
-# The default value is: NO.
-
-GENERATE_DOCBOOK       = NO
-
-# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
-# front of it.
-# The default directory is: docbook.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_OUTPUT         = docbook
-
-# If the DOCBOOK_PROGRAMLISTING tag is set to YES doxygen will include the
-# program listings (including syntax highlighting and cross-referencing
-# information) to the DOCBOOK output. Note that enabling this will significantly
-# increase the size of the DOCBOOK output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_PROGRAMLISTING = NO
-
-#---------------------------------------------------------------------------
-# Configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen
-# Definitions (see http://autogen.sf.net) file that captures the structure of
-# the code including all documentation. Note that this feature is still
-# experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module
-# file that captures the structure of the code including all documentation.
-#
-# Note that this feature is still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary
-# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
-# output from the Perl module output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely
-# formatted so it can be parsed by a human reader. This is useful if you want to
-# understand what is going on. On the other hand, if this tag is set to NO the
-# size of the Perl module output will be much smaller and Perl will parse it
-# just the same.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file are
-# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
-# so different doxyrules.make files included by the same Makefile don't
-# overwrite each other's variables.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all
-# C-preprocessor directives found in the sources and include files.
-# The default value is: YES.
-
-ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names
-# in the source code. If set to NO only conditional compilation will be
-# performed. Macro expansion can be done in a controlled way by setting
-# EXPAND_ONLY_PREDEF to YES.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-MACRO_EXPANSION        = YES
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
-# the macro expansion is limited to the macros specified with the PREDEFINED and
-# EXPAND_AS_DEFINED tags.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_ONLY_PREDEF     = YES
-
-# If the SEARCH_INCLUDES tag is set to YES the includes files in the
-# INCLUDE_PATH will be searched if a #include is found.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by the
-# preprocessor.
-# This tag requires that the tag SEARCH_INCLUDES is set to YES.
-
-INCLUDE_PATH           =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will be
-# used.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-INCLUDE_FILE_PATTERNS  =
-
-# The PREDEFINED tag can be used to specify one or more macro names that are
-# defined before the preprocessor is started (similar to the -D option of e.g.
-# gcc). The argument of the tag is a list of macros of the form: name or
-# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
-# is assumed. To prevent a macro definition from being undefined via #undef or
-# recursively expanded use the := operator instead of the = operator.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-PREDEFINED             = __DOXYGEN__ \
-                         PROGMEM
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
-# tag can be used to specify a list of macro names that should be expanded. The
-# macro definition that is found in the sources will be used. Use the PREDEFINED
-# tag if you want to use a different macro definition that overrules the
-# definition found in the source code.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_AS_DEFINED      =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
-# remove all references to function-like macros that are alone on a line, have
-# an all uppercase name, and do not end with a semicolon. Such function macros
-# are typically used for boiler-plate code, and will confuse the parser if not
-# removed.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES tag can be used to specify one or more tag files. For each tag
-# file the location of the external documentation should be added. The format of
-# a tag file without this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where loc1 and loc2 can be relative or absolute paths or URLs. See the
-# section "Linking to external documentation" for more information about the use
-# of tag files.
-# Note: Each tag file must have a unique name (where the name does NOT include
-# the path). If a tag file is not located in the directory in which doxygen is
-# run, you must also specify the path to the tagfile here.
-
-TAGFILES               =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
-# tag file that is based on the input files it reads. See section "Linking to
-# external documentation" for more information about the usage of tag files.
-
-GENERATE_TAGFILE       =
-
-# If the ALLEXTERNALS tag is set to YES all external class will be listed in the
-# class index. If set to NO only the inherited external classes will be listed.
-# The default value is: NO.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in
-# the modules index. If set to NO, only the current project's groups will be
-# listed.
-# The default value is: YES.
-
-EXTERNAL_GROUPS        = YES
-
-# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in
-# the related pages index. If set to NO, only the current project's pages will
-# be listed.
-# The default value is: YES.
-
-EXTERNAL_PAGES         = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of 'which perl').
-# The default file (with absolute path) is: /usr/bin/perl.
-
-PERL_PATH              = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram
-# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
-# NO turns the diagrams off. Note that this option also works with HAVE_DOT
-# disabled, but it is recommended to install and use dot, since it yields more
-# powerful graphs.
-# The default value is: YES.
-
-CLASS_DIAGRAMS         = NO
-
-# You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see:
-# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where
-# the mscgen tool resides. If left empty the tool is assumed to be found in the
-# default search path.
-
-MSCGEN_PATH            =
-
-# You can include diagrams made with dia in doxygen documentation. Doxygen will
-# then run dia to produce the diagram and insert it in the documentation. The
-# DIA_PATH tag allows you to specify the directory where the dia binary resides.
-# If left empty dia is assumed to be found in the default search path.
-
-DIA_PATH               =
-
-# If set to YES, the inheritance and collaboration graphs will hide inheritance
-# and usage relations if the target is undocumented or is not a class.
-# The default value is: YES.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz (see:
-# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
-# Bell Labs. The other options in this section have no effect if this option is
-# set to NO
-# The default value is: NO.
-
-HAVE_DOT               = NO
-
-# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
-# to run in parallel. When set to 0 doxygen will base this on the number of
-# processors available in the system. You can set it explicitly to a value
-# larger than 0 to get control over the balance between CPU load and processing
-# speed.
-# Minimum value: 0, maximum value: 32, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_NUM_THREADS        = 0
-
-# When you want a differently looking font in the dot files that doxygen
-# generates you can specify the font name using DOT_FONTNAME. You need to make
-# sure dot is able to find the font, which can be done by putting it in a
-# standard location or by setting the DOTFONTPATH environment variable or by
-# setting DOT_FONTPATH to the directory containing the font.
-# The default value is: Helvetica.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTNAME           =
-
-# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
-# dot graphs.
-# Minimum value: 4, maximum value: 24, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTSIZE           = 10
-
-# By default doxygen will tell dot to use the default font as specified with
-# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
-# the path where dot can find it using this tag.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTPATH           =
-
-# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
-# each documented class showing the direct and indirect inheritance relations.
-# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CLASS_GRAPH            = NO
-
-# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
-# graph for each documented class showing the direct and indirect implementation
-# dependencies (inheritance, containment, and class references variables) of the
-# class with other documented classes.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-COLLABORATION_GRAPH    = NO
-
-# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
-# groups, showing the direct groups dependencies.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GROUP_GRAPHS           = NO
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LOOK               = NO
-
-# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
-# class node. If there are many fields or methods and many nodes the graph may
-# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
-# number of items for each type to make the size more manageable. Set this to 0
-# for no limit. Note that the threshold may be exceeded by 50% before the limit
-# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
-# but if the number exceeds 15, the total amount of fields shown is limited to
-# 10.
-# Minimum value: 0, maximum value: 100, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LIMIT_NUM_FIELDS   = 10
-
-# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
-# collaboration graphs will show the relations between templates and their
-# instances.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-TEMPLATE_RELATIONS     = NO
-
-# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
-# YES then doxygen will generate a graph for each documented file showing the
-# direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDE_GRAPH          = NO
-
-# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
-# set to YES then doxygen will generate a graph for each documented file showing
-# the direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDED_BY_GRAPH      = NO
-
-# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
-# hierarchy of all classes instead of a textual one.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GRAPHICAL_HIERARCHY    = NO
-
-# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
-# dependencies a directory has on other directories in a graphical way. The
-# dependency relations are determined by the #include relations between the
-# files in the directories.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DIRECTORY_GRAPH        = NO
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot.
-# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
-# to make the SVG files visible in IE 9+ (other browsers do not have this
-# requirement).
-# Possible values are: png, jpg, gif and svg.
-# The default value is: png.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_IMAGE_FORMAT       = png
-
-# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
-# enable generation of interactive SVG images that allow zooming and panning.
-#
-# Note that this requires a modern browser other than Internet Explorer. Tested
-# and working are Firefox, Chrome, Safari, and Opera.
-# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
-# the SVG files visible. Older versions of IE do not have SVG support.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INTERACTIVE_SVG        = NO
-
-# The DOT_PATH tag can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_PATH               =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the \dotfile
-# command).
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOTFILE_DIRS           =
-
-# The MSCFILE_DIRS tag can be used to specify one or more directories that
-# contain msc files that are included in the documentation (see the \mscfile
-# command).
-
-MSCFILE_DIRS           =
-
-# The DIAFILE_DIRS tag can be used to specify one or more directories that
-# contain dia files that are included in the documentation (see the \diafile
-# command).
-
-DIAFILE_DIRS           =
-
-# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
-# path where java can find the plantuml.jar file. If left blank, it is assumed
-# PlantUML is not used or called during a preprocessing step. Doxygen will
-# generate a warning when it encounters a \startuml command in this case and
-# will not generate output for the diagram.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-PLANTUML_JAR_PATH      =
-
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
-# that will be shown in the graph. If the number of nodes in a graph becomes
-# larger than this value, doxygen will truncate the graph, which is visualized
-# by representing a node as a red box. Note that doxygen if the number of direct
-# children of the root node in a graph is already larger than
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
-# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-# Minimum value: 0, maximum value: 10000, default value: 50.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_GRAPH_MAX_NODES    = 15
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
-# generated by dot. A depth value of 3 means that only nodes reachable from the
-# root by following a path via at most 3 edges will be shown. Nodes that lay
-# further from the root node will be omitted. Note that setting this option to 1
-# or 2 may greatly reduce the computation time needed for large code bases. Also
-# note that the size of a graph can be further restricted by
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-# Minimum value: 0, maximum value: 1000, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-MAX_DOT_GRAPH_DEPTH    = 2
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, because dot on Windows does not seem
-# to support this out of the box.
-#
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-# read).
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_TRANSPARENT        = YES
-
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10) support
-# this, this feature is disabled by default.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_MULTI_TARGETS      = NO
-
-# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
-# explaining the meaning of the various boxes and arrows in the dot generated
-# graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot
-# files that are used to generate the various graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_CLEANUP            = YES

+ 0 - 38
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioInput/makefile

@@ -1,38 +0,0 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2014.
-#
-#  dean [at] fourwalledcubicle [dot] com
-#           www.lufa-lib.org
-#
-# --------------------------------------
-#         LUFA Project Makefile.
-# --------------------------------------
-
-# Run "make help" for target help.
-
-MCU          = at90usb1287
-ARCH         = AVR8
-BOARD        = USBKEY
-F_CPU        = 8000000
-F_USB        = $(F_CPU)
-OPTIMIZATION = s
-TARGET       = AudioInput
-SRC          = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
-LUFA_PATH    = ../../../../LUFA
-CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -IConfig/
-LD_FLAGS     =
-
-# Default target
-all:
-
-# Include LUFA build script makefiles
-include $(LUFA_PATH)/Build/lufa_core.mk
-include $(LUFA_PATH)/Build/lufa_sources.mk
-include $(LUFA_PATH)/Build/lufa_build.mk
-include $(LUFA_PATH)/Build/lufa_cppcheck.mk
-include $(LUFA_PATH)/Build/lufa_doxygen.mk
-include $(LUFA_PATH)/Build/lufa_dfu.mk
-include $(LUFA_PATH)/Build/lufa_hid.mk
-include $(LUFA_PATH)/Build/lufa_avrdude.mk
-include $(LUFA_PATH)/Build/lufa_atprogram.mk

+ 0 - 311
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c

@@ -1,311 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2014.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaims all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  Main source file for the AudioOutput demo. This file contains the main tasks of
- *  the demo and is responsible for the initial application hardware configuration.
- */
-
-#include "AudioOutput.h"
-
-/** LUFA Audio Class driver interface configuration and state information. This structure is
- *  passed to all Audio Class driver functions, so that multiple instances of the same class
- *  within a device can be differentiated from one another.
- */
-USB_ClassInfo_Audio_Device_t Speaker_Audio_Interface =
-	{
-		.Config =
-			{
-				.ControlInterfaceNumber   = INTERFACE_ID_AudioControl,
-				.StreamingInterfaceNumber = INTERFACE_ID_AudioStream,
-				.DataOUTEndpoint          =
-					{
-						.Address          = AUDIO_STREAM_EPADDR,
-						.Size             = AUDIO_STREAM_EPSIZE,
-						.Banks            = 2,
-					},
-			},
-	};
-
-/** Current audio sampling frequency of the streaming audio endpoint. */
-static uint32_t CurrentAudioSampleFrequency = 48000;
-
-
-/** Main program entry point. This routine contains the overall program flow, including initial
- *  setup of all components and the main program loop.
- */
-int main(void)
-{
-	SetupHardware();
-
-	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
-	GlobalInterruptEnable();
-
-	for (;;)
-	{
-		Audio_Device_USBTask(&Speaker_Audio_Interface);
-		USB_USBTask();
-	}
-}
-
-/** Configures the board hardware and chip peripherals for the demo's functionality. */
-void SetupHardware(void)
-{
-#if (ARCH == ARCH_AVR8)
-	/* Disable watchdog if enabled by bootloader/fuses */
-	MCUSR &= ~(1 << WDRF);
-	wdt_disable();
-
-	/* Disable clock division */
-	clock_prescale_set(clock_div_1);
-#endif
-
-	/* Hardware Initialization */
-	LEDs_Init();
-	USB_Init();
-}
-
-/** ISR to handle the reloading of the PWM timer with the next sample. */
-ISR(TIMER0_COMPA_vect, ISR_BLOCK)
-{
-	uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint();
-
-	/* Check that the USB bus is ready for the next sample to read */
-	if (Audio_Device_IsSampleReceived(&Speaker_Audio_Interface))
-	{
-		/* Retrieve the signed 16-bit left and right audio samples, convert to 8-bit */
-		int8_t LeftSample_8Bit  = (Audio_Device_ReadSample16(&Speaker_Audio_Interface) >> 8);
-		int8_t RightSample_8Bit = (Audio_Device_ReadSample16(&Speaker_Audio_Interface) >> 8);
-
-		/* Mix the two channels together to produce a mono, 8-bit sample */
-		int8_t MixedSample_8Bit = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1);
-
-		#if defined(AUDIO_OUT_MONO)
-		/* Load the sample into the PWM timer channel */
-		OCR3A = (MixedSample_8Bit ^ (1 << 7));
-		#elif defined(AUDIO_OUT_STEREO)
-		/* Load the dual 8-bit samples into the PWM timer channels */
-		OCR3A = (LeftSample_8Bit  ^ (1 << 7));
-		OCR3B = (RightSample_8Bit ^ (1 << 7));
-		#elif defined(AUDIO_OUT_PORTC)
-		/* Load the 8-bit mixed sample into PORTC */
-		PORTC = MixedSample_8Bit;
-		#endif
-
-		uint8_t LEDMask = LEDS_NO_LEDS;
-
-		/* Turn on LEDs as the sample amplitude increases */
-		if (MixedSample_8Bit > 16)
-		  LEDMask = (LEDS_LED1 | LEDS_LED2 | LEDS_LED3 | LEDS_LED4);
-		else if (MixedSample_8Bit > 8)
-		  LEDMask = (LEDS_LED1 | LEDS_LED2 | LEDS_LED3);
-		else if (MixedSample_8Bit > 4)
-		  LEDMask = (LEDS_LED1 | LEDS_LED2);
-		else if (MixedSample_8Bit > 2)
-		  LEDMask = (LEDS_LED1);
-
-		LEDs_SetAllLEDs(LEDMask);
-	}
-
-	Endpoint_SelectEndpoint(PrevEndpoint);
-}
-
-/** Event handler for the library USB Connection event. */
-void EVENT_USB_Device_Connect(void)
-{
-	LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
-
-	/* Sample reload timer initialization */
-	TIMSK0  = (1 << OCIE0A);
-	OCR0A   = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1);
-	TCCR0A  = (1 << WGM01);  // CTC mode
-	TCCR0B  = (1 << CS01);   // Fcpu/8 speed
-
-	#if defined(AUDIO_OUT_MONO)
-	/* Set speaker as output */
-	DDRC   |= (1 << 6);
-	#elif defined(AUDIO_OUT_STEREO)
-	/* Set speakers as outputs */
-	DDRC   |= ((1 << 6) | (1 << 5));
-	#elif defined(AUDIO_OUT_PORTC)
-	/* Set PORTC as outputs */
-	DDRC   |= 0xFF;
-	#endif
-
-	#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))
-	/* PWM speaker timer initialization */
-	TCCR3A  = ((1 << WGM30) | (1 << COM3A1) | (1 << COM3A0)
-	        | (1 << COM3B1) | (1 << COM3B0)); // Set on match, clear on TOP
-	TCCR3B  = ((1 << WGM32) | (1 << CS30));  // Fast 8-Bit PWM, F_CPU speed
-	#endif
-}
-
-/** Event handler for the library USB Disconnection event. */
-void EVENT_USB_Device_Disconnect(void)
-{
-	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
-
-	/* Stop the sample reload timer */
-	TCCR0B = 0;
-
-	#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))
-	/* Stop the PWM generation timer */
-	TCCR3B = 0;
-	#endif
-
-	#if defined(AUDIO_OUT_MONO)
-	/* Set speaker as input to reduce current draw */
-	DDRC  &= ~(1 << 6);
-	#elif defined(AUDIO_OUT_STEREO)
-	/* Set speakers as inputs to reduce current draw */
-	DDRC  &= ~((1 << 6) | (1 << 5));
-	#elif defined(AUDIO_OUT_PORTC)
-	/* Set PORTC low */
-	PORTC = 0x00;
-	#endif
-}
-
-/** Event handler for the library USB Configuration Changed event. */
-void EVENT_USB_Device_ConfigurationChanged(void)
-{
-	bool ConfigSuccess = true;
-
-	ConfigSuccess &= Audio_Device_ConfigureEndpoints(&Speaker_Audio_Interface);
-
-	LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR);
-}
-
-/** Event handler for the library USB Control Request reception event. */
-void EVENT_USB_Device_ControlRequest(void)
-{
-	Audio_Device_ProcessControlRequest(&Speaker_Audio_Interface);
-}
-
-/** Audio class driver callback for the setting and retrieval of streaming endpoint properties. This callback must be implemented
- *  in the user application to handle property manipulations on streaming audio endpoints.
- *
- *  When the DataLength parameter is NULL, this callback should only indicate whether the specified operation is valid for
- *  the given endpoint index, and should return as fast as possible. When non-NULL, this value may be altered for GET operations
- *  to indicate the size of the retrieved data.
- *
- *  \note The length of the retrieved data stored into the Data buffer on GET operations should not exceed the initial value
- *        of the \c DataLength parameter.
- *
- *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state.
- *  \param[in]     EndpointProperty    Property of the endpoint to get or set, a value from Audio_ClassRequests_t.
- *  \param[in]     EndpointAddress     Address of the streaming endpoint whose property is being referenced.
- *  \param[in]     EndpointControl     Parameter of the endpoint to get or set, a value from Audio_EndpointControls_t.
- *  \param[in,out] DataLength          For SET operations, the length of the parameter data to set. For GET operations, the maximum
- *                                     length of the retrieved data. When NULL, the function should return whether the given property
- *                                     and parameter is valid for the requested endpoint without reading or modifying the Data buffer.
- *  \param[in,out] Data                Pointer to a location where the parameter data is stored for SET operations, or where
- *                                     the retrieved data is to be stored for GET operations.
- *
- *  \return Boolean \c true if the property get/set was successful, \c false otherwise
- */
-bool CALLBACK_Audio_Device_GetSetEndpointProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
-                                                  const uint8_t EndpointProperty,
-                                                  const uint8_t EndpointAddress,
-                                                  const uint8_t EndpointControl,
-                                                  uint16_t* const DataLength,
-                                                  uint8_t* Data)
-{
-	/* Check the requested endpoint to see if a supported endpoint is being manipulated */
-	if (EndpointAddress == Speaker_Audio_Interface.Config.DataOUTEndpoint.Address)
-	{
-		/* Check the requested control to see if a supported control is being manipulated */
-		if (EndpointControl == AUDIO_EPCONTROL_SamplingFreq)
-		{
-			switch (EndpointProperty)
-			{
-				case AUDIO_REQ_SetCurrent:
-					/* Check if we are just testing for a valid property, or actually adjusting it */
-					if (DataLength != NULL)
-					{
-						/* Set the new sampling frequency to the value given by the host */
-						CurrentAudioSampleFrequency = (((uint32_t)Data[2] << 16) | ((uint32_t)Data[1] << 8) | (uint32_t)Data[0]);
-
-						/* Adjust sample reload timer to the new frequency */
-						OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1);
-					}
-
-					return true;
-				case AUDIO_REQ_GetCurrent:
-					/* Check if we are just testing for a valid property, or actually reading it */
-					if (DataLength != NULL)
-					{
-						*DataLength = 3;
-
-						Data[2] = (CurrentAudioSampleFrequency >> 16);
-						Data[1] = (CurrentAudioSampleFrequency >> 8);
-						Data[0] = (CurrentAudioSampleFrequency &  0xFF);
-					}
-
-					return true;
-			}
-		}
-	}
-
-	return false;
-}
-
-/** Audio class driver callback for the setting and retrieval of streaming interface properties. This callback must be implemented
- *  in the user application to handle property manipulations on streaming audio interfaces.
- *
- *  When the DataLength parameter is NULL, this callback should only indicate whether the specified operation is valid for
- *  the given entity and should return as fast as possible. When non-NULL, this value may be altered for GET operations
- *  to indicate the size of the retrieved data.
- *
- *  \note The length of the retrieved data stored into the Data buffer on GET operations should not exceed the initial value
- *        of the \c DataLength parameter.
- *
- *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state.
- *  \param[in]     Property            Property of the interface to get or set, a value from Audio_ClassRequests_t.
- *  \param[in]     EntityAddress       Address of the audio entity whose property is being referenced.
- *  \param[in]     Parameter           Parameter of the entity to get or set, specific to each type of entity (see USB Audio specification).
- *  \param[in,out] DataLength          For SET operations, the length of the parameter data to set. For GET operations, the maximum
- *                                     length of the retrieved data. When NULL, the function should return whether the given property
- *                                     and parameter is valid for the requested endpoint without reading or modifying the Data buffer.
- *  \param[in,out] Data                Pointer to a location where the parameter data is stored for SET operations, or where
- *                                     the retrieved data is to be stored for GET operations.
- *
- *  \return Boolean \c true if the property GET/SET was successful, \c false otherwise
- */
-bool CALLBACK_Audio_Device_GetSetInterfaceProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
-                                                   const uint8_t Property,
-                                                   const uint8_t EntityAddress,
-                                                   const uint16_t Parameter,
-                                                   uint16_t* const DataLength,
-                                                   uint8_t* Data)
-{
-	/* No audio interface entities in the device descriptor, thus no properties to get or set. */
-	return false;
-}

+ 0 - 87
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioOutput/AudioOutput.h

@@ -1,87 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2014.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaims all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  Header file for AudioOutput.c.
- */
-
-#ifndef _AUDIO_OUTPUT_H_
-#define _AUDIO_OUTPUT_H_
-
-	/* Includes: */
-		#include <avr/io.h>
-		#include <avr/wdt.h>
-		#include <avr/power.h>
-		#include <avr/interrupt.h>
-		#include <stdlib.h>
-
-		#include "Descriptors.h"
-		#include "Config/AppConfig.h"
-
-		#include <LUFA/Drivers/Board/LEDs.h>
-		#include <LUFA/Drivers/USB/USB.h>
-		#include <LUFA/Platform/Platform.h>
-
-	/* Macros: */
-		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
-		#define LEDMASK_USB_NOTREADY      LEDS_LED1
-
-		/** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */
-		#define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)
-
-		/** LED mask for the library LED driver, to indicate that the USB interface is ready. */
-		#define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)
-
-		/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
-		#define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)
-
-	/* Function Prototypes: */
-		void SetupHardware(void);
-
-		void EVENT_USB_Device_Connect(void);
-		void EVENT_USB_Device_Disconnect(void);
-		void EVENT_USB_Device_ConfigurationChanged(void);
-		void EVENT_USB_Device_ControlRequest(void);
-
-		bool CALLBACK_Audio_Device_GetSetEndpointProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
-		                                                  const uint8_t EndpointProperty,
-		                                                  const uint8_t EndpointAddress,
-		                                                  const uint8_t EndpointControl,
-		                                                  uint16_t* const DataLength,
-		                                                  uint8_t* Data) ATTR_NON_NULL_PTR_ARG(1);
-		bool CALLBACK_Audio_Device_GetSetInterfaceProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
-		                                                   const uint8_t Property,
-		                                                   const uint8_t EntityAddress,
-		                                                   const uint16_t Parameter,
-		                                                   uint16_t* const DataLength,
-		                                                   uint8_t* Data);
-#endif
-

+ 0 - 92
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioOutput/AudioOutput.txt

@@ -1,92 +0,0 @@
-/** \file
- *
- *  This file contains special DoxyGen information for the generation of the main page and other special
- *  documentation pages. It is not a project source file.
- */
-
-/** \mainpage Audio Output Device Demo
- *
- *  \section Sec_Compat Demo Compatibility:
- *
- *  The following list indicates what microcontrollers are compatible with this demo.
- *
- *  \li Series 7 USB AVRs (AT90USBxxx7)
- *  \li Series 6 USB AVRs (AT90USBxxx6)
- *  \li Series 4 USB AVRs (ATMEGAxxU4)
- *
- *  \section Sec_Info USB Information:
- *
- *  The following table gives a rundown of the USB utilization of this demo.
- *
- *  <table>
- *   <tr>
- *    <td><b>USB Mode:</b></td>
- *    <td>Device</td>
- *   </tr>
- *   <tr>
- *    <td><b>USB Class:</b></td>
- *    <td>Audio Class</td>
- *   </tr>
- *   <tr>
- *    <td><b>USB Subclass:</b></td>
- *    <td>Standard Audio Device</td>
- *   </tr>
- *   <tr>
- *    <td><b>Relevant Standards:</b></td>
- *    <td>USBIF Audio 1.0 Class Specification \n
- *        USBIF Audio 1.0 Class Terminal Types Specification \n
- *        USBIF Audio 1.0 Data Formats Specification</td>
- *   </tr>
- *   <tr>
- *    <td><b>Supported USB Speeds:</b></td>
- *    <td>Full Speed Mode</td>
- *   </tr>
- *  </table>
- *
- *  \section Sec_Description Project Description:
- *
- *  Audio demonstration application. This gives a simple reference
- *  application for implementing a USB Audio Output device using the
- *  basic USB Audio 1.0 drivers in all modern OSes (i.e. no special drivers
- *  required).
- *
- *  On start-up the system will automatically enumerate and function
- *  as a USB speaker. Outgoing audio will output in 8-bit PWM onto
- *  the timer 3 output compare channel A for AUDIO_OUT_MONO mode, on
- *  timer 3 channels A and B for AUDIO_OUT_STEREO and on PORTC as a signed
- *  mono sample for AUDIO_OUT_PORTC. Audio output will also be indicated on
- *  the board LEDs in all modes. Decouple audio outputs with a capacitor and
- *  attach to a speaker to hear the audio.
- *
- *  Under Windows, if a driver request dialogue pops up, select the option
- *  to automatically install the appropriate drivers.
- *
- *  \section Sec_Options Project Options
- *
- *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.
- *
- *  <table>
- *   <tr>
- *    <th><b>Define Name:</b></th>
- *    <th><b>Location:</b></th>
- *    <th><b>Description:</b></th>
- *   </tr>
- *   <tr>
- *    <td>AUDIO_OUT_STEREO</td>
- *    <td>AppConfig.h</td>
- *    <td>When defined, this outputs the audio samples in stereo to the timer output pins of the microcontroller.</td>
- *   </tr>
- *   <tr>
- *    <td>AUDIO_OUT_MONO</td>
- *    <td>AppConfig.h</td>
- *    <td>When defined, this outputs the audio samples in mono to the timer output pin of the microcontroller.</td>
- *   </tr>
- *   <tr>
- *    <td>AUDIO_OUT_PORTC</td>
- *    <td>AppConfig.h</td>
- *    <td>When defined, this outputs the audio samples in mono to port C of the microcontroller, for connection to an
- *        external DAC.</td>
- *   </tr>
- *  </table>
- */
-

+ 0 - 50
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioOutput/Config/AppConfig.h

@@ -1,50 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2014.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaims all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *  \brief Application Configuration Header File
- *
- *  This is a header file which is be used to configure some of
- *  the application's compile time options, as an alternative to
- *  specifying the compile time constants supplied through a
- *  makefile or build system.
- *
- *  For information on what each token does, refer to the
- *  \ref Sec_Options section of the application documentation.
- */
-
-#ifndef _APP_CONFIG_H_
-#define _APP_CONFIG_H_
-
-	#define AUDIO_OUT_STEREO
-//	#define AUDIO_OUT_MONO
-//	#define AUDIO_OUT_PORTC
-
-#endif

+ 0 - 93
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioOutput/Config/LUFAConfig.h

@@ -1,93 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2014.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaims all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *  \brief LUFA Library Configuration Header File
- *
- *  This header file is used to configure LUFA's compile time options,
- *  as an alternative to the compile time constants supplied through
- *  a makefile.
- *
- *  For information on what each token does, refer to the LUFA
- *  manual section "Summary of Compile Tokens".
- */
-
-#ifndef _LUFA_CONFIG_H_
-#define _LUFA_CONFIG_H_
-
-	#if (ARCH == ARCH_AVR8)
-
-		/* Non-USB Related Configuration Tokens: */
-//		#define DISABLE_TERMINAL_CODES
-
-		/* USB Class Driver Related Tokens: */
-//		#define HID_HOST_BOOT_PROTOCOL_ONLY
-//		#define HID_STATETABLE_STACK_DEPTH       {Insert Value Here}
-//		#define HID_USAGE_STACK_DEPTH            {Insert Value Here}
-//		#define HID_MAX_COLLECTIONS              {Insert Value Here}
-//		#define HID_MAX_REPORTITEMS              {Insert Value Here}
-//		#define HID_MAX_REPORT_IDS               {Insert Value Here}
-//		#define NO_CLASS_DRIVER_AUTOFLUSH
-
-		/* General USB Driver Related Tokens: */
-//		#define ORDERED_EP_CONFIG
-		#define USE_STATIC_OPTIONS               (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)
-		#define USB_DEVICE_ONLY
-//		#define USB_HOST_ONLY
-//		#define USB_STREAM_TIMEOUT_MS            {Insert Value Here}
-//		#define NO_LIMITED_CONTROLLER_CONNECT
-//		#define NO_SOF_EVENTS
-
-		/* USB Device Mode Driver Related Tokens: */
-//		#define USE_RAM_DESCRIPTORS
-		#define USE_FLASH_DESCRIPTORS
-//		#define USE_EEPROM_DESCRIPTORS
-//		#define NO_INTERNAL_SERIAL
-		#define FIXED_CONTROL_ENDPOINT_SIZE      8
-//		#define DEVICE_STATE_AS_GPIOR            {Insert Value Here}
-		#define FIXED_NUM_CONFIGURATIONS         1
-//		#define CONTROL_ONLY_DEVICE
-//		#define INTERRUPT_CONTROL_ENDPOINT
-//		#define NO_DEVICE_REMOTE_WAKEUP
-//		#define NO_DEVICE_SELF_POWER
-
-		/* USB Host Mode Driver Related Tokens: */
-//		#define HOST_STATE_AS_GPIOR              {Insert Value Here}
-//		#define USB_HOST_TIMEOUT_MS              {Insert Value Here}
-//		#define HOST_DEVICE_SETTLE_DELAY_MS	     {Insert Value Here}
-//		#define NO_AUTO_VBUS_MANAGEMENT
-//		#define INVERTED_VBUS_ENABLE_LINE
-
-	#else
-
-		#error Unsupported architecture for this LUFA configuration file.
-
-	#endif
-#endif

+ 0 - 312
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioOutput/Descriptors.c

@@ -1,312 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2014.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaims all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
- *  computer-readable structures which the host requests upon device enumeration, to determine
- *  the device's capabilities and functions.
- */
-
-#include "Descriptors.h"
-
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
- *  device characteristics, including the supported USB version, control endpoint size and the
- *  number of device configurations. The descriptor is read out by the USB host when the enumeration
- *  process begins.
- */
-const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
-{
-	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
-
-	.USBSpecification       = VERSION_BCD(2,0,0),
-	.Class                  = USB_CSCP_NoDeviceClass,
-	.SubClass               = USB_CSCP_NoDeviceSubclass,
-	.Protocol               = USB_CSCP_NoDeviceProtocol,
-
-	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
-
-	.VendorID               = 0x03EB,
-	.ProductID              = 0x2046,
-	.ReleaseNumber          = VERSION_BCD(0,0,2),
-
-	.ManufacturerStrIndex   = STRING_ID_Manufacturer,
-	.ProductStrIndex        = STRING_ID_Product,
-	.SerialNumStrIndex      = NO_DESCRIPTOR,
-
-	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
-};
-
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage
- *  of the device in one of its supported configurations, including information about any device interfaces
- *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
- *  a configuration so that the host may correctly communicate with the USB device.
- */
-const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
-{
-	.Config =
-		{
-			.Header                   = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
-
-			.TotalConfigurationSize   = sizeof(USB_Descriptor_Configuration_t),
-			.TotalInterfaces          = 2,
-
-			.ConfigurationNumber      = 1,
-			.ConfigurationStrIndex    = NO_DESCRIPTOR,
-
-			.ConfigAttributes         = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED),
-
-			.MaxPowerConsumption      = USB_CONFIG_POWER_MA(100)
-		},
-
-	.Audio_ControlInterface =
-		{
-			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber          = INTERFACE_ID_AudioControl,
-			.AlternateSetting         = 0,
-
-			.TotalEndpoints           = 0,
-
-			.Class                    = AUDIO_CSCP_AudioClass,
-			.SubClass                 = AUDIO_CSCP_ControlSubclass,
-			.Protocol                 = AUDIO_CSCP_ControlProtocol,
-
-			.InterfaceStrIndex        = NO_DESCRIPTOR
-		},
-
-	.Audio_ControlInterface_SPC =
-		{
-			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_Interface_AC_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_Header,
-
-			.ACSpecification          = VERSION_BCD(1,0,0),
-			.TotalLength              = (sizeof(USB_Audio_Descriptor_Interface_AC_t) +
-			                             sizeof(USB_Audio_Descriptor_InputTerminal_t) +
-			                             sizeof(USB_Audio_Descriptor_OutputTerminal_t)),
-
-			.InCollection             = 1,
-			.InterfaceNumber          = INTERFACE_ID_AudioStream,
-		},
-
-	.Audio_InputTerminal =
-		{
-			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_InputTerminal_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_InputTerminal,
-
-			.TerminalID               = 0x01,
-			.TerminalType             = AUDIO_TERMINAL_STREAMING,
-			.AssociatedOutputTerminal = 0x00,
-
-			.TotalChannels            = 2,
-			.ChannelConfig            = (AUDIO_CHANNEL_LEFT_FRONT | AUDIO_CHANNEL_RIGHT_FRONT),
-
-			.ChannelStrIndex          = NO_DESCRIPTOR,
-			.TerminalStrIndex         = NO_DESCRIPTOR
-		},
-
-	.Audio_OutputTerminal =
-		{
-			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_OutputTerminal_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_OutputTerminal,
-
-			.TerminalID               = 0x02,
-			.TerminalType             = AUDIO_TERMINAL_OUT_SPEAKER,
-			.AssociatedInputTerminal  = 0x00,
-
-			.SourceID                 = 0x01,
-
-			.TerminalStrIndex         = NO_DESCRIPTOR
-		},
-
-	.Audio_StreamInterface_Alt0 =
-		{
-			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber          = INTERFACE_ID_AudioStream,
-			.AlternateSetting         = 0,
-
-			.TotalEndpoints           = 0,
-
-			.Class                    = AUDIO_CSCP_AudioClass,
-			.SubClass                 = AUDIO_CSCP_AudioStreamingSubclass,
-			.Protocol                 = AUDIO_CSCP_StreamingProtocol,
-
-			.InterfaceStrIndex        = NO_DESCRIPTOR
-		},
-
-	.Audio_StreamInterface_Alt1 =
-		{
-			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber          = INTERFACE_ID_AudioStream,
-			.AlternateSetting         = 1,
-
-			.TotalEndpoints           = 1,
-
-			.Class                    = AUDIO_CSCP_AudioClass,
-			.SubClass                 = AUDIO_CSCP_AudioStreamingSubclass,
-			.Protocol                 = AUDIO_CSCP_StreamingProtocol,
-
-			.InterfaceStrIndex        = NO_DESCRIPTOR
-		},
-
-	.Audio_StreamInterface_SPC =
-		{
-			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_Interface_AS_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_General,
-
-			.TerminalLink             = 0x01,
-
-			.FrameDelay               = 1,
-			.AudioFormat              = 0x0001
-		},
-
-	.Audio_AudioFormat =
-		{
-			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_Format_t) +
-			                                     sizeof(ConfigurationDescriptor.Audio_AudioFormatSampleRates),
-			                             .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_FormatType,
-
-			.FormatType               = 0x01,
-			.Channels                 = 0x02,
-
-			.SubFrameSize             = 0x02,
-			.BitResolution            = 16,
-
-			.TotalDiscreteSampleRates = (sizeof(ConfigurationDescriptor.Audio_AudioFormatSampleRates) / sizeof(USB_Audio_SampleFreq_t)),
-		},
-
-	.Audio_AudioFormatSampleRates =
-		{
-			AUDIO_SAMPLE_FREQ(8000),
-			AUDIO_SAMPLE_FREQ(11025),
-			AUDIO_SAMPLE_FREQ(22050),
-			AUDIO_SAMPLE_FREQ(44100),
-			AUDIO_SAMPLE_FREQ(48000),
-		},
-
-	.Audio_StreamEndpoint =
-		{
-			.Endpoint =
-				{
-					.Header              = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint},
-
-					.EndpointAddress     = AUDIO_STREAM_EPADDR,
-					.Attributes          = (EP_TYPE_ISOCHRONOUS | ENDPOINT_ATTR_SYNC | ENDPOINT_USAGE_DATA),
-					.EndpointSize        = AUDIO_STREAM_EPSIZE,
-					.PollingIntervalMS   = 0x01
-				},
-
-			.Refresh                  = 0,
-			.SyncEndpointNumber       = 0
-		},
-
-	.Audio_StreamEndpoint_SPC =
-		{
-			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Spc_t), .Type = DTYPE_CSEndpoint},
-			.Subtype                  = AUDIO_DSUBTYPE_CSEndpoint_General,
-
-			.Attributes               = (AUDIO_EP_ACCEPTS_SMALL_PACKETS | AUDIO_EP_SAMPLE_FREQ_CONTROL),
-
-			.LockDelayUnits           = 0x00,
-			.LockDelay                = 0x0000
-		}
-};
-
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
- *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate
- *  via the language ID table available at USB.org what languages the device supports for its string descriptors.
- */
-const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(LANGUAGE_ID_ENG);
-
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable
- *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- *  Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(L"Dean Camera");
-
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
- *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- *  Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Audio Out Demo");
-
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
- *  documentation) by the application code so that the address and size of a requested descriptor can be given
- *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
- *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
- *  USB host.
- */
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
-                                    const uint8_t wIndex,
-                                    const void** const DescriptorAddress)
-{
-	const uint8_t  DescriptorType   = (wValue >> 8);
-	const uint8_t  DescriptorNumber = (wValue & 0xFF);
-
-	const void* Address = NULL;
-	uint16_t    Size    = NO_DESCRIPTOR;
-
-	switch (DescriptorType)
-	{
-		case DTYPE_Device:
-			Address = &DeviceDescriptor;
-			Size    = sizeof(USB_Descriptor_Device_t);
-			break;
-		case DTYPE_Configuration:
-			Address = &ConfigurationDescriptor;
-			Size    = sizeof(USB_Descriptor_Configuration_t);
-			break;
-		case DTYPE_String:
-			switch (DescriptorNumber)
-			{
-				case STRING_ID_Language:
-					Address = &LanguageString;
-					Size    = pgm_read_byte(&LanguageString.Header.Size);
-					break;
-				case STRING_ID_Manufacturer:
-					Address = &ManufacturerString;
-					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
-					break;
-				case STRING_ID_Product:
-					Address = &ProductString;
-					Size    = pgm_read_byte(&ProductString.Header.Size);
-					break;
-			}
-
-			break;
-	}
-
-	*DescriptorAddress = Address;
-	return Size;
-}
-

+ 0 - 106
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioOutput/Descriptors.h

@@ -1,106 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2014.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaims all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  Header file for Descriptors.c.
- */
-
-#ifndef _DESCRIPTORS_H_
-#define _DESCRIPTORS_H_
-
-	/* Includes: */
-		#include <LUFA/Drivers/USB/USB.h>
-
-		#include <avr/pgmspace.h>
-
-		#include "Config/AppConfig.h"
-
-	/* Macros: */
-		/** Endpoint address of the Audio isochronous streaming data OUT endpoint. */
-		#define AUDIO_STREAM_EPADDR           (ENDPOINT_DIR_OUT | 1)
-
-		/** Endpoint size in bytes of the Audio isochronous streaming data endpoint. */
-		#define AUDIO_STREAM_EPSIZE           256
-
-	/* Type Defines: */
-		/** Type define for the device configuration descriptor structure. This must be defined in the
-		 *  application code, as the configuration descriptor contains several sub-descriptors which
-		 *  vary between devices, and which describe the device's usage to the host.
-		 */
-		typedef struct
-		{
-			USB_Descriptor_Configuration_Header_t     Config;
-
-			// Audio Control Interface
-			USB_Descriptor_Interface_t                Audio_ControlInterface;
-			USB_Audio_Descriptor_Interface_AC_t       Audio_ControlInterface_SPC;
-			USB_Audio_Descriptor_InputTerminal_t      Audio_InputTerminal;
-			USB_Audio_Descriptor_OutputTerminal_t     Audio_OutputTerminal;
-
-			// Audio Streaming Interface
-			USB_Descriptor_Interface_t                Audio_StreamInterface_Alt0;
-			USB_Descriptor_Interface_t                Audio_StreamInterface_Alt1;
-			USB_Audio_Descriptor_Interface_AS_t       Audio_StreamInterface_SPC;
-			USB_Audio_Descriptor_Format_t             Audio_AudioFormat;
-			USB_Audio_SampleFreq_t                    Audio_AudioFormatSampleRates[5];
-			USB_Audio_Descriptor_StreamEndpoint_Std_t Audio_StreamEndpoint;
-			USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC;
-		} USB_Descriptor_Configuration_t;
-
-		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
-		 *  should have a unique ID index associated with it, which can be used to refer to the
-		 *  interface from other descriptors.
-		 */
-		enum InterfaceDescriptors_t
-		{
-			INTERFACE_ID_AudioControl = 0, /**< Audio control interface descriptor ID */
-			INTERFACE_ID_AudioStream  = 1, /**< Audio stream interface descriptor ID */
-		};
-
-		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
-		 *  have a unique ID index associated with it, which can be used to refer to the string from
-		 *  other descriptors.
-		 */
-		enum StringDescriptors_t
-		{
-			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
-			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
-			STRING_ID_Product      = 2, /**< Product string ID */
-		};
-
-	/* Function Prototypes: */
-		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
-		                                    const uint8_t wIndex,
-		                                    const void** const DescriptorAddress)
-		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
-
-#endif
-

+ 0 - 50
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioOutput/asf.xml

@@ -1,50 +0,0 @@
-<asf xmlversion="1.0">
-	<project caption="Audio Output Device Demo (Class Driver APIs)" id="lufa.demos.device.class.audio_output.example.avr8">
-		<require idref="lufa.demos.device.class.audio_output"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="at90usb1287"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-	</project>
-
-	<module type="application" id="lufa.demos.device.class.audio_output" caption="Audio Output Device Demo (Class Driver APIs)">
-		<info type="description" value="summary">
-		Audio 1.0 Output device demo, implementing a basic USB speaker. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack.
-		</info>
-
- 		<info type="gui-flag" value="move-to-root"/>
-
-		<info type="keyword" value="Technology">
-			<keyword value="Class Driver APIs"/>
-			<keyword value="USB Device"/>
-			<keyword value="Audio Class"/>
-		</info>
-
-		<device-support-alias value="lufa_avr8"/>
-		<device-support-alias value="lufa_xmega"/>
-		<device-support-alias value="lufa_uc3"/>
-
-		<build type="distribute" subtype="user-file" value="doxyfile"/>
-		<build type="distribute" subtype="user-file" value="AudioOutput.txt"/>
-
-		<build type="c-source" value="AudioOutput.c"/>
-		<build type="c-source" value="Descriptors.c"/>
-		<build type="header-file" value="AudioOutput.h"/>
-		<build type="header-file" value="Descriptors.h"/>
-
-		<build type="module-config" subtype="path" value="Config"/>
-		<build type="module-config" subtype="required-header-file" value="AppConfig.h"/>
-		<build type="header-file" value="Config/AppConfig.h"/>
-		<build type="header-file" value="Config/LUFAConfig.h"/>
-
-		<require idref="lufa.common"/>
-		<require idref="lufa.platform"/>
-		<require idref="lufa.drivers.usb"/>
-		<require idref="lufa.drivers.board"/>
-		<require idref="lufa.drivers.board.leds"/>
-	</module>
-</asf>

+ 0 - 2364
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioOutput/doxyfile

@@ -1,2364 +0,0 @@
-# Doxyfile 1.8.8
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project.
-#
-# All text after a double hash (##) is considered a comment and is placed in
-# front of the TAG it is preceding.
-#
-# All text after a single hash (#) is considered a comment and will be ignored.
-# The format is:
-# TAG = value [value, ...]
-# For lists, items can also be appended using:
-# TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (\" \").
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# This tag specifies the encoding used for all characters in the config file
-# that follow. The default is UTF-8 which is also the encoding used for all text
-# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
-# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
-# for the list of possible encodings.
-# The default value is: UTF-8.
-
-DOXYFILE_ENCODING      = UTF-8
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
-# double-quotes, unless you are using Doxywizard) that should identify the
-# project for which the documentation is generated. This name is used in the
-# title of most generated pages and in a few other places.
-# The default value is: My Project.
-
-PROJECT_NAME           = "LUFA Library - Audio Output Device Demo"
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
-# could be handy for archiving the generated documentation or if some version
-# control system is used.
-
-PROJECT_NUMBER         =
-
-# Using the PROJECT_BRIEF tag one can provide an optional one line description
-# for a project that appears at the top of each page and should give viewer a
-# quick idea about the purpose of the project. Keep the description short.
-
-PROJECT_BRIEF          =
-
-# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
-# the documentation. The maximum height of the logo should not exceed 55 pixels
-# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
-# to the output directory.
-
-PROJECT_LOGO           =
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
-# into which the generated documentation will be written. If a relative path is
-# entered, it will be relative to the location where doxygen was started. If
-# left blank the current directory will be used.
-
-OUTPUT_DIRECTORY       = ./Documentation/
-
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
-# directories (in 2 levels) under the output directory of each output format and
-# will distribute the generated files over these directories. Enabling this
-# option can be useful when feeding doxygen a huge amount of source files, where
-# putting all generated files in the same directory would otherwise causes
-# performance problems for the file system.
-# The default value is: NO.
-
-CREATE_SUBDIRS         = NO
-
-# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
-# characters to appear in the names of generated files. If set to NO, non-ASCII
-# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
-# U+3044.
-# The default value is: NO.
-
-ALLOW_UNICODE_NAMES    = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
-# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
-# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
-# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
-# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
-# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
-# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
-# Ukrainian and Vietnamese.
-# The default value is: English.
-
-OUTPUT_LANGUAGE        = English
-
-# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
-# descriptions after the members that are listed in the file and class
-# documentation (similar to Javadoc). Set to NO to disable this.
-# The default value is: YES.
-
-BRIEF_MEMBER_DESC      = YES
-
-# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
-# description of a member or function before the detailed description
-#
-# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-# The default value is: YES.
-
-REPEAT_BRIEF           = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator that is
-# used to form the text in various listings. Each string in this list, if found
-# as the leading text of the brief description, will be stripped from the text
-# and the result, after processing the whole list, is used as the annotated
-# text. Otherwise, the brief description is used as-is. If left blank, the
-# following values are used ($name is automatically replaced with the name of
-# the entity):The $name class, The $name widget, The $name file, is, provides,
-# specifies, contains, represents, a, an and the.
-
-ABBREVIATE_BRIEF       = "The $name class" \
-                         "The $name widget" \
-                         "The $name file" \
-                         is \
-                         provides \
-                         specifies \
-                         contains \
-                         represents \
-                         a \
-                         an \
-                         the
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# doxygen will generate a detailed section even if there is only a brief
-# description.
-# The default value is: NO.
-
-ALWAYS_DETAILED_SEC    = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
-# operators of the base classes will not be shown.
-# The default value is: NO.
-
-INLINE_INHERITED_MEMB  = NO
-
-# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
-# before files name in the file list and in the header files. If set to NO the
-# shortest path that makes the file name unique will be used
-# The default value is: YES.
-
-FULL_PATH_NAMES        = YES
-
-# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
-# Stripping is only done if one of the specified strings matches the left-hand
-# part of the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the path to
-# strip.
-#
-# Note that you can specify absolute paths here, but also relative paths, which
-# will be relative from the directory where doxygen is started.
-# This tag requires that the tag FULL_PATH_NAMES is set to YES.
-
-STRIP_FROM_PATH        =
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
-# path mentioned in the documentation of a class, which tells the reader which
-# header file to include in order to use a class. If left blank only the name of
-# the header file containing the class definition is used. Otherwise one should
-# specify the list of include paths that are normally passed to the compiler
-# using the -I flag.
-
-STRIP_FROM_INC_PATH    =
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
-# less readable) file names. This can be useful is your file systems doesn't
-# support long names like on DOS, Mac, or CD-ROM.
-# The default value is: NO.
-
-SHORT_NAMES            = YES
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
-# first line (until the first dot) of a Javadoc-style comment as the brief
-# description. If set to NO, the Javadoc-style will behave just like regular Qt-
-# style comments (thus requiring an explicit @brief command for a brief
-# description.)
-# The default value is: NO.
-
-JAVADOC_AUTOBRIEF      = NO
-
-# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
-# line (until the first dot) of a Qt-style comment as the brief description. If
-# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
-# requiring an explicit \brief command for a brief description.)
-# The default value is: NO.
-
-QT_AUTOBRIEF           = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
-# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
-# a brief description. This used to be the default behavior. The new default is
-# to treat a multi-line C++ comment block as a detailed description. Set this
-# tag to YES if you prefer the old behavior instead.
-#
-# Note that setting this tag to YES also means that rational rose comments are
-# not recognized any more.
-# The default value is: NO.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
-# documentation from any documented member that it re-implements.
-# The default value is: YES.
-
-INHERIT_DOCS           = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
-# new page for each member. If set to NO, the documentation of a member will be
-# part of the file/class/namespace that contains it.
-# The default value is: NO.
-
-SEPARATE_MEMBER_PAGES  = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
-# uses this value to replace tabs by spaces in code fragments.
-# Minimum value: 1, maximum value: 16, default value: 4.
-
-TAB_SIZE               = 4
-
-# This tag can be used to specify a number of aliases that act as commands in
-# the documentation. An alias has the form:
-# name=value
-# For example adding
-# "sideeffect=@par Side Effects:\n"
-# will allow you to put the command \sideeffect (or @sideeffect) in the
-# documentation, which will result in a user-defined paragraph with heading
-# "Side Effects:". You can put \n's in the value part of an alias to insert
-# newlines.
-
-ALIASES                =
-
-# This tag can be used to specify a number of word-keyword mappings (TCL only).
-# A mapping has the form "name=value". For example adding "class=itcl::class"
-# will allow you to use the command class in the itcl::class meaning.
-
-TCL_SUBST              =
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
-# only. Doxygen will then generate output that is more tailored for C. For
-# instance, some of the names that are used will be different. The list of all
-# members will be omitted, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_FOR_C  = YES
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
-# Python sources only. Doxygen will then generate output that is more tailored
-# for that language. For instance, namespaces will be presented as packages,
-# qualified scopes will look different, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_JAVA   = NO
-
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
-# sources. Doxygen will then generate output that is tailored for Fortran.
-# The default value is: NO.
-
-OPTIMIZE_FOR_FORTRAN   = NO
-
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
-# sources. Doxygen will then generate output that is tailored for VHDL.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_VHDL   = NO
-
-# Doxygen selects the parser to use depending on the extension of the files it
-# parses. With this tag you can assign which parser to use for a given
-# extension. Doxygen has a built-in mapping, but you can override or extend it
-# using this tag. The format is ext=language, where ext is a file extension, and
-# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
-# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
-# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
-# Fortran. In the later case the parser tries to guess whether the code is fixed
-# or free formatted code, this is the default for Fortran type files), VHDL. For
-# instance to make doxygen treat .inc files as Fortran files (default is PHP),
-# and .f files as C (default is Fortran), use: inc=Fortran f=C.
-#
-# Note For files without extension you can use no_extension as a placeholder.
-#
-# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
-# the files are not read by doxygen.
-
-EXTENSION_MAPPING      =
-
-# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
-# according to the Markdown format, which allows for more readable
-# documentation. See http://daringfireball.net/projects/markdown/ for details.
-# The output of markdown processing is further processed by doxygen, so you can
-# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
-# case of backward compatibilities issues.
-# The default value is: YES.
-
-MARKDOWN_SUPPORT       = NO
-
-# When enabled doxygen tries to link words that correspond to documented
-# classes, or namespaces to their corresponding documentation. Such a link can
-# be prevented in individual cases by by putting a % sign in front of the word
-# or globally by setting AUTOLINK_SUPPORT to NO.
-# The default value is: YES.
-
-AUTOLINK_SUPPORT       = YES
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
-# to include (a tag file for) the STL sources as input, then you should set this
-# tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string);
-# versus func(std::string) {}). This also make the inheritance and collaboration
-# diagrams that involve STL classes more complete and accurate.
-# The default value is: NO.
-
-BUILTIN_STL_SUPPORT    = NO
-
-# If you use Microsoft's C++/CLI language, you should set this option to YES to
-# enable parsing support.
-# The default value is: NO.
-
-CPP_CLI_SUPPORT        = NO
-
-# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
-# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
-# will parse them like normal C++ but will assume all classes use public instead
-# of private inheritance when no explicit protection keyword is present.
-# The default value is: NO.
-
-SIP_SUPPORT            = NO
-
-# For Microsoft's IDL there are propget and propput attributes to indicate
-# getter and setter methods for a property. Setting this option to YES will make
-# doxygen to replace the get and set methods by a property in the documentation.
-# This will only work if the methods are indeed getting or setting a simple
-# type. If this is not the case, or you want to show the methods anyway, you
-# should set this option to NO.
-# The default value is: YES.
-
-IDL_PROPERTY_SUPPORT   = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-# The default value is: NO.
-
-DISTRIBUTE_GROUP_DOC   = YES
-
-# Set the SUBGROUPING tag to YES to allow class member groups of the same type
-# (for instance a group of public functions) to be put as a subgroup of that
-# type (e.g. under the Public Functions section). Set it to NO to prevent
-# subgrouping. Alternatively, this can be done per class using the
-# \nosubgrouping command.
-# The default value is: YES.
-
-SUBGROUPING            = YES
-
-# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
-# are shown inside the group in which they are included (e.g. using \ingroup)
-# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
-# and RTF).
-#
-# Note that this feature does not work in combination with
-# SEPARATE_MEMBER_PAGES.
-# The default value is: NO.
-
-INLINE_GROUPED_CLASSES = NO
-
-# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
-# with only public data fields or simple typedef fields will be shown inline in
-# the documentation of the scope in which they are defined (i.e. file,
-# namespace, or group documentation), provided this scope is documented. If set
-# to NO, structs, classes, and unions are shown on a separate page (for HTML and
-# Man pages) or section (for LaTeX and RTF).
-# The default value is: NO.
-
-INLINE_SIMPLE_STRUCTS  = NO
-
-# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
-# enum is documented as struct, union, or enum with the name of the typedef. So
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
-# with name TypeT. When disabled the typedef will appear as a member of a file,
-# namespace, or class. And the struct will be named TypeS. This can typically be
-# useful for C code in case the coding convention dictates that all compound
-# types are typedef'ed and only the typedef is referenced, never the tag name.
-# The default value is: NO.
-
-TYPEDEF_HIDES_STRUCT   = NO
-
-# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
-# cache is used to resolve symbols given their name and scope. Since this can be
-# an expensive process and often the same symbol appears multiple times in the
-# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
-# doxygen will become slower. If the cache is too large, memory is wasted. The
-# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
-# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
-# symbols. At the end of a run doxygen will report the cache usage and suggest
-# the optimal cache size from a speed point of view.
-# Minimum value: 0, maximum value: 9, default value: 0.
-
-LOOKUP_CACHE_SIZE      = 0
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available. Private
-# class members and static file members will be hidden unless the
-# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
-# Note: This will also disable the warnings about undocumented members that are
-# normally produced when WARNINGS is set to YES.
-# The default value is: NO.
-
-EXTRACT_ALL            = YES
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
-# be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PRIVATE        = YES
-
-# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
-# scope will be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PACKAGE        = NO
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file will be
-# included in the documentation.
-# The default value is: NO.
-
-EXTRACT_STATIC         = YES
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
-# locally in source files will be included in the documentation. If set to NO
-# only classes defined in header files are included. Does not have any effect
-# for Java sources.
-# The default value is: YES.
-
-EXTRACT_LOCAL_CLASSES  = YES
-
-# This flag is only useful for Objective-C code. When set to YES local methods,
-# which are defined in the implementation section but not in the interface are
-# included in the documentation. If set to NO only methods in the interface are
-# included.
-# The default value is: NO.
-
-EXTRACT_LOCAL_METHODS  = NO
-
-# If this flag is set to YES, the members of anonymous namespaces will be
-# extracted and appear in the documentation as a namespace called
-# 'anonymous_namespace{file}', where file will be replaced with the base name of
-# the file that contains the anonymous namespace. By default anonymous namespace
-# are hidden.
-# The default value is: NO.
-
-EXTRACT_ANON_NSPACES   = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
-# undocumented members inside documented classes or files. If set to NO these
-# members will be included in the various overviews, but no documentation
-# section is generated. This option has no effect if EXTRACT_ALL is enabled.
-# The default value is: NO.
-
-HIDE_UNDOC_MEMBERS     = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy. If set
-# to NO these classes will be included in the various overviews. This option has
-# no effect if EXTRACT_ALL is enabled.
-# The default value is: NO.
-
-HIDE_UNDOC_CLASSES     = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
-# (class|struct|union) declarations. If set to NO these declarations will be
-# included in the documentation.
-# The default value is: NO.
-
-HIDE_FRIEND_COMPOUNDS  = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
-# documentation blocks found inside the body of a function. If set to NO these
-# blocks will be appended to the function's detailed documentation block.
-# The default value is: NO.
-
-HIDE_IN_BODY_DOCS      = NO
-
-# The INTERNAL_DOCS tag determines if documentation that is typed after a
-# \internal command is included. If the tag is set to NO then the documentation
-# will be excluded. Set it to YES to include the internal documentation.
-# The default value is: NO.
-
-INTERNAL_DOCS          = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
-# names in lower-case letters. If set to YES upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
-# and Mac users are advised to set this option to NO.
-# The default value is: system dependent.
-
-CASE_SENSE_NAMES       = NO
-
-# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
-# their full class and namespace scopes in the documentation. If set to YES the
-# scope will be hidden.
-# The default value is: NO.
-
-HIDE_SCOPE_NAMES       = NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
-# the files that are included by a file in the documentation of that file.
-# The default value is: YES.
-
-SHOW_INCLUDE_FILES     = YES
-
-# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
-# grouped member an include statement to the documentation, telling the reader
-# which file to include in order to use the member.
-# The default value is: NO.
-
-SHOW_GROUPED_MEMB_INC  = NO
-
-# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
-# files with double quotes in the documentation rather than with sharp brackets.
-# The default value is: NO.
-
-FORCE_LOCAL_INCLUDES   = NO
-
-# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
-# documentation for inline members.
-# The default value is: YES.
-
-INLINE_INFO            = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
-# (detailed) documentation of file and class members alphabetically by member
-# name. If set to NO the members will appear in declaration order.
-# The default value is: YES.
-
-SORT_MEMBER_DOCS       = YES
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
-# descriptions of file, namespace and class members alphabetically by member
-# name. If set to NO the members will appear in declaration order. Note that
-# this will also influence the order of the classes in the class list.
-# The default value is: NO.
-
-SORT_BRIEF_DOCS        = NO
-
-# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
-# (brief and detailed) documentation of class members so that constructors and
-# destructors are listed first. If set to NO the constructors will appear in the
-# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
-# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
-# member documentation.
-# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
-# detailed member documentation.
-# The default value is: NO.
-
-SORT_MEMBERS_CTORS_1ST = NO
-
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
-# of group names into alphabetical order. If set to NO the group names will
-# appear in their defined order.
-# The default value is: NO.
-
-SORT_GROUP_NAMES       = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
-# fully-qualified names, including namespaces. If set to NO, the class list will
-# be sorted only by class name, not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the alphabetical
-# list.
-# The default value is: NO.
-
-SORT_BY_SCOPE_NAME     = NO
-
-# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
-# type resolution of all parameters of a function it will reject a match between
-# the prototype and the implementation of a member function even if there is
-# only one candidate or it is obvious which candidate to choose by doing a
-# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
-# accept a match between prototype and implementation in such cases.
-# The default value is: NO.
-
-STRICT_PROTO_MATCHING  = NO
-
-# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the
-# todo list. This list is created by putting \todo commands in the
-# documentation.
-# The default value is: YES.
-
-GENERATE_TODOLIST      = NO
-
-# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the
-# test list. This list is created by putting \test commands in the
-# documentation.
-# The default value is: YES.
-
-GENERATE_TESTLIST      = NO
-
-# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
-# list. This list is created by putting \bug commands in the documentation.
-# The default value is: YES.
-
-GENERATE_BUGLIST       = NO
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
-# the deprecated list. This list is created by putting \deprecated commands in
-# the documentation.
-# The default value is: YES.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional documentation
-# sections, marked by \if <section_label> ... \endif and \cond <section_label>
-# ... \endcond blocks.
-
-ENABLED_SECTIONS       =
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
-# initial value of a variable or macro / define can have for it to appear in the
-# documentation. If the initializer consists of more lines than specified here
-# it will be hidden. Use a value of 0 to hide initializers completely. The
-# appearance of the value of individual variables and macros / defines can be
-# controlled using \showinitializer or \hideinitializer command in the
-# documentation regardless of this setting.
-# Minimum value: 0, maximum value: 10000, default value: 30.
-
-MAX_INITIALIZER_LINES  = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
-# the bottom of the documentation of classes and structs. If set to YES the list
-# will mention the files that were used to generate the documentation.
-# The default value is: YES.
-
-SHOW_USED_FILES        = YES
-
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
-# will remove the Files entry from the Quick Index and from the Folder Tree View
-# (if specified).
-# The default value is: YES.
-
-SHOW_FILES             = YES
-
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
-# page. This will remove the Namespaces entry from the Quick Index and from the
-# Folder Tree View (if specified).
-# The default value is: YES.
-
-SHOW_NAMESPACES        = YES
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from
-# the version control system). Doxygen will invoke the program by executing (via
-# popen()) the command command input-file, where command is the value of the
-# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
-# by doxygen. Whatever the program writes to standard output is used as the file
-# version. For an example see the documentation.
-
-FILE_VERSION_FILTER    =
-
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
-# by doxygen. The layout file controls the global structure of the generated
-# output files in an output format independent way. To create the layout file
-# that represents doxygen's defaults, run doxygen with the -l option. You can
-# optionally specify a file name after the option, if omitted DoxygenLayout.xml
-# will be used as the name of the layout file.
-#
-# Note that if you run doxygen from a directory containing a file called
-# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
-# tag is left empty.
-
-LAYOUT_FILE            =
-
-# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
-# the reference definitions. This must be a list of .bib files. The .bib
-# extension is automatically appended if omitted. This requires the bibtex tool
-# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
-# For LaTeX the style of the bibliography can be controlled using
-# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
-# search path. See also \cite for info how to create references.
-
-CITE_BIB_FILES         =
-
-#---------------------------------------------------------------------------
-# Configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated to
-# standard output by doxygen. If QUIET is set to YES this implies that the
-# messages are off.
-# The default value is: NO.
-
-QUIET                  = YES
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
-# this implies that the warnings are on.
-#
-# Tip: Turn warnings on while writing the documentation.
-# The default value is: YES.
-
-WARNINGS               = YES
-
-# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
-# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
-# will automatically be disabled.
-# The default value is: YES.
-
-WARN_IF_UNDOCUMENTED   = YES
-
-# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some parameters
-# in a documented function, or documenting parameters that don't exist or using
-# markup commands wrongly.
-# The default value is: YES.
-
-WARN_IF_DOC_ERROR      = YES
-
-# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
-# are documented, but have no documentation for their parameters or return
-# value. If set to NO doxygen will only warn about wrong or incomplete parameter
-# documentation, but not about the absence of documentation.
-# The default value is: NO.
-
-WARN_NO_PARAMDOC       = YES
-
-# The WARN_FORMAT tag determines the format of the warning messages that doxygen
-# can produce. The string should contain the $file, $line, and $text tags, which
-# will be replaced by the file and line number from which the warning originated
-# and the warning text. Optionally the format may contain $version, which will
-# be replaced by the version of the file (if it could be obtained via
-# FILE_VERSION_FILTER)
-# The default value is: $file:$line: $text.
-
-WARN_FORMAT            = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning and error
-# messages should be written. If left blank the output is written to standard
-# error (stderr).
-
-WARN_LOGFILE           =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag is used to specify the files and/or directories that contain
-# documented source files. You may enter file names like myfile.cpp or
-# directories like /usr/src/myproject. Separate the files or directories with
-# spaces.
-# Note: If this tag is empty the current directory is searched.
-
-INPUT                  = ./
-
-# This tag can be used to specify the character encoding of the source files
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
-# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
-# documentation (see: http://www.gnu.org/software/libiconv) for the list of
-# possible encodings.
-# The default value is: UTF-8.
-
-INPUT_ENCODING         = UTF-8
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
-# *.h) to filter out the source-files in the directories. If left blank the
-# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
-# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
-# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
-# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
-# *.qsf, *.as and *.js.
-
-FILE_PATTERNS          = *.h \
-                         *.c \
-                         *.txt
-
-# The RECURSIVE tag can be used to specify whether or not subdirectories should
-# be searched for input files as well.
-# The default value is: NO.
-
-RECURSIVE              = YES
-
-# The EXCLUDE tag can be used to specify files and/or directories that should be
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-#
-# Note that relative paths are relative to the directory from which doxygen is
-# run.
-
-EXCLUDE                = Documentation/
-
-# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
-# directories that are symbolic links (a Unix file system feature) are excluded
-# from the input.
-# The default value is: NO.
-
-EXCLUDE_SYMLINKS       = NO
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories.
-#
-# Note that the wildcards are matched against the file with absolute path, so to
-# exclude all test directories for example use the pattern */test/*
-
-EXCLUDE_PATTERNS       =
-
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-# (namespaces, classes, functions, etc.) that should be excluded from the
-# output. The symbol name can be a fully qualified name, a word, or if the
-# wildcard * is used, a substring. Examples: ANamespace, AClass,
-# AClass::ANamespace, ANamespace::*Test
-#
-# Note that the wildcards are matched against the file with absolute path, so to
-# exclude all test directories use the pattern */test/*
-
-EXCLUDE_SYMBOLS        = __* \
-                         INCLUDE_FROM_*
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or directories
-# that contain example code fragments that are included (see the \include
-# command).
-
-EXAMPLE_PATH           =
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
-# *.h) to filter out the source-files in the directories. If left blank all
-# files are included.
-
-EXAMPLE_PATTERNS       = *
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude commands
-# irrespective of the value of the RECURSIVE tag.
-# The default value is: NO.
-
-EXAMPLE_RECURSIVE      = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or directories
-# that contain images that are to be included in the documentation (see the
-# \image command).
-
-IMAGE_PATH             =
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command:
-#
-# <filter> <input-file>
-#
-# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
-# name of an input file. Doxygen will then use the output that the filter
-# program writes to standard output. If FILTER_PATTERNS is specified, this tag
-# will be ignored.
-#
-# Note that the filter must not add or remove lines; it is applied before the
-# code is scanned, but not when the output code is generated. If lines are added
-# or removed, the anchors will not be placed correctly.
-
-INPUT_FILTER           =
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis. Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match. The filters are a list of the form: pattern=filter
-# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
-# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
-# patterns match the file name, INPUT_FILTER is applied.
-
-FILTER_PATTERNS        =
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER ) will also be used to filter the input files that are used for
-# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
-# The default value is: NO.
-
-FILTER_SOURCE_FILES    = NO
-
-# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
-# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
-# it is also possible to disable source filtering for a specific pattern using
-# *.ext= (so without naming a filter).
-# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
-
-FILTER_SOURCE_PATTERNS =
-
-# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
-# is part of the input, its contents will be placed on the main page
-# (index.html). This can be useful if you have a project on for instance GitHub
-# and want to reuse the introduction page also for the doxygen output.
-
-USE_MDFILE_AS_MAINPAGE =
-
-#---------------------------------------------------------------------------
-# Configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
-# generated. Documented entities will be cross-referenced with these sources.
-#
-# Note: To get rid of all source code in the generated output, make sure that
-# also VERBATIM_HEADERS is set to NO.
-# The default value is: NO.
-
-SOURCE_BROWSER         = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body of functions,
-# classes and enums directly into the documentation.
-# The default value is: NO.
-
-INLINE_SOURCES         = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
-# special comment blocks from generated source code fragments. Normal C, C++ and
-# Fortran comments will always remain visible.
-# The default value is: YES.
-
-STRIP_CODE_COMMENTS    = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
-# function all documented functions referencing it will be listed.
-# The default value is: NO.
-
-REFERENCED_BY_RELATION = NO
-
-# If the REFERENCES_RELATION tag is set to YES then for each documented function
-# all documented entities called/used by that function will be listed.
-# The default value is: NO.
-
-REFERENCES_RELATION    = NO
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
-# to YES, then the hyperlinks from functions in REFERENCES_RELATION and
-# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
-# link to the documentation.
-# The default value is: YES.
-
-REFERENCES_LINK_SOURCE = NO
-
-# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
-# source code will show a tooltip with additional information such as prototype,
-# brief description and links to the definition and documentation. Since this
-# will make the HTML file larger and loading of large files a bit slower, you
-# can opt to disable this feature.
-# The default value is: YES.
-# This tag requires that the tag SOURCE_BROWSER is set to YES.
-
-SOURCE_TOOLTIPS        = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code will
-# point to the HTML generated by the htags(1) tool instead of doxygen built-in
-# source browser. The htags tool is part of GNU's global source tagging system
-# (see http://www.gnu.org/software/global/global.html). You will need version
-# 4.8.6 or higher.
-#
-# To use it do the following:
-# - Install the latest version of global
-# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
-# - Make sure the INPUT points to the root of the source tree
-# - Run doxygen as normal
-#
-# Doxygen will invoke htags (and that will in turn invoke gtags), so these
-# tools must be available from the command line (i.e. in the search path).
-#
-# The result: instead of the source browser generated by doxygen, the links to
-# source code will now point to the output of htags.
-# The default value is: NO.
-# This tag requires that the tag SOURCE_BROWSER is set to YES.
-
-USE_HTAGS              = NO
-
-# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
-# verbatim copy of the header file for each class for which an include is
-# specified. Set to NO to disable this.
-# See also: Section \class.
-# The default value is: YES.
-
-VERBATIM_HEADERS       = NO
-
-# If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the
-# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
-# cost of reduced performance. This can be particularly helpful with template
-# rich C++ code for which doxygen's built-in parser lacks the necessary type
-# information.
-# Note: The availability of this option depends on whether or not doxygen was
-# compiled with the --with-libclang option.
-# The default value is: NO.
-
-CLANG_ASSISTED_PARSING = NO
-
-# If clang assisted parsing is enabled you can provide the compiler with command
-# line options that you would normally use when invoking the compiler. Note that
-# the include paths will already be set by doxygen for the files and directories
-# specified with INPUT and INCLUDE_PATH.
-# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
-
-CLANG_OPTIONS          =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
-# compounds will be generated. Enable this if the project contains a lot of
-# classes, structs, unions or interfaces.
-# The default value is: YES.
-
-ALPHABETICAL_INDEX     = YES
-
-# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
-# which the alphabetical index list will be split.
-# Minimum value: 1, maximum value: 20, default value: 5.
-# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-
-COLS_IN_ALPHA_INDEX    = 5
-
-# In case all classes in a project start with a common prefix, all classes will
-# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
-# can be used to specify a prefix (or a list of prefixes) that should be ignored
-# while generating the index headers.
-# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-
-IGNORE_PREFIX          =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
-# The default value is: YES.
-
-GENERATE_HTML          = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: html.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_OUTPUT            = html
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
-# generated HTML page (for example: .htm, .php, .asp).
-# The default value is: .html.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FILE_EXTENSION    = .html
-
-# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
-# each generated HTML page. If the tag is left blank doxygen will generate a
-# standard header.
-#
-# To get valid HTML the header file that includes any scripts and style sheets
-# that doxygen needs, which is dependent on the configuration options used (e.g.
-# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
-# default header using
-# doxygen -w html new_header.html new_footer.html new_stylesheet.css
-# YourConfigFile
-# and then modify the file new_header.html. See also section "Doxygen usage"
-# for information on how to generate the default header that doxygen normally
-# uses.
-# Note: The header is subject to change so you typically have to regenerate the
-# default header when upgrading to a newer version of doxygen. For a description
-# of the possible markers and block names see the documentation.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_HEADER            =
-
-# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
-# generated HTML page. If the tag is left blank doxygen will generate a standard
-# footer. See HTML_HEADER for more information on how to generate a default
-# footer and what special commands can be used inside the footer. See also
-# section "Doxygen usage" for information on how to generate the default footer
-# that doxygen normally uses.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FOOTER            =
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
-# sheet that is used by each HTML page. It can be used to fine-tune the look of
-# the HTML output. If left blank doxygen will generate a default style sheet.
-# See also section "Doxygen usage" for information on how to generate the style
-# sheet that doxygen normally uses.
-# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
-# it is more robust and this tag (HTML_STYLESHEET) will in the future become
-# obsolete.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_STYLESHEET        =
-
-# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
-# cascading style sheets that are included after the standard style sheets
-# created by doxygen. Using this option one can overrule certain style aspects.
-# This is preferred over using HTML_STYLESHEET since it does not replace the
-# standard style sheet and is therefor more robust against future updates.
-# Doxygen will copy the style sheet files to the output directory.
-# Note: The order of the extra stylesheet files is of importance (e.g. the last
-# stylesheet in the list overrules the setting of the previous ones in the
-# list). For an example see the documentation.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_EXTRA_STYLESHEET  =
-
-# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the HTML output directory. Note
-# that these files will be copied to the base HTML output directory. Use the
-# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
-# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
-# files will be copied as-is; there are no commands or markers available.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_EXTRA_FILES       =
-
-# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
-# will adjust the colors in the stylesheet and background images according to
-# this color. Hue is specified as an angle on a colorwheel, see
-# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
-# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
-# purple, and 360 is red again.
-# Minimum value: 0, maximum value: 359, default value: 220.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_HUE    = 220
-
-# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
-# in the HTML output. For a value of 0 the output will use grayscales only. A
-# value of 255 will produce the most vivid colors.
-# Minimum value: 0, maximum value: 255, default value: 100.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_SAT    = 100
-
-# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
-# luminance component of the colors in the HTML output. Values below 100
-# gradually make the output lighter, whereas values above 100 make the output
-# darker. The value divided by 100 is the actual gamma applied, so 80 represents
-# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
-# change the gamma.
-# Minimum value: 40, maximum value: 240, default value: 80.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_GAMMA  = 80
-
-# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
-# page will contain the date and time when the page was generated. Setting this
-# to NO can help when comparing the output of multiple runs.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_TIMESTAMP         = NO
-
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
-# documentation will contain sections that can be hidden and shown after the
-# page has loaded.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_DYNAMIC_SECTIONS  = YES
-
-# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
-# shown in the various tree structured indices initially; the user can expand
-# and collapse entries dynamically later on. Doxygen will expand the tree to
-# such a level that at most the specified number of entries are visible (unless
-# a fully collapsed tree already exceeds this amount). So setting the number of
-# entries 1 will produce a full collapsed tree by default. 0 is a special value
-# representing an infinite number of entries and will result in a full expanded
-# tree by default.
-# Minimum value: 0, maximum value: 9999, default value: 100.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_INDEX_NUM_ENTRIES = 100
-
-# If the GENERATE_DOCSET tag is set to YES, additional index files will be
-# generated that can be used as input for Apple's Xcode 3 integrated development
-# environment (see: http://developer.apple.com/tools/xcode/), introduced with
-# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
-# Makefile in the HTML output directory. Running make will produce the docset in
-# that directory and running make install will install the docset in
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
-# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
-# for more information.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_DOCSET        = NO
-
-# This tag determines the name of the docset feed. A documentation feed provides
-# an umbrella under which multiple documentation sets from a single provider
-# (such as a company or product suite) can be grouped.
-# The default value is: Doxygen generated docs.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_FEEDNAME        = "Doxygen generated docs"
-
-# This tag specifies a string that should uniquely identify the documentation
-# set bundle. This should be a reverse domain-name style string, e.g.
-# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_BUNDLE_ID       = org.doxygen.Project
-
-# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
-# the documentation publisher. This should be a reverse domain-name style
-# string, e.g. com.mycompany.MyDocSet.documentation.
-# The default value is: org.doxygen.Publisher.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
-
-# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
-# The default value is: Publisher.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_PUBLISHER_NAME  = Publisher
-
-# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
-# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
-# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
-# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
-# Windows.
-#
-# The HTML Help Workshop contains a compiler that can convert all HTML output
-# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
-# files are now used as the Windows 98 help format, and will replace the old
-# Windows help format (.hlp) on all Windows platforms in the future. Compressed
-# HTML files also contain an index, a table of contents, and you can search for
-# words in the documentation. The HTML workshop also contains a viewer for
-# compressed HTML files.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_HTMLHELP      = NO
-
-# The CHM_FILE tag can be used to specify the file name of the resulting .chm
-# file. You can add a path in front of the file if the result should not be
-# written to the html output directory.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-CHM_FILE               =
-
-# The HHC_LOCATION tag can be used to specify the location (absolute path
-# including file name) of the HTML help compiler ( hhc.exe). If non-empty
-# doxygen will try to run the HTML help compiler on the generated index.hhp.
-# The file has to be specified with full path.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-HHC_LOCATION           =
-
-# The GENERATE_CHI flag controls if a separate .chi index file is generated (
-# YES) or that it should be included in the master .chm file ( NO).
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-GENERATE_CHI           = NO
-
-# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
-# and project file content.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-CHM_INDEX_ENCODING     =
-
-# The BINARY_TOC flag controls whether a binary table of contents is generated (
-# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it
-# enables the Previous and Next buttons.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-BINARY_TOC             = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members to
-# the table of contents of the HTML help documentation and to the tree view.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-TOC_EXPAND             = YES
-
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
-# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
-# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
-# (.qch) of the generated HTML documentation.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_QHP           = NO
-
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
-# the file name of the resulting .qch file. The path specified is relative to
-# the HTML output folder.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QCH_FILE               =
-
-# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
-# Project output. For more information please see Qt Help Project / Namespace
-# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_NAMESPACE          = org.doxygen.Project
-
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
-# Help Project output. For more information please see Qt Help Project / Virtual
-# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
-# folders).
-# The default value is: doc.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_VIRTUAL_FOLDER     = doc
-
-# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
-# filter to add. For more information please see Qt Help Project / Custom
-# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
-# filters).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_CUST_FILTER_NAME   =
-
-# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
-# custom filter to add. For more information please see Qt Help Project / Custom
-# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
-# filters).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_CUST_FILTER_ATTRS  =
-
-# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
-# project's filter section matches. Qt Help Project / Filter Attributes (see:
-# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_SECT_FILTER_ATTRS  =
-
-# The QHG_LOCATION tag can be used to specify the location of Qt's
-# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
-# generated .qhp file.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHG_LOCATION           =
-
-# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
-# generated, together with the HTML files, they form an Eclipse help plugin. To
-# install this plugin and make it available under the help contents menu in
-# Eclipse, the contents of the directory containing the HTML and XML files needs
-# to be copied into the plugins directory of eclipse. The name of the directory
-# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
-# After copying Eclipse needs to be restarted before the help appears.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_ECLIPSEHELP   = NO
-
-# A unique identifier for the Eclipse help plugin. When installing the plugin
-# the directory name containing the HTML and XML files should also have this
-# name. Each documentation set should have its own identifier.
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
-
-ECLIPSE_DOC_ID         = org.doxygen.Project
-
-# If you want full control over the layout of the generated HTML pages it might
-# be necessary to disable the index and replace it with your own. The
-# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
-# of each HTML page. A value of NO enables the index and the value YES disables
-# it. Since the tabs in the index contain the same information as the navigation
-# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-DISABLE_INDEX          = YES
-
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
-# structure should be generated to display hierarchical information. If the tag
-# value is set to YES, a side panel will be generated containing a tree-like
-# index structure (just like the one that is generated for HTML Help). For this
-# to work a browser that supports JavaScript, DHTML, CSS and frames is required
-# (i.e. any modern browser). Windows users are probably better off using the
-# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
-# further fine-tune the look of the index. As an example, the default style
-# sheet generated by doxygen has an example that shows how to put an image at
-# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
-# the same information as the tab index, you could consider setting
-# DISABLE_INDEX to YES when enabling this option.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_TREEVIEW      = YES
-
-# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
-# doxygen will group on one line in the generated HTML documentation.
-#
-# Note that a value of 0 will completely suppress the enum values from appearing
-# in the overview section.
-# Minimum value: 0, maximum value: 20, default value: 4.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-ENUM_VALUES_PER_LINE   = 1
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
-# to set the initial width (in pixels) of the frame in which the tree is shown.
-# Minimum value: 0, maximum value: 1500, default value: 250.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-TREEVIEW_WIDTH         = 250
-
-# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
-# external symbols imported via tag files in a separate window.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-EXT_LINKS_IN_WINDOW    = NO
-
-# Use this tag to change the font size of LaTeX formulas included as images in
-# the HTML documentation. When you change the font size after a successful
-# doxygen run you need to manually remove any form_*.png images from the HTML
-# output directory to force them to be regenerated.
-# Minimum value: 8, maximum value: 50, default value: 10.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-FORMULA_FONTSIZE       = 10
-
-# Use the FORMULA_TRANPARENT tag to determine whether or not the images
-# generated for formulas are transparent PNGs. Transparent PNGs are not
-# supported properly for IE 6.0, but are supported on all modern browsers.
-#
-# Note that when changing this option you need to delete any form_*.png files in
-# the HTML output directory before the changes have effect.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-FORMULA_TRANSPARENT    = YES
-
-# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
-# http://www.mathjax.org) which uses client side Javascript for the rendering
-# instead of using prerendered bitmaps. Use this if you do not have LaTeX
-# installed or if you want to formulas look prettier in the HTML output. When
-# enabled you may also need to install MathJax separately and configure the path
-# to it using the MATHJAX_RELPATH option.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-USE_MATHJAX            = NO
-
-# When MathJax is enabled you can set the default output format to be used for
-# the MathJax output. See the MathJax site (see:
-# http://docs.mathjax.org/en/latest/output.html) for more details.
-# Possible values are: HTML-CSS (which is slower, but has the best
-# compatibility), NativeMML (i.e. MathML) and SVG.
-# The default value is: HTML-CSS.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_FORMAT         = HTML-CSS
-
-# When MathJax is enabled you need to specify the location relative to the HTML
-# output directory using the MATHJAX_RELPATH option. The destination directory
-# should contain the MathJax.js script. For instance, if the mathjax directory
-# is located at the same level as the HTML output directory, then
-# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
-# Content Delivery Network so you can quickly see the result without installing
-# MathJax. However, it is strongly recommended to install a local copy of
-# MathJax from http://www.mathjax.org before deployment.
-# The default value is: http://cdn.mathjax.org/mathjax/latest.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
-
-# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
-# extension names that should be enabled during MathJax rendering. For example
-# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_EXTENSIONS     =
-
-# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
-# of code that will be used on startup of the MathJax code. See the MathJax site
-# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
-# example see the documentation.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_CODEFILE       =
-
-# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
-# the HTML output. The underlying search engine uses javascript and DHTML and
-# should work on any modern browser. Note that when using HTML help
-# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
-# there is already a search function so this one should typically be disabled.
-# For large projects the javascript based search engine can be slow, then
-# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
-# search using the keyboard; to jump to the search box use <access key> + S
-# (what the <access key> is depends on the OS and browser, but it is typically
-# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
-# key> to jump into the search results window, the results can be navigated
-# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
-# the search. The filter options can be selected when the cursor is inside the
-# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
-# to select a filter and <Enter> or <escape> to activate or cancel the filter
-# option.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-SEARCHENGINE           = NO
-
-# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-# implemented using a web server instead of a web client using Javascript. There
-# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
-# setting. When disabled, doxygen will generate a PHP script for searching and
-# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
-# and searching needs to be provided by external tools. See the section
-# "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SERVER_BASED_SEARCH    = NO
-
-# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
-# script for searching. Instead the search results are written to an XML file
-# which needs to be processed by an external indexer. Doxygen will invoke an
-# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
-# search results.
-#
-# Doxygen ships with an example indexer ( doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: http://xapian.org/).
-#
-# See the section "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH        = NO
-
-# The SEARCHENGINE_URL should point to a search engine hosted by a web server
-# which will return the search results when EXTERNAL_SEARCH is enabled.
-#
-# Doxygen ships with an example indexer ( doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: http://xapian.org/). See the section "External Indexing and
-# Searching" for details.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHENGINE_URL       =
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
-# search data is written to a file for indexing by an external tool. With the
-# SEARCHDATA_FILE tag the name of this file can be specified.
-# The default file is: searchdata.xml.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHDATA_FILE        = searchdata.xml
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
-# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
-# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
-# projects and redirect the results back to the right project.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH_ID     =
-
-# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
-# projects other than the one defined by this configuration file, but that are
-# all added to the same external search index. Each project needs to have a
-# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
-# to a relative location where the documentation can be found. The format is:
-# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTRA_SEARCH_MAPPINGS  =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.
-# The default value is: YES.
-
-GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked.
-#
-# Note that when enabling USE_PDFLATEX this option is only used for generating
-# bitmaps for formulas in the HTML output, but not in the Makefile that is
-# written to the output directory.
-# The default file is: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
-# index for LaTeX.
-# The default file is: makeindex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used by the
-# printer.
-# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
-# 14 inches) and executive (7.25 x 10.5 inches).
-# The default value is: a4.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PAPER_TYPE             = a4wide
-
-# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
-# that should be included in the LaTeX output. To get the times font for
-# instance you can specify
-# EXTRA_PACKAGES=times
-# If left blank no extra packages will be included.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-EXTRA_PACKAGES         =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
-# generated LaTeX document. The header should contain everything until the first
-# chapter. If it is left blank doxygen will generate a standard header. See
-# section "Doxygen usage" for information on how to let doxygen write the
-# default header to a separate file.
-#
-# Note: Only use a user-defined header if you know what you are doing! The
-# following commands have a special meaning inside the header: $title,
-# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
-# $projectbrief, $projectlogo. Doxygen will replace $title with the empy string,
-# for the replacement values of the other commands the user is refered to
-# HTML_HEADER.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HEADER           =
-
-# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
-# generated LaTeX document. The footer should contain everything after the last
-# chapter. If it is left blank doxygen will generate a standard footer. See
-# LATEX_HEADER for more information on how to generate a default footer and what
-# special commands can be used inside the footer.
-#
-# Note: Only use a user-defined footer if you know what you are doing!
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_FOOTER           =
-
-# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the LATEX_OUTPUT output
-# directory. Note that the files will be copied as-is; there are no commands or
-# markers available.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_FILES      =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
-# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
-# contain links (just like the HTML output) instead of page references. This
-# makes the output suitable for online browsing using a PDF viewer.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PDF_HYPERLINKS         = YES
-
-# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
-# the PDF file directly from the LaTeX files. Set this option to YES to get a
-# higher quality PDF documentation.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-USE_PDFLATEX           = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
-# command to the generated LaTeX files. This will instruct LaTeX to keep running
-# if errors occur, instead of asking the user for help. This option is also used
-# when generating formulas in HTML.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BATCHMODE        = NO
-
-# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
-# index chapters (such as File Index, Compound Index, etc.) in the output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HIDE_INDICES     = NO
-
-# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
-# code with syntax highlighting in the LaTeX output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_SOURCE_CODE      = NO
-
-# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
-# bibliography, e.g. plainnat, or ieeetr. See
-# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
-# The default value is: plain.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BIB_STYLE        = plain
-
-#---------------------------------------------------------------------------
-# Configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The
-# RTF output is optimized for Word 97 and may not look too pretty with other RTF
-# readers/editors.
-# The default value is: NO.
-
-GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: rtf.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
-# contain hyperlink fields. The RTF file will contain links (just like the HTML
-# output) instead of page references. This makes the output suitable for online
-# browsing using Word or some other Word compatible readers that support those
-# fields.
-#
-# Note: WordPad (write) and others do not support links.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's config
-# file, i.e. a series of assignments. You only have to provide replacements,
-# missing definitions are set to their default value.
-#
-# See also section "Doxygen usage" for information on how to generate the
-# default style sheet that doxygen normally uses.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_STYLESHEET_FILE    =
-
-# Set optional variables used in the generation of an RTF document. Syntax is
-# similar to doxygen's config file. A template extensions file can be generated
-# using doxygen -e rtf extensionFile.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_EXTENSIONS_FILE    =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for
-# classes and files.
-# The default value is: NO.
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it. A directory man3 will be created inside the directory specified by
-# MAN_OUTPUT.
-# The default directory is: man.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to the generated
-# man pages. In case the manual section does not start with a number, the number
-# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
-# optional.
-# The default value is: .3.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_EXTENSION          = .3
-
-# The MAN_SUBDIR tag determines the name of the directory created within
-# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
-# MAN_EXTENSION with the initial . removed.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_SUBDIR             =
-
-# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
-# will generate one additional man file for each entity documented in the real
-# man page(s). These additional files only source the real man page, but without
-# them the man command would be unable to find the correct page.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that
-# captures the structure of the code including all documentation.
-# The default value is: NO.
-
-GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: xml.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_OUTPUT             = xml
-
-# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
-# listings (including syntax highlighting and cross-referencing information) to
-# the XML output. Note that enabling this will significantly increase the size
-# of the XML output.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_PROGRAMLISTING     = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to the DOCBOOK output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files
-# that can be used to generate PDF.
-# The default value is: NO.
-
-GENERATE_DOCBOOK       = NO
-
-# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
-# front of it.
-# The default directory is: docbook.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_OUTPUT         = docbook
-
-# If the DOCBOOK_PROGRAMLISTING tag is set to YES doxygen will include the
-# program listings (including syntax highlighting and cross-referencing
-# information) to the DOCBOOK output. Note that enabling this will significantly
-# increase the size of the DOCBOOK output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_PROGRAMLISTING = NO
-
-#---------------------------------------------------------------------------
-# Configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen
-# Definitions (see http://autogen.sf.net) file that captures the structure of
-# the code including all documentation. Note that this feature is still
-# experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module
-# file that captures the structure of the code including all documentation.
-#
-# Note that this feature is still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary
-# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
-# output from the Perl module output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely
-# formatted so it can be parsed by a human reader. This is useful if you want to
-# understand what is going on. On the other hand, if this tag is set to NO the
-# size of the Perl module output will be much smaller and Perl will parse it
-# just the same.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file are
-# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
-# so different doxyrules.make files included by the same Makefile don't
-# overwrite each other's variables.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all
-# C-preprocessor directives found in the sources and include files.
-# The default value is: YES.
-
-ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names
-# in the source code. If set to NO only conditional compilation will be
-# performed. Macro expansion can be done in a controlled way by setting
-# EXPAND_ONLY_PREDEF to YES.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-MACRO_EXPANSION        = YES
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
-# the macro expansion is limited to the macros specified with the PREDEFINED and
-# EXPAND_AS_DEFINED tags.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_ONLY_PREDEF     = YES
-
-# If the SEARCH_INCLUDES tag is set to YES the includes files in the
-# INCLUDE_PATH will be searched if a #include is found.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by the
-# preprocessor.
-# This tag requires that the tag SEARCH_INCLUDES is set to YES.
-
-INCLUDE_PATH           =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will be
-# used.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-INCLUDE_FILE_PATTERNS  =
-
-# The PREDEFINED tag can be used to specify one or more macro names that are
-# defined before the preprocessor is started (similar to the -D option of e.g.
-# gcc). The argument of the tag is a list of macros of the form: name or
-# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
-# is assumed. To prevent a macro definition from being undefined via #undef or
-# recursively expanded use the := operator instead of the = operator.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-PREDEFINED             = __DOXYGEN__ \
-                         PROGMEM
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
-# tag can be used to specify a list of macro names that should be expanded. The
-# macro definition that is found in the sources will be used. Use the PREDEFINED
-# tag if you want to use a different macro definition that overrules the
-# definition found in the source code.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_AS_DEFINED      =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
-# remove all references to function-like macros that are alone on a line, have
-# an all uppercase name, and do not end with a semicolon. Such function macros
-# are typically used for boiler-plate code, and will confuse the parser if not
-# removed.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES tag can be used to specify one or more tag files. For each tag
-# file the location of the external documentation should be added. The format of
-# a tag file without this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where loc1 and loc2 can be relative or absolute paths or URLs. See the
-# section "Linking to external documentation" for more information about the use
-# of tag files.
-# Note: Each tag file must have a unique name (where the name does NOT include
-# the path). If a tag file is not located in the directory in which doxygen is
-# run, you must also specify the path to the tagfile here.
-
-TAGFILES               =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
-# tag file that is based on the input files it reads. See section "Linking to
-# external documentation" for more information about the usage of tag files.
-
-GENERATE_TAGFILE       =
-
-# If the ALLEXTERNALS tag is set to YES all external class will be listed in the
-# class index. If set to NO only the inherited external classes will be listed.
-# The default value is: NO.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in
-# the modules index. If set to NO, only the current project's groups will be
-# listed.
-# The default value is: YES.
-
-EXTERNAL_GROUPS        = YES
-
-# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in
-# the related pages index. If set to NO, only the current project's pages will
-# be listed.
-# The default value is: YES.
-
-EXTERNAL_PAGES         = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of 'which perl').
-# The default file (with absolute path) is: /usr/bin/perl.
-
-PERL_PATH              = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram
-# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
-# NO turns the diagrams off. Note that this option also works with HAVE_DOT
-# disabled, but it is recommended to install and use dot, since it yields more
-# powerful graphs.
-# The default value is: YES.
-
-CLASS_DIAGRAMS         = NO
-
-# You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see:
-# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where
-# the mscgen tool resides. If left empty the tool is assumed to be found in the
-# default search path.
-
-MSCGEN_PATH            =
-
-# You can include diagrams made with dia in doxygen documentation. Doxygen will
-# then run dia to produce the diagram and insert it in the documentation. The
-# DIA_PATH tag allows you to specify the directory where the dia binary resides.
-# If left empty dia is assumed to be found in the default search path.
-
-DIA_PATH               =
-
-# If set to YES, the inheritance and collaboration graphs will hide inheritance
-# and usage relations if the target is undocumented or is not a class.
-# The default value is: YES.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz (see:
-# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
-# Bell Labs. The other options in this section have no effect if this option is
-# set to NO
-# The default value is: NO.
-
-HAVE_DOT               = NO
-
-# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
-# to run in parallel. When set to 0 doxygen will base this on the number of
-# processors available in the system. You can set it explicitly to a value
-# larger than 0 to get control over the balance between CPU load and processing
-# speed.
-# Minimum value: 0, maximum value: 32, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_NUM_THREADS        = 0
-
-# When you want a differently looking font in the dot files that doxygen
-# generates you can specify the font name using DOT_FONTNAME. You need to make
-# sure dot is able to find the font, which can be done by putting it in a
-# standard location or by setting the DOTFONTPATH environment variable or by
-# setting DOT_FONTPATH to the directory containing the font.
-# The default value is: Helvetica.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTNAME           =
-
-# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
-# dot graphs.
-# Minimum value: 4, maximum value: 24, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTSIZE           = 10
-
-# By default doxygen will tell dot to use the default font as specified with
-# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
-# the path where dot can find it using this tag.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTPATH           =
-
-# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
-# each documented class showing the direct and indirect inheritance relations.
-# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CLASS_GRAPH            = NO
-
-# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
-# graph for each documented class showing the direct and indirect implementation
-# dependencies (inheritance, containment, and class references variables) of the
-# class with other documented classes.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-COLLABORATION_GRAPH    = NO
-
-# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
-# groups, showing the direct groups dependencies.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GROUP_GRAPHS           = NO
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LOOK               = NO
-
-# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
-# class node. If there are many fields or methods and many nodes the graph may
-# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
-# number of items for each type to make the size more manageable. Set this to 0
-# for no limit. Note that the threshold may be exceeded by 50% before the limit
-# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
-# but if the number exceeds 15, the total amount of fields shown is limited to
-# 10.
-# Minimum value: 0, maximum value: 100, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LIMIT_NUM_FIELDS   = 10
-
-# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
-# collaboration graphs will show the relations between templates and their
-# instances.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-TEMPLATE_RELATIONS     = NO
-
-# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
-# YES then doxygen will generate a graph for each documented file showing the
-# direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDE_GRAPH          = NO
-
-# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
-# set to YES then doxygen will generate a graph for each documented file showing
-# the direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDED_BY_GRAPH      = NO
-
-# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
-# hierarchy of all classes instead of a textual one.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GRAPHICAL_HIERARCHY    = NO
-
-# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
-# dependencies a directory has on other directories in a graphical way. The
-# dependency relations are determined by the #include relations between the
-# files in the directories.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DIRECTORY_GRAPH        = NO
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot.
-# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
-# to make the SVG files visible in IE 9+ (other browsers do not have this
-# requirement).
-# Possible values are: png, jpg, gif and svg.
-# The default value is: png.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_IMAGE_FORMAT       = png
-
-# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
-# enable generation of interactive SVG images that allow zooming and panning.
-#
-# Note that this requires a modern browser other than Internet Explorer. Tested
-# and working are Firefox, Chrome, Safari, and Opera.
-# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
-# the SVG files visible. Older versions of IE do not have SVG support.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INTERACTIVE_SVG        = NO
-
-# The DOT_PATH tag can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_PATH               =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the \dotfile
-# command).
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOTFILE_DIRS           =
-
-# The MSCFILE_DIRS tag can be used to specify one or more directories that
-# contain msc files that are included in the documentation (see the \mscfile
-# command).
-
-MSCFILE_DIRS           =
-
-# The DIAFILE_DIRS tag can be used to specify one or more directories that
-# contain dia files that are included in the documentation (see the \diafile
-# command).
-
-DIAFILE_DIRS           =
-
-# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
-# path where java can find the plantuml.jar file. If left blank, it is assumed
-# PlantUML is not used or called during a preprocessing step. Doxygen will
-# generate a warning when it encounters a \startuml command in this case and
-# will not generate output for the diagram.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-PLANTUML_JAR_PATH      =
-
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
-# that will be shown in the graph. If the number of nodes in a graph becomes
-# larger than this value, doxygen will truncate the graph, which is visualized
-# by representing a node as a red box. Note that doxygen if the number of direct
-# children of the root node in a graph is already larger than
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
-# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-# Minimum value: 0, maximum value: 10000, default value: 50.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_GRAPH_MAX_NODES    = 15
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
-# generated by dot. A depth value of 3 means that only nodes reachable from the
-# root by following a path via at most 3 edges will be shown. Nodes that lay
-# further from the root node will be omitted. Note that setting this option to 1
-# or 2 may greatly reduce the computation time needed for large code bases. Also
-# note that the size of a graph can be further restricted by
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-# Minimum value: 0, maximum value: 1000, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-MAX_DOT_GRAPH_DEPTH    = 2
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, because dot on Windows does not seem
-# to support this out of the box.
-#
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-# read).
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_TRANSPARENT        = YES
-
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10) support
-# this, this feature is disabled by default.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_MULTI_TARGETS      = NO
-
-# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
-# explaining the meaning of the various boxes and arrows in the dot generated
-# graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot
-# files that are used to generate the various graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_CLEANUP            = YES

+ 0 - 38
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/AudioOutput/makefile

@@ -1,38 +0,0 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2014.
-#
-#  dean [at] fourwalledcubicle [dot] com
-#           www.lufa-lib.org
-#
-# --------------------------------------
-#         LUFA Project Makefile.
-# --------------------------------------
-
-# Run "make help" for target help.
-
-MCU          = at90usb1287
-ARCH         = AVR8
-BOARD        = USBKEY
-F_CPU        = 8000000
-F_USB        = $(F_CPU)
-OPTIMIZATION = s
-TARGET       = AudioOutput
-SRC          = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
-LUFA_PATH    = ../../../../LUFA
-CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -IConfig/
-LD_FLAGS     =
-
-# Default target
-all:
-
-# Include LUFA build script makefiles
-include $(LUFA_PATH)/Build/lufa_core.mk
-include $(LUFA_PATH)/Build/lufa_sources.mk
-include $(LUFA_PATH)/Build/lufa_build.mk
-include $(LUFA_PATH)/Build/lufa_cppcheck.mk
-include $(LUFA_PATH)/Build/lufa_doxygen.mk
-include $(LUFA_PATH)/Build/lufa_dfu.mk
-include $(LUFA_PATH)/Build/lufa_hid.mk
-include $(LUFA_PATH)/Build/lufa_avrdude.mk
-include $(LUFA_PATH)/Build/lufa_atprogram.mk

+ 0 - 126
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/DualMIDI/Config/LUFAConfig.h

@@ -1,126 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2014.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaims all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *  \brief LUFA Library Configuration Header File
- *
- *  This header file is used to configure LUFA's compile time options,
- *  as an alternative to the compile time constants supplied through
- *  a makefile.
- *
- *  For information on what each token does, refer to the LUFA
- *  manual section "Summary of Compile Tokens".
- */
-
-#ifndef _LUFA_CONFIG_H_
-#define _LUFA_CONFIG_H_
-
-	#if (ARCH == ARCH_AVR8)
-
-		/* Non-USB Related Configuration Tokens: */
-//		#define DISABLE_TERMINAL_CODES
-
-		/* USB Class Driver Related Tokens: */
-//		#define HID_HOST_BOOT_PROTOCOL_ONLY
-//		#define HID_STATETABLE_STACK_DEPTH       {Insert Value Here}
-//		#define HID_USAGE_STACK_DEPTH            {Insert Value Here}
-//		#define HID_MAX_COLLECTIONS              {Insert Value Here}
-//		#define HID_MAX_REPORTITEMS              {Insert Value Here}
-//		#define HID_MAX_REPORT_IDS               {Insert Value Here}
-//		#define NO_CLASS_DRIVER_AUTOFLUSH
-
-		/* General USB Driver Related Tokens: */
-//		#define ORDERED_EP_CONFIG
-		#define USE_STATIC_OPTIONS               (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)
-		#define USB_DEVICE_ONLY
-//		#define USB_HOST_ONLY
-//		#define USB_STREAM_TIMEOUT_MS            {Insert Value Here}
-//		#define NO_LIMITED_CONTROLLER_CONNECT
-//		#define NO_SOF_EVENTS
-
-		/* USB Device Mode Driver Related Tokens: */
-//		#define USE_RAM_DESCRIPTORS
-		#define USE_FLASH_DESCRIPTORS
-//		#define USE_EEPROM_DESCRIPTORS
-//		#define NO_INTERNAL_SERIAL
-		#define FIXED_CONTROL_ENDPOINT_SIZE      8
-//		#define DEVICE_STATE_AS_GPIOR            {Insert Value Here}
-		#define FIXED_NUM_CONFIGURATIONS         1
-//		#define CONTROL_ONLY_DEVICE
-//		#define INTERRUPT_CONTROL_ENDPOINT
-//		#define NO_DEVICE_REMOTE_WAKEUP
-//		#define NO_DEVICE_SELF_POWER
-
-		/* USB Host Mode Driver Related Tokens: */
-//		#define HOST_STATE_AS_GPIOR              {Insert Value Here}
-//		#define USB_HOST_TIMEOUT_MS              {Insert Value Here}
-//		#define HOST_DEVICE_SETTLE_DELAY_MS	     {Insert Value Here}
-//		#define NO_AUTO_VBUS_MANAGEMENT
-//		#define INVERTED_VBUS_ENABLE_LINE
-
-	#elif (ARCH == ARCH_XMEGA)
-
-		/* Non-USB Related Configuration Tokens: */
-//		#define DISABLE_TERMINAL_CODES
-
-		/* USB Class Driver Related Tokens: */
-//		#define HID_HOST_BOOT_PROTOCOL_ONLY
-//		#define HID_STATETABLE_STACK_DEPTH       {Insert Value Here}
-//		#define HID_USAGE_STACK_DEPTH            {Insert Value Here}
-//		#define HID_MAX_COLLECTIONS              {Insert Value Here}
-//		#define HID_MAX_REPORTITEMS              {Insert Value Here}
-//		#define HID_MAX_REPORT_IDS               {Insert Value Here}
-//		#define NO_CLASS_DRIVER_AUTOFLUSH
-
-		/* General USB Driver Related Tokens: */
-		#define USE_STATIC_OPTIONS               (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH)
-//		#define USB_STREAM_TIMEOUT_MS            {Insert Value Here}
-//		#define NO_LIMITED_CONTROLLER_CONNECT
-//		#define NO_SOF_EVENTS
-
-		/* USB Device Mode Driver Related Tokens: */
-//		#define USE_RAM_DESCRIPTORS
-		#define USE_FLASH_DESCRIPTORS
-//		#define USE_EEPROM_DESCRIPTORS
-//		#define NO_INTERNAL_SERIAL
-		#define FIXED_CONTROL_ENDPOINT_SIZE      8
-//		#define DEVICE_STATE_AS_GPIOR            {Insert Value Here}
-		#define FIXED_NUM_CONFIGURATIONS         1
-//		#define CONTROL_ONLY_DEVICE
-		#define MAX_ENDPOINT_INDEX               2
-//		#define NO_DEVICE_REMOTE_WAKEUP
-//		#define NO_DEVICE_SELF_POWER
-
-	#else
-
-		#error Unsupported architecture for this LUFA configuration file.
-
-	#endif
-#endif

+ 0 - 366
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/DualMIDI/Descriptors.c

@@ -1,366 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2014.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaims all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
- *  computer-readable structures which the host requests upon device enumeration, to determine
- *  the device's capabilities and functions.
- */
-
-#include "Descriptors.h"
-
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
- *  device characteristics, including the supported USB version, control endpoint size and the
- *  number of device configurations. The descriptor is read out by the USB host when the enumeration
- *  process begins.
- */
-const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
-{
-	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
-
-	.USBSpecification       = VERSION_BCD(1,1,0),
-	.Class                  = USB_CSCP_NoDeviceClass,
-	.SubClass               = USB_CSCP_NoDeviceSubclass,
-	.Protocol               = USB_CSCP_NoDeviceProtocol,
-
-	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
-
-	.VendorID               = 0x03EB,
-	.ProductID              = 0x206D,
-	.ReleaseNumber          = VERSION_BCD(0,0,2),
-
-	.ManufacturerStrIndex   = STRING_ID_Manufacturer,
-	.ProductStrIndex        = STRING_ID_Product,
-	.SerialNumStrIndex      = NO_DESCRIPTOR,
-
-	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
-};
-
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage
- *  of the device in one of its supported configurations, including information about any device interfaces
- *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
- *  a configuration so that the host may correctly communicate with the USB device.
- */
-const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
-{
-	.Config =
-		{
-			.Header                   = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
-
-			.TotalConfigurationSize   = sizeof(USB_Descriptor_Configuration_t),
-			.TotalInterfaces          = 2,
-
-			.ConfigurationNumber      = 1,
-			.ConfigurationStrIndex    = NO_DESCRIPTOR,
-
-			.ConfigAttributes         = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED),
-
-			.MaxPowerConsumption      = USB_CONFIG_POWER_MA(100)
-		},
-
-	.Audio_ControlInterface =
-		{
-			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber          = INTERFACE_ID_AudioControl,
-			.AlternateSetting         = 0,
-
-			.TotalEndpoints           = 0,
-
-			.Class                    = AUDIO_CSCP_AudioClass,
-			.SubClass                 = AUDIO_CSCP_ControlSubclass,
-			.Protocol                 = AUDIO_CSCP_ControlProtocol,
-
-			.InterfaceStrIndex        = NO_DESCRIPTOR
-		},
-
-	.Audio_ControlInterface_SPC =
-		{
-			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_Interface_AC_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_Header,
-
-			.ACSpecification          = VERSION_BCD(1,0,0),
-			.TotalLength              = sizeof(USB_Audio_Descriptor_Interface_AC_t),
-
-			.InCollection             = 1,
-			.InterfaceNumber          = INTERFACE_ID_AudioStream,
-		},
-
-	.Audio_StreamInterface =
-		{
-			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber          = INTERFACE_ID_AudioStream,
-			.AlternateSetting         = 0,
-
-			.TotalEndpoints           = 2,
-
-			.Class                    = AUDIO_CSCP_AudioClass,
-			.SubClass                 = AUDIO_CSCP_MIDIStreamingSubclass,
-			.Protocol                 = AUDIO_CSCP_StreamingProtocol,
-
-			.InterfaceStrIndex        = NO_DESCRIPTOR
-		},
-
-	.Audio_StreamInterface_SPC =
-		{
-			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_AudioInterface_AS_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_General,
-
-			.AudioSpecification       = VERSION_BCD(1,0,0),
-
-			.TotalLength              = (sizeof(USB_Descriptor_Configuration_t) -
-			                             offsetof(USB_Descriptor_Configuration_t, Audio_StreamInterface_SPC))
-		},
-
-	.MIDI_In_Jack_Emb =
-		{
-			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_InputTerminal,
-
-			.JackType                 = MIDI_JACKTYPE_Embedded,
-			.JackID                   = 0x01,
-
-			.JackStrIndex             = NO_DESCRIPTOR
-		},
-
-	.MIDI_In_Jack_Emb2 =
-		{
-			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_InputTerminal,
-
-			.JackType                 = MIDI_JACKTYPE_Embedded,
-			.JackID                   = 0x02,
-
-			.JackStrIndex             = NO_DESCRIPTOR
-		},
-
-	.MIDI_In_Jack_Ext =
-		{
-			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_InputTerminal,
-
-			.JackType                 = MIDI_JACKTYPE_External,
-			.JackID                   = 0x03,
-
-			.JackStrIndex             = NO_DESCRIPTOR
-		},
-
-	.MIDI_In_Jack_Ext2 =
-		{
-			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_InputTerminal,
-
-			.JackType                 = MIDI_JACKTYPE_External,
-			.JackID                   = 0x04,
-
-			.JackStrIndex             = NO_DESCRIPTOR
-		},
-
-	.MIDI_Out_Jack_Emb =
-		{
-			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_OutputTerminal,
-
-			.JackType                 = MIDI_JACKTYPE_Embedded,
-			.JackID                   = 0x05,
-
-			.NumberOfPins             = 1,
-			.SourceJackID             = {0x03},
-			.SourcePinID              = {0x01},
-
-			.JackStrIndex             = NO_DESCRIPTOR
-		},
-
-	.MIDI_Out_Jack_Emb2 =
-		{
-			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_OutputTerminal,
-
-			.JackType                 = MIDI_JACKTYPE_Embedded,
-			.JackID                   = 0x06,
-
-			.NumberOfPins             = 1,
-			.SourceJackID             = {0x04},
-			.SourcePinID              = {0x01},
-
-			.JackStrIndex             = NO_DESCRIPTOR
-		},
-
-	.MIDI_Out_Jack_Ext =
-		{
-			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_OutputTerminal,
-
-			.JackType                 = MIDI_JACKTYPE_External,
-			.JackID                   = 0x07,
-
-			.NumberOfPins             = 1,
-			.SourceJackID             = {0x01},
-			.SourcePinID              = {0x01},
-
-			.JackStrIndex             = NO_DESCRIPTOR
-		},
-
-	.MIDI_Out_Jack_Ext2 =
-		{
-			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_OutputTerminal,
-
-			.JackType                 = MIDI_JACKTYPE_External,
-			.JackID                   = 0x08,
-
-			.NumberOfPins             = 1,
-			.SourceJackID             = {0x02},
-			.SourcePinID              = {0x01},
-
-			.JackStrIndex             = NO_DESCRIPTOR
-		},
-
-	.MIDI_In_Jack_Endpoint =
-		{
-			.Endpoint =
-				{
-					.Header              = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint},
-
-					.EndpointAddress     = MIDI_STREAM_OUT_EPADDR,
-					.Attributes          = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-					.EndpointSize        = MIDI_STREAM_EPSIZE,
-					.PollingIntervalMS   = 0x05
-				},
-
-			.Refresh                  = 0,
-			.SyncEndpointNumber       = 0
-		},
-
-	.MIDI_In_Jack_Endpoint_SPC =
-		{
-			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_DualJack_Endpoint_t), .Type = DTYPE_CSEndpoint},
-			.Subtype                  = AUDIO_DSUBTYPE_CSEndpoint_General,
-
-			.TotalEmbeddedJacks       = 0x02,
-			.AssociatedJackID         = {0x01, 0x02}
-		},
-
-	.MIDI_Out_Jack_Endpoint =
-		{
-			.Endpoint =
-				{
-					.Header              = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint},
-
-					.EndpointAddress     = MIDI_STREAM_IN_EPADDR,
-					.Attributes          = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-					.EndpointSize        = MIDI_STREAM_EPSIZE,
-					.PollingIntervalMS   = 0x05
-				},
-
-			.Refresh                  = 0,
-			.SyncEndpointNumber       = 0
-		},
-
-	.MIDI_Out_Jack_Endpoint_SPC =
-		{
-			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_DualJack_Endpoint_t), .Type = DTYPE_CSEndpoint},
-			.Subtype                  = AUDIO_DSUBTYPE_CSEndpoint_General,
-
-			.TotalEmbeddedJacks       = 0x02,
-			.AssociatedJackID         = {0x05, 0x06}
-		}
-};
-
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
- *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate
- *  via the language ID table available at USB.org what languages the device supports for its string descriptors.
- */
-const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(LANGUAGE_ID_ENG);
-
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable
- *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- *  Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(L"Dean Camera");
-
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
- *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- *  Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Dual MIDI Demo");
-
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
- *  documentation) by the application code so that the address and size of a requested descriptor can be given
- *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
- *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
- *  USB host.
- */
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
-                                    const uint8_t wIndex,
-                                    const void** const DescriptorAddress)
-{
-	const uint8_t  DescriptorType   = (wValue >> 8);
-	const uint8_t  DescriptorNumber = (wValue & 0xFF);
-
-	const void* Address = NULL;
-	uint16_t    Size    = NO_DESCRIPTOR;
-
-	switch (DescriptorType)
-	{
-		case DTYPE_Device:
-			Address = &DeviceDescriptor;
-			Size    = sizeof(USB_Descriptor_Device_t);
-			break;
-		case DTYPE_Configuration:
-			Address = &ConfigurationDescriptor;
-			Size    = sizeof(USB_Descriptor_Configuration_t);
-			break;
-		case DTYPE_String:
-			switch (DescriptorNumber)
-			{
-				case STRING_ID_Language:
-					Address = &LanguageString;
-					Size    = pgm_read_byte(&LanguageString.Header.Size);
-					break;
-				case STRING_ID_Manufacturer:
-					Address = &ManufacturerString;
-					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
-					break;
-				case STRING_ID_Product:
-					Address = &ProductString;
-					Size    = pgm_read_byte(&ProductString.Header.Size);
-					break;
-			}
-
-			break;
-	}
-
-	*DescriptorAddress = Address;
-	return Size;
-}
-

+ 0 - 124
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/DualMIDI/Descriptors.h

@@ -1,124 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2014.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaims all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  Header file for Descriptors.c.
- */
-
-#ifndef _DESCRIPTORS_H_
-#define _DESCRIPTORS_H_
-
-	/* Includes: */
-		#include <LUFA/Drivers/USB/USB.h>
-
-		#include <avr/pgmspace.h>
-
-	/* Macros: */
-		/** Endpoint address of the MIDI streaming data IN endpoint, for device-to-host data transfers. */
-		#define MIDI_STREAM_IN_EPADDR       (ENDPOINT_DIR_IN  | 2)
-
-		/** Endpoint address of the MIDI streaming data OUT endpoint, for host-to-device data transfers. */
-		#define MIDI_STREAM_OUT_EPADDR      (ENDPOINT_DIR_OUT | 1)
-
-		/** Endpoint size in bytes of the Audio isochronous streaming data IN and OUT endpoints. */
-		#define MIDI_STREAM_EPSIZE          64
-
-	/* Type Defines: */
- 		/** Type define for a dual jack endpoint descriptor. This is identical to the LUFA MIDI class driver's
- 		 *  USB_MIDI_Descriptor_Jack_Endpoint_t, except that it contains two jack association entries.
- 		 */
-		typedef struct
-		{
-			USB_Descriptor_Header_t   Header; /**< Regular descriptor header containing the descriptor's type and length. */
-			uint8_t                   Subtype; /**< Sub type value used to distinguish between audio class-specific descriptors. */
-
-			uint8_t                   TotalEmbeddedJacks; /**< Total number of jacks inside this endpoint. */
-			uint8_t                   AssociatedJackID[2]; /**< IDs of each jack inside the endpoint. */
-		} ATTR_PACKED USB_MIDI_Descriptor_DualJack_Endpoint_t;
-
-		/** Type define for the device configuration descriptor structure. This must be defined in the
-		 *  application code, as the configuration descriptor contains several sub-descriptors which
-		 *  vary between devices, and which describe the device's usage to the host.
-		 */
-		typedef struct
-		{
-			USB_Descriptor_Configuration_Header_t     Config;
-
-			// MIDI Audio Control Interface
-			USB_Descriptor_Interface_t                Audio_ControlInterface;
-			USB_Audio_Descriptor_Interface_AC_t       Audio_ControlInterface_SPC;
-
-			// MIDI Audio Streaming Interface
-			USB_Descriptor_Interface_t                Audio_StreamInterface;
-			USB_MIDI_Descriptor_AudioInterface_AS_t   Audio_StreamInterface_SPC;
-			USB_MIDI_Descriptor_InputJack_t           MIDI_In_Jack_Emb;
-			USB_MIDI_Descriptor_InputJack_t           MIDI_In_Jack_Emb2;
-			USB_MIDI_Descriptor_InputJack_t           MIDI_In_Jack_Ext;
-			USB_MIDI_Descriptor_InputJack_t           MIDI_In_Jack_Ext2;
-			USB_MIDI_Descriptor_OutputJack_t          MIDI_Out_Jack_Emb;
-			USB_MIDI_Descriptor_OutputJack_t          MIDI_Out_Jack_Emb2;
-			USB_MIDI_Descriptor_OutputJack_t          MIDI_Out_Jack_Ext;
-			USB_MIDI_Descriptor_OutputJack_t          MIDI_Out_Jack_Ext2;
-			USB_Audio_Descriptor_StreamEndpoint_Std_t MIDI_In_Jack_Endpoint;
-			USB_MIDI_Descriptor_DualJack_Endpoint_t   MIDI_In_Jack_Endpoint_SPC;
-			USB_Audio_Descriptor_StreamEndpoint_Std_t MIDI_Out_Jack_Endpoint;
-			USB_MIDI_Descriptor_DualJack_Endpoint_t   MIDI_Out_Jack_Endpoint_SPC;
-		} USB_Descriptor_Configuration_t;
-
-		/** Enum for the device interface descriptor IDs within the device. Each interface descriptor
-		 *  should have a unique ID index associated with it, which can be used to refer to the
-		 *  interface from other descriptors.
-		 */
-		enum InterfaceDescriptors_t
-		{
-			INTERFACE_ID_AudioControl = 0, /**< Audio control interface descriptor ID */
-			INTERFACE_ID_AudioStream  = 1, /**< Audio streaming interface descriptor ID */
-		};
-
-		/** Enum for the device string descriptor IDs within the device. Each string descriptor should
-		 *  have a unique ID index associated with it, which can be used to refer to the string from
-		 *  other descriptors.
-		 */
-		enum StringDescriptors_t
-		{
-			STRING_ID_Language     = 0, /**< Supported Languages string descriptor ID (must be zero) */
-			STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
-			STRING_ID_Product      = 2, /**< Product string ID */
-		};
-
-	/* Function Prototypes: */
-		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
-		                                    const uint8_t wIndex,
-		                                    const void** const DescriptorAddress)
-		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
-
-#endif
-

+ 0 - 211
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/DualMIDI/DualMIDI.c

@@ -1,211 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2014.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaims all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  Main source file for the Dual MIDI demo. This file contains the main tasks of
- *  the demo and is responsible for the initial application hardware configuration.
- */
-
-#include "DualMIDI.h"
-
-/** LUFA MIDI Class driver interface configuration and state information. This structure is
- *  passed to all MIDI Class driver functions, so that multiple instances of the same class
- *  within a device can be differentiated from one another.
- */
-USB_ClassInfo_MIDI_Device_t Keyboard_MIDI_Interface =
-	{
-		.Config =
-			{
-				.StreamingInterfaceNumber = INTERFACE_ID_AudioStream,
-				.DataINEndpoint           =
-					{
-						.Address          = MIDI_STREAM_IN_EPADDR,
-						.Size             = MIDI_STREAM_EPSIZE,
-						.Banks            = 1,
-					},
-				.DataOUTEndpoint          =
-					{
-						.Address          = MIDI_STREAM_OUT_EPADDR,
-						.Size             = MIDI_STREAM_EPSIZE,
-						.Banks            = 1,
-					},
-			},
-	};
-
-
-/** Main program entry point. This routine contains the overall program flow, including initial
- *  setup of all components and the main program loop.
- */
-int main(void)
-{
-	SetupHardware();
-
-	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
-	GlobalInterruptEnable();
-
-	for (;;)
-	{
-		CheckJoystickMovement();
-
-		MIDI_EventPacket_t ReceivedMIDIEvent;
-		while (MIDI_Device_ReceiveEventPacket(&Keyboard_MIDI_Interface, &ReceivedMIDIEvent))
-		{
-			if ((ReceivedMIDIEvent.Event == MIDI_EVENT(0, MIDI_COMMAND_NOTE_ON)) && (ReceivedMIDIEvent.Data3 > 0))
-			  LEDs_SetAllLEDs(ReceivedMIDIEvent.Data2 > 64 ? LEDS_LED1 : LEDS_LED2);
-			else
-			  LEDs_SetAllLEDs(LEDS_NO_LEDS);
-		}
-
-		MIDI_Device_USBTask(&Keyboard_MIDI_Interface);
-		USB_USBTask();
-	}
-}
-
-/** Configures the board hardware and chip peripherals for the demo's functionality. */
-void SetupHardware(void)
-{
-#if (ARCH == ARCH_AVR8)
-	/* Disable watchdog if enabled by bootloader/fuses */
-	MCUSR &= ~(1 << WDRF);
-	wdt_disable();
-
-	/* Disable clock division */
-	clock_prescale_set(clock_div_1);
-#elif (ARCH == ARCH_XMEGA)
-	/* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */
-	XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU);
-	XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL);
-
-	/* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */
-	XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ);
-	XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB);
-
-	PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm;
-#endif
-
-	/* Hardware Initialization */
-	Joystick_Init();
-	LEDs_Init();
-	Buttons_Init();
-	USB_Init();
-}
-
-/** Checks for changes in the position of the board joystick, sending MIDI events to the host upon each change. */
-void CheckJoystickMovement(void)
-{
-	static uint8_t PrevJoystickStatus;
-
-	uint8_t MIDICommand = 0;
-	uint8_t MIDIPitch;
-
-	/* Get current joystick mask, XOR with previous to detect joystick changes */
-	uint8_t JoystickStatus  = Joystick_GetStatus();
-	uint8_t JoystickChanges = (JoystickStatus ^ PrevJoystickStatus);
-
-	/* Get board button status - if pressed use second virtual cable, otherwise use the first */
-	uint8_t VirtualCable = (Buttons_GetStatus() & BUTTONS_BUTTON1) ? 1 : 0;
-
-	if (JoystickChanges & JOY_LEFT)
-	{
-		MIDICommand = ((JoystickStatus & JOY_LEFT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);
-		MIDIPitch   = 0x3C;
-	}
-
-	if (JoystickChanges & JOY_UP)
-	{
-		MIDICommand = ((JoystickStatus & JOY_UP)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);
-		MIDIPitch   = 0x3D;
-	}
-
-	if (JoystickChanges & JOY_RIGHT)
-	{
-		MIDICommand = ((JoystickStatus & JOY_RIGHT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);
-		MIDIPitch   = 0x3E;
-	}
-
-	if (JoystickChanges & JOY_DOWN)
-	{
-		MIDICommand = ((JoystickStatus & JOY_DOWN)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);
-		MIDIPitch   = 0x3F;
-	}
-
-	if (JoystickChanges & JOY_PRESS)
-	{
-		MIDICommand = ((JoystickStatus & JOY_PRESS)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);
-		MIDIPitch   = 0x3B;
-	}
-
-	if (MIDICommand)
-	{
-		MIDI_EventPacket_t MIDIEvent = (MIDI_EventPacket_t)
-			{
-				.Event       = MIDI_EVENT(VirtualCable, MIDICommand),
-
-				.Data1       = MIDICommand | MIDI_CHANNEL(1),
-				.Data2       = MIDIPitch,
-				.Data3       = MIDI_STANDARD_VELOCITY,
-			};
-
-		MIDI_Device_SendEventPacket(&Keyboard_MIDI_Interface, &MIDIEvent);
-		MIDI_Device_Flush(&Keyboard_MIDI_Interface);
-	}
-
-	PrevJoystickStatus = JoystickStatus;
-}
-
-/** Event handler for the library USB Connection event. */
-void EVENT_USB_Device_Connect(void)
-{
-	LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
-}
-
-/** Event handler for the library USB Disconnection event. */
-void EVENT_USB_Device_Disconnect(void)
-{
-	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
-}
-
-/** Event handler for the library USB Configuration Changed event. */
-void EVENT_USB_Device_ConfigurationChanged(void)
-{
-	bool ConfigSuccess = true;
-
-	ConfigSuccess &= MIDI_Device_ConfigureEndpoints(&Keyboard_MIDI_Interface);
-
-	LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR);
-}
-
-/** Event handler for the library USB Control Request reception event. */
-void EVENT_USB_Device_ControlRequest(void)
-{
-	MIDI_Device_ProcessControlRequest(&Keyboard_MIDI_Interface);
-}
-

+ 0 - 78
tmk_core/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/DualMIDI/DualMIDI.h

@@ -1,78 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2014.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaims all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  Header file for DualMIDI.c.
- */
-
-#ifndef _DUAL_MIDI_H_
-#define _DUAL_MIDI_H_
-
-	/* Includes: */
-		#include <avr/io.h>
-		#include <avr/wdt.h>
-		#include <avr/power.h>
-		#include <avr/interrupt.h>
-		#include <stdbool.h>
-		#include <string.h>
-
-		#include "Descriptors.h"
-
-		#include <LUFA/Drivers/Board/LEDs.h>
-		#include <LUFA/Drivers/Board/Joystick.h>
-		#include <LUFA/Drivers/Board/Buttons.h>
-		#include <LUFA/Drivers/USB/USB.h>
-		#include <LUFA/Platform/Platform.h>
-
-	/* Macros: */
-		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
-		#define LEDMASK_USB_NOTREADY      LEDS_LED1
-
-		/** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */
-		#define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)
-
-		/** LED mask for the library LED driver, to indicate that the USB interface is ready. */
-		#define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)
-
-		/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
-		#define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)
-
-	/* Function Prototypes: */
-		void SetupHardware(void);
-		void CheckJoystickMovement(void);
-
-		void EVENT_USB_Device_Connect(void);
-		void EVENT_USB_Device_Disconnect(void);
-		void EVENT_USB_Device_ConfigurationChanged(void);
-		void EVENT_USB_Device_ControlRequest(void);
-
-#endif
-

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff