From b0ae032ae5712e38471c9347af289f3e50b0a08a Mon Sep 17 00:00:00 2001 From: Oliver Schinagl Date: Thu, 9 Dec 2004 14:00:26 +0000 Subject: Added defines makeing it possible to split the application in various parts namely: Loader (loads data from the smart media into ram) Equalizer (The 'normal' known application) Visualization (The graphical visualization) --- Graphic_Equalizer/Graphic_Equalizer.hp | 574 ------------- Graphic_Equalizer/Graphic_Equalizer.hw | 2 - Graphic_Equalizer/Graphic_Equalizer.pref | 164 ---- Graphic_Equalizer/data/graph_mask.raw | 639 -------------- Graphic_Equalizer/data/help.raw | Bin 921600 -> 0 bytes Graphic_Equalizer/data/help_mask.raw | Bin 307200 -> 0 bytes Graphic_Equalizer/data/orig/graph_mask.bmp | Bin 308278 -> 0 bytes Graphic_Equalizer/data/orig/help.bmp | Bin 921656 -> 0 bytes Graphic_Equalizer/data/orig/help_mask.bmp | Bin 308278 -> 0 bytes Graphic_Equalizer/data/orig/skin.bmp | Bin 921656 -> 0 bytes Graphic_Equalizer/data/orig/skin_mask.bmp | Bin 308278 -> 0 bytes Graphic_Equalizer/data/preset_demo.bin | Bin 384 -> 0 bytes Graphic_Equalizer/data/preset_reset.bin | Bin 448 -> 0 bytes Graphic_Equalizer/data/presets_hardcoded.txt | 13 - Graphic_Equalizer/data/skin.raw | Bin 921600 -> 0 bytes Graphic_Equalizer/data/skin_mask.raw | Bin 307200 -> 0 bytes Graphic_Equalizer/doc/html/annotated.html | 19 - .../doc/html/audio_2main_8hcc-source.html | 76 -- Graphic_Equalizer/doc/html/audio_8hcc-source.html | 69 -- Graphic_Equalizer/doc/html/audio_8hcc.html | 190 ----- Graphic_Equalizer/doc/html/audio_8hcc__incl.map | 3 - Graphic_Equalizer/doc/html/audio_8hcc__incl.md5 | 1 - Graphic_Equalizer/doc/html/audio_8hcc__incl.png | Bin 1800 -> 0 bytes Graphic_Equalizer/doc/html/audio_8hch-source.html | 84 -- Graphic_Equalizer/doc/html/audio_8hch.html | 496 ----------- .../doc/html/audio_8hch__dep__incl.map | 7 - .../doc/html/audio_8hch__dep__incl.md5 | 1 - .../doc/html/audio_8hch__dep__incl.png | Bin 2183 -> 0 bytes .../doc/html/configuration_8hch-source.html | 53 -- Graphic_Equalizer/doc/html/configuration_8hch.html | 240 ------ .../doc/html/configuration_8hch__dep__incl.map | 10 - .../doc/html/configuration_8hch__dep__incl.md5 | 1 - .../doc/html/configuration_8hch__dep__incl.png | Bin 3114 -> 0 bytes Graphic_Equalizer/doc/html/dir_000000.html | 20 - Graphic_Equalizer/doc/html/dir_000001.html | 20 - Graphic_Equalizer/doc/html/dir_000002.html | 22 - Graphic_Equalizer/doc/html/dir_000003.html | 49 -- Graphic_Equalizer/doc/html/dir_000004.html | 36 - Graphic_Equalizer/doc/html/dirs.html | 25 - .../doc/html/display_8hcc-source.html | 310 ------- Graphic_Equalizer/doc/html/display_8hcc.html | 252 ------ Graphic_Equalizer/doc/html/display_8hcc__incl.map | 8 - Graphic_Equalizer/doc/html/display_8hcc__incl.md5 | 1 - Graphic_Equalizer/doc/html/display_8hcc__incl.png | Bin 3637 -> 0 bytes .../doc/html/display_8hch-source.html | 49 -- Graphic_Equalizer/doc/html/display_8hch.html | 348 -------- .../doc/html/display_8hch__dep__incl.map | 5 - .../doc/html/display_8hch__dep__incl.md5 | 1 - .../doc/html/display_8hch__dep__incl.png | Bin 1808 -> 0 bytes .../doc/html/display__shared_8hch-source.html | 62 -- .../doc/html/display__shared_8hch.html | 691 ---------------- .../doc/html/display__shared_8hch__dep__incl.map | 5 - .../doc/html/display__shared_8hch__dep__incl.md5 | 1 - .../doc/html/display__shared_8hch__dep__incl.png | Bin 1911 -> 0 bytes Graphic_Equalizer/doc/html/doxygen.css | 271 ------ Graphic_Equalizer/doc/html/doxygen.png | Bin 1281 -> 0 bytes .../doc/html/eventhandler_8hcc-source.html | 299 ------- Graphic_Equalizer/doc/html/eventhandler_8hcc.html | 191 ----- .../doc/html/eventhandler_8hcc__incl.map | 9 - .../doc/html/eventhandler_8hcc__incl.md5 | 1 - .../doc/html/eventhandler_8hcc__incl.png | Bin 4001 -> 0 bytes .../doc/html/eventhandler_8hcc_a2_cgraph.map | 3 - .../doc/html/eventhandler_8hcc_a2_cgraph.md5 | 1 - .../doc/html/eventhandler_8hcc_a2_cgraph.png | Bin 1043 -> 0 bytes .../doc/html/eventhandler_8hcc_a3_cgraph.map | 3 - .../doc/html/eventhandler_8hcc_a3_cgraph.md5 | 1 - .../doc/html/eventhandler_8hcc_a3_cgraph.png | Bin 1043 -> 0 bytes .../doc/html/eventhandler_8hch-source.html | 36 - Graphic_Equalizer/doc/html/eventhandler_8hch.html | 202 ----- .../doc/html/eventhandler_8hch__dep__incl.map | 3 - .../doc/html/eventhandler_8hch__dep__incl.md5 | 1 - .../doc/html/eventhandler_8hch__dep__incl.png | Bin 1084 -> 0 bytes .../doc/html/eventhandler_8hch_a1_cgraph.map | 3 - .../doc/html/eventhandler_8hch_a1_cgraph.md5 | 1 - .../doc/html/eventhandler_8hch_a1_cgraph.png | Bin 1043 -> 0 bytes .../doc/html/eventhandler_8hch_a3_cgraph.map | 3 - .../doc/html/eventhandler_8hch_a3_cgraph.md5 | 1 - .../doc/html/eventhandler_8hch_a3_cgraph.png | Bin 1043 -> 0 bytes .../doc/html/eventhandler__shared_8hch-source.html | 68 -- .../doc/html/eventhandler__shared_8hch.html | 334 -------- .../html/eventhandler__shared_8hch__dep__incl.map | 6 - .../html/eventhandler__shared_8hch__dep__incl.md5 | 1 - .../html/eventhandler__shared_8hch__dep__incl.png | Bin 2233 -> 0 bytes Graphic_Equalizer/doc/html/events_8hcc-source.html | 60 -- Graphic_Equalizer/doc/html/events_8hcc.html | 202 ----- Graphic_Equalizer/doc/html/events_8hcc__incl.map | 4 - Graphic_Equalizer/doc/html/events_8hcc__incl.md5 | 1 - Graphic_Equalizer/doc/html/events_8hcc__incl.png | Bin 2785 -> 0 bytes Graphic_Equalizer/doc/html/events_8hch-source.html | 29 - Graphic_Equalizer/doc/html/events_8hch.html | 132 --- .../doc/html/events_8hch__dep__incl.map | 3 - .../doc/html/events_8hch__dep__incl.md5 | 1 - .../doc/html/events_8hch__dep__incl.png | Bin 1024 -> 0 bytes Graphic_Equalizer/doc/html/fft_8hcc-source.html | 445 ---------- Graphic_Equalizer/doc/html/fft_8hcc.html | 380 --------- Graphic_Equalizer/doc/html/fft_8hcc__incl.map | 5 - Graphic_Equalizer/doc/html/fft_8hcc__incl.md5 | 1 - Graphic_Equalizer/doc/html/fft_8hcc__incl.png | Bin 2759 -> 0 bytes Graphic_Equalizer/doc/html/fft_8hcc_a2_cgraph.map | 2 - Graphic_Equalizer/doc/html/fft_8hcc_a2_cgraph.md5 | 1 - Graphic_Equalizer/doc/html/fft_8hcc_a2_cgraph.png | Bin 522 -> 0 bytes Graphic_Equalizer/doc/html/fft_8hcc_a3_cgraph.map | 2 - Graphic_Equalizer/doc/html/fft_8hcc_a3_cgraph.md5 | 1 - Graphic_Equalizer/doc/html/fft_8hcc_a3_cgraph.png | Bin 522 -> 0 bytes Graphic_Equalizer/doc/html/fft_8hcc_a4_cgraph.map | 3 - Graphic_Equalizer/doc/html/fft_8hcc_a4_cgraph.md5 | 1 - Graphic_Equalizer/doc/html/fft_8hcc_a4_cgraph.png | Bin 724 -> 0 bytes Graphic_Equalizer/doc/html/fft_8hcc_a5_cgraph.map | 3 - Graphic_Equalizer/doc/html/fft_8hcc_a5_cgraph.md5 | 1 - Graphic_Equalizer/doc/html/fft_8hcc_a5_cgraph.png | Bin 745 -> 0 bytes Graphic_Equalizer/doc/html/fft_8hcc_a6_cgraph.map | 2 - Graphic_Equalizer/doc/html/fft_8hcc_a6_cgraph.md5 | 1 - Graphic_Equalizer/doc/html/fft_8hcc_a6_cgraph.png | Bin 560 -> 0 bytes Graphic_Equalizer/doc/html/fft_8hch-source.html | 48 -- Graphic_Equalizer/doc/html/fft_8hch.html | 261 ------ Graphic_Equalizer/doc/html/fft_8hch__dep__incl.map | 3 - Graphic_Equalizer/doc/html/fft_8hch__dep__incl.md5 | 1 - Graphic_Equalizer/doc/html/fft_8hch__dep__incl.png | Bin 732 -> 0 bytes Graphic_Equalizer/doc/html/fft_8hch_a3_cgraph.map | 3 - Graphic_Equalizer/doc/html/fft_8hch_a3_cgraph.md5 | 1 - Graphic_Equalizer/doc/html/fft_8hch_a3_cgraph.png | Bin 724 -> 0 bytes Graphic_Equalizer/doc/html/fft_8hch_a4_cgraph.map | 3 - Graphic_Equalizer/doc/html/fft_8hch_a4_cgraph.md5 | 1 - Graphic_Equalizer/doc/html/fft_8hch_a4_cgraph.png | Bin 745 -> 0 bytes Graphic_Equalizer/doc/html/fft_8hch_a5_cgraph.map | 2 - Graphic_Equalizer/doc/html/fft_8hch_a5_cgraph.md5 | 1 - Graphic_Equalizer/doc/html/fft_8hch_a5_cgraph.png | Bin 560 -> 0 bytes Graphic_Equalizer/doc/html/files.html | 37 - Graphic_Equalizer/doc/html/ftv2blank.png | Bin 174 -> 0 bytes Graphic_Equalizer/doc/html/ftv2doc.png | Bin 255 -> 0 bytes Graphic_Equalizer/doc/html/ftv2folderclosed.png | Bin 259 -> 0 bytes Graphic_Equalizer/doc/html/ftv2folderopen.png | Bin 261 -> 0 bytes Graphic_Equalizer/doc/html/ftv2lastnode.png | Bin 233 -> 0 bytes Graphic_Equalizer/doc/html/ftv2link.png | Bin 358 -> 0 bytes Graphic_Equalizer/doc/html/ftv2mlastnode.png | Bin 160 -> 0 bytes Graphic_Equalizer/doc/html/ftv2mnode.png | Bin 194 -> 0 bytes Graphic_Equalizer/doc/html/ftv2node.png | Bin 235 -> 0 bytes Graphic_Equalizer/doc/html/ftv2plastnode.png | Bin 165 -> 0 bytes Graphic_Equalizer/doc/html/ftv2pnode.png | Bin 200 -> 0 bytes Graphic_Equalizer/doc/html/ftv2vertline.png | Bin 229 -> 0 bytes Graphic_Equalizer/doc/html/functions.html | 40 - Graphic_Equalizer/doc/html/functions_vars.html | 40 - Graphic_Equalizer/doc/html/globals.html | 192 ----- Graphic_Equalizer/doc/html/globals_defs.html | 166 ---- Graphic_Equalizer/doc/html/globals_func.html | 33 - Graphic_Equalizer/doc/html/globals_vars.html | 25 - Graphic_Equalizer/doc/html/graph_legend.dot | 22 - Graphic_Equalizer/doc/html/graph_legend.html | 74 -- Graphic_Equalizer/doc/html/graph_legend.png | Bin 3938 -> 0 bytes Graphic_Equalizer/doc/html/index.html | 8 - Graphic_Equalizer/doc/html/main.html | 14 - Graphic_Equalizer/doc/html/main_8hcc-source.html | 153 ---- Graphic_Equalizer/doc/html/main_8hcc.html | 151 ---- Graphic_Equalizer/doc/html/main_8hcc__incl.map | 12 - Graphic_Equalizer/doc/html/main_8hcc__incl.md5 | 1 - Graphic_Equalizer/doc/html/main_8hcc__incl.png | Bin 4132 -> 0 bytes Graphic_Equalizer/doc/html/main_8hcc_a1_cgraph.map | 10 - Graphic_Equalizer/doc/html/main_8hcc_a1_cgraph.md5 | 1 - Graphic_Equalizer/doc/html/main_8hcc_a1_cgraph.png | Bin 3634 -> 0 bytes Graphic_Equalizer/doc/html/mouse_8hcc-source.html | 116 --- Graphic_Equalizer/doc/html/mouse_8hcc.html | 101 --- Graphic_Equalizer/doc/html/mouse_8hcc__incl.map | 4 - Graphic_Equalizer/doc/html/mouse_8hcc__incl.md5 | 1 - Graphic_Equalizer/doc/html/mouse_8hcc__incl.png | Bin 2471 -> 0 bytes Graphic_Equalizer/doc/html/mouse_8hch-source.html | 38 - Graphic_Equalizer/doc/html/mouse_8hch.html | 157 ---- .../doc/html/mouse_8hch__dep__incl.map | 3 - .../doc/html/mouse_8hch__dep__incl.md5 | 1 - .../doc/html/mouse_8hch__dep__incl.png | Bin 909 -> 0 bytes .../doc/html/mouse__shared_8hch-source.html | 53 -- Graphic_Equalizer/doc/html/mouse__shared_8hch.html | 247 ------ .../doc/html/mouse__shared_8hch__dep__incl.map | 6 - .../doc/html/mouse__shared_8hch__dep__incl.md5 | 1 - .../doc/html/mouse__shared_8hch__dep__incl.png | Bin 2211 -> 0 bytes Graphic_Equalizer/doc/html/runfft_8hcc-source.html | 168 ---- Graphic_Equalizer/doc/html/runfft_8hcc.html | 45 - Graphic_Equalizer/doc/html/runfft_8hcc__incl.map | 2 - Graphic_Equalizer/doc/html/runfft_8hcc__incl.md5 | 1 - Graphic_Equalizer/doc/html/runfft_8hcc__incl.png | Bin 1484 -> 0 bytes Graphic_Equalizer/doc/html/runfft_8hch-source.html | 15 - Graphic_Equalizer/doc/html/runfft_8hch.html | 66 -- .../doc/html/runfft_8hch__dep__incl.map | 2 - .../doc/html/runfft_8hch__dep__incl.md5 | 1 - .../doc/html/runfft_8hch__dep__incl.png | Bin 464 -> 0 bytes Graphic_Equalizer/doc/html/sample_8hcc-source.html | 78 -- Graphic_Equalizer/doc/html/sample_8hcc.html | 182 ---- Graphic_Equalizer/doc/html/sample_8hcc__incl.map | 2 - Graphic_Equalizer/doc/html/sample_8hcc__incl.md5 | 1 - Graphic_Equalizer/doc/html/sample_8hcc__incl.png | Bin 568 -> 0 bytes Graphic_Equalizer/doc/html/sample_8hch-source.html | 37 - Graphic_Equalizer/doc/html/sample_8hch.html | 89 -- .../doc/html/sample_8hch__dep__incl.map | 2 - .../doc/html/sample_8hch__dep__incl.md5 | 1 - .../doc/html/sample_8hch__dep__incl.png | Bin 568 -> 0 bytes .../doc/html/smartmedia_8hcc-source.html | 215 ----- Graphic_Equalizer/doc/html/smartmedia_8hcc.html | 153 ---- .../doc/html/smartmedia_8hcc__incl.map | 9 - .../doc/html/smartmedia_8hcc__incl.md5 | 1 - .../doc/html/smartmedia_8hcc__incl.png | Bin 4097 -> 0 bytes .../doc/html/smartmedia_8hch-source.html | 65 -- Graphic_Equalizer/doc/html/smartmedia_8hch.html | 406 --------- .../doc/html/smartmedia_8hch__dep__incl.map | 3 - .../doc/html/smartmedia_8hch__dep__incl.md5 | 1 - .../doc/html/smartmedia_8hch__dep__incl.png | Bin 1047 -> 0 bytes .../doc/html/smartmedia__shared_8hch-source.html | 77 -- .../doc/html/smartmedia__shared_8hch.html | 920 --------------------- .../html/smartmedia__shared_8hch__dep__incl.map | 3 - .../html/smartmedia__shared_8hch__dep__incl.md5 | 1 - .../html/smartmedia__shared_8hch__dep__incl.png | Bin 1183 -> 0 bytes Graphic_Equalizer/doc/html/structaudiodata__t.html | 77 -- Graphic_Equalizer/doc/html/structevents__t.html | 222 ----- Graphic_Equalizer/doc/html/structmousedata__t.html | 135 --- Graphic_Equalizer/doc/html/structskindata__t.html | 139 ---- .../html/structskindata__t_1_1skin__info__t.html | 189 ----- .../doc/html/structskindata__t__coll__graph.map | 2 - .../doc/html/structskindata__t__coll__graph.md5 | 1 - .../doc/html/structskindata__t__coll__graph.png | Bin 2660 -> 0 bytes Graphic_Equalizer/doc/html/tree.html | 200 ----- .../doc/html/weights__256_8hch-source.html | 278 ------- Graphic_Equalizer/doc/html/weights__256_8hch.html | 141 ---- .../doc/html/weights__256_8hch__dep__incl.map | 2 - .../doc/html/weights__256_8hch__dep__incl.md5 | 1 - .../doc/html/weights__256_8hch__dep__incl.png | Bin 633 -> 0 bytes Graphic_Equalizer/include/audio.hch | 87 -- Graphic_Equalizer/include/configuration.hch | 56 -- Graphic_Equalizer/include/display.hch | 52 -- Graphic_Equalizer/include/display_shared.hch | 80 -- Graphic_Equalizer/include/eventhandler.hch | 39 - Graphic_Equalizer/include/eventhandler_shared.hch | 71 -- Graphic_Equalizer/include/events.hch | 33 - Graphic_Equalizer/include/fft.hch | 34 - Graphic_Equalizer/include/mouse.hch | 41 - Graphic_Equalizer/include/mouse_shared.hch | 56 -- Graphic_Equalizer/include/runfft.hch | 1 - Graphic_Equalizer/include/smartmedia.hch | 68 -- Graphic_Equalizer/include/smartmedia_shared.hch | 80 -- Graphic_Equalizer/include/weights_256.hch | 264 ------ Graphic_Equalizer/src/audio.hcc | 102 --- Graphic_Equalizer/src/display.hcc | 338 -------- Graphic_Equalizer/src/eventhandler.hcc | 315 ------- Graphic_Equalizer/src/events.hcc | 76 -- Graphic_Equalizer/src/fft.hcc | 505 ----------- Graphic_Equalizer/src/main.hcc | 162 ---- Graphic_Equalizer/src/mouse.hcc | 131 --- Graphic_Equalizer/src/runfft.hcc | 182 ---- Graphic_Equalizer/src/smartmedia.hcc | 233 ------ Graphic_Equalizer_Split/Graphic_Equalizer.hp | 574 +++++++++++++ Graphic_Equalizer_Split/Graphic_Equalizer.hw | 2 + Graphic_Equalizer_Split/Graphic_Equalizer.pref | 164 ++++ Graphic_Equalizer_Split/data/graph_mask.raw | 639 ++++++++++++++ Graphic_Equalizer_Split/data/help.raw | Bin 0 -> 921600 bytes Graphic_Equalizer_Split/data/help_mask.raw | Bin 0 -> 307200 bytes Graphic_Equalizer_Split/data/orig/graph_mask.bmp | Bin 0 -> 308278 bytes Graphic_Equalizer_Split/data/orig/help.bmp | Bin 0 -> 921656 bytes Graphic_Equalizer_Split/data/orig/help_mask.bmp | Bin 0 -> 308278 bytes Graphic_Equalizer_Split/data/orig/skin.bmp | Bin 0 -> 921656 bytes Graphic_Equalizer_Split/data/orig/skin_mask.bmp | Bin 0 -> 308278 bytes Graphic_Equalizer_Split/data/preset_demo.bin | Bin 0 -> 384 bytes Graphic_Equalizer_Split/data/preset_reset.bin | Bin 0 -> 448 bytes Graphic_Equalizer_Split/data/presets_hardcoded.txt | 13 + Graphic_Equalizer_Split/data/skin.raw | Bin 0 -> 921600 bytes Graphic_Equalizer_Split/data/skin_mask.raw | Bin 0 -> 307200 bytes Graphic_Equalizer_Split/doc/html/annotated.html | 19 + .../doc/html/audio_2main_8hcc-source.html | 76 ++ .../doc/html/audio_8hcc-source.html | 69 ++ Graphic_Equalizer_Split/doc/html/audio_8hcc.html | 190 +++++ .../doc/html/audio_8hcc__incl.map | 3 + .../doc/html/audio_8hcc__incl.md5 | 1 + .../doc/html/audio_8hcc__incl.png | Bin 0 -> 1800 bytes .../doc/html/audio_8hch-source.html | 84 ++ Graphic_Equalizer_Split/doc/html/audio_8hch.html | 496 +++++++++++ .../doc/html/audio_8hch__dep__incl.map | 7 + .../doc/html/audio_8hch__dep__incl.md5 | 1 + .../doc/html/audio_8hch__dep__incl.png | Bin 0 -> 2183 bytes .../doc/html/configuration_8hch-source.html | 53 ++ .../doc/html/configuration_8hch.html | 240 ++++++ .../doc/html/configuration_8hch__dep__incl.map | 10 + .../doc/html/configuration_8hch__dep__incl.md5 | 1 + .../doc/html/configuration_8hch__dep__incl.png | Bin 0 -> 3114 bytes Graphic_Equalizer_Split/doc/html/dir_000000.html | 20 + Graphic_Equalizer_Split/doc/html/dir_000001.html | 20 + Graphic_Equalizer_Split/doc/html/dir_000002.html | 22 + Graphic_Equalizer_Split/doc/html/dir_000003.html | 49 ++ Graphic_Equalizer_Split/doc/html/dir_000004.html | 36 + Graphic_Equalizer_Split/doc/html/dirs.html | 25 + .../doc/html/display_8hcc-source.html | 310 +++++++ Graphic_Equalizer_Split/doc/html/display_8hcc.html | 252 ++++++ .../doc/html/display_8hcc__incl.map | 8 + .../doc/html/display_8hcc__incl.md5 | 1 + .../doc/html/display_8hcc__incl.png | Bin 0 -> 3637 bytes .../doc/html/display_8hch-source.html | 49 ++ Graphic_Equalizer_Split/doc/html/display_8hch.html | 348 ++++++++ .../doc/html/display_8hch__dep__incl.map | 5 + .../doc/html/display_8hch__dep__incl.md5 | 1 + .../doc/html/display_8hch__dep__incl.png | Bin 0 -> 1808 bytes .../doc/html/display__shared_8hch-source.html | 62 ++ .../doc/html/display__shared_8hch.html | 691 ++++++++++++++++ .../doc/html/display__shared_8hch__dep__incl.map | 5 + .../doc/html/display__shared_8hch__dep__incl.md5 | 1 + .../doc/html/display__shared_8hch__dep__incl.png | Bin 0 -> 1911 bytes Graphic_Equalizer_Split/doc/html/doxygen.css | 271 ++++++ Graphic_Equalizer_Split/doc/html/doxygen.png | Bin 0 -> 1281 bytes .../doc/html/eventhandler_8hcc-source.html | 299 +++++++ .../doc/html/eventhandler_8hcc.html | 191 +++++ .../doc/html/eventhandler_8hcc__incl.map | 9 + .../doc/html/eventhandler_8hcc__incl.md5 | 1 + .../doc/html/eventhandler_8hcc__incl.png | Bin 0 -> 4001 bytes .../doc/html/eventhandler_8hcc_a2_cgraph.map | 3 + .../doc/html/eventhandler_8hcc_a2_cgraph.md5 | 1 + .../doc/html/eventhandler_8hcc_a2_cgraph.png | Bin 0 -> 1043 bytes .../doc/html/eventhandler_8hcc_a3_cgraph.map | 3 + .../doc/html/eventhandler_8hcc_a3_cgraph.md5 | 1 + .../doc/html/eventhandler_8hcc_a3_cgraph.png | Bin 0 -> 1043 bytes .../doc/html/eventhandler_8hch-source.html | 36 + .../doc/html/eventhandler_8hch.html | 202 +++++ .../doc/html/eventhandler_8hch__dep__incl.map | 3 + .../doc/html/eventhandler_8hch__dep__incl.md5 | 1 + .../doc/html/eventhandler_8hch__dep__incl.png | Bin 0 -> 1084 bytes .../doc/html/eventhandler_8hch_a1_cgraph.map | 3 + .../doc/html/eventhandler_8hch_a1_cgraph.md5 | 1 + .../doc/html/eventhandler_8hch_a1_cgraph.png | Bin 0 -> 1043 bytes .../doc/html/eventhandler_8hch_a3_cgraph.map | 3 + .../doc/html/eventhandler_8hch_a3_cgraph.md5 | 1 + .../doc/html/eventhandler_8hch_a3_cgraph.png | Bin 0 -> 1043 bytes .../doc/html/eventhandler__shared_8hch-source.html | 68 ++ .../doc/html/eventhandler__shared_8hch.html | 334 ++++++++ .../html/eventhandler__shared_8hch__dep__incl.map | 6 + .../html/eventhandler__shared_8hch__dep__incl.md5 | 1 + .../html/eventhandler__shared_8hch__dep__incl.png | Bin 0 -> 2233 bytes .../doc/html/events_8hcc-source.html | 60 ++ Graphic_Equalizer_Split/doc/html/events_8hcc.html | 202 +++++ .../doc/html/events_8hcc__incl.map | 4 + .../doc/html/events_8hcc__incl.md5 | 1 + .../doc/html/events_8hcc__incl.png | Bin 0 -> 2785 bytes .../doc/html/events_8hch-source.html | 29 + Graphic_Equalizer_Split/doc/html/events_8hch.html | 132 +++ .../doc/html/events_8hch__dep__incl.map | 3 + .../doc/html/events_8hch__dep__incl.md5 | 1 + .../doc/html/events_8hch__dep__incl.png | Bin 0 -> 1024 bytes .../doc/html/fft_8hcc-source.html | 445 ++++++++++ Graphic_Equalizer_Split/doc/html/fft_8hcc.html | 380 +++++++++ .../doc/html/fft_8hcc__incl.map | 5 + .../doc/html/fft_8hcc__incl.md5 | 1 + .../doc/html/fft_8hcc__incl.png | Bin 0 -> 2759 bytes .../doc/html/fft_8hcc_a2_cgraph.map | 2 + .../doc/html/fft_8hcc_a2_cgraph.md5 | 1 + .../doc/html/fft_8hcc_a2_cgraph.png | Bin 0 -> 522 bytes .../doc/html/fft_8hcc_a3_cgraph.map | 2 + .../doc/html/fft_8hcc_a3_cgraph.md5 | 1 + .../doc/html/fft_8hcc_a3_cgraph.png | Bin 0 -> 522 bytes .../doc/html/fft_8hcc_a4_cgraph.map | 3 + .../doc/html/fft_8hcc_a4_cgraph.md5 | 1 + .../doc/html/fft_8hcc_a4_cgraph.png | Bin 0 -> 724 bytes .../doc/html/fft_8hcc_a5_cgraph.map | 3 + .../doc/html/fft_8hcc_a5_cgraph.md5 | 1 + .../doc/html/fft_8hcc_a5_cgraph.png | Bin 0 -> 745 bytes .../doc/html/fft_8hcc_a6_cgraph.map | 2 + .../doc/html/fft_8hcc_a6_cgraph.md5 | 1 + .../doc/html/fft_8hcc_a6_cgraph.png | Bin 0 -> 560 bytes .../doc/html/fft_8hch-source.html | 48 ++ Graphic_Equalizer_Split/doc/html/fft_8hch.html | 261 ++++++ .../doc/html/fft_8hch__dep__incl.map | 3 + .../doc/html/fft_8hch__dep__incl.md5 | 1 + .../doc/html/fft_8hch__dep__incl.png | Bin 0 -> 732 bytes .../doc/html/fft_8hch_a3_cgraph.map | 3 + .../doc/html/fft_8hch_a3_cgraph.md5 | 1 + .../doc/html/fft_8hch_a3_cgraph.png | Bin 0 -> 724 bytes .../doc/html/fft_8hch_a4_cgraph.map | 3 + .../doc/html/fft_8hch_a4_cgraph.md5 | 1 + .../doc/html/fft_8hch_a4_cgraph.png | Bin 0 -> 745 bytes .../doc/html/fft_8hch_a5_cgraph.map | 2 + .../doc/html/fft_8hch_a5_cgraph.md5 | 1 + .../doc/html/fft_8hch_a5_cgraph.png | Bin 0 -> 560 bytes Graphic_Equalizer_Split/doc/html/files.html | 37 + Graphic_Equalizer_Split/doc/html/ftv2blank.png | Bin 0 -> 174 bytes Graphic_Equalizer_Split/doc/html/ftv2doc.png | Bin 0 -> 255 bytes .../doc/html/ftv2folderclosed.png | Bin 0 -> 259 bytes .../doc/html/ftv2folderopen.png | Bin 0 -> 261 bytes Graphic_Equalizer_Split/doc/html/ftv2lastnode.png | Bin 0 -> 233 bytes Graphic_Equalizer_Split/doc/html/ftv2link.png | Bin 0 -> 358 bytes Graphic_Equalizer_Split/doc/html/ftv2mlastnode.png | Bin 0 -> 160 bytes Graphic_Equalizer_Split/doc/html/ftv2mnode.png | Bin 0 -> 194 bytes Graphic_Equalizer_Split/doc/html/ftv2node.png | Bin 0 -> 235 bytes Graphic_Equalizer_Split/doc/html/ftv2plastnode.png | Bin 0 -> 165 bytes Graphic_Equalizer_Split/doc/html/ftv2pnode.png | Bin 0 -> 200 bytes Graphic_Equalizer_Split/doc/html/ftv2vertline.png | Bin 0 -> 229 bytes Graphic_Equalizer_Split/doc/html/functions.html | 40 + .../doc/html/functions_vars.html | 40 + Graphic_Equalizer_Split/doc/html/globals.html | 192 +++++ Graphic_Equalizer_Split/doc/html/globals_defs.html | 166 ++++ Graphic_Equalizer_Split/doc/html/globals_func.html | 33 + Graphic_Equalizer_Split/doc/html/globals_vars.html | 25 + Graphic_Equalizer_Split/doc/html/graph_legend.dot | 22 + Graphic_Equalizer_Split/doc/html/graph_legend.html | 74 ++ Graphic_Equalizer_Split/doc/html/graph_legend.png | Bin 0 -> 3938 bytes Graphic_Equalizer_Split/doc/html/index.html | 8 + Graphic_Equalizer_Split/doc/html/main.html | 14 + .../doc/html/main_8hcc-source.html | 153 ++++ Graphic_Equalizer_Split/doc/html/main_8hcc.html | 151 ++++ .../doc/html/main_8hcc__incl.map | 12 + .../doc/html/main_8hcc__incl.md5 | 1 + .../doc/html/main_8hcc__incl.png | Bin 0 -> 4132 bytes .../doc/html/main_8hcc_a1_cgraph.map | 10 + .../doc/html/main_8hcc_a1_cgraph.md5 | 1 + .../doc/html/main_8hcc_a1_cgraph.png | Bin 0 -> 3634 bytes .../doc/html/mouse_8hcc-source.html | 116 +++ Graphic_Equalizer_Split/doc/html/mouse_8hcc.html | 101 +++ .../doc/html/mouse_8hcc__incl.map | 4 + .../doc/html/mouse_8hcc__incl.md5 | 1 + .../doc/html/mouse_8hcc__incl.png | Bin 0 -> 2471 bytes .../doc/html/mouse_8hch-source.html | 38 + Graphic_Equalizer_Split/doc/html/mouse_8hch.html | 157 ++++ .../doc/html/mouse_8hch__dep__incl.map | 3 + .../doc/html/mouse_8hch__dep__incl.md5 | 1 + .../doc/html/mouse_8hch__dep__incl.png | Bin 0 -> 909 bytes .../doc/html/mouse__shared_8hch-source.html | 53 ++ .../doc/html/mouse__shared_8hch.html | 247 ++++++ .../doc/html/mouse__shared_8hch__dep__incl.map | 6 + .../doc/html/mouse__shared_8hch__dep__incl.md5 | 1 + .../doc/html/mouse__shared_8hch__dep__incl.png | Bin 0 -> 2211 bytes .../doc/html/runfft_8hcc-source.html | 168 ++++ Graphic_Equalizer_Split/doc/html/runfft_8hcc.html | 45 + .../doc/html/runfft_8hcc__incl.map | 2 + .../doc/html/runfft_8hcc__incl.md5 | 1 + .../doc/html/runfft_8hcc__incl.png | Bin 0 -> 1484 bytes .../doc/html/runfft_8hch-source.html | 15 + Graphic_Equalizer_Split/doc/html/runfft_8hch.html | 66 ++ .../doc/html/runfft_8hch__dep__incl.map | 2 + .../doc/html/runfft_8hch__dep__incl.md5 | 1 + .../doc/html/runfft_8hch__dep__incl.png | Bin 0 -> 464 bytes .../doc/html/sample_8hcc-source.html | 78 ++ Graphic_Equalizer_Split/doc/html/sample_8hcc.html | 182 ++++ .../doc/html/sample_8hcc__incl.map | 2 + .../doc/html/sample_8hcc__incl.md5 | 1 + .../doc/html/sample_8hcc__incl.png | Bin 0 -> 568 bytes .../doc/html/sample_8hch-source.html | 37 + Graphic_Equalizer_Split/doc/html/sample_8hch.html | 89 ++ .../doc/html/sample_8hch__dep__incl.map | 2 + .../doc/html/sample_8hch__dep__incl.md5 | 1 + .../doc/html/sample_8hch__dep__incl.png | Bin 0 -> 568 bytes .../doc/html/smartmedia_8hcc-source.html | 215 +++++ .../doc/html/smartmedia_8hcc.html | 153 ++++ .../doc/html/smartmedia_8hcc__incl.map | 9 + .../doc/html/smartmedia_8hcc__incl.md5 | 1 + .../doc/html/smartmedia_8hcc__incl.png | Bin 0 -> 4097 bytes .../doc/html/smartmedia_8hch-source.html | 65 ++ .../doc/html/smartmedia_8hch.html | 406 +++++++++ .../doc/html/smartmedia_8hch__dep__incl.map | 3 + .../doc/html/smartmedia_8hch__dep__incl.md5 | 1 + .../doc/html/smartmedia_8hch__dep__incl.png | Bin 0 -> 1047 bytes .../doc/html/smartmedia__shared_8hch-source.html | 77 ++ .../doc/html/smartmedia__shared_8hch.html | 920 +++++++++++++++++++++ .../html/smartmedia__shared_8hch__dep__incl.map | 3 + .../html/smartmedia__shared_8hch__dep__incl.md5 | 1 + .../html/smartmedia__shared_8hch__dep__incl.png | Bin 0 -> 1183 bytes .../doc/html/structaudiodata__t.html | 77 ++ .../doc/html/structevents__t.html | 222 +++++ .../doc/html/structmousedata__t.html | 135 +++ .../doc/html/structskindata__t.html | 139 ++++ .../html/structskindata__t_1_1skin__info__t.html | 189 +++++ .../doc/html/structskindata__t__coll__graph.map | 2 + .../doc/html/structskindata__t__coll__graph.md5 | 1 + .../doc/html/structskindata__t__coll__graph.png | Bin 0 -> 2660 bytes Graphic_Equalizer_Split/doc/html/tree.html | 200 +++++ .../doc/html/weights__256_8hch-source.html | 278 +++++++ .../doc/html/weights__256_8hch.html | 141 ++++ .../doc/html/weights__256_8hch__dep__incl.map | 2 + .../doc/html/weights__256_8hch__dep__incl.md5 | 1 + .../doc/html/weights__256_8hch__dep__incl.png | Bin 0 -> 633 bytes Graphic_Equalizer_Split/include/audio.hch | 87 ++ Graphic_Equalizer_Split/include/configuration.hch | 56 ++ Graphic_Equalizer_Split/include/display.hch | 52 ++ Graphic_Equalizer_Split/include/display_shared.hch | 80 ++ Graphic_Equalizer_Split/include/eventhandler.hch | 39 + .../include/eventhandler_shared.hch | 71 ++ Graphic_Equalizer_Split/include/events.hch | 33 + Graphic_Equalizer_Split/include/fft.hch | 34 + Graphic_Equalizer_Split/include/mouse.hch | 41 + Graphic_Equalizer_Split/include/mouse_shared.hch | 56 ++ Graphic_Equalizer_Split/include/runfft.hch | 1 + Graphic_Equalizer_Split/include/smartmedia.hch | 68 ++ .../include/smartmedia_shared.hch | 80 ++ Graphic_Equalizer_Split/include/weights_256.hch | 264 ++++++ Graphic_Equalizer_Split/src/audio.hcc | 102 +++ Graphic_Equalizer_Split/src/display.hcc | 338 ++++++++ Graphic_Equalizer_Split/src/eventhandler.hcc | 315 +++++++ Graphic_Equalizer_Split/src/events.hcc | 76 ++ Graphic_Equalizer_Split/src/fft.hcc | 505 +++++++++++ Graphic_Equalizer_Split/src/main.hcc | 162 ++++ Graphic_Equalizer_Split/src/mouse.hcc | 131 +++ Graphic_Equalizer_Split/src/runfft.hcc | 182 ++++ Graphic_Equalizer_Split/src/smartmedia.hcc | 233 ++++++ 492 files changed, 16235 insertions(+), 16235 deletions(-) delete mode 100644 Graphic_Equalizer/Graphic_Equalizer.hp delete mode 100644 Graphic_Equalizer/Graphic_Equalizer.hw delete mode 100644 Graphic_Equalizer/Graphic_Equalizer.pref delete mode 100644 Graphic_Equalizer/data/graph_mask.raw delete mode 100644 Graphic_Equalizer/data/help.raw delete mode 100644 Graphic_Equalizer/data/help_mask.raw delete mode 100644 Graphic_Equalizer/data/orig/graph_mask.bmp delete mode 100644 Graphic_Equalizer/data/orig/help.bmp delete mode 100644 Graphic_Equalizer/data/orig/help_mask.bmp delete mode 100644 Graphic_Equalizer/data/orig/skin.bmp delete mode 100644 Graphic_Equalizer/data/orig/skin_mask.bmp delete mode 100644 Graphic_Equalizer/data/preset_demo.bin delete mode 100644 Graphic_Equalizer/data/preset_reset.bin delete mode 100644 Graphic_Equalizer/data/presets_hardcoded.txt delete mode 100644 Graphic_Equalizer/data/skin.raw delete mode 100644 Graphic_Equalizer/data/skin_mask.raw delete mode 100644 Graphic_Equalizer/doc/html/annotated.html delete mode 100644 Graphic_Equalizer/doc/html/audio_2main_8hcc-source.html delete mode 100644 Graphic_Equalizer/doc/html/audio_8hcc-source.html delete mode 100644 Graphic_Equalizer/doc/html/audio_8hcc.html delete mode 100644 Graphic_Equalizer/doc/html/audio_8hcc__incl.map delete mode 100644 Graphic_Equalizer/doc/html/audio_8hcc__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/audio_8hcc__incl.png delete mode 100644 Graphic_Equalizer/doc/html/audio_8hch-source.html delete mode 100644 Graphic_Equalizer/doc/html/audio_8hch.html delete mode 100644 Graphic_Equalizer/doc/html/audio_8hch__dep__incl.map delete mode 100644 Graphic_Equalizer/doc/html/audio_8hch__dep__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/audio_8hch__dep__incl.png delete mode 100644 Graphic_Equalizer/doc/html/configuration_8hch-source.html delete mode 100644 Graphic_Equalizer/doc/html/configuration_8hch.html delete mode 100644 Graphic_Equalizer/doc/html/configuration_8hch__dep__incl.map delete mode 100644 Graphic_Equalizer/doc/html/configuration_8hch__dep__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/configuration_8hch__dep__incl.png delete mode 100644 Graphic_Equalizer/doc/html/dir_000000.html delete mode 100644 Graphic_Equalizer/doc/html/dir_000001.html delete mode 100644 Graphic_Equalizer/doc/html/dir_000002.html delete mode 100644 Graphic_Equalizer/doc/html/dir_000003.html delete mode 100644 Graphic_Equalizer/doc/html/dir_000004.html delete mode 100644 Graphic_Equalizer/doc/html/dirs.html delete mode 100644 Graphic_Equalizer/doc/html/display_8hcc-source.html delete mode 100644 Graphic_Equalizer/doc/html/display_8hcc.html delete mode 100644 Graphic_Equalizer/doc/html/display_8hcc__incl.map delete mode 100644 Graphic_Equalizer/doc/html/display_8hcc__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/display_8hcc__incl.png delete mode 100644 Graphic_Equalizer/doc/html/display_8hch-source.html delete mode 100644 Graphic_Equalizer/doc/html/display_8hch.html delete mode 100644 Graphic_Equalizer/doc/html/display_8hch__dep__incl.map delete mode 100644 Graphic_Equalizer/doc/html/display_8hch__dep__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/display_8hch__dep__incl.png delete mode 100644 Graphic_Equalizer/doc/html/display__shared_8hch-source.html delete mode 100644 Graphic_Equalizer/doc/html/display__shared_8hch.html delete mode 100644 Graphic_Equalizer/doc/html/display__shared_8hch__dep__incl.map delete mode 100644 Graphic_Equalizer/doc/html/display__shared_8hch__dep__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/display__shared_8hch__dep__incl.png delete mode 100644 Graphic_Equalizer/doc/html/doxygen.css delete mode 100644 Graphic_Equalizer/doc/html/doxygen.png delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hcc-source.html delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hcc.html delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hcc__incl.map delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hcc__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hcc__incl.png delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hcc_a2_cgraph.map delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hcc_a2_cgraph.md5 delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hcc_a2_cgraph.png delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hcc_a3_cgraph.map delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hcc_a3_cgraph.md5 delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hcc_a3_cgraph.png delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hch-source.html delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hch.html delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hch__dep__incl.map delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hch__dep__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hch__dep__incl.png delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hch_a1_cgraph.map delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hch_a1_cgraph.md5 delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hch_a1_cgraph.png delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hch_a3_cgraph.map delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hch_a3_cgraph.md5 delete mode 100644 Graphic_Equalizer/doc/html/eventhandler_8hch_a3_cgraph.png delete mode 100644 Graphic_Equalizer/doc/html/eventhandler__shared_8hch-source.html delete mode 100644 Graphic_Equalizer/doc/html/eventhandler__shared_8hch.html delete mode 100644 Graphic_Equalizer/doc/html/eventhandler__shared_8hch__dep__incl.map delete mode 100644 Graphic_Equalizer/doc/html/eventhandler__shared_8hch__dep__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/eventhandler__shared_8hch__dep__incl.png delete mode 100644 Graphic_Equalizer/doc/html/events_8hcc-source.html delete mode 100644 Graphic_Equalizer/doc/html/events_8hcc.html delete mode 100644 Graphic_Equalizer/doc/html/events_8hcc__incl.map delete mode 100644 Graphic_Equalizer/doc/html/events_8hcc__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/events_8hcc__incl.png delete mode 100644 Graphic_Equalizer/doc/html/events_8hch-source.html delete mode 100644 Graphic_Equalizer/doc/html/events_8hch.html delete mode 100644 Graphic_Equalizer/doc/html/events_8hch__dep__incl.map delete mode 100644 Graphic_Equalizer/doc/html/events_8hch__dep__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/events_8hch__dep__incl.png delete mode 100644 Graphic_Equalizer/doc/html/fft_8hcc-source.html delete mode 100644 Graphic_Equalizer/doc/html/fft_8hcc.html delete mode 100644 Graphic_Equalizer/doc/html/fft_8hcc__incl.map delete mode 100644 Graphic_Equalizer/doc/html/fft_8hcc__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/fft_8hcc__incl.png delete mode 100644 Graphic_Equalizer/doc/html/fft_8hcc_a2_cgraph.map delete mode 100644 Graphic_Equalizer/doc/html/fft_8hcc_a2_cgraph.md5 delete mode 100644 Graphic_Equalizer/doc/html/fft_8hcc_a2_cgraph.png delete mode 100644 Graphic_Equalizer/doc/html/fft_8hcc_a3_cgraph.map delete mode 100644 Graphic_Equalizer/doc/html/fft_8hcc_a3_cgraph.md5 delete mode 100644 Graphic_Equalizer/doc/html/fft_8hcc_a3_cgraph.png delete mode 100644 Graphic_Equalizer/doc/html/fft_8hcc_a4_cgraph.map delete mode 100644 Graphic_Equalizer/doc/html/fft_8hcc_a4_cgraph.md5 delete mode 100644 Graphic_Equalizer/doc/html/fft_8hcc_a4_cgraph.png delete mode 100644 Graphic_Equalizer/doc/html/fft_8hcc_a5_cgraph.map delete mode 100644 Graphic_Equalizer/doc/html/fft_8hcc_a5_cgraph.md5 delete mode 100644 Graphic_Equalizer/doc/html/fft_8hcc_a5_cgraph.png delete mode 100644 Graphic_Equalizer/doc/html/fft_8hcc_a6_cgraph.map delete mode 100644 Graphic_Equalizer/doc/html/fft_8hcc_a6_cgraph.md5 delete mode 100644 Graphic_Equalizer/doc/html/fft_8hcc_a6_cgraph.png delete mode 100644 Graphic_Equalizer/doc/html/fft_8hch-source.html delete mode 100644 Graphic_Equalizer/doc/html/fft_8hch.html delete mode 100644 Graphic_Equalizer/doc/html/fft_8hch__dep__incl.map delete mode 100644 Graphic_Equalizer/doc/html/fft_8hch__dep__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/fft_8hch__dep__incl.png delete mode 100644 Graphic_Equalizer/doc/html/fft_8hch_a3_cgraph.map delete mode 100644 Graphic_Equalizer/doc/html/fft_8hch_a3_cgraph.md5 delete mode 100644 Graphic_Equalizer/doc/html/fft_8hch_a3_cgraph.png delete mode 100644 Graphic_Equalizer/doc/html/fft_8hch_a4_cgraph.map delete mode 100644 Graphic_Equalizer/doc/html/fft_8hch_a4_cgraph.md5 delete mode 100644 Graphic_Equalizer/doc/html/fft_8hch_a4_cgraph.png delete mode 100644 Graphic_Equalizer/doc/html/fft_8hch_a5_cgraph.map delete mode 100644 Graphic_Equalizer/doc/html/fft_8hch_a5_cgraph.md5 delete mode 100644 Graphic_Equalizer/doc/html/fft_8hch_a5_cgraph.png delete mode 100644 Graphic_Equalizer/doc/html/files.html delete mode 100644 Graphic_Equalizer/doc/html/ftv2blank.png delete mode 100644 Graphic_Equalizer/doc/html/ftv2doc.png delete mode 100644 Graphic_Equalizer/doc/html/ftv2folderclosed.png delete mode 100644 Graphic_Equalizer/doc/html/ftv2folderopen.png delete mode 100644 Graphic_Equalizer/doc/html/ftv2lastnode.png delete mode 100644 Graphic_Equalizer/doc/html/ftv2link.png delete mode 100644 Graphic_Equalizer/doc/html/ftv2mlastnode.png delete mode 100644 Graphic_Equalizer/doc/html/ftv2mnode.png delete mode 100644 Graphic_Equalizer/doc/html/ftv2node.png delete mode 100644 Graphic_Equalizer/doc/html/ftv2plastnode.png delete mode 100644 Graphic_Equalizer/doc/html/ftv2pnode.png delete mode 100644 Graphic_Equalizer/doc/html/ftv2vertline.png delete mode 100644 Graphic_Equalizer/doc/html/functions.html delete mode 100644 Graphic_Equalizer/doc/html/functions_vars.html delete mode 100644 Graphic_Equalizer/doc/html/globals.html delete mode 100644 Graphic_Equalizer/doc/html/globals_defs.html delete mode 100644 Graphic_Equalizer/doc/html/globals_func.html delete mode 100644 Graphic_Equalizer/doc/html/globals_vars.html delete mode 100644 Graphic_Equalizer/doc/html/graph_legend.dot delete mode 100644 Graphic_Equalizer/doc/html/graph_legend.html delete mode 100644 Graphic_Equalizer/doc/html/graph_legend.png delete mode 100644 Graphic_Equalizer/doc/html/index.html delete mode 100644 Graphic_Equalizer/doc/html/main.html delete mode 100644 Graphic_Equalizer/doc/html/main_8hcc-source.html delete mode 100644 Graphic_Equalizer/doc/html/main_8hcc.html delete mode 100644 Graphic_Equalizer/doc/html/main_8hcc__incl.map delete mode 100644 Graphic_Equalizer/doc/html/main_8hcc__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/main_8hcc__incl.png delete mode 100644 Graphic_Equalizer/doc/html/main_8hcc_a1_cgraph.map delete mode 100644 Graphic_Equalizer/doc/html/main_8hcc_a1_cgraph.md5 delete mode 100644 Graphic_Equalizer/doc/html/main_8hcc_a1_cgraph.png delete mode 100644 Graphic_Equalizer/doc/html/mouse_8hcc-source.html delete mode 100644 Graphic_Equalizer/doc/html/mouse_8hcc.html delete mode 100644 Graphic_Equalizer/doc/html/mouse_8hcc__incl.map delete mode 100644 Graphic_Equalizer/doc/html/mouse_8hcc__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/mouse_8hcc__incl.png delete mode 100644 Graphic_Equalizer/doc/html/mouse_8hch-source.html delete mode 100644 Graphic_Equalizer/doc/html/mouse_8hch.html delete mode 100644 Graphic_Equalizer/doc/html/mouse_8hch__dep__incl.map delete mode 100644 Graphic_Equalizer/doc/html/mouse_8hch__dep__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/mouse_8hch__dep__incl.png delete mode 100644 Graphic_Equalizer/doc/html/mouse__shared_8hch-source.html delete mode 100644 Graphic_Equalizer/doc/html/mouse__shared_8hch.html delete mode 100644 Graphic_Equalizer/doc/html/mouse__shared_8hch__dep__incl.map delete mode 100644 Graphic_Equalizer/doc/html/mouse__shared_8hch__dep__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/mouse__shared_8hch__dep__incl.png delete mode 100644 Graphic_Equalizer/doc/html/runfft_8hcc-source.html delete mode 100644 Graphic_Equalizer/doc/html/runfft_8hcc.html delete mode 100644 Graphic_Equalizer/doc/html/runfft_8hcc__incl.map delete mode 100644 Graphic_Equalizer/doc/html/runfft_8hcc__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/runfft_8hcc__incl.png delete mode 100644 Graphic_Equalizer/doc/html/runfft_8hch-source.html delete mode 100644 Graphic_Equalizer/doc/html/runfft_8hch.html delete mode 100644 Graphic_Equalizer/doc/html/runfft_8hch__dep__incl.map delete mode 100644 Graphic_Equalizer/doc/html/runfft_8hch__dep__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/runfft_8hch__dep__incl.png delete mode 100644 Graphic_Equalizer/doc/html/sample_8hcc-source.html delete mode 100644 Graphic_Equalizer/doc/html/sample_8hcc.html delete mode 100644 Graphic_Equalizer/doc/html/sample_8hcc__incl.map delete mode 100644 Graphic_Equalizer/doc/html/sample_8hcc__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/sample_8hcc__incl.png delete mode 100644 Graphic_Equalizer/doc/html/sample_8hch-source.html delete mode 100644 Graphic_Equalizer/doc/html/sample_8hch.html delete mode 100644 Graphic_Equalizer/doc/html/sample_8hch__dep__incl.map delete mode 100644 Graphic_Equalizer/doc/html/sample_8hch__dep__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/sample_8hch__dep__incl.png delete mode 100644 Graphic_Equalizer/doc/html/smartmedia_8hcc-source.html delete mode 100644 Graphic_Equalizer/doc/html/smartmedia_8hcc.html delete mode 100644 Graphic_Equalizer/doc/html/smartmedia_8hcc__incl.map delete mode 100644 Graphic_Equalizer/doc/html/smartmedia_8hcc__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/smartmedia_8hcc__incl.png delete mode 100644 Graphic_Equalizer/doc/html/smartmedia_8hch-source.html delete mode 100644 Graphic_Equalizer/doc/html/smartmedia_8hch.html delete mode 100644 Graphic_Equalizer/doc/html/smartmedia_8hch__dep__incl.map delete mode 100644 Graphic_Equalizer/doc/html/smartmedia_8hch__dep__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/smartmedia_8hch__dep__incl.png delete mode 100644 Graphic_Equalizer/doc/html/smartmedia__shared_8hch-source.html delete mode 100644 Graphic_Equalizer/doc/html/smartmedia__shared_8hch.html delete mode 100644 Graphic_Equalizer/doc/html/smartmedia__shared_8hch__dep__incl.map delete mode 100644 Graphic_Equalizer/doc/html/smartmedia__shared_8hch__dep__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/smartmedia__shared_8hch__dep__incl.png delete mode 100644 Graphic_Equalizer/doc/html/structaudiodata__t.html delete mode 100644 Graphic_Equalizer/doc/html/structevents__t.html delete mode 100644 Graphic_Equalizer/doc/html/structmousedata__t.html delete mode 100644 Graphic_Equalizer/doc/html/structskindata__t.html delete mode 100644 Graphic_Equalizer/doc/html/structskindata__t_1_1skin__info__t.html delete mode 100644 Graphic_Equalizer/doc/html/structskindata__t__coll__graph.map delete mode 100644 Graphic_Equalizer/doc/html/structskindata__t__coll__graph.md5 delete mode 100644 Graphic_Equalizer/doc/html/structskindata__t__coll__graph.png delete mode 100644 Graphic_Equalizer/doc/html/tree.html delete mode 100644 Graphic_Equalizer/doc/html/weights__256_8hch-source.html delete mode 100644 Graphic_Equalizer/doc/html/weights__256_8hch.html delete mode 100644 Graphic_Equalizer/doc/html/weights__256_8hch__dep__incl.map delete mode 100644 Graphic_Equalizer/doc/html/weights__256_8hch__dep__incl.md5 delete mode 100644 Graphic_Equalizer/doc/html/weights__256_8hch__dep__incl.png delete mode 100644 Graphic_Equalizer/include/audio.hch delete mode 100644 Graphic_Equalizer/include/configuration.hch delete mode 100644 Graphic_Equalizer/include/display.hch delete mode 100644 Graphic_Equalizer/include/display_shared.hch delete mode 100644 Graphic_Equalizer/include/eventhandler.hch delete mode 100644 Graphic_Equalizer/include/eventhandler_shared.hch delete mode 100644 Graphic_Equalizer/include/events.hch delete mode 100644 Graphic_Equalizer/include/fft.hch delete mode 100644 Graphic_Equalizer/include/mouse.hch delete mode 100644 Graphic_Equalizer/include/mouse_shared.hch delete mode 100644 Graphic_Equalizer/include/runfft.hch delete mode 100644 Graphic_Equalizer/include/smartmedia.hch delete mode 100644 Graphic_Equalizer/include/smartmedia_shared.hch delete mode 100644 Graphic_Equalizer/include/weights_256.hch delete mode 100644 Graphic_Equalizer/src/audio.hcc delete mode 100644 Graphic_Equalizer/src/display.hcc delete mode 100644 Graphic_Equalizer/src/eventhandler.hcc delete mode 100644 Graphic_Equalizer/src/events.hcc delete mode 100644 Graphic_Equalizer/src/fft.hcc delete mode 100644 Graphic_Equalizer/src/main.hcc delete mode 100644 Graphic_Equalizer/src/mouse.hcc delete mode 100644 Graphic_Equalizer/src/runfft.hcc delete mode 100644 Graphic_Equalizer/src/smartmedia.hcc create mode 100644 Graphic_Equalizer_Split/Graphic_Equalizer.hp create mode 100644 Graphic_Equalizer_Split/Graphic_Equalizer.hw create mode 100644 Graphic_Equalizer_Split/Graphic_Equalizer.pref create mode 100644 Graphic_Equalizer_Split/data/graph_mask.raw create mode 100644 Graphic_Equalizer_Split/data/help.raw create mode 100644 Graphic_Equalizer_Split/data/help_mask.raw create mode 100644 Graphic_Equalizer_Split/data/orig/graph_mask.bmp create mode 100644 Graphic_Equalizer_Split/data/orig/help.bmp create mode 100644 Graphic_Equalizer_Split/data/orig/help_mask.bmp create mode 100644 Graphic_Equalizer_Split/data/orig/skin.bmp create mode 100644 Graphic_Equalizer_Split/data/orig/skin_mask.bmp create mode 100644 Graphic_Equalizer_Split/data/preset_demo.bin create mode 100644 Graphic_Equalizer_Split/data/preset_reset.bin create mode 100644 Graphic_Equalizer_Split/data/presets_hardcoded.txt create mode 100644 Graphic_Equalizer_Split/data/skin.raw create mode 100644 Graphic_Equalizer_Split/data/skin_mask.raw create mode 100644 Graphic_Equalizer_Split/doc/html/annotated.html create mode 100644 Graphic_Equalizer_Split/doc/html/audio_2main_8hcc-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/audio_8hcc-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/audio_8hcc.html create mode 100644 Graphic_Equalizer_Split/doc/html/audio_8hcc__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/audio_8hcc__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/audio_8hcc__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/audio_8hch-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/audio_8hch.html create mode 100644 Graphic_Equalizer_Split/doc/html/audio_8hch__dep__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/audio_8hch__dep__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/audio_8hch__dep__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/configuration_8hch-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/configuration_8hch.html create mode 100644 Graphic_Equalizer_Split/doc/html/configuration_8hch__dep__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/configuration_8hch__dep__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/configuration_8hch__dep__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/dir_000000.html create mode 100644 Graphic_Equalizer_Split/doc/html/dir_000001.html create mode 100644 Graphic_Equalizer_Split/doc/html/dir_000002.html create mode 100644 Graphic_Equalizer_Split/doc/html/dir_000003.html create mode 100644 Graphic_Equalizer_Split/doc/html/dir_000004.html create mode 100644 Graphic_Equalizer_Split/doc/html/dirs.html create mode 100644 Graphic_Equalizer_Split/doc/html/display_8hcc-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/display_8hcc.html create mode 100644 Graphic_Equalizer_Split/doc/html/display_8hcc__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/display_8hcc__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/display_8hcc__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/display_8hch-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/display_8hch.html create mode 100644 Graphic_Equalizer_Split/doc/html/display_8hch__dep__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/display_8hch__dep__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/display_8hch__dep__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/display__shared_8hch-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/display__shared_8hch.html create mode 100644 Graphic_Equalizer_Split/doc/html/display__shared_8hch__dep__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/display__shared_8hch__dep__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/display__shared_8hch__dep__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/doxygen.css create mode 100644 Graphic_Equalizer_Split/doc/html/doxygen.png create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hcc-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hcc.html create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hcc__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hcc__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hcc__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a2_cgraph.map create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a2_cgraph.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a2_cgraph.png create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a3_cgraph.map create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a3_cgraph.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a3_cgraph.png create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hch-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hch.html create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hch__dep__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hch__dep__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hch__dep__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a1_cgraph.map create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a1_cgraph.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a1_cgraph.png create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a3_cgraph.map create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a3_cgraph.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a3_cgraph.png create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler__shared_8hch-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler__shared_8hch.html create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler__shared_8hch__dep__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler__shared_8hch__dep__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/eventhandler__shared_8hch__dep__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/events_8hcc-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/events_8hcc.html create mode 100644 Graphic_Equalizer_Split/doc/html/events_8hcc__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/events_8hcc__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/events_8hcc__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/events_8hch-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/events_8hch.html create mode 100644 Graphic_Equalizer_Split/doc/html/events_8hch__dep__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/events_8hch__dep__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/events_8hch__dep__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hcc-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hcc.html create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hcc__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hcc__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hcc__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hcc_a2_cgraph.map create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hcc_a2_cgraph.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hcc_a2_cgraph.png create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hcc_a3_cgraph.map create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hcc_a3_cgraph.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hcc_a3_cgraph.png create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hcc_a4_cgraph.map create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hcc_a4_cgraph.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hcc_a4_cgraph.png create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hcc_a5_cgraph.map create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hcc_a5_cgraph.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hcc_a5_cgraph.png create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hcc_a6_cgraph.map create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hcc_a6_cgraph.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hcc_a6_cgraph.png create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hch-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hch.html create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hch__dep__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hch__dep__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hch__dep__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hch_a3_cgraph.map create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hch_a3_cgraph.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hch_a3_cgraph.png create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hch_a4_cgraph.map create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hch_a4_cgraph.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hch_a4_cgraph.png create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hch_a5_cgraph.map create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hch_a5_cgraph.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/fft_8hch_a5_cgraph.png create mode 100644 Graphic_Equalizer_Split/doc/html/files.html create mode 100644 Graphic_Equalizer_Split/doc/html/ftv2blank.png create mode 100644 Graphic_Equalizer_Split/doc/html/ftv2doc.png create mode 100644 Graphic_Equalizer_Split/doc/html/ftv2folderclosed.png create mode 100644 Graphic_Equalizer_Split/doc/html/ftv2folderopen.png create mode 100644 Graphic_Equalizer_Split/doc/html/ftv2lastnode.png create mode 100644 Graphic_Equalizer_Split/doc/html/ftv2link.png create mode 100644 Graphic_Equalizer_Split/doc/html/ftv2mlastnode.png create mode 100644 Graphic_Equalizer_Split/doc/html/ftv2mnode.png create mode 100644 Graphic_Equalizer_Split/doc/html/ftv2node.png create mode 100644 Graphic_Equalizer_Split/doc/html/ftv2plastnode.png create mode 100644 Graphic_Equalizer_Split/doc/html/ftv2pnode.png create mode 100644 Graphic_Equalizer_Split/doc/html/ftv2vertline.png create mode 100644 Graphic_Equalizer_Split/doc/html/functions.html create mode 100644 Graphic_Equalizer_Split/doc/html/functions_vars.html create mode 100644 Graphic_Equalizer_Split/doc/html/globals.html create mode 100644 Graphic_Equalizer_Split/doc/html/globals_defs.html create mode 100644 Graphic_Equalizer_Split/doc/html/globals_func.html create mode 100644 Graphic_Equalizer_Split/doc/html/globals_vars.html create mode 100644 Graphic_Equalizer_Split/doc/html/graph_legend.dot create mode 100644 Graphic_Equalizer_Split/doc/html/graph_legend.html create mode 100644 Graphic_Equalizer_Split/doc/html/graph_legend.png create mode 100644 Graphic_Equalizer_Split/doc/html/index.html create mode 100644 Graphic_Equalizer_Split/doc/html/main.html create mode 100644 Graphic_Equalizer_Split/doc/html/main_8hcc-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/main_8hcc.html create mode 100644 Graphic_Equalizer_Split/doc/html/main_8hcc__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/main_8hcc__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/main_8hcc__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/main_8hcc_a1_cgraph.map create mode 100644 Graphic_Equalizer_Split/doc/html/main_8hcc_a1_cgraph.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/main_8hcc_a1_cgraph.png create mode 100644 Graphic_Equalizer_Split/doc/html/mouse_8hcc-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/mouse_8hcc.html create mode 100644 Graphic_Equalizer_Split/doc/html/mouse_8hcc__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/mouse_8hcc__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/mouse_8hcc__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/mouse_8hch-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/mouse_8hch.html create mode 100644 Graphic_Equalizer_Split/doc/html/mouse_8hch__dep__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/mouse_8hch__dep__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/mouse_8hch__dep__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/mouse__shared_8hch-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/mouse__shared_8hch.html create mode 100644 Graphic_Equalizer_Split/doc/html/mouse__shared_8hch__dep__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/mouse__shared_8hch__dep__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/mouse__shared_8hch__dep__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/runfft_8hcc-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/runfft_8hcc.html create mode 100644 Graphic_Equalizer_Split/doc/html/runfft_8hcc__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/runfft_8hcc__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/runfft_8hcc__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/runfft_8hch-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/runfft_8hch.html create mode 100644 Graphic_Equalizer_Split/doc/html/runfft_8hch__dep__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/runfft_8hch__dep__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/runfft_8hch__dep__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/sample_8hcc-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/sample_8hcc.html create mode 100644 Graphic_Equalizer_Split/doc/html/sample_8hcc__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/sample_8hcc__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/sample_8hcc__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/sample_8hch-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/sample_8hch.html create mode 100644 Graphic_Equalizer_Split/doc/html/sample_8hch__dep__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/sample_8hch__dep__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/sample_8hch__dep__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/smartmedia_8hcc-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/smartmedia_8hcc.html create mode 100644 Graphic_Equalizer_Split/doc/html/smartmedia_8hcc__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/smartmedia_8hcc__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/smartmedia_8hcc__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/smartmedia_8hch-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/smartmedia_8hch.html create mode 100644 Graphic_Equalizer_Split/doc/html/smartmedia_8hch__dep__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/smartmedia_8hch__dep__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/smartmedia_8hch__dep__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/smartmedia__shared_8hch-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/smartmedia__shared_8hch.html create mode 100644 Graphic_Equalizer_Split/doc/html/smartmedia__shared_8hch__dep__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/smartmedia__shared_8hch__dep__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/smartmedia__shared_8hch__dep__incl.png create mode 100644 Graphic_Equalizer_Split/doc/html/structaudiodata__t.html create mode 100644 Graphic_Equalizer_Split/doc/html/structevents__t.html create mode 100644 Graphic_Equalizer_Split/doc/html/structmousedata__t.html create mode 100644 Graphic_Equalizer_Split/doc/html/structskindata__t.html create mode 100644 Graphic_Equalizer_Split/doc/html/structskindata__t_1_1skin__info__t.html create mode 100644 Graphic_Equalizer_Split/doc/html/structskindata__t__coll__graph.map create mode 100644 Graphic_Equalizer_Split/doc/html/structskindata__t__coll__graph.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/structskindata__t__coll__graph.png create mode 100644 Graphic_Equalizer_Split/doc/html/tree.html create mode 100644 Graphic_Equalizer_Split/doc/html/weights__256_8hch-source.html create mode 100644 Graphic_Equalizer_Split/doc/html/weights__256_8hch.html create mode 100644 Graphic_Equalizer_Split/doc/html/weights__256_8hch__dep__incl.map create mode 100644 Graphic_Equalizer_Split/doc/html/weights__256_8hch__dep__incl.md5 create mode 100644 Graphic_Equalizer_Split/doc/html/weights__256_8hch__dep__incl.png create mode 100644 Graphic_Equalizer_Split/include/audio.hch create mode 100644 Graphic_Equalizer_Split/include/configuration.hch create mode 100644 Graphic_Equalizer_Split/include/display.hch create mode 100644 Graphic_Equalizer_Split/include/display_shared.hch create mode 100644 Graphic_Equalizer_Split/include/eventhandler.hch create mode 100644 Graphic_Equalizer_Split/include/eventhandler_shared.hch create mode 100644 Graphic_Equalizer_Split/include/events.hch create mode 100644 Graphic_Equalizer_Split/include/fft.hch create mode 100644 Graphic_Equalizer_Split/include/mouse.hch create mode 100644 Graphic_Equalizer_Split/include/mouse_shared.hch create mode 100644 Graphic_Equalizer_Split/include/runfft.hch create mode 100644 Graphic_Equalizer_Split/include/smartmedia.hch create mode 100644 Graphic_Equalizer_Split/include/smartmedia_shared.hch create mode 100644 Graphic_Equalizer_Split/include/weights_256.hch create mode 100644 Graphic_Equalizer_Split/src/audio.hcc create mode 100644 Graphic_Equalizer_Split/src/display.hcc create mode 100644 Graphic_Equalizer_Split/src/eventhandler.hcc create mode 100644 Graphic_Equalizer_Split/src/events.hcc create mode 100644 Graphic_Equalizer_Split/src/fft.hcc create mode 100644 Graphic_Equalizer_Split/src/main.hcc create mode 100644 Graphic_Equalizer_Split/src/mouse.hcc create mode 100644 Graphic_Equalizer_Split/src/runfft.hcc create mode 100644 Graphic_Equalizer_Split/src/smartmedia.hcc diff --git a/Graphic_Equalizer/Graphic_Equalizer.hp b/Graphic_Equalizer/Graphic_Equalizer.hp deleted file mode 100644 index d1885ef..0000000 --- a/Graphic_Equalizer/Graphic_Equalizer.hp +++ /dev/null @@ -1,574 +0,0 @@ -#@hp -type chip -configuration Release EDIF -configuration FastLoad_Debug EDIF -configuration FastLoad EDIF -configuration Full_Debug EDIF -configuration Full EDIF -setting Release debug false -setting Release warnings true -setting Release parfunc false -setting Release parchan false -setting Release parmem false -setting Release rewrite true -setting Release high true -setting Release cse true -setting Release pcse true -setting Release rcse true -setting Release cr true -setting Release rcr true -setting Release browse true -setting Release estimate false -setting Release noTimeCon false -setting Release ignoreInclDirs false -setting Release ignoreLibDirs false -setting Release noFastCarry false -setting Release mapper true -setting Release netlistSimulator false -setting Release useCustomBuild false -setting Release exclude false -setting Release target edif -setting Release target.compile edif -setting Release family XilinxVirtexII -setting Release family.lib none -setting Release vTool Generic -setting Release netExp speed -setting Release outDir Release -setting Release intDir Release -setting Release part XC2V1000-4-FG456 -setting Release define:NDEBUG true -setting Release define:USE_ true -setting Release define:USE_RC200E true -setting Release "include:C:\\Program Files\\celoxica\\pdk\\hardware\\include" true -setting Release include:include true -setting Release include:..\\Support_Libs\\debug false -setting Release lib:stdlib.hcl true -setting Release lib:rc200e.hcl true -setting Release lib:pal_rc200e.hcl true -setting Release "libdir:C:\\Program Files\\celoxica\\pdk\\hardware\\lib" true -setting Release define:HANDELCV3 false -setting Release define:SIMULATE false -setting Release define:DEBUG false -setting Release define:USE_RC100 false -setting Release define:NSIMULATE false -setting Release define:USE_SIM false -setting Release define:USE_ADMXRC2 false -setting Release define:USE_NIOS false -setting Release define:USE_NDB false -setting Release define:USE_RC1000 false -setting Release define:USE_RC200 false -setting Release define:USE_ARMSTRIPE false -setting Release define:USE_EDB false -setting Release define:USE_V2PRO false -setting Release define:USE_MV2P false -setting Release define:RC200 false -setting Release include:..\\..\\Support_Libs\\debug false -setting Release lib:rc100.hcl false -setting Release lib:pal_rc100.hcl false -setting Release lib:pal_framebuffer16.hcl false -setting Release lib:sim.hcl false -setting Release lib:pal_sim.hcl false -setting Release lib:admxrc2.hcl false -setting Release lib:pal_admxrc2.hcl false -setting Release lib:pal_console.hcl false -setting Release lib:ndb.hcl false -setting Release lib:pal_ndb.hcl false -setting Release lib:rc1000.hcl false -setting Release lib:pal_rc1000.hcl false -setting Release lib:rc200.hcl false -setting Release lib:pal_rc200.hcl false -setting Release lib:pal_keyboard.hcl false -setting Release lib:pal_framebuffer8.hcl false -setting Release lib:pal_framebufferdb.hcl false -setting Release lib:edb.hcl false -setting Release lib:pal_edb.hcl false -setting Release lib:mv2p.hcl false -setting Release lib:pal_mv2p.hcl false -setting Release lib:pal_mouse.hcl false -setting Release "lib:C:\\Program Files\\Celoxica\\PDK\\Hardware\\Lib\\stdlib.hcl" false -setting Release "libdir:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\lib" false -setting Release ansimodules:..\\..\\..\\Software\\Lib\\PalSim.lib false -setting Release define:HAVE_DEBUG false -setting Release "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\include" false -setting Release "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\includes" false -setting Release "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\" false -setting Release include:..\\..\\..\\include false -setting Release include:C:\\Project_CVS\\Support_Libs\\debug false -setting Release define:HAVE_SMARTMEDIA true -setting Release define:USE_RUNFFT true -setting Release define:HARDWARE_MULTIPLY true -setting Release define:PERFORM_FFT_CALCULATION true -setting Release define:USE_UNSIGNED_AUDIO false -setting Release define:_CONFIGURATION_HCH true -setting Release include:data true -command Release "cd Release" -command Release "call edifmake_rc200_optimized Graphic_Equalizer" -output Release bin\\Graphic_Equalizer.bit -setting FastLoad_Debug debug true -setting FastLoad_Debug warnings true -setting FastLoad_Debug parfunc false -setting FastLoad_Debug parchan false -setting FastLoad_Debug parmem false -setting FastLoad_Debug rewrite true -setting FastLoad_Debug high true -setting FastLoad_Debug cse true -setting FastLoad_Debug pcse true -setting FastLoad_Debug rcse true -setting FastLoad_Debug cr true -setting FastLoad_Debug rcr true -setting FastLoad_Debug browse true -setting FastLoad_Debug estimate false -setting FastLoad_Debug noTimeCon false -setting FastLoad_Debug ignoreInclDirs false -setting FastLoad_Debug ignoreLibDirs false -setting FastLoad_Debug noFastCarry false -setting FastLoad_Debug mapper true -setting FastLoad_Debug netlistSimulator false -setting FastLoad_Debug useCustomBuild false -setting FastLoad_Debug exclude false -setting FastLoad_Debug target edif -setting FastLoad_Debug target.compile edif -setting FastLoad_Debug family XilinxVirtexII -setting FastLoad_Debug family.lib none -setting FastLoad_Debug vTool Generic -setting FastLoad_Debug netExp speed -setting FastLoad_Debug outDir FastLoad_Debug -setting FastLoad_Debug intDir FastLoad_Debug -setting FastLoad_Debug part XC2V1000-4-FG456 -setting FastLoad_Debug define:NDEBUG true -setting FastLoad_Debug define:HANDELCV3 false -setting FastLoad_Debug define:SIMULATE false -setting FastLoad_Debug define:DEBUG false -setting FastLoad_Debug define:USE_ true -setting FastLoad_Debug define:USE_RC100 false -setting FastLoad_Debug define:NSIMULATE false -setting FastLoad_Debug define:USE_SIM false -setting FastLoad_Debug define:USE_ADMXRC2 false -setting FastLoad_Debug define:USE_NIOS false -setting FastLoad_Debug define:USE_NDB false -setting FastLoad_Debug define:USE_RC1000 false -setting FastLoad_Debug define:USE_RC200 false -setting FastLoad_Debug define:USE_RC200E true -setting FastLoad_Debug define:USE_ARMSTRIPE false -setting FastLoad_Debug define:USE_EDB false -setting FastLoad_Debug define:USE_V2PRO false -setting FastLoad_Debug define:USE_MV2P false -setting FastLoad_Debug define:RC200 false -setting FastLoad_Debug lib:stdlib.hcl true -setting FastLoad_Debug lib:rc100.hcl false -setting FastLoad_Debug lib:pal_rc100.hcl false -setting FastLoad_Debug lib:pal_framebuffer16.hcl false -setting FastLoad_Debug lib:sim.hcl false -setting FastLoad_Debug lib:pal_sim.hcl false -setting FastLoad_Debug lib:admxrc2.hcl false -setting FastLoad_Debug lib:pal_admxrc2.hcl false -setting FastLoad_Debug lib:pal_console.hcl false -setting FastLoad_Debug lib:ndb.hcl false -setting FastLoad_Debug lib:pal_ndb.hcl false -setting FastLoad_Debug lib:rc1000.hcl false -setting FastLoad_Debug lib:pal_rc1000.hcl false -setting FastLoad_Debug lib:rc200.hcl false -setting FastLoad_Debug lib:pal_rc200.hcl false -setting FastLoad_Debug lib:rc200e.hcl true -setting FastLoad_Debug lib:pal_rc200e.hcl true -setting FastLoad_Debug lib:pal_keyboard.hcl false -setting FastLoad_Debug lib:pal_framebuffer8.hcl false -setting FastLoad_Debug lib:pal_framebufferdb.hcl false -setting FastLoad_Debug lib:edb.hcl false -setting FastLoad_Debug lib:pal_edb.hcl false -setting FastLoad_Debug lib:mv2p.hcl false -setting FastLoad_Debug lib:pal_mv2p.hcl false -setting FastLoad_Debug lib:pal_mouse.hcl false -setting FastLoad_Debug ansimodules:..\\..\\..\\Software\\Lib\\PalSim.lib false -setting FastLoad_Debug "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\include" false -setting FastLoad_Debug "libdir:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\lib" false -setting FastLoad_Debug "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\includes" false -setting FastLoad_Debug "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\" false -setting FastLoad_Debug include:..\\..\\..\\include false -setting FastLoad_Debug include:include true -setting FastLoad_Debug include:..\\Support_Libs\\debug true -setting FastLoad_Debug include:C:\\Project_CVS\\Support_Libs\\debug false -setting FastLoad_Debug "lib:C:\\Program Files\\Celoxica\\PDK\\Hardware\\Lib\\stdlib.hcl" false -setting FastLoad_Debug "include:C:\\Program Files\\celoxica\\pdk\\hardware\\include" true -setting FastLoad_Debug "libdir:C:\\Program Files\\celoxica\\pdk\\hardware\\lib" true -setting FastLoad_Debug define:HAVE_DEBUG true -setting FastLoad_Debug define:HAVE_SMARTMEDIA false -setting FastLoad_Debug define:USE_RUNFFT true -setting FastLoad_Debug define:HARDWARE_MULTIPLY true -setting FastLoad_Debug define:PERFORM_FFT_CALCULATION true -setting FastLoad_Debug define:USE_UNSIGNED_AUDIO false -setting FastLoad_Debug include:..\\..\\Support_Libs\\debug false -setting FastLoad_Debug define:_CONFIGURATION_HCH true -setting FastLoad_Debug include:data true -command FastLoad_Debug "cd FastLoad_Debug" -command FastLoad_Debug "call edifmake_rc200_unoptimized Graphic_Equalizer" -output FastLoad_Debug bin\\Graphic_Equalizer.bit -setting FastLoad debug true -setting FastLoad warnings true -setting FastLoad parfunc false -setting FastLoad parchan false -setting FastLoad parmem false -setting FastLoad rewrite true -setting FastLoad high true -setting FastLoad cse true -setting FastLoad pcse true -setting FastLoad rcse true -setting FastLoad cr true -setting FastLoad rcr true -setting FastLoad browse true -setting FastLoad estimate false -setting FastLoad noTimeCon false -setting FastLoad ignoreInclDirs false -setting FastLoad ignoreLibDirs false -setting FastLoad noFastCarry false -setting FastLoad mapper true -setting FastLoad netlistSimulator false -setting FastLoad useCustomBuild false -setting FastLoad exclude false -setting FastLoad target edif -setting FastLoad target.compile edif -setting FastLoad family XilinxVirtexII -setting FastLoad family.lib none -setting FastLoad vTool Generic -setting FastLoad netExp speed -setting FastLoad outDir FastLoad -setting FastLoad intDir FastLoad -setting FastLoad part XC2V1000-4-FG456 -setting FastLoad define:NDEBUG true -setting FastLoad define:HANDELCV3 false -setting FastLoad define:SIMULATE false -setting FastLoad define:DEBUG false -setting FastLoad define:USE_ true -setting FastLoad define:USE_RC100 false -setting FastLoad define:NSIMULATE false -setting FastLoad define:USE_SIM false -setting FastLoad define:USE_ADMXRC2 false -setting FastLoad define:USE_NIOS false -setting FastLoad define:USE_NDB false -setting FastLoad define:USE_RC1000 false -setting FastLoad define:USE_RC200 false -setting FastLoad define:USE_RC200E true -setting FastLoad define:USE_ARMSTRIPE false -setting FastLoad define:USE_EDB false -setting FastLoad define:USE_V2PRO false -setting FastLoad define:USE_MV2P false -setting FastLoad define:RC200 false -setting FastLoad lib:stdlib.hcl true -setting FastLoad lib:rc100.hcl false -setting FastLoad lib:pal_rc100.hcl false -setting FastLoad lib:pal_framebuffer16.hcl false -setting FastLoad lib:sim.hcl false -setting FastLoad lib:pal_sim.hcl false -setting FastLoad lib:admxrc2.hcl false -setting FastLoad lib:pal_admxrc2.hcl false -setting FastLoad lib:pal_console.hcl false -setting FastLoad lib:ndb.hcl false -setting FastLoad lib:pal_ndb.hcl false -setting FastLoad lib:rc1000.hcl false -setting FastLoad lib:pal_rc1000.hcl false -setting FastLoad lib:rc200.hcl false -setting FastLoad lib:pal_rc200.hcl false -setting FastLoad lib:rc200e.hcl true -setting FastLoad lib:pal_rc200e.hcl true -setting FastLoad lib:pal_keyboard.hcl false -setting FastLoad lib:pal_framebuffer8.hcl false -setting FastLoad lib:pal_framebufferdb.hcl false -setting FastLoad lib:edb.hcl false -setting FastLoad lib:pal_edb.hcl false -setting FastLoad lib:mv2p.hcl false -setting FastLoad lib:pal_mv2p.hcl false -setting FastLoad lib:pal_mouse.hcl false -setting FastLoad ansimodules:..\\..\\..\\Software\\Lib\\PalSim.lib false -setting FastLoad "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\include" false -setting FastLoad "libdir:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\lib" false -setting FastLoad "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\includes" false -setting FastLoad "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\" false -setting FastLoad include:..\\..\\..\\include false -setting FastLoad include:include true -setting FastLoad include:..\\Support_Libs\\debug false -setting FastLoad include:C:\\Project_CVS\\Support_Libs\\debug false -setting FastLoad "lib:C:\\Program Files\\Celoxica\\PDK\\Hardware\\Lib\\stdlib.hcl" false -setting FastLoad "include:C:\\Program Files\\celoxica\\pdk\\hardware\\include" true -setting FastLoad "libdir:C:\\Program Files\\celoxica\\pdk\\hardware\\lib" true -setting FastLoad define:HAVE_DEBUG false -setting FastLoad define:HAVE_SMARTMEDIA false -setting FastLoad define:USE_RUNFFT true -setting FastLoad define:HARDWARE_MULTIPLY true -setting FastLoad define:PERFORM_FFT_CALCULATION true -setting FastLoad define:USE_UNSIGNED_AUDIO false -setting FastLoad include:..\\..\\Support_Libs\\debug false -setting FastLoad define:_CONFIGURATION_HCH true -setting FastLoad include:data true -command FastLoad "cd FastLoad" -command FastLoad "call edifmake_rc200_unoptimized Graphic_Equalizer" -output FastLoad bin\\Graphic_Equalizer.bit -setting Full_Debug debug true -setting Full_Debug warnings true -setting Full_Debug parfunc false -setting Full_Debug parchan false -setting Full_Debug parmem false -setting Full_Debug rewrite true -setting Full_Debug high true -setting Full_Debug cse true -setting Full_Debug pcse true -setting Full_Debug rcse true -setting Full_Debug cr true -setting Full_Debug rcr true -setting Full_Debug browse true -setting Full_Debug estimate false -setting Full_Debug noTimeCon false -setting Full_Debug ignoreInclDirs false -setting Full_Debug ignoreLibDirs false -setting Full_Debug noFastCarry false -setting Full_Debug mapper true -setting Full_Debug netlistSimulator false -setting Full_Debug useCustomBuild false -setting Full_Debug exclude false -setting Full_Debug target edif -setting Full_Debug target.compile edif -setting Full_Debug family XilinxVirtexII -setting Full_Debug family.lib none -setting Full_Debug vTool Generic -setting Full_Debug netExp speed -setting Full_Debug outDir Full_Debug -setting Full_Debug intDir Full_Debug -setting Full_Debug part XC2V1000-4-FG456 -setting Full_Debug define:NDEBUG true -setting Full_Debug define:USE_ true -setting Full_Debug define:USE_RC200E true -setting Full_Debug "include:C:\\Program Files\\celoxica\\pdk\\hardware\\include" true -setting Full_Debug include:include true -setting Full_Debug include:..\\Support_Libs\\debug true -setting Full_Debug lib:stdlib.hcl true -setting Full_Debug lib:rc200e.hcl true -setting Full_Debug lib:pal_rc200e.hcl true -setting Full_Debug "libdir:C:\\Program Files\\celoxica\\pdk\\hardware\\lib" true -setting Full_Debug define:HANDELCV3 false -setting Full_Debug define:SIMULATE false -setting Full_Debug define:DEBUG false -setting Full_Debug define:USE_RC100 false -setting Full_Debug define:NSIMULATE false -setting Full_Debug define:USE_SIM false -setting Full_Debug define:USE_ADMXRC2 false -setting Full_Debug define:USE_NIOS false -setting Full_Debug define:USE_NDB false -setting Full_Debug define:USE_RC1000 false -setting Full_Debug define:USE_RC200 false -setting Full_Debug define:USE_ARMSTRIPE false -setting Full_Debug define:USE_EDB false -setting Full_Debug define:USE_V2PRO false -setting Full_Debug define:USE_MV2P false -setting Full_Debug define:RC200 false -setting Full_Debug "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\include" false -setting Full_Debug "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\includes" false -setting Full_Debug "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\" false -setting Full_Debug include:..\\..\\..\\include false -setting Full_Debug include:C:\\Project_CVS\\Support_Libs\\debug false -setting Full_Debug lib:rc100.hcl false -setting Full_Debug lib:pal_rc100.hcl false -setting Full_Debug lib:pal_framebuffer16.hcl false -setting Full_Debug lib:sim.hcl false -setting Full_Debug lib:pal_sim.hcl false -setting Full_Debug lib:admxrc2.hcl false -setting Full_Debug lib:pal_admxrc2.hcl false -setting Full_Debug lib:pal_console.hcl false -setting Full_Debug lib:ndb.hcl false -setting Full_Debug lib:pal_ndb.hcl false -setting Full_Debug lib:rc1000.hcl false -setting Full_Debug lib:pal_rc1000.hcl false -setting Full_Debug lib:rc200.hcl false -setting Full_Debug lib:pal_rc200.hcl false -setting Full_Debug lib:pal_keyboard.hcl false -setting Full_Debug lib:pal_framebuffer8.hcl false -setting Full_Debug lib:pal_framebufferdb.hcl false -setting Full_Debug lib:edb.hcl false -setting Full_Debug lib:pal_edb.hcl false -setting Full_Debug lib:mv2p.hcl false -setting Full_Debug lib:pal_mv2p.hcl false -setting Full_Debug lib:pal_mouse.hcl false -setting Full_Debug "lib:C:\\Program Files\\Celoxica\\PDK\\Hardware\\Lib\\stdlib.hcl" false -setting Full_Debug "libdir:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\lib" false -setting Full_Debug ansimodules:..\\..\\..\\Software\\Lib\\PalSim.lib false -setting Full_Debug define:HAVE_DEBUG true -setting Full_Debug include:..\\..\\Support_Libs\\debug false -setting Full_Debug define:HAVE_SMARTMEDIA true -setting Full_Debug define:USE_RUNFFT true -setting Full_Debug define:HARDWARE_MULTIPLY true -setting Full_Debug define:PERFORM_FFT_CALCULATION true -setting Full_Debug define:USE_UNSIGNED_AUDIO false -setting Full_Debug define:_CONFIGURATION_HCH true -setting Full_Debug include:data true -command Full_Debug "cd Full_Debug" -command Full_Debug "call edifmake_rc200_unoptimized Graphic_Equalizer" -output Full_Debug bin\\Graphic_Equalizer.bit -setting Full debug true -setting Full warnings true -setting Full parfunc false -setting Full parchan false -setting Full parmem false -setting Full rewrite true -setting Full high true -setting Full cse true -setting Full pcse true -setting Full rcse true -setting Full cr true -setting Full rcr true -setting Full browse true -setting Full estimate false -setting Full noTimeCon false -setting Full ignoreInclDirs false -setting Full ignoreLibDirs false -setting Full noFastCarry false -setting Full mapper true -setting Full netlistSimulator false -setting Full useCustomBuild false -setting Full exclude false -setting Full target edif -setting Full target.compile edif -setting Full family XilinxVirtexII -setting Full family.lib none -setting Full vTool Generic -setting Full netExp speed -setting Full outDir Full -setting Full intDir Full -setting Full part XC2V1000-4-FG456 -setting Full define:NDEBUG true -setting Full define:USE_ true -setting Full define:USE_RC200E true -setting Full "include:C:\\Program Files\\celoxica\\pdk\\hardware\\include" true -setting Full include:include true -setting Full include:..\\Support_Libs\\debug false -setting Full lib:stdlib.hcl true -setting Full lib:rc200e.hcl true -setting Full lib:pal_rc200e.hcl true -setting Full "libdir:C:\\Program Files\\celoxica\\pdk\\hardware\\lib" true -setting Full define:HANDELCV3 false -setting Full define:SIMULATE false -setting Full define:DEBUG false -setting Full define:USE_RC100 false -setting Full define:NSIMULATE false -setting Full define:USE_SIM false -setting Full define:USE_ADMXRC2 false -setting Full define:USE_NIOS false -setting Full define:USE_NDB false -setting Full define:USE_RC1000 false -setting Full define:USE_RC200 false -setting Full define:USE_ARMSTRIPE false -setting Full define:USE_EDB false -setting Full define:USE_V2PRO false -setting Full define:USE_MV2P false -setting Full define:RC200 false -setting Full "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\include" false -setting Full "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\includes" false -setting Full "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\" false -setting Full include:..\\..\\..\\include false -setting Full include:C:\\Project_CVS\\Support_Libs\\debug false -setting Full lib:rc100.hcl false -setting Full lib:pal_rc100.hcl false -setting Full lib:pal_framebuffer16.hcl false -setting Full lib:sim.hcl false -setting Full lib:pal_sim.hcl false -setting Full lib:admxrc2.hcl false -setting Full lib:pal_admxrc2.hcl false -setting Full lib:pal_console.hcl false -setting Full lib:ndb.hcl false -setting Full lib:pal_ndb.hcl false -setting Full lib:rc1000.hcl false -setting Full lib:pal_rc1000.hcl false -setting Full lib:rc200.hcl false -setting Full lib:pal_rc200.hcl false -setting Full lib:pal_keyboard.hcl false -setting Full lib:pal_framebuffer8.hcl false -setting Full lib:pal_framebufferdb.hcl false -setting Full lib:edb.hcl false -setting Full lib:pal_edb.hcl false -setting Full lib:mv2p.hcl false -setting Full lib:pal_mv2p.hcl false -setting Full lib:pal_mouse.hcl false -setting Full "lib:C:\\Program Files\\Celoxica\\PDK\\Hardware\\Lib\\stdlib.hcl" false -setting Full "libdir:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\lib" false -setting Full ansimodules:..\\..\\..\\Software\\Lib\\PalSim.lib false -setting Full define:HAVE_DEBUG false -setting Full include:..\\..\\Support_Libs\\debug false -setting Full define:HAVE_SMARTMEDIA true -setting Full define:USE_RUNFFT true -setting Full define:HARDWARE_MULTIPLY true -setting Full define:PERFORM_FFT_CALCULATION true -setting Full define:USE_UNSIGNED_AUDIO false -setting Full define:_CONFIGURATION_HCH true -setting Full include:data true -command Full "cd Full" -command Full "call edifmake_rc200_unoptimized Graphic_Equalizer" -output Full bin\\Graphic_Equalizer.bit -document include\\audio.hch { - type hch -} -document include\\configuration.hch { - type hch -} -document include\\display.hch { - type hch -} -document include\\display_shared.hch { - type hch -} -document include\\eventhandler.hch { - type hch -} -document include\\eventhandler_shared.hch { - type hch -} -document include\\events.hch { - type hch -} -document include\\fft.hch { - type hch -} -document include\\mouse.hch { - type hch -} -document include\\mouse_shared.hch { - type hch -} -document include\\smartmedia.hch { - type hch -} -document include\\smartmedia_shared.hch { - type hch -} -document include\\weights_256.hch { - type hch -} -document src\\audio.hcc { - type hcc -} -document src\\display.hcc { - type hcc -} -document src\\eventhandler.hcc { - type hcc -} -document src\\events.hcc { - type hcc -} -document src\\fft.hcc { - type hcc -} -document src\\main.hcc { - type hcc -} -document src\\mouse.hcc { - type hcc -} -document src\\smartmedia.hcc { - type hcc -} -document ..\\support_libs\\debug\\debug.hcc { - type hcc -} -document ..\\support_libs\\debug\\debug.hch { - type hch -} -document src\\runfft.hcc { - type hcc -} diff --git a/Graphic_Equalizer/Graphic_Equalizer.hw b/Graphic_Equalizer/Graphic_Equalizer.hw deleted file mode 100644 index 59b9054..0000000 --- a/Graphic_Equalizer/Graphic_Equalizer.hw +++ /dev/null @@ -1,2 +0,0 @@ -#@hw -project graphic_equalizer.hp diff --git a/Graphic_Equalizer/Graphic_Equalizer.pref b/Graphic_Equalizer/Graphic_Equalizer.pref deleted file mode 100644 index 50fac51..0000000 --- a/Graphic_Equalizer/Graphic_Equalizer.pref +++ /dev/null @@ -1,164 +0,0 @@ -[WorkState_v1_2.Frames.ChildFrames.Document-16] -ptn_Child1=ViewFrame-0 -[WorkState_v1_2.Frames.ChildFrames.Document-16.ViewFrame-0] -DocPathName=C:\Project_CVS\Graphic_Equalizer\include\audio.hch -DocumentString= -DocTemplateIndex=5 -WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPMCAAAAAAMCAAAAAAICDAAAAAAGBAAAAA -IsActiveChildFrame=False -[WorkState_v1_2.Frames.ChildFrames.Document-8] -ptn_Child1=ViewFrame-0 -[WorkState_v1_2.Frames.ChildFrames.Document-8.ViewFrame-0] -DocPathName=C:\Project_CVS\Graphic_Equalizer\src\display.hcc -DocumentString= -DocTemplateIndex=4 -WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPAAAAAAAAAAAAAAAAMPCAAAAAEDBAAAAA -IsActiveChildFrame=False -[WorkState_v1_2.Frames.ChildFrames.Document-9] -ptn_Child1=ViewFrame-0 -[WorkState_v1_2.Frames.ChildFrames.Document-9.ViewFrame-0] -DocPathName=C:\Project_CVS\Graphic_Equalizer\src\audio.hcc -DocumentString= -DocTemplateIndex=4 -WindowPlacement=MCAAAAAACAAAAAAADAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPGBAAAAAAGBAAAAAACBDAAAAAKEBAAAAA -IsActiveChildFrame=True -[WorkState_v1_2.Frames.ChildFrames.Document-10] -ptn_Child1=ViewFrame-0 -[WorkState_v1_2.Frames.ChildFrames.Document-10.ViewFrame-0] -DocPathName=C:\Project_CVS\Graphic_Equalizer\include\display_shared.hch -DocumentString= -DocTemplateIndex=5 -WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPCEAAAAAACEAAAAAAGBDAAAAAMKBAAAAA -IsActiveChildFrame=False -[WorkState_v1_2.Frames.ChildFrames.Document-11] -ptn_Child1=ViewFrame-0 -[WorkState_v1_2.Frames.ChildFrames.Document-11.ViewFrame-0] -DocPathName=C:\project_cvs\graphic_equalizer\include\display.hch -DocumentString= -DocTemplateIndex=5 -WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPIFAAAAAAIFAAAAAAHEDAAAAACMBAAAAA -IsActiveChildFrame=False -[WorkState_v1_2.Frames.ChildFrames.Document-12] -ptn_Child1=ViewFrame-0 -[WorkState_v1_2.Frames.ChildFrames.Document-12.ViewFrame-0] -DocPathName=C:\Project_CVS\Graphic_Equalizer\include\mouse.hch -DocumentString= -DocTemplateIndex=5 -WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPOGAAAAAAOGAAAAAANFDAAAAAINBAAAAA -IsActiveChildFrame=False -[WorkState_v1_2.Frames.ChildFrames.Document-13] -ptn_Child1=ViewFrame-0 -[WorkState_v1_2.Frames.ChildFrames.Document-13.ViewFrame-0] -DocPathName=C:\Project_CVS\Graphic_Equalizer\include\events.hch -DocumentString= -DocTemplateIndex=5 -WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPGBAAAAAAGBAAAAAACBDAAAAAKEBAAAAA -IsActiveChildFrame=False -[WorkState_v1_2.Frames.ChildFrames.Document-14] -ptn_Child1=ViewFrame-0 -[WorkState_v1_2.Frames.ChildFrames.Document-14.ViewFrame-0] -DocPathName=C:\Project_CVS\Graphic_Equalizer\include\eventhandler_shared.hch -DocumentString= -DocTemplateIndex=5 -WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPIFAAAAAAIFAAAAAAEFDAAAAAMIBAAAAA -IsActiveChildFrame=False -[WorkState_v1_2.Frames.ChildFrames.Document-15] -ptn_Child1=ViewFrame-0 -[WorkState_v1_2.Frames.ChildFrames.Document-15.ViewFrame-0] -DocPathName=C:\Project_CVS\Graphic_Equalizer\include\audio.hch -DocumentString= -DocTemplateIndex=5 -WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPMCAAAAAAMCAAAAAAICDAAAAAAGBAAAAA -IsActiveChildFrame=False -[WorkState_v1_2.Frames.ChildFrames.Document-4] -ptn_Child1=ViewFrame-0 -[WorkState_v1_2.Frames.ChildFrames.Document-4.ViewFrame-0] -DocPathName=C:\Project_CVS\Graphic_Equalizer\src\main.hcc -DocumentString= -DocTemplateIndex=4 -WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPMCAAAAAAMCAAAAAAICDAAAAAAGBAAAAA -IsActiveChildFrame=False -[WorkState_v1_2.Frames.ChildFrames.Document-5] -ptn_Child1=ViewFrame-0 -[WorkState_v1_2.Frames.ChildFrames.Document-5.ViewFrame-0] -DocPathName=C:\Project_CVS\Graphic_Equalizer\include\smartmedia.hch -DocumentString= -DocTemplateIndex=5 -WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPIFAAAAAAIFAAAAAAEFDAAAAAMIBAAAAA -IsActiveChildFrame=False -[WorkState_v1_2.Frames.ChildFrames.Document-6] -ptn_Child1=ViewFrame-0 -[WorkState_v1_2.Frames.ChildFrames.Document-6.ViewFrame-0] -DocPathName=C:\Project_CVS\Graphic_Equalizer\include\fft.hch -DocumentString= -DocTemplateIndex=5 -WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPOGAAAAAAOGAAAAAAKGDAAAAACKBAAAAA -IsActiveChildFrame=False -[WorkState_v1_2.Frames.ChildFrames.Document-7] -ptn_Child1=ViewFrame-0 -[WorkState_v1_2.Frames.ChildFrames.Document-7.ViewFrame-0] -DocPathName=C:\Project_CVS\Graphic_Equalizer\include\configuration.hch -DocumentString= -DocTemplateIndex=5 -WindowPlacement=MCAAAAAACAAAAAAADAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPGBAAAAAAGBAAAAAACBDAAAAAKEBAAAAA -IsActiveChildFrame=True -[WorkState_v1_2] -ptn_Child1=Frames -ptn_Child2=DK Design Suite Preferences -ptn_Child3=Breakpoints -ptn_Child4=WatchVars -[WorkState_v1_2.Frames] -ptn_Child1=ChildFrames -[WorkState_v1_2.Frames.ChildFrames] -ptn_Child1=Document-0 -ptn_Child2=Document-1 -ptn_Child3=Document-2 -ptn_Child4=Document-3 -[WorkState_v1_2.Frames.ChildFrames.Document-0] -ptn_Child1=ViewFrame-0 -[WorkState_v1_2.Frames.ChildFrames.Document-0.ViewFrame-0] -DocPathName=C:\Project_CVS\Graphic_Equalizer\src\display.hcc -DocumentString= -DocTemplateIndex=4 -WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPAAAAAAAAAAAAAAAAALCAAAAAADBAAAAA -IsActiveChildFrame=False -[WorkState_v1_2.Frames.ChildFrames.Document-1] -ptn_Child1=ViewFrame-0 -[WorkState_v1_2.Frames.ChildFrames.Document-1.ViewFrame-0] -DocPathName=C:\Project_CVS\Graphic_Equalizer\src\eventhandler.hcc -DocumentString= -DocTemplateIndex=4 -WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPCEAAAAAACEAAAAAAGPCAAAAAGHBAAAAA -IsActiveChildFrame=False -[WorkState_v1_2.Frames.ChildFrames.Document-2] -ptn_Child1=ViewFrame-0 -[WorkState_v1_2.Frames.ChildFrames.Document-2.ViewFrame-0] -DocPathName=C:\Project_CVS\Graphic_Equalizer\include\eventhandler.hch -DocumentString= -DocTemplateIndex=5 -WindowPlacement=MCAAAAAACAAAAAAADAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPIFAAAAAAIFAAAAAAMADAAAAAMIBAAAAA -IsActiveChildFrame=True -[WorkState_v1_2.Frames.ChildFrames.Document-3] -ptn_Child1=ViewFrame-0 -[WorkState_v1_2.Frames.ChildFrames.Document-3.ViewFrame-0] -DocPathName=C:\Project_CVS\Graphic_Equalizer\include\eventhandler_shared.hch -DocumentString= -DocTemplateIndex=5 -WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPMCAAAAAAMCAAAAAAAOCAAAAAAGBAAAAA -IsActiveChildFrame=False -[WorkState_v1_2.DK Design Suite Preferences] -Active Project Index=0 -Active Configuration Index=4 -[WorkState_v1_2.WatchVars] -ptn_Child1=Watch0 -ptn_Child2=Watch1 -ptn_Child3=Watch2 -ptn_Child4=Watch3 -[WorkState_v1_2.WatchVars.Watch0] -empty=True -[WorkState_v1_2.WatchVars.Watch1] -empty=True -[WorkState_v1_2.WatchVars.Watch2] -empty=True -[WorkState_v1_2.WatchVars.Watch3] -empty=True diff --git a/Graphic_Equalizer/data/graph_mask.raw b/Graphic_Equalizer/data/graph_mask.raw deleted file mode 100644 index 9125381..0000000 --- a/Graphic_Equalizer/data/graph_mask.raw +++ /dev/null @@ -1,639 +0,0 @@ -€€€€€~~~~~}}}}|||||{{{{{zzzzzzyyyxxxxxxwwwwwvvvvvvuuuutttttssssssrrrrrrrqqqpppppppoooooonnnnmmmmmmllllllkkkkkkkkjjjiiiiiiiihhhhhhggggggggfffffeeeeeeedddddddddcccccccbbbbbbbaaaaaaaa``````````_______^^^^^^^^^^]]]]]]]]]]]]\\\\\\\\\\\\\[[[[[[[[[[ZZZZZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[\\\\\\\\\\\\]]]]]]]]]]]]]^^^^^^^^^^______``````````aaaaaaaaabbbbbbccccccccddddddddeeeeeeeefffffggggggghhhhhhhiiiiiiijjjjkkkkkkklllllllmmmmmmnnnnooooooppppppqqqqrrrrrrsssssstttttuuuuvvvvvvwwwwwxxxxxxxyyzzzzzz{{{{{|||||}}}}~~~~~€€€€€€€€€€~~~~~}}}}|||||{{{{{zzzzzzyyyxxxxxxwwwwwvvvvvvuuuutttttssssssrrrrrrqqqqppppppooooooonnnmmmmmmmllllllkkkkkkjjjjjiiiiiihhhhhhhhgggggggffffeeeeeeeeedddddddccccccccbbbbbbaaaaaaaaa`````````______^^^^^^^^^^^]]]]]]]]]]]\\\\\\\\\\\\\[[[[[[[[[ZZZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZ[[[[[[[[[\\\\\\\\\\\\]]]]]]]]]]]^^^^^^^^^^^^______`````````aaaaaaaabbbbbbbcccccccddddddddeeeeeeeeffffgggggggghhhhhhhiiiiiijjjjjkkkkkkkllllllmmmmmmnnnnooooooppppppqqqqrrrrrrssssssstttttuuuvvvvvvvwwwwwxxxxxxyyzzzzzzz{{{{{|||||}}}~~~~~€€€€€€€€~~~~~}}}}|||||{{{{{zzzzzyyyxxxxxxxwwwwwvvvvvvuuuutttttssssssrrrrrqqqqqpppppoooooonnnnnmmmmmmlllllllkkkkkkjjjjiiiiiiihhhhhhggggggggfffffeeeeeeeddddddddcccccccbbbbbbbaaaaaaaa`````````______^^^^^^^^^^]]]]]]]]]]]]\\\\\\\\\\\[[[[[[[[[ZZZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZ[[[[[[[[[\\\\\\\\\\\]]]]]]]]]]]^^^^^^^^^^______`````````aaaaaaaaabbbbbbccccccccdddddddeeeeeeeefffffggggggghhhhhhiiiiiiiijjjjkkkkkkllllllmmmmmmnnnnnooooooopppppqqqqqrrrrrsssssstttttuuuuvvvvvvwwwwwxxxxxxyyyyzzzzz{{{{{|||||}}}}~~~~~€€€€€~~~~~}}}|||||{{{{{zzzzzyyyyxxxxxxwwwwwvvvvvuuuuttttttsssssssrrrrrqqqpppppppoooooonnnnmmmmmmllllllkkkkkkjjjjjiiiiiiihhhhhhhggggggfffffeeeeeeeedddddddccccccccbbbbbbaaaaaaaa``````````______^^^^^^^^^]]]]]]]]]]]\\\\\\\\\\\[[[[[[[[[ZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZ[[[[[[[[\\\\\\\\\\\\]]]]]]]]]]]^^^^^^^^^______``````````aaaaaaabbbbbbbcccccccddddddddeeeeeeefffffgggggghhhhhhhhiiiiiijjjjjkkkkkklllllllmmmmmmnnnnooooooppppppqqqqrrrrrssssssttttttuuuuvvvvvwwwwwxxxxxxyyyyzzzzz{{{{{|||||}}}}~~~~~€€~~~~~}}}}|||||{{{{{zzzzzyyyyxxxxxxwwwwwvvvvvuuuuttttttsssssrrrrrrqqqqppppppooooooonnnmmmmmmmllllllkkkkkkjjjjiiiiiiihhhhhhhgggggggffffeeeeeeeddddddddcccccccccbbbbbaaaaaaa`````````______^^^^^^^^^^]]]]]]]]]]\\\\\\\\\\\[[[[[[[[[ZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZ[[[[[[[[[\\\\\\\\\\\]]]]]]]]]]^^^^^^^^^^_______````````aaaaaaaabbbbbcccccccccdddddddeeeeeeeefffgggggggghhhhhhiiiiiiiijjjkkkkkkkllllllmmmmmmnnnnooooooppppppqqqqrrrrrrssssstttttttuuuvvvvvwwwwwxxxxxxxyyyzzzzz{{{{{|||||}}}}~~~~~€~~~~~}}}}|||||{{{{{zzzzzyyyyxxxxxxwwwwwvvvvvuuuuttttttsssssrrrrrrqqqqppppppooooonnnnnmmmmmmlllllllkkkkkkjjjjiiiiiihhhhhhhgggggggfffffeeeeeeeddddddddcccccccbbbbbaaaaaaaa````````_______^^^^^^^^^^]]]]]]]]]]\\\\\\\\\\[[[[[[[ZZZZZZZZZZZZZZYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYZZZZZZZZZZZZZ[[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^^^______`````````aaaaaaabbbbbccccccccdddddddeeeeeeeefffffgggggghhhhhhhhiiiiiijjjjkkkkkkllllllmmmmmmnnnnnooooopppppppqqqrrrrrrrsssssttttttuuuuvvvvvwwwwwxxxxxxyyyyzzzzz{{{{{|||||}}}~~~~~~~~~~}}}}|||||{{{{{zzzzzyyyxxxxxxxwwwwwvvvvvuuutttttttsssssrrrrrrqqqqpppppoooooonnnnmmmmmmllllllkkkkkkjjjjjiiiiiiihhhhhhgggggggffffeeeeeeeedddddddccccccccbbbbbaaaaaaa`````````______^^^^^^^^^]]]]]]]]]]\\\\\\\\\\[[[[[[[ZZZZZZZZZZZZZYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYZZZZZZZZZZZZ[[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^_______````````aaaaaaaabbbbbcccccccddddddddeeeeeeeffffgggggggghhhhhhiiiiiijjjjjkkkkkklllllllmmmmmmnnnnoooooopppppqqqqrrrrrrsssssttttttuuuuvvvvvwwwwwxxxxxxyyyyzzzzz{{{{{|||||}}}}~~~~~~~~~~}}}|||||{{{{{zzzzzyyyyxxxxxwwwwwwvvvvvuuuuttttttsssssrrrrrrrqqqpppppooooooonnnmmmmmmmllllllkkkkkkjjjjiiiiiihhhhhhhhggggggfffffeeeeeeddddddddcccccccbbbbbaaaaaaaaa```````_______^^^^^^^^]]]]]]]]]]\\\\\\\\\\[[[[[[[[ZZZZZZZZZZZYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYZZZZZZZZZZZZ[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^^______````````aaaaaaaabbbbbccccccccdddddddeeeeeeefffffgggggghhhhhhhiiiiiiijjjkkkkkkkllllllmmmmmmnnnnoooooopppppqqqqrrrrrrsssssttttttuuuuvvvvvwwwwwwxxxxxyyyyzzzzz{{{{{|||||}}}}~~~~~~~~~~}}}}|||||{{{{{zzzzzyyyyxxxxxwwwwwwvvvvvuuuutttttssssssrrrrrqqqqppppppoooooonnnnmmmmmmlllllllkkkkkkjjjjiiiiiihhhhhhggggggggfffeeeeeeeeddddddccccccccbbbbbaaaaaaaa````````______^^^^^^^^^]]]]]]]]]\\\\\\\\\\[[[[[[[ZZZZZZZZZZZYYYYYYYYYYYYYXXXXXXXXXXXXXXXWWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWXXXXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZZ[[[[[[[[\\\\\\\\\\]]]]]]]]]^^^^^^^^_______```````aaaaaaaaabbbbbcccccccdddddddeeeeeeeffffggggggghhhhhhhiiiiiijjjjkkkkkkllllllmmmmmmnnnnoooooopppppppqqqrrrrrssssssstttttuuuvvvvvwwwwwwwxxxxxyyyzzzzz{{{{{|||||}}}}~~~~~~~~~}}}}|||||{{{{{zzzzzyyyyxxxxxwwwwwwvvvvvuuuutttttssssssrrrrrqqqqppppppoooooonnnnmmmmmllllllkkkkkkjjjjjiiiiiiihhhhhhggggggfffffeeeeeeddddddddcccccccbbbbbaaaaaaaa```````_______^^^^^^^^]]]]]]]]]\\\\\\\\\\[[[[[[ZZZZZZZZZZZZYYYYYYYYYYYYXXXXXXXXXXXXXXWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWXXXXXXXXXXXXXYYYYYYYYYYYYYZZZZZZZZZZZ[[[[[[\\\\\\\\\\]]]]]]]]]^^^^^^^^^______````````aaaaaaabbbbbccccccccdddddddeeeeeefffffggggggghhhhhhiiiiiijjjjjkkkkkklllllllmmmmmnnnoooooooppppppqqqqrrrrrsssssstttttuuuuvvvvvwwwwwwxxxxxyyyyzzzzz{{{{{|||||}}}~~~~~~~~}}}}|||||{{{{{zzzzzyyyxxxxxwwwwwwwvvvvvuuutttttsssssssrrrrrqqqpppppppooooonnnmmmmmmmllllllkkkkkkjjjjiiiiiihhhhhhggggggggffffeeeeeeeddddddccccccccbbbbbaaaaaaa````````______^^^^^^^^]]]]]]]]]]\\\\\\\\[[[[[[[ZZZZZZZZZZZYYYYYYYYYYYYXXXXXXXXXXXXXWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWXXXXXXXXXXXXYYYYYYYYYYYYYZZZZZZZZZZZ[[[[[[\\\\\\\\\]]]]]]]]]]^^^^^^^_______```````aaaaaaaabbbbbcccccccddddddeeeeeeeeffffggggggghhhhhhiiiiiiijjjkkkkkkkllllllmmmmmmnnnnoooooppppppqqqqrrrrrsssssstttttuuuuvvvvvwwwwwwxxxxxyyyyzzzzz{{{{{|||||}}}}~~~~~}}}|||||{{{{{zzzzzzzyyxxxxxwwwwwwvvvvvuuuutttttssssssrrrrrqqqqppppppooooonnnnmmmmmmlllllllkkkkkkjjjjiiiiiihhhhhhggggggfffffeeeeeeedddddddccccccbbbbbaaaaaaaa```````_______^^^^^^^]]]]]]]]]\\\\\\\\\\[[[[[[ZZZZZZZZZZYYYYYYYYYYYXXXXXXXXXXXXXXWWWWWWWWWVVVVVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVWWWWWWWWXXXXXXXXXXXXXXYYYYYYYYYYYZZZZZZZZZZ[[[[[[[\\\\\\\\\\]]]]]]]]^^^^^^^^______````````aaaaaaabbbbbccccccddddddddeeeeeefffffgggggghhhhhhhiiiiiijjjjkkkkkkllllllmmmmmmnnnnoooooppppppqqqqrrrrrsssssstttttuuuuvvvvvwwwwwwxxxxxyyyzzzzzz{{{{{|||||}}}}~~~~}}|||||{{{{{zzzzzzyyyxxxxxwwwwwwvvvvvuuuutttttssssssrrrrrqqqqpppppoooooonnnnmmmmmmlllllkkkkkkjjjjjiiiiiiihhhhhhggggggffffeeeeeeedddddddcccccccbbbbaaaaaaa`````````_____^^^^^^^^]]]]]]]]\\\\\\\\\[[[[[[[[ZZZZZZZZZZYYYYYYYYYYXXXXXXXXXXXXWWWWWWWWWWVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVWWWWWWWWWWXXXXXXXXXXXXXYYYYYYYYYYZZZZZZZZZZ[[[[[[[\\\\\\\\\]]]]]]]]]^^^^^^^_____`````````aaaaaaaabbbccccccccddddddeeeeeeeefffggggggghhhhhhiiiiiijjjjjkkkkkklllllmmmmmmmnnnooooooopppppqqqrrrrrssssssstttttuuuvvvvvwwwwwwwxxxxxyyzzzzzz{{{{{|||||}}}~~}}}|||||{{{{{zzzzzzyyyxxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqqpppppoooooonnnnmmmmmmlllllkkkkkkjjjjiiiiiihhhhhhgggggggfffffeeeeeeddddddccccccccbbbbbaaaaaaa````````_____^^^^^^^]]]]]]]]]\\\\\\\\\[[[[[[ZZZZZZZZZZYYYYYYYYYYYXXXXXXXXXXXWWWWWWWWWVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVWWWWWWWWWXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZ[[[[[[\\\\\\\\\]]]]]]]]^^^^^^^^_____```````aaaaaaaabbbbbcccccccdddddddeeeeeefffffgggggghhhhhhiiiiiiijjjkkkkkkklllllmmmmmmnnnnoooooopppppqqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxxyyzzzzzzz{{{{{|||||}}~}}||||||{{{{{zzzzzyyxxxxxxxwwwwwvvvvvuuutttttsssssrrrrrrrqqqpppppooooooonnnmmmmmlllllllkkkkkkjjjjiiiiiihhhhhhggggggffffeeeeeeeeddddddccccccbbbbbaaaaaaaa```````_____^^^^^^^^]]]]]]]]\\\\\\\\\[[[[[[ZZZZZZZZZZYYYYYYYYYYXXXXXXXXXXXXWWWWWWWWVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVWWWWWWWWWXXXXXXXXXXXYYYYYYYYYYZZZZZZZZZZ[[[[[[\\\\\\\\\]]]]]]]]]^^^^^^^_____````````aaaaaaabbbbbcccccccddddddeeeeeeeffffgggggghhhhhhhiiiiiijjjjkkkkkkllllllmmmmmnnnnoooooopppppqqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxxyyyzzzzz{{{{{||||||}}}}|||||{{{{{zzzzzyyxxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqqpppppoooooonnnnmmmmmllllllkkkkkkkjjjiiiiiiihhhhhhggggggffffeeeeeeddddddccccccccbbbbbaaaaaa````````_____^^^^^^^^]]]]]]]]\\\\\\\\\[[[[[[ZZZZZZZZZYYYYYYYYYYXXXXXXXXXXXWWWWWWWVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVWWWWWWWWXXXXXXXXXXXYYYYYYYYYYZZZZZZZZZ[[[[[[\\\\\\\\\]]]]]]]^^^^^^^^^_____```````aaaaaaabbbbbcccccccddddddeeeeeeefffggggggghhhhhhiiiiiijjjjkkkkkkllllllmmmmmnnnnoooooopppppqqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxxyyyzzzzz{{{{{|||||}}|||||{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqqpppppooooonnnnmmmmmmllllllkkkkkjjjjiiiiiihhhhhhgggggggfffffeeeeeeddddddccccccbbbbbaaaaaaaa```````____^^^^^^^^^]]]]]]]\\\\\\\\\[[[[[ZZZZZZZZZZYYYYYYYYYYXXXXXXXXXXWWWWWWWWVVVVVVVVVVVVUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUVVVVVVVVVVVVVWWWWWWWXXXXXXXXXXYYYYYYYYYYZZZZZZZZZZ[[[[[\\\\\\\\\]]]]]]]]^^^^^^^^____````````aaaaaaabbbbbccccccdddddddeeeeeefffffgggggghhhhhhiiiiiiijjjkkkkklllllllmmmmmmnnnnooooopppppqqqrrrrrrrssssstttttuuuvvvvvwwwwwxxxxxyyyyzzzzz{{{{{|||||}||||{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqqpppppooooonnnmmmmmmmlllllkkkkkkjjjjiiiiiihhhhhhggggggffffeeeeeeddddddddccccccbbbbaaaaaaa````````_____^^^^^^^]]]]]]]]\\\\\\\\\[[[[[ZZZZZZZZYYYYYYYYYYXXXXXXXXXXWWWWWWWWVVVVVVVVVVVVUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUVVVVVVVVVVVVVWWWWWWWXXXXXXXXXXYYYYYYYYYYZZZZZZZZZ[[[[[\\\\\\\\\]]]]]]]^^^^^^^^_____```````aaaaaaaabbbcccccccdddddddeeeeeeffffgggggghhhhhhhiiiiiijjjjkkkkkklllllmmmmmmnnnnooooopppppqqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyzzzzz{{{{{||||||||{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuutttttsssssrrrrrrrqqppppppooooonnnnmmmmmmlllllkkkkkkkjjjiiiiiiihhhhhhggggggffffeeeeeeddddddcccccccbbbbbaaaaaa```````_____^^^^^^^^]]]]]]]\\\\\\\\\[[[[[ZZZZZZZZZYYYYYYYYYYXXXXXXXXXXWWWWWWVVVVVVVVVVVVVUUUUUUUUUUUUTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTUUUUUUUUUUUUUVVVVVVVVVVVVWWWWWWWXXXXXXXXXXYYYYYYYYYYZZZZZZZZ[[[[[\\\\\\\\\]]]]]]]]^^^^^^^_____````````aaaaaabbbbbccccccddddddeeeeeeefffggggggghhhhhhiiiiiijjjjkkkkkklllllmmmmmmnnnnoooooppppppqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyyzzzzz{{{{{|||||{{{{{zzzzzyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqppppppooooonnnnmmmmmmlllllkkkkkkjjjjiiiiiihhhhhgggggggfffffeeeeeeddddddccccccbbbbaaaaaaaa```````____^^^^^^^]]]]]]]]\\\\\\\\\[[[[[ZZZZZZZZYYYYYYYYYXXXXXXXXXXWWWWWWWWVVVVVVVVVVVUUUUUUUUUUUUTTTTTTTTTTTTTTTSSSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSTTTTTTTTTTTTTTTUUUUUUUUUUUUUVVVVVVVVVVVWWWWWWWXXXXXXXXXXYYYYYYYYYZZZZZZZZZ[[[[[\\\\\\\\\]]]]]]]^^^^^^^^___````````aaaaaaabbbbccccccdddddddeeeeeefffffgggggghhhhhiiiiiijjjjkkkkkklllllmmmmmmmnnnooooopppppppqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyyzzzzz{{{{{||{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqppppppooooonnnnmmmmmllllllkkkkkkjjjjiiiiihhhhhhggggggffffeeeeeedddddddccccccbbbbbaaaaaa````````_____^^^^^^^]]]]]]]]\\\\\\\[[[[[ZZZZZZZZZYYYYYYYYYXXXXXXXXXXWWWWWWVVVVVVVVVVVUUUUUUUUUUUTTTTTTTTTTTTTTTSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTTTTTTUUUUUUUUUUUVVVVVVVVVVVVWWWWWWXXXXXXXXXXYYYYYYYYYZZZZZZZZ[[[[[\\\\\\\\]]]]]]]^^^^^^^^_____```````aaaaaaabbbbbccccccddddddeeeeeeffffgggggghhhhhhhiiiiijjjkkkkkkkllllllmmmmmnnnnoooooppppppqqrrrrrrrssssstttttuuuvvvvvwwwwwxxxxxyyyyzzzzz{{{{{|{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqpppppppooooonnnmmmmmlllllllkkkkkjjjiiiiiiihhhhhhggggggffffeeeeeeddddddcccccccbbbbbaaaaaa``````_____^^^^^^^^]]]]]]]\\\\\\\\[[[[[ZZZZZZZZYYYYYYYYYXXXXXXXXXWWWWWWWVVVVVVVVVVUUUUUUUUUUUUTTTTTTTTTTTTTSSSSSSSSSSRRRRRRRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTTTTTUUUUUUUUUUUVVVVVVVVVVWWWWWWWWXXXXXXXXYYYYYYYYYZZZZZZZZZ[[[[[\\\\\\\]]]]]]]]^^^^^^^_____```````aaaaaabbbbbccccccddddddeeeeeeefffggggggghhhhhhiiiiiijjjjkkkkkllllllmmmmmnnnnoooooppppppqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyzzzzz{{{{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuutttttsssssrrrrrrrqqppppppooooonnnnmmmmmllllllkkkkkjjjjiiiiiihhhhhhhgggggfffffeeeeeeddddddccccccbbbbaaaaaa````````_____^^^^^^]]]]]]]]\\\\\\\[[[[[ZZZZZZZZZYYYYYYYYYXXXXXXXXWWWWWWWVVVVVVVVVVUUUUUUUUUUUTTTTTTTTTTTTSSSSSSSSSSRRRRRRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTTTTUUUUUUUUUUUVVVVVVVVVVWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZ[[[[[\\\\\\\\]]]]]]]^^^^^^^_____```````aaaaaabbbbccccccdddddddeeeeeefffffggggghhhhhhiiiiiijjjjkkkkkllllllmmmmmnnnnoooooppppppqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyyzzzzz{{{{{{zzzzzyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqppppppooooonnnnmmmmmllllllkkkkkjjjjiiiiiihhhhhggggggffffeeeeeedddddddccccccbbbbbaaaaaa``````_____^^^^^^^^]]]]]]\\\\\\\\[[[[[[ZZZZZZZYYYYYYYYYXXXXXXXXXWWWWWWVVVVVVVVVVUUUUUUUUUUTTTTTTTTTTTTTSSSSSSSSRRRRRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRSSSSSSSSSTTTTTTTTTTTTUUUUUUUUUUVVVVVVVVVVWWWWWWWXXXXXXXXYYYYYYYYYZZZZZZZZ[[[[[[\\\\\\\]]]]]]]^^^^^^^_____``````aaaaaaabbbbbccccccddddddeeeeeeffffgggggghhhhhiiiiiiijjjkkkkklllllllmmmmmnnnooooopppppppqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyzzzzz{{{{{zzzzzyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqppppppooooonnnnmmmmmllllllkkkkkjjjjiiiiiihhhhhggggggffffeeeeeeddddddcccccccbbbaaaaaaa```````____^^^^^^^]]]]]]]]\\\\\\\[[[[[ZZZZZZZZYYYYYYYYYXXXXXXXXWWWWWVVVVVVVVVVUUUUUUUUUUTTTTTTTTTTTTTSSSSSSSSSRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQPPPPPPPPPPPPPPPPPPPPOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRSSSSSSSSSTTTTTTTTTTTTUUUUUUUUUUVVVVVVVVVVWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZ[[[[[\\\\\\\\]]]]]]]^^^^^^^^___````````aaaaaabbbbccccccddddddeeeeeeefffggggggghhhhhiiiiiijjjjkkkkkllllllmmmmmnnnnoooooppppppqqrrrrrrrssssstttttuuuvvvvvwwwwwxxxxxyyyzzzzz{{zzzzzyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqpppppppooooonnnmmmmmlllllkkkkkkkjjjiiiiihhhhhhhggggggffffeeeeeeddddddccccccbbbbaaaaaa```````_____^^^^^^]]]]]]]\\\\\\\\[[[[[ZZZZZZZYYYYYYYYYXXXXXXXXWWWWWWVVVVVVVVVVUUUUUUUUUUTTTTTTTTTTTSSSSSSSSRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQPPPPPPPPPPPPPPPOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRSSSSSSSTTTTTTTTTTTTUUUUUUUUUUVVVVVVVVVVWWWWWWXXXXXXXYYYYYYYYYZZZZZZZZ[[[[[\\\\\\\]]]]]]]]^^^^^^_____``````aaaaaabbbbccccccdddddddeeeeeeffffgggggghhhhhhiiiiijjjjkkkkkklllllmmmmmnnnnoooooppppppqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyzzzzz{zzzzyyyyxxxxxwwwwwvvvvvuutttttsssssrrrrrrrqqppppppooooonnnnmmmmmlllllkkkkkkjjjjiiiiihhhhhhgggggfffffeeeeedddddddccccccbbbbbaaaaaa``````____^^^^^^^^]]]]]]\\\\\\\[[[[[ZZZZZZZZYYYYYYYYYXXXXXXXWWWWWWVVVVVVVVVUUUUUUUUUUTTTTTTTTTTTSSSSSSSSRRRRRRRRRRRRQQQQQQQQQQQQQQQQQPPPPPPPPPPPPPOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQRRRRRRRRRRRRRSSSSSSSTTTTTTTTTTTUUUUUUUUUUVVVVVVVVVWWWWWWXXXXXXXXYYYYYYYYYZZZZZZZ[[[[[\\\\\\\\]]]]]]^^^^^^^____``````aaaaaaabbbbbccccccddddddeeeeefffffggggghhhhhhiiiiijjjjkkkkkklllllmmmmmnnnnoooooppppppqqqrrrrrrssssstttttuuuvvvvvwwwwwxxxxxyyyzzzzzzzzyyyyxxxxxwwwwwvvvvvuutttttssssssrrrrrqqqppppppooooonnnnmmmmmlllllkkkkkkjjjjiiiiihhhhhhgggggffffeeeeeeddddddcccccccbbbaaaaaaa``````_____^^^^^^]]]]]]]]\\\\\\\[[[[ZZZZZZZYYYYYYYYYXXXXXXXXWWWWWWVVVVVVVVVUUUUUUUUUUTTTTTTTTTTSSSSSSSRRRRRRRRRRRRRQQQQQQQQQQQQQQQPPPPPPPPPPPOOOOOOOOOOOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPQQQQQQQQQQQQQQQRRRRRRRRRRRRSSSSSSSSTTTTTTTTTTUUUUUUUUUUVVVVVVVVVWWWWWWXXXXXXXYYYYYYYYYZZZZZZZZ[[[\\\\\\\\]]]]]]]^^^^^^^_____``````aaaaaabbbbccccccddddddeeeeeeefffggggghhhhhhhiiiiijjjkkkkkkklllllmmmmmnnnooooopppppppqqrrrrrsssssstttttuuuvvvvvwwwwwxxxxxyyyyzzzzzyyyxxxxxwwwwwvvvvvuuuttttttsssssrrrrrqqqppppppooooonnnnmmmmmlllllkkkkkkjjjjiiiiihhhhhhgggggffffeeeeeeddddddccccccbbbbaaaaaa```````___^^^^^^^^]]]]]]\\\\\\\\[[[[[ZZZZZZZYYYYYYYYXXXXXXXWWWWWWVVVVVVVVVUUUUUUUUUTTTTTTTTTTSSSSSSSRRRRRRRRRRRRRQQQQQQQQQQQQQQPPPPPPPPPPOOOOOOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQQQQQRRRRRRRRRRRRSSSSSSSSTTTTTTTTTTUUUUUUUUVVVVVVVVVWWWWWWXXXXXXXXYYYYYYYZZZZZZZZ[[[[[\\\\\\\]]]]]]]^^^^^^^____``````aaaaaabbbbccccccdddddddeeeeeeffffggggghhhhhhiiiiijjjjkkkkkklllllmmmmmnnnnoooooppppppqqrrrrrssssstttttttuuvvvvvwwwwwxxxxxyyyyzzyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrqqqqpppppooooonnnmmmmmlllllkkkkkkkjjiiiiiihhhhhgggggggfffeeeeeeedddddccccccbbbbbaaaaaa``````____^^^^^^]]]]]]]]\\\\\\[[[[[ZZZZZZZZYYYYYYYXXXXXXXXWWWWWWVVVVVVVVVUUUUUUUUTTTTTTTTTTSSSSSSSRRRRRRRRRRRQQQQQQQQQQQQQQPPPPPPPPPPOOOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQQQQQRRRRRRRRRRRSSSSSSTTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWXXXXXXXYYYYYYYYZZZZZZZ[[[[[\\\\\\\]]]]]]]^^^^^^____``````aaaaaaabbbbbccccccdddddeeeeeeffffgggggghhhhhiiiiiijjjkkkkkklllllmmmmmnnnnooooopppppqqqqrrrrrssssstttttuuuvvvvvwwwwwxxxxxyyyyzyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrqqqpppppooooonnnnmmmmmlllllkkkkkkjjjiiiiiihhhhhggggggffffeeeeeedddddcccccccbbbaaaaaaa``````_____^^^^^^]]]]]]\\\\\\\\[[[[ZZZZZZZYYYYYYYYXXXXXXXXWWWWWVVVVVVVVVUUUUUUUUUTTTTTTTTTSSSSSSSRRRRRRRRRRRQQQQQQQQQQQQPPPPPPPPPPOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQQRRRRRRRRRRRSSSSSSSSTTTTTTTTTUUUUUUUUVVVVVVVVVWWWWWXXXXXXXXXYYYYYYYZZZZZZZZ[[[[\\\\\\\]]]]]]^^^^^^^_____``````aaaaaabbbbccccccdddddeeeeeeffffgggggghhhhhiiiiiiijjkkkkkklllllmmmmmnnnnooooopppppqqqqrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyzyyxxxxxwwwwwvvvvvuuutttttsssssrrrrrqqqqpppppooooonnnnmmmmmlllllkkkkkjjjjiiiiiihhhhhggggggffffeeeeeddddddccccccbbbbaaaaaa```````___^^^^^^^]]]]]]]\\\\\\[[[[[ZZZZZZZZYYYYYYYXXXXXXXXWWWWWVVVVVVVVVUUUUUUUTTTTTTTTTTSSSSSSRRRRRRRRRRRRQQQQQQQQQQQPPPPPPPPPOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOPPPPPPPPPQQQQQQQQQQQRRRRRRRRRRRSSSSSSTTTTTTTTTTUUUUUUUUVVVVVVVVVWWWWWXXXXXXXYYYYYYYYZZZZZZZ[[[[[\\\\\\]]]]]]]]^^^^^^____``````aaaaaabbbbccccccdddddddeeeeefffggggggghhhhhiiiiiijjjjkkkkklllllmmmmmnnnooooopppppqqqqrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyyxxxwwwwwvvvvvuuuutttttsssssrrrrrqqqqpppppooooonnnnmmmmmlllllkkkkkjjjiiiiiiihhhhhggggggffffeeeeeddddddccccccbbbbaaaaaa``````____^^^^^^]]]]]]]\\\\\\\[[[[ZZZZZZZYYYYYYYYXXXXXXXWWWWWVVVVVVVVVUUUUUUUUTTTTTTTTTTSSSSSSRRRRRRRRRRQQQQQQQQQQQPPPPPPPPPOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOPPPPPPPPQQQQQQQQQQQQRRRRRRRRRRSSSSSSTTTTTTTTTTUUUUUUUVVVVVVVVVWWWWWXXXXXXXXYYYYYYYZZZZZZZZ[[[\\\\\\\\]]]]]]^^^^^^____``````aaaaaaabbbcccccccddddddeeeeeffffgggggghhhhhiiiiiijjjjkkkkklllllmmmmmnnnnooooopppppqqqrrrrrssssstttttuuuuvvvvvwwwwwxxxxyyxxxxxwwwwwvvvvuuuutttttsssssrrrrrqqqqpppppooooonnnmmmmmlllllkkkkkjjjjiiiiiihhhhhgggggffffeeeeeedddddddcccccbbbaaaaaaa``````_____^^^^^^]]]]]]\\\\\\\[[[[[ZZZZZZYYYYYYYXXXXXXXXWWWWWVVVVVVVVVUUUUUUUTTTTTTTTTSSSSSSRRRRRRRRRRQQQQQQQQQQQPPPPPPPPOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOPPPPPPPQQQQQQQQQQQRRRRRRRRRRSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVVWWWWWXXXXXXXYYYYYYYYZZZZZZ[[[[[\\\\\\]]]]]]^^^^^^^_____``````aaaaaabbbbcccccddddddeeeeeeffffggggghhhhhiiiiiijjjjkkkkklllllmmmmmnnnnooooopppppqqqqrrrrrssssstttttuuuvvvvwwwwwxxxxxyxxxxwwwwwvvvvvuuutttttsssssrrrrrqqqpppppooooonnnnmmmmmlllllkkkkkjjjjiiiiiihhhhhgggggffffeeeeeedddddccccccbbbbaaaaaa```````___^^^^^^^]]]]]]\\\\\\\[[[[ZZZZZZZZYYYYYYXXXXXXXWWWWWVVVVVVVVVUUUUUUUUTTTTTTTTSSSSSSSRRRRRRRRRRQQQQQQQQQQPPPPPPPOOOOOOOOOOOOOONNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNOOOOOOOOOOOOOPPPPPPPPQQQQQQQQQQRRRRRRRRRRSSSSSSTTTTTTTTTUUUUUUUVVVVVVVVVWWWWWXXXXXXXXYYYYYYZZZZZZZ[[[[\\\\\\\\]]]]]]^^^^^^____``````aaaaaabbbbccccccdddddeeeeeeefffggggghhhhhiiiiiiijjjkkkkklllllmmmmmnnnnooooopppppqqqqrrrrrssssstttttuuvvvvvwwwwwxxxxxxxxwwwwwvvvvvuutttttsssssrrrrrqqqqpppppooooonnnnmmmmmlllllkkkkkjjjjiiiiiihhhhhgggggffffeeeeeedddddccccccbbbbaaaaaa``````____^^^^^^]]]]]]]\\\\\\[[[[[ZZZZZZYYYYYYYYXXXXXXXWWWWWVVVVVVVVUUUUUUUTTTTTTTTTSSSSSSRRRRRRRRRQQQQQQQQQQPPPPPPPOOOOOOOOOOOOONNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNOOOOOOOOOOOOPPPPPPPPQQQQQQQQQQRRRRRRRRSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVWWWWWXXXXXXXXYYYYYYYZZZZZZZ[[[[[\\\\\\]]]]]]^^^^^^____``````aaaaaaabbbcccccccdddddeeeeeeffffggggghhhhhiiiiiijjjjkkkkklllllmmmmmnnnooooopppppqqqqrrrrrssssstttttuuuvvvvvwwwwwxxxxxwwwwwvvvvvuuuttttsssssrrrrrqqqqpppppooooonnnnmmmmmlllllkkkkkjjjiiiiihhhhhhhgggggfffeeeeeeedddddccccccbbbbaaaaaa`````_____^^^^^^]]]]]]\\\\\\\[[[ZZZZZZZZYYYYYYXXXXXXXXWWWWWVVVVVVVUUUUUUUUTTTTTTTTSSSSSSSRRRRRRRRQQQQQQQQQQPPPPPPPPOOOOOOOOOOONNNNNNNNNNNNNNMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNOOOOOOOOOOOOPPPPPPPQQQQQQQQQQRRRRRRRRRSSSSSSTTTTTTTTTUUUUUUUVVVVVVVVWWWWWXXXXXXXYYYYYYYZZZZZZZ[[[[\\\\\\]]]]]]^^^^^^^_____`````aaaaaabbbbccccccdddddeeeeeeffffggggghhhhhhiiiiijjjjkkkkklllllmmmmmnnnnooooopppppqqqrrrrrsssssttttuuuuvvvvvwwwwwxxwwwwwvvvvvuuuutttttsssssrrrrrqqqpppppooooonnnmmmmmlllllkkkkkjjjjiiiiihhhhhhgggggffffeeeeeddddddcccccccbbbaaaaa```````___^^^^^^^]]]]]]\\\\\\[[[[[ZZZZZZYYYYYYYYXXXXXXWWWWWVVVVVVVVUUUUUUUTTTTTTTTTSSSSSRRRRRRRRRRQQQQQQQQQPPPPPPPOOOOOOOOOOONNNNNNNNNNNNNMMMMMMMMMMMMMMMLLLLLLLLLLLLKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLMMMMMMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOOOPPPPPPPPQQQQQQQQQRRRRRRRRRRSSSSSTTTTTTTTUUUUUUUUVVVVVVVWWWWWXXXXXXXYYYYYYYZZZZZZ[[[[[\\\\\\\]]]]]]^^^^^^____``````aaaaabbbbccccccddddddeeeeeffffggggghhhhhhiiiiijjjjkkkkklllllmmmmmnnnnooooopppppqqrrrrrssssstttttuuuuvvvvvwwwwwxwwwwvvvvvuuuutttttsssssrrrrrqqpppppooooonnnnmmmmmlllllkkkkkjjjjiiiiihhhhhhgggggffffeeeeeddddddcccccbbbbaaaaaa``````____^^^^^^]]]]]]]\\\\\\[[[[ZZZZZZZYYYYYYXXXXXXXXWWWWVVVVVVVUUUUUUUUUTTTTTTTSSSSSRRRRRRRRRQQQQQQQQQQPPPPPPOOOOOOOOOOOONNNNNNNNNNNNMMMMMMMMMMMMMMLLLLLLLLLLLKKKKKKKKKKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLMMMMMMMMMMMMMNNNNNNNNNNNNNOOOOOOOOOOOPPPPPPQQQQQQQQQQRRRRRRRRRSSSSSTTTTTTTTUUUUUUUUVVVVVVVVWWWWXXXXXXXYYYYYYZZZZZZZZ[[[[\\\\\\]]]]]]^^^^^^____``````aaaaaaabbbcccccdddddddeeeeefffggggghhhhhhhiiiiijjjkkkkklllllmmmmmnnnnooooopppppqqqrrrrrssssstttttuuuvvvvvwwwwxwwwwvvvvvuuutttttsssssrrrrrqqpppppooooonnnnmmmmmlllllkkkkkjjjjiiiiihhhhhhgggggffffeeeeeddddddcccccbbbbaaaaaa``````____^^^^^^]]]]]]\\\\\\\[[[ZZZZZZZYYYYYYYXXXXXXWWWWWVVVVVVVVUUUUUUUTTTTTTTTSSSSSRRRRRRRRRQQQQQQQQQQPPPPPPOOOOOOOOOONNNNNNNNNNNMMMMMMMMMMMMMMLLLLLLLLLLKKKKKKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLMMMMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOOPPPPPPQQQQQQQQQQRRRRRRRRRSSSSSTTTTTTTUUUUUUUUVVVVVVVWWWWWXXXXXXYYYYYYYYZZZZZZ[[[[\\\\\\]]]]]]^^^^^^^___```````aaaaaabbbbcccccddddddeeeeeffffggggghhhhhhiiiiijjjjkkkkklllllmmmmmnnnooooopppppqqqrrrrrssssstttttuuvvvvvwwwwwwwwvvvvvuutttttsssssrrrrrqqqqpppppooooonnnmmmmmlllllkkkkkkjjiiiiihhhhhhhgggggfffeeeeedddddddcccccbbbaaaaaaa`````_____^^^^^]]]]]]\\\\\\[[[[[ZZZZZZYYYYYYYXXXXXXWWWWWVVVVVVVUUUUUUUUTTTTTTTSSSSSRRRRRRRRRQQQQQQQQQPPPPPPOOOOOOOOOONNNNNNNNNNNMMMMMMMMMMMMMLLLLLLLLLLKKKKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKLLLLLLLLLLMMMMMMMMMMMMNNNNNNNNNNNOOOOOOOOOOPPPPPPPQQQQQQQQRRRRRRRRRSSSSSTTTTTTTTUUUUUUUVVVVVVVVWWWWWXXXXXXYYYYYYZZZZZZ[[[[[\\\\\\\]]]]]]^^^^^_____`````aaaaaabbbbcccccddddddeeeeeffffggggghhhhhhiiiiijjjkkkkkklllllmmmmmnnooooopppppqqqqrrrrrssssstttttuuuvvvvvwwwwwvvvvvuutttttsssssrrrrrqqqqpppppooooonnmmmmmlllllkkkkkkkjjiiiiihhhhhhgggggffffeeeeeddddddcccccbbbbaaaaaa`````____^^^^^^]]]]]]]\\\\\\[[[[ZZZZZZYYYYYYYXXXXXXXWWWWWVVVVVVUUUUUUUTTTTTTTTSSSSSSRRRRRRRRQQQQQQQQPPPPPPPOOOOOOOOOONNNNNNNNNNMMMMMMMMMMMMLLLLLLLLLKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKLLLLLLLLMMMMMMMMMMMMMNNNNNNNNNNOOOOOOOOOOPPPPPPQQQQQQQQQRRRRRRRSSSSSSSTTTTTTTUUUUUUUUVVVVVVWWWWWXXXXXXYYYYYYYYZZZZZZ[[[[\\\\\\]]]]]]^^^^^^____`````aaaaaabbbbcccccddddddeeeeeffffggggghhhhhhiiiiijjjkkkkkklllllmmmmmnnnooooopppppqqqrrrrrssssstttttuuuvvvvvwwvvvvvuuuutttttssssrrrrrqqqqpppppooooonnmmmmmllllllkkkkkjjjiiiiiihhhhhgggggffffeeeeedddddccccccbbbbaaaaa``````____^^^^^^]]]]]]\\\\\\\[[[ZZZZZZZYYYYYYXXXXXXWWWWWVVVVVVVVUUUUUUTTTTTTTSSSSSSSRRRRRRRQQQQQQQQQPPPPPPOOOOOOOOONNNNNNNNNNNMMMMMMMMMMMLLLLLLLLLKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKLLLLLLLLLMMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOPPPPPPPQQQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVVWWWWWXXXXXXXYYYYYYZZZZZZ[[[[\\\\\\]]]]]]^^^^^^^___```````aaaaabbbcccccccdddddeeeeefffggggghhhhhiiiiiiijjkkkkkllllllmmmmmnnnooooopppppqqqqrrrrrssstttttuuuuvvvvvwvvvvuuuutttttsssssrrrrqqqpppppooooonnnnmmmmmlllllkkkkkjjjiiiiiihhhhhgggggffffeeeeedddddccccccbbbbaaaaa``````____^^^^^^]]]]]\\\\\\[[[[[ZZZZZZYYYYYYYXXXXXXWWWWWVVVVVVUUUUUUUUTTTTTTTSSSSSRRRRRRRRQQQQQQQQPPPPPPPOOOOOOOONNNNNNNNNNMMMMMMMMMMMMLLLLLLLKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKLLLLLLLLMMMMMMMMMMMNNNNNNNNNNOOOOOOOOOPPPPPPQQQQQQQQQRRRRRRRSSSSSTTTTTTTTUUUUUUUVVVVVVVWWWWWXXXXXXYYYYYYZZZZZZ[[[[[\\\\\\\]]]]]^^^^^^____``````aaaaabbbbccccccdddddeeeeeffffggggghhhhhiiiiiijjkkkkklllllmmmmmnnnnooooopppppqqqqrrrrssssstttttuuuvvvvwvvvvuuutttttsssssrrrrrqqpppppooooonnnnmmmmmlllllkkkkkjjiiiiiiihhhhhgggggfffeeeeedddddcccccccbbbaaaaa```````___^^^^^]]]]]]]\\\\\\[[[[ZZZZZZYYYYYYXXXXXXWWWWWVVVVVVVVUUUUUUTTTTTTTTSSSSSRRRRRRRQQQQQQQQQPPPPPOOOOOOOOOONNNNNNNNNMMMMMMMMMMMLLLLLLLKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIIIIIIIIHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKLLLLLLLLMMMMMMMMMMMNNNNNNNNNOOOOOOOOOOPPPPPQQQQQQQQRRRRRRRRSSSSSTTTTTTTUUUUUUUVVVVVVVWWWWWXXXXXXYYYYYYYZZZZZZ[[[[\\\\\\]]]]]]^^^^^____``````aaaaabbbbccccccdddddeeeeeffffggggghhhhhiiiiiijjjkkkkklllllmmmmmnnnooooopppppqqqrrrrrssssstttttuuvvvvvvvvuutttttsssssrrrrrqqqpppppooooonnnnmmmmmlllllkkkkkjjjiiiiihhhhhgggggffffeeeeedddddccccccbbbbaaaaa``````____^^^^^]]]]]]\\\\\\\[[[ZZZZZZZYYYYYYXXXXXXWWWWWVVVVVVUUUUUUUUTTTTTTSSSSSRRRRRRRRQQQQQQQQPPPPPOOOOOOOOONNNNNNNNNNMMMMMMMMMMLLLLLLLLKKKKKKKKKKKKJJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIIIIHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJKKKKKKKKKKKKKLLLLLLLMMMMMMMMMMNNNNNNNNNNOOOOOOOOOPPPPPQQQQQQQQQRRRRRRRSSSSSTTTTTTTUUUUUUUVVVVVVWWWWWXXXXXXXYYYYYYZZZZZZ[[[[\\\\\\]]]]]]^^^^^____``````aaaaabbbbccccccdddddeeeeeffffggggghhhhhiiiiijjjjkkkkklllllmmmmmnnnnooooopppppqqrrrrrssssstttttuuuvvvvvuuuttttsssssrrrrrqqqqppppooooonnnmmmmmlllllkkkkkjjjjiiiiihhhhhgggggffffeeeeedddddccccccbbbbaaaaa`````____^^^^^^]]]]]]\\\\\[[[[[ZZZZZZYYYYYYYXXXXXXWWWWVVVVVVUUUUUUUTTTTTTTTSSSSSRRRRRRRQQQQQQQQPPPPPOOOOOOOOONNNNNNNNNNMMMMMMMMLLLLLLLLKKKKKKKKKKKKJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIHHHHHHHHHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJKKKKKKKKKKKKKLLLLLLLMMMMMMMMMNNNNNNNNNNOOOOOOOOOPPPPPQQQQQQQRRRRRRRRSSSSSTTTTTTTUUUUUUUUVVVVVVWWWWXXXXXXYYYYYYZZZZZZ[[[[[\\\\\]]]]]]]^^^^^^____`````aaaaabbbcccccccdddddeeeeefffggggghhhhhiiiiijjjjkkkkklllllmmmmmnnnnoooooppppqqqrrrrrsssssttttuuuuvvuuuutttttssssrrrrrqqqqpppppooooonnmmmmmlllllkkkkkjjjjiiiiihhhhhgggggffffeeeeedddddccccccbbaaaaaaa`````___^^^^^^^]]]]]\\\\\\[[[[ZZZZZZYYYYYYXXXXXXWWWWWVVVVVVVUUUUUUTTTTTTTSSSSSRRRRRRRRQQQQQQQPPPPPOOOOOOOOONNNNNNNNNMMMMMMMMMMLLLLLLKKKKKKKKKKKKKJJJJJJJJJJJJIIIIIIIIIIIIIIIIHHHHHHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIJJJJJJJJJJJJJKKKKKKKKKKKKLLLLLLLMMMMMMMMMMNNNNNNNNOOOOOOOOOPPPPPQQQQQQQQRRRRRRRSSSSSTTTTTTTTUUUUUUVVVVVVWWWWWXXXXXXYYYYYYYZZZZZZ[[[[\\\\\\]]]]]^^^^^^____`````aaaaaabbbccccccdddddeeeeeffffggggghhhhhiiiiijjjkkkkklllllmmmmmnnnooooopppppqqqqrrrrrssstttttuuuuvuuutttttsssssrrrrqqqpppppooooonnnmmmmmlllllkkkkkjjjjiiiiihhhhhgggggfffeeeeedddddcccccccbbaaaaaa`````____^^^^^^]]]]]\\\\\\\[[[ZZZZZZZYYYYYYXXXXXXWWWWVVVVVVUUUUUUUUTTTTTTSSSSSRRRRRRRQQQQQQQQPPPPPOOOOOOOOONNNNNNNNMMMMMMMMMMLLLLLLLKKKKKKKKKKKJJJJJJJJJJJJIIIIIIIIIIIIIIHHHHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHIIIIIIIIIIIIIIJJJJJJJJJJJJJKKKKKKKKKKKLLLLLLMMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPQQQQQQQRRRRRRRRSSSSSTTTTTTUUUUUUUVVVVVVVWWWXXXXXXXYYYYYYZZZZZZ[[[[\\\\\\]]]]]^^^^^^____`````aaaaaabbbccccccdddddeeeeeffffggggghhhhhiiiiijjjjkkkkklllllmmmmmnnooooopppppqqqqrrrrssssstttttuuvuutttttsssssrrrrrqqpppppooooonnnmmmmmlllllkkkkkjjjiiiiihhhhhgggggffffeeeeedddddccccccbbbaaaaaa`````____^^^^^^]]]]]\\\\\\[[[[ZZZZZZYYYYYYYXXXXXXWWWWVVVVVVUUUUUUTTTTTTTTSSSSSRRRRRRQQQQQQQPPPPPPPOOOOOOONNNNNNNNNMMMMMMMMMLLLLLLKKKKKKKKKKKJJJJJJJJJJJIIIIIIIIIIIIIIHHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHIIIIIIIIIIIIIIJJJJJJJJJJJKKKKKKKKKKKKLLLLLLMMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPQQQQQQQQRRRRRRSSSSSTTTTTTTUUUUUUUVVVVVVWWWWXXXXXXYYYYYYZZZZZZ[[[[\\\\\\]]]]]^^^^^^^___`````aaaaaaabbccccccdddddeeeeeffffggggghhhhhiiiiijjjjkkkkklllllmmmmmnnooooopppppqqqrrrrrssssstttttuuuutttsssssrrrrrqqqpppppooooonnnnmmmmmlllkkkkkjjjjiiiiihhhhhgggggffffeeeeedddddcccccbbbbaaaaaa`````____^^^^^]]]]]]\\\\\\[[[[ZZZZZYYYYYYXXXXXXWWWWWVVVVVVVUUUUUUTTTTTTSSSSSRRRRRRRRQQQQQQQPPPPPOOOOOOOONNNNNNNNMMMMMMMMMLLLLLLKKKKKKKKKKJJJJJJJJJJJJIIIIIIIIIIIIHHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHIIIIIIIIIIIIIJJJJJJJJJJJKKKKKKKKKKLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOPPPPPQQQQQQQQRRRRRRRSSSSSTTTTTTTUUUUUUVVVVVVWWWWWXXXXXXYYYYYYYZZZZZ[[[\\\\\\\]]]]]]^^^^^____`````aaaaaabbbbcccccdddddeeeeefffggggghhhhhiiiiijjjjkkkkkllllmmmmmnnnnooooopppppqqrrrrrsssssttttuutttttssssrrrrrqqqqppppooooonnnmmmmmlllllkkkkkjjjiiiiihhhhhgggggffffeeeeedddddcccccbbbaaaaaaa`````___^^^^^]]]]]]]\\\\\[[[ZZZZZZZYYYYYYXXXXXXWWWWVVVVVVUUUUUUTTTTTTTTSSSSRRRRRRRQQQQQQQQPPPPPOOOOOOONNNNNNNNNMMMMMMMMMLLLLLLKKKKKKKKKJJJJJJJJJJJIIIIIIIIIIIIHHHHHHHHHHGGGGGGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGHHHHHHHHHHIIIIIIIIIIIIIJJJJJJJJJJJKKKKKKKKKLLLLLLMMMMMMMMMNNNNNNNNOOOOOOOOPPPPPQQQQQQQRRRRRRRRSSSSTTTTTTTUUUUUUVVVVVVVWWWXXXXXXXYYYYYYZZZZZZ[[[[\\\\\]]]]]]^^^^^____`````aaaaaabbbbcccccdddddeeeeeffffggggghhhhhiiiiijjkkkkklllllmmmmmnnnnoooooppppqqqrrrrrsssstttttuttttsssssrrrrqqqqpppppooonnnnmmmmmlllllkkkkkjjjiiiiihhhhhgggggfffeeeeedddddcccccccbbaaaaaa`````____^^^^^]]]]]]\\\\\[[[[ZZZZZZYYYYYYYXXXXXXWWWWVVVVVVUUUUUUTTTTTTSSSSSRRRRRRRQQQQQQQPPPPPOOOOOOOONNNNNNNNMMMMMMMMMLLLLLKKKKKKKKKKJJJJJJJJJJIIIIIIIIIIIIIHHHHHHHHGGGGGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGHHHHHHHHHIIIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOPPPPPQQQQQQQQRRRRRRSSSSSTTTTTTUUUUUUUVVVVVVWWWWXXXXXXYYYYYYZZZZZZ[[[[\\\\\]]]]]]^^^^^____`````aaaaaabbbccccccdddddeeeeeffffggggghhhhhiiiiijjkkkkklllllmmmmmnnnnoooopppppqqqqrrrsssssttttttttsssssrrrrrqqpppppooooonnnmmmmmlllllkkkkkjjiiiiihhhhhgggggffffeeeeedddddccccccbbbaaaaaa`````____^^^^^]]]]]]\\\\\[[[[ZZZZZZYYYYYXXXXXXWWWWWVVVVVVVUUUUUUTTTTTTSSSSRRRRRRRQQQQQQQQPPPPOOOOOOONNNNNNNNNMMMMMMMLLLLLLLKKKKKKKKKKJJJJJJJJJJIIIIIIIIIIIHHHHHHHGGGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGHHHHHHHHIIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOPPPPQQQQQQQRRRRRRRRSSSTTTTTTTUUUUUUVVVVVVWWWWWXXXXXXYYYYYZZZZZZZ[[[\\\\\]]]]]]]^^^^^___`````aaaaaaabbccccccdddddeeeeeffffggggghhhhhiiiiijjjkkkkklllllmmmmmnnooooopppppqqqrrrrrssssstttttsssssrrrrrqqpppppooooonnnmmmmmlllllkkkkkjjjiiiiihhhhhgggggfffeeeeedddddccccccbbbaaaaaa`````____^^^^^]]]]]\\\\\\[[[[ZZZZZZYYYYYXXXXXXWWWWVVVVVVUUUUUUTTTTTTTSSSSSRRRRRRQQQQQQQPPPPPOOOOOOOONNNNNNNMMMMMMMMLLLLLLKKKKKKKKKJJJJJJJJJJIIIIIIIIIIIHHHHHHHHGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGHHHHHHHIIIIIIIIIIIIJJJJJJJJJJKKKKKKKKLLLLLLLMMMMMMMNNNNNNNNOOOOOOOPPPPPQQQQQQQQRRRRRRSSSSSTTTTTTUUUUUUVVVVVVVWWWXXXXXXXYYYYYZZZZZZ[[[[\\\\\\]]]]]^^^^^____`````aaaaaabbcccccccdddddeeeeeffggggghhhhhiiiiijjjjkkkkklllllmmmmmnnooooopppppqqqrrrrrsssssttttsssrrrrrqqqqppppooooonnnnmmmlllllkkkkkjjjjiiiiihhhhhgggggfffeeeeedddddccccccbbaaaaaaa`````___^^^^^]]]]]\\\\\\\[[[ZZZZZYYYYYYYXXXXXXWWWWVVVVVVUUUUUUTTTTTTSSSSRRRRRRRRQQQQQQPPPPPOOOOOOONNNNNNNNMMMMMMMLLLLLLLKKKKKKKKJJJJJJJJJJIIIIIIIIIIHHHHHHHHGGGGGGGGGGGGFFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFGGGGGGGGGGGGGHHHHHHHIIIIIIIIIIJJJJJJJJJJKKKKKKKKKLLLLLLMMMMMMMMNNNNNNNOOOOOOOOPPPPPQQQQQQRRRRRRRSSSSTTTTTTUUUUUUUVVVVVVWWWWXXXXXXYYYYYYZZZZZ[[[[\\\\\\]]]]]^^^^^____`````aaaaaabbbccccccdddddeeeeeffggggghhhhhiiiiijjjjkkkkklllllmmmmnnnnooooopppqqqqrrrrrssssttsssssrrrrqqqqpppppoooonnnmmmmmllllkkkkkjjjjiiiiihhhhhgggggffeeeeedddddddcccccbbaaaaaa`````____^^^^^]]]]]\\\\\\[[[[ZZZZZYYYYYYXXXXXXXWWWVVVVVVVUUUUUUTTTTTTSSSSRRRRRRQQQQQQQQPPPOOOOOOOONNNNNNNMMMMMMMMMLLLLLKKKKKKKKKJJJJJJJJJIIIIIIIIIIHHHHHHHGGGGGGGGGGGGGFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFGGGGGGGGGGGGHHHHHHHHIIIIIIIIIIJJJJJJJJJKKKKKKKKLLLLLMMMMMMMMMNNNNNNNNOOOOOOOPPPPQQQQQQQRRRRRRRSSSTTTTTTTUUUUUUVVVVVVWWWWXXXXXXYYYYYYZZZZZ[[[[\\\\\\]]]]]^^^^^____`````aaaaaabbbcccccddddddeeeeefffggggghhhhhiiiiijjjkkkkkllllmmmmmnnnnoooopppppqqqrrrrssssstssssrrrrrqqqpppppooooonnmmmmmlllllkkkkkjjjiiiiihhhhhgggggfffeeeeedddddcccccbbbaaaaaa`````____^^^^^]]]]]\\\\\\[[[[ZZZZZYYYYYYXXXXXWWWWVVVVVVUUUUUUTTTTTTTSSSSSRRRRRRQQQQQQPPPPPOOOOOOOONNNNNNMMMMMMMMMLLLLLKKKKKKKKJJJJJJJJJIIIIIIIIIIHHHHHHGGGGGGGGGGGGFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEDDDDDDDDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFGGGGGGGGGGGHHHHHHIIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLMMMMMMMMMNNNNNNOOOOOOOPPPPPQQQQQQQRRRRRRSSSSSTTTTTTUUUUUUVVVVVVVWWWXXXXXYYYYYYYZZZZZ[[[\\\\\\\]]]]]^^^^^___`````aaaaaaabbcccccdddddeeeeeffffggggghhhhhiiiiijjkkkkklllllmmmmmnnnooooopppppqqrrrrrssssssssrrrrrqqpppppooooonnnmmmmmlllllkkkkkjjiiiiihhhhhgggggffffeeeeedddddcccccbbbbaaaaa`````____^^^^^]]]]]\\\\\\[[[[ZZZZZYYYYYYXXXXXWWWWVVVVVVUUUUUUTTTTTTSSSSRRRRRRQQQQQQQQPPPPOOOOOOONNNNNNNNMMMMMMMLLLLLKKKKKKKKKJJJJJJJJJIIIIIIIIHHHHHHHGGGGGGGGGGGFFFFFFFFFFFFFFEEEEEEEEEEEEEEEDDDDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDEEEEEEEEEEEEEEEFFFFFFFFFFFFFFGGGGGGGGGGGHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKLLLLLMMMMMMMMNNNNNNNOOOOOOOOPPPPQQQQQQQRRRRRRSSSSTTTTTTUUUUUUUVVVVVVWWWWXXXXXYYYYYYZZZZZ[[[[\\\\\\]]]]]^^^^^____`````aaaaabbbcccccdddddeeeeeffffggggghhhhhiiiiijjjkkkkklllllmmmmmnnooooopppppqqqrrrrrsssssrrrrrqqqppppooooonnnnmmmmlllllkkkkkjjiiiiihhhhhgggggffffeeeeedddddcccccbbbbaaaaa`````___^^^^^]]]]]\\\\\\\[[ZZZZZZYYYYYXXXXXXXWWWVVVVVVVUUUUUUTTTTTTSSSSRRRRRRQQQQQQPPPPPOOOOOOONNNNNNNMMMMMMMMLLLLLKKKKKKKKJJJJJJJJIIIIIIIIIIHHHHHHGGGGGGGGGGFFFFFFFFFFFFFEEEEEEEEEEEEEEEDDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDEEEEEEEEEEEEEEEFFFFFFFFFFFFGGGGGGGGGGHHHHHHHIIIIIIIIIIJJJJJJJKKKKKKKKKLLLLLMMMMMMMNNNNNNNNOOOOOOPPPPPQQQQQQRRRRRRRSSSTTTTTTTUUUUUUVVVVVVWWWWXXXXXXYYYYYZZZZZZ[[[\\\\\\]]]]]^^^^^____`````aaaaabbbbcccccdddddeeeeefffggggghhhhhiiiiijjjkkkkklllllmmmmnnnoooooppppqqqqrrrrrssssrrrqqqqpppppoooonnnnmmmmmlllkkkkkjjjjiiiiihhhhgggggffffeeeeedddddcccccbbbaaaaa`````____^^^^^]]]]]\\\\\[[[[ZZZZZZYYYYYXXXXXXWWWWVVVVVVUUUUUTTTTTTTSSSSSRRRRRRQQQQQQPPPPOOOOOOONNNNNNNMMMMMMMLLLLLKKKKKKKKKJJJJJJJIIIIIIIIIHHHHHHHHGGGGGGGGGGFFFFFFFFFFFEEEEEEEEEEEEEEDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEEEEEFFFFFFFFFFFGGGGGGGGGGHHHHHHHIIIIIIIIIJJJJJJJJKKKKKKKKLLLLLMMMMMMMMNNNNNNOOOOOOOOPPPQQQQQQQRRRRRRSSSSSTTTTTTUUUUUVVVVVVWWWWXXXXXXYYYYYZZZZZZZ[[[\\\\\]]]]]^^^^^____`````aaaaabbbbcccccdddddeeeeeffffggggghhhiiiiijjjjkkkkkllllmmmmmnnnnooopppppqqqqrrrrssrrrrrqqqpppppooooonnmmmmmlllllkkkkjjjjiiiiihhhhhggggfffeeeeedddddcccccbbbbaaaaa`````____^^^^^]]]]]\\\\\[[[[ZZZZZZYYYYYXXXXXXWWWWVVVVVUUUUUUTTTTTTSSSSRRRRRRQQQQQQQPPPPPOOOOOONNNNNNNMMMMMMMMLLLLLKKKKKKKJJJJJJJJIIIIIIIIIHHHHHHGGGGGGGGGGFFFFFFFFFFFEEEEEEEEEEEEEDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEEEFFFFFFFFFFFFGGGGGGGGGGHHHHHHIIIIIIIIIJJJJJJJKKKKKKKKLLLLLMMMMMMMNNNNNNNNOOOOOOPPPPPQQQQQQRRRRRRSSSSTTTTTTUUUUUUUVVVVVWWWXXXXXXXYYYYYZZZZZZ[[[[\\\\\]]]]]^^^^^___`````aaaaabbbbcccccdddddeeeeeffffgggghhhhhiiiiijjjkkkklllllmmmmmnnnooooopppppqqrrrrrsrrrrqqqpppppooooonnmmmmmlllllkkkkkjjjiiiiihhhhhgggggffeeeeedddddcccccbbbbaaaaa`````____^^^^^]]]]]\\\\\[[[ZZZZZZZYYYYYXXXXXXWWWWVVVVVUUUUUUTTTTTTSSSSRRRRRRQQQQQQPPPPOOOOOOOONNNNNNMMMMMMMLLLLLKKKKKKKKJJJJJJJIIIIIIIIIHHHHHHGGGGGGGGGGFFFFFFFFFFEEEEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCDDDDDDDDDEEEEEEEEEEEEFFFFFFFFFFGGGGGGGGGGHHHHHHIIIIIIIIIJJJJJJJJKKKKKKKLLLLLMMMMMMMMNNNNNNOOOOOOOPPPPQQQQQQRRRRRRRSSSTTTTTTTUUUUUUVVVVVWWWWXXXXXXYYYYYZZZZZZ[[[[\\\\\]]]]]^^^^^____`````aaaaabbbcccccdddddeeeeefffggggghhhhhiiiiijjkkkkklllllmmmmmnnnooooopppppqqrrrrrrrrqqqqpppooooonnnnmmmmlllllkkkkkjjiiiiihhhhhgggggfffeeeeedddddcccccbbbbaaaaa`````___^^^^^]]]]]\\\\\[[[[ZZZZZZYYYYYXXXXXWWWWVVVVVVUUUUUUUTTTTTSSSSSRRRRRRQQQQQQPPPPOOOOOONNNNNNNNMMMMMMLLLLLKKKKKKKJJJJJJJJIIIIIIIIIHHHHHHGGGGGGGGGFFFFFFFFFFEEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCDDDDDDDDDEEEEEEEEEEEFFFFFFFFFFGGGGGGGGGHHHHHHIIIIIIIIIJJJJJJJKKKKKKKKLLLLLMMMMMMNNNNNNNOOOOOOOPPPQQQQQQQRRRRRRSSSSSTTTTTUUUUUUVVVVVVWWWWXXXXXYYYYYZZZZZZ[[[[\\\\\]]]]]^^^^^____`````aaaaabbbbcccccdddddeeeeeffggggghhhhhiiiiijjjkkkkklllllmmmnnnnoooooppppqqqqrrrrrrqqpppppoooonnnnmmmmmllllkkkkkjjjiiiihhhhhgggggffffeeeeeddddcccccbbbaaaaa`````____^^^^^]]]]]\\\\\[[[[ZZZZZZYYYYYXXXXXWWWWVVVVVVUUUUUTTTTTTSSSSRRRRRRQQQQQQQPPPPPOOOOOONNNNNNMMMMMMMMLLLKKKKKKKKJJJJJJJJJIIIIIIIHHHHHHGGGGGGGGGFFFFFFFFFFEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGHHHHHHIIIIIIIIJJJJJJJJJKKKKKKKLLLLMMMMMMMNNNNNNNOOOOOOPPPPPQQQQQQRRRRRRSSSSTTTTTTUUUUUVVVVVVVWWWXXXXXYYYYYZZZZZZZ[[[\\\\\]]]]]^^^^^____`````aaaaabbbbcccccddddeeeeefffggggghhhhhiiiijjjjkkkkkllllmmmmmnnnoooopppppqqqrrrrrqqpppppooooonnnmmmmmlllllkkkjjjjiiiiihhhhgggggffffeeeeedddddcccccbbaaaaa`````____^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYYXXXXXWWWWVVVVVVUUUUUTTTTTTSSSSRRRRRRQQQQQQPPPPOOOOOONNNNNNNNMMMMMMLLLLLKKKKKKKKJJJJJJJIIIIIIIIHHHHHGGGGGGGGGGFFFFFFFFEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBCCCCCCCCCCCCDDDDDDDDDEEEEEEEEEEFFFFFFFFFGGGGGGGGGGHHHHHIIIIIIIJJJJJJJJKKKKKKKLLLLLMMMMMMMNNNNNNNOOOOOOPPPPQQQQQQRRRRRRRSSSTTTTTTTUUUUUVVVVVVWWWWXXXXXYYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^___`````aaaaabbbcccccdddddeeeeeffffggggghhhiiiiijjjjkkkklllllmmmmmnnooooopppppqqqrrqqqqppppooooonnmmmmmlllllkkkkkjjjiiiiihhhhhggggfffeeeeedddddcccccbbbaaaaa`````____^^^^^]]]]]\\\\\[[[ZZZZZYYYYYYYXXXXXWWWVVVVVVVUUUUUTTTTTTSSSSRRRRRRQQQQQQPPPPOOOOOONNNNNNMMMMMMMMLLLLKKKKKKKJJJJJJJJIIIIIIIHHHHHGGGGGGGGGFFFFFFFFFFEEEEEEEEEEDDDDDDDCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAABBBBBBBBBBBBBBBCCCCCCCCCCCCDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGHHHHHIIIIIIIIJJJJJJJKKKKKKKKLLLLMMMMMMMNNNNNNOOOOOOOPPPQQQQQQQRRRRRRSSSSTTTTTTUUUUUVVVVVVWWWWXXXXXYYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^____`````aaaaabbcccccdddddeeeeeffffgggghhhhhiiiiijjkkkkklllllmmmmmnnnooooopppqqqqrqqqpppppoooonnnmmmmlllllkkkkkjjjiiiiihhhhhgggggffeeeeedddddcccccbbbaaaaa`````___^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYYXXXXXWWWWVVVVVUUUUUUTTTTTTTSSSRRRRRQQQQQQQPPPPPOOOOOONNNNNNMMMMMMLLLLLKKKKKKKJJJJJJJIIIIIIIIHHHHHHGGGGGGGFFFFFFFFFEEEEEEEEEEDDDDDDDDCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAABBBBBBBBBBBBBBBCCCCCCCCCCCDDDDDDDEEEEEEEEEEFFFFFFFFFGGGGGGGGHHHHHHIIIIIIIJJJJJJJJKKKKKKLLLLLMMMMMMNNNNNNNOOOOOOPPPPPQQQQQQRRRRRSSSSTTTTTTUUUUUUVVVVVWWWWXXXXXYYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^____`````aaaaabbcccccdddddeeeeefffggggghhhhhiiiiijjkkkkklllllmmmmnnnnoooopppppqqqqqpppppooonnnnmmmmmllllkkkkkjjjjiiihhhhhgggggfffeeeeedddddcccccbbbbaaaaa`````__^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYYXXXXXWWWWVVVVVUUUUUUTTTTTSSSSRRRRRRQQQQQQPPPPOOOOOONNNNNNNMMMMMMMLLLLKKKKKKKJJJJJJJIIIIIIIHHHHHHGGGGGGGGFFFFFFFFFEEEEEEEEEEDDDDDDCCCCCCCCCCCBBBBBBBBBBBBBBAAAAAAAAAA@@@@@@@@@@@@@@@@@@@@@@@@??????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAABBBBBBBBBBBBBCCCCCCCCCCCCDDDDDDEEEEEEEEEEFFFFFFFFFGGGGGGGHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLMMMMMMMMNNNNNNOOOOOOPPPPQQQQQQRRRRRRRSSSTTTTTUUUUUUUVVVVVWWWXXXXXYYYYYYYZZZZZ[[[\\\\\]]]]]^^^^^___`````aaaaabbbbcccccdddddeeeeeffggggghhhhhiiiijjjjkkkkklllmmmmmnnnnoooopppppqqqqpppooooonnnmmmmmlllllkkkkjjjiiiiihhhhgggggffffeeeedddddcccccbbbaaaaa`````___^^^^^]]]]]\\\\\\[[[ZZZZZYYYYYYXXXXXWWWWVVVVVUUUUUUTTTTTSSSSRRRRRRQQQQQQPPPPOOOOOONNNNNNMMMMMMMLLLLLKKKKKKJJJJJJJIIIIIIIIHHHHHGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCCCCBBBBBBBBBBBBBAAAAAAAAAA@@@@@@@@@@@@@@@@@@@??????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@AAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFFGGGGGGGGHHHHHIIIIIIIJJJJJJJJKKKKKKLLLLLMMMMMMNNNNNNOOOOOOOPPPQQQQQQQRRRRRRSSSSTTTTTUUUUUUVVVVVWWWWXXXXXYYYYYYZZZZZ[[\\\\\\\]]]]]^^^^^__`````aaaaabbbbcccccdddddeeeefffggggghhhhiiiiijjjjkkkklllllmmmmmnnoooooppppqqppppooooonnnnmmmmlllllkkkkkjjiiiiihhhhhggggffffeeeeedddcccccbbbbaaaaa`````___^^^^^]]]]]\\\\\\[[ZZZZZYYYYYYYXXXXXWWWVVVVVUUUUUUUTTTTTSSSRRRRRRRQQQQQPPPPPOOOOOONNNNNNMMMMMMLLLLKKKKKKKKJJJJJJIIIIIIIHHHHHGGGGGGGGFFFFFFFFFEEEEEEEEDDDDDDDCCCCCCCCCCBBBBBBBBBBBBAAAAAAAAA@@@@@@@@@@@@@@@@?????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@AAAAAAAABBBBBBBBBBBBBCCCCCCCCCCDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGHHHHHIIIIIIIIJJJJJJKKKKKKKLLLLMMMMMMNNNNNNNOOOOOOPPPPPQQQQQRRRRRRSSSSTTTTTUUUUUUVVVVVWWWWXXXXXYYYYYYZZZZZ[[[\\\\\\]]]]]^^^^^__`````aaaaabbbbcccccddddeeeeeffffggghhhhhiiiiijjjkkkkklllllmmmmnnnoooooppppqppppoooonnnnmmmlllllkkkkkjjjiiiiihhhhhgggggffeeeeedddddcccccbbbaaaaa`````____^^^^^]]]]]\\\\\[[ZZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSSSRRRRRRQQQQQPPPPOOOOOONNNNNNNMMMMMMLLLLLKKKKKKJJJJJJJJIIIIIIHHHHHGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDCCCCCCCCCCBBBBBBBBBBBAAAAAAAA@@@@@@@@@@@@@@@@???????????????????????>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>??????????????????????@@@@@@@@@@@@@@@@@AAAAAAABBBBBBBBBBBCCCCCCCCCCDDDDDDDEEEEEEEEFFFFFFFFFGGGGGGGGHHHHHIIIIIIJJJJJJJKKKKKKKLLLLLMMMMMMNNNNNNOOOOOOPPPPQQQQQRRRRRRSSSSTTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZZ[[[\\\\\]]]]]^^^^^____`````aaaaabbcccccdddddeeeeefffggggghhhhhiiiiijjkkkkklllllmmmmnnnnoooppppppppooooonnmmmmmllllkkkkkjjjjiiiihhhhhgggggffeeeeedddddcccccbbbaaaaa`````___^^^^^]]]]]\\\\\[[[ZZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSSSRRRRRQQQQQQPPPPOOOOOONNNNNNMMMMMMMLLLKKKKKKKKJJJJJJIIIIIIIIHHHHHGGGGGGGFFFFFFFFEEEEEEEEDDDDDCCCCCCCCCCBBBBBBBBBBBBAAAAAAA@@@@@@@@@@@@@@????????????????????>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????????????@@@@@@@@@@@@@AAAAAAAABBBBBBBBBBBCCCCCCCCCCDDDDDEEEEEEEEEFFFFFFFGGGGGGGGHHHHHIIIIIIIJJJJJJJKKKKKKKLLLLMMMMMMNNNNNNOOOOOOOPPPQQQQQQQRRRRRSSSTTTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZZZ[[\\\\\]]]]]^^^^^____`````aaaaabbcccccdddddeeeeefffggggghhhhhiiiijjjkkkkkllllmmmmmnnnooooopppppooooonnmmmmmlllllkkkkjjjjiiiiihhhgggggffffeeeedddddcccccbbaaaaa`````____^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSSSRRRRRQQQQQQPPPPOOOOOONNNNNNMMMMMMLLLLKKKKKKJJJJJJJIIIIIIIHHHHHGGGGGGGGFFFFFFFEEEEEEEEEDDDDDCCCCCCCCCCBBBBBBBBBBAAAAAAA@@@@@@@@@@@@@?????????????????>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>??????????????????@@@@@@@@@@@@AAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDEEEEEEEEFFFFFFFFGGGGGGGHHHHHIIIIIIIIJJJJJJKKKKKKLLLLMMMMMMNNNNNNNOOOOOOPPPPQQQQQQRRRRRSSSSTTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^^____`````aaaaabbbcccccdddddeeeffffggggghhhhiiiiijjjjkkklllllmmmmmnnnoooooppppooonnnnmmmmlllllkkkkkjjiiiiihhhhhggggffffeeeeeddddcccccbbbaaaaa````____^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTTTSSSRRRRRQQQQQQQPPPOOOOONNNNNNNMMMMMMLLLLLKKKKKKJJJJJJIIIIIIIHHHHHGGGGGGGFFFFFFFFEEEEEEEEDDDDDCCCCCCCCCBBBBBBBBBBAAAAAAAA@@@@@@@@@@@@???????????????>>>>>>>>>>>>>>>>>>>>>>>==============================================>>>>>>>>>>>>>>>>>>>>>>???????????????@@@@@@@@@@@@@AAAAAAABBBBBBBBBBCCCCCCCCCDDDDDEEEEEEEEEFFFFFFFGGGGGGGGHHHHHIIIIIIJJJJJJKKKKKKKLLLLLMMMMMMNNNNNNOOOOOPPPPQQQQQQRRRRRSSSSTTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^___````aaaaabbbbcccccddddeeeeefffgggghhhhhiiiiijjjkkkkklllllmmmnnnnooooppooooonnnmmmmmllllkkkkkjjiiiiihhhhhgggggfffeeeeedddddcccbbbbaaaaa`````___^^^^^]]]]]\\\\\[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSSSRRRRRQQQQQQPPPPOOOOONNNNNNMMMMMMMLLLKKKKKKKJJJJJJIIIIIIIHHHHHGGGGGGGFFFFFFFEEEEEEEEEDDDDDCCCCCCCCCBBBBBBBBBBAAAAAA@@@@@@@@@@@@??????????????>>>>>>>>>>>>>>>>>>>================================================================>>>>>>>>>>>>>>>>>>??????????????@@@@@@@@@@@@@AAAAAABBBBBBBBBBCCCCCCCCCDDDDDEEEEEEEEFFFFFFFFGGGGGGHHHHHIIIIIIIIJJJJJJKKKKKKLLLLMMMMMMNNNNNNOOOOOPPPPQQQQQQRRRRRSSSSTTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^__`````aaaaabbbbccccdddddeeeeeffggggghhhhhiiiiijjjkkkkkllllmmmmmnnooooopoooonnnmmmmmlllllkkkjjjjiiiihhhhhgggggffeeeeedddddcccccbbbaaaaa`````__^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSSRRRRRRQQQQQPPPPOOOOOONNNNNNMMMMMMLLLLKKKKKKJJJJJJJIIIIIIHHHHHGGGGGGGFFFFFFFFEEEEEEEDDDDDCCCCCCCCCBBBBBBBBBAAAAAAA@@@@@@@@@@??????????????>>>>>>>>>>>>>>>>=================<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<================>>>>>>>>>>>>>>>>??????????????@@@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCCDDDDDEEEEEEEEFFFFFFFGGGGGGGGHHHHHIIIIIIJJJJJJKKKKKKLLLLMMMMMMNNNNNNNOOOOOOPPPPQQQQQRRRRRRSSTTTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^___`````aaaaabbcccccdddddeeeeefffggggghhhhhiiijjjjkkkklllllmmmmmnnoooopooonnnnmmmlllllkkkkkjjjiiiiihhhhgggggfffeeeedddddcccccbbbaaaaa`````___^^^^]]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSRRRRRRRQQQQQPPPOOOOOOONNNNNNMMMMMLLLLLKKKKKKJJJJJJIIIIIIIHHHGGGGGGGGFFFFFFFEEEEEEEEDDDDDCCCCCCCCCBBBBBBBBAAAAAAA@@@@@@@@@@@???????????>>>>>>>>>>>>>>>==============<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=============>>>>>>>>>>>>>>>????????????@@@@@@@@@@@AAAAAABBBBBBBBBCCCCCCCCCDDDDDEEEEEEEFFFFFFFFGGGGGGGHHHHIIIIIIJJJJJJKKKKKKKLLLLLMMMMMNNNNNNOOOOOOPPPPQQQQQRRRRRRSSSTTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^____`````aaaaabbcccccdddddeeeeffffggggghhhhiiiiijjkkkkklllllmmmmnnnnoooooonnmmmmmllllkkkkkjjjiiiiihhhhhgggffffeeeeeddddcccccbbbbaaa`````____^^^^^]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSSSRRRRRRQQQQQPPPPOOOOOONNNNNMMMMMMMLLLKKKKKKKJJJJJJIIIIIIHHHHHGGGGGGFFFFFFFFEEEEEEEDDDDDCCCCCCCCCBBBBBBBBBAAAAAA@@@@@@@@@@???????????>>>>>>>>>>>>>>===========<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<===========>>>>>>>>>>>>>>???????????@@@@@@@@@@AAAAAAABBBBBBBBCCCCCCCCCDDDDDEEEEEEEEFFFFFFFGGGGGGHHHHHIIIIIIIJJJJJJKKKKKKLLLLMMMMMMNNNNNOOOOOOPPPPQQQQQRRRRRRSSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[[\\\\\]]]^^^^^____`````aaaabbbbcccccdddeeeeeffffgggghhhhhiiiiijjkkkkkllllmmmmmnnnooooonnnmmmmlllllkkkkjjjjiiihhhhhgggggfffeeeeedddddccccbbbaaaaa````____^^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTSSSSRRRRRRQQQQQPPPPOOOOOONNNNNMMMMMMLLLLKKKKKKJJJJJJJIIIIIIHHHHGGGGGGGFFFFFFFFEEEEEEDDDDDCCCCCCCCCBBBBBBBBAAAAA@@@@@@@@@@????????????>>>>>>>>>>>>==========<<<<<<<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<==========>>>>>>>>>>>>>???????????@@@@@@@@@@AAAAABBBBBBBBBCCCCCCCCCDDDDDEEEEEEFFFFFFFGGGGGGGGHHHHIIIIIIJJJJJJKKKKKKLLLLMMMMMMNNNNNOOOOOOOPPPQQQQQRRRRRRRSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^^___````aaaaabbbbccccdddddeeeeeffggggghhhhhiiiijjjjkkklllllmmmmnnnnoooonnmmmmlllllkkkkkjjiiiiihhhhgggggfffeeeeedddddcccccbbaaaaa`````___^^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTSSSSRRRRRRQQQQQPPPPOOOOONNNNNNMMMMMMLLLLKKKKKKJJJJJJIIIIIIIHHHGGGGGGGFFFFFFFEEEEEEEEDDDDDCCCCCCCBBBBBBBBBAAAAA@@@@@@@@@@??????????>>>>>>>>>>>>=========<<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<=========>>>>>>>>>>>>>??????????@@@@@@@@@@AAAAABBBBBBBBCCCCCCCCDDDDDEEEEEEEFFFFFFFFGGGGGGHHHHIIIIIIJJJJJJKKKKKKKLLLMMMMMMMNNNNNNOOOOOPPPPQQQQQRRRRRRSSSSTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^^__`````aaaaabbbcccccdddddeeeeeffggggghhhhiiiiijjjkkkkklllllmmmnnnoonnnmmmmmllllkkkkkjjiiiiihhhhhggggffffeeedddddcccccbbbaaaaa`````__^^^^^]]]]]\\\\\[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTSSSRRRRRRRQQQQQPPPOOOOONNNNNNNMMMMMLLLLLKKKKKJJJJJJIIIIIIHHHHHGGGGGGFFFFFFFEEEEEEEDDDDDCCCCCCCCBBBBBBBAAAAAA@@@@@@@@@??????????>>>>>>>>>>>=========<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<=========>>>>>>>>>>>??????????@@@@@@@@@AAAAAABBBBBBBBCCCCCCCDDDDDEEEEEEEEFFFFFFGGGGGGHHHHHIIIIIIIJJJJJJKKKKKLLLLLMMMMMNNNNNNOOOOOPPPPQQQQQRRRRRRSSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[\\\\\]]]]]^^^^^___`````aaaaabbcccccdddddeeeeffffggghhhhhiiiiijjjkkkkkllllmmmmmnnonnnmmmmlllllkkkjjjjiiiihhhhhgggggffeeeeeddddcccccbbbbaaaa`````___^^^^]]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWVVVVVUUUUUTTTTTTTSSRRRRRRQQQQQPPPPOOOOONNNNNNMMMMMLLLLKKKKKKJJJJJJJIIIIIIHHHHGGGGGGFFFFFFFEEEEEEEDDDDDCCCCCCCBBBBBBBBBAAAAA@@@@@@@@@??????????>>>>>>>>>>========<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;;;;;;::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<=========>>>>>>>>>>??????????@@@@@@@@@AAAAABBBBBBBBCCCCCCCCDDDDDEEEEEEFFFFFFFFGGGGGGHHHHIIIIIIJJJJJJKKKKKKLLLLMMMMMNNNNNNOOOOOPPPPQQQQQRRRRRRSSSTTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^____`````aaaabbbcccccddddeeeeefffggggghhhhhiiijjjjkkkklllllmmmmnnnnnmmmmmlllkkkkkjjjiiiiihhhhgggggffeeeeedddddccccbbbbaaaaa```____^^^^^]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWVVVVVUUUUUTTTTTTSSSRRRRRRQQQQQPPPPOOOOONNNNNNMMMMMLLLLKKKKKKJJJJJJIIIIIIIHHHGGGGGGGFFFFFFEEEEEEEDDDDDCCCCCCCBBBBBBBBAAAAA@@@@@@@@@?????????>>>>>>>>>>>========<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<=======>>>>>>>>>>>>????????@@@@@@@@@AAAAABBBBBBBBBCCCCCCDDDDDEEEEEEEEFFFFFFGGGGGGHHHHIIIIIIJJJJJJKKKKKKKLLLMMMMMNNNNNNNOOOOOPPPQQQQQRRRRRRRSSTTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[[[\\\\\]]]^^^^^____````aaaaabbbbcccdddddeeeeefffggggghhhhiiiiijjkkkkkllllmmmmmnnmmmmmllllkkkkkjjjiiiiihhhhhgggffffeeeedddddcccccbbaaaaa`````___^^^^^]]]]]\\\\[[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTTSSSRRRRRRQQQQQPPPPOOOOONNNNNMMMMMMLLLLKKKKKKJJJJJIIIIIIHHHHHGGGGGGFFFFFFFEEEEEEDDDDDCCCCCCCBBBBBBBBAAAAA@@@@@@@@@????????>>>>>>>>>>========<<<<<<<<<<<<;;;;;;;;;;;;;;;;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;<<<<<<<<<<<<<=======>>>>>>>>>>?????????@@@@@@@@@AAAAABBBBBBBCCCCCCCCDDDDDEEEEEEFFFFFFGGGGGGHHHHHIIIIIIIJJJJJKKKKKKLLLLMMMMMMNNNNNOOOOOPPPPQQQQQRRRRRRSSTTTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZZ[[[[\\\\]]]]]^^^^^__`````aaaaabbbcccccdddddeeeffffgggghhhhhiiiiijjkkkkkllllmmmmmnmmmmlllllkkkkjjjjiiihhhhhgggggfffeeeeeddddcccccbbaaaaa`````___^^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTSSRRRRRRRQQQQQPPPOOOOONNNNNMMMMMMMLLLKKKKKJJJJJJJIIIIIIHHHHGGGGGGFFFFFFEEEEEEEEDDDCCCCCCCCBBBBBBBAAAAA@@@@@@@@@?????????>>>>>>>>>=======<<<<<<<<<<<;;;;;;;;;;;;;;;:::::::::::::::::::::::99999999999999999999999999999999999999999999::::::::::::::::::::::;;;;;;;;;;;;;;;<<<<<<<<<<<========>>>>>>>>>????????@@@@@@@@@AAAAABBBBBBBBCCCCCCCDDDDEEEEEEEFFFFFFFGGGGGGHHHHIIIIIIJJJJJJKKKKKLLLLMMMMMMNNNNNOOOOOPPPPQQQQQRRRRRRSSSTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^^__`````aaaaabbbcccccddddeeeeeffggggghhhhhiiiijjjjkkklllllmmmmnmmmmllllkkkkkjjiiiiihhhhgggggfffeeeeedddddcccbbbbaaaa`````____^^^]]]]]\\\\\[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTSSRRRRRRQQQQQPPPPOOOOONNNNNMMMMMMLLLLKKKKKJJJJJJIIIIIIIHHHGGGGGGGFFFFFFEEEEEEDDDDDCCCCCCBBBBBBBBAAAAA@@@@@@@@@????????>>>>>>>>>======<<<<<<<<<<<<;;;;;;;;;;;;;:::::::::::::::::::9999999999999999999999999999999999999999999999999999999999999:::::::::::::::::::;;;;;;;;;;;;;;<<<<<<<<<<<======>>>>>>>>>?????????@@@@@@@@@AAAAABBBBBBBCCCCCCDDDDDEEEEEEEFFFFFFGGGGGGHHHHIIIIIIJJJJJJKKKKKLLLLMMMMMMNNNNNOOOOOPPPPQQQQQRRRRRRSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[\\\\\]]]]]^^^^____`````aaabbbbccccdddddeeeeeffggggghhhhiiiiijjjkkkkklllmmmmmmmmlllllkkkkjjjiiiihhhhhggggffffeeedddddccccbbbbaaaaa````___^^^^^]]]]\\\\\[[[[ZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMMLLLLKKKKKJJJJJJIIIIIHHHHHGGGGGGFFFFFFFEEEEEEDDDDCCCCCCCBBBBBBBBAAAAA@@@@@@@????????>>>>>>>>>>======<<<<<<<<<<;;;;;;;;;;;;:::::::::::::::::9999999999999999888888888888888888888888888888888888888888889999999999999999::::::::::::::::;;;;;;;;;;;;;<<<<<<<<<<======>>>>>>>>>>???????@@@@@@@@AAAAABBBBBBBCCCCCCCCDDDDEEEEEEFFFFFFGGGGGGHHHHHIIIIIJJJJJJJKKKKKLLLMMMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZ[[[\\\\\]]]]^^^^^____````aaaaabbbccccdddddeeeeffffggghhhhhiiiijjjjkkkklllllmmmmmmllllkkkkkjjiiiihhhhhgggggffeeeeeddddcccccbbbaaaaa`````__^^^^^]]]]]\\\\[[[[ZZZZZYYYXXXXXWWWWVVVVVUUUUUTTTTTSSSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMMLLKKKKKKKJJJJJJIIIIIHHHHGGGGGGFFFFFFEEEEEEDDDDDCCCCCCCBBBBBBBAAAAA@@@@@@@@???????>>>>>>>>>======<<<<<<<<<<;;;;;;;;;;;;;:::::::::::::99999999999999888888888888888888888888888888888888888888888888888888888888899999999999999::::::::::::::;;;;;;;;;;;;<<<<<<<<<<=======>>>>>>>>????????@@@@@@@AAAAABBBBBBBBCCCCCCDDDDDEEEEEEFFFFFFFGGGGGGHHHHIIIIIJJJJJJKKKKKKLLLMMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYZZZZZ[[[[\\\]]]]]^^^^^___`````aaaaabbcccccddddeeeeefffggggghhhhhiiijjjkkkkkllllmmmmmlllkkkkkjjjiiiiihhhhgggggffeeeeeddddcccccbbbbaaa`````___^^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSSSRRRRRQQQQQPPPOOOOONNNNNMMMMMLLLLKKKKKKJJJJJIIIIIIIHHHGGGGGGGFFFFFFEEEEEEDDDDCCCCCCCBBBBBBBAAAAA@@@@@@@????????>>>>>>>>=======<<<<<<<<<<;;;;;;;;;;;::::::::::::999999999999888888888888888888888888888888888888888888888888888888888888888888888888888899999999999:::::::::::::;;;;;;;;;;;<<<<<<<<<<======>>>>>>>>>???????@@@@@@@@AAAAABBBBBBCCCCCCCCDDDEEEEEEEFFFFFFGGGGGGHHHHIIIIIIJJJJJKKKKKKLLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSSTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^^__`````aaaabbbbcccccdddeeeeefffggggghhhhiiiiijjkkkkkllllmmlllllkkkkjjjjiiiihhhhhgggffffeeeedddddccccbbbaaaa`````____^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLLKKKKKKJJJJJIIIIIIHHHHGGGGGGFFFFFFFEEEEEEDDDDCCCCCCBBBBBBBAAAA@@@@@@@@????????>>>>>>>>======<<<<<<<<<;;;;;;;;;;;:::::::::::::9999999999888888888888888888888777777777777777777777777777777777777777777778888888888888888888889999999999::::::::::::;;;;;;;;;;;;<<<<<<<<=======>>>>>>>?????????@@@@@@@AAAABBBBBBBBCCCCCCDDDDEEEEEEFFFFFFGGGGGGHHHHIIIIIIJJJJJKKKKKKKLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSSTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^___`````aaaabbbbccccdddddeeeffffgggghhhhhiiiijjjkkkklllllmllllkkkkkjjjiiiiihhhgggggfffeeeeeddddcccccbbaaaaa````____^^^^^]]]\\\\\[[[[ZZZZYYYYYXXXXXWWVVVVVUUUUUTTTTTSSSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLLKKKKKKJJJJJIIIIIIHHHHGGGGGFFFFFFEEEEEEDDDDDCCCCCCCBBBBBBAAAAA@@@@@@@????????>>>>>>>=======<<<<<<<<;;;;;;;;;;::::::::::::99999999998888888888888888877777777777777777777777777777777777777777777777777777777777778888888888888888889999999999:::::::::::;;;;;;;;;;<<<<<<<<<======>>>>>>>>???????@@@@@@@@AAAAABBBBBBCCCCCCDDDDDEEEEEEFFFFFFFGGGGGHHHIIIIIIIJJJJJKKKKKKLLLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSSTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZ[[[[\\\\\]]]]^^^^^____```aaaaabbbcccccddddeeeeeffggggghhhhiiiiijjkkkkkllllmllllkkkkjjiiiiihhhhgggggfffeeeeedddcccccbbbaaaaa`````__^^^^^]]]]]\\\\[[[[ZZZZZYYYYXXXXXWWWVVVVVUUUUTTTTTSSSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLKKKKKKKJJJJJIIIIIHHHHHGGGGGFFFFFFEEEEEEDDDDCCCCCCBBBBBBBBAAA@@@@@@@@???????>>>>>>>>======<<<<<<<<<;;;;;;;;;:::::::::::9999999998888888888888888777777777777777777777777777777777777777777777777777777777777777777777777778888888888888888999999999:::::::::::;;;;;;;;;<<<<<<<<=======>>>>>>>????????@@@@@@@AAAABBBBBBBCCCCCCCDDDEEEEEEEFFFFFFGGGGGHHHHHIIIIIJJJJJKKKKKKLLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSTTTTTUUUUVVVVVWWWWXXXXXYYYYZZZZZ[[[\\\\]]]]]^^^^^___`````aaaaabbcccccddddeeeeeffggggghhhhiiiiijjjkkkllllllllkkkkkjjiiiihhhhhggggffffeeedddddccccbbbbaaaa`````__^^^^^]]]]]\\\\\[[[ZZZZZYYYYYXXXWWWWVVVVVUUUUUTTTTTSSSRRRRRQQQQQPPPOOOOONNNNNMMMMMLLLLKKKKKKJJJJJIIIIIHHHHGGGGGGFFFFFFFEEEEEEDDDDCCCCCCBBBBBBAAAAA@@@@@@????????>>>>>>>=======<<<<<<<;;;;;;;;;;::::::::::99999999988888888888888777777777777777777777666666666666666666666666666666666666666666667777777777777777777778888888888888899999999::::::::::;;;;;;;;;;<<<<<<<<======>>>>>>>>???????@@@@@@AAAAABBBBBBBCCCCCCDDDDEEEEEEFFFFFFGGGGGGHHHHIIIIIJJJJJKKKKKKLLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSTTTTTUUUUUVVVVVWWWWXXXXYYYYYZZZZZ[[\\\\\]]]]]^^^^^___`````aaaabbbccccdddddeeeeffffggghhhhhiiiijjjkkkkklllllkkkkkjjiiiiihhhhgggggffeeeeeddddcccccbbbaaaaa```____^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJJIIIIIHHHHGGGGGGFFFFFEEEEEEDDDDDCCCCCCCBBBBBBAAAA@@@@@@@??????>>>>>>>>======<<<<<<<<;;;;;;;;;;::::::::::9999999888888888888877777777777777777666666666666666666666666666666666666666666666666666666666666677777777777777777788888888888899999999::::::::::;;;;;;;;;;<<<<<<<=======>>>>>>>??????@@@@@@@@AAAABBBBBBCCCCCCDDDDDEEEEEEFFFFFGGGGGGGHHHIIIIIJJJJJJJKKKKKLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^____````aaaaabbcccccddddeeeeefffggggghhhiiiiijjjkkkkkllllkkkjjjjiiiihhhhhggggffeeeeedddddccccbbaaaaa`````___^^^^^]]]]\\\\\[[[ZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJJIIIIIHHHHGGGGGGFFFFFEEEEEEDDDDCCCCCCBBBBBBAAAAA@@@@@@@???????>>>>>>>>=====<<<<<<<;;;;;;;;;::::::::::999999988888888888877777777777777776666666666666666666666666666666666666666666666666666666666666666666666666677777777777777778888888888899999999::::::::::;;;;;;;;<<<<<<<<=====>>>>>>>????????@@@@@@AAAAABBBBBBCCCCCCCDDDEEEEEEEFFFFFGGGGGGHHHHIIIIIJJJJJJKKKKKLLLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZ[[[[\\\\\]]]]^^^^^__`````aaaaabbbcccdddddeeeeefffgggghhhhhiiijjjjkkkkllkkkkkjjjiiiiihhhhgggggffeeeedddddccccbbbaaaa`````___^^^^^]]]]]\\\[[[[ZZZZZYYYYXXXXXWWWWVVVUUUUUTTTTTSSSSRRRRRQQQQQPPPOOOOONNNNNMMMMMLLLKKKKKJJJJJJJIIIIIHHHGGGGGGGFFFFFEEEEEEDDDDCCCCCCBBBBBBAAAA@@@@@@@???????>>>>>>>=====<<<<<<<<;;;;;;;;::::::::::99999998888888888877777777777777666666666666666666666655555555555555555555555555555555555555555666666666666666666666667777777777777788888888888999999::::::::::;;;;;;;;;<<<<<<<=====>>>>>>>>??????@@@@@@@@AAABBBBBBBCCCCCCDDDDEEEEEEFFFFFGGGGGGHHHHIIIIIJJJJJJKKKKKLLLLMMMMMNNNNNOOOOOPPQQQQQRRRRRSSSSTTTTTUUUUUVVVVWWWWXXXXXYYYZZZZZ[[[[\\\\]]]]]^^^^^__`````aaaabbbbccccdddddeeefffggggghhhhiiiiijjkkkkklkkkkjjjjiiiihhhgggggfffeeeeeddddcccccbbaaaaa````____^^^]]]]]\\\\\[[[ZZZZZYYYYYXXXXWWWVVVVVUUUUTTTTTSSSSRRRRRQQQQQPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJJIIIIIHHHHGGGGGFFFFFFEEEEEEEDDDCCCCCCCBBBBBBAAAA@@@@@@???????>>>>>>>=====<<<<<<<;;;;;;;;;:::::::::999999888888888887777777777777666666666666666666555555555555555555555555555555555555555555555555555555555556666666666666666666777777777777888888888888999999:::::::::;;;;;;;;<<<<<<<<=====>>>>>>????????@@@@@@AAAABBBBBBCCCCCCDDDDEEEEEEFFFFFFGGGGGHHHHIIIIIJJJJJJKKKKKLLLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSTTTTTUUUUVVVVVWWWWXXXXYYYYYZZZZZ[[\\\\\]]]]]^^^^____```aaaaabbbcccccddddeeeeeffggggghhhhiiiijjjkkkklkkkkjjjiiihhhhhggggffffeeeedddddcccbbbbaaaa`````__^^^^^]]]]\\\\\[[[ZZZZZYYYYYXXXXXWWVVVVVUUUUUTTTTSSSSRRRRRQQQQQPPOOOOONNNNNMMMMMMLLLKKKKKJJJJJJIIIIIHHHHGGGGGFFFFFFEEEEEDDDDCCCCCCBBBBBBAAAAA@@@@@@@??????>>>>>>>====<<<<<<<<<;;;;;;;:::::::::99999988888888887777777777777666666666666666555555555555555544444444444444444444444444444444444444444555555555555555556666666666666667777777777778888888888999999:::::::::;;;;;;;;<<<<<<<<====>>>>>>>>??????@@@@@@AAAAABBBBBBCCCCCCCDDDEEEEEFFFFFFFGGGGGHHHIIIIIJJJJJJJKKKKKLLMMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSSTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[\\\\\]]]]^^^^^___`````aaabbbbccccdddddeeeefffgggghhhhhiiiijjkkkkkkkkjjiiiiihhhhgggggfffeeeeedddcccccbbbaaaa`````__^^^^^]]]]]\\\\[[[[ZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLKKKKKJJJJJJIIIIIHHHHGGGGGFFFFFFEEEEEDDDDCCCCCCBBBBBBAAAA@@@@@@????????>>>>>>=====<<<<<<<;;;;;;;;:::::::::9999998888888887777777777776666666666666655555555555544444444444444444444444444444444444444444444444444444444444555555555555566666666666667777777777777888888888999999:::::::::;;;;;;;<<<<<<<<=====>>>>>>???????@@@@@@@AAABBBBBBBCCCCCCDDDDEEEEEFFFFFFGGGGGHHHHIIIIIJJJJJJKKKKKLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZ[[[[\\\]]]]]^^^^^___`````aaaabbcccccddddeeeeeffggggghhhhiiiiijjjkkkkkkjjiiiihhhhhggggffeeeeeddddcccccbbbaaaaa```____^^^^]]]]]\\\\\[[ZZZZZYYYYXXXXXWWWWVVVVUUUUUTTTTTSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLKKKKKKKJJJJJIIIIIHHHGGGGGFFFFFFFEEEEEDDDCCCCCCCBBBBBBAAAA@@@@@@??????>>>>>>=====<<<<<<<<;;;;;;;:::::::::999998888888888777777777776666666666666555555555544444444444444444444444444444444444444444444444444444444444444444444444444555555555566666666666677777777777888888888899999:::::::::;;;;;;;;<<<<<<<=====>>>>>>???????@@@@@@AAAABBBBBBCCCCCCDDDDEEEEEFFFFFFGGGGGHHHHIIIIIJJJJJKKKKKKLLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSTTTTTUUUUUVVVVWWWXXXXXYYYYZZZZZ[[[\\\\\]]]]]^^^____````aaaaabbcccccddddeeeeefffggghhhhhiiiijjjkkkkkjjiiiiihhhhgggggffeeeedddddccccbbbbaaa`````___^^^^^]]]]\\\\\[[ZZZZZYYYYYXXXXWWWWVVVVVUUUTTTTTSSSSRRRRQQQQQPPPPOOOOONNNNNMMMMMLLKKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEEDDDDCCCCCCBBBBBAAAAA@@@@@@@??????>>>>>>=====<<<<<<;;;;;;;;:::::::::99999888888888877777777776666666666655555555554444444444444444444443333333333333333333333333333333333333333344444444444444444444445555555555666666666667777777777888888888899999:::::::::;;;;;;;<<<<<<=====>>>>>>>??????@@@@@@AAAAABBBBBCCCCCCDDDDEEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKKLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRSSSSTTTTTUUUUVVVVVWWWWXXXYYYYYZZZZZ[[[\\\\\]]]]^^^^^__`````aaaabbbbcccdddddeeeefffggggghhhiiiiijjjkkjjjjiiiihhhhhggggffeeeeeddddcccccbbaaaaa````____^^^^]]]]]\\\[[[[ZZZZYYYYYXXXXXWWVVVVVUUUUUTTTTSSSSRRRRRQQQQPPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEEDDDDCCCCCBBBBBBAAAA@@@@@@??????>>>>>>>=====<<<<<<<;;;;;;;;:::::::9999988888888877777777776666666666655555555544444444444444444333333333333333333333333333333333333333333333333333333333334444444444444444445555555566666666666677777777778888888899999::::::::;;;;;;;<<<<<<<<=====>>>>>>??????@@@@@@@AAABBBBBBBCCCCCDDDEEEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKKKLLLLMMMMMNNNNNOOOOOPPPPQQQQRRRRRSSSTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZ[[[[\\\\]]]]]^^^^___````aaaaabbbcccccdddeeeeefffgggghhhhhiiijjjjkjjjiiiiihhhhgggffffeeeedddddccccbbaaaaa`````___^^^]]]]]\\\\\[[[ZZZZZYYYYXXXXXWWVVVVVUUUUUTTTTTSSSRRRRRQQQQQPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEEDDDDCCCCCBBBBBBAAAA@@@@@@??????>>>>>>=====<<<<<<<;;;;;;;::::::::999998888888877777777776666666666555555555444444444444444333333333333333333333333333333333333333333333333333333333333333333333334444444444444445555555556666666666777777777788888888899999:::::::;;;;;;;;<<<<<<=====>>>>>>???????@@@@@@AAAABBBBBBCCCCCDDDDEEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSTTTTTUUUUUVVVVVWWWXXXXXYYYYZZZZZ[[\\\\\]]]]]^^^^__`````aaaaabbbccccdddddeeeffffgggghhhhiiiiijjkjjjiiiihhhgggggfffeeeeeddddcccccbbaaaa`````__^^^^^]]]]\\\\\[[[ZZZZZYYYYYXXXWWWWVVVVUUUUUTTTTTSSRRRRRQQQQQPPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEEEEDDDCCCCCBBBBBBBAAA@@@@@@@??????>>>>>>====<<<<<<;;;;;;;;:::::::99999888888888777777777666666666655555554444444444444433333333333333333333322222222222222222222222222222222222222222333333333333333333333344444444444445555555566666666667777777778888888899999::::::::;;;;;;;<<<<<<<===>>>>>>>??????@@@@@@AAAABBBBBBCCCCCDDDDEEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLLLMMMMMNNNNNOOOOOPPQQQQQRRRRRSSSTTTTTUUUUUVVVWWWWXXXXYYYYYZZZZZ[[\\\\\]]]]^^^^^___`````aaabbbcccccddddeeeeeffggggghhhhiiiijjjjjiiiiihhhggggffffeeeedddddcccbbbaaaaa````___^^^^]]]]]\\\\[[[[ZZZYYYYYXXXXWWWWVVVVVUUUUTTTTTSSSRRRRQQQQQPPPPOOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEEDDDCCCCCCBBBBBAAAAA@@@@@??????>>>>>>>=====<<<<<<;;;;;;;:::::::9999988888888777777777666666666655555544444444444443333333333333333322222222222222222222222222222222222222222222222222222222222333333333333333333444444444444555555666666666677777777788888888899999::::::;;;;;;;;<<<<<<=====>>>>>>??????@@@@@AAAAABBBBBCCCCCCCDDEEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLLLMMMMMNNNNNOOOOPPPQQQQQRRRRSSSSTTTTTUUUUVVVVVWWWXXXXYYYYYZZZZ[[[[\\\]]]]]^^^^____````aaaaabbccccdddddeeeefffgggghhhhiiiiijjjjiiihhhhgggggfffeeeeedddccccbbbbaaaa`````__^^^^^]]]]\\\\\[[ZZZZZYYYYXXXXXWWWVVVVVUUUUUTTTSSSSRRRRRQQQQPPPPOOOOONNNNNMMMLLLLKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEEDDDCCCCCCBBBBBAAAA@@@@@@??????>>>>>>====<<<<<<;;;;;;;;:::::::9999988888888777777777666666665555555544444444444333333333333333222222222222222222222222222222222222222222222222222222222222222222222223333333333333334444444444445555555666666666777777777888888899999::::::::;;;;;;;<<<<<<====>>>>>>???????@@@@@@AAAABBBBBCCCCCCDDEEEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKKKLLLLMMMMNNNNNOOOOOPPPPQQQRRRRRSSSSTTTTUUUUUVVVVVWWXXXXXYYYYZZZZZ[[[\\\\\]]]^^^^^___`````aaaabbbccccddddeeeeeffggggghhhhiiiijjiiiihhhhhggggffffeeeddddcccccbbbaaaaa```___^^^^^]]]]\\\\\[[ZZZZZYYYYYXXXXWWWWVVVUUUUUTTTTTSSSRRRRRQQQQQPPOOOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEDDDCCCCCCCBBBBBAAA@@@@@@@??????>>>>>>====<<<<<<;;;;;;::::::::999998888888777777777666666666555555444444444443333333333333322222222222222222222111111111111111111111111111111111111111112222222222222222222233333333333333444444444445555555666666667777777778888888899999:::::::;;;;;;<<<<<<<===>>>>>>>??????@@@@@@AAAABBBBBCCCCCCDDDDEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSTTTTTUUUUUVVVVWWWWXXXYYYYYZZZZZ[[[\\\\\]]]]^^^^^__````aaaaabbcccccddddeeeeffffggghhhhhiiiijiiiihhhhgggggffeeeedddddccccbbbbaaa`````___^^^^]]]]]\\\[[[[ZZZZYYYYYXXXXWWWVVVVUUUUUTTTTTSSSRRRRRQQQQQPPOOOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEEDDDDCCCCCCBBBBBAAAA@@@@@@?????>>>>>>>=====<<<<<<;;;;;;::::::99999888888887777777776666666555555554444444444333333333333222222222222222211111111111111111111111111111111111111111111111111111111111222222222222222233333333333334444444444555555566666666777777777888888899999::::::;;;;;;;<<<<<<=====>>>>>>?????@@@@@@AAAABBBBBCCCCCCDDDDEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSTTTTTUUUUUVVVVWWWWXXXXYYYYYZZZ[[[[\\\\]]]]]^^^^__`````aaaabbbbcccdddddeeeefffggggghhhiiiijiiihhhhhggggffeeeeeddddcccccbbaaaa`````___^^^^^]]]\\\\\[[[ZZZZZYYYYXXXXXWWVVVVVUUUUTTTTTSSSSRRRQQQQQPPPPOOOONNNNNMMMMMLLLLKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEDDDDCCCCCCBBBBBAAAA@@@@@@?????>>>>>>====<<<<<<;;;;;;;:::::::9999988888877777777766666666555555444444444433333333333222222222222222111111111111111000000000000000000000000000000000000000001111111111111112222222222222223333333333334444444444555555666666677777777788888899999::::::::;;;;;;<<<<<<====>>>>>>?????@@@@@@@AAABBBBBCCCCCCCDDDEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKLLLLMMMMMNNNNNOOOPPPPQQQQQRRRRSSSSTTTTTUUUVVVVVWWWXXXXXYYYYZZZZZ[[\\\\\]]]]^^^^^__`````aaaabbbcccccdddeeeeefffgggghhhhhiiiiiihhhhgggggffeeeedddddccccbbaaaaa````____^^^]]]]]\\\\[[[ZZZZZYYYYYXXXWWWWVVVVUUUUUTTTTSSSRRRRRQQQQPPPPOOOOONNNNMMMMMLLLKKKKKJJJJJIIIIHHHHGGGGGFFFFFEEEEEDDDDCCCCCCBBBBBAAAA@@@@@??????>>>>>>====<<<<<<;;;;;;:::::::999998888888777777776666666555555444444444433333333332222222222222211111111111110000000000000000000000000000000000000000000000000000000011111111111122222222222222333333333344444444445555556666666677777778888888899999::::::;;;;;;<<<<<<<===>>>>>>>??????@@@@@AAAABBBBBCCCCCCDDDDEEEEEFFFFFGGGGGHHHIIIIJJJJJKKKKKLLLLMMMMMNNNNOOOOOPPPQQQQRRRRRSSSSTTTTUUUUUVVVWWWWXXXXYYYYYZZZZZ[[\\\\]]]]]^^^^____```aaaaabbbccccdddddeeefffggggghhhhiiiiihhhhhgggfffeeeeeddddcccccbbaaaa`````__^^^^^]]]]\\\\\[[[ZZZYYYYYXXXXWWWWVVVVUUUUUTTTTTSSRRRRRQQQQQPPPOOOOONNNNNMMMLLLLKKKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEEEDDCCCCCCCBBBBBAAA@@@@@???????>>>>>=====<<<<<<;;;;;;::::::999988888888777777766666666555555444444444333333333322222222222211111111111000000000000000000000000000000000000000000000000000000000000000000000111111111112222222222222333333333344444444455555566666667777777788888889999::::::;;;;;;;<<<<<<=====>>>>>??????@@@@@AAAABBBBBCCCCCCDDDEEEEEEFFFFFGGGGGHHIIIIIJJJJJKKKKKLLLLMMMMNNNNNOOOOOPPQQQQQRRRRRSSSTTTTTUUUUUVVVVWWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^^___`````aaabbbcccccddddeeeeeffgggghhhhhiiiihhhgggggfffeeeedddddcccbbbaaaaa````__^^^^^]]]]\\\\\[[ZZZZZYYYYXXXXXWWWVVVVVUUUTTTTTSSSRRRRRQQQQQPPOOOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHGGGGGFFFFFEEEEEEEDDCCCCCCBBBBBAAAA@@@@@??????>>>>>====<<<<<<;;;;;;;::::::9999988888877777777666666655555544444444433333333332222222222211111111100000000000000000000/////////////////////////////////////////00000000000000000000111111111222222222223333333333444444444555555666666667777777888888899999::::::;;;;;;<<<<<<====>>>>>??????@@@@@AAAABBBBBCCCCCCDDDEEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKKKLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSTTTTTUUUUVVVVVWWXXXXXYYYYZZZZZ[[[\\\\\]]]^^^^^___````aaaaabbccccdddddeeeeffggggghhhhiihhhhhggggfffeeeeedddcccccbbbaaaa`````__^^^^]]]]]\\\\[[[ZZZZYYYYYXXXXWWWWVVVUUUUUTTTTSSSSRRRRQQQQQPPPOOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEEDDDCCCCCCBBBBBAAAA@@@@@?????>>>>>>====<<<<<<;;;;;;:::::::9998888888877777776666666655555444444444333333332222222222221111111100000000000000000////////////////////////////////////////////////////////0000000000000000111111111222222222223333333334444444445555566666667777777788888889999::::::;;;;;;<<<<<<<===>>>>>>>?????@@@@@AAABBBBBCCCCCCCDDEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLMMMMMNNNNNOOOOPPPPQQQQQRRRRSSSTTTTUUUUUVVVVWWWWXXXYYYYYZZZZ[[[[\\\\]]]]]^^^___`````aaaabbcccccddddeeeeeffgggghhhhhihhhhgggggfffeeedddddccccbbbaaaaa```___^^^^^]]]]\\\\\[[ZZZZZYYYYXXXXXWWVVVVVUUUUTTTTTSSSRRRRRQQQPPPPOOOOONNNNMMMMMLLLLKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEDDDCCCCCCBBBBBAAAA@@@@@?????>>>>>>====<<<<<<;;;;;;::::::99998888887777777766666665555544444444333333333322222222221111111000000000000000/////////////////////////////////////////////////////////////////////00000000000000011111111222222222233333333334444444555556666666677777778888889999::::::;;;;;;;<<<<<<====>>>>>>?????@@@@@AAAABBBBBCCCCCCDDEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKLLLLMMMMMNNNOOOOOPPPPQQQQRRRRRSSTTTTTUUUUVVVVVWWWXXXXXYYYZZZZZ[[[\\\\\]]]]^^^^^__````aaaaabbccccdddddeeeeffggggghhhhihhhhggggffeeeeeddddccccbbbbaaa`````___^^^^]]]]]\\\[[[ZZZZZYYYYXXXXXWWVVVVVUUUUTTTTTSSRRRRRQQQQQPPPOOOOONNNNNMMMMLLLKKKKKJJJJIIIIIHHHHGGGGGFFFFFEEEEEDDCCCCCCCBBBBBAAA@@@@@?????>>>>>>>===<<<<<;;;;;;;::::::99999888888777777666666665555544444443333333332222222222111111110000000000000////////////////////.......................................////////////////////000000000000001111111222222222233333333344444444555556666666777777888888899999::::::;;;;;;<<<<<====>>>>>>?????@@@@@AAAABBBBBCCCCCCDDDEEEEEFFFFFGGGGGHHHIIIIIJJJJKKKKKLLLLMMMMNNNNNOOOOOPPQQQQQRRRRRSSSTTTTTUUUVVVVVWWWXXXXXYYYYZZZZZ[[\\\\]]]]]^^^^__`````aaaabbbbcccddddeeeeefffggghhhhhhhhgggggffeeeedddddccccbbaaaaa````___^^^^^]]]\\\\\[[[ZZZZYYYYYXXXWWWWVVVVUUUUUTTTTSSSRRRRQQQQQPPPOOOOONNNNNMMMMMLLKKKKKJJJJJIIIIHHHHGGGGGFFFFFEEEEEDDDCCCCCBBBBBAAAA@@@@@?????>>>>>>====<<<<<;;;;;;:::::::9998888888777777766666655555444444444333333332222222222111111000000000000/////////////////........................................................////////////////00000000000001111112222222222333333344444444455555666666777777778888889999::::::;;;;;;<<<<<====>>>>>>?????@@@@@AAAABBBBBCCCCCDDDDEEEEEFFFFFGGGGGHHHHIIIJJJJJKKKKKLLLMMMMMNNNNNOOOOOPPQQQQQRRRRSSSSTTTTUUUUUVVVWWWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^^__````aaaaabbbcccdddddeeeefffggggghhhhhhggggffeeeeeddddccccbbbaaaa````____^^^]]]]]\\\\[[[ZZZZZYYYXXXXXWWWVVVVVUUUUTTTTTSSRRRRRQQQQPPPPOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHGGGGGFFFFFEEEEEDDDDCCCCCBBBBBAAAA@@@@@?????>>>>>>====<<<<<;;;;;;::::::999988888877777776666666555554444444433333332222222221111111000000000000/////////////...............---------------------------------------...............//////////////00000000000111111112222222233333333444444455555666666667777778888889999::::::;;;;;;;<<<<<===>>>>>>>?????@@@@@AAABBBBBCCCCCDDDDEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKKKLLMMMMMNNNNNOOOOPPPPQQQRRRRRSSSTTTTTUUUUVVVVVWWXXXXXYYYYZZZZZ[[\\\\]]]]]^^^^____```aaaabbbbccccdddeeeeefffgggghhhhhgggggffeeeedddddccccbbaaaaa````__^^^^^]]]]\\\\[[[[ZZZYYYYYXXXXWWWVVVVVUUUUUTTTSSSRRRRRQQQQQPPOOOOONNNNMMMMMLLLLKKKKJJJJJIIIIIHHGGGGGFFFFFEEEEEDDDDCCCCCBBBBBAAAA@@@@@?????>>>>>===<<<<<<<;;;;;;:::::9999988888877777766666665555544444443333333322222222111111100000000000////////////............--------------------------------------------------------.........../////////////0000000000011111122222222233333334444444455555666666777777888888899999:::::;;;;;;<<<<<<====>>>>>?????@@@@@AAAABBBBBCCCCCDDDEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKKLLLMMMMMNNNNOOOOOPPPQQQQQRRRRRSSTTTTUUUUUVVVVVWWXXXXYYYYYZZZZ[[[[\\\]]]]^^^^^___```aaaaabbbccccdddddeeefffggggghhhhgggfffeeeeeddddcccbbbbaaaa````___^^^^]]]]\\\\\[[ZZZZZYYYYXXXXXWWWVVVUUUUUTTTTSSSSRRRRQQQQQPPOOOOONNNNNMMMMLLLLKKKKKJJJIIIIIHHHHGGGGFFFFFEEEEEDDDDCCCCCBBBBBAAA@@@@@?????>>>>>====<<<<<<;;;;;:::::::9998888888777777666666655554444444433333332222222221111110000000000///////////..........---------------------------------------------------------------------..........///////////00000000001111111222222223333333344444445555666666667777778888889999::::::;;;;;<<<<<<====>>>>>?????@@@@@AAAABBBBBCCCCCDDDDEEEEEFFFFFGGGHHHHIIIIIJJJJKKKKKLLLLMMMNNNNNOOOOOPPPQQQQQRRRRSSSTTTTUUUUUVVVVWWXXXXXYYYYZZZZZ[[[\\\\\]]]^^^^____````aaabbbbccccddddeeeeeffgggghhgggggfffeeeedddddcccbbbaaaa`````__^^^^^]]]]\\\\[[[ZZZZYYYYYXXXXWWVVVVVUUUUTTTTTSSSRRRRRQQQPPPPOOOONNNNNMMMMMLLKKKKKJJJJJIIIIHHHHGGGGGFFFFEEEEEDDDCCCCCBBBBBAAAA@@@@@?????>>>>>====<<<<<<;;;;;::::::99998888887777777666666555554444443333333322222222111111100000000////////////........--------------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------------------.........///////////00000000011111122222222233333334444444555556666667777778888889999::::::;;;;;<<<<<<<===>>>>>?????@@@@@AAAABBBBBCCCCCDDDDEEEEEFFFFGGGGGHHHIIIIJJJJJKKKKKLLLMMMMMNNNNNOOOPPPPQQQQRRRRRSSTTTTTUUUUVVVVVWWWXXXYYYYYZZZZ[[[[\\\\]]]^^^^^___`````aaaabbccccdddddeeeeffggggghggggfffeeeeedddccccbbbbaaaa```____^^^^]]]]\\\\\[[ZZZZYYYYYXXXXWWWVVVVUUUUUTTTTSSSSRRRQQQQQPPPOOOOONNNNMMMMMLLKKKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEEDDCCCCCBBBBBAAAA@@@@@?????>>>>>====<<<<<<;;;;;::::::9999888888777777666666655544444444333333322222222111110000000000//////////.........----------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----------------.........//////////000000000011111222222233333333444444455556666667777778888888999:::::::;;;;;<<<<<<====>>>>>?????@@@@@AAABBBBBCCCCCDDDEEEEEFFFFFGGGGGHHIIIIIJJJJJKKKKKLLLMMMMMNNNNOOOOOPPQQQQQRRRRSSSSTTTUUUUUVVVVWWWWXXXXYYYYYZZZ[[[\\\\\]]]]^^^____````aaaabbbccccddddeeeeeffgggghggggfffeeedddddccccbbbaaa`````___^^^^]]]]]\\\[[[[ZZZZYYYYXXXXXWWVVVVVUUUUTTTTTSSRRRRQQQQQPPPOOOOONNNNNMMMLLLLKKKKJJJJJIIIIIHHGGGGGFFFFFEEEEEDDDCCCCCBBBBBAAAA@@@@@?????>>>>>===<<<<<<<;;;;;:::::99999888887777776666665555544444433333333222222211111000000000//////////........---------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------------.......//////////000000000111112222222233333334444445555566666667777778888899999:::::;;;;;<<<<<<====>>>>>?????@@@@@AAAABBBBBCCCCCDDEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKLLLLMMMMNNNNNOOOOOPPQQQQQRRRRSSSTTTTTUUUVVVVVWWWXXXXXYYYYZZZ[[[[\\\\]]]]]^^^^__`````aaaabbccccdddddeeeeffggggggggffeeeeeddddccccbbbbaaa````____^^^^]]]\\\\\[[[ZZZZYYYYYXXXWWWWVVVVUUUUTTTTTSSRRRRRQQQQPPPPOOONNNNNMMMMMLLLKKKKKJJJJIIIIIHHHGGGGFFFFFEEEEEDDDCCCCCBBBBBAAA@@@@@?????>>>>>====<<<<<;;;;;;:::::99998888887777777666666555544444443333332222222211111000000000//////////......--------------,,,,,,,,,,,,,,,,,,+++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,--------------......//////////0000000001111122222223333334444444455556666667777778888889999:::::;;;;;;<<<<<====>>>>>?????@@@@@AAAABBBBBCCCCCDDEEEEEFFFFFGGGGHHHHIIIIIJJJJKKKKKLLMMMMMNNNNNOOOOPPPPQQQRRRRRSSSTTTTTUUUUVVVWWWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^___````aaaabbbbcccddddeeeeefffggggggffeeeedddddccccbbaaaa`````___^^^]]]]]\\\\[[[ZZZZZYYYXXXXXWWWVVVVUUUUUTTTSSSSRRRRQQQQQPPOOOOONNNNMMMMMLLLKKKKKJJJJJIIIHHHHGGGGGFFFFEEEEEDDDDCCCCCBBBAAAA@@@@@?????>>>>>====<<<<<;;;;;;:::::999988888877777766666665554444444333333322222211111110000000/////////.......------------,,,,,,,,,,,,,,,,++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,-----------........////////000000001111112222223333333344444455556666667777778888888999:::::;;;;;;;<<<<<===>>>>>?????@@@@@AAAABBBBCCCCCDDDDEEEEEFFFGGGGGHHHHIIIIJJJJJKKKKKLLMMMMMNNNNOOOOOPPPQQQQQRRRSSSSTTTTUUUUUVVVVWWXXXXXYYYYZZZZZ[[\\\\]]]]]^^^^__`````aaaabbbcccdddddeeeefffgggggfffeeeeddddccccbbbaaaa````____^^^]]]]\\\\\[[[ZZZYYYYYXXXXWWWVVVVVUUUTTTTTSSSRRRRRQQQQPPOOOOONNNNNMMMMLLLLKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEDDDCCCCCBBBBBAAA@@@@@?????>>>>>====<<<<<;;;;;;:::::99998888887777766666655555444444333333322222221111100000000////////.......-----------,,,,,,,,,,,,,,++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,-----------....../////////00000001111122222222333333444444555556666666777778888889999:::::;;;;;;<<<<<====>>>>>?????@@@@@AABBBBBCCCCCDDDDEEEEFFFFFGGGGGHHIIIIIJJJJJKKKKLLLLMMMNNNNNOOOOOPPPQQQQRRRRRSSTTTTTUUUUVVVVVWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^____```aaaabbbbccccdddeeeeffffggggffeeeedddddccccbbaaaa`````__^^^^]]]]]\\\\[[ZZZZZYYYYXXXXXWWWVVVUUUUUTTTTSSSSRRRRQQQQQPPOOOONNNNNMMMMMLLKKKKKJJJJIIIIIHHHGGGGGFFFFFEEEEEDDCCCCCBBBBBAAA@@@@@?????>>>>>===<<<<<;;;;;;;:::::999888887777777666666555544444433333332222222111110000000/////////......----------,,,,,,,,,,,,,++++++++++++++++++***************************************+++++++++++++++++++,,,,,,,,,,,,----------.......////////0000000011111222222333333334444445555666666777777888889999:::::;;;;;;<<<<<====>>>>>?????@@@@@AABBBBBCCCCCDDDEEEEEFFFFFGGGGGHHIIIIIJJJJKKKKKLLLMMMMMNNNNNOOOPPPQQQQQRRRRSSSTTTTUUUUUVVVVWWXXXXXYYYYZZZZZ[[[\\\]]]]]^^^^___`````aaabbbccccdddddeeefffggffffeeeeddddcccbbbbaaaa````___^^^^]]]]\\\\\[[ZZZZYYYYYXXXXWWVVVVVUUUUTTTTTSSSRRRQQQQQPPPOOOOONNNNMMMMMLLKKKKKJJJJIIIIIHHHHGGGFFFFFEEEEEDDDCCCCCBBBBBAAAA@@@@@???>>>>>>>==<<<<<;;;;;;:::::999988888777777666666655544444443333332222221111100000000////////.....----------,,,,,,,,,,,,,+++++++++++++++******************************************************+++++++++++++++,,,,,,,,,,,,----------...../////////00000001111122222223333334444445555666666777777888889999:::::;;;;;;<<<<<===>>>>>>????@@@@@AAAABBBBBCCCCCDDEEEEEFFFFFGGGGHHHHIIIIIJJJKKKKKLLLMMMMMNNNNOOOOOPPQQQQQRRRRSSTTTTTUUUUVVVVVWWWXXXYYYYYZZZZ[[[\\\\\]]]^^^^____````aaabbbbccccddddeeeffffgfffeeeedddddcccbbbaaaaa````__^^^^]]]]]\\\\[[ZZZZZYYYYXXXXXWWVVVVUUUUUTTTTSSRRRRRQQQQPPPPOOOONNNNNMMMLLLLKKKKJJJJJIIIIHHHGGGGGFFFFEEEEEDDDDCCCCBBBBBAAA@@@@@?????>>>>>===<<<<<;;;;;;:::::9999888887777776666655555444444333333322222211111000000/////////.....----------,,,,,,,,,,++++++++++++++***************))))))))))))))))))))))))))))))))))))***************++++++++++++++,,,,,,,,,,----------.....////////0000000111112222223333334444445555566666777777788888999:::::;;;;;;;<<<<<==>>>>>?????@@@@@AAAABBBBBCCCCDDDEEEEEFFFFGGGGGHHHHIIIIJJJJJKKKLLLLMMMMNNNNNOOOOPPPQQQQRRRRRSSSTTTUUUUUVVVVWWWXXXXXYYYZZZZZ[[[\\\\]]]]]^^^___````aaaaabbccccdddddeeeeffgfffeeeedddcccccbbbaaaa```____^^^^]]]]\\\\\[[ZZZZYYYYYXXXXWWVVVVVUUUUTTTTSSSRRRRQQQQQPPPOOOOONNNMMMMMLLLKKKKKJJJJIIIIIHHGGGGGFFFFFEEEEDDDDCCCCCBBBAAAA@@@@@?????>>>>>===<<<<<<;;;;;:::::9999888887777776666655554444443333332222221111100000000///////.....---------,,,,,,,,,,+++++++++++++***********))))))))))))))))))))))))))))))))))))))))))))))))))))))***********++++++++++++,,,,,,,,,,---------.....////////0000000111112222223333333444444555566666777777888889999:::::;;;;;<<<<<<==>>>>>?????@@@@@AAAABBBBCCCCCDDDDEEEFFFFFGGGGGHHHIIIIIJJJJKKKKKLLMMMMMNNNNOOOOOPPQQQQQRRRRSSSSTTTTUUUVVVVVWWWXXXXYYYYYZZZ[[[\\\\\]]]]^^^____````aaaabbcccccddddeeeeffgffeeeeedddccccbbbaaaaa```___^^^^]]]]]\\\[[[ZZZZZYYYYXXXWWWWVVVVUUUUUTTTTSSRRRRRQQQQPPOOOOONNNNMMMMMLLLKKKKKJJJIIIIIHHHGGGGGFFFFFEEEEEDDCCCCCBBBBBAAA@@@@@?????>>>>>====<<<<<;;;;;:::::99988888777776666666555444444433333322222211111000000////////.....---------,,,,,,,,,,+++++++++++**********))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))**********+++++++++++,,,,,,,,,,---------.....///////000000111112222222333333444444555566666677777888889999:::::;;;;;<<<<<====>>>>>?????@@@@@AABBBBBCCCCCDDDEEEEEFFFFFGGGGGHHIIIIIJJJJKKKKKLLMMMMMNNNNOOOOOPPPQQQRRRRRSSSTTTTUUUUUVVVWWWWXXXXYYYYZZZZZ[[\\\\]]]]]^^^^__````aaaaabbccccddddeeeeeffffeeeddddcccccbbbaaa````____^^^^]]]\\\\\[[[ZZZZYYYYYXXXWWWVVVVVUUUUTTTSSSSRRRRQQQQQPPOOOONNNNNMMMMLLLLKKKJJJJJIIIIHHHHGGGGFFFFFEEEEEDDCCCCCBBBBBAAA@@@@@?????>>>>>===<<<<<;;;;;:::::999988888777776666665555444444333333322222211110000000//////.....---------,,,,,,,,,+++++++++++*********)))))))))))))))))))(((((((((((((((((((((((((((((((((((()))))))))))))))))))********++++++++++++,,,,,,,,---------.....//////000000001111222222333333444444555566666677777888889999:::::;;;;;<<<<<====>>>>>?????@@@@@AABBBBBCCCCCDDDEEEEEFFFFFGGGGHHHIIIIJJJJJKKKKLLLLMMMNNNNNOOOOPPPQQQQQRRRSSSSTTTTUUUUVVVVVWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^___````aaaabbcccccddddeeeeffeeeeeddddccccbbaaaaa````___^^^^^]]]\\\\[[[ZZZZZYYYXXXXWWWWVVVVUUUTTTTTSSSRRRRRQQQQPPOOOOONNNNMMMMMLLKKKKKJJJJIIIIIHHHGGGGGFFFEEEEEDDDDCCCCBBBBBAAAA@@@?????>>>>>====<<<<<;;;;;:::::99998888877777666666555544444333333222222111110000000///////.....--------,,,,,,,,++++++++++********))))))))))))))))((((((((((((((((((((((((((((((((((((((((((((((((((()))))))))))))))))*******++++++++++,,,,,,,,,-------.....////////0000001111122222233333334444455566666667777788888999:::::;;;;;<<<<<====>>>>>?????@@@@AAAABBBBBCCCDDDDEEEEEFFFFGGGGGHHIIIIIJJJJKKKKKLLLMMMMMNNNOOOOOPPPQQQQRRRRRSSTTTTTUUUUVVVVWWWXXXXYYYYZZZZZ[[\\\\]]]]^^^^^__````aaaaabbbcccddddeeeeefeeeedddddccccbbaaaa`````___^^^]]]]\\\\\[[[ZZZYYYYYXXXXWWWVVVVVUUUTTTTSSSSRRRRQQQPPPPOOOONNNNNMMMMLLKKKKKJJJJJIIIIHHGGGGGFFFFFEEEEDDDDCCCCCBBBBAAA@@@@@????>>>>>====<<<<<;;;;;:::::999988888777776666665555444443333332222221111000000////////.....-------,,,,,,,,,+++++++++*******))))))))))))))(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()))))))))))))********+++++++++,,,,,,,,--------.....///////0000000111222222233333344444555566666677777888889999:::::;;;;;<<<<<===>>>>>????@@@@@AAAABBBBCCCCCDDDEEEEFFFFFGGGGGHHHIIIJJJJJKKKKKLLLMMMMNNNNNOOOPPPPQQQQRRRRSSSTTTTUUUUVVVVVWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^__`````aaaabbbcccdddddeeeefeeeeddddccccbbbaaaa````__^^^^^]]]]\\\\[[ZZZZZYYYYXXXXWWWWVVVUUUUTTTTTSSSRRRQQQQQPPPOOOOONNNNMMMMMLLKKKKJJJJJIIIIHHHGGGGFFFFFEEEEEDDDCCCCCBBBBBAA@@@@@?????>>>>====<<<<<;;;;;:::::999888887777766666665554444433333332222221111000000//////.....--------,,,,,,,,+++++++++******)))))))))))))(((((((((((((((((((''''''''''''''''''''''''''''''''''''((((((((((((((((((())))))))))))******+++++++++,,,,,,,,,-------.....///////000000111122222233333344444555566666677777888889999:::::;;;;;<<<<<====>>>?????@@@@@AAABBBBBCCCCCDDEEEEEFFFFFGGGGHHHHIIIIJJJJJKKKLLLMMMMMNNNNOOOOOPPQQQQQRRRRSSTTTTTUUUUVVVVWWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^^___```aaaabbbbccccdddeeeefeeedddddccccbbaaaa`````__^^^^]]]]\\\\\[[ZZZZYYYYYXXXXWWVVVVVUUUUTTTTSSSSRRRQQQQPPPPOOOONNNMMMMMLLLKKKKKJJJJIIIIIHHGGGGGFFFFEEEEEDDCCCCCBBBBBAAA@@@@@?????>>>>>==<<<<<;;;;;:::::9999888887777766666655544444433333322222111110000000//////.....------,,,,,,,,,+++++++++******)))))))))))((((((((((((((('''''''''''''''''''''''''''''''''''''''''''''''''''((((((((((((((())))))))))))******+++++++++,,,,,,,,-------.....//////000000111112222233333344444445566666677777888889999:::::;;;;;<<<<<===>>>>>?????@@@@@AABBBBBCCCCCDDDEEEEEFFFGGGGGHHHIIIIIJJJJKKKKKLLMMMMMNNNNOOOOPPPQQQQRRRRSSSSTTTUUUUVVVVVWWWXXXYYYYYZZZZ[[[\\\\\]]]^^^^___`````aaabbbccccdddddeeeeeeddddcccccbbaaaa````__^^^^^]]]]\\\\[[ZZZZZYYYYXXXXWWWVVVVUUUUTTTTTSSRRRRQQQQQPPPOOONNNNNMMMMLLLLKKKKJJJJJIIIHHHHGGGGFFFFFEEEEDDDCCCCBBBBBAAAA@@@@?????>>>>>==<<<<<;;;;;:::::99998888877777666665555444444333332222221111000000//////.....--------,,,,,,,++++++++******)))))))))))(((((((((((((''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((()))))))))))*******+++++++,,,,,,,,-------.....//////00000001112222222333334444445555666667777788888999:::::;;;;;<<<<<===>>>>>?????@@@@AAABBBBBCCCCDDDDEEEEFFFFFGGGHHHHIIIIJJJJJKKKKLLLMMMMNNNNNOOOOPPQQQQQRRRRSSSTTTTTUUUVVVVWWWWXXXXYYYZZZZZ[[[\\\\]]]^^^^^___````aaabbbcccccddddeeeeeeddddcccbbbaaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVVUUUUTTTTSSRRRRRQQQQPPPPOOONNNNMMMMMLLLKKKKKJJJIIIIIHHHGGGGFFFFFEEEEEDDCCCCCBBBBAAAA@@@@@???>>>>>====<<<<;;;;;:::::99998888877777666665554444444333332222221111000000//////....-------,,,,,,,,+++++++*******))))))))))((((((((((((''''''''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''''((((((((((((())))))))))******++++++++,,,,,,,--------...///////00000011112222223333344444455556666677777888889999:::::;;;;;<<<====>>>>>????@@@@@AAAABBBCCCCCDDDEEEEEFFFFFGGGGHHIIIIIJJJJKKKKKLLMMMMMNNNNOOOOPPPPQQQRRRRRSSSTTTTUUUVVVVVWWWXXXXYYYYYZZZ[[[\\\\]]]]]^^^___````aaaaabbccccddddeeeeedddcccccbbbaaaa```____^^^^]]]]\\\[[[[ZZZZYYYYXXXWWWWVVVVUUUUTTTTTSSRRRRQQQQQPPOOOONNNNNMMMMLLLLKKKJJJJIIIIIHHHGGGGGFFFEEEEEDDDCCCCCBBBBBAA@@@@@?????>>>>====<<<<<;;;;;::::99988888777776666655554444443333322222221110000000//////....------,,,,,,,++++++++******)))))))))((((((((((('''''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''(((((((((((())))))))*******+++++++,,,,,,,,------....//////00000011112222223333344444455556666677777888889999::::;;;;;<<<<<===>>>>?????@@@@@AAABBBBBCCCCCDDEEEEEFFFFGGGGGHHIIIIIJJJJKKKKLLLLMMMNNNNNOOOOPPPQQQQQRRRSSSTTTTTUUUUVVVWWWWXXXXYYYYZZZ[[[[\\\\]]]]^^^____````aaaabbcccccddddeeeedddccccbbbaaaaa```___^^^^]]]]]\\\[[[ZZZZYYYYYXXXWWWVVVVVUUUUTTTSSSRRRRRQQQQPPOOOOONNNNMMMMMLLKKKKJJJJJIIIIHHHHGGGFFFFFEEEEDDDDCCCCBBBBBAA@@@@@?????>>>>>===<<<<<;;;;;:::::99888887777766666555544444433333222221111100000//////.....-------,,,,,,+++++++++*****))))))))((((((((((''''''''''''''&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''''(((((((((()))))))))*****+++++++++,,,,,,------.....//////000001111122222333334444444555666667777788888999:::::;;;;;<<<<<==>>>>>?????@@@@@AAABBBBBCCCCDDDEEEEFFFFFGGGGHHHHIIIJJJJJKKKKLLLMMMMMNNNOOOOOPPPQQQQRRRRRSSTTTTUUUUVVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]]^^^^__````aaaaabbccccddddeedddddccccbbbaaa`````___^^^^]]]\\\\[[[[ZZZZYYYXXXXXWWWVVVVUUUTTTTTSSSRRRRQQQQQPPOOOONNNNNMMMMLLKKKKKJJJJIIIIIHHGGGGGFFFFEEEEEDDDCCCCCBBBAAAA@@@@?????>>>>>==<<<<<;;;;;:::::999888887777766666655544444433333222221111000000//////....------,,,,,,,,+++++++*****)))))))))(((((((((''''''''''''&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&'''''''''''''((((((((())))))))*****++++++++,,,,,,,-------...///////00000011112222233333444444556666666777778888899:::::;;;;;<<<<<===>>>>>?????@@@AAAABBBBCCCCCDDEEEEEFFFFGGGGGHHHIIIIIJJJKKKKKLLLMMMMNNNNNOOOPPPQQQQQRRRRSSTTTTTUUUUVVVVWWXXXXXYYYYZZZZ[[[\\\\]]]]^^^^__`````aaaabbccccdddddeddddccccbbbbaaa````___^^^^^]]]\\\\[[[ZZZYYYYYXXXXWWWVVVVVUUUTTTTSSSRRRRRQQQPPPOOOOONNNNMMMMMLLKKKKJJJJJIIIIHHHGGGGFFFFFEEEEDDCCCCCBBBBBAAA@@@@@????>>>>>===<<<<;;;;;:::::999988887777766666655444444433333222221110000000//////....------,,,,,,++++++++*****))))))))((((((((('''''''''''&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&'''''''''''((((((((()))))))))*****+++++++,,,,,,,------....//////00000011112222233333444444555666666777778888999:::::;;;;;<<<<====>>>>>????@@@@@AABBBBBCCCCCDDDEEEFFFFFGGGGHHHHIIIIJJJJJKKKLLLMMMMMNNNNOOOOOPPQQQQRRRRRSSTTTTUUUUVVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^^^__````aaaabbbbcccddddeddddccccbbaaaa`````___^^^]]]]\\\\\[[[ZZZYYYYXXXXXWWWVVVUUUUTTTTTSSSRRRQQQQQPPPOOOONNNNNMMMLLLKKKKKJJJJIIIIIHHGGGGFFFFFEEEEDDDCCCCBBBBBAAA@@@@@?????>>>====<<<<<;;;;:::::99998888877777666665544444433333222221111000000/////.....-------,,,,,,++++++*****)))))))))(((((((((''''''''''&&&&&&&%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%&&&&&&&&''''''''''((((((((())))))))*****+++++++,,,,,,------...../////000000111122222333334444445556666677777888889999:::::;;;<<<<<====>>>>?????@@@@@AABBBBBCCCCDDDDEEEEFFFFFGGGHHHIIIIIJJJJKKKKKLLMMMMNNNNNOOOOPPQQQQQRRRRSSTTTTTUUUUVVVVWWXXXXXYYYYZZZZ[[\\\\\]]]]^^^^__`````aaaabbbcccddddedddcccccbbaaaa````__^^^^^]]]]\\\\[[ZZZZZYYYYXXXXWWVVVVVUUUUTTTTSSRRRRRQQQQPPPOOOOONNNMMMMMLLLKKKKJJJJJIIIHHHGGGGGFFFFEEEEEDDCCCCCBBBBAAAA@@@?????>>>>>===<<<<<;;;;;::::9998888877777666665554444443333322222111100000//////....------,,,,,,++++++++*****)))))))((((((((''''''''''&&&&&&&%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%&&&&&&&&''''''''''((((((())))))))*****+++++++,,,,,,-------...///////0000011122222333334444444556666677777888889999::::;;;;;<<<<<==>>>>>?????@@@@AAAABBBCCCCCDDDEEEEEFFFFGGGGGHHIIIIJJJJJKKKKLLMMMMMNNNNOOOOOPPQQQQRRRRRSSSTTTUUUUVVVVVWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^^___```aaaabbbcccccddddddccccbbaaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYXXXXXWWVVVVUUUUTTTTTSSRRRRQQQQQPPPOOONNNNNMMMMLLLKKKKKJJJIIIIHHHHGGGGFFFFFEEEDDDDCCCCBBBBBAA@@@@@????>>>>>===<<<<<;;;;;:::::998888877777666665555444443333322222111100000//////....------,,,,,,++++++*****))))))))(((((((''''''''''&&&&&&&%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%&&&&&&''''''''''(((((((()))))))*****++++++,,,,,,,------....//////000001111222223333344444555666667777788888999:::::;;;;;<<<<<==>>>>>????@@@@@AAABBBBBCCCDDDDEEEEFFFFFGGGGHHHIIIIJJJJKKKKKLLMMMMNNNNNOOOOPPQQQQQRRRRSSSTTTTTUUUVVVVWWWXXXXXYYYZZZZ[[[\\\]]]]]^^^^___```aaaaabbbccccddddddccccbbaaaa````___^^^^]]]]\\\\[[[ZZZZYYYYXXXXWWVVVVVUUUUTTTTSSSRRRRQQQQPPOOOOONNNNMMMMLLLLKKKJJJJJIIIIHHHGGGGGFFFEEEEEDDDCCCCBBBBBAA@@@@@?????>>>>====<<<;;;;;:::::999888887777766666555544444333332222211100000///////...-------,,,,,,++++++****)))))))(((((((('''''''''&&&&&&%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$##################################$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%&&&&&&'''''''''((((((())))))))***+++++++,,,,,,------....//////000001111222223333344444555566666777778888899:::::;;;;;<<<<====>>>?????@@@@@AAABBBBBCCCCDDEEEEEFFFFGGGGGHHIIIIJJJJJKKKKLLLLMMMNNNNOOOOOPPPQQQRRRRSSSSTTTTUUUVVVVVWWWXXXXYYYZZZZ[[[[\\\\]]]^^^^____````aaabbbccccdddddcccccbbaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVUUUUUTTTTSSRRRRQQQQQPPOOOONNNNNMMMMLLKKKKKJJJJIIIIHHHHGGGFFFFFEEEEDDDCCCCCBBBAAAA@@@@?????>>>>===<<<<<;;;;:::::999988887777766666555444443333322222111100000//////....-----,,,,,,+++++++*****))))))((((((('''''''''&&&&&&%%%%%%%%%%$$$$$$$$$$$$$$$#################################################$$$$$$$$$$$$$$$%%%%%%%%%%&&&&&&'''''''''(((((((())))))*****++++++,,,,,,-----....//////000001111222223333344444555566666777778888999:::::;;;;<<<<<====>>>>?????@@@AAAABBBBCCCCCDDEEEEFFFFFGGGGHHHHIIIJJJJKKKKKLLLMMMNNNNNOOOOPPPQQQQQRRRSSSTTTTUUUUUVVVWWWXXXXYYYYYZZZ[[[\\\\]]]]]^^^___````aaabbbcccccddddcccbbbaaaa`````__^^^^]]]]\\\\\[[ZZZZYYYYXXXWWWWVVVVUUUUTTTSSSSRRRRQQQQPPOOOOONNNNMMMMLLLKKKKJJJJIIIIIHHGGGGGFFFFEEEEDDDDCCCBBBBBAAA@@@@@????>>>>>==<<<<<;;;;;::::999988888777666665555444443333322222111100000/////....------,,,,,,++++++****))))))))(((((((''''''''&&&&&&%%%%%%%%%%$$$$$$$$$$$$###########################################################$$$$$$$$$$$$$%%%%%%%%%%&&&&&&'''''''(((((((()))))))****++++++,,,,,,,------..../////000001112222233333444445555666667777888889999:::;;;;;<<<<<===>>>>>????@@@@@AABBBBBCCCCDDDDEEEFFFFGGGGGHHHIIIIIJJJKKKKLLLLMMMMNNNOOOOOPPPQQQQRRRSSSSTTTTUUUUVVVWWWWXXXXYYYYZZZ[[[\\\\\]]]]^^^___`````aaaabbccccddddcccbbbaaaa```___^^^^^]]]]\\\[[[ZZZZZYYYYXXXWWWVVVVUUUUUTTTSSSRRRRQQQQQPPOOOONNNNNMMMMLLKKKKKJJJJIIIIHHHGGGGFFFFEEEEEDDCCCCCBBBBAAA@@@@@?????>>>====<<<<;;;;;:::::99888887777766665555444443333322222111100000/////...-------,,,,,,++++++****))))))(((((((('''''''&&&&&%%%%%%%%%%$$$$$$$$$$$##################""""""""""""""""""""""""""""""""""#################$$$$$$$$$$$%%%%%%%%%%&&&&&''''''''((((((()))))))***+++++++,,,,,,------..../////00000111122222333334444455566667777788888999:::::;;;;;<<<====>>>>?????@@@@@AABBBBCCCCCDDDEEEEEFFFGGGGHHHHIIIIJJJKKKKKLLLMMMMNNNNNOOOPPPQQQQQRRRRSSTTTTUUUUUVVVVWWXXXXYYYYZZZZZ[[\\\\]]]]^^^^^__````aaaabbccccddccccbbbbaaaa```___^^^^]]]]]\\\[[[ZZZZYYYXXXXXWWWVVVVUUUTTTTTSSSRRRRQQQPPPPOOOONNNNMMMLLLLKKKKJJJJIIIIIHHGGGGFFFFFEEEEDDDCCCCBBBBBAAA@@@?????>>>>====<<<<;;;;;:::::9988888777776666655544444333332222211100000/////....------,,,,,+++++++*****))))))((((((''''''''&&&&&%%%%%%%%%%$$$$$$$$$$#############"""""""""""""""""""""""""""""""""""""""""""""""""##############$$$$$$$$$$%%%%%%%%%%&&&&&'''''''((((((())))))*****++++++,,,,,------..../////00000111122222333334444455666667777788888999:::::;;;;;<<<<===>>>>?????@@@@AABBBBBCCCCDDDDEEEEFFFFFGGGHHHIIIIIJJJJKKKLLLLMMMMNNNNOOOPPPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXXYYYYZZZZ[[\\\\]]]]]^^^^__````aaaabbbccccdccccbbbaaa`````___^^^^]]]\\\\[[[ZZZZZYYYXXXXWWWVVVVVUUUTTTTSSSRRRRRQQQPPPOOOONNNNNMMMLLLKKKKKJJJJIIIHHHHGGGGFFFFEEEEEDDCCCCBBBBBAA@@@@@????>>>>>===<<<<<;;;:::::99998888777776666655444443333322222111100000/////....------,,,,,++++++****))))))((((((((''''''&&&&&&%%%%%%%%$$$$$$$$$$############"""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""#############$$$$$$$$$$%%%%%%%&&&&&&'''''''((((((())))))****++++++,,,,,-------.../////00000111122222333334444455566666777778889999:::::;;;;<<<<<==>>>>>????@@@@@AAABBBBBCCCDDDEEEEEFFFFGGGHHHHIIIIJJJJKKKKKLLMMMMNNNNNOOOOPPQQQQRRRRRSSTTTTUUUUVVVVVWWXXXXYYYYZZZZZ[[\\\\]]]]^^^^__`````aaaabbccccdccccbbbaaa````___^^^^^]]]\\\\[[[ZZZYYYYYXXXXWWWVVVUUUUTTTTTSSSRRRQQQQPPPPOOOONNNMMMMMLLLKKKKJJJIIIIIHHHGGGGFFFFFEEEDDDCCCCCBBBBAAA@@@@?????>>>>====<<<;;;;;::::99998888877776666655544443333322222111100000/////....------,,,,,++++++****))))))((((((''''''''&&&&&%%%%%%%$$$$$$$$$$############""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""###########$$$$$$$$$$%%%%%%%%&&&&&'''''''(((((()))))))***+++++++,,,,,------..../////0000011122222333334444555566666777788888999::::;;;;;<<<<====>>>?????@@@@AAAABBBBCCCCCDDEEEEFFFFFGGGGHHIIIIIJJJJKKKKLLMMMMMNNNNOOOOPPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^^^__````aaaabbccccdcccbbaaaaa````___^^^]]]]\\\\\[[[ZZZYYYYXXXXWWWWVVVUUUUTTTTSSRRRRRQQQQPPPOOONNNNNMMMMLLLKKKKKJJJIIIIHHHGGGGGFFFEEEEEDDDCCCCBBBBBAA@@@@@????>>>>>==<<<<;;;;;:::::9998888877777666555544444333332222111100000/////...-----,,,,,,,+++++*****))))))((((((''''''&&&&&%%%%%%%%$$$$$$$$$##########""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"""""""""##########$$$$$$$$$%%%%%%%&&&&&''''''((((((())))))*****+++++,,,,,,-----..../////000001111222333334444455556666777778888899:::::;;;;;<<<<===>>>>>???@@@@@AAABBBBBCCCCDDEEEEEFFFFGGGGGHHIIIIJJJJKKKKKLLMMMMNNNNNOOOOPPQQQQRRRRRSSSTTTUUUUVVVVWWWWXXXYYYYZZZZ[[\\\\\]]]]^^^^__````aaaaabbbccccccbbaaaa````____^^^]]]]\\\\[[ZZZZZYYYYXXXXWWVVVVUUUUUTTTTSSRRRRQQQQQPPPOOONNNNMMMMMLLLKKKJJJJIIIIIHHHGGGFFFFFEEEEDDDCCCCCBBBAAAA@@@@????>>>>>==<<<<<;;;;:::::998888877777666665554444433333222221100000/////....-----,,,,,,+++++****))))))((((((('''''''&&&&%%%%%%%$$$$$$$$$##########""""""""!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!"""""""##########$$$$$$$$$%%%%%%%%&&&''''''''(((((())))))****+++++,,,,,,-----..../////0000011122222333334444455666667777788888999:::::;;;<<<<<===>>>>>????@@@AAAABBBBCCCCCDDEEEEFFFFFGGGGHHIIIIIJJJJKKKKLLMMMMMNNNNOOOOPPQQQQQRRRRSSSTTTUUUUUVVVVWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^____```aaaabbbccccccbbaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYXXXXXWWVVVVUUUUTTTTSSSRRRRQQQQPPOOOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGGFFFFEEEEEDDDCCCBBBBBAAA@@@@?????>>>====<<<<;;;;;::::999888877777666665554444433333222221100000/////....-----,,,,,,+++++****))))))(((((('''''''&&&&&%%%%%%$$$$$$$$$########""""""""!!!!!!!!!!!!!! !!!!!!!!!!!!!!"""""""#########$$$$$$$$$%%%%%%&&&&&''''''(((((()))))))***+++++,,,,,,,-----.../////0000011122222333334444455666667777788889999::::;;;;;<<<====>>>>?????@@@@AABBBBBCCCCDDEEEEEFFFFGGGGGHHHIIIJJJJKKKKKLLLMMMNNNNOOOOOPPPQQQRRRRSSSSTTTTUUUVVVVWWWXXXXXYYYZZZZ[[[\\\]]]]]^^^^___```aaaabbbcccccbbaaaaa````__^^^^]]]]\\\\[[[ZZZZYYYYXXXXWWVVVVVUUUUTTTTSSRRRRQQQQQPPOOOONNNNMMMMMLLKKKKJJJJIIIIIHHGGGGFFFFFEEEEDDCCCCCBBBBAAA@@@@@???>>>>>===<<<<<;;;;:::::99888887777666665555444333332222211110000/////....-----,,,,,,+++++****))))))((((((''''''&&&&%%%%%%%%$$$$$$$#########""""""!!!!!!!!!!!!! !!!!!!!!!!!!"""""""########$$$$$$$$%%%%%%%&&&&''''''((((((())))))****+++++,,,,,,-----..../////00011112222233333444455556666677788888999:::::;;;;<<<<<==>>>>>????@@@@@AABBBBCCCCCDDDEEEFFFFFGGGGHHHIIIIIJJJKKKKLLLMMMMMNNNOOOOPPPQQQQQRRRSSSTTTTUUUVVVVVWWWXXXXYYYZZZZ[[[[\\\\]]]^^^^___```aaaaabbbccccbbaaaa````___^^^^]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVUUUUTTTTTSSRRRRQQQQPPOOOOONNNNMMMMLLKKKKKJJJJIIIIHHHGGGGFFFFEEEEEDDCCCCBBBBBAAA@@@?????>>>>===<<<<<;;;;;:::9998888877777666655544444333322222111100000/////..-----,,,,,,,+++++***)))))(((((((''''''&&&&&%%%%%%$$$$$$$$########"""""""!!!!!!!!!!  !!!!!!!!!!""""""#########$$$$$$$%%%%%%%&&&&&''''''(((((()))))****+++++,,,,,,-----.../////000001112222233334444455556666777778888899::::;;;;;<<<<<==>>>>?????@@@@AABBBBBCCCCDDDEEEEEFFFGGGGHHHHIIIIJJJKKKKKLLLMMMMNNNOOOOOPPPQQQQRRRSSSTTTTTUUUUVVVWWWXXXXYYYYYZZZ[[[\\\\]]]^^^^____````aaabbbccccbbaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYXXXWWWWVVVVUUUUTTTSSSRRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJJIIIIHHGGGGFFFFFEEEEDDCCCCCBBBBAA@@@@@????>>>>>===<<<;;;;;::::9999888877777666665544444333332222111100000/////..-----,,,,,,+++++****)))))(((((('''''''&&&%%%%%%%%$$$$$$#########"""""!!!!!!!!!!  !!!!!!!!!!"""""########$$$$$$$%%%%%%%&&&&''''''(((((()))))****+++++,,,,,,-----.../////000001111222333334444455566666777778888999::::;;;;;<<<<==>>>>>????@@@@@AAABBBCCCCCDDDEEEEFFFFFGGGHHHIIIIJJJJJKKKLLLMMMMNNNNNOOOPPPQQQQRRRRRSSTTTTUUUUVVVWWWWXXXXYYYYZZZ[[[\\\\]]]]]^^^___````aaabbbccbbbaaaaa````__^^^^]]]]\\\[[[[ZZZZYYYYXXXWWWVVVVUUUUUTTTSSSRRRRQQQPPPPOOOONNNNMMMLLLLKKKKJJJJIIIHHHHGGGGFFFFEEEEEDDCCCCBBBBBAA@@@@?????>>>>==<<<<<;;;;:::::99988888777666665554444433333222221100000/////...------,,,,,+++++****)))))((((((''''''&&&&%%%%%%$$$$$$$$#######"""""!!!!!!!!!!  !!!!!!!!!!"""""########$$$$$$$%%%%%%&&&&''''''((((((()))))***+++++,,,,,-------../////00000111222223333344444556666677778888899:::::;;;;<<<<<===>>>?????@@@@AAABBBBBCCCDDDEEEEEFFFFGGGHHHHIIIIJJJJKKKLLLLMMMMNNNNOOOPPPPQQQQRRRRSSTTTTUUUUUVVVVWWXXXXYYYYZZZ[[[[\\\\]]]]^^^___````aaaaabbcbbbaaaa```____^^^^]]]]\\\[[[ZZZZYYYYYXXXWWWVVVVUUUTTTTSSSSRRRRQQQPPPOOOONNNNNMMMLLLKKKKJJJJJIIIHHHGGGGFFFFFEEEDDDCCCCCBBBBAA@@@@@????>>>>===<<<<;;;;;::::99998887777766665555444433333222221100000/////....-----,,,,,+++++****)))))(((((('''''&&&&&%%%%%%$$$$$$########"""""!!!!!!!!!  !!!!!!!!!"""""#######$$$$$$%%%%%%%&&&&&'''''(((((()))))****+++++,,,,,-----.../////000001112222233333444455566667777788889999:::;;;;;<<<<====>>>>???@@@@@AAABBBBCCCCCDDEEEEFFFFFGGGGHHIIIIJJJJJKKKKLLMMMMNNNNNOOOOPPQQQQRRRRSSSTTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^____````aaaabbcbbbaaaa```___^^^^]]]]]\\\[[[ZZZZYYYXXXXWWWVVVVVUUUTTTTSSSRRRQQQQQPPPOOOONNNMMMMMLLLKKKKJJJIIIIHHHHGGGGFFFEEEEEDDDCCCCBBBAAAA@@@@?????>>>>==<<<<<;;;;:::::9988887777766666555444443332222211110000/////....-----,,,,,+++++***)))))((((('''''''&&&%%%%%%%$$$$$$#######"""""!!!!!!!!!  !!!!!!!!!"""""########$$$$$$%%%%%%&&&&''''''((((()))))****+++++,,,,,-----..../////0001111222223333444445566666777778888999:::::;;;<<<<<===>>>>?????@@@AAAABBBBCCCCDDEEEEEFFFFGGGGHHHIIIIJJJJKKKKLLMMMMMNNNNOOOOPPQQQQQRRRRSSTTTTUUUUVVVVVWWXXXXYYYYZZZZ[[\\\\]]]]]^^^^__````aaaabbcbbbaaaa```___^^^^]]]\\\\[[[ZZZZZYYYXXXXWWWVVVUUUUTTTTTSSSRRRQQQQPPPOOOOONNNMMMMLLLKKKKKJJJIIIIHHHGGGGGFFFEEEEDDDCCCCCBBBAAA@@@@@????>>>====<<<<;;;;;::::99888887777666665544444333332222111100000////...-----,,,,,+++++****)))))(((((''''''&&&&%%%%%%$$$$$$$######"""""!!!!!!!!!  !!!!!!!!!"""""######$$$$$$%%%%%%&&&&''''''((((()))))****+++++,,,,,-----....////00000111222233333444445556666677788888999::::;;;;;<<<====>>>>????@@@@@AABBBBCCCCCDDEEEEFFFFGGGGGHHIIIIJJJJKKKKKLLMMMMNNNNOOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZZZ[[\\\\]]]]^^^^__````aaaabbbbbaaa````____^^^^]]]\\\\[[[ZZZYYYYXXXXXWWWVVVUUUUTTTTSSRRRRRQQQQPPPOOONNNNMMMMMLLLKKKJJJJIIIIIHHHGGGFFFFEEEEEDDDCCCBBBBBAAA@@@@???>>>>>===<<<<<;;;;:::999988887777766665554444333332222211100000/////..-----,,,,,+++++****)))))(((((''''''&&&&%%%%%%$$$$$$#######"""""!!!!!!!  !!!!!!!!"""""######$$$$$$%%%%%%%&&&'''''''((((()))))***+++++,,,,,-----.../////00000112222233333444455556666777778889999::::;;;;<<<<<==>>>>>????@@@@AABBBBBCCCCDDEEEEEFFFFGGGGHHIIIIIJJJJKKKKLLMMMMMNNNNOOOOPPQQQQRRRRRSSSTTTUUUUVVVVWWXXXXXYYYYZZZZ[[\\\\]]]]^^^^___````aaaabbbbaaa````___^^^]]]]]\\\\[[[ZZZYYYYXXXXWWVVVVVUUUUTTTTSSRRRRQQQQPPPPOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGGFFFFEEEEDDCCCCCBBBBAAA@@@@@???>>>>====<<<<;;;:::::9998888877776666655444443333222221100000/////...-----,,,,,+++++****)))))(((((''''''&&&&%%%%%$$$$$$######"""""!!!!!!!!  !!!!!!!"""""#######$$$$$$%%%%%&&&&''''''((((()))))****+++++,,,,,-----../////0000011122222333444445556666677778888899:::::;;;;<<<<===>>>>????@@@@@AABBBBCCCCCDDDEEEFFFFGGGGGHHHIIIJJJJKKKKKLLLMMMNNNNOOOOPPPPQQQRRRRSSSTTTUUUUVVVVVWWWXXXYYYYZZZZ[[\\\\]]]]]^^^^__````aaaabbbbaaa````___^^^]]]]\\\\[[ZZZZZYYYYXXXXWWVVVVUUUUTTTTTSSRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJJIIIIHHGGGGFFFFEEEEEDDCCCCBBBBBAAA@@@????>>>>>===<<<;;;;;::::9999888877777666555444443333322221110000/////....----,,,,,+++++***)))))((((('''''''&&%%%%%%$$$$$$$######""""!!!!!!!  !!!!!!!!""""######$$$$$$%%%%%%&&&''''''((((()))))****+++++,,,,,----.../////0000111122223333344444556666777778888999::::;;;;;<<<<==>>>>>????@@@@AABBBBBCCCCDDDEEEEEFFFGGGGHHHIIIJJJJJKKKKLLLMMMNNNNNOOOOPPPQQQRRRRSSSTTTTTUUUVVVVWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^__````aaaabbaaaa`````___^^^]]]]\\\\[[ZZZZYYYYXXXXXWWVVVVUUUUTTTTSSRRRRRQQQQPPOOOONNNNMMMMLLLKKKKJJJJIIIIHHHGGGGFFFFEEEEDDCCCCCBBBBAA@@@@@????>>>>====<<<;;;;:::::9998887777766665555444433333222111100000////....-----,,,+++++****)))))((((('''''&&&&%%%%%%$$$$$$#######"""!!!!!!!  !!!!!!""""######$$$$$$%%%%%%%&&&'''''((((()))))****+++++,,,,-----....///0000011112222333334444555666677777888899:::::;;;;<<<<====>>>????@@@@@AAABBBCCCCCDDDEEEEFFFGGGGHHHHIIIIJJJKKKKLLLLMMMMNNNOOOOPPPQQQRRRRRSSSTTTTUUUVVVVWWWXXXXXYYYZZZZ[[[\\\]]]]^^^^__`````aaaabaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYXXXXWWVVVVVUUUUTTTTSSRRRRQQQQPPPOOOONNNNMMMMLLKKKKJJJJJIIIIHHGGGGFFFFFEEEEDDCCCCBBBBBAA@@@@????>>>>>==<<<<;;;;;::::9988888777766666555444443332222211100000/////..-----,,,,,++++****)))))((((('''''&&&&%%%%%%$$$$$######"""""!!!!!!  !!!!!!"""""#######$$$$$%%%%%%&&&&'''''((((()))))***++++,,,,,-----.../////0000011222223333444445566666777788888999:::;;;;;<<<<===>>>>>???@@@@AAABBBBBCCCDDDEEEEFFFFFGGGHHHIIIIJJJJJKKKLLLMMMMNNNOOOOPPPPQQQQRRRSSSTTTTUUUVVVVVWWWXXXXYYYZZZZ[[[\\\]]]]]^^^^___```aaaabaaaa````__^^^^]]]]\\\\[[[ZZZZYYYYXXXXWWVVVVUUUUTTTTTSSRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJIIIIIHHGGGGFFFFEEEDDDDCCCCBBBBAA@@@@@????>>>>===<<<<;;;;:::::998888777776666555544433333222211110000/////..-----,,,,,+++++***)))))((((('''''&&&%%%%%%%$$$$$######""""!!!!!!  !!!!!!""""######$$$$$%%%%%%&&&&'''''((((()))))**+++++,,,,,-----.../////000011122223333344445555666777778888999:::::;;;<<<<====>>>>???@@@@@AAABBBBCCCDDDDEEEEFFFFGGGHHHIIIIIJJJJKKKLLLMMMMNNNNNOOOPPPQQQQRRRSSSTTTTTUUUUVVVWWWXXXXYYYZZZZ[[[[\\\\]]]^^^^___```aaaabaaaa````__^^^^]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVUUUUTTTSSSRRRRRQQQQPPOOOONNNNMMMLLLKKKKKJJJJIIIHHHGGGGGFFFFEEEDDDCCCCBBBBBAA@@@@?????>>>>==<<<<;;;;;::::99888887777666665544443333322221111000/////....----,,,,,+++++**)))))((((('''''&&&&%%%%%%$$$$$#######"""!!!!!!!  !!!!!!""""######$$$$$%%%%%%&&&&'''''((((()))))***+++++,,,,,---..../////000011112223333344445556666677788888999::::;;;;;<<<===>>>>?????@@@AAABBBBBCCCCDDEEEEFFFFGGGGGHHIIIIJJJJKKKKKLLMMMMNNNNOOOPPPQQQQRRRRRSSTTTTUUUUVVVWWWXXXXYYYYYZZZ[[[\\\\]]]^^^^___```aaaaaaaa````__^^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVVUUUUTTTSSSRRRRQQQPPPOOOOONNNNMMMLLLKKKKJJJJJIIIHHHGGGGFFFEEEEEDDDCCCCBBBAAA@@@@@????>>>====<<<<;;;;:::::99888877777666655444443333222221100000////....-----,,,,+++++***))))(((((''''''&&&%%%%%%$$$$$#####"""""!!!!!!  !!!!!!"""""#####$$$$$%%%%%%%&&''''''((((())))****+++++,,,,-----...////000001112222233344444555666677777888999:::::;;;;<<<====>>>>????@@@@@AABBBBCCCCDDEEEEEFFFFGGGGHHIIIIJJJJJKKKKLLMMMMNNNNOOOOOPPQQQQRRRRSSTTTTUUUUVVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^^___````aaaaaa````__^^^^]]]]\\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTTSSSRRRRQQQPPPOOOONNNMMMMMLLLKKKKJJJIIIIHHHGGGGGFFFEEEEDDDCCCCCBBBAAA@@@@?????>>>===<<<<;;;;;:::999888887777666665544443333322221110000/////...-----,,,,,+++****)))))((((('''''&&&%%%%%$$$$$$#####""""!!!!!!  !!!!!!""""#####$$$$$$%%%%%&&'''''((((()))))****++++,,,,,-----../////000011112222333334445556666677778888899::::;;;;;<<<<==>>>>?????@@@@AABBBBCCCCCDDEEEEFFFFGGGGGHHIIIIJJJJKKKKLLMMMMMNNNNOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\\]]]]^^^___````aaaaaa````__^^^^]]]]\\\[[[ZZZZYYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQQPPPOOOONNNMMMMLLLKKKKKJJJIIIIHHHGGGFFFFFEEEEDDDCCCBBBBAAAA@@@@???>>>>====<<<<;;;:::::999888877777666555444443333222221100000////..-----,,,,,+++++***)))))((((('''''&&%%%%%%%$$$$$#####"""!!!!!!!  !!!!!!""""#####$$$$$%%%%%%&&&'''''((((()))))**+++++,,,,,-----...///000001112222233334444455666677777888899:::::;;;;<<<<===>>>>????@@@@AAABBBBCCCCDDEEEEFFFFFGGGGHHIIIIJJJJKKKKKLLMMMMNNNNOOOOPPQQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^___````aaaaa`````__^^^^]]]]\\\[[[ZZZZYYYXXXXWWWWVVVVUUUTTTTSSSRRRQQQQPPPOOOOONNNMMMMLLLKKKJJJJIIIIIHHHGGGFFFFEEEEDDDDCCCBBBBAAA@@@?????>>>>===<<<;;;;;::::999888887776666555544443333322211100000////...----,,,,,+++++***)))))((((('''''&&%%%%%%$$$$$#####""""!!!!!!  !!!!!!""""#####$$$$$%%%%%%&&&'''''((((()))))**+++++,,,,,----....////00000112222333334444555666677778888899::::;;;;;<<<<==>>>>?????@@@@AABBBBCCCCDDDDEEEFFFFGGGGHHIIIIIJJJJKKKKLLMMMMNNNNOOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWWXXXXYYYYZZZZ[[\\\\]]]]^^^___`````aaaa```___^^^^]]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTTSSSRRRQQQQPPPOOONNNNMMMMMLLLKKKJJJJIIIIHHGGGGGFFFFEEEEDDCCCCBBBBBAAA@@@????>>>>>===<<<;;;;:::::99988877777666655544444333222211110000/////..-----,,,,+++++****)))((((('''''&&&&%%%%%$$$$$#####""""!!!!!  !!!!!"""#####$$$$$%%%%%&&&&'''''((((())))****+++++,,,-----.../////0000111222233334444455666677777888899:::::;;;;<<<<==>>>>>????@@@@AABBBBBCCCCDDDEEEFFFFGGGGGHHHIIIJJJJKKKKLLMMMMMNNNNOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]]^^^^__````aaaa```___^^^^]]]\\\\[[[ZZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRRQQQQPPPOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGFFFFEEEEEDDCCCCBBBBAA@@@@@????>>>>==<<<<<;;;;::::998888877776666555544433332222211100000///....----,,,,,++++***)))))(((('''''&&&&%%%%%$$$$$#####""""!!!!!  !!!!!""""#####$$$$$%%%%%&&&'''''(((()))))****++++,,,,,---....////000001122222333344445555666777788888999:::;;;;<<<<<===>>>????@@@@@AAABBBCCCCDDDEEEEEFFFGGGGHHHIIIJJJJKKKKKLLLMMMNNNNOOOOPPQQQQRRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZZ[[\\\\]]]]^^^^__````aaaa```___^^^^]]]\\\\[[[ZZZYYYYXXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOOONNNNMMMMLLKKKKJJJJIIIIIHHGGGGFFFFEEEEDDCCCCCBBBBAA@@@@????>>>>>==<<<<;;;;:::::9988887777766665544444333322221111000/////...----,,,,,+++++**)))))(((((''''&&&&%%%%%$$$$$#####"""!!!!!  !!!!!""""#####$$$$$%%%%%&&&&'''((((()))))***+++++,,,,,----../////00001111222333344444555666777778888999:::::;;;<<<<===>>>>>???@@@@AAABBBCCCCCDDDEEEEFFFGGGGHHHIIIIIJJJKKKKLLLMMMNNNNOOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXXYYYYZZZZ[[\\\\]]]]^^^^__````aa`````___^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMMLLKKKKJJJJIIIIHHGGGGFFFFFEEEEDDCCCCBBBBAAA@@@@????>>>>==<<<<<;;;;::::9988888777766665554444333322222110000/////...-----,,,+++++***)))))((((('''''&&%%%%%$$$$$#####""""!!!!!  !!!!!""""#####$$$$$%%%%%&&&'''''((((()))))**+++++,,,,-----../////00001112222233344445555666677788888999::::;;;<<<<<===>>>>???@@@@AAAABBBBCCCDDDEEEEFFFFFGGGHHHIIIIJJJKKKKLLLMMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^__`````a````___^^^]]]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSSRRRRQQQQPPOOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGFFFFEEEDDDDCCCCBBBBAA@@@@?????>>>>==<<<<;;;;;::::9988887777766665544443333322221110000////....---,,,,,++++****))))((((('''''&&%%%%%$$$$$#####""""!!!!!  !!!!!"""#####$$$$$%%%%%&&&'''''((((())))***++++,,,,,----....///00001111222233333444555666677777888999::::;;;;;<<<===>>>>?????@@@AAABBBBCCCDDDDEEEEFFFFGGGHHHIIIIJJJKKKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]]^^^^__````a````___^^^]]]]\\\\[[ZZZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPPOOOONNNNMMMMLLKKKKJJJJIIIIIHHGGGGFFFFEEEDDDCCCCBBBBBAA@@@@????>>>====<<<<;;;;:::99998888777766655554444333322222110000/////..-----,,,,+++++***)))))((('''''&&&&%%%%$$$$$#####""""!!!!!  !!!!!""""#####$$$$$%%%&&&&'''''(((()))))**+++++,,,,-----.../////0001112222233334445555666677778889999::::;;;;<<<====>>>>????@@@AAABBBBBCCCCDDEEEEFFFFGGGHHHIIIIIJJJJKKKLLLMMMMNNNOOOOPPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^__````a````___^^^]]]]\\\\[[ZZZZYYYYXXXXWWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFFFEEEDDDCCCCBBBAAA@@@@@????>>>===<<<<;;;;;:::99988887777766655544443333322211100000////...----,,,,+++++**)))))(((((''''&&&&%%%%%$$$$#####"""!!!!!  !!!!!""""#####$$$$%%%%%&&&''''((((()))))***+++++,,,----....////0000011222233333444455666677777888899::::;;;;;<<<<==>>>>????@@@@@AABBBBCCCCDDEEEEFFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWWXXXXYYYZZZZ[[[\\\]]]]^^^^__````a````___^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKKJJJJIIIHHHGGGGFFFEEEEDDDDCCCCBBBAAA@@@@???>>>>>===<<<<;;;:::::9998888777666655554444333222221110000/////..----,,,,,++++***))))((((('''''&&&%%%%%$$$$$###""""!!!!!  !!!!!""""####$$$$$%%%%%&&'''''((((())))****++++,,,,,---.../////000011222223333444455566667777888899:::::;;;;<<<<==>>>>>????@@@@AABBBBCCCCDDDEEEEFFFFGGGGHHIIIIJJJJKKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^__````````__^^^^]]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIIHHHGGGGFFFEEEEDDDCCCBBBBBAAA@@@@???>>>>===<<<<<;;;::::99988888777666655544444333222211100000///...-----,,,,+++++**)))))(((('''''&&%%%%%$$$$$#####"""!!!!!  !!!!!""#####$$$$$%%%%%&&&'''''((()))))***+++++,,,,-----..////0000011222233334444455666677778888899::::;;;;<<<<<==>>>>????@@@@AABBBBBCCCCDDEEEEFFFFGGGGHHIIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]]^^^^___``````__^^^^]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQPPPOOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFFEEEEDDDCCCBBBBAAA@@@@@???>>>>===<<<;;;;:::::999888777766666555444333322222111000/////...----,,,,,+++****))))(((((''''&&&%%%%$$$$$#####"""!!!!!  !!!!!""#####$$$$$%%%%&&&&''''((((()))****++++,,,,,----../////000011222223333444455666667777888899:::::;;;;<<<<==>>>>????@@@@@AABBBBCCCCDDEEEEFFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOOOPPQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYYYZZZ[[[\\\\]]]^^^^___``````__^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVVUUUUTTTSSSRRRRQQQPPPOOOONNNMMMMLLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDDDCCCBBBBAAA@@@????>>>>>===<<<;;;;::::9988888777766665544444333322221100000////...-----,,,+++++***))))((((('''''&&%%%%%$$$$#####""""!!!  !!!!""""#####$$$%%%%%&&&'''''((((())))**+++++,,,,-----..////00000111222333344444555666777788888999:::;;;;<<<<==>>>>>????@@@@AABBBBCCCCDDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^___``````__^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTTSSSRRRRQQQPPPOOOONNNMMMMLLLKKKJJJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBBAAA@@@????>>>>==<<<<;;;;;::::998888777776666554444333322222110000/////...---,,,,,++++***)))))((('''''&&&%%%%%$$$$$####"""!!!!!  !!!!!""""####$$$$$%%%%%&&'''''(((()))))**++++,,,,,----../////0000111222223334444555666777778888999:::;;;;;<<<<===>>>????@@@@AABBBBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJJKKKKLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^___`````__^^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQQPPPOOOONNNMMMMLLLKKKJJJJIIIIHHGGGGGFFFFEEEEDDCCCCBBBBAA@@@@?????>>>>==<<<<;;;;:::::998888777766665554444333322221110000////..-----,,,,+++++***)))(((((''''&&&&%%%%$$$$$#####""!!!!!  !!!!!"""#####$$$$$%%%%&&&''''((((())))**+++++,,,,-----...///0000111122223334444555566667778888999:::::;;;<<<<===>>>?????@@@@AAABBBCCCCDDDEEEFFFFGGGGGHHHIIIJJJJKKKKLLMMMMNNNNOOOOPPQQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^^___````__^^^^]]]]\\\[[[ZZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNNMMMMLLLKKKJJJJIIIIHHGGGGFFFFEEEEEDDCCCCBBBBAA@@@@????>>>>===<<<<;;;;::::998888777776666554444333332222110000/////..----,,,,,++++**)))))(((('''''&&&%%%%%$$$#####"""!!!!!  !!!!!""#####$$$$%%%%%&&'''''(((()))))***+++,,,,,----.../////000111222233333444555666677777888999::::;;;<<<<====>>>>???@@@@AAABBBCCCCDDDEEEEEFFFGGGGHHHIIIJJJJKKKKLLMMMMNNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZZZ[[\\\\]]]]^^^___````__^^^^]]]]\\\[[[ZZZZYYYXXXXWWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGFFFFEEEEDDCCCCBBBBBAA@@@@????>>>>==<<<<;;;;;::::998888777766666554444333322211110000////..-----,,,,++++***))))(((((''''&&%%%%%$$$$#####""""!!!!  !!!!"""#####$$$$%%%%%&&&'''((((())))****++++,,,-----...////000111122223333444555666667777888999::::;;;;;<<<===>>>>???@@@@AAABBBBBCCCDDDEEEEFFFGGGGHHHIIIJJJJKKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWWXXXXYYYYZZZZ[[\\\\]]]]^^^___````__^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHHGGGGFFFFEEEEDDCCCCBBBBAA@@@@@????>>>>==<<<<;;;;:::9999888877776665554444433332221110000/////..----,,,,,++++**)))))((((''''&&&%%%%$$$$$####""""!!!!!  !!!!!""""###$$$$$%%%%&&&&''''((()))))***++++,,,,,---.../////000011222233334444455666677778889999::::;;;;<<<===>>>>???@@@@@AAABBBBCCCDDDEEEEFFFGGGGHHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^___````__^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFFEEEEDDCCCCBBBBAA@@@@????>>>====<<<<;;;;:::9998888777776665554444333222221110000///...-----,,,,+++****))))(((('''''&&%%%%%$$$$#####""!!!!!  !!!!!"""#####$$$%%%%%&&&'''''(((()))****++++,,,,-----..////000011222223333444455666677777888899::::;;;;<<<====>>>>????@@@AAABBBBCCCDDDEEEEFFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^___``___^^^^]]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCCBBBBAA@@@@????>>>===<<<<;;;;;:::9998888777666655554444333222211100000///...----,,,,,+++***)))))(((('''&&&&%%%%$$$$$####""!!!!!  !!!!!"""####$$$$$%%%&&&&''''(((()))))**++++,,,,,----..////000001122223333444455566667777888899::::;;;;;<<<<==>>>>????@@@AAABBBBCCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]]^^^^__`___^^^^]]]\\\\[[[ZZZYYYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@@????>>>===<<<<;;;::::999988887776666555444333332222111000////....----,,,++++****))))((('''''&&&%%%%$$$$$###""""!!!!  !!!""""####$$$$$%%%%&&'''''(((())))***++++,,,,----...////000011222233333444455666677778888999::::;;;;<<<<==>>>>????@@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^^__`___^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>>>===<<<<;;;::::999888777776666555444333322221111000////...---,,,,,++++***)))))(((''''&&&&%%%%$$$#####"""!!!!!  !!!!!""#####$$$$%%%%&&&''''(((()))))**++++,,,,,----..////000011112223333444455666677777888899::::;;;;<<<<==>>>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^__`___^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEEDDDCCCCBBBAAA@@@@???>>>>===<<<;;;;;::::99988877776666554444433332222110000/////...---,,,,+++++***)))(((('''''&&&%%%$$$$$####""""!!!!  !!!!"""####$$$$$%%%%&&'''''(((())))**+++++,,,,----../////00001112223333444445556667777888899::::;;;;;<<<<==>>>>????@@@@AABBBBCCCCDDEEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^__`___^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBBAAA@@@@???>>>>===<<<;;;;::::999988877776666554444333322222110000////..-----,,,,++++**)))))((((''''&&%%%%%$$$$#####"""!!!  !!!!""#####$$$$%%%%%&&&'''(((()))))***+++,,,,-----...///0000111222223334444555666777788889999:::;;;;<<<<==>>>>????@@@@AABBBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^__`__^^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@?????>>>>===<<<;;;;::::998888777776666554444333322221100000////..----,,,,+++++**))))(((('''''&&%%%%$$$$$####""!!!!!  !!!!!"""###$$$$$%%%%&&&'''''((())))***+++++,,,----...///0000011122223334444555666777778888999:::;;;;<<<<==>>>>?????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^^____^^^]]]]\\\\[[ZZZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<<;;;;::::99888877776666554444433332222110000////...----,,,,++++**)))))((((''''&&%%%%%$$$$#####""!!!!  !!!!"""#####$$$%%%%%&&&''''((()))))***++++,,,----....////00011122223334444455566667778888999:::;;;;<<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^____^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;:::::99888877776666554444333322222110000////..----,,,,,++++**))))(((((''''&&%%%%$$$$$####""!!!!!  !!!!!"""####$$$$$%%%&&&''''((((()))***++++,,,,,---...////00011122222333344455566667778888999:::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^____^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTSSSRRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBBAAA@@@????>>>>==<<<<;;;;::::998888777776666554444333322211100000////..----,,,,+++****))))(((('''&&&&%%%%$$$$#####""!!!!  !!!"""#####$$$$%%%&&&&''''(((()))****++++,,,,---...////000001122223333444555666677777888999::::;;;<<<<===>>>????@@@@AABBBBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRRRSSTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^____^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQPPPOOOONNNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@?????>>>>==<<<<;;;;::::99888877776665555444433332221110000///...-----,,,,+++***))))((((('''&&&%%%%$$$$$###"""!!!!!  !!!!!""####$$$$$%%%%&&''''((((())))**++++,,,,-----..////00001122223333444555566667777888999::::;;;<<<<===>>>?????@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^____^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQPPPOOOONNNMMMMLLLKKKJJJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<<;;;;::::99888877776665554444333222221110000///...----,,,+++++***))))((('''''&&&%%%%$$$#####"""!!!!  !!!!""#####$$$$%%%%&&'''''(((())))**+++++,,,,----..////00001122222333344445566667777888999::::;;;<<<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJJKKKKLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^__^^^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQPPPOOOONNNMMMMLLLKKKJJJJIIIIHHGGGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9999888877776665554444333222211100000///...----,,,++++***)))))(((''''&&&%%%%%$$$####"""!!!!!  !!!!!""####$$$$%%%%%&&''''(((()))))**++++,,,,----..////000001122223333444455666677778889999::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGGHHHIIIJJJJKKKKLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^^_^^^^]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQPPPOOOONNNMMMMLLLKKKJJJJIIIIHHGGGGFFFFEEEEDDCCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::99988887776666655544443332222111000////...-----,,,++++***)))(((('''''&&&%%%$$$$#####"""!!!  !!!!""#####$$$$%%%%&&'''''(((())))**++++,,,,-----..////00001122223333444455666667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCCDDDEEEEFFFGGGGHHHIIIJJJJKKKKLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTTSSSRRRRQQQPPPOOOONNNMMMMLLLKKKJJJJIIIIHHGGGGFFFFEEEEDDCCCCBBBBAA@@@@@????>>>>==<<<<;;;;:::99988887776666555444333332222111000////...---,,,,+++++***)))((((''''&&%%%%%$$$$####""!!!!!  !!!!!"""###$$$$%%%%%&&&'''(((())))**+++++,,,,----..////00001122223333344445566667777888899::::;;;;<<<===>>>>???@@@@@AAABBBBCCCDDDEEEEFFFGGGGHHHIIIJJJJKKKKLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPPOOOONNNMMMMLLLKKKJJJJIIIIHHGGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>===<<<<<;;;;:::99988887776666555444333322221111000////...---,,,,++++**)))))((((''''&&%%%%$$$$$####""!!!!  !!!!"""###$$$$$%%%%&&&'''(((()))))***+++,,,,----..////00001111222333344445566667777888899::::;;;;<<<<<==>>>>????@@@AAABBBBCCCDDDEEEEFFFGGGGHHHIIIJJJJKKKKLLMMMMNNNNOOOOPPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>===<<<<;;;::::99998888777666655544433332222110000////....---,,,,++++**))))(((('''''&&%%%%$$$$####"""!!!!   !!!!""""####$$$%%%%&&&'''''((())))***+++,,,,----....///00001112223333444455666677778888999::::;;;;<<<<==>>>>????@@@AAABBBBCCCDDDEEEEFFFGGGGHHHIIIJJJJKKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>===<<<<;;;::::99988877776666655544433332222110000////..----,,,,,++++**))))((((''''&&%%%%%$$$$####""!!!!   !!!"""####$$$%%%%%&&&''''((())))***+++,,,,,----...///00001112223333444455666667777888899::::;;;;<<<<==>>>>????@@@AAABBBBCCCDDDEEEEFFFGGGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCCBBBBAA@@@@????>>>===<<<<;;;::::99988877776666554444333332222110000////..----,,,,++++**)))))((((''''&&%%%%$$$$#####""!!!!   !!!"""#####$$$$%%%&&&''''((()))))***++++,,,----...///00001112223333344445556667777888899::::;;;;<<<<==>>>>????@@@AAABBBBCCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@?????>>>===<<<<;;;::::99988877776666554444333322221100000////..----,,,,++++**))))(((('''''&&%%%%$$$$###"""!!!!!   !!!!!""####$$$$%%%&&&'''''(((()))***++++,,,----...///00000111222233344445556667777888899::::;;;;<<<<==>>>>?????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^^^^^]]]]\\\[[[ZZZZYYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>>===<<<;;;;;::::9998887777666655444433332222110000////..-----,,,,++++**))))(((('''&&&%%%%$$$$$###"""!!!!   !!!!""####$$$$$%%%%&&''''(((()))***++++,,,-----...////000111222233344445556667777888899::::;;;;;<<<<==>>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>>===<<<;;;;::::99888887777666655444433332222110000////..----,,,,+++****))))(((('''&&&%%%%$$$####""""!!!!   !!!!"""####$$$$%%%%&&''''(((()))****++++,,,,---...////00011122223334444555666777788888999:::;;;;<<<<==>>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>>===<<<;;;;::::99888877776666554444433332222110000////..----,,,,+++***))))((((('''&&&%%%%$$$####"""!!!   !!!!""####$$$$%%%%&&''''((((())))**++++,,,,---...////00011122223334444455566667778888999:::;;;;<<<<==>>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>>===<<<;;;;::::99888877776666554444333322211110000////..----,,,,+++***))))(((''''&&&%%%%%$$$####"""!!!   !!!!""####$$$$%%%%%&&''''(((())))**++++,,,,---...////00011112222333344455566667778888999:::;;;;<<<<==>>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCCCBBBAAA@@@@???>>>>===<<<;;;;::::9988887777666655444433332221110000///...-----,,,,+++***))))(((''''&&&%%%$$$$#####"""!!!  - - - - - - - - - - - - - - - - - - -  !!!!""#####$$$$%%%%&&''''(((())))**++++,,,,-----..////0000112222333344455566667778888999:::;;;;<<<<==>>>>????@@@@AABBBBCCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@?????>>>>===<<<;;;;::::9988887777666655444433332221110000///...----,,,++++****))))(((''''&&&%%%$$$$####""!!!!  - - - - - - - - - - - - - - - - - - - - - - - - - -  !!!!"""###$$$$%%%%&&''''(((())))***++++,,,,----..////0000112222333344455566667778888999:::;;;;<<<<==>>>>?????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;:::::9988887777666655444433332221110000///...----,,,++++***)))(((('''''&&&%%%$$$$####""!!!!  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  !!!!"""###$$$$%%%%&&'''''(((())))**++++,,,,----..////0000112222333344455566667778888999:::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;::::99888877776666655444433332221110000///...----,,,++++***)))((((''''&&%%%%$$$$$####""!!!!  - - - - - - - - - - - - - - - - - - - -  !!!!"""###$$$$$%%%%&&&'''(((())))**++++,,,,----..////00001122223333444555666667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;::::99888877776665554444333222211110000///...----,,,++++***)))((((''''&&%%%%$$$$####""!!!!!  - - - - - - - - - - - - - - -  !!!!!"""####$$$%%%%&&&'''(((())))**++++,,,,----..////00001112222333344445566667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^]]]\\\\[[[ZZZYYYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;::::998888777766655544443332222111000////...-----,,,++++***)))((((''''&&%%%%$$$$####""!!!!  - - - - - - - - - - - - - - -  !!!"""####$$$%%%%&&&'''(((())))**++++,,,,-----..////0000112222333344445566667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;::::998888777766655544443332222111000////...---,,,,++++**)))))((((''''&&%%%%$$$$####""!!!!  - - - - - -  - - - - - -  !!!"""####$$$%%%%&&&'''(((()))))***+++,,,,----..////0000112222333344445566667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;::::998888777766655544443332222111000////...---,,,,++++**))))((((''''&&%%%%%$$$$####""!!!!  - - - - - - -  - - - - - -  !!!"""####$$$%%%%%&&&''''((())))***+++,,,,----..////0000112222333344445566667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCCBBBBAAA@@@????>>>>==<<<<;;;;::::998888777766655544443332222111000////...---,,,,++++**))))((((''''&&%%%%$$$$###""""!!!!  - - - - -  - - - - -  !!!""""####$$$$%%%&&&''''((())))***+++,,,,----..////0000112222333344445566667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<<;;;;::::998888777766655544443332222111000////...---,,,,++++**))))((((''''&&%%%%$$$$###"""!!!!  - - - - -  - - - - -  !!!!""####$$$$%%%&&&''''((())))***+++,,,,----..////0000112222333344445566667777888999::::;;;<<<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::99988887776666655544443332222111000////...---,,,,++++**))))((((''''&&%%%%$$$$###"""!!!!  - - - - -  - - - - -  !!!!""####$$$$%%%&&&''''((())))***+++,,,,----..////00001122223333444455666667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000/////...---,,,,++++**))))((((''''&&%%%%$$$$###"""!!!!  - - -  - - - -  !!!!""####$$$$%%%&&&''''((())))***+++,,,,----../////0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++***))))((((''''&&%%%%$$$$###"""!!!!  - - - - -  - - - - -  !!!!""####$$$$%%%&&&''''((())))****++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$$$###"""!!!!  - - - - -  - - - - -  !!!!""####$$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - -  - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - - -  - - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - -  - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - - -  - - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - -  - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - -  - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - - -  - - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - -  - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - -  - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - -  - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - -  - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - -  - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - -  - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - -  - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - -  - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - -  - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - -  - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - -  - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - -  - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - -  - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - - -  - - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - -  - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - -  - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - - -  - - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - -  - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - - -  - - - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  - - - -  - - -  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$$$###"""!!!!  - - - - -  - - - - -  !!!!""####$$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++***))))((((''''&&%%%%$$$$###"""!!!!  - - - - -  - - - - -  !!!!""####$$$$%%%&&&''''((())))****++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000/////...---,,,,++++**))))((((''''&&%%%%$$$$###"""!!!!  - - -  - - - -  !!!!""####$$$$%%%&&&''''((())))***+++,,,,----../////0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::99988887776666655544443332222111000////...---,,,,++++**))))((((''''&&%%%%$$$$###"""!!!!  - - - - -  - - - - -  !!!!""####$$$$%%%&&&''''((())))***+++,,,,----..////00001122223333444455666667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<<;;;;::::998888777766655544443332222111000////...---,,,,++++**))))((((''''&&%%%%$$$$###"""!!!!  - - - - -  - - - - -  !!!!""####$$$$%%%&&&''''((())))***+++,,,,----..////0000112222333344445566667777888999::::;;;<<<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCCBBBBAAA@@@????>>>>==<<<<;;;;::::998888777766655544443332222111000////...---,,,,++++**))))((((''''&&%%%%$$$$###""""!!!!  - - - - -  - - - - -  !!!""""####$$$$%%%&&&''''((())))***+++,,,,----..////0000112222333344445566667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;::::998888777766655544443332222111000////...---,,,,++++**))))((((''''&&%%%%%$$$$####""!!!!  - - - - - - -  - - - - - -  !!!"""####$$$%%%%%&&&''''((())))***+++,,,,----..////0000112222333344445566667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;::::998888777766655544443332222111000////...---,,,,++++**)))))((((''''&&%%%%$$$$####""!!!!  - - - - - -  - - - - - -  !!!"""####$$$%%%%&&&'''(((()))))***+++,,,,----..////0000112222333344445566667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;::::998888777766655544443332222111000////...-----,,,++++***)))((((''''&&%%%%$$$$####""!!!!  - - - - - - - - - - - - - - -  !!!"""####$$$%%%%&&&'''(((())))**++++,,,,-----..////0000112222333344445566667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;::::99888877776665554444333222211110000///...----,,,++++***)))((((''''&&%%%%$$$$####""!!!!!  - - - - - - - - - - - - - - -  !!!!!"""####$$$%%%%&&&'''(((())))**++++,,,,----..////00001112222333344445566667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;::::99888877776666655444433332221110000///...----,,,++++***)))((((''''&&%%%%$$$$$####""!!!!  - - - - - - - - - - - - - - - - - - - -  !!!!"""###$$$$$%%%%&&&'''(((())))**++++,,,,----..////00001122223333444555666667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;:::::9988887777666655444433332221110000///...----,,,++++***)))(((('''''&&&%%%$$$$####""!!!!  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  !!!!"""###$$$$%%%%&&'''''(((())))**++++,,,,----..////0000112222333344455566667778888999:::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@?????>>>>===<<<;;;;::::9988887777666655444433332221110000///...----,,,++++****))))(((''''&&&%%%$$$$####""!!!!  - - - - - - - - - - - - - - - - - - - - - - - - - -  !!!!"""###$$$$%%%%&&''''(((())))***++++,,,,----..////0000112222333344455566667778888999:::;;;;<<<<==>>>>?????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCCCBBBAAA@@@@???>>>>===<<<;;;;::::9988887777666655444433332221110000///...-----,,,,+++***))))(((''''&&&%%%$$$$#####"""!!!  - - - - - - - - - - - - - - - - - - -  !!!!""#####$$$$%%%%&&''''(((())))**++++,,,,-----..////0000112222333344455566667778888999:::;;;;<<<<==>>>>????@@@@AABBBBCCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>>===<<<;;;;::::99888877776666554444333322211110000////..----,,,,+++***))))(((''''&&&%%%%%$$$####"""!!!   !!!!""####$$$$%%%%%&&''''(((())))**++++,,,,---...////00011112222333344455566667778888999:::;;;;<<<<==>>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>>===<<<;;;;::::99888877776666554444433332222110000////..----,,,,+++***))))((((('''&&&%%%%$$$####"""!!!   !!!!""####$$$$%%%%&&''''((((())))**++++,,,,---...////00011122223334444455566667778888999:::;;;;<<<<==>>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>>===<<<;;;;::::99888887777666655444433332222110000////..----,,,,+++****))))(((('''&&&%%%%$$$####""""!!!!   !!!!"""####$$$$%%%%&&''''(((()))****++++,,,,---...////00011122223334444555666777788888999:::;;;;<<<<==>>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>>===<<<;;;;;::::9998887777666655444433332222110000////..-----,,,,++++**))))(((('''&&&%%%%$$$$$###"""!!!!   !!!!""####$$$$$%%%%&&''''(((()))***++++,,,-----...////000111222233344445556667777888899::::;;;;;<<<<==>>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@?????>>>===<<<<;;;::::99988877776666554444333322221100000////..----,,,,++++**))))(((('''''&&%%%%$$$$###"""!!!!!   !!!!!""####$$$$%%%&&&'''''(((()))***++++,,,----...///00000111222233344445556667777888899::::;;;;<<<<==>>>>?????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^^^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCCBBBBAA@@@@????>>>===<<<<;;;::::99988877776666554444333332222110000////..----,,,,++++**)))))((((''''&&%%%%$$$$#####""!!!!   !!!"""#####$$$$%%%&&&''''((()))))***++++,,,----...///00001112223333344445556667777888899::::;;;;<<<<==>>>>????@@@AAABBBBCCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>===<<<<;;;::::99988877776666655544433332222110000////..----,,,,,++++**))))((((''''&&%%%%%$$$$####""!!!!   !!!"""####$$$%%%%%&&&''''((())))***+++,,,,,----...///00001112223333444455666667777888899::::;;;;<<<<==>>>>????@@@AAABBBBCCCDDDEEEEFFFGGGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>===<<<<;;;::::99998888777666655544433332222110000////....---,,,,++++**))))(((('''''&&%%%%$$$$####"""!!!!   !!!!""""####$$$%%%%&&&'''''((())))***+++,,,,----....///00001112223333444455666677778888999::::;;;;<<<<==>>>>????@@@AAABBBBCCCDDDEEEEFFFGGGGHHHIIIJJJJKKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPPOOOONNNMMMMLLLKKKJJJJIIIIHHGGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>===<<<<<;;;;:::99988887776666555444333322221111000////...---,,,,++++**)))))((((''''&&%%%%$$$$$####""!!!!  !!!!"""###$$$$$%%%%&&&'''(((()))))***+++,,,,----..////00001111222333344445566667777888899::::;;;;<<<<<==>>>>????@@@AAABBBBCCCDDDEEEEFFFGGGGHHHIIIJJJJKKKKLLMMMMNNNNOOOOPPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTTSSSRRRRQQQPPPOOOONNNMMMMLLLKKKJJJJIIIIHHGGGGFFFFEEEEDDCCCCBBBBAA@@@@@????>>>>==<<<<;;;;:::99988887776666555444333332222111000////...---,,,,+++++***)))((((''''&&%%%%%$$$$####""!!!!!  !!!!!"""###$$$$%%%%%&&&'''(((())))**+++++,,,,----..////00001122223333344445566667777888899::::;;;;<<<===>>>>???@@@@@AAABBBBCCCDDDEEEEFFFGGGGHHHIIIJJJJKKKKLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQPPPOOOONNNMMMMLLLKKKJJJJIIIIHHGGGGFFFFEEEEDDCCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::99988887776666655544443332222111000////...-----,,,++++***)))(((('''''&&&%%%$$$$#####"""!!!  !!!!""#####$$$$%%%%&&'''''(((())))**++++,,,,-----..////00001122223333444455666667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCCDDDEEEEFFFGGGGHHHIIIJJJJKKKKLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYYYZZZ[[[\\\\]]]^^^^_^^^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQPPPOOOONNNMMMMLLLKKKJJJJIIIIHHGGGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9999888877776665554444333222211100000///...----,,,++++***)))))(((''''&&&%%%%%$$$####"""!!!!!  !!!!!""####$$$$%%%%%&&''''(((()))))**++++,,,,----..////000001122223333444455666677778889999::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGGHHHIIIJJJJKKKKLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^^___^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQPPPOOOONNNMMMMLLLKKKJJJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<<;;;;::::99888877776665554444333222221110000///...----,,,+++++***))))((('''''&&&%%%%$$$#####"""!!!!  !!!!""#####$$$$%%%%&&'''''(((())))**+++++,,,,----..////00001122222333344445566667777888999::::;;;<<<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJJKKKKLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^____^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQPPPOOOONNNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@?????>>>>==<<<<;;;;::::99888877776665555444433332221110000///...-----,,,,+++***))))((((('''&&&%%%%$$$$$###"""!!!!!  !!!!!""####$$$$$%%%%&&''''((((())))**++++,,,,-----..////00001122223333444555566667777888999::::;;;<<<<===>>>?????@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^____^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTSSSRRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBBAAA@@@????>>>>==<<<<;;;;::::998888777776666554444333322211100000////..----,,,,+++****))))(((('''&&&&%%%%$$$$#####""!!!!  !!!"""#####$$$$%%%&&&&''''(((()))****++++,,,,---...////000001122223333444555666677777888999::::;;;<<<<===>>>????@@@@AABBBBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRRRSSTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^____^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;:::::99888877776666554444333322222110000////..----,,,,,++++**))))(((((''''&&%%%%$$$$$####""!!!!!  !!!!!"""####$$$$$%%%&&&''''((((()))***++++,,,,,---...////00011122222333344455566667778888999:::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^____^^^]]]]\\\\[[ZZZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<<;;;;::::99888877776666554444433332222110000////...----,,,,++++**)))))((((''''&&%%%%%$$$$#####""!!!!  !!!!"""#####$$$%%%%%&&&''''((()))))***++++,,,----....////00011122223334444455566667778888999:::;;;;<<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^____^^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@?????>>>>===<<<;;;;::::998888777776666554444333322221100000////..----,,,,+++++**))))(((('''''&&%%%%$$$$$####""!!!!!  !!!!!"""###$$$$$%%%%&&&'''''((())))***+++++,,,----...///0000011122223334444555666777778888999:::;;;;<<<<==>>>>?????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^^_____^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBBAAA@@@@???>>>>===<<<;;;;::::999988877776666554444333322222110000////..-----,,,,++++**)))))((((''''&&%%%%%$$$$#####"""!!!  !!!!""#####$$$$%%%%%&&&'''(((()))))***+++,,,,-----...///0000111222223334444555666777788889999:::;;;;<<<<==>>>>????@@@@AABBBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^__`___^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEEDDDCCCCBBBAAA@@@@???>>>>===<<<;;;;;::::99988877776666554444433332222110000/////...---,,,,+++++***)))(((('''''&&&%%%$$$$$####""""!!!!  !!!!"""####$$$$$%%%%&&'''''(((())))**+++++,,,,----../////00001112223333444445556667777888899::::;;;;;<<<<==>>>>????@@@@AABBBBCCCCDDEEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^__`___^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>>>===<<<<;;;::::999888777776666555444333322221111000////...---,,,,,++++***)))))(((''''&&&&%%%%$$$#####"""!!!!!  !!!!!""#####$$$$%%%%&&&''''(((()))))**++++,,,,,----..////000011112223333444455666677777888899::::;;;;<<<<==>>>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^__`___^^^^]]]\\\\[[[ZZZYYYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@@????>>>===<<<<;;;::::999988887776666555444333332222111000////....----,,,++++****))))((('''''&&&%%%%$$$$$###""""!!!!  !!!""""####$$$$$%%%%&&'''''(((())))***++++,,,,----...////000011222233333444455666677778888999::::;;;;<<<<==>>>>????@@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^^__`___^^^^]]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCCBBBBAA@@@@????>>>===<<<<;;;;;:::9998888777666655554444333222211100000///...----,,,,,+++***)))))(((('''&&&&%%%%$$$$$####""!!!!!  !!!!!"""####$$$$$%%%&&&&''''(((()))))**++++,,,,,----..////000001122223333444455566667777888899::::;;;;;<<<<==>>>>????@@@AAABBBBCCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]]^^^^__```__^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFFEEEEDDCCCCBBBBAA@@@@????>>>====<<<<;;;;:::9998888777776665554444333222221110000///...-----,,,,+++****))))(((('''''&&%%%%%$$$$#####""!!!!!  !!!!!"""#####$$$%%%%%&&&'''''(((()))****++++,,,,-----..////000011222223333444455666677777888899::::;;;;<<<====>>>>????@@@AAABBBBCCCDDDEEEEFFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^___````__^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHHGGGGFFFFEEEEDDCCCCBBBBAA@@@@@????>>>>==<<<<;;;;:::9999888877776665554444433332221110000/////..----,,,,,++++**)))))((((''''&&&%%%%$$$$$####""""!!!!!  !!!!!""""###$$$$$%%%%&&&&''''((()))))***++++,,,,,---.../////000011222233334444455666677778889999::::;;;;<<<===>>>>???@@@@@AAABBBBCCCDDDEEEEFFFGGGGHHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^___````__^^^^]]]]\\\[[[ZZZZYYYXXXXWWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGFFFFEEEEDDCCCCBBBBBAA@@@@????>>>>==<<<<;;;;;::::998888777766666554444333322211110000////..-----,,,,++++***))))(((((''''&&%%%%%$$$$#####""""!!!!  !!!!"""#####$$$$%%%%%&&&'''((((())))****++++,,,-----...////000111122223333444555666667777888999::::;;;;;<<<===>>>>???@@@@AAABBBBBCCCDDDEEEEFFFGGGGHHHIIIJJJJKKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWWXXXXYYYYZZZZ[[\\\\]]]]^^^___````__^^^^]]]]\\\[[[ZZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNNMMMMLLLKKKJJJJIIIIHHGGGGFFFFEEEEEDDCCCCBBBBAA@@@@????>>>>===<<<<;;;;::::998888777776666554444333332222110000/////..----,,,,,++++**)))))(((('''''&&&%%%%%$$$#####"""!!!!!  !!!!!""#####$$$$%%%%%&&'''''(((()))))***+++,,,,,----.../////000111222233333444555666677777888999::::;;;<<<<====>>>>???@@@@AAABBBCCCCDDDEEEEEFFFGGGGHHHIIIJJJJKKKKLLMMMMNNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZZZ[[\\\\]]]]^^^___````__^^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQQPPPOOOONNNMMMMLLLKKKJJJJIIIIHHGGGGGFFFFEEEEDDCCCCBBBBAA@@@@?????>>>>==<<<<;;;;:::::998888777766665554444333322221110000////..-----,,,,+++++***)))(((((''''&&&&%%%%$$$$$#####""!!!!!  !!!!!"""#####$$$$$%%%%&&&''''((((())))**+++++,,,,-----...///0000111122223334444555566667778888999:::::;;;<<<<===>>>?????@@@@AAABBBCCCCDDDEEEFFFFGGGGGHHHIIIJJJJKKKKLLMMMMNNNNOOOOPPQQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^^___`````__^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTTSSSRRRRQQQPPPOOOONNNMMMMLLLKKKJJJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBBAAA@@@????>>>>==<<<<;;;;;::::998888777776666554444333322222110000/////...---,,,,,++++***)))))((('''''&&&%%%%%$$$$$####"""!!!!!  !!!!!""""####$$$$$%%%%%&&'''''(((()))))**++++,,,,,----../////0000111222223334444555666777778888999:::;;;;;<<<<===>>>????@@@@AABBBBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJJKKKKLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^___``````__^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVVUUUUTTTSSSRRRRQQQPPPOOOONNNMMMMLLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDDDCCCBBBBAAA@@@????>>>>>===<<<;;;;::::9988888777766665544444333322221100000////...-----,,,+++++***))))((((('''''&&%%%%%$$$$#####""""!!!  !!!!""""#####$$$%%%%%&&&'''''((((())))**+++++,,,,-----..////00000111222333344444555666777788888999:::;;;;<<<<==>>>>>????@@@@AABBBBCCCCDDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^___``````__^^^^]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQPPPOOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFFEEEEDDDCCCBBBBAAA@@@@@???>>>>===<<<;;;;:::::999888777766666555444333322222111000/////...----,,,,,+++****))))(((((''''&&&%%%%$$$$$#####"""!!!!!  !!!!!""#####$$$$$%%%%&&&&''''((((()))****++++,,,,,----../////000011222223333444455666667777888899:::::;;;;<<<<==>>>>????@@@@@AABBBBCCCCDDEEEEFFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOOOPPQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYYYZZZ[[[\\\\]]]^^^^___``````__^^^^]]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIIHHHGGGGFFFEEEEDDDCCCBBBBBAAA@@@@???>>>>===<<<<<;;;::::99988888777666655544444333222211100000///...-----,,,,+++++**)))))(((('''''&&%%%%%$$$$$#####"""!!!!!  !!!!!""#####$$$$$%%%%%&&&'''''((()))))***+++++,,,,-----..////0000011222233334444455666677778888899::::;;;;<<<<<==>>>>????@@@@AABBBBBCCCCDDEEEEFFFFGGGGHHIIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]]^^^^___```````___^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKKJJJJIIIHHHGGGGFFFEEEEDDDDCCCCBBBAAA@@@@???>>>>>===<<<<;;;:::::9998888777666655554444333222221110000/////..----,,,,,++++***))))((((('''''&&&%%%%%$$$$$###""""!!!!!  !!!!!""""####$$$$$%%%%%&&'''''((((())))****++++,,,,,---.../////000011222223333444455566667777888899:::::;;;;<<<<==>>>>>????@@@@AABBBBCCCCDDDEEEEFFFFGGGGHHIIIIJJJJKKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^__`````````___^^^]]]]\\\\[[ZZZZYYYYXXXXWWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFFFEEEDDDCCCCBBBAAA@@@@@????>>>===<<<<;;;;;:::99988887777766655544443333322211100000////...----,,,,+++++**)))))(((((''''&&&&%%%%%$$$$#####"""!!!!!  !!!!!""""#####$$$$%%%%%&&&''''((((()))))***+++++,,,----....////0000011222233333444455666677777888899::::;;;;;<<<<==>>>>????@@@@@AABBBBCCCCDDEEEEFFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWWXXXXYYYZZZZ[[[\\\]]]]^^^^__````a````___^^^]]]]\\\\[[ZZZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPPOOOONNNNMMMMLLKKKKJJJJIIIIIHHGGGGFFFFEEEDDDCCCCBBBBBAA@@@@????>>>====<<<<;;;;:::99998888777766655554444333322222110000/////..-----,,,,+++++***)))))((('''''&&&&%%%%$$$$$#####""""!!!!!  !!!!!""""#####$$$$$%%%&&&&'''''(((()))))**+++++,,,,-----.../////0001112222233334445555666677778889999::::;;;;<<<====>>>>????@@@AAABBBBBCCCCDDEEEEFFFFGGGHHHIIIIIJJJJKKKLLLMMMMNNNOOOOPPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^__````a````___^^^]]]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSSRRRRQQQQPPOOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGFFFFEEEDDDDCCCCBBBBAA@@@@?????>>>>==<<<<;;;;;::::9988887777766665544443333322221110000////....---,,,,,++++****))))((((('''''&&%%%%%$$$$$#####""""!!!!!  !!!!!"""#####$$$$$%%%%%&&&'''''((((())))***++++,,,,,----....///00001111222233333444555666677777888999::::;;;;;<<<===>>>>?????@@@AAABBBBCCCDDDDEEEEFFFFGGGHHHIIIIJJJKKKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]]^^^^__````a`````___^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMMLLKKKKJJJJIIIIHHGGGGFFFFFEEEEDDCCCCBBBBAAA@@@@????>>>>==<<<<<;;;;::::9988888777766665554444333322222110000/////...-----,,,+++++***)))))((((('''''&&%%%%%$$$$$#####""""!!!!!  !!!!!""""#####$$$$$%%%%%&&&'''''((((()))))**+++++,,,,-----../////00001112222233344445555666677788888999::::;;;<<<<<===>>>>???@@@@AAAABBBBCCCDDDEEEEFFFFFGGGHHHIIIIJJJKKKKLLLMMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^__`````aaa```___^^^^]]]\\\\[[[ZZZYYYYXXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOOONNNNMMMMLLKKKKJJJJIIIIIHHGGGGFFFFEEEEDDCCCCCBBBBAA@@@@????>>>>>==<<<<;;;;:::::9988887777766665544444333322221111000/////...----,,,,,+++++**)))))(((((''''&&&&%%%%%$$$$$#####"""!!!!!  !!!!!""""#####$$$$$%%%%%&&&&'''((((()))))***+++++,,,,,----../////00001111222333344444555666777778888999:::::;;;<<<<===>>>>>???@@@@AAABBBCCCCCDDDEEEEFFFGGGGHHHIIIIIJJJKKKKLLLMMMNNNNOOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXXYYYYZZZZ[[\\\\]]]]^^^^__````aaaa```___^^^^]]]\\\\[[[ZZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRRQQQQPPPOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGFFFFEEEEEDDCCCCBBBBAA@@@@@????>>>>==<<<<<;;;;::::998888877776666555544433332222211100000///....----,,,,,++++***)))))(((('''''&&&&%%%%%$$$$$#####""""!!!!!  !!!!!""""#####$$$$$%%%%%&&&'''''(((()))))****++++,,,,,---....////000001122222333344445555666777788888999:::;;;;<<<<<===>>>????@@@@@AAABBBCCCCDDDEEEEEFFFGGGGHHHIIIJJJJKKKKKLLLMMMNNNNOOOOPPQQQQRRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZZ[[\\\\]]]]^^^^__````aaaa```___^^^^]]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTTSSSRRRQQQQPPPOOONNNNMMMMMLLLKKKJJJJIIIIHHGGGGGFFFFEEEEDDCCCCBBBBBAAA@@@????>>>>>===<<<;;;;:::::99988877777666655544444333222211110000/////..-----,,,,+++++****)))((((('''''&&&&%%%%%$$$$$#####""""!!!!!  !!!!!"""#####$$$$$%%%%%&&&&'''''((((())))****+++++,,,-----.../////0000111222233334444455666677777888899:::::;;;;<<<<==>>>>>????@@@@AABBBBBCCCCDDDEEEFFFFGGGGGHHHIIIJJJJKKKKLLMMMMMNNNNOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]]^^^^__````aaaa`````__^^^^]]]]\\\[[[ZZZZYYYXXXXWWWWVVVVUUUTTTTSSSRRRQQQQPPPOOOOONNNMMMMLLLKKKJJJJIIIIIHHHGGGFFFFEEEEDDDDCCCBBBBAAA@@@?????>>>>===<<<;;;;;::::999888887776666555544443333322211100000////...----,,,,,+++++***)))))((((('''''&&%%%%%%$$$$$#####""""!!!!!!  !!!!!!""""#####$$$$$%%%%%%&&&'''''((((()))))**+++++,,,,,----....////00000112222333334444555666677778888899::::;;;;;<<<<==>>>>?????@@@@AABBBBCCCCDDDDEEEFFFFGGGGHHIIIIIJJJJKKKKLLMMMMNNNNOOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWWXXXXYYYYZZZZ[[\\\\]]]]^^^___`````aaaaa````__^^^^]]]]\\\[[[ZZZZYYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQQPPPOOOONNNMMMMLLLKKKKKJJJIIIIHHHGGGFFFFFEEEEDDDCCCBBBBAAAA@@@@???>>>>====<<<<;;;:::::999888877777666555444443333222221100000////..-----,,,,,+++++***)))))((((('''''&&%%%%%%%$$$$$#####"""!!!!!!!  !!!!!!""""#####$$$$$%%%%%%&&&'''''((((()))))**+++++,,,,,-----...///000001112222233334444455666677777888899:::::;;;;<<<<===>>>>????@@@@AAABBBBCCCCDDEEEEFFFFFGGGGHHIIIIJJJJKKKKKLLMMMMNNNNOOOOPPQQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^___````aaaaaa````__^^^^]]]]\\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTTSSSRRRRQQQPPPOOOONNNMMMMMLLLKKKKJJJIIIIHHHGGGGGFFFEEEEDDDCCCCCBBBAAA@@@@?????>>>===<<<<;;;;;:::999888887777666665544443333322221110000/////...-----,,,,,+++****)))))((((('''''&&&%%%%%$$$$$$#####""""!!!!!!  !!!!!!""""#####$$$$$$%%%%%&&'''''((((()))))****++++,,,,,-----../////000011112222333334445556666677778888899::::;;;;;<<<<==>>>>?????@@@@AABBBBCCCCCDDEEEEFFFFGGGGGHHIIIIJJJJKKKKLLMMMMMNNNNOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\\]]]]^^^___````aaaaaa````__^^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVVUUUUTTTSSSRRRRQQQPPPOOOOONNNNMMMLLLKKKKJJJJJIIIHHHGGGGFFFEEEEEDDDCCCCBBBAAA@@@@@????>>>====<<<<;;;;:::::99888877777666655444443333222221100000////....-----,,,,+++++***))))(((((''''''&&&%%%%%%$$$$$#####"""""!!!!!!  !!!!!!"""""#####$$$$$%%%%%%%&&''''''((((())))****+++++,,,,-----...////000001112222233344444555666677777888999:::::;;;;<<<====>>>>????@@@@@AABBBBCCCCDDEEEEEFFFFGGGGHHIIIIJJJJJKKKKLLMMMMNNNNOOOOOPPQQQQRRRRSSTTTTUUUUVVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^^___````aaaaaaa````__^^^^]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVUUUUTTTSSSRRRRRQQQQPPOOOONNNNMMMLLLKKKKKJJJJIIIHHHGGGGGFFFFEEEDDDCCCCBBBBBAA@@@@?????>>>>==<<<<;;;;;::::99888887777666665544443333322221111000/////....----,,,,,+++++**)))))((((('''''&&&&%%%%%%$$$$$#######"""!!!!!!!  !!!!!!""""######$$$$$%%%%%%&&&&'''''((((()))))***+++++,,,,,---..../////000011112223333344445556666677788888999::::;;;;;<<<===>>>>?????@@@AAABBBBBCCCCDDEEEEFFFFGGGGGHHIIIIJJJJKKKKKLLMMMMNNNNOOOPPPQQQQRRRRRSSTTTTUUUUVVVWWWXXXXYYYYYZZZ[[[\\\\]]]^^^^___```aaaaaaaaa````__^^^^]]]]\\\\[[[ZZZZYYYYXXXXWWVVVVUUUUTTTTTSSRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJIIIIIHHGGGGFFFFEEEDDDDCCCCBBBBAA@@@@@????>>>>===<<<<;;;;:::::998888777776666555544433333222211110000/////..-----,,,,,+++++***)))))((((('''''&&&%%%%%%%$$$$$######""""!!!!!!  !!!!!!""""######$$$$$%%%%%%&&&&'''''((((()))))**+++++,,,,,-----.../////000011122223333344445555666777778888999:::::;;;<<<<====>>>>???@@@@@AAABBBBCCCDDDDEEEEFFFFGGGHHHIIIIIJJJJKKKLLLMMMMNNNNNOOOPPPQQQQRRRSSSTTTTTUUUUVVVWWWXXXXYYYZZZZ[[[[\\\\]]]^^^^___```aaaabaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYXXXXWWVVVVVUUUUTTTTSSRRRRQQQQPPPOOOONNNNMMMMLLKKKKJJJJJIIIIHHGGGGFFFFFEEEEDDCCCCBBBBBAA@@@@????>>>>>==<<<<;;;;;::::9988888777766666555444443332222211100000/////..-----,,,,,++++****)))))((((('''''&&&&%%%%%%$$$$$######"""""!!!!!!  !!!!!!"""""#######$$$$$%%%%%%&&&&'''''((((()))))***++++,,,,,-----.../////0000011222223333444445566666777788888999:::;;;;;<<<<===>>>>>???@@@@AAABBBBBCCCDDDEEEEFFFFFGGGHHHIIIIJJJJJKKKLLLMMMMNNNOOOOPPPPQQQQRRRSSSTTTTUUUVVVVVWWWXXXXYYYZZZZ[[[\\\]]]]]^^^^___```aaaabaaaa`````___^^^]]]]\\\\[[ZZZZYYYYXXXXXWWVVVVUUUUTTTTSSRRRRRQQQQPPOOOONNNNMMMMLLLKKKKJJJJIIIIHHHGGGGFFFFEEEEDDCCCCCBBBBAA@@@@@????>>>>====<<<;;;;:::::9998887777766665555444433333222111100000////....-----,,,+++++****)))))((((('''''&&&&%%%%%%$$$$$$#######"""!!!!!!!  !!!!!!""""######$$$$$$%%%%%%%&&&'''''((((()))))****+++++,,,,-----....///0000011112222333334444555666677777888899:::::;;;;<<<<====>>>????@@@@@AAABBBCCCCCDDDEEEEFFFGGGGHHHHIIIIJJJKKKKLLLLMMMMNNNOOOOPPPQQQRRRRRSSSTTTTUUUVVVVWWWXXXXXYYYZZZZ[[[\\\]]]]^^^^__`````aaaabbbaaa````___^^^]]]]\\\\[[ZZZZZYYYYXXXXWWVVVVUUUUTTTTTSSRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJJIIIIHHGGGGFFFFEEEEEDDCCCCBBBBBAAA@@@????>>>>>===<<<;;;;;::::9999888877777666555444443333322221110000/////....----,,,,,+++++***)))))((((('''''''&&%%%%%%$$$$$$$######""""!!!!!!!  !!!!!!!!""""######$$$$$$%%%%%%&&&''''''((((()))))****+++++,,,,,----.../////0000111122223333344444556666777778888999::::;;;;;<<<<==>>>>>????@@@@AABBBBBCCCCDDDEEEEEFFFGGGGHHHIIIJJJJJKKKKLLLMMMNNNNNOOOOPPPQQQRRRRSSSTTTTTUUUVVVVWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^__````aaaabbbbaaa````___^^^]]]]]\\\\[[[ZZZYYYYXXXXWWVVVVVUUUUTTTTSSRRRRQQQQPPPPOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGGFFFFEEEEDDCCCCCBBBBAAA@@@@@???>>>>====<<<<;;;:::::9998888877776666655444443333222221100000/////...-----,,,,,+++++****)))))(((((''''''&&&&%%%%%$$$$$$######"""""!!!!!!!!  !!!!!!!"""""#######$$$$$$%%%%%&&&&''''''((((()))))****+++++,,,,,-----../////0000011122222333444445556666677778888899:::::;;;;<<<<===>>>>????@@@@@AABBBBCCCCCDDDEEEFFFFGGGGGHHHIIIJJJJKKKKKLLLMMMNNNNOOOOPPPPQQQRRRRSSSTTTUUUUVVVVVWWWXXXYYYYZZZZ[[\\\\]]]]]^^^^__````aaaabbbbaaa````____^^^^]]]\\\\[[[ZZZYYYYXXXXXWWWVVVUUUUTTTTSSRRRRRQQQQPPPOOONNNNMMMMMLLLKKKJJJJIIIIIHHHGGGFFFFEEEEEDDDCCCBBBBBAAA@@@@???>>>>>===<<<<<;;;;:::999988887777766665554444333332222211100000/////..-----,,,,,+++++****)))))(((((''''''&&&&%%%%%%$$$$$$#######"""""!!!!!!!  !!!!!!!!"""""######$$$$$$%%%%%%%&&&'''''''((((()))))***+++++,,,,,-----.../////00000112222233333444455556666777778889999::::;;;;<<<<<==>>>>>????@@@@AABBBBBCCCCDDEEEEEFFFFGGGGHHIIIIIJJJJKKKKLLMMMMMNNNNOOOOPPQQQQRRRRRSSSTTTUUUUVVVVWWXXXXXYYYYZZZZ[[\\\\]]]]^^^^___````aaaabbbbbaaaa```___^^^^]]]\\\\[[[ZZZZZYYYXXXXWWWVVVUUUUTTTTTSSSRRRQQQQPPPOOOOONNNMMMMLLLKKKKKJJJIIIIHHHGGGGGFFFEEEEDDDCCCCCBBBAAA@@@@@????>>>====<<<<;;;;;::::99888887777666665544444333332222111100000////...-----,,,,,+++++****)))))(((((''''''&&&&%%%%%%$$$$$$$######"""""!!!!!!!!!  !!!!!!!!!"""""######$$$$$$%%%%%%&&&&''''''((((()))))****+++++,,,,,-----....////00000111222233333444445556666677788888999::::;;;;;<<<====>>>>????@@@@@AABBBBCCCCCDDEEEEFFFFGGGGGHHIIIIJJJJKKKKKLLMMMMNNNNOOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZZZ[[\\\\]]]]^^^^__````aaaabbbbbbaaaa```___^^^^]]]]]\\\[[[ZZZZYYYXXXXWWWVVVVVUUUTTTTSSSRRRQQQQQPPPOOOONNNMMMMMLLLKKKKJJJIIIIHHHHGGGGFFFEEEEEDDDCCCCBBBAAAA@@@@?????>>>>==<<<<<;;;;:::::9988887777766666555444443332222211110000/////....-----,,,,,+++++***)))))((((('''''''&&&%%%%%%%$$$$$$#######"""""!!!!!!!!!  !!!!!!!!!"""""########$$$$$$%%%%%%&&&&''''''((((()))))****+++++,,,,,-----..../////0001111222223333444445566666777778888999:::::;;;<<<<<===>>>>?????@@@AAAABBBBCCCCDDEEEEEFFFFGGGGHHHIIIIJJJJKKKKLLMMMMMNNNNOOOOPPQQQQQRRRRSSTTTTUUUUVVVVVWWXXXXYYYYZZZZ[[\\\\]]]]]^^^^__````aaaabbcbbbaaaa```____^^^^]]]]\\\[[[ZZZZYYYYYXXXWWWVVVVUUUTTTTSSSSRRRRQQQPPPOOOONNNNNMMMLLLKKKKJJJJJIIIHHHGGGGFFFFFEEEDDDCCCCCBBBBAA@@@@@????>>>>===<<<<;;;;;::::99998887777766665555444433333222221100000/////....-----,,,,,+++++****)))))(((((('''''&&&&&%%%%%%$$$$$$########"""""!!!!!!!!!  !!!!!!!!!"""""#######$$$$$$%%%%%%%&&&&&'''''(((((()))))****+++++,,,,,-----.../////000001112222233333444455566667777788889999:::;;;;;<<<<====>>>>???@@@@@AAABBBBCCCCCDDEEEEFFFFFGGGGHHIIIIJJJJJKKKKLLMMMMNNNNNOOOOPPQQQQRRRRSSSTTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^____````aaaabbcbbbaaaaa````__^^^^]]]]\\\[[[[ZZZZYYYYXXXWWWVVVVUUUUUTTTSSSRRRRQQQPPPPOOOONNNNMMMLLLLKKKKJJJJIIIHHHHGGGGFFFFEEEEEDDCCCCBBBBBAA@@@@?????>>>>==<<<<<;;;;:::::99988888777666665554444433333222221100000/////...------,,,,,+++++****)))))((((((''''''&&&&%%%%%%$$$$$$$$#######"""""!!!!!!!!!!  !!!!!!!!!!"""""########$$$$$$$%%%%%%&&&&''''''((((((()))))***+++++,,,,,-------../////00000111222223333344444556666677778888899:::::;;;;<<<<<===>>>?????@@@@AAABBBBBCCCDDDEEEEEFFFFGGGHHHHIIIIJJJJKKKLLLLMMMMNNNNOOOPPPPQQQQRRRRSSTTTTUUUUUVVVVWWXXXXYYYYZZZ[[[[\\\\]]]]^^^___````aaaaabbcccbbaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYXXXWWWWVVVVUUUUTTTSSSRRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJJIIIIHHGGGGFFFFFEEEEDDCCCCCBBBBAA@@@@@????>>>>>===<<<;;;;;::::9999888877777666665544444333332222111100000/////..-----,,,,,,+++++****)))))(((((('''''''&&&%%%%%%%%$$$$$$#########"""""!!!!!!!!!!  !!!!!!!!!!"""""########$$$$$$$%%%%%%%&&&&''''''(((((()))))****+++++,,,,,,-----.../////000001111222333334444455566666777778888999::::;;;;;<<<<==>>>>>????@@@@@AAABBBCCCCCDDDEEEEFFFFFGGGHHHIIIIJJJJJKKKLLLMMMMNNNNNOOOPPPQQQQRRRRRSSTTTTUUUUVVVWWWWXXXXYYYYZZZ[[[\\\\]]]]]^^^___````aaabbbccccbbaaaa````___^^^^]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVUUUUTTTTTSSRRRRQQQQPPOOOOONNNNMMMMLLKKKKKJJJJIIIIHHHGGGGFFFFEEEEEDDCCCCBBBBBAAA@@@?????>>>>===<<<<<;;;;;:::9998888877777666655544444333322222111100000/////..-----,,,,,,,+++++***)))))(((((((''''''&&&&&%%%%%%$$$$$$$$########"""""""!!!!!!!!!!  !!!!!!!!!!""""""#########$$$$$$$%%%%%%%&&&&&''''''(((((()))))****+++++,,,,,,-----.../////000001112222233334444455556666777778888899::::;;;;;<<<<<==>>>>?????@@@@AABBBBBCCCCDDDEEEEEFFFGGGGHHHHIIIIJJJKKKKKLLLMMMMNNNOOOOOPPPQQQQRRRSSSTTTTTUUUUVVVWWWXXXXYYYYYZZZ[[[\\\\]]]^^^^____````aaabbbccccbbaaaaa````__^^^^]]]]\\\\[[[ZZZZYYYYXXXXWWVVVVVUUUUTTTTSSRRRRQQQQQPPOOOONNNNMMMMMLLKKKKJJJJIIIIIHHGGGGFFFFFEEEEDDCCCCCBBBBAAA@@@@@???>>>>>===<<<<<;;;;:::::99888887777666665555444333332222211110000/////....-----,,,,,,+++++****))))))((((((''''''&&&&%%%%%%%%$$$$$$$#########""""""!!!!!!!!!!!!! !!!!!!!!!!!!"""""""########$$$$$$$$%%%%%%%&&&&''''''((((((())))))****+++++,,,,,,-----..../////00011112222233333444455556666677788888999:::::;;;;<<<<<==>>>>>????@@@@@AABBBBCCCCCDDDEEEFFFFFGGGGHHHIIIIIJJJKKKKLLLMMMMMNNNOOOOPPPQQQQQRRRSSSTTTTUUUVVVVVWWWXXXXYYYZZZZ[[[[\\\\]]]^^^^___```aaaaabbbcccccbbaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYXXXXXWWVVVVUUUUTTTTSSSRRRRQQQQPPOOOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGGFFFFEEEEEDDDCCCBBBBBAAA@@@@?????>>>====<<<<;;;;;::::999888877777666665554444433333222221100000/////....-----,,,,,,+++++****))))))(((((('''''''&&&&&%%%%%%$$$$$$$$$########""""""""!!!!!!!!!!!!!! !!!!!!!!!!!!!!"""""""#########$$$$$$$$$%%%%%%&&&&&''''''(((((()))))))***+++++,,,,,,,-----.../////0000011122222333334444455666667777788889999::::;;;;;<<<====>>>>?????@@@@AABBBBBCCCCDDEEEEEFFFFGGGGGHHHIIIJJJJKKKKKLLLMMMNNNNOOOOOPPPQQQRRRRSSSSTTTTUUUVVVVWWWXXXXXYYYZZZZ[[[\\\]]]]]^^^^___```aaaabbbccccccbbaaaa````____^^^]]]]\\\\[[ZZZZZYYYYXXXXWWVVVVUUUUUTTTTSSRRRRQQQQQPPPOOONNNNMMMMMLLLKKKJJJJIIIIIHHHGGGFFFFFEEEEDDDCCCCCBBBAAAA@@@@????>>>>>==<<<<<;;;;:::::998888877777666665554444433333222221100000/////....-----,,,,,,+++++****))))))((((((('''''''&&&&%%%%%%%$$$$$$$$$##########""""""""!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!"""""""##########$$$$$$$$$%%%%%%%%&&&''''''''(((((())))))****+++++,,,,,,-----..../////0000011122222333334444455666667777788888999:::::;;;<<<<<===>>>>>????@@@AAAABBBBCCCCCDDEEEEFFFFFGGGGHHIIIIIJJJJKKKKLLMMMMMNNNNOOOOPPQQQQQRRRRSSSTTTUUUUUVVVVWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^____```aaaabbbccccccbbaaaaa````___^^^]]]]\\\\\[[[ZZZYYYYXXXXWWWWVVVUUUUTTTTSSRRRRRQQQQPPPOOONNNNNMMMMLLLKKKKKJJJIIIIHHHGGGGGFFFEEEEEDDDCCCCBBBBBAA@@@@@????>>>>>==<<<<;;;;;:::::9998888877777666555544444333332222111100000/////...-----,,,,,,,+++++*****))))))((((((''''''&&&&&%%%%%%%%$$$$$$$$$##########""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"""""""""##########$$$$$$$$$%%%%%%%&&&&&''''''((((((())))))*****+++++,,,,,,-----..../////000001111222333334444455556666777778888899:::::;;;;;<<<<===>>>>>???@@@@@AAABBBBBCCCCDDEEEEEFFFFGGGGGHHIIIIJJJJKKKKKLLMMMMNNNNNOOOOPPQQQQRRRRRSSSTTTUUUUVVVVWWWWXXXYYYYZZZZ[[\\\\\]]]]^^^^__````aaaaabbbcccccccbbbaaa````___^^^^^]]]\\\\[[[ZZZYYYYYXXXXWWWVVVUUUUTTTTTSSSRRRQQQQPPPPOOOONNNMMMMMLLLKKKKJJJIIIIIHHHGGGGFFFFFEEEDDDCCCCCBBBBAAA@@@@?????>>>>====<<<;;;;;::::99998888877776666655544443333322222111100000/////....------,,,,,++++++****))))))((((((''''''''&&&&&%%%%%%%$$$$$$$$$$############""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""###########$$$$$$$$$$%%%%%%%%&&&&&'''''''(((((()))))))***+++++++,,,,,------..../////0000011122222333334444555566666777788888999::::;;;;;<<<<====>>>?????@@@@AAAABBBBCCCCCDDEEEEFFFFFGGGGHHIIIIIJJJJKKKKLLMMMMMNNNNOOOOPPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^^^__````aaaabbccccdccccbbbaaa`````___^^^^]]]\\\\[[[ZZZZZYYYXXXXWWWVVVVVUUUTTTTSSSRRRRRQQQPPPOOOONNNNNMMMLLLKKKKKJJJJIIIHHHHGGGGFFFFEEEEEDDCCCCBBBBBAA@@@@@????>>>>>===<<<<<;;;:::::99998888777776666655444443333322222111100000/////....------,,,,,++++++****))))))((((((((''''''&&&&&&%%%%%%%%$$$$$$$$$$############"""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""#############$$$$$$$$$$%%%%%%%&&&&&&'''''''((((((())))))****++++++,,,,,-------.../////00000111122222333334444455566666777778889999:::::;;;;<<<<<==>>>>>????@@@@@AAABBBBBCCCDDDEEEEEFFFFGGGHHHHIIIIJJJJKKKKKLLMMMMNNNNNOOOOPPQQQQRRRRRSSTTTTUUUUVVVVVWWXXXXYYYYZZZZZ[[\\\\]]]]^^^^__`````aaaabbccccdccccbbbbaaaa```___^^^^]]]]]\\\[[[ZZZZYYYXXXXXWWWVVVVUUUTTTTTSSSRRRRQQQPPPPOOOONNNNMMMLLLLKKKKJJJJIIIIIHHGGGGFFFFFEEEEDDDCCCCBBBBBAAA@@@?????>>>>====<<<<;;;;;:::::9988888777776666655544444333332222211100000/////....------,,,,,+++++++*****))))))((((((''''''''&&&&&%%%%%%%%%%$$$$$$$$$$#############"""""""""""""""""""""""""""""""""""""""""""""""""##############$$$$$$$$$$%%%%%%%%%%&&&&&'''''''((((((())))))*****++++++,,,,,------..../////00000111122222333334444455666667777788888999:::::;;;;;<<<<===>>>>?????@@@@AABBBBBCCCCDDDDEEEEFFFFFGGGHHHIIIIIJJJJKKKLLLLMMMMNNNNOOOPPPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXXYYYYZZZZ[[\\\\]]]]]^^^^__````aaaabbbccccdddcccbbbaaaa```___^^^^^]]]]\\\[[[ZZZZZYYYYXXXWWWVVVVUUUUUTTTSSSRRRRQQQQQPPOOOONNNNNMMMMLLKKKKKJJJJIIIIHHHGGGGFFFFEEEEEDDCCCCCBBBBAAA@@@@@?????>>>====<<<<;;;;;:::::99888887777766665555444443333322222111100000/////...-------,,,,,,++++++****))))))(((((((('''''''&&&&&%%%%%%%%%%$$$$$$$$$$$##################""""""""""""""""""""""""""""""""""#################$$$$$$$$$$$%%%%%%%%%%&&&&&''''''''((((((()))))))***+++++++,,,,,,------..../////00000111122222333334444455566667777788888999:::::;;;;;<<<====>>>>?????@@@@@AABBBBCCCCCDDDEEEEEFFFGGGGHHHHIIIIJJJKKKKKLLLMMMMNNNNNOOOPPPQQQQQRRRRSSTTTTUUUUUVVVVWWXXXXYYYYZZZZZ[[\\\\]]]]^^^^^__````aaaabbccccddddcccbbbaaaa`````__^^^^]]]]\\\\\[[ZZZZYYYYXXXWWWWVVVVUUUUTTTSSSSRRRRQQQQPPOOOOONNNNMMMMLLLKKKKJJJJIIIIIHHGGGGGFFFFEEEEDDDDCCCBBBBBAAA@@@@@????>>>>>==<<<<<;;;;;::::999988888777666665555444443333322222111100000/////....------,,,,,,++++++****))))))))(((((((''''''''&&&&&&%%%%%%%%%%$$$$$$$$$$$$###########################################################$$$$$$$$$$$$$%%%%%%%%%%&&&&&&'''''''(((((((()))))))****++++++,,,,,,,------..../////000001112222233333444445555666667777888889999:::;;;;;<<<<<===>>>>>????@@@@@AABBBBBCCCCDDDDEEEFFFFGGGGGHHHIIIIIJJJKKKKLLLLMMMMNNNOOOOOPPPQQQQRRRSSSSTTTTUUUUVVVWWWWXXXXYYYYZZZ[[[\\\\\]]]]^^^___`````aaaabbccccddddcccccbbaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVUUUUUTTTTSSRRRRQQQQQPPOOOONNNNNMMMMLLKKKKKJJJJIIIIHHHHGGGFFFFFEEEEDDDCCCCCBBBAAAA@@@@?????>>>>===<<<<<;;;;:::::999988887777766666555444443333322222111100000//////....-----,,,,,,+++++++*****))))))((((((('''''''''&&&&&&%%%%%%%%%%$$$$$$$$$$$$$$$#################################################$$$$$$$$$$$$$$$%%%%%%%%%%&&&&&&'''''''''(((((((())))))*****++++++,,,,,,-----....//////000001111222223333344444555566666777778888999:::::;;;;<<<<<====>>>>?????@@@AAAABBBBCCCCCDDEEEEFFFFFGGGGHHHHIIIJJJJKKKKKLLLMMMNNNNNOOOOPPPQQQQQRRRSSSTTTTUUUUUVVVWWWXXXXYYYYYZZZ[[[\\\\]]]]]^^^___````aaabbbcccccdddddccccbbaaaa````___^^^^]]]]\\\\[[[ZZZZYYYYXXXXWWVVVVVUUUUTTTTSSSRRRRQQQQPPOOOOONNNNMMMMLLLLKKKJJJJJIIIIHHHGGGGGFFFEEEEEDDDCCCCBBBBBAA@@@@@?????>>>>====<<<;;;;;:::::999888887777766666555544444333332222211100000///////...-------,,,,,,++++++****)))))))(((((((('''''''''&&&&&&%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$##################################$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%&&&&&&'''''''''((((((())))))))***+++++++,,,,,,------....//////000001111222223333344444555566666777778888899:::::;;;;;<<<<====>>>?????@@@@@AAABBBBBCCCCDDEEEEEFFFFGGGGGHHIIIIJJJJJKKKKLLLLMMMNNNNOOOOOPPPQQQRRRRSSSSTTTTUUUVVVVVWWWXXXXYYYZZZZ[[[[\\\\]]]^^^^____````aaabbbccccddddddccccbbaaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYXXXXXWWVVVVUUUUTTTTTSSRRRRQQQQQPPPOOONNNNNMMMMLLLKKKKKJJJIIIIHHHHGGGGFFFFFEEEDDDDCCCCBBBBBAA@@@@@????>>>>>===<<<<<;;;;;:::::998888877777666665555444443333322222111100000//////....------,,,,,,++++++*****))))))))(((((((''''''''''&&&&&&&%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%&&&&&&''''''''''(((((((()))))))*****++++++,,,,,,,------....//////000001111222223333344444555666667777788888999:::::;;;;;<<<<<==>>>>>????@@@@@AAABBBBBCCCDDDDEEEEFFFFFGGGGHHHIIIIJJJJKKKKKLLMMMMNNNNNOOOOPPQQQQQRRRRSSSTTTTTUUUVVVVWWWXXXXXYYYZZZZ[[[\\\]]]]]^^^^___```aaaaabbbccccddddddcccccbbaaaa````__^^^^^]]]]\\\\[[ZZZZZYYYYXXXXWWVVVVVUUUUTTTTSSRRRRRQQQQPPPOOOOONNNMMMMMLLLKKKKJJJJJIIIHHHGGGGGFFFFEEEEEDDCCCCCBBBBAAAA@@@?????>>>>>===<<<<<;;;;;::::9998888877777666665554444443333322222111100000//////....------,,,,,,++++++++*****)))))))((((((((''''''''''&&&&&&&%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%&&&&&&&&''''''''''((((((())))))))*****+++++++,,,,,,-------...///////0000011122222333334444444556666677777888889999::::;;;;;<<<<<==>>>>>?????@@@@AAAABBBCCCCCDDDEEEEEFFFFGGGGGHHIIIIJJJJJKKKKLLMMMMMNNNNOOOOOPPQQQQRRRRRSSSTTTUUUUVVVVVWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^^___```aaaabbbcccccdddddddccccbbaaaa`````___^^^]]]]\\\\\[[[ZZZYYYYXXXXXWWWVVVUUUUTTTTTSSSRRRQQQQQPPPOOOONNNNNMMMLLLKKKKKJJJJIIIIIHHGGGGFFFFFEEEEDDDCCCCBBBBBAAA@@@@@?????>>>====<<<<<;;;;:::::99998888877777666665544444433333222221111000000/////.....-------,,,,,,++++++*****)))))))))(((((((((''''''''''&&&&&&&%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%&&&&&&&&''''''''''((((((((())))))))*****+++++++,,,,,,------...../////000000111122222333334444445556666677777888889999:::::;;;<<<<<====>>>>?????@@@@@AABBBBBCCCCDDDDEEEEFFFFFGGGHHHIIIIIJJJJKKKKKLLMMMMNNNNNOOOOPPQQQQQRRRRSSTTTTTUUUUVVVVWWXXXXXYYYYZZZZ[[\\\\\]]]]^^^^__`````aaaabbbcccddddeddddccccbbbbaaa````___^^^^^]]]\\\\[[[ZZZYYYYYXXXXWWWVVVVVUUUTTTTSSSRRRRRQQQPPPOOOOONNNNMMMMMLLKKKKJJJJJIIIIHHHGGGGFFFFFEEEEDDCCCCCBBBBBAAA@@@@@????>>>>>===<<<<;;;;;:::::999988887777766666655444444433333222221110000000//////....------,,,,,,++++++++*****))))))))((((((((('''''''''''&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&'''''''''''((((((((()))))))))*****+++++++,,,,,,,------....//////00000011112222233333444444555666666777778888999:::::;;;;;<<<<====>>>>>????@@@@@AABBBBBCCCCCDDDEEEFFFFFGGGGHHHHIIIIJJJJJKKKLLLMMMMMNNNNOOOOOPPQQQQRRRRRSSTTTTUUUUVVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^^^__````aaaabbbbcccddddedddddccccbbbaaa`````___^^^^]]]\\\\[[[[ZZZZYYYXXXXXWWWVVVVUUUTTTTTSSSRRRRQQQQQPPOOOONNNNNMMMMLLKKKKKJJJJIIIIIHHGGGGGFFFFEEEEEDDDCCCCCBBBAAAA@@@@?????>>>>>==<<<<<;;;;;:::::999888887777766666655544444433333222221111000000//////....------,,,,,,,,+++++++*****)))))))))(((((((((''''''''''''&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&'''''''''''''((((((((())))))))*****++++++++,,,,,,,-------...///////00000011112222233333444444556666666777778888899:::::;;;;;<<<<<===>>>>>?????@@@AAAABBBBCCCCCDDEEEEEFFFFGGGGGHHHIIIIIJJJKKKKKLLLMMMMNNNNNOOOPPPQQQQQRRRRSSTTTTTUUUUVVVVWWXXXXXYYYYZZZZ[[[\\\\]]]]^^^^__`````aaaabbccccdddddeeedddccccbbbaaaaa```___^^^^]]]]]\\\[[[ZZZZYYYYYXXXWWWVVVVVUUUUTTTSSSRRRRRQQQQPPOOOOONNNNMMMMMLLKKKKJJJJJIIIIHHHHGGGFFFFFEEEEDDDDCCCCBBBBBAA@@@@@?????>>>>>===<<<<<;;;;;:::::99888887777766666555544444433333222221111100000//////.....-------,,,,,,+++++++++*****))))))))((((((((((''''''''''''''&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''''(((((((((()))))))))*****+++++++++,,,,,,------.....//////000001111122222333334444444555666667777788888999:::::;;;;;<<<<<==>>>>>?????@@@@@AAABBBBBCCCCDDDEEEEFFFFFGGGGHHHHIIIJJJJJKKKKLLLMMMMMNNNOOOOOPPPQQQQRRRRRSSTTTTUUUUVVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]]^^^^__````aaaaabbccccddddeeeedddcccccbbbaaaa```____^^^^]]]]\\\[[[[ZZZZYYYYXXXWWWWVVVVUUUUTTTTTSSRRRRQQQQQPPOOOONNNNNMMMMLLLLKKKJJJJIIIIIHHHGGGGGFFFEEEEEDDDCCCCCBBBBBAA@@@@@?????>>>>====<<<<<;;;;;::::99988888777776666655554444443333322222221110000000//////....------,,,,,,,++++++++******)))))))))((((((((((('''''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''(((((((((((())))))))*******+++++++,,,,,,,,------....//////00000011112222223333344444455556666677777888889999::::;;;;;<<<<<===>>>>?????@@@@@AAABBBBBCCCCCDDEEEEEFFFFGGGGGHHIIIIIJJJJKKKKLLLLMMMNNNNNOOOOPPPQQQQQRRRSSSTTTTTUUUUVVVWWWWXXXXYYYYZZZ[[[[\\\\]]]]^^^____````aaaabbcccccddddeeeeeddddcccbbbaaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVVUUUUTTTTSSRRRRRQQQQPPPPOOONNNNMMMMMLLLKKKKKJJJIIIIIHHHGGGGFFFFFEEEEEDDCCCCCBBBBAAAA@@@@@???>>>>>====<<<<;;;;;:::::99998888877777666665554444444333332222221111000000//////....-------,,,,,,,,+++++++*******))))))))))((((((((((((''''''''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''''((((((((((((())))))))))******++++++++,,,,,,,--------...///////00000011112222223333344444455556666677777888889999:::::;;;;;<<<====>>>>>????@@@@@AAAABBBCCCCCDDDEEEEEFFFFFGGGGHHIIIIIJJJJKKKKKLLMMMMMNNNNOOOOPPPPQQQRRRRRSSSTTTTUUUVVVVVWWWXXXXYYYYYZZZ[[[\\\\]]]]]^^^___````aaaaabbccccddddeeeeeeddddcccccbbaaaa````__^^^^^]]]]\\\\[[ZZZZZYYYYXXXXWWWVVVVUUUUTTTTTSSRRRRQQQQQPPPOOONNNNNMMMMLLLLKKKKJJJJJIIIHHHHGGGGFFFFFEEEEDDDCCCCBBBBBAAAA@@@@?????>>>>>==<<<<<;;;;;:::::99998888877777666665555444444333332222221111000000//////.....--------,,,,,,,++++++++******)))))))))))(((((((((((((''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((()))))))))))*******+++++++,,,,,,,,-------.....//////00000001112222222333334444445555666667777788888999:::::;;;;;<<<<<===>>>>>?????@@@@AAABBBBBCCCCDDDDEEEEFFFFFGGGHHHHIIIIJJJJJKKKKLLLMMMMNNNNNOOOOPPQQQQQRRRRSSSTTTTTUUUVVVVWWWWXXXXYYYZZZZZ[[[\\\\]]]^^^^^___````aaabbbcccccddddeeeeeedddddccccbbaaaa`````__^^^^]]]]\\\\\[[ZZZZYYYYYXXXXWWVVVVVUUUUTTTTSSSSRRRQQQQPPPPOOOONNNMMMMMLLLKKKKKJJJJIIIIIHHGGGGGFFFFEEEEEDDCCCCCBBBBBAAA@@@@@?????>>>>>==<<<<<;;;;;:::::9999888887777766666655544444433333322222111110000000//////.....------,,,,,,,,,+++++++++******)))))))))))((((((((((((((('''''''''''''''''''''''''''''''''''''''''''''''''''((((((((((((((())))))))))))******+++++++++,,,,,,,,-------.....//////000000111112222233333344444445566666677777888889999:::::;;;;;<<<<<===>>>>>?????@@@@@AABBBBBCCCCCDDDEEEEEFFFGGGGGHHHIIIIIJJJJKKKKKLLMMMMMNNNNOOOOPPPQQQQRRRRSSSSTTTUUUUVVVVVWWWXXXYYYYYZZZZ[[[\\\\\]]]^^^^___`````aaabbbccccdddddeeeeeeeddddccccbbbaaaa````__^^^^^]]]]\\\\[[ZZZZZYYYYXXXXWWWWVVVUUUUTTTTTSSSRRRQQQQQPPPOOOOONNNNMMMMMLLKKKKJJJJJIIIIHHHGGGGFFFFFEEEEEDDDCCCCCBBBBBAA@@@@@?????>>>>====<<<<<;;;;;:::::999888887777766666665554444433333332222221111000000//////.....--------,,,,,,,,+++++++++******)))))))))))))(((((((((((((((((((''''''''''''''''''''''''''''''''''''((((((((((((((((((())))))))))))******+++++++++,,,,,,,,,-------.....///////000000111122222233333344444555566666677777888889999:::::;;;;;<<<<<====>>>?????@@@@@AAABBBBBCCCCCDDEEEEEFFFFFGGGGHHHHIIIIJJJJJKKKLLLMMMMMNNNNOOOOOPPQQQQQRRRRSSTTTTTUUUUVVVVWWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^^___```aaaabbbbccccdddeeeefeeeedddddccccbbaaaa`````___^^^]]]]\\\\\[[[ZZZYYYYYXXXXWWWVVVVVUUUTTTTSSSSRRRRQQQPPPPOOOONNNNNMMMMLLKKKKKJJJJJIIIIHHGGGGGFFFFFEEEEDDDDCCCCCBBBBAAA@@@@@????>>>>>====<<<<<;;;;;:::::999988888777776666665555444443333332222221111000000////////.....-------,,,,,,,,,+++++++++*******))))))))))))))(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()))))))))))))********+++++++++,,,,,,,,--------.....///////0000000111222222233333344444555566666677777888889999:::::;;;;;<<<<<===>>>>>????@@@@@AAAABBBBCCCCCDDDEEEEFFFFFGGGGGHHHIIIJJJJJKKKKKLLLMMMMNNNNNOOOPPPPQQQQRRRRSSSTTTTUUUUVVVVVWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^__`````aaaabbbcccdddddeeeefeeeeeddddccccbbaaaaa````___^^^^^]]]\\\\[[[ZZZZZYYYXXXXWWWWVVVVUUUTTTTTSSSRRRRRQQQQPPOOOOONNNNMMMMMLLKKKKKJJJJIIIIIHHHGGGGGFFFEEEEEDDDDCCCCBBBBBAAAA@@@?????>>>>>====<<<<<;;;;;:::::99998888877777666666555544444333333222222111110000000///////.....--------,,,,,,,,++++++++++********))))))))))))))))((((((((((((((((((((((((((((((((((((((((((((((((((()))))))))))))))))*******++++++++++,,,,,,,,,-------.....////////0000001111122222233333334444455566666667777788888999:::::;;;;;<<<<<====>>>>>?????@@@@AAAABBBBBCCCDDDDEEEEEFFFFGGGGGHHIIIIIJJJJKKKKKLLLMMMMMNNNOOOOOPPPQQQQRRRRRSSTTTTTUUUUVVVVWWWXXXXYYYYZZZZZ[[\\\\]]]]^^^^^__````aaaaabbbcccddddeeeeefffeeeddddcccccbbbaaa````____^^^^]]]\\\\\[[[ZZZZYYYYYXXXWWWVVVVVUUUUTTTSSSSRRRRQQQQQPPOOOONNNNNMMMMLLLLKKKJJJJJIIIIHHHHGGGGFFFFFEEEEEDDCCCCCBBBBBAAA@@@@@?????>>>>>===<<<<<;;;;;:::::999988888777776666665555444444333333322222211110000000//////.....---------,,,,,,,,,+++++++++++*********)))))))))))))))))))(((((((((((((((((((((((((((((((((((()))))))))))))))))))********++++++++++++,,,,,,,,---------.....//////000000001111222222333333444444555566666677777888889999:::::;;;;;<<<<<====>>>>>?????@@@@@AABBBBBCCCCCDDDEEEEEFFFFFGGGGHHHIIIIJJJJJKKKKLLLLMMMNNNNNOOOOPPPQQQQQRRRSSSSTTTTUUUUVVVVVWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^___````aaaabbcccccddddeeeeffffeeeeedddccccbbbaaaaa```___^^^^]]]]]\\\[[[ZZZZZYYYYXXXWWWWVVVVUUUUUTTTTSSRRRRRQQQQPPOOOOONNNNMMMMMLLLKKKKKJJJIIIIIHHHGGGGGFFFFFEEEEEDDCCCCCBBBBBAAA@@@@@?????>>>>>====<<<<<;;;;;:::::99988888777776666666555444444433333322222211111000000////////.....---------,,,,,,,,,,+++++++++++**********))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))**********+++++++++++,,,,,,,,,,---------.....///////000000111112222222333333444444555566666677777888889999:::::;;;;;<<<<<====>>>>>?????@@@@@AABBBBBCCCCCDDDEEEEEFFFFFGGGGGHHIIIIIJJJJKKKKKLLMMMMMNNNNOOOOOPPPQQQRRRRRSSSTTTTUUUUUVVVWWWWXXXXYYYYZZZZZ[[\\\\]]]]]^^^^__````aaaaabbccccddddeeeeefffffeeeedddcccccbbbaaaa```____^^^^]]]]\\\\\[[ZZZZYYYYYXXXXWWVVVVVUUUUTTTTSSSRRRRQQQQQPPPOOOOONNNMMMMMLLLKKKKKJJJJIIIIIHHGGGGGFFFFFEEEEDDDDCCCCCBBBAAAA@@@@@?????>>>>>===<<<<<<;;;;;:::::9999888887777776666655554444443333332222221111100000000///////.....---------,,,,,,,,,,+++++++++++++***********))))))))))))))))))))))))))))))))))))))))))))))))))))))***********++++++++++++,,,,,,,,,,---------.....////////0000000111112222223333333444444555566666777777888889999:::::;;;;;<<<<<<==>>>>>?????@@@@@AAAABBBBCCCCCDDDDEEEFFFFFGGGGGHHHIIIIIJJJJKKKKKLLMMMMMNNNNOOOOOPPQQQQQRRRRSSSSTTTTUUUVVVVVWWWXXXXYYYYYZZZ[[[\\\\\]]]]^^^____````aaaabbcccccddddeeeeffgfffeeeedddddcccbbbaaaaa````__^^^^]]]]]\\\\[[ZZZZZYYYYXXXXXWWVVVVUUUUUTTTTSSRRRRRQQQQPPPPOOOONNNNNMMMLLLLKKKKJJJJJIIIIHHHGGGGGFFFFEEEEEDDDDCCCCBBBBBAAA@@@@@?????>>>>>===<<<<<;;;;;;:::::9999888887777776666655555444444333333322222211111000000/////////.....----------,,,,,,,,,,++++++++++++++***************))))))))))))))))))))))))))))))))))))***************++++++++++++++,,,,,,,,,,----------.....////////0000000111112222223333334444445555566666777777788888999:::::;;;;;;;<<<<<==>>>>>?????@@@@@AAAABBBBBCCCCDDDEEEEEFFFFGGGGGHHHHIIIIJJJJJKKKLLLLMMMMNNNNNOOOOPPPQQQQRRRRRSSSTTTUUUUUVVVVWWWXXXXXYYYZZZZZ[[[\\\\]]]]]^^^___````aaaaabbccccdddddeeeeffgffffeeeeddddcccbbbbaaaa````___^^^^]]]]\\\\\[[ZZZZYYYYYXXXXWWVVVVVUUUUTTTTTSSSRRRQQQQQPPPOOOOONNNNMMMMMLLKKKKKJJJJIIIIIHHHHGGGFFFFFEEEEEDDDCCCCCBBBBBAAAA@@@@@???>>>>>>>==<<<<<;;;;;;:::::999988888777777666666655544444443333332222221111100000000////////.....----------,,,,,,,,,,,,,+++++++++++++++******************************************************+++++++++++++++,,,,,,,,,,,,----------...../////////00000001111122222223333334444445555666666777777888889999:::::;;;;;;<<<<<===>>>>>>????@@@@@AAAABBBBBCCCCCDDEEEEEFFFFFGGGGHHHHIIIIIJJJKKKKKLLLMMMMMNNNNOOOOOPPQQQQQRRRRSSTTTTTUUUUVVVVVWWWXXXYYYYYZZZZ[[[\\\\\]]]^^^^____````aaabbbbccccddddeeeffffgggffeeeedddddccccbbaaaa`````__^^^^]]]]]\\\\[[ZZZZZYYYYXXXXXWWWVVVUUUUUTTTTSSSSRRRRQQQQQPPOOOONNNNNMMMMMLLKKKKKJJJJIIIIIHHHGGGGGFFFFFEEEEEDDCCCCCBBBBBAAA@@@@@?????>>>>>===<<<<<;;;;;;;:::::999888887777777666666555544444433333332222222111110000000/////////......----------,,,,,,,,,,,,,++++++++++++++++++***************************************+++++++++++++++++++,,,,,,,,,,,,----------.......////////0000000011111222222333333334444445555666666777777888889999:::::;;;;;;<<<<<====>>>>>?????@@@@@AABBBBBCCCCCDDDEEEEEFFFFFGGGGGHHIIIIIJJJJKKKKKLLLMMMMMNNNNNOOOPPPQQQQQRRRRSSSTTTTUUUUUVVVVWWXXXXXYYYYZZZZZ[[[\\\]]]]]^^^^___`````aaabbbccccdddddeeefffggggfffeeeeddddccccbbbaaaa````____^^^]]]]\\\\\[[[ZZZYYYYYXXXXWWWVVVVVUUUTTTTTSSSRRRRRQQQQPPOOOOONNNNNMMMMLLLLKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEDDDCCCCCBBBBBAAA@@@@@?????>>>>>====<<<<<;;;;;;:::::99998888887777766666655555444444333333322222221111100000000////////.......-----------,,,,,,,,,,,,,,++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,-----------....../////////00000001111122222222333333444444555556666666777778888889999:::::;;;;;;<<<<<====>>>>>?????@@@@@AABBBBBCCCCCDDDDEEEEFFFFFGGGGGHHIIIIIJJJJJKKKKLLLLMMMNNNNNOOOOOPPPQQQQRRRRRSSTTTTTUUUUVVVVVWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^____```aaaabbbbccccdddeeeeffffgggggffeeeedddddccccbbaaaa`````___^^^]]]]]\\\\[[[ZZZZZYYYXXXXXWWWVVVVUUUUUTTTSSSSRRRRQQQQQPPOOOOONNNNMMMMMLLLKKKKKJJJJJIIIHHHHGGGGGFFFFEEEEEDDDDCCCCCBBBAAAA@@@@@?????>>>>>====<<<<<;;;;;;:::::999988888877777766666665554444444333333322222211111110000000/////////.......------------,,,,,,,,,,,,,,,,++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,-----------........////////000000001111112222223333333344444455556666667777778888888999:::::;;;;;;;<<<<<===>>>>>?????@@@@@AAAABBBBCCCCCDDDDEEEEEFFFGGGGGHHHHIIIIJJJJJKKKKKLLMMMMMNNNNOOOOOPPPQQQQQRRRSSSSTTTTUUUUUVVVVWWXXXXXYYYYZZZZZ[[\\\\]]]]]^^^^__`````aaaabbbcccdddddeeeefffggggggffeeeeeddddccccbbbbaaa````____^^^^]]]\\\\\[[[ZZZZYYYYYXXXWWWWVVVVUUUUTTTTTSSRRRRRQQQQPPPPOOONNNNNMMMMMLLLKKKKKJJJJIIIIIHHHGGGGFFFFFEEEEEDDDCCCCCBBBBBAAA@@@@@?????>>>>>====<<<<<;;;;;;:::::99998888887777777666666555544444443333332222222211111000000000//////////......--------------,,,,,,,,,,,,,,,,,,+++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,--------------......//////////0000000001111122222223333334444444455556666667777778888889999:::::;;;;;;<<<<<====>>>>>?????@@@@@AAAABBBBBCCCCCDDEEEEEFFFFFGGGGHHHHIIIIIJJJJKKKKKLLMMMMMNNNNNOOOOPPPPQQQRRRRRSSSTTTTTUUUUVVVWWWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^___````aaaabbbbcccddddeeeeefffgggggggfffeeedddddccccbbbaaa`````___^^^^]]]]]\\\[[[[ZZZZYYYYXXXXXWWVVVVVUUUUTTTTTSSRRRRQQQQQPPPOOOOONNNNNMMMLLLLKKKKJJJJJIIIIIHHGGGGGFFFFFEEEEEDDDCCCCCBBBBBAAAA@@@@@?????>>>>>===<<<<<<<;;;;;:::::99999888887777776666665555544444433333333222222211111000000000//////////........---------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------------.......//////////000000000111112222222233333334444445555566666667777778888899999:::::;;;;;<<<<<<====>>>>>?????@@@@@AAAABBBBBCCCCCDDEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKLLLLMMMMNNNNNOOOOOPPQQQQQRRRRSSSTTTTTUUUVVVVVWWWXXXXXYYYYZZZ[[[[\\\\]]]]]^^^^__`````aaaabbccccdddddeeeeffgggggggggfffeeeeedddccccbbbbaaaa```____^^^^]]]]\\\\\[[ZZZZYYYYYXXXXWWWVVVVUUUUUTTTTSSSSRRRQQQQQPPPOOOOONNNNMMMMMLLKKKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEEDDCCCCCBBBBBAAAA@@@@@?????>>>>>====<<<<<<;;;;;::::::9999888888777777666666655544444444333333322222222111110000000000//////////.........----------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----------------.........//////////000000000011111222222233333333444444455556666667777778888888999:::::::;;;;;<<<<<<====>>>>>?????@@@@@AAABBBBBCCCCCDDDEEEEEFFFFFGGGGGHHIIIIIJJJJJKKKKKLLLMMMMMNNNNOOOOOPPQQQQQRRRRSSSSTTTUUUUUVVVVWWWWXXXXYYYYYZZZ[[[\\\\\]]]]^^^____````aaaabbbccccddddeeeeeffgggghgggggfffeeeedddddcccbbbaaaa`````__^^^^^]]]]\\\\[[[ZZZZYYYYYXXXXWWVVVVVUUUUTTTTTSSSRRRRRQQQPPPPOOOONNNNNMMMMMLLKKKKKJJJJJIIIIHHHHGGGGGFFFFEEEEEDDDCCCCCBBBBBAAAA@@@@@?????>>>>>====<<<<<<;;;;;::::::99998888887777777666666555554444443333333322222222111111100000000////////////........--------------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------------------.........///////////00000000011111122222222233333334444444555556666667777778888889999::::::;;;;;<<<<<<<===>>>>>?????@@@@@AAAABBBBBCCCCCDDDDEEEEEFFFFGGGGGHHHIIIIJJJJJKKKKKLLLMMMMMNNNNNOOOPPPPQQQQRRRRRSSTTTTTUUUUVVVVVWWWXXXYYYYYZZZZ[[[[\\\\]]]^^^^^___`````aaaabbccccdddddeeeeffggggghhhgggfffeeeeeddddcccbbbbaaaa````___^^^^]]]]\\\\\[[ZZZZZYYYYXXXXXWWWVVVUUUUUTTTTSSSSRRRRQQQQQPPOOOOONNNNNMMMMLLLLKKKKKJJJIIIIIHHHHGGGGFFFFFEEEEEDDDDCCCCCBBBBBAAA@@@@@?????>>>>>====<<<<<<;;;;;:::::::9998888888777777666666655554444444433333332222222221111110000000000///////////..........---------------------------------------------------------------------..........///////////00000000001111111222222223333333344444445555666666667777778888889999::::::;;;;;<<<<<<====>>>>>?????@@@@@AAAABBBBBCCCCCDDDDEEEEEFFFFFGGGHHHHIIIIIJJJJKKKKKLLLLMMMNNNNNOOOOOPPPQQQQQRRRRSSSTTTTUUUUUVVVVWWXXXXXYYYYZZZZZ[[[\\\\\]]]^^^^____````aaabbbbccccddddeeeeeffgggghhhhgggggffeeeedddddccccbbaaaaa````__^^^^^]]]]\\\\[[[[ZZZYYYYYXXXXWWWVVVVVUUUUUTTTSSSRRRRRQQQQQPPOOOOONNNNMMMMMLLLLKKKKJJJJJIIIIIHHGGGGGFFFFFEEEEEDDDDCCCCCBBBBBAAAA@@@@@?????>>>>>===<<<<<<<;;;;;;:::::9999988888877777766666665555544444443333333322222222111111100000000000////////////............--------------------------------------------------------.........../////////////0000000000011111122222222233333334444444455555666666777777888888899999:::::;;;;;;<<<<<<====>>>>>?????@@@@@AAAABBBBBCCCCCDDDEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKKLLLMMMMMNNNNOOOOOPPPQQQQQRRRRRSSTTTTUUUUUVVVVVWWXXXXYYYYYZZZZ[[[[\\\]]]]^^^^^___```aaaaabbbccccdddddeeefffggggghhhhhggggffeeeeeddddccccbbbaaaa````____^^^]]]]]\\\\[[[ZZZZZYYYXXXXXWWWVVVVVUUUUTTTTTSSRRRRRQQQQPPPPOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHGGGGGFFFFFEEEEEDDDDCCCCCBBBBBAAAA@@@@@?????>>>>>>====<<<<<;;;;;;::::::999988888877777776666666555554444444433333332222222221111111000000000000/////////////...............---------------------------------------...............//////////////00000000000111111112222222233333333444444455555666666667777778888889999::::::;;;;;;;<<<<<===>>>>>>>?????@@@@@AAABBBBBCCCCCDDDDEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKKKLLMMMMMNNNNNOOOOPPPPQQQRRRRRSSSTTTTTUUUUVVVVVWWXXXXXYYYYZZZZZ[[\\\\]]]]]^^^^____```aaaabbbbccccdddeeeeefffgggghhhhhhgggggffeeeedddddccccbbaaaaa````___^^^^^]]]\\\\\[[[ZZZZYYYYYXXXWWWWVVVVUUUUUTTTTSSSRRRRQQQQQPPPOOOOONNNNNMMMMMLLKKKKKJJJJJIIIIHHHHGGGGGFFFFFEEEEEDDDCCCCCBBBBBAAAA@@@@@?????>>>>>>====<<<<<;;;;;;:::::::9998888888777777766666655555444444444333333332222222222111111000000000000/////////////////........................................................////////////////00000000000001111112222222222333333344444444455555666666777777778888889999::::::;;;;;;<<<<<====>>>>>>?????@@@@@AAAABBBBBCCCCCDDDDEEEEEFFFFFGGGGGHHHHIIIJJJJJKKKKKLLLMMMMMNNNNNOOOOOPPQQQQQRRRRSSSSTTTTUUUUUVVVWWWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^^__````aaaaabbbcccdddddeeeefffggggghhhhhhhggggffeeeeeddddccccbbbbaaa`````___^^^^]]]]]\\\[[[ZZZZZYYYYXXXXXWWVVVVVUUUUTTTTTSSRRRRRQQQQQPPPOOOOONNNNNMMMMLLLKKKKKJJJJIIIIIHHHHGGGGGFFFFFEEEEEDDCCCCCCCBBBBBAAA@@@@@?????>>>>>>>===<<<<<;;;;;;;::::::99999888888777777666666665555544444443333333332222222222111111110000000000000////////////////////.......................................////////////////////000000000000001111111222222222233333333344444444555556666666777777888888899999::::::;;;;;;<<<<<====>>>>>>?????@@@@@AAAABBBBBCCCCCCDDDEEEEEFFFFFGGGGGHHHIIIIIJJJJKKKKKLLLLMMMMNNNNNOOOOOPPQQQQQRRRRRSSSTTTTTUUUVVVVVWWWXXXXXYYYYZZZZZ[[\\\\]]]]]^^^^__`````aaaabbbbcccddddeeeeefffggghhhhhhhhhgggggfffeeedddddccccbbbaaaaa```___^^^^^]]]]\\\\\[[ZZZZZYYYYXXXXXWWVVVVVUUUUTTTTTSSSRRRRRQQQPPPPOOOOONNNNMMMMMLLLLKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEDDDCCCCCCBBBBBAAAA@@@@@?????>>>>>>====<<<<<<;;;;;;::::::99998888887777777766666665555544444444333333333322222222221111111000000000000000/////////////////////////////////////////////////////////////////////00000000000000011111111222222222233333333334444444555556666666677777778888889999::::::;;;;;;;<<<<<<====>>>>>>?????@@@@@AAAABBBBBCCCCCCDDEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKLLLLMMMMMNNNOOOOOPPPPQQQQRRRRRSSTTTTTUUUUVVVVVWWWXXXXXYYYZZZZZ[[[\\\\\]]]]^^^^^__````aaaaabbccccdddddeeeeffggggghhhhihhhhhggggfffeeeeedddcccccbbbaaaa`````__^^^^]]]]]\\\\[[[ZZZZYYYYYXXXXWWWWVVVUUUUUTTTTSSSSRRRRQQQQQPPPOOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEEDDDCCCCCCBBBBBAAAA@@@@@?????>>>>>>====<<<<<<;;;;;;:::::::9998888888877777776666666655555444444444333333332222222222221111111100000000000000000////////////////////////////////////////////////////////0000000000000000111111111222222222223333333334444444445555566666667777777788888889999::::::;;;;;;<<<<<<<===>>>>>>>?????@@@@@AAABBBBBCCCCCCCDDEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLMMMMMNNNNNOOOOPPPPQQQQQRRRRSSSTTTTUUUUUVVVVWWWWXXXYYYYYZZZZ[[[[\\\\]]]]]^^^___`````aaaabbcccccddddeeeeeffgggghhhhhiiihhhgggggfffeeeedddddcccbbbaaaaa````__^^^^^]]]]\\\\\[[ZZZZZYYYYXXXXXWWWVVVVVUUUTTTTTSSSRRRRRQQQQQPPOOOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHGGGGGFFFFFEEEEEEEDDCCCCCCBBBBBAAAA@@@@@??????>>>>>====<<<<<<;;;;;;;::::::9999988888877777777666666655555544444444433333333332222222222211111111100000000000000000000/////////////////////////////////////////00000000000000000000111111111222222222223333333333444444444555555666666667777777888888899999::::::;;;;;;<<<<<<====>>>>>??????@@@@@AAAABBBBBCCCCCCDDDEEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKKKLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSTTTTTUUUUVVVVVWWXXXXXYYYYZZZZZ[[[\\\\\]]]^^^^^___````aaaaabbccccdddddeeeeffggggghhhhiiiihhhhhgggfffeeeeeddddcccccbbaaaa`````__^^^^^]]]]\\\\\[[[ZZZYYYYYXXXXWWWWVVVVUUUUUTTTTTSSRRRRRQQQQQPPPOOOOONNNNNMMMLLLLKKKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEEEDDCCCCCCCBBBBBAAA@@@@@???????>>>>>=====<<<<<<;;;;;;::::::999988888888777777766666666555555444444444333333333322222222222211111111111000000000000000000000000000000000000000000000000000000000000000000000111111111112222222222222333333333344444444455555566666667777777788888889999::::::;;;;;;;<<<<<<=====>>>>>??????@@@@@AAAABBBBBCCCCCCDDDEEEEEEFFFFFGGGGGHHIIIIIJJJJJKKKKKLLLLMMMMNNNNNOOOOOPPQQQQQRRRRRSSSTTTTTUUUUUVVVVWWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^^___`````aaabbbcccccddddeeeeeffgggghhhhhiiiiihhhhgggggffeeeedddddccccbbaaaaa````____^^^]]]]]\\\\[[[ZZZZZYYYYYXXXWWWWVVVVUUUUUTTTTSSSRRRRRQQQQPPPPOOOOONNNNMMMMMLLLKKKKKJJJJJIIIIHHHHGGGGGFFFFFEEEEEDDDDCCCCCCBBBBBAAAA@@@@@??????>>>>>>====<<<<<<;;;;;;:::::::999998888888777777776666666555555444444444433333333332222222222222211111111111110000000000000000000000000000000000000000000000000000000011111111111122222222222222333333333344444444445555556666666677777778888888899999::::::;;;;;;<<<<<<<===>>>>>>>??????@@@@@AAAABBBBBCCCCCCDDDDEEEEEFFFFFGGGGGHHHIIIIJJJJJKKKKKLLLLMMMMMNNNNOOOOOPPPQQQQRRRRRSSSSTTTTUUUUUVVVWWWWXXXXYYYYYZZZZZ[[\\\\]]]]]^^^^____```aaaaabbbccccdddddeeefffggggghhhhiiiiiihhhhhggggffeeeeeddddcccccbbaaaa`````___^^^^^]]]\\\\\[[[ZZZZZYYYYXXXXXWWVVVVVUUUUTTTTTSSSSRRRQQQQQPPPPOOOONNNNNMMMMMLLLLKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEDDDDCCCCCCBBBBBAAAA@@@@@@?????>>>>>>====<<<<<<;;;;;;;:::::::9999988888877777777766666666555555444444444433333333333222222222222222111111111111111000000000000000000000000000000000000000001111111111111112222222222222223333333333334444444444555555666666677777777788888899999::::::::;;;;;;<<<<<<====>>>>>>?????@@@@@@@AAABBBBBCCCCCCCDDDEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKLLLLMMMMMNNNNNOOOPPPPQQQQQRRRRSSSSTTTTTUUUVVVVVWWWXXXXXYYYYZZZZZ[[\\\\\]]]]^^^^^__`````aaaabbbcccccdddeeeeefffgggghhhhhiiiiiiihhhhgggggffeeeedddddccccbbbbaaa`````___^^^^]]]]]\\\[[[[ZZZZYYYYYXXXXWWWVVVVUUUUUTTTTTSSSRRRRRQQQQQPPOOOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEEDDDDCCCCCCBBBBBAAAA@@@@@@?????>>>>>>>=====<<<<<<;;;;;;::::::99999888888887777777776666666555555554444444444333333333333222222222222222211111111111111111111111111111111111111111111111111111111111222222222222222233333333333334444444444555555566666666777777777888888899999::::::;;;;;;;<<<<<<=====>>>>>>?????@@@@@@AAAABBBBBCCCCCCDDDDEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSTTTTTUUUUUVVVVWWWWXXXXYYYYYZZZ[[[[\\\\]]]]]^^^^__`````aaaabbbbcccdddddeeeefffggggghhhiiiijiiiihhhhhggggffffeeeddddcccccbbbaaaaa```___^^^^^]]]]\\\\\[[ZZZZZYYYYYXXXXWWWWVVVUUUUUTTTTTSSSRRRRRQQQQQPPOOOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEDDDCCCCCCCBBBBBAAA@@@@@@@??????>>>>>>====<<<<<<;;;;;;::::::::999998888888777777777666666666555555444444444443333333333333322222222222222222222111111111111111111111111111111111111111112222222222222222222233333333333333444444444445555555666666667777777778888888899999:::::::;;;;;;<<<<<<<===>>>>>>>??????@@@@@@AAAABBBBBCCCCCCDDDDEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSTTTTTUUUUUVVVVWWWWXXXYYYYYZZZZZ[[[\\\\\]]]]^^^^^__````aaaaabbcccccddddeeeeffffggghhhhhiiiijjjiiihhhhgggggfffeeeeedddccccbbbbaaaa`````__^^^^^]]]]\\\\\[[ZZZZZYYYYXXXXXWWWVVVVVUUUUUTTTSSSSRRRRRQQQQPPPPOOOOONNNNNMMMLLLLKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEEDDDCCCCCCBBBBBAAAA@@@@@@??????>>>>>>====<<<<<<;;;;;;;;:::::::9999988888888777777777666666665555555544444444444333333333333333222222222222222222222222222222222222222222222222222222222222222222222223333333333333334444444444445555555666666666777777777888888899999::::::::;;;;;;;<<<<<<====>>>>>>???????@@@@@@AAAABBBBBCCCCCCDDEEEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKKKLLLLMMMMNNNNNOOOOOPPPPQQQRRRRRSSSSTTTTUUUUUVVVVVWWXXXXXYYYYZZZZZ[[[\\\\\]]]^^^^^___`````aaaabbbccccddddeeeeeffggggghhhhiiiijjjjiiiiihhhggggffffeeeedddddcccbbbaaaaa````___^^^^]]]]]\\\\[[[[ZZZYYYYYXXXXWWWWVVVVVUUUUTTTTTSSSRRRRQQQQQPPPPOOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEEDDDCCCCCCBBBBBAAAAA@@@@@??????>>>>>>>=====<<<<<<;;;;;;;:::::::9999988888888777777777666666666655555544444444444443333333333333333322222222222222222222222222222222222222222222222222222222222333333333333333333444444444444555555666666666677777777788888888899999::::::;;;;;;;;<<<<<<=====>>>>>>??????@@@@@AAAAABBBBBCCCCCCCDDEEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLLLMMMMMNNNNNOOOOPPPQQQQQRRRRSSSSTTTTTUUUUVVVVVWWWXXXXYYYYYZZZZ[[[[\\\]]]]]^^^^____````aaaaabbccccdddddeeeefffgggghhhhiiiiijjjjjiiiihhhgggggfffeeeeeddddcccccbbaaaa`````__^^^^^]]]]\\\\\[[[ZZZZZYYYYYXXXWWWWVVVVUUUUUTTTTTSSRRRRRQQQQQPPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEEEEDDDCCCCCBBBBBBBAAA@@@@@@@??????>>>>>>====<<<<<<;;;;;;;;:::::::99999888888888777777777666666666655555554444444444444433333333333333333333322222222222222222222222222222222222222222333333333333333333333344444444444445555555566666666667777777778888888899999::::::::;;;;;;;<<<<<<<===>>>>>>>??????@@@@@@AAAABBBBBBCCCCCDDDDEEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLLLMMMMMNNNNNOOOOOPPQQQQQRRRRRSSSTTTTTUUUUUVVVWWWWXXXXYYYYYZZZZZ[[\\\\\]]]]^^^^^___`````aaabbbcccccddddeeeeeffggggghhhhiiiijjjjjjiiiiihhhhgggffffeeeedddddccccbbaaaaa`````___^^^]]]]]\\\\\[[[ZZZZZYYYYXXXXXWWVVVVVUUUUUTTTTTSSSRRRRRQQQQQPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEEDDDDCCCCCBBBBBBAAAA@@@@@@??????>>>>>>=====<<<<<<<;;;;;;;::::::::999998888888877777777776666666666555555555444444444444444333333333333333333333333333333333333333333333333333333333333333333333334444444444444445555555556666666666777777777788888888899999:::::::;;;;;;;;<<<<<<=====>>>>>>???????@@@@@@AAAABBBBBBCCCCCDDDDEEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSTTTTTUUUUUVVVVVWWWXXXXXYYYYZZZZZ[[\\\\\]]]]]^^^^__`````aaaaabbbccccdddddeeeffffgggghhhhiiiiijjkjjjjiiiihhhhhggggffeeeeeddddcccccbbaaaaa````____^^^^]]]]]\\\[[[[ZZZZYYYYYXXXXXWWVVVVVUUUUUTTTTSSSSRRRRRQQQQPPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEEDDDDCCCCCBBBBBBAAAA@@@@@@??????>>>>>>>=====<<<<<<<;;;;;;;;:::::::9999988888888877777777776666666666655555555544444444444444444333333333333333333333333333333333333333333333333333333333334444444444444444445555555566666666666677777777778888888899999::::::::;;;;;;;<<<<<<<<=====>>>>>>??????@@@@@@@AAABBBBBBBCCCCCDDDEEEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKKKLLLLMMMMMNNNNNOOOOOPPPPQQQQRRRRRSSSTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZ[[[[\\\\]]]]]^^^^___````aaaaabbbcccccdddeeeeefffgggghhhhhiiijjjjkkkjjiiiiihhhhgggggffeeeedddddccccbbbbaaa`````___^^^^^]]]]\\\\\[[ZZZZZYYYYYXXXXWWWWVVVVVUUUTTTTTSSSSRRRRQQQQQPPPPOOOOONNNNNMMMMMLLKKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEEDDDDCCCCCCBBBBBAAAAA@@@@@@@??????>>>>>>=====<<<<<<;;;;;;;;:::::::::99999888888888877777777776666666666655555555554444444444444444444443333333333333333333333333333333333333333344444444444444444444445555555555666666666667777777777888888888899999:::::::::;;;;;;;<<<<<<=====>>>>>>>??????@@@@@@AAAAABBBBBCCCCCCDDDDEEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKKLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRSSSSTTTTTUUUUVVVVVWWWWXXXYYYYYZZZZZ[[[\\\\\]]]]^^^^^__`````aaaabbbbcccdddddeeeefffggggghhhiiiiijjjkkkkkjjiiiihhhhhggggffeeeeeddddcccccbbbaaaaa```____^^^^]]]]]\\\\\[[ZZZZZYYYYXXXXXWWWWVVVVUUUUUTTTTTSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLKKKKKKKJJJJJIIIIIHHHGGGGGFFFFFFFEEEEEDDDCCCCCCCBBBBBBAAAA@@@@@@??????>>>>>>=====<<<<<<<<;;;;;;;:::::::::999998888888888777777777776666666666666555555555544444444444444444444444444444444444444444444444444444444444444444444444444555555555566666666666677777777777888888888899999:::::::::;;;;;;;;<<<<<<<=====>>>>>>???????@@@@@@AAAABBBBBBCCCCCCDDDDEEEEEFFFFFFGGGGGHHHHIIIIIJJJJJKKKKKKLLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSTTTTTUUUUUVVVVWWWXXXXXYYYYZZZZZ[[[\\\\\]]]]]^^^____````aaaaabbcccccddddeeeeefffggghhhhhiiiijjjkkkkkkjjiiiiihhhhgggggfffeeeeedddcccccbbbaaaa`````__^^^^^]]]]]\\\\[[[[ZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLKKKKKJJJJJJIIIIIHHHHGGGGGFFFFFFEEEEEDDDDCCCCCCBBBBBBAAAA@@@@@@????????>>>>>>=====<<<<<<<;;;;;;;;:::::::::9999998888888887777777777776666666666666655555555555544444444444444444444444444444444444444444444444444444444444555555555555566666666666667777777777777888888888999999:::::::::;;;;;;;<<<<<<<<=====>>>>>>???????@@@@@@@AAABBBBBBBCCCCCCDDDDEEEEEFFFFFFGGGGGHHHHIIIIIJJJJJJKKKKKLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZ[[[[\\\]]]]]^^^^^___`````aaaabbcccccddddeeeeeffggggghhhhiiiiijjjkkkkkkkjjjiiihhhhhggggffffeeeedddddcccbbbbaaaa`````__^^^^^]]]]\\\\\[[[ZZZZZYYYYYXXXXXWWVVVVVUUUUUTTTTSSSSRRRRRQQQQQPPOOOOONNNNNMMMMMMLLLKKKKKJJJJJJIIIIIHHHHGGGGGFFFFFFEEEEEDDDDCCCCCCBBBBBBAAAAA@@@@@@@??????>>>>>>>====<<<<<<<<<;;;;;;;:::::::::99999988888888887777777777777666666666666666555555555555555544444444444444444444444444444444444444444555555555555555556666666666666667777777777778888888888999999:::::::::;;;;;;;;<<<<<<<<====>>>>>>>>??????@@@@@@AAAAABBBBBBCCCCCCCDDDEEEEEFFFFFFFGGGGGHHHIIIIIJJJJJJJKKKKKLLMMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSSTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[\\\\\]]]]^^^^^___`````aaabbbbccccdddddeeeefffgggghhhhhiiiijjkkkkkkkkkjjjjiiiihhhgggggfffeeeeeddddcccccbbaaaaa````____^^^]]]]]\\\\\[[[ZZZZZYYYYYXXXXWWWVVVVVUUUUTTTTTSSSSRRRRRQQQQQPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJJIIIIIHHHHGGGGGFFFFFFEEEEEEEDDDCCCCCCCBBBBBBAAAA@@@@@@???????>>>>>>>=====<<<<<<<;;;;;;;;;:::::::::999999888888888887777777777777666666666666666666555555555555555555555555555555555555555555555555555555555556666666666666666666777777777777888888888888999999:::::::::;;;;;;;;<<<<<<<<=====>>>>>>????????@@@@@@AAAABBBBBBCCCCCCDDDDEEEEEEFFFFFFGGGGGHHHHIIIIIJJJJJJKKKKKLLLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSTTTTTUUUUVVVVVWWWWXXXXYYYYYZZZZZ[[\\\\\]]]]]^^^^____```aaaaabbbcccccddddeeeeeffggggghhhhiiiijjjkkkklkkkkkjjjiiiiihhhhgggggffeeeedddddccccbbbaaaa`````___^^^^^]]]]]\\\[[[[ZZZZZYYYYXXXXXWWWWVVVUUUUUTTTTTSSSSRRRRRQQQQQPPPOOOOONNNNNMMMMMLLLKKKKKJJJJJJJIIIIIHHHGGGGGGGFFFFFEEEEEEDDDDCCCCCCBBBBBBAAAA@@@@@@@???????>>>>>>>=====<<<<<<<<;;;;;;;;::::::::::99999998888888888877777777777777666666666666666666666655555555555555555555555555555555555555555666666666666666666666667777777777777788888888888999999::::::::::;;;;;;;;;<<<<<<<=====>>>>>>>>??????@@@@@@@@AAABBBBBBBCCCCCCDDDDEEEEEEFFFFFGGGGGGHHHHIIIIIJJJJJJKKKKKLLLLMMMMMNNNNNOOOOOPPQQQQQRRRRRSSSSTTTTTUUUUUVVVVWWWWXXXXXYYYZZZZZ[[[[\\\\]]]]]^^^^^__`````aaaabbbbccccdddddeeefffggggghhhhiiiiijjkkkkklllkkkjjjjiiiihhhhhggggffeeeeedddddccccbbaaaaa`````___^^^^^]]]]\\\\\[[[ZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJJIIIIIHHHHGGGGGGFFFFFEEEEEEDDDDCCCCCCBBBBBBAAAAA@@@@@@@???????>>>>>>>>=====<<<<<<<;;;;;;;;;::::::::::999999988888888888877777777777777776666666666666666666666666666666666666666666666666666666666666666666666666677777777777777778888888888899999999::::::::::;;;;;;;;<<<<<<<<=====>>>>>>>????????@@@@@@AAAAABBBBBBCCCCCCCDDDEEEEEEEFFFFFGGGGGGHHHHIIIIIJJJJJJKKKKKLLLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZ[[[[\\\\\]]]]^^^^^__`````aaaaabbbcccdddddeeeeefffgggghhhhhiiijjjjkkkkllllkkkkkjjiiiiihhhhgggggffeeeeeddddcccccbbbaaaaa```____^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJJIIIIIHHHHGGGGGGFFFFFEEEEEEDDDDDCCCCCCCBBBBBBAAAA@@@@@@@??????>>>>>>>>======<<<<<<<<;;;;;;;;;;::::::::::9999999888888888888877777777777777777666666666666666666666666666666666666666666666666666666666666677777777777777777788888888888899999999::::::::::;;;;;;;;;;<<<<<<<=======>>>>>>>??????@@@@@@@@AAAABBBBBBCCCCCCDDDDDEEEEEEFFFFFGGGGGGGHHHIIIIIJJJJJJJKKKKKLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^____````aaaaabbcccccddddeeeeefffggggghhhiiiiijjjkkkkklllllkkkkkjjiiiihhhhhggggffffeeedddddccccbbbbaaaa`````__^^^^^]]]]]\\\\\[[[ZZZZZYYYYYXXXWWWWVVVVVUUUUUTTTTTSSSRRRRRQQQQQPPPOOOOONNNNNMMMMMLLLLKKKKKKJJJJJIIIIIHHHHGGGGGGFFFFFFFEEEEEEDDDDCCCCCCBBBBBBAAAAA@@@@@@????????>>>>>>>=======<<<<<<<;;;;;;;;;;::::::::::99999999988888888888888777777777777777777777666666666666666666666666666666666666666666667777777777777777777778888888888888899999999::::::::::;;;;;;;;;;<<<<<<<<======>>>>>>>>???????@@@@@@AAAAABBBBBBBCCCCCCDDDDEEEEEEFFFFFFGGGGGGHHHHIIIIIJJJJJKKKKKKLLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSTTTTTUUUUUVVVVVWWWWXXXXYYYYYZZZZZ[[\\\\\]]]]]^^^^^___`````aaaabbbccccdddddeeeeffffggghhhhhiiiijjjkkkkklllllllkkkkjjiiiiihhhhgggggfffeeeeedddcccccbbbaaaaa`````__^^^^^]]]]]\\\\[[[[ZZZZZYYYYXXXXXWWWVVVVVUUUUTTTTTSSSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLKKKKKKKJJJJJIIIIIHHHHHGGGGGFFFFFFEEEEEEDDDDCCCCCCBBBBBBBBAAA@@@@@@@@???????>>>>>>>>======<<<<<<<<<;;;;;;;;;:::::::::::9999999998888888888888888777777777777777777777777777777777777777777777777777777777777777777777777778888888888888888999999999:::::::::::;;;;;;;;;<<<<<<<<=======>>>>>>>????????@@@@@@@AAAABBBBBBBCCCCCCCDDDEEEEEEEFFFFFFGGGGGHHHHHIIIIIJJJJJKKKKKKLLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSTTTTTUUUUVVVVVWWWWXXXXXYYYYZZZZZ[[[\\\\]]]]]^^^^^___`````aaaaabbcccccddddeeeeeffggggghhhhiiiiijjjkkklllllllllkkkkkjjjiiiiihhhgggggfffeeeeeddddcccccbbaaaaa````____^^^^^]]]\\\\\[[[[ZZZZYYYYYXXXXXWWVVVVVUUUUUTTTTTSSSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLLKKKKKKJJJJJIIIIIIHHHHGGGGGFFFFFFEEEEEEDDDDDCCCCCCCBBBBBBAAAAA@@@@@@@????????>>>>>>>=======<<<<<<<<;;;;;;;;;;::::::::::::99999999998888888888888888877777777777777777777777777777777777777777777777777777777777778888888888888888889999999999:::::::::::;;;;;;;;;;<<<<<<<<<======>>>>>>>>???????@@@@@@@@AAAAABBBBBBCCCCCCDDDDDEEEEEEFFFFFFFGGGGGHHHIIIIIIIJJJJJKKKKKKLLLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSSTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZ[[[[\\\\\]]]]^^^^^____```aaaaabbbcccccddddeeeeeffggggghhhhiiiiijjkkkkkllllmlllllkkkkjjjjiiiihhhhhgggffffeeeedddddccccbbbaaaa`````____^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLLKKKKKKJJJJJIIIIIIHHHHGGGGGGFFFFFFFEEEEEEDDDDCCCCCCBBBBBBBAAAA@@@@@@@@????????>>>>>>>>======<<<<<<<<<;;;;;;;;;;;:::::::::::::9999999999888888888888888888888777777777777777777777777777777777777777777778888888888888888888889999999999::::::::::::;;;;;;;;;;;;<<<<<<<<=======>>>>>>>?????????@@@@@@@AAAABBBBBBBBCCCCCCDDDDEEEEEEFFFFFFGGGGGGHHHHIIIIIIJJJJJKKKKKKKLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSSTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^___`````aaaabbbbccccdddddeeeffffgggghhhhhiiiijjjkkkklllllmmmlllkkkkkjjjiiiiihhhhgggggffeeeeeddddcccccbbbbaaa`````___^^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSSSRRRRRQQQQQPPPOOOOONNNNNMMMMMLLLLKKKKKKJJJJJIIIIIIIHHHGGGGGGGFFFFFFEEEEEEDDDDCCCCCCCBBBBBBBAAAAA@@@@@@@????????>>>>>>>>=======<<<<<<<<<<;;;;;;;;;;;::::::::::::999999999999888888888888888888888888888888888888888888888888888888888888888888888888888899999999999:::::::::::::;;;;;;;;;;;<<<<<<<<<<======>>>>>>>>>???????@@@@@@@@AAAAABBBBBBCCCCCCCCDDDEEEEEEEFFFFFFGGGGGGHHHHIIIIIIJJJJJKKKKKKLLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSSTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^^__`````aaaabbbbcccccdddeeeeefffggggghhhhiiiiijjkkkkkllllmmmmmllllkkkkkjjiiiihhhhhgggggffeeeeeddddcccccbbbaaaaa`````__^^^^^]]]]]\\\\[[[[ZZZZZYYYXXXXXWWWWVVVVVUUUUUTTTTTSSSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMMLLKKKKKKKJJJJJJIIIIIHHHHGGGGGGFFFFFFEEEEEEDDDDDCCCCCCCBBBBBBBAAAAA@@@@@@@@???????>>>>>>>>>======<<<<<<<<<<;;;;;;;;;;;;;:::::::::::::99999999999999888888888888888888888888888888888888888888888888888888888888899999999999999::::::::::::::;;;;;;;;;;;;<<<<<<<<<<=======>>>>>>>>????????@@@@@@@AAAAABBBBBBBBCCCCCCDDDDDEEEEEEFFFFFFFGGGGGGHHHHIIIIIJJJJJJKKKKKKLLLMMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYZZZZZ[[[[\\\]]]]]^^^^^___`````aaaaabbcccccddddeeeeefffggggghhhhhiiijjjkkkkkllllmmmmmmlllllkkkkjjjiiiihhhhhggggffffeeedddddccccbbbbaaaaa````___^^^^^]]]]\\\\\[[[[ZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMMLLLLKKKKKJJJJJJIIIIIHHHHHGGGGGGFFFFFFFEEEEEEDDDDCCCCCCCBBBBBBBBAAAAA@@@@@@@????????>>>>>>>>>>======<<<<<<<<<<;;;;;;;;;;;;:::::::::::::::::9999999999999999888888888888888888888888888888888888888888889999999999999999::::::::::::::::;;;;;;;;;;;;;<<<<<<<<<<======>>>>>>>>>>???????@@@@@@@@AAAAABBBBBBBCCCCCCCCDDDDEEEEEEFFFFFFGGGGGGHHHHHIIIIIJJJJJJJKKKKKLLLMMMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZ[[[\\\\\]]]]^^^^^____````aaaaabbbccccdddddeeeeffffggghhhhhiiiijjjjkkkklllllmmmmmmmllllkkkkkjjiiiiihhhhgggggfffeeeeedddddcccbbbbaaaa`````____^^^]]]]]\\\\\[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTSSRRRRRRQQQQQPPPPOOOOONNNNNMMMMMMLLLLKKKKKJJJJJJIIIIIIIHHHGGGGGGGFFFFFFEEEEEEDDDDDCCCCCCBBBBBBBBAAAAA@@@@@@@@@????????>>>>>>>>>======<<<<<<<<<<<<;;;;;;;;;;;;;:::::::::::::::::::9999999999999999999999999999999999999999999999999999999999999:::::::::::::::::::;;;;;;;;;;;;;;<<<<<<<<<<<======>>>>>>>>>?????????@@@@@@@@@AAAAABBBBBBBCCCCCCDDDDDEEEEEEEFFFFFFGGGGGGHHHHIIIIIIJJJJJJKKKKKLLLLMMMMMMNNNNNOOOOOPPPPQQQQQRRRRRRSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[\\\\\]]]]]^^^^____`````aaabbbbccccdddddeeeeeffggggghhhhiiiiijjjkkkkklllmmmmmmmmmlllllkkkkjjjjiiihhhhhgggggfffeeeeeddddcccccbbaaaaa`````___^^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTSSRRRRRRRQQQQQPPPOOOOONNNNNMMMMMMMLLLKKKKKJJJJJJJIIIIIIHHHHGGGGGGFFFFFFEEEEEEEEDDDCCCCCCCCBBBBBBBAAAAA@@@@@@@@@?????????>>>>>>>>>=======<<<<<<<<<<<;;;;;;;;;;;;;;;:::::::::::::::::::::::99999999999999999999999999999999999999999999::::::::::::::::::::::;;;;;;;;;;;;;;;<<<<<<<<<<<========>>>>>>>>>????????@@@@@@@@@AAAAABBBBBBBBCCCCCCCDDDDEEEEEEEFFFFFFFGGGGGGHHHHIIIIIIJJJJJJKKKKKLLLLMMMMMMNNNNNOOOOOPPPPQQQQQRRRRRRSSSTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^^__`````aaaaabbbcccccddddeeeeeffggggghhhhhiiiijjjjkkklllllmmmmnmmmmmllllkkkkkjjjiiiiihhhhhgggffffeeeedddddcccccbbaaaaa`````___^^^^^]]]]]\\\\[[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTTSSSRRRRRRQQQQQPPPPOOOOONNNNNMMMMMMLLLLKKKKKKJJJJJIIIIIIHHHHHGGGGGGFFFFFFFEEEEEEDDDDDCCCCCCCBBBBBBBBAAAAA@@@@@@@@@????????>>>>>>>>>>========<<<<<<<<<<<<;;;;;;;;;;;;;;;;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;<<<<<<<<<<<<<=======>>>>>>>>>>?????????@@@@@@@@@AAAAABBBBBBBCCCCCCCCDDDDDEEEEEEFFFFFFGGGGGGHHHHHIIIIIIIJJJJJKKKKKKLLLLMMMMMMNNNNNOOOOOPPPPQQQQQRRRRRRSSTTTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZZ[[[[\\\\]]]]]^^^^^__`````aaaaabbbcccccdddddeeeffffgggghhhhhiiiiijjkkkkkllllmmmmmnnnmmmmmlllkkkkkjjjiiiiihhhhgggggffeeeeedddddccccbbbbaaaaa```____^^^^^]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWVVVVVUUUUUTTTTTTSSSRRRRRRQQQQQPPPPOOOOONNNNNNMMMMMLLLLKKKKKKJJJJJJIIIIIIIHHHGGGGGGGFFFFFFEEEEEEEDDDDDCCCCCCCBBBBBBBBAAAAA@@@@@@@@@?????????>>>>>>>>>>>========<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<=======>>>>>>>>>>>>????????@@@@@@@@@AAAAABBBBBBBBBCCCCCCDDDDDEEEEEEEEFFFFFFGGGGGGHHHHIIIIIIJJJJJJKKKKKKKLLLMMMMMNNNNNNNOOOOOPPPQQQQQRRRRRRRSSTTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[[[\\\\\]]]^^^^^____````aaaaabbbbcccdddddeeeeefffggggghhhhiiiiijjkkkkkllllmmmmmnnnnnmmmmlllllkkkjjjjiiiihhhhhgggggffeeeeeddddcccccbbbbaaaa`````___^^^^]]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWVVVVVUUUUUTTTTTTTSSRRRRRRQQQQQPPPPOOOOONNNNNNMMMMMLLLLKKKKKKJJJJJJJIIIIIIHHHHGGGGGGFFFFFFFEEEEEEEDDDDDCCCCCCCBBBBBBBBBAAAAA@@@@@@@@@??????????>>>>>>>>>>========<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;;;;;;::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<=========>>>>>>>>>>??????????@@@@@@@@@AAAAABBBBBBBBCCCCCCCCDDDDDEEEEEEFFFFFFFFGGGGGGHHHHIIIIIIJJJJJJKKKKKKLLLLMMMMMNNNNNNOOOOOPPPPQQQQQRRRRRRSSSTTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^____`````aaaabbbcccccddddeeeeefffggggghhhhhiiijjjjkkkklllllmmmmnnnnnnmmmmmllllkkkkkjjiiiiihhhhhggggffffeeedddddcccccbbbaaaaa`````__^^^^^]]]]]\\\\\[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTSSSRRRRRRRQQQQQPPPOOOOONNNNNNNMMMMMLLLLLKKKKKJJJJJJIIIIIIHHHHHGGGGGGFFFFFFFEEEEEEEDDDDDCCCCCCCCBBBBBBBAAAAAA@@@@@@@@@??????????>>>>>>>>>>>=========<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<=========>>>>>>>>>>>??????????@@@@@@@@@AAAAAABBBBBBBBCCCCCCCDDDDDEEEEEEEEFFFFFFGGGGGGHHHHHIIIIIIIJJJJJJKKKKKLLLLLMMMMMNNNNNNOOOOOPPPPQQQQQRRRRRRSSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[\\\\\]]]]]^^^^^___`````aaaaabbcccccdddddeeeeffffggghhhhhiiiiijjjkkkkkllllmmmmmnnooonnmmmmlllllkkkkkjjiiiiihhhhgggggfffeeeeedddddcccccbbaaaaa`````___^^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTSSSSRRRRRRQQQQQPPPPOOOOONNNNNNMMMMMMLLLLKKKKKKJJJJJJIIIIIIIHHHGGGGGGGFFFFFFFEEEEEEEEDDDDDCCCCCCCBBBBBBBBBAAAAA@@@@@@@@@@??????????>>>>>>>>>>>>=========<<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<=========>>>>>>>>>>>>>??????????@@@@@@@@@@AAAAABBBBBBBBCCCCCCCCDDDDDEEEEEEEFFFFFFFFGGGGGGHHHHIIIIIIJJJJJJKKKKKKKLLLMMMMMMMNNNNNNOOOOOPPPPQQQQQRRRRRRSSSSTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^^__`````aaaaabbbcccccdddddeeeeeffggggghhhhiiiiijjjkkkkklllllmmmnnnoooonnnmmmmlllllkkkkjjjjiiihhhhhgggggfffeeeeedddddccccbbbaaaaa````____^^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTSSSSRRRRRRQQQQQPPPPOOOOOONNNNNMMMMMMLLLLKKKKKKJJJJJJJIIIIIIHHHHGGGGGGGFFFFFFFFEEEEEEDDDDDCCCCCCCCCBBBBBBBBAAAAA@@@@@@@@@@????????????>>>>>>>>>>>>==========<<<<<<<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<==========>>>>>>>>>>>>>???????????@@@@@@@@@@AAAAABBBBBBBBBCCCCCCCCCDDDDDEEEEEEFFFFFFFGGGGGGGGHHHHIIIIIIJJJJJJKKKKKKLLLLMMMMMMNNNNNOOOOOOOPPPQQQQQRRRRRRRSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^^___````aaaaabbbbccccdddddeeeeeffggggghhhhhiiiijjjjkkklllllmmmmnnnnooooonnmmmmmllllkkkkkjjjiiiiihhhhhgggffffeeeeeddddcccccbbbbaaa`````____^^^^^]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSSSRRRRRRQQQQQPPPPOOOOOONNNNNMMMMMMMLLLKKKKKKKJJJJJJIIIIIIHHHHHGGGGGGFFFFFFFFEEEEEEEDDDDDCCCCCCCCCBBBBBBBBBAAAAAA@@@@@@@@@@???????????>>>>>>>>>>>>>>===========<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<===========>>>>>>>>>>>>>>???????????@@@@@@@@@@AAAAAAABBBBBBBBCCCCCCCCCDDDDDEEEEEEEEFFFFFFFGGGGGGHHHHHIIIIIIIJJJJJJKKKKKKLLLLMMMMMMNNNNNOOOOOOPPPPQQQQQRRRRRRSSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[[\\\\\]]]^^^^^____`````aaaabbbbcccccdddeeeeeffffgggghhhhhiiiiijjkkkkkllllmmmmmnnnoooooonnnnmmmlllllkkkkkjjjiiiiihhhhgggggfffeeeedddddcccccbbbaaaaa`````___^^^^]]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSRRRRRRRQQQQQPPPOOOOOOONNNNNNMMMMMLLLLLKKKKKKJJJJJJIIIIIIIHHHGGGGGGGGFFFFFFFEEEEEEEEDDDDDCCCCCCCCCBBBBBBBBAAAAAAA@@@@@@@@@@@???????????>>>>>>>>>>>>>>>==============<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=============>>>>>>>>>>>>>>>????????????@@@@@@@@@@@AAAAAABBBBBBBBBCCCCCCCCCDDDDDEEEEEEEFFFFFFFFGGGGGGGHHHHIIIIIIJJJJJJKKKKKKKLLLLLMMMMMNNNNNNOOOOOOPPPPQQQQQRRRRRRSSSTTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^____`````aaaaabbcccccdddddeeeeffffggggghhhhiiiiijjkkkkklllllmmmmnnnnooooooonnnmmmmmlllllkkkjjjjiiiihhhhhgggggffeeeeedddddcccccbbbaaaaa`````__^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSSRRRRRRQQQQQPPPPOOOOOONNNNNNMMMMMMLLLLKKKKKKJJJJJJJIIIIIIHHHHHGGGGGGGFFFFFFFFEEEEEEEDDDDDCCCCCCCCCBBBBBBBBBAAAAAAA@@@@@@@@@@??????????????>>>>>>>>>>>>>>>>=================<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<================>>>>>>>>>>>>>>>>??????????????@@@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCCDDDDDEEEEEEEEFFFFFFFGGGGGGGGHHHHHIIIIIIJJJJJJKKKKKKLLLLMMMMMMNNNNNNNOOOOOOPPPPQQQQQRRRRRRSSTTTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^___`````aaaaabbcccccdddddeeeeefffggggghhhhhiiijjjjkkkklllllmmmmmnnoooopooooonnnmmmmmllllkkkkkjjiiiiihhhhhgggggfffeeeeedddddcccbbbbaaaaa`````___^^^^^]]]]]\\\\\[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSSSRRRRRQQQQQQPPPPOOOOONNNNNNMMMMMMMLLLKKKKKKKJJJJJJIIIIIIIHHHHHGGGGGGGFFFFFFFEEEEEEEEEDDDDDCCCCCCCCCBBBBBBBBBBAAAAAA@@@@@@@@@@@@??????????????>>>>>>>>>>>>>>>>>>>================================================================>>>>>>>>>>>>>>>>>>??????????????@@@@@@@@@@@@@AAAAAABBBBBBBBBBCCCCCCCCCDDDDDEEEEEEEEFFFFFFFFGGGGGGHHHHHIIIIIIIIJJJJJJKKKKKKLLLLMMMMMMNNNNNNOOOOOPPPPQQQQQQRRRRRSSSSTTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^__`````aaaaabbbbccccdddddeeeeeffggggghhhhhiiiiijjjkkkkkllllmmmmmnnooooopppooonnnnmmmmlllllkkkkkjjiiiiihhhhhggggffffeeeeeddddcccccbbbaaaaa````____^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTTTSSSRRRRRQQQQQQQPPPOOOOONNNNNNNMMMMMMLLLLLKKKKKKJJJJJJIIIIIIIHHHHHGGGGGGGFFFFFFFFEEEEEEEEDDDDDCCCCCCCCCBBBBBBBBBBAAAAAAAA@@@@@@@@@@@@???????????????>>>>>>>>>>>>>>>>>>>>>>>==============================================>>>>>>>>>>>>>>>>>>>>>>???????????????@@@@@@@@@@@@@AAAAAAABBBBBBBBBBCCCCCCCCCDDDDDEEEEEEEEEFFFFFFFGGGGGGGGHHHHHIIIIIIJJJJJJKKKKKKKLLLLLMMMMMMNNNNNNOOOOOPPPPQQQQQQRRRRRSSSSTTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^___````aaaaabbbbcccccddddeeeeefffgggghhhhhiiiiijjjkkkkklllllmmmnnnnooooppppooooonnmmmmmlllllkkkkjjjjiiiiihhhgggggffffeeeedddddcccccbbaaaaa`````____^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSSSRRRRRQQQQQQPPPPOOOOOONNNNNNMMMMMMLLLLKKKKKKJJJJJJJIIIIIIIHHHHHGGGGGGGGFFFFFFFEEEEEEEEEDDDDDCCCCCCCCCCBBBBBBBBBBAAAAAAA@@@@@@@@@@@@@?????????????????>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>??????????????????@@@@@@@@@@@@AAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDEEEEEEEEFFFFFFFFGGGGGGGHHHHHIIIIIIIIJJJJJJKKKKKKLLLLMMMMMMNNNNNNNOOOOOOPPPPQQQQQQRRRRRSSSSTTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^^____`````aaaaabbbcccccdddddeeeffffggggghhhhiiiiijjjjkkklllllmmmmmnnnooooopppppooooonnmmmmmllllkkkkkjjjjiiiihhhhhgggggffeeeeedddddcccccbbbaaaaa`````___^^^^^]]]]]\\\\\[[[ZZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSSSRRRRRQQQQQQPPPPOOOOOONNNNNNMMMMMMMLLLKKKKKKKKJJJJJJIIIIIIIIHHHHHGGGGGGGFFFFFFFFEEEEEEEEDDDDDCCCCCCCCCCBBBBBBBBBBBBAAAAAAA@@@@@@@@@@@@@@????????????????????>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????????????@@@@@@@@@@@@@AAAAAAAABBBBBBBBBBBCCCCCCCCCCDDDDDEEEEEEEEEFFFFFFFGGGGGGGGHHHHHIIIIIIIJJJJJJJKKKKKKKLLLLMMMMMMNNNNNNOOOOOOOPPPQQQQQQQRRRRRSSSTTTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZZZ[[\\\\\]]]]]^^^^^____`````aaaaabbcccccdddddeeeeefffggggghhhhhiiiijjjkkkkkllllmmmmmnnnooooopppppppoooonnnnmmmlllllkkkkkjjjiiiiihhhhhgggggffeeeeedddddcccccbbbaaaaa`````____^^^^^]]]]]\\\\\[[ZZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSSSRRRRRRQQQQQPPPPOOOOOONNNNNNNMMMMMMLLLLLKKKKKKJJJJJJJJIIIIIIHHHHHGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDCCCCCCCCCCBBBBBBBBBBBAAAAAAAA@@@@@@@@@@@@@@@@???????????????????????>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>??????????????????????@@@@@@@@@@@@@@@@@AAAAAAABBBBBBBBBBBCCCCCCCCCCDDDDDDDEEEEEEEEFFFFFFFFFGGGGGGGGHHHHHIIIIIIJJJJJJJKKKKKKKLLLLLMMMMMMNNNNNNOOOOOOPPPPQQQQQRRRRRRSSSSTTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZZ[[[\\\\\]]]]]^^^^^____`````aaaaabbcccccdddddeeeeefffggggghhhhhiiiiijjkkkkklllllmmmmnnnnooopppppppppooooonnnnmmmmlllllkkkkkjjiiiiihhhhhggggffffeeeeedddcccccbbbbaaaaa`````___^^^^^]]]]]\\\\\\[[ZZZZZYYYYYYYXXXXXWWWVVVVVUUUUUUUTTTTTSSSRRRRRRRQQQQQPPPPPOOOOOONNNNNNMMMMMMLLLLKKKKKKKKJJJJJJIIIIIIIHHHHHGGGGGGGGFFFFFFFFFEEEEEEEEDDDDDDDCCCCCCCCCCBBBBBBBBBBBBAAAAAAAAA@@@@@@@@@@@@@@@@?????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@AAAAAAAABBBBBBBBBBBBBCCCCCCCCCCDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGHHHHHIIIIIIIIJJJJJJKKKKKKKLLLLMMMMMMNNNNNNNOOOOOOPPPPPQQQQQRRRRRRSSSSTTTTTUUUUUUVVVVVWWWWXXXXXYYYYYYZZZZZ[[[\\\\\\]]]]]^^^^^__`````aaaaabbbbcccccddddeeeeeffffggghhhhhiiiiijjjkkkkklllllmmmmnnnoooooppppqqqpppooooonnnmmmmmlllllkkkkjjjiiiiihhhhgggggffffeeeedddddcccccbbbaaaaa`````___^^^^^]]]]]\\\\\\[[[ZZZZZYYYYYYXXXXXWWWWVVVVVUUUUUUTTTTTSSSSRRRRRRQQQQQQPPPPOOOOOONNNNNNMMMMMMMLLLLLKKKKKKJJJJJJJIIIIIIIIHHHHHGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCCCCBBBBBBBBBBBBBAAAAAAAAAA@@@@@@@@@@@@@@@@@@@??????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@AAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFFGGGGGGGGHHHHHIIIIIIIJJJJJJJJKKKKKKLLLLLMMMMMMNNNNNNOOOOOOOPPPQQQQQQQRRRRRRSSSSTTTTTUUUUUUVVVVVWWWWXXXXXYYYYYYZZZZZ[[\\\\\\\]]]]]^^^^^__`````aaaaabbbbcccccdddddeeeefffggggghhhhiiiiijjjjkkkklllllmmmmmnnoooooppppqqqqpppppooonnnnmmmmmllllkkkkkjjjjiiihhhhhgggggfffeeeeedddddcccccbbbbaaaaa`````__^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYYXXXXXWWWWVVVVVUUUUUUTTTTTSSSSRRRRRRQQQQQQPPPPOOOOOONNNNNNNMMMMMMMLLLLKKKKKKKJJJJJJJIIIIIIIHHHHHHGGGGGGGGFFFFFFFFFEEEEEEEEEEDDDDDDCCCCCCCCCCCBBBBBBBBBBBBBBAAAAAAAAAA@@@@@@@@@@@@@@@@@@@@@@@@??????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAABBBBBBBBBBBBBCCCCCCCCCCCCDDDDDDEEEEEEEEEEFFFFFFFFFGGGGGGGHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLMMMMMMMMNNNNNNOOOOOOPPPPQQQQQQRRRRRRRSSSTTTTTUUUUUUUVVVVVWWWXXXXXYYYYYYYZZZZZ[[[\\\\\]]]]]^^^^^___`````aaaaabbbbcccccdddddeeeeeffggggghhhhhiiiijjjjkkkkklllmmmmmnnnnoooopppppqqqqqpppppoooonnnmmmmlllllkkkkkjjjiiiiihhhhhgggggffeeeeedddddcccccbbbaaaaa`````___^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYYXXXXXWWWWVVVVVUUUUUUTTTTTTTSSSRRRRRQQQQQQQPPPPPOOOOOONNNNNNMMMMMMLLLLLKKKKKKKJJJJJJJIIIIIIIIHHHHHHGGGGGGGFFFFFFFFFEEEEEEEEEEDDDDDDDDCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAABBBBBBBBBBBBBBBCCCCCCCCCCCDDDDDDDEEEEEEEEEEFFFFFFFFFGGGGGGGGHHHHHHIIIIIIIJJJJJJJJKKKKKKLLLLLMMMMMMNNNNNNNOOOOOOPPPPPQQQQQQRRRRRSSSSTTTTTTUUUUUUVVVVVWWWWXXXXXYYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^____`````aaaaabbcccccdddddeeeeefffggggghhhhhiiiiijjkkkkklllllmmmmnnnnoooopppppqqqqqqqppppooooonnmmmmmlllllkkkkkjjjiiiiihhhhhggggfffeeeeedddddcccccbbbaaaaa`````____^^^^^]]]]]\\\\\[[[ZZZZZYYYYYYYXXXXXWWWVVVVVVVUUUUUTTTTTTSSSSRRRRRRQQQQQQPPPPOOOOOONNNNNNMMMMMMMMLLLLKKKKKKKJJJJJJJJIIIIIIIHHHHHGGGGGGGGGFFFFFFFFFFEEEEEEEEEEDDDDDDDCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAABBBBBBBBBBBBBBBCCCCCCCCCCCCDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGHHHHHIIIIIIIIJJJJJJJKKKKKKKKLLLLMMMMMMMNNNNNNOOOOOOOPPPQQQQQQQRRRRRRSSSSTTTTTTUUUUUVVVVVVWWWWXXXXXYYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^____`````aaaaabbcccccdddddeeeeeffffgggghhhhhiiiiijjkkkkklllllmmmmmnnnooooopppqqqqrrrqqpppppooooonnnmmmmmlllllkkkjjjjiiiiihhhhgggggffffeeeeedddddcccccbbaaaaa`````____^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYYXXXXXWWWWVVVVVVUUUUUTTTTTTSSSSRRRRRRQQQQQQPPPPOOOOOONNNNNNNNMMMMMMLLLLLKKKKKKKKJJJJJJJIIIIIIIIHHHHHGGGGGGGGGGFFFFFFFFEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBCCCCCCCCCCCCDDDDDDDDDEEEEEEEEEEFFFFFFFFFGGGGGGGGGGHHHHHIIIIIIIJJJJJJJJKKKKKKKLLLLLMMMMMMMNNNNNNNOOOOOOPPPPQQQQQQRRRRRRRSSSTTTTTTTUUUUUVVVVVVWWWWXXXXXYYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^___`````aaaaabbbcccccdddddeeeeeffffggggghhhiiiiijjjjkkkklllllmmmmmnnooooopppppqqqrrrrrqqpppppoooonnnnmmmmmllllkkkkkjjjiiiihhhhhgggggffffeeeeeddddcccccbbbaaaaa`````____^^^^^]]]]]\\\\\[[[[ZZZZZZYYYYYXXXXXWWWWVVVVVVUUUUUTTTTTTSSSSRRRRRRQQQQQQQPPPPPOOOOOONNNNNNMMMMMMMMLLLKKKKKKKKJJJJJJJJJIIIIIIIHHHHHHGGGGGGGGGFFFFFFFFFFEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGHHHHHHIIIIIIIIJJJJJJJJJKKKKKKKLLLLMMMMMMMNNNNNNNOOOOOOPPPPPQQQQQQRRRRRRSSSSTTTTTTUUUUUVVVVVVVWWWXXXXXYYYYYZZZZZZZ[[[\\\\\]]]]]^^^^^____`````aaaaabbbbcccccddddeeeeefffggggghhhhhiiiijjjjkkkkkllllmmmmmnnnoooopppppqqqrrrrrrqqqqpppooooonnnnmmmmlllllkkkkkjjiiiiihhhhhgggggfffeeeeedddddcccccbbbbaaaaa`````___^^^^^]]]]]\\\\\[[[[ZZZZZZYYYYYXXXXXWWWWVVVVVVUUUUUUUTTTTTSSSSSRRRRRRQQQQQQPPPPOOOOOONNNNNNNNMMMMMMLLLLLKKKKKKKJJJJJJJJIIIIIIIIIHHHHHHGGGGGGGGGFFFFFFFFFFEEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCDDDDDDDDDEEEEEEEEEEEFFFFFFFFFFGGGGGGGGGHHHHHHIIIIIIIIIJJJJJJJKKKKKKKKLLLLLMMMMMMNNNNNNNOOOOOOOPPPQQQQQQQRRRRRRSSSSSTTTTTUUUUUUVVVVVVWWWWXXXXXYYYYYZZZZZZ[[[[\\\\\]]]]]^^^^^____`````aaaaabbbbcccccdddddeeeeeffggggghhhhhiiiiijjjkkkkklllllmmmnnnnoooooppppqqqqrrrrrrrqqqpppppooooonnmmmmmlllllkkkkkjjjiiiiihhhhhgggggffeeeeedddddcccccbbbbaaaaa`````____^^^^^]]]]]\\\\\[[[ZZZZZZZYYYYYXXXXXXWWWWVVVVVUUUUUUTTTTTTSSSSRRRRRRQQQQQQPPPPOOOOOOOONNNNNNMMMMMMMLLLLLKKKKKKKKJJJJJJJIIIIIIIIIHHHHHHGGGGGGGGGGFFFFFFFFFFEEEEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCDDDDDDDDDEEEEEEEEEEEEFFFFFFFFFFGGGGGGGGGGHHHHHHIIIIIIIIIJJJJJJJJKKKKKKKLLLLLMMMMMMMMNNNNNNOOOOOOOPPPPQQQQQQRRRRRRRSSSTTTTTTTUUUUUUVVVVVWWWWXXXXXXYYYYYZZZZZZ[[[[\\\\\]]]]]^^^^^____`````aaaaabbbcccccdddddeeeeefffggggghhhhhiiiiijjkkkkklllllmmmmmnnnooooopppppqqrrrrrrrrrrqqqpppppooooonnmmmmmlllllkkkkjjjjiiiiihhhhhggggfffeeeeedddddcccccbbbbaaaaa`````____^^^^^]]]]]\\\\\[[[[ZZZZZZYYYYYXXXXXXWWWWVVVVVUUUUUUTTTTTTSSSSRRRRRRQQQQQQQPPPPPOOOOOONNNNNNNMMMMMMMMLLLLLKKKKKKKJJJJJJJJIIIIIIIIIHHHHHHGGGGGGGGGGFFFFFFFFFFFEEEEEEEEEEEEEDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEEEFFFFFFFFFFFFGGGGGGGGGGHHHHHHIIIIIIIIIJJJJJJJKKKKKKKKLLLLLMMMMMMMNNNNNNNNOOOOOOPPPPPQQQQQQRRRRRRSSSSTTTTTTUUUUUUUVVVVVWWWXXXXXXXYYYYYZZZZZZ[[[[\\\\\]]]]]^^^^^___`````aaaaabbbbcccccdddddeeeeeffffgggghhhhhiiiiijjjkkkklllllmmmmmnnnooooopppppqqrrrrrsssrrrqqqqpppppoooonnnnmmmmmlllkkkkkjjjjiiiiihhhhgggggffffeeeeedddddcccccbbbaaaaa`````____^^^^^]]]]]\\\\\[[[[ZZZZZZYYYYYXXXXXXWWWWVVVVVVUUUUUTTTTTTTSSSSSRRRRRRQQQQQQPPPPOOOOOOONNNNNNNMMMMMMMLLLLLKKKKKKKKKJJJJJJJIIIIIIIIIHHHHHHHHGGGGGGGGGGFFFFFFFFFFFEEEEEEEEEEEEEEDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEEEEEFFFFFFFFFFFGGGGGGGGGGHHHHHHHIIIIIIIIIJJJJJJJJKKKKKKKKLLLLLMMMMMMMMNNNNNNOOOOOOOOPPPQQQQQQQRRRRRRSSSSSTTTTTTUUUUUVVVVVVWWWWXXXXXXYYYYYZZZZZZZ[[[\\\\\]]]]]^^^^^____`````aaaaabbbbcccccdddddeeeeeffffggggghhhiiiiijjjjkkkkkllllmmmmmnnnnooopppppqqqqrrrrssssrrrrrqqqppppooooonnnnmmmmlllllkkkkkjjiiiiihhhhhgggggffffeeeeedddddcccccbbbbaaaaa`````___^^^^^]]]]]\\\\\\\[[ZZZZZZYYYYYXXXXXXXWWWVVVVVVVUUUUUUTTTTTTSSSSRRRRRRQQQQQQPPPPPOOOOOOONNNNNNNMMMMMMMMLLLLLKKKKKKKKJJJJJJJJIIIIIIIIIIHHHHHHGGGGGGGGGGFFFFFFFFFFFFFEEEEEEEEEEEEEEEDDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDEEEEEEEEEEEEEEEFFFFFFFFFFFFGGGGGGGGGGHHHHHHHIIIIIIIIIIJJJJJJJKKKKKKKKKLLLLLMMMMMMMNNNNNNNNOOOOOOPPPPPQQQQQQRRRRRRRSSSTTTTTTTUUUUUUVVVVVVWWWWXXXXXXYYYYYZZZZZZ[[[\\\\\\]]]]]^^^^^____`````aaaaabbbbcccccdddddeeeeefffggggghhhhhiiiiijjjkkkkklllllmmmmnnnoooooppppqqqqrrrrrsssssrrrrrqqpppppooooonnnmmmmmlllllkkkkkjjiiiiihhhhhgggggffffeeeeedddddcccccbbbbaaaaa`````____^^^^^]]]]]\\\\\\[[[[ZZZZZYYYYYYXXXXXWWWWVVVVVVUUUUUUTTTTTTSSSSRRRRRRQQQQQQQQPPPPOOOOOOONNNNNNNNMMMMMMMLLLLLKKKKKKKKKJJJJJJJJJIIIIIIIIHHHHHHHGGGGGGGGGGGFFFFFFFFFFFFFFEEEEEEEEEEEEEEEDDDDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDEEEEEEEEEEEEEEEFFFFFFFFFFFFFFGGGGGGGGGGGHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKLLLLLMMMMMMMMNNNNNNNOOOOOOOOPPPPQQQQQQQRRRRRRSSSSTTTTTTUUUUUUUVVVVVVWWWWXXXXXYYYYYYZZZZZ[[[[\\\\\\]]]]]^^^^^____`````aaaaabbbcccccdddddeeeeeffffggggghhhhhiiiiijjjkkkkklllllmmmmmnnooooopppppqqqrrrrrsssssssrrrrrqqqpppppooooonnmmmmmlllllkkkkkjjjiiiiihhhhhgggggfffeeeeedddddcccccbbbaaaaaa`````____^^^^^]]]]]\\\\\\[[[[ZZZZZYYYYYYXXXXXWWWWVVVVVVUUUUUUTTTTTTTSSSSSRRRRRRQQQQQQPPPPPOOOOOOOONNNNNNMMMMMMMMMLLLLLKKKKKKKKJJJJJJJJJIIIIIIIIIIHHHHHHGGGGGGGGGGGGFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEDDDDDDDDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFGGGGGGGGGGGHHHHHHIIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLMMMMMMMMMNNNNNNOOOOOOOPPPPPQQQQQQQRRRRRRSSSSSTTTTTTUUUUUUVVVVVVVWWWXXXXXYYYYYYYZZZZZ[[[\\\\\\\]]]]]^^^^^___`````aaaaaaabbcccccdddddeeeeeffffggggghhhhhiiiiijjkkkkklllllmmmmmnnnooooopppppqqrrrrrssssssssssrrrrqqqqpppppoooonnnmmmmmllllkkkkkjjjjiiiiihhhhhgggggffeeeeedddddddcccccbbaaaaaa`````____^^^^^]]]]]\\\\\\[[[[ZZZZZYYYYYYXXXXXXXWWWVVVVVVVUUUUUUTTTTTTSSSSRRRRRRQQQQQQQQPPPOOOOOOOONNNNNNNMMMMMMMMMLLLLLKKKKKKKKKJJJJJJJJJIIIIIIIIIIHHHHHHHGGGGGGGGGGGGGFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFGGGGGGGGGGGGHHHHHHHHIIIIIIIIIIJJJJJJJJJKKKKKKKKLLLLLMMMMMMMMMNNNNNNNNOOOOOOOPPPPQQQQQQQRRRRRRRSSSTTTTTTTUUUUUUVVVVVVWWWWXXXXXXYYYYYYZZZZZ[[[[\\\\\\]]]]]^^^^^____`````aaaaaabbbcccccddddddeeeeefffggggghhhhhiiiiijjjkkkkkllllmmmmmnnnnoooopppppqqqrrrrssssstttsssrrrrrqqqqppppooooonnnnmmmlllllkkkkkjjjjiiiiihhhhhgggggfffeeeeedddddccccccbbaaaaaaa`````___^^^^^]]]]]\\\\\\\[[[ZZZZZYYYYYYYXXXXXXWWWWVVVVVVUUUUUUTTTTTTSSSSRRRRRRRRQQQQQQPPPPPOOOOOOONNNNNNNNMMMMMMMLLLLLLLKKKKKKKKJJJJJJJJJJIIIIIIIIIIHHHHHHHHGGGGGGGGGGGGFFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFGGGGGGGGGGGGGHHHHHHHIIIIIIIIIIJJJJJJJJJJKKKKKKKKKLLLLLLMMMMMMMMNNNNNNNOOOOOOOOPPPPPQQQQQQRRRRRRRSSSSTTTTTTUUUUUUUVVVVVVWWWWXXXXXXYYYYYYZZZZZ[[[[\\\\\\]]]]]^^^^^____`````aaaaaabbbccccccdddddeeeeeffggggghhhhhiiiiijjjjkkkkklllllmmmmnnnnooooopppqqqqrrrrrssssttttsssssrrrrrqqpppppooooonnnmmmmmlllllkkkkkjjjiiiiihhhhhgggggfffeeeeedddddccccccbbbaaaaaa`````____^^^^^]]]]]\\\\\\[[[[ZZZZZZYYYYYXXXXXXWWWWVVVVVVUUUUUUTTTTTTTSSSSSRRRRRRQQQQQQQPPPPPOOOOOOOONNNNNNNMMMMMMMMLLLLLLKKKKKKKKKJJJJJJJJJJIIIIIIIIIIIHHHHHHHHGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGHHHHHHHIIIIIIIIIIIIJJJJJJJJJJKKKKKKKKLLLLLLLMMMMMMMNNNNNNNNOOOOOOOPPPPPQQQQQQQQRRRRRRSSSSSTTTTTTUUUUUUVVVVVVVWWWXXXXXXXYYYYYZZZZZZ[[[[\\\\\\]]]]]^^^^^____`````aaaaaabbcccccccdddddeeeeeffggggghhhhhiiiiijjjjkkkkklllllmmmmmnnooooopppppqqqrrrrrssssstttttsssssrrrrrqqpppppooooonnnmmmmmlllllkkkkkjjiiiiihhhhhgggggffffeeeeedddddccccccbbbaaaaaa`````____^^^^^]]]]]]\\\\\[[[[ZZZZZZYYYYYXXXXXXWWWWWVVVVVVVUUUUUUTTTTTTSSSSRRRRRRRQQQQQQQQPPPPOOOOOOONNNNNNNNNMMMMMMMLLLLLLLKKKKKKKKKKJJJJJJJJJJIIIIIIIIIIIHHHHHHHGGGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGHHHHHHHHIIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOPPPPQQQQQQQRRRRRRRRSSSTTTTTTTUUUUUUVVVVVVWWWWWXXXXXXYYYYYZZZZZZZ[[[\\\\\]]]]]]]^^^^^___`````aaaaaaabbccccccdddddeeeeeffffggggghhhhhiiiiijjjkkkkklllllmmmmmnnooooopppppqqqrrrrrssssstttttttsssssrrrrqqqqpppppooonnnnmmmmmlllllkkkkkjjjiiiiihhhhhgggggfffeeeeedddddcccccccbbaaaaaa`````____^^^^^]]]]]]\\\\\[[[[ZZZZZZYYYYYYYXXXXXXWWWWVVVVVVUUUUUUTTTTTTSSSSSRRRRRRRQQQQQQQPPPPPOOOOOOOONNNNNNNNMMMMMMMMMLLLLLKKKKKKKKKKJJJJJJJJJJIIIIIIIIIIIIIHHHHHHHHGGGGGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGHHHHHHHHHIIIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOPPPPPQQQQQQQQRRRRRRSSSSSTTTTTTUUUUUUUVVVVVVWWWWXXXXXXYYYYYYZZZZZZ[[[[\\\\\]]]]]]^^^^^____`````aaaaaabbbccccccdddddeeeeeffffggggghhhhhiiiiijjkkkkklllllmmmmmnnnnoooopppppqqqqrrrsssssttttttttttssssrrrrrqqqqppppooooonnnmmmmmlllllkkkkkjjjiiiiihhhhhgggggffffeeeeedddddcccccbbbaaaaaaa`````___^^^^^]]]]]]]\\\\\[[[ZZZZZZZYYYYYYXXXXXXWWWWVVVVVVUUUUUUTTTTTTTTSSSSRRRRRRRQQQQQQQQPPPPPOOOOOOONNNNNNNNNMMMMMMMMMLLLLLLKKKKKKKKKJJJJJJJJJJJIIIIIIIIIIIIHHHHHHHHHHGGGGGGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGHHHHHHHHHHIIIIIIIIIIIIIJJJJJJJJJJJKKKKKKKKKLLLLLLMMMMMMMMMNNNNNNNNOOOOOOOOPPPPPQQQQQQQRRRRRRRRSSSSTTTTTTTUUUUUUVVVVVVVWWWXXXXXXXYYYYYYZZZZZZ[[[[\\\\\]]]]]]^^^^^____`````aaaaaabbbbcccccdddddeeeeeffffggggghhhhhiiiiijjkkkkklllllmmmmmnnnnoooooppppqqqrrrrrsssstttttuuutttsssssrrrrrqqqpppppooooonnnnmmmmmlllkkkkkjjjjiiiiihhhhhgggggffffeeeeedddddcccccbbbbaaaaaa`````____^^^^^]]]]]]\\\\\\[[[[ZZZZZYYYYYYXXXXXXWWWWWVVVVVVVUUUUUUTTTTTTSSSSSRRRRRRRRQQQQQQQPPPPPOOOOOOOONNNNNNNNMMMMMMMMMLLLLLLKKKKKKKKKKJJJJJJJJJJJJIIIIIIIIIIIIHHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHIIIIIIIIIIIIIJJJJJJJJJJJKKKKKKKKKKLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOPPPPPQQQQQQQQRRRRRRRSSSSSTTTTTTTUUUUUUVVVVVVWWWWWXXXXXXYYYYYYYZZZZZ[[[\\\\\\\]]]]]]^^^^^____`````aaaaaabbbbcccccdddddeeeeefffggggghhhhhiiiiijjjjkkkkkllllmmmmmnnnnooooopppppqqrrrrrsssssttttuuuutttttsssssrrrrrqqpppppooooonnnmmmmmlllllkkkkkjjjiiiiihhhhhgggggffffeeeeedddddccccccbbbaaaaaa`````____^^^^^^]]]]]\\\\\\[[[[ZZZZZZYYYYYYYXXXXXXWWWWVVVVVVUUUUUUTTTTTTTTSSSSSRRRRRRQQQQQQQPPPPPPPOOOOOOONNNNNNNNNMMMMMMMMMLLLLLLKKKKKKKKKKKJJJJJJJJJJJIIIIIIIIIIIIIIHHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHIIIIIIIIIIIIIIJJJJJJJJJJJKKKKKKKKKKKKLLLLLLMMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPQQQQQQQQRRRRRRSSSSSTTTTTTTUUUUUUUVVVVVVWWWWXXXXXXYYYYYYZZZZZZ[[[[\\\\\\]]]]]^^^^^^^___`````aaaaaaabbccccccdddddeeeeeffffggggghhhhhiiiiijjjjkkkkklllllmmmmmnnooooopppppqqqrrrrrssssstttttuuuuutttttsssssrrrrqqqpppppooooonnnmmmmmlllllkkkkkjjjjiiiiihhhhhgggggfffeeeeedddddcccccccbbaaaaaa`````____^^^^^^]]]]]\\\\\\\[[[ZZZZZZZYYYYYYXXXXXXWWWWVVVVVVUUUUUUUUTTTTTTSSSSSRRRRRRRQQQQQQQQPPPPPOOOOOOOOONNNNNNNNMMMMMMMMMMLLLLLLLKKKKKKKKKKKJJJJJJJJJJJJIIIIIIIIIIIIIIHHHHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHIIIIIIIIIIIIIIJJJJJJJJJJJJJKKKKKKKKKKKLLLLLLMMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPQQQQQQQRRRRRRRRSSSSSTTTTTTUUUUUUUVVVVVVVWWWXXXXXXXYYYYYYZZZZZZ[[[[\\\\\\]]]]]^^^^^^____`````aaaaaabbbccccccdddddeeeeeffffggggghhhhhiiiiijjjjkkkkklllllmmmmmnnooooopppppqqqqrrrrssssstttttuuvuuuutttttssssrrrrrqqqqpppppooooonnmmmmmlllllkkkkkjjjjiiiiihhhhhgggggffffeeeeedddddccccccbbaaaaaaa`````___^^^^^^^]]]]]\\\\\\[[[[ZZZZZZYYYYYYXXXXXXWWWWWVVVVVVVUUUUUUTTTTTTTSSSSSRRRRRRRRQQQQQQQPPPPPOOOOOOOOONNNNNNNNNMMMMMMMMMMLLLLLLKKKKKKKKKKKKKJJJJJJJJJJJJIIIIIIIIIIIIIIIIHHHHHHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIJJJJJJJJJJJJJKKKKKKKKKKKKLLLLLLLMMMMMMMMMMNNNNNNNNOOOOOOOOOPPPPPQQQQQQQQRRRRRRRSSSSSTTTTTTTTUUUUUUVVVVVVWWWWWXXXXXXYYYYYYYZZZZZZ[[[[\\\\\\]]]]]^^^^^^____`````aaaaaabbbccccccdddddeeeeeffffggggghhhhhiiiiijjjkkkkklllllmmmmmnnnooooopppppqqqqrrrrrssstttttuuuuvvvuuuttttsssssrrrrrqqqqppppooooonnnmmmmmlllllkkkkkjjjjiiiiihhhhhgggggffffeeeeedddddccccccbbbbaaaaa`````____^^^^^^]]]]]]\\\\\[[[[[ZZZZZZYYYYYYYXXXXXXWWWWVVVVVVUUUUUUUTTTTTTTTSSSSSRRRRRRRQQQQQQQQPPPPPOOOOOOOOONNNNNNNNNNMMMMMMMMLLLLLLLLKKKKKKKKKKKKJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIHHHHHHHHHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJKKKKKKKKKKKKKLLLLLLLMMMMMMMMMNNNNNNNNNNOOOOOOOOOPPPPPQQQQQQQRRRRRRRRSSSSSTTTTTTTUUUUUUUUVVVVVVWWWWXXXXXXYYYYYYZZZZZZ[[[[[\\\\\]]]]]]]^^^^^^____`````aaaaabbbcccccccdddddeeeeefffggggghhhhhiiiiijjjjkkkkklllllmmmmmnnnnoooooppppqqqrrrrrsssssttttuuuuvvvvvuutttttsssssrrrrrqqqpppppooooonnnnmmmmmlllllkkkkkjjjiiiiihhhhhgggggffffeeeeedddddccccccbbbbaaaaa``````____^^^^^]]]]]]\\\\\\\[[[ZZZZZZZYYYYYYXXXXXXWWWWWVVVVVVUUUUUUUUTTTTTTSSSSSRRRRRRRRQQQQQQQQPPPPPOOOOOOOOONNNNNNNNNNMMMMMMMMMMLLLLLLLLKKKKKKKKKKKKJJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIIIIHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJKKKKKKKKKKKKKLLLLLLLMMMMMMMMMMNNNNNNNNNNOOOOOOOOOPPPPPQQQQQQQQQRRRRRRRSSSSSTTTTTTTUUUUUUUVVVVVVWWWWWXXXXXXXYYYYYYZZZZZZ[[[[\\\\\\]]]]]]^^^^^____``````aaaaabbbbccccccdddddeeeeeffffggggghhhhhiiiiijjjjkkkkklllllmmmmmnnnnooooopppppqqrrrrrssssstttttuuuvvvvvvvuuutttttsssssrrrrrqqpppppooooonnnnmmmmmlllllkkkkkjjiiiiiiihhhhhgggggfffeeeeedddddcccccccbbbaaaaa```````___^^^^^]]]]]]]\\\\\\[[[[ZZZZZZYYYYYYXXXXXXWWWWWVVVVVVVVUUUUUUTTTTTTTTSSSSSRRRRRRRQQQQQQQQQPPPPPOOOOOOOOOONNNNNNNNNMMMMMMMMMMMLLLLLLLKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIIIIIIIIHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKLLLLLLLLMMMMMMMMMMMNNNNNNNNNOOOOOOOOOOPPPPPQQQQQQQQRRRRRRRRSSSSSTTTTTTTUUUUUUUVVVVVVVWWWWWXXXXXXYYYYYYYZZZZZZ[[[[\\\\\\]]]]]]^^^^^____``````aaaaabbbbccccccdddddeeeeeffffggggghhhhhiiiiiijjjkkkkklllllmmmmmnnnooooopppppqqqrrrrrssssstttttuuvvvvvvvvvuuuutttttsssssrrrrqqqpppppooooonnnnmmmmmlllllkkkkkjjjiiiiiihhhhhgggggffffeeeeedddddccccccbbbbaaaaa``````____^^^^^^]]]]]\\\\\\[[[[[ZZZZZZYYYYYYYXXXXXXWWWWWVVVVVVUUUUUUUUTTTTTTTSSSSSRRRRRRRRQQQQQQQQPPPPPPPOOOOOOOONNNNNNNNNNMMMMMMMMMMMMLLLLLLLKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKLLLLLLLLMMMMMMMMMMMNNNNNNNNNNOOOOOOOOOPPPPPPQQQQQQQQQRRRRRRRSSSSSTTTTTTTTUUUUUUUVVVVVVVWWWWWXXXXXXYYYYYYZZZZZZ[[[[[\\\\\\\]]]]]^^^^^^____``````aaaaabbbbccccccdddddeeeeeffffggggghhhhhiiiiiijjkkkkklllllmmmmmnnnnooooopppppqqqqrrrrssssstttttuuuvvvvwvvvvvuuuutttttssssrrrrrqqqqpppppooooonnmmmmmllllllkkkkkjjjiiiiiihhhhhgggggffffeeeeedddddccccccbbbbaaaaa``````____^^^^^^]]]]]]\\\\\\\[[[ZZZZZZZYYYYYYXXXXXXWWWWWVVVVVVVVUUUUUUTTTTTTTSSSSSSSRRRRRRRQQQQQQQQQPPPPPPOOOOOOOOONNNNNNNNNNNMMMMMMMMMMMLLLLLLLLLKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKLLLLLLLLLMMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOPPPPPPPQQQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVVWWWWWXXXXXXXYYYYYYZZZZZZ[[[[\\\\\\]]]]]]^^^^^^^___```````aaaaabbbcccccccdddddeeeeefffggggghhhhhiiiiiiijjkkkkkllllllmmmmmnnnooooopppppqqqqrrrrrssstttttuuuuvvvvvwwwvvvvvuutttttsssssrrrrrqqqqpppppooooonnmmmmmlllllkkkkkkkjjiiiiihhhhhhgggggffffeeeeeddddddcccccbbbbaaaaaa`````____^^^^^^]]]]]]]\\\\\\[[[[ZZZZZZYYYYYYYXXXXXXXWWWWWVVVVVVUUUUUUUTTTTTTTTSSSSSSRRRRRRRRQQQQQQQQPPPPPPPOOOOOOOOOONNNNNNNNNNMMMMMMMMMMMMLLLLLLLLLKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKLLLLLLLLMMMMMMMMMMMMMNNNNNNNNNNOOOOOOOOOOPPPPPPQQQQQQQQQRRRRRRRSSSSSSSTTTTTTTUUUUUUUUVVVVVVWWWWWXXXXXXYYYYYYYYZZZZZZ[[[[\\\\\\]]]]]]^^^^^^____`````aaaaaabbbbcccccddddddeeeeeffffggggghhhhhhiiiiijjjkkkkkklllllmmmmmnnnooooopppppqqqrrrrrssssstttttuuuvvvvvwwwwwvvvvvuutttttsssssrrrrrqqqqpppppooooonnnmmmmmlllllkkkkkkjjiiiiihhhhhhhgggggfffeeeeedddddddcccccbbbaaaaaaa`````_____^^^^^]]]]]]\\\\\\[[[[[ZZZZZZYYYYYYYXXXXXXWWWWWVVVVVVVUUUUUUUUTTTTTTTSSSSSRRRRRRRRRQQQQQQQQQPPPPPPOOOOOOOOOONNNNNNNNNNNMMMMMMMMMMMMMLLLLLLLLLLKKKKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKLLLLLLLLLLMMMMMMMMMMMMNNNNNNNNNNNOOOOOOOOOOPPPPPPPQQQQQQQQRRRRRRRRRSSSSSTTTTTTTTUUUUUUUVVVVVVVVWWWWWXXXXXXYYYYYYZZZZZZ[[[[[\\\\\\\]]]]]]^^^^^_____`````aaaaaabbbbcccccddddddeeeeeffffggggghhhhhhiiiiijjjkkkkkklllllmmmmmnnooooopppppqqqqrrrrrssssstttttuuuvvvvvwwwwwwwvvvvvuuutttttsssssrrrrrqqpppppooooonnnnmmmmmlllllkkkkkjjjjiiiiihhhhhhgggggffffeeeeeddddddcccccbbbbaaaaaa``````____^^^^^^]]]]]]\\\\\\\[[[ZZZZZZZYYYYYYYXXXXXXWWWWWVVVVVVVVUUUUUUUTTTTTTTTSSSSSRRRRRRRRRQQQQQQQQQQPPPPPPOOOOOOOOOONNNNNNNNNNNMMMMMMMMMMMMMMLLLLLLLLLLKKKKKKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLMMMMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOOPPPPPPQQQQQQQQQQRRRRRRRRRSSSSSTTTTTTTUUUUUUUUVVVVVVVWWWWWXXXXXXYYYYYYYYZZZZZZ[[[[\\\\\\]]]]]]^^^^^^^___```````aaaaaabbbbcccccddddddeeeeeffffggggghhhhhhiiiiijjjjkkkkklllllmmmmmnnnooooopppppqqqrrrrrssssstttttuuvvvvvwwwwwwwwwvvvvvuuuutttttsssssrrrrrqqpppppooooonnnnmmmmmlllllkkkkkjjjjiiiiihhhhhhgggggffffeeeeeddddddcccccbbbbaaaaaa``````____^^^^^^]]]]]]]\\\\\\[[[[ZZZZZZZYYYYYYXXXXXXXXWWWWVVVVVVVUUUUUUUUUTTTTTTTSSSSSRRRRRRRRRQQQQQQQQQQPPPPPPOOOOOOOOOOOONNNNNNNNNNNNMMMMMMMMMMMMMMLLLLLLLLLLLKKKKKKKKKKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLMMMMMMMMMMMMMNNNNNNNNNNNNNOOOOOOOOOOOPPPPPPQQQQQQQQQQRRRRRRRRRSSSSSTTTTTTTTUUUUUUUUVVVVVVVVWWWWXXXXXXXYYYYYYZZZZZZZZ[[[[\\\\\\]]]]]]^^^^^^____``````aaaaaaabbbcccccdddddddeeeeefffggggghhhhhhhiiiiijjjkkkkklllllmmmmmnnnnooooopppppqqqrrrrrssssstttttuuuvvvvvwwwwxwwwwwvvvvvuuuutttttsssssrrrrrqqqpppppooooonnnmmmmmlllllkkkkkjjjjiiiiihhhhhhgggggffffeeeeeddddddcccccccbbbaaaaa```````___^^^^^^^]]]]]]\\\\\\[[[[[ZZZZZZYYYYYYYYXXXXXXWWWWWVVVVVVVVUUUUUUUTTTTTTTTTSSSSSRRRRRRRRRRQQQQQQQQQPPPPPPPOOOOOOOOOOONNNNNNNNNNNNNMMMMMMMMMMMMMMMLLLLLLLLLLLLKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLMMMMMMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOOOPPPPPPPPQQQQQQQQQRRRRRRRRRRSSSSSTTTTTTTTUUUUUUUUVVVVVVVWWWWWXXXXXXXYYYYYYYZZZZZZ[[[[[\\\\\\\]]]]]]^^^^^^____``````aaaaabbbbccccccddddddeeeeeffffggggghhhhhhiiiiijjjjkkkkklllllmmmmmnnnnooooopppppqqrrrrrssssstttttuuuuvvvvvwwwwwxxxwwwwwvvvvvuuuttttsssssrrrrrqqqqpppppooooonnnnmmmmmlllllkkkkkjjjiiiiihhhhhhhgggggfffeeeeeeedddddccccccbbbbaaaaaa`````_____^^^^^^]]]]]]\\\\\\\[[[ZZZZZZZZYYYYYYXXXXXXXXWWWWWVVVVVVVUUUUUUUUTTTTTTTTSSSSSSSRRRRRRRRQQQQQQQQQQPPPPPPPPOOOOOOOOOOONNNNNNNNNNNNNNMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNOOOOOOOOOOOOPPPPPPPQQQQQQQQQQRRRRRRRRRSSSSSSTTTTTTTTTUUUUUUUVVVVVVVVWWWWWXXXXXXXYYYYYYYZZZZZZZ[[[[\\\\\\]]]]]]^^^^^^^_____`````aaaaaabbbbccccccdddddeeeeeeffffggggghhhhhhiiiiijjjjkkkkklllllmmmmmnnnnooooopppppqqqrrrrrsssssttttuuuuvvvvvwwwwwxxxxxwwwwwvvvvvuutttttsssssrrrrrqqqqpppppooooonnnnmmmmmlllllkkkkkjjjjiiiiiihhhhhgggggffffeeeeeedddddccccccbbbbaaaaaa``````____^^^^^^]]]]]]]\\\\\\[[[[[ZZZZZZYYYYYYYYXXXXXXXWWWWWVVVVVVVVUUUUUUUTTTTTTTTTSSSSSSRRRRRRRRRQQQQQQQQQQPPPPPPPOOOOOOOOOOOOONNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNOOOOOOOOOOOOPPPPPPPPQQQQQQQQQQRRRRRRRRSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVWWWWWXXXXXXXXYYYYYYYZZZZZZZ[[[[[\\\\\\]]]]]]^^^^^^____``````aaaaaaabbbcccccccdddddeeeeeeffffggggghhhhhiiiiiijjjjkkkkklllllmmmmmnnnooooopppppqqqqrrrrrssssstttttuuuvvvvvwwwwwxxxxxxxwwwwwvvvvvuuutttttsssssrrrrrqqqpppppooooonnnnmmmmmlllllkkkkkjjjjiiiiiihhhhhgggggffffeeeeeedddddccccccbbbbaaaaaa```````___^^^^^^^]]]]]]\\\\\\\[[[[ZZZZZZZZYYYYYYXXXXXXXWWWWWVVVVVVVVVUUUUUUUUTTTTTTTTSSSSSSSRRRRRRRRRRQQQQQQQQQQPPPPPPPOOOOOOOOOOOOOONNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNOOOOOOOOOOOOOPPPPPPPPQQQQQQQQQQRRRRRRRRRRSSSSSSTTTTTTTTTUUUUUUUVVVVVVVVVWWWWWXXXXXXXXYYYYYYZZZZZZZ[[[[\\\\\\\\]]]]]]^^^^^^____``````aaaaaabbbbccccccdddddeeeeeeefffggggghhhhhiiiiiiijjjkkkkklllllmmmmmnnnnooooopppppqqqqrrrrrssssstttttuuvvvvvwwwwwxxxxxxxxxxwwwwwvvvvuuuutttttsssssrrrrrqqqqpppppooooonnnmmmmmlllllkkkkkjjjjiiiiiihhhhhgggggffffeeeeeedddddddcccccbbbaaaaaaa``````_____^^^^^^]]]]]]\\\\\\\[[[[[ZZZZZZYYYYYYYXXXXXXXXWWWWWVVVVVVVVVUUUUUUUTTTTTTTTTSSSSSSRRRRRRRRRRQQQQQQQQQQQPPPPPPPPOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOPPPPPPPQQQQQQQQQQQRRRRRRRRRRSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVVWWWWWXXXXXXXYYYYYYYYZZZZZZ[[[[[\\\\\\]]]]]]^^^^^^^_____``````aaaaaabbbbcccccddddddeeeeeeffffggggghhhhhiiiiiijjjjkkkkklllllmmmmmnnnnooooopppppqqqqrrrrrssssstttttuuuvvvvwwwwwxxxxxyyyxxxwwwwwvvvvvuuuutttttsssssrrrrrqqqqpppppooooonnnnmmmmmlllllkkkkkjjjiiiiiiihhhhhggggggffffeeeeeddddddccccccbbbbaaaaaa``````____^^^^^^]]]]]]]\\\\\\\[[[[ZZZZZZZYYYYYYYYXXXXXXXWWWWWVVVVVVVVVUUUUUUUUTTTTTTTTTTSSSSSSRRRRRRRRRRQQQQQQQQQQQPPPPPPPPPOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOPPPPPPPPQQQQQQQQQQQQRRRRRRRRRRSSSSSSTTTTTTTTTTUUUUUUUVVVVVVVVVWWWWWXXXXXXXXYYYYYYYZZZZZZZZ[[[\\\\\\\\]]]]]]^^^^^^____``````aaaaaaabbbcccccccddddddeeeeeffffgggggghhhhhiiiiiijjjjkkkkklllllmmmmmnnnnooooopppppqqqrrrrrssssstttttuuuuvvvvvwwwwwxxxxyyyyxxxxxwwwwwvvvvvuuutttttsssssrrrrrqqqqpppppooooonnnnmmmmmlllllkkkkkjjjjiiiiiihhhhhggggggffffeeeeeddddddccccccbbbbaaaaaa```````___^^^^^^^]]]]]]]\\\\\\[[[[[ZZZZZZZZYYYYYYYXXXXXXXXWWWWWVVVVVVVVVUUUUUUUTTTTTTTTTTSSSSSSRRRRRRRRRRRRQQQQQQQQQQQPPPPPPPPPOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOPPPPPPPPPQQQQQQQQQQQRRRRRRRRRRRSSSSSSTTTTTTTTTTUUUUUUUUVVVVVVVVVWWWWWXXXXXXXYYYYYYYYZZZZZZZ[[[[[\\\\\\]]]]]]]]^^^^^^____``````aaaaaabbbbccccccdddddddeeeeefffggggggghhhhhiiiiiijjjjkkkkklllllmmmmmnnnooooopppppqqqqrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrqqqpppppooooonnnnmmmmmlllllkkkkkkjjjiiiiiihhhhhggggggffffeeeeeedddddcccccccbbbaaaaaaa``````_____^^^^^^]]]]]]\\\\\\\\[[[[ZZZZZZZYYYYYYYYXXXXXXXXWWWWWVVVVVVVVVUUUUUUUUUTTTTTTTTTSSSSSSSRRRRRRRRRRRQQQQQQQQQQQQPPPPPPPPPPOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQQRRRRRRRRRRRSSSSSSSSTTTTTTTTTUUUUUUUUVVVVVVVVVWWWWWXXXXXXXXXYYYYYYYZZZZZZZZ[[[[\\\\\\\]]]]]]^^^^^^^_____``````aaaaaabbbbccccccdddddeeeeeeffffgggggghhhhhiiiiiiijjkkkkkklllllmmmmmnnnnooooopppppqqqqrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyzyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrqqqqpppppooooonnnmmmmmlllllkkkkkkkjjiiiiiihhhhhgggggggfffeeeeeeedddddccccccbbbbbaaaaaa``````____^^^^^^]]]]]]]]\\\\\\[[[[[ZZZZZZZZYYYYYYYXXXXXXXXWWWWWWVVVVVVVVVUUUUUUUUTTTTTTTTTTSSSSSSSRRRRRRRRRRRQQQQQQQQQQQQQQPPPPPPPPPPOOOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQQQQQRRRRRRRRRRRSSSSSSTTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWXXXXXXXYYYYYYYYZZZZZZZ[[[[[\\\\\\\]]]]]]]^^^^^^____``````aaaaaaabbbbbccccccdddddeeeeeeffffgggggghhhhhiiiiiijjjkkkkkklllllmmmmmnnnnooooopppppqqqqrrrrrssssstttttuuuvvvvvwwwwwxxxxxyyyyzzzyyyxxxxxwwwwwvvvvvuuuttttttsssssrrrrrqqqppppppooooonnnnmmmmmlllllkkkkkkjjjjiiiiihhhhhhgggggffffeeeeeeddddddccccccbbbbaaaaaa```````___^^^^^^^^]]]]]]\\\\\\\\[[[[[ZZZZZZZYYYYYYYYXXXXXXXWWWWWWVVVVVVVVVUUUUUUUUUTTTTTTTTTTSSSSSSSRRRRRRRRRRRRRQQQQQQQQQQQQQQPPPPPPPPPPOOOOOOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQQQQQRRRRRRRRRRRRSSSSSSSSTTTTTTTTTTUUUUUUUUVVVVVVVVVWWWWWWXXXXXXXXYYYYYYYZZZZZZZZ[[[[[\\\\\\\]]]]]]]^^^^^^^____``````aaaaaabbbbccccccdddddddeeeeeeffffggggghhhhhhiiiiijjjjkkkkkklllllmmmmmnnnnoooooppppppqqrrrrrssssstttttttuuvvvvvwwwwwxxxxxyyyyzzzzzyyyyxxxxxwwwwwvvvvvuutttttssssssrrrrrqqqppppppooooonnnnmmmmmlllllkkkkkkjjjjiiiiihhhhhhgggggffffeeeeeeddddddcccccccbbbaaaaaaa``````_____^^^^^^]]]]]]]]\\\\\\\[[[[ZZZZZZZYYYYYYYYYXXXXXXXXWWWWWWVVVVVVVVVUUUUUUUUUUTTTTTTTTTTSSSSSSSRRRRRRRRRRRRRQQQQQQQQQQQQQQQPPPPPPPPPPPOOOOOOOOOOOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPQQQQQQQQQQQQQQQRRRRRRRRRRRRSSSSSSSSTTTTTTTTTTUUUUUUUUUUVVVVVVVVVWWWWWWXXXXXXXYYYYYYYYYZZZZZZZZ[[[\\\\\\\\]]]]]]]^^^^^^^_____``````aaaaaabbbbccccccddddddeeeeeeefffggggghhhhhhhiiiiijjjkkkkkkklllllmmmmmnnnooooopppppppqqrrrrrsssssstttttuuuvvvvvwwwwwxxxxxyyyyzzzzzzzyyyyxxxxxwwwwwvvvvvuutttttsssssrrrrrrrqqppppppooooonnnnmmmmmlllllkkkkkkjjjjiiiiihhhhhhgggggfffffeeeeedddddddccccccbbbbbaaaaaa``````____^^^^^^^^]]]]]]\\\\\\\[[[[[ZZZZZZZZYYYYYYYYYXXXXXXXWWWWWWVVVVVVVVVUUUUUUUUUUTTTTTTTTTTTSSSSSSSSRRRRRRRRRRRRQQQQQQQQQQQQQQQQQPPPPPPPPPPPPPOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQRRRRRRRRRRRRRSSSSSSSTTTTTTTTTTTUUUUUUUUUUVVVVVVVVVWWWWWWXXXXXXXXYYYYYYYYYZZZZZZZ[[[[[\\\\\\\\]]]]]]^^^^^^^____``````aaaaaaabbbbbccccccddddddeeeeefffffggggghhhhhhiiiiijjjjkkkkkklllllmmmmmnnnnoooooppppppqqqrrrrrrssssstttttuuuvvvvvwwwwwxxxxxyyyzzzzzzzzzzyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqpppppppooooonnnmmmmmlllllkkkkkkkjjjiiiiihhhhhhhggggggffffeeeeeeddddddccccccbbbbaaaaaa```````_____^^^^^^]]]]]]]\\\\\\\\[[[[[ZZZZZZZYYYYYYYYYXXXXXXXXWWWWWWVVVVVVVVVVUUUUUUUUUUTTTTTTTTTTTSSSSSSSSRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQPPPPPPPPPPPPPPPOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRSSSSSSSTTTTTTTTTTTTUUUUUUUUUUVVVVVVVVVVWWWWWWXXXXXXXYYYYYYYYYZZZZZZZZ[[[[[\\\\\\\]]]]]]]]^^^^^^_____``````aaaaaabbbbccccccdddddddeeeeeeffffgggggghhhhhhiiiiijjjjkkkkkklllllmmmmmnnnnoooooppppppqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyzzzzz{{{zzzzzyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqppppppooooonnnnmmmmmllllllkkkkkjjjjiiiiiihhhhhggggggffffeeeeeeddddddcccccccbbbaaaaaaa```````____^^^^^^^]]]]]]]]\\\\\\\[[[[[ZZZZZZZZYYYYYYYYYXXXXXXXXWWWWWVVVVVVVVVVUUUUUUUUUUTTTTTTTTTTTTTSSSSSSSSSRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQPPPPPPPPPPPPPPPPPPPPOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRSSSSSSSSSTTTTTTTTTTTTUUUUUUUUUUVVVVVVVVVVWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZ[[[[[\\\\\\\\]]]]]]]^^^^^^^^___````````aaaaaabbbbccccccddddddeeeeeeefffggggggghhhhhiiiiiijjjjkkkkkllllllmmmmmnnnnoooooppppppqqrrrrrrrssssstttttuuuvvvvvwwwwwxxxxxyyyzzzzz{{{{{zzzzzyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqppppppooooonnnnmmmmmllllllkkkkkjjjjiiiiiihhhhhggggggffffeeeeeedddddddccccccbbbbbaaaaaa``````_____^^^^^^^^]]]]]]\\\\\\\\[[[[[[ZZZZZZZYYYYYYYYYXXXXXXXXXWWWWWWVVVVVVVVVVUUUUUUUUUUTTTTTTTTTTTTTSSSSSSSSRRRRRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRSSSSSSSSSTTTTTTTTTTTTUUUUUUUUUUVVVVVVVVVVWWWWWWWXXXXXXXXYYYYYYYYYZZZZZZZZ[[[[[[\\\\\\\]]]]]]]^^^^^^^_____``````aaaaaaabbbbbccccccddddddeeeeeeffffgggggghhhhhiiiiiiijjjkkkkklllllllmmmmmnnnooooopppppppqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyzzzzz{{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuutttttsssssrrrrrrrqqppppppooooonnnnmmmmmllllllkkkkkjjjjiiiiiihhhhhhhgggggfffffeeeeeeddddddccccccbbbbaaaaaa````````_____^^^^^^]]]]]]]]\\\\\\\[[[[[ZZZZZZZZZYYYYYYYYYXXXXXXXXWWWWWWWVVVVVVVVVVUUUUUUUUUUUTTTTTTTTTTTTSSSSSSSSSSRRRRRRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTTTTUUUUUUUUUUUVVVVVVVVVVWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZ[[[[[\\\\\\\\]]]]]]]^^^^^^^_____```````aaaaaabbbbccccccdddddddeeeeeefffffggggghhhhhhiiiiiijjjjkkkkkllllllmmmmmnnnnoooooppppppqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyyzzzzz{{{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqpppppppooooonnnmmmmmlllllllkkkkkjjjiiiiiiihhhhhhggggggffffeeeeeeddddddcccccccbbbbbaaaaaa``````_____^^^^^^^^]]]]]]]\\\\\\\\[[[[[ZZZZZZZZYYYYYYYYYXXXXXXXXXWWWWWWWVVVVVVVVVVUUUUUUUUUUUUTTTTTTTTTTTTTSSSSSSSSSSRRRRRRRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTTTTTUUUUUUUUUUUVVVVVVVVVVWWWWWWWWXXXXXXXXYYYYYYYYYZZZZZZZZZ[[[[[\\\\\\\]]]]]]]]^^^^^^^_____```````aaaaaabbbbbccccccddddddeeeeeeefffggggggghhhhhhiiiiiijjjjkkkkkllllllmmmmmnnnnoooooppppppqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyzzzzz{{{{{{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqppppppooooonnnnmmmmmllllllkkkkkkjjjjiiiiihhhhhhggggggffffeeeeeedddddddccccccbbbbbaaaaaa````````_____^^^^^^^]]]]]]]]\\\\\\\[[[[[ZZZZZZZZZYYYYYYYYYXXXXXXXXXXWWWWWWVVVVVVVVVVVUUUUUUUUUUUTTTTTTTTTTTTTTTSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTTTTTTUUUUUUUUUUUVVVVVVVVVVVVWWWWWWXXXXXXXXXXYYYYYYYYYZZZZZZZZ[[[[[\\\\\\\\]]]]]]]^^^^^^^^_____```````aaaaaaabbbbbccccccddddddeeeeeeffffgggggghhhhhhhiiiiijjjkkkkkkkllllllmmmmmnnnnoooooppppppqqrrrrrrrssssstttttuuuvvvvvwwwwwxxxxxyyyyzzzzz{{{{{|||{{{{{zzzzzyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqppppppooooonnnnmmmmmmlllllkkkkkkjjjjiiiiiihhhhhgggggggfffffeeeeeeddddddccccccbbbbaaaaaaaa```````____^^^^^^^]]]]]]]]\\\\\\\\\[[[[[ZZZZZZZZYYYYYYYYYXXXXXXXXXXWWWWWWWWVVVVVVVVVVVUUUUUUUUUUUUTTTTTTTTTTTTTTTSSSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSTTTTTTTTTTTTTTTUUUUUUUUUUUUUVVVVVVVVVVVWWWWWWWXXXXXXXXXXYYYYYYYYYZZZZZZZZZ[[[[[\\\\\\\\\]]]]]]]^^^^^^^^___````````aaaaaaabbbbccccccdddddddeeeeeefffffgggggghhhhhiiiiiijjjjkkkkkklllllmmmmmmmnnnooooopppppppqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyyzzzzz{{{{{|||||{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuutttttsssssrrrrrrrqqppppppooooonnnnmmmmmmlllllkkkkkkkjjjiiiiiiihhhhhhggggggffffeeeeeeddddddcccccccbbbbbaaaaaa```````_____^^^^^^^^]]]]]]]\\\\\\\\\[[[[[ZZZZZZZZZYYYYYYYYYYXXXXXXXXXXWWWWWWVVVVVVVVVVVVVUUUUUUUUUUUUTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTUUUUUUUUUUUUUVVVVVVVVVVVVWWWWWWWXXXXXXXXXXYYYYYYYYYYZZZZZZZZ[[[[[\\\\\\\\\]]]]]]]]^^^^^^^_____````````aaaaaabbbbbccccccddddddeeeeeeefffggggggghhhhhhiiiiiijjjjkkkkkklllllmmmmmmnnnnoooooppppppqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyyzzzzz{{{{{|||||||{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqqpppppooooonnnmmmmmmmlllllkkkkkkjjjjiiiiiihhhhhhggggggffffeeeeeeddddddddccccccbbbbaaaaaaa````````_____^^^^^^^]]]]]]]]\\\\\\\\\[[[[[ZZZZZZZZYYYYYYYYYYXXXXXXXXXXWWWWWWWWVVVVVVVVVVVVUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUVVVVVVVVVVVVVWWWWWWWXXXXXXXXXXYYYYYYYYYYZZZZZZZZZ[[[[[\\\\\\\\\]]]]]]]^^^^^^^^_____```````aaaaaaaabbbcccccccdddddddeeeeeeffffgggggghhhhhhhiiiiiijjjjkkkkkklllllmmmmmmnnnnooooopppppqqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyzzzzz{{{{{||||||||||{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqqpppppooooonnnnmmmmmmllllllkkkkkjjjjiiiiiihhhhhhgggggggfffffeeeeeeddddddccccccbbbbbaaaaaaaa```````____^^^^^^^^^]]]]]]]\\\\\\\\\[[[[[ZZZZZZZZZZYYYYYYYYYYXXXXXXXXXXWWWWWWWWVVVVVVVVVVVVUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUVVVVVVVVVVVVVWWWWWWWXXXXXXXXXXYYYYYYYYYYZZZZZZZZZZ[[[[[\\\\\\\\\]]]]]]]]^^^^^^^^____````````aaaaaaabbbbbccccccdddddddeeeeeefffffgggggghhhhhhiiiiiiijjjkkkkklllllllmmmmmmnnnnooooopppppqqqrrrrrrrssssstttttuuuvvvvvwwwwwxxxxxyyyyzzzzz{{{{{|||||}}}|||||{{{{{zzzzzyyxxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqqpppppoooooonnnnmmmmmllllllkkkkkkkjjjiiiiiiihhhhhhggggggffffeeeeeeddddddccccccccbbbbbaaaaaa````````_____^^^^^^^^]]]]]]]]\\\\\\\\\[[[[[[ZZZZZZZZZYYYYYYYYYYXXXXXXXXXXXWWWWWWWVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVWWWWWWWWXXXXXXXXXXXYYYYYYYYYYZZZZZZZZZ[[[[[[\\\\\\\\\]]]]]]]^^^^^^^^^_____```````aaaaaaabbbbbcccccccddddddeeeeeeefffggggggghhhhhhiiiiiijjjjkkkkkkllllllmmmmmnnnnoooooopppppqqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxxyyyzzzzz{{{{{|||||}}}}||||||{{{{{zzzzzyyxxxxxxxwwwwwvvvvvuuutttttsssssrrrrrrrqqqpppppooooooonnnmmmmmlllllllkkkkkkjjjjiiiiiihhhhhhggggggffffeeeeeeeeddddddccccccbbbbbaaaaaaaa```````_____^^^^^^^^]]]]]]]]\\\\\\\\\[[[[[[ZZZZZZZZZZYYYYYYYYYYXXXXXXXXXXXXWWWWWWWWVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVWWWWWWWWWXXXXXXXXXXXYYYYYYYYYYZZZZZZZZZZ[[[[[[\\\\\\\\\]]]]]]]]]^^^^^^^_____````````aaaaaaabbbbbcccccccddddddeeeeeeeffffgggggghhhhhhhiiiiiijjjjkkkkkkllllllmmmmmnnnnoooooopppppqqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxxyyyzzzzz{{{{{||||||}}}}}|||||{{{{{zzzzzzyyyxxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqqpppppoooooonnnnmmmmmmlllllkkkkkkjjjjiiiiiihhhhhhgggggggfffffeeeeeeddddddccccccccbbbbbaaaaaaa````````_____^^^^^^^]]]]]]]]]\\\\\\\\\[[[[[[ZZZZZZZZZZYYYYYYYYYYYXXXXXXXXXXXWWWWWWWWWVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVWWWWWWWWWXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZ[[[[[[\\\\\\\\\]]]]]]]]^^^^^^^^_____```````aaaaaaaabbbbbcccccccdddddddeeeeeefffffgggggghhhhhhiiiiiiijjjkkkkkkklllllmmmmmmnnnnoooooopppppqqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxxyyzzzzzzz{{{{{|||||}}~~~}}|||||{{{{{zzzzzzyyyxxxxxwwwwwwvvvvvuuuutttttssssssrrrrrqqqqpppppoooooonnnnmmmmmmlllllkkkkkkjjjjjiiiiiiihhhhhhggggggffffeeeeeeedddddddcccccccbbbbaaaaaaa`````````_____^^^^^^^^]]]]]]]]\\\\\\\\\[[[[[[[[ZZZZZZZZZZYYYYYYYYYYXXXXXXXXXXXXWWWWWWWWWWVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVWWWWWWWWWWXXXXXXXXXXXXXYYYYYYYYYYZZZZZZZZZZ[[[[[[[\\\\\\\\\]]]]]]]]]^^^^^^^_____`````````aaaaaaaabbbccccccccddddddeeeeeeeefffggggggghhhhhhiiiiiijjjjjkkkkkklllllmmmmmmmnnnooooooopppppqqqrrrrrssssssstttttuuuvvvvvwwwwwwwxxxxxyyzzzzzz{{{{{|||||}}}~~~~}}}|||||{{{{{zzzzzzzyyxxxxxwwwwwwvvvvvuuuutttttssssssrrrrrqqqqppppppooooonnnnmmmmmmlllllllkkkkkkjjjjiiiiiihhhhhhggggggfffffeeeeeeedddddddccccccbbbbbaaaaaaaa```````_______^^^^^^^]]]]]]]]]\\\\\\\\\\[[[[[[ZZZZZZZZZZYYYYYYYYYYYXXXXXXXXXXXXXXWWWWWWWWWVVVVVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVWWWWWWWWXXXXXXXXXXXXXXYYYYYYYYYYYZZZZZZZZZZ[[[[[[[\\\\\\\\\\]]]]]]]]^^^^^^^^______````````aaaaaaabbbbbccccccddddddddeeeeeefffffgggggghhhhhhhiiiiiijjjjkkkkkkllllllmmmmmmnnnnoooooppppppqqqqrrrrrsssssstttttuuuuvvvvvwwwwwwxxxxxyyyzzzzzz{{{{{|||||}}}}~~~~~}}}}|||||{{{{{zzzzzyyyxxxxxwwwwwwwvvvvvuuutttttsssssssrrrrrqqqpppppppooooonnnmmmmmmmllllllkkkkkkjjjjiiiiiihhhhhhggggggggffffeeeeeeeddddddccccccccbbbbbaaaaaaa````````______^^^^^^^^]]]]]]]]]]\\\\\\\\[[[[[[[ZZZZZZZZZZZYYYYYYYYYYYYXXXXXXXXXXXXXWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWXXXXXXXXXXXXYYYYYYYYYYYYYZZZZZZZZZZZ[[[[[[\\\\\\\\\]]]]]]]]]]^^^^^^^_______```````aaaaaaaabbbbbcccccccddddddeeeeeeeeffffggggggghhhhhhiiiiiiijjjkkkkkkkllllllmmmmmmnnnnoooooppppppqqqqrrrrrsssssstttttuuuuvvvvvwwwwwwxxxxxyyyyzzzzz{{{{{|||||}}}}~~~~~~~}}}}|||||{{{{{zzzzzyyyyxxxxxwwwwwwvvvvvuuuutttttssssssrrrrrqqqqppppppoooooonnnnmmmmmllllllkkkkkkjjjjjiiiiiiihhhhhhggggggfffffeeeeeeddddddddcccccccbbbbbaaaaaaaa```````_______^^^^^^^^]]]]]]]]]\\\\\\\\\\[[[[[[ZZZZZZZZZZZZYYYYYYYYYYYYXXXXXXXXXXXXXXWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWXXXXXXXXXXXXXYYYYYYYYYYYYYZZZZZZZZZZZ[[[[[[\\\\\\\\\\]]]]]]]]]^^^^^^^^^______````````aaaaaaabbbbbccccccccdddddddeeeeeefffffggggggghhhhhhiiiiiijjjjjkkkkkklllllllmmmmmnnnoooooooppppppqqqqrrrrrsssssstttttuuuuvvvvvwwwwwwxxxxxyyyyzzzzz{{{{{|||||}}}~~~~~~~~~~}}}}|||||{{{{{zzzzzyyyyxxxxxwwwwwwvvvvvuuuutttttssssssrrrrrqqqqppppppoooooonnnnmmmmmmlllllllkkkkkkjjjjiiiiiihhhhhhggggggggfffeeeeeeeeddddddccccccccbbbbbaaaaaaaa````````______^^^^^^^^^]]]]]]]]]\\\\\\\\\\[[[[[[[ZZZZZZZZZZZYYYYYYYYYYYYYXXXXXXXXXXXXXXXWWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWXXXXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZZ[[[[[[[[\\\\\\\\\\]]]]]]]]]^^^^^^^^_______```````aaaaaaaaabbbbbcccccccdddddddeeeeeeeffffggggggghhhhhhhiiiiiijjjjkkkkkkllllllmmmmmmnnnnoooooopppppppqqqrrrrrssssssstttttuuuvvvvvwwwwwwwxxxxxyyyzzzzz{{{{{|||||}}}}~~~~~~~~~~}}}|||||{{{{{zzzzzyyyyxxxxxwwwwwwvvvvvuuuuttttttsssssrrrrrrrqqqpppppooooooonnnmmmmmmmllllllkkkkkkjjjjiiiiiihhhhhhhhggggggfffffeeeeeeddddddddcccccccbbbbbaaaaaaaaa```````_______^^^^^^^^]]]]]]]]]]\\\\\\\\\\[[[[[[[[ZZZZZZZZZZZYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYZZZZZZZZZZZZ[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^^______````````aaaaaaaabbbbbccccccccdddddddeeeeeeefffffgggggghhhhhhhiiiiiiijjjkkkkkkkllllllmmmmmmnnnnoooooopppppqqqqrrrrrrsssssttttttuuuuvvvvvwwwwwwxxxxxyyyyzzzzz{{{{{|||||}}}}~~~~~~~~~~}}}}|||||{{{{{zzzzzyyyxxxxxxxwwwwwvvvvvuuutttttttsssssrrrrrrqqqqpppppoooooonnnnmmmmmmllllllkkkkkkjjjjjiiiiiiihhhhhhgggggggffffeeeeeeeedddddddccccccccbbbbbaaaaaaa`````````______^^^^^^^^^]]]]]]]]]]\\\\\\\\\\[[[[[[[ZZZZZZZZZZZZZYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYZZZZZZZZZZZZ[[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^_______````````aaaaaaaabbbbbcccccccddddddddeeeeeeeffffgggggggghhhhhhiiiiiijjjjjkkkkkklllllllmmmmmmnnnnoooooopppppqqqqrrrrrrsssssttttttuuuuvvvvvwwwwwxxxxxxyyyyzzzzz{{{{{|||||}}}}~~~~~~~~~~}}}}|||||{{{{{zzzzzyyyyxxxxxxwwwwwvvvvvuuuuttttttsssssrrrrrrqqqqppppppooooonnnnnmmmmmmlllllllkkkkkkjjjjiiiiiihhhhhhhgggggggfffffeeeeeeeddddddddcccccccbbbbbaaaaaaaa````````_______^^^^^^^^^^]]]]]]]]]]\\\\\\\\\\[[[[[[[ZZZZZZZZZZZZZZYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYZZZZZZZZZZZZZ[[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^^^______`````````aaaaaaabbbbbccccccccdddddddeeeeeeeefffffgggggghhhhhhhhiiiiiijjjjkkkkkkllllllmmmmmmnnnnnooooopppppppqqqrrrrrrrsssssttttttuuuuvvvvvwwwwwxxxxxxyyyyzzzzz{{{{{|||||}}}~~~~~~~~~~}}}}|||||{{{{{zzzzzyyyyxxxxxxwwwwwvvvvvuuuuttttttsssssrrrrrrqqqqppppppooooooonnnmmmmmmmllllllkkkkkkjjjjiiiiiiihhhhhhhgggggggffffeeeeeeeddddddddcccccccccbbbbbaaaaaaa`````````______^^^^^^^^^^]]]]]]]]]]\\\\\\\\\\\[[[[[[[[[ZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZ[[[[[[[[[\\\\\\\\\\\]]]]]]]]]]^^^^^^^^^^_______````````aaaaaaaabbbbbcccccccccdddddddeeeeeeeefffgggggggghhhhhhiiiiiiiijjjkkkkkkkllllllmmmmmmnnnnooooooppppppqqqqrrrrrrssssstttttttuuuvvvvvwwwwwxxxxxxxyyyzzzzz{{{{{|||||}}}}~~~~~€€€~~~~~}}}|||||{{{{{zzzzzyyyyxxxxxxwwwwwvvvvvuuuuttttttsssssssrrrrrqqqpppppppoooooonnnnmmmmmmllllllkkkkkkjjjjjiiiiiiihhhhhhhggggggfffffeeeeeeeedddddddccccccccbbbbbbaaaaaaaa``````````______^^^^^^^^^]]]]]]]]]]]\\\\\\\\\\\[[[[[[[[[ZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZ[[[[[[[[\\\\\\\\\\\\]]]]]]]]]]]^^^^^^^^^______``````````aaaaaaabbbbbbbcccccccddddddddeeeeeeefffffgggggghhhhhhhhiiiiiijjjjjkkkkkklllllllmmmmmmnnnnooooooppppppqqqqrrrrrssssssttttttuuuuvvvvvwwwwwxxxxxxyyyyzzzzz{{{{{|||||}}}}~~~~~€€€€€~~~~~}}}}|||||{{{{{zzzzzyyyxxxxxxxwwwwwvvvvvvuuuutttttssssssrrrrrqqqqqpppppoooooonnnnnmmmmmmlllllllkkkkkkjjjjiiiiiiihhhhhhggggggggfffffeeeeeeeddddddddcccccccbbbbbbbaaaaaaaa`````````______^^^^^^^^^^]]]]]]]]]]]]\\\\\\\\\\\[[[[[[[[[ZZZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZ[[[[[[[[[\\\\\\\\\\\]]]]]]]]]]]^^^^^^^^^^______`````````aaaaaaaaabbbbbbccccccccdddddddeeeeeeeefffffggggggghhhhhhiiiiiiiijjjjkkkkkkllllllmmmmmmnnnnnooooooopppppqqqqqrrrrrsssssstttttuuuuvvvvvvwwwwwxxxxxxyyyyzzzzz{{{{{|||||}}}}~~~~~€€€€€€€~~~~~}}}}|||||{{{{{zzzzzzyyyxxxxxxwwwwwvvvvvvuuuutttttssssssrrrrrrqqqqppppppooooooonnnmmmmmmmllllllkkkkkkjjjjjiiiiiihhhhhhhhgggggggffffeeeeeeeeedddddddccccccccbbbbbbaaaaaaaaa`````````______^^^^^^^^^^^]]]]]]]]]]]\\\\\\\\\\\\\[[[[[[[[[ZZZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZ[[[[[[[[[\\\\\\\\\\\\]]]]]]]]]]]^^^^^^^^^^^^______`````````aaaaaaaabbbbbbbcccccccddddddddeeeeeeeeffffgggggggghhhhhhhiiiiiijjjjjkkkkkkkllllllmmmmmmnnnnooooooppppppqqqqrrrrrrssssssstttttuuuvvvvvvvwwwwwxxxxxxyyzzzzzzz{{{{{|||||}}}~~~~~€€€€€ \ No newline at end of file diff --git a/Graphic_Equalizer/data/help.raw b/Graphic_Equalizer/data/help.raw deleted file mode 100644 index 6585cb6..0000000 Binary files a/Graphic_Equalizer/data/help.raw and /dev/null differ diff --git a/Graphic_Equalizer/data/help_mask.raw b/Graphic_Equalizer/data/help_mask.raw deleted file mode 100644 index 4c46ff7..0000000 Binary files a/Graphic_Equalizer/data/help_mask.raw and /dev/null differ diff --git a/Graphic_Equalizer/data/orig/graph_mask.bmp b/Graphic_Equalizer/data/orig/graph_mask.bmp deleted file mode 100644 index 60a032c..0000000 Binary files a/Graphic_Equalizer/data/orig/graph_mask.bmp and /dev/null differ diff --git a/Graphic_Equalizer/data/orig/help.bmp b/Graphic_Equalizer/data/orig/help.bmp deleted file mode 100644 index 44d2814..0000000 Binary files a/Graphic_Equalizer/data/orig/help.bmp and /dev/null differ diff --git a/Graphic_Equalizer/data/orig/help_mask.bmp b/Graphic_Equalizer/data/orig/help_mask.bmp deleted file mode 100644 index cadee1d..0000000 Binary files a/Graphic_Equalizer/data/orig/help_mask.bmp and /dev/null differ diff --git a/Graphic_Equalizer/data/orig/skin.bmp b/Graphic_Equalizer/data/orig/skin.bmp deleted file mode 100644 index f521f56..0000000 Binary files a/Graphic_Equalizer/data/orig/skin.bmp and /dev/null differ diff --git a/Graphic_Equalizer/data/orig/skin_mask.bmp b/Graphic_Equalizer/data/orig/skin_mask.bmp deleted file mode 100644 index 989f000..0000000 Binary files a/Graphic_Equalizer/data/orig/skin_mask.bmp and /dev/null differ diff --git a/Graphic_Equalizer/data/preset_demo.bin b/Graphic_Equalizer/data/preset_demo.bin deleted file mode 100644 index bd1f7f4..0000000 Binary files a/Graphic_Equalizer/data/preset_demo.bin and /dev/null differ diff --git a/Graphic_Equalizer/data/preset_reset.bin b/Graphic_Equalizer/data/preset_reset.bin deleted file mode 100644 index 8e4514d..0000000 Binary files a/Graphic_Equalizer/data/preset_reset.bin and /dev/null differ diff --git a/Graphic_Equalizer/data/presets_hardcoded.txt b/Graphic_Equalizer/data/presets_hardcoded.txt deleted file mode 100644 index ef305c8..0000000 --- a/Graphic_Equalizer/data/presets_hardcoded.txt +++ /dev/null @@ -1,13 +0,0 @@ -/* 0 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, -/* 1 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, -/* 2 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, -/* 3 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, -/* 4 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, -/* 5 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, -/* 0 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, -/* 1 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, -/* 2 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, -/* 3 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, -/* 4 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, -/* 5 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, -/* 0 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67 diff --git a/Graphic_Equalizer/data/skin.raw b/Graphic_Equalizer/data/skin.raw deleted file mode 100644 index f0acdd9..0000000 Binary files a/Graphic_Equalizer/data/skin.raw and /dev/null differ diff --git a/Graphic_Equalizer/data/skin_mask.raw b/Graphic_Equalizer/data/skin_mask.raw deleted file mode 100644 index 6293a08..0000000 Binary files a/Graphic_Equalizer/data/skin_mask.raw and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/annotated.html b/Graphic_Equalizer/doc/html/annotated.html deleted file mode 100644 index 11bcfb0..0000000 --- a/Graphic_Equalizer/doc/html/annotated.html +++ /dev/null @@ -1,19 +0,0 @@ - - -Graphic Equalizer 2: Data Structures - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
-

Graphic Equalizer 2 Data Structures

Here are the data structures with brief descriptions: - - - - - -
audiodata_t
events_t
mousedata_t
skindata_tThis struct contains all area- dimensions and color information for the skin
skindata_t::skin_info_tStructure containing the four boundry limits of an area and maximal two colors per area
-
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/audio_2main_8hcc-source.html b/Graphic_Equalizer/doc/html/audio_2main_8hcc-source.html deleted file mode 100644 index 3167eee..0000000 --- a/Graphic_Equalizer/doc/html/audio_2main_8hcc-source.html +++ /dev/null @@ -1,76 +0,0 @@ - - -Graphic Equalizer: C:/Project Marcel & Oliver/Graphic_Equalizer/src/audio/main.hcc Source File - - - -
Main Page | File List | Globals
- -

main.hcc

00001 
-00020 /*
-00021  * Set the Clock rate for this domain. 50.0 Mhz is minimally required while
-00022  * performing audio tasks.
-00023  */
-00024 #define PAL_TARGET_CLOCK_RATE 50000000
-00025 
-00026 /******** System Includes *************/
-00027 #include <stdlib.hch>
-00028 
-00029 #include "pal_master.hch"
-00030 
-00031 /******** Application Includes ********/
-00032 #include "audiodriver.hch"
-00033 
-00034 
-00035 /*
-00036  * Request Clockrate. Approximated ClockRate is compiler assigned.
-00037  */
-00038 static macro expr ClockRate = PAL_ACTUAL_CLOCK_RATE;
-00039 
-00040 
-00041 
-00050 void main(void) {
-00051         /* Setup Audio I/O Pointers */
-00052         macro expr AudioIn  = PalAudioInCT(0);
-00053         macro expr AudioOut = PalAudioOutCT(0);
-00054 
-00055         /*
-00056          * Check library versions and Request VideoOutput.
-00057          * We need at least Major Version 1 and minor version 2.
-00058          */
-00059         PalVersionRequire(1, 2);
-00060         PalAudioInRequire(1);
-00061         PalAudioOutRequire(1);
-00062 
-00063         /*
-00064          * Run The Following main tasks in parallel.
-00065          */
-00066         par {
-00067                 /*
-00068                  * Primary task is to 'Run' several hardware simultaniously.
-00069                  * Audio I/O needs to be in sync.
-00070                  */
-00071                 PalAudioInRun(AudioIn, ClockRate);
-00072                 PalAudioOutRun(AudioOut, ClockRate);
-00073                 
-00074                 /* Parallel to our Primary tasks we run the application. */
-00075                 seq {
-00076                         /* But first we need to enable and initialize the audio. */
-00077                         PalAudioInEnable(AudioIn);
-00078                         PalAudioOutEnable(AudioOut);
-00079                         audio_init(7, LINE_IN, SR_44100);
-00080                         par {
-00081                                 /*
-00082                                  * From here we run the main audio loop.
-00083                                  */
-00084                                 audio_main();
-00085                         }
-00086                 }
-00087         }
-00088 } /* --- main() --- */
-

Generated on Thu Nov 25 15:40:49 2004 for Graphic Equalizer by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/audio_8hcc-source.html b/Graphic_Equalizer/doc/html/audio_8hcc-source.html deleted file mode 100644 index a3c36b6..0000000 --- a/Graphic_Equalizer/doc/html/audio_8hcc-source.html +++ /dev/null @@ -1,69 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/audio.hcc Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

audio.hcc

Go to the documentation of this file.
00001 
-00019 /******** System Includes *************/
-00020 #include <stdlib.hch>
-00021 
-00022 #include "pal_master.hch"
-00023 
-00024 /******** Application Includes ********/
-00025 #include "configuration.hch"
-00026 #include "audio.hch"
-00027 
-00028 
-00029 
-00045 macro proc audio_init(gain_level, input_source, sample_rate, AUDIOIN, AUDIOOUT) {
-00046         /*
-00047          * We simply call the appropiate handlers and pass values along. We
-00048          * Don't set the mute on input gain. We have volume control to do this.
-00049          * Input and Output sampling rates are equal. We dont' need different
-00050          * rates.
-00051          */
-00052         RC200AudioInSetGain(FALSE, gain_level, gain_level);
-00053         RC200AudioInSetInput(input_source);
-00054         PalAudioInSetSampleRate(AUDIOIN, sample_rate);
-00055         PalAudioOutSetSampleRate(AUDIOOUT, sample_rate);
-00056 } /* --- audio_init() --- */
-00057 
-00058 
-00059 #if !USE_RUNFFT
-00060 //TODO: put runfft here!
-00076 macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT) {
-00077         /*
-00078          * Determin the data width for the current platform.
-00079          */
-00080         macro expr IW = PalAudioInGetMaxDataWidthCT();
-00081         macro expr OW = PalAudioOutGetMaxDataWidthCT();
-00082 
-00083         signed IW sample_left_in, sample_right_in;
-00084         signed OW sample_left_out, sample_right_out;
-00085 
-00086         while (TRUE) {
-00087                 PalAudioInRead(AUDIOIN, &sample_left_in, &sample_right_in);
-00088 
-00089 /*              par {
-00090                         sample_add(sample_left_in);
-00091                         sample_get(&sample_left_out);
-00092                         sample_right_out = sample_right_in;
-00093                 }
-00094                 if (rotate_samples()) {
-00095                         / *
-00096                          * 64 Samples have been processed, calculate.
-00097                          * /
-00098                 }
-00099 */              PalAudioOutWrite(AUDIOOUT, (signed OW)(sample_left_in @ 0), (signed OW)(sample_right_in @ 0));
-00100         }
-00101 } /* --- audio_main() --- */
-00102 #endif
-

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/audio_8hcc.html b/Graphic_Equalizer/doc/html/audio_8hcc.html deleted file mode 100644 index 8503f32..0000000 --- a/Graphic_Equalizer/doc/html/audio_8hcc.html +++ /dev/null @@ -1,190 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/audio.hcc File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

audio.hcc File Reference

#include <stdlib.hch>
-#include "pal_master.hch"
-#include "configuration.hch"
-#include "audio.hch"
- -

-Include dependency graph for audio.hcc:

Include dependency graph
- - - - - -

-Go to the source code of this file. - - - - - - - - -

Functions

macro proc audio_init (gain_level, input_source, sample_rate, AUDIOIN, AUDIOOUT)
 Set some inital values to the audio hardware.
macro proc audio_main (audiodata, AUDIOIN, AUDIOOUT)
 Main audiodriver. This function never returns! It calls the audiohandlers and stores samples into a global array. Once 64 Samples are collected it raises a signal AUDIO_READY to let other processes know it's ready. We use quadruple buffering for audio input and double buffering for audio output.
-


Detailed Description

-

-Graphic Equalizer API

-

-Project information.

-Project Graphic Equalizer
-
Author:
O.M. Schinagl
-
Date:
20041011
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041011:
- Initial version -

-Definition in file audio.hcc.


Function Documentation

-

- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
macro proc audio_init gain_level ,
input_source ,
sample_rate ,
AUDIOIN ,
AUDIOOUT 
-
- - - - - -
-   - - -

-Set some inital values to the audio hardware. -

-

Parameters:
- - - - -
gain_level Set the input amplifier to this amplification level.
input_source Choose between microphone input or linein input.
sample_rate Set the sample rate between 8000 and 48000
-
-
Returns:
void
-
Return values:
- - -
void 
-
- -

-Definition at line 45 of file audio.hcc. -

-Referenced by main().

-

- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
macro proc audio_main audiodata ,
AUDIOIN ,
AUDIOOUT 
-
- - - - - -
-   - - -

-Main audiodriver. This function never returns! It calls the audiohandlers and stores samples into a global array. Once 64 Samples are collected it raises a signal AUDIO_READY to let other processes know it's ready. We use quadruple buffering for audio input and double buffering for audio output. -

-

Parameters:
- - - - -
*audiodata pointer to audio information structure.
AUDIOIN Audio Input Handler
AUDIOOUT Audio Output Handler
-
-
Returns:
Never Returns.
-
Return values:
- - -
void 
-
- -

-Definition at line 76 of file audio.hcc. -

-Referenced by main().

-


Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/audio_8hcc__incl.map b/Graphic_Equalizer/doc/html/audio_8hcc__incl.map deleted file mode 100644 index 94afea9..0000000 --- a/Graphic_Equalizer/doc/html/audio_8hcc__incl.map +++ /dev/null @@ -1,3 +0,0 @@ -base referer -rect $configuration_8hch.html 245,7 370,34 -rect $audio_8hch.html 394,7 474,34 diff --git a/Graphic_Equalizer/doc/html/audio_8hcc__incl.md5 b/Graphic_Equalizer/doc/html/audio_8hcc__incl.md5 deleted file mode 100644 index a948416..0000000 --- a/Graphic_Equalizer/doc/html/audio_8hcc__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -c40d88d881278afd1ef70a3d20ec91ee \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/audio_8hcc__incl.png b/Graphic_Equalizer/doc/html/audio_8hcc__incl.png deleted file mode 100644 index 36bd511..0000000 Binary files a/Graphic_Equalizer/doc/html/audio_8hcc__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/audio_8hch-source.html b/Graphic_Equalizer/doc/html/audio_8hch-source.html deleted file mode 100644 index 48b00aa..0000000 --- a/Graphic_Equalizer/doc/html/audio_8hch-source.html +++ /dev/null @@ -1,84 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/audio.hch Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

audio.hch

Go to the documentation of this file.
00001 
-00019 #ifndef _AUDIO_HCH
-00020 #define _AUDIO_HCH 1
-00021 
-00022 /*
-00023  * Type definition of the shared memory to be used in various processes
-00024  */
-00025 typedef struct {
-00026         mpram {
-00027                 ram unsigned 7 write[256];      
-00028                 rom unsigned 7 read[256];
-00029         } fft_info with { block = "BlockRAM"};
-00030         mpram {
-00031                 ram unsigned 6 write[256];      
-00032                 rom unsigned 6 read[256];
-00033         } ifft_info with { block = "BlockRAM"};
-00034         unsigned 4 *equalizer_levels_ptr;
-00035         unsigned 1 display_log;
-00036 } audiodata_t;
-00037 
-00038 
-00039 
-00040 
-00041 /*
-00042  * States used to indicate wether audio data is sampled.
-00043  */
-00044 #define AUDIO_NOT_READY 0
-00045 #define AUDIO_READY     1
-00046 
-00047 
-00048 
-00049 /*
-00050  * Line in or Mic in aliases for audio_init.
-00051  */
-00052 #define LINE_IN RC200AudioInLineIn
-00053 #define MIC_IN  RC200AudioInMicrophone
-00054 
-00055 
-00056 
-00057 /*
-00058  * Sample Rate Aliases for audio_init.
-00059  */
-00060 #define SR_8000         RC200AudioSampleRate8000
-00061 #define SR_11025        RC200AudioSampleRate11025
-00062 #define SR_16000        RC200AudioSampleRate16000
-00063 #define SR_22050        RC200AudioSampleRate22050
-00064 #define SR_44100        RC200AudioSampleRate44100
-00065 #define SR_48000        RC200AudioSampleRate48000
-00066 
-00067 
-00068 
-00069 /*
-00070  * Initialize the Audio sub-system. gain_level sets the internal amplifier to
-00071  * passed level, input_source chooses between line in or mic in. The
-00072  * sample_rate is set to supplied rate. Defines for these are mentioned above.
-00073  */
-00074 macro proc audio_init(gain_level, input_source, sample_rate, AUDIOIN, AUDIOOUT);
-00075 
-00076 
-00077 
-00078 /*
-00079  * Main audiodriver loop. This procedure never returns! It handles audio io and
-00080  * updates the shared memory. It needs Audio I/O handlers passed.
-00081  */
-00082 macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT);
-00083 
-00084 #else
-00085 #error "ERROR file audio.hch multiple times included"
-00086 #endif /* --- _AUDIO_HCH --- */
-00087 
-

Generated on Thu Dec 9 14:37:05 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/audio_8hch.html b/Graphic_Equalizer/doc/html/audio_8hch.html deleted file mode 100644 index bcc7245..0000000 --- a/Graphic_Equalizer/doc/html/audio_8hch.html +++ /dev/null @@ -1,496 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/audio.hch File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

audio.hch File Reference

-

-This graph shows which files directly or indirectly include this file:

Included by dependency graph
- - - - - - - - - -

-Go to the source code of this file. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Data Structures

struct  audiodata_t

Defines

#define _AUDIO_HCH   1
#define AUDIO_NOT_READY   0
#define AUDIO_READY   1
#define LINE_IN   RC200AudioInLineIn
#define MIC_IN   RC200AudioInMicrophone
#define SR_8000   RC200AudioSampleRate8000
#define SR_11025   RC200AudioSampleRate11025
#define SR_16000   RC200AudioSampleRate16000
#define SR_22050   RC200AudioSampleRate22050
#define SR_44100   RC200AudioSampleRate44100
#define SR_48000   RC200AudioSampleRate48000

Functions

macro proc audio_init (gain_level, input_source, sample_rate, AUDIOIN, AUDIOOUT)
 Set some inital values to the audio hardware.
macro proc audio_main (audiodata, AUDIOIN, AUDIOOUT)
 Main audiodriver. This function never returns! It calls the audiohandlers and stores samples into a global array. Once 64 Samples are collected it raises a signal AUDIO_READY to let other processes know it's ready. We use quadruple buffering for audio input and double buffering for audio output.
-


Detailed Description

-

-Graphic Equalizer API

-

-Project information.

-Project Graphic Equalizer
-
Author:
O.M. Schinagl
-
Date:
20041021
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041021: O.M. Schinagl
- Initial version -

-Definition in file audio.hch.


Define Documentation

-

- - - - -
- - - - -
#define _AUDIO_HCH   1
-
- - - - - -
-   - - -

- -

-Definition at line 20 of file audio.hch.

-

- - - - -
- - - - -
#define AUDIO_NOT_READY   0
-
- - - - - -
-   - - -

- -

-Definition at line 44 of file audio.hch.

-

- - - - -
- - - - -
#define AUDIO_READY   1
-
- - - - - -
-   - - -

- -

-Definition at line 45 of file audio.hch.

-

- - - - -
- - - - -
#define LINE_IN   RC200AudioInLineIn
-
- - - - - -
-   - - -

- -

-Definition at line 52 of file audio.hch. -

-Referenced by main().

-

- - - - -
- - - - -
#define MIC_IN   RC200AudioInMicrophone
-
- - - - - -
-   - - -

- -

-Definition at line 53 of file audio.hch.

-

- - - - -
- - - - -
#define SR_8000   RC200AudioSampleRate8000
-
- - - - - -
-   - - -

- -

-Definition at line 60 of file audio.hch.

-

- - - - -
- - - - -
#define SR_11025   RC200AudioSampleRate11025
-
- - - - - -
-   - - -

- -

-Definition at line 61 of file audio.hch.

-

- - - - -
- - - - -
#define SR_16000   RC200AudioSampleRate16000
-
- - - - - -
-   - - -

- -

-Definition at line 62 of file audio.hch.

-

- - - - -
- - - - -
#define SR_22050   RC200AudioSampleRate22050
-
- - - - - -
-   - - -

- -

-Definition at line 63 of file audio.hch.

-

- - - - -
- - - - -
#define SR_44100   RC200AudioSampleRate44100
-
- - - - - -
-   - - -

- -

-Definition at line 64 of file audio.hch. -

-Referenced by main().

-

- - - - -
- - - - -
#define SR_48000   RC200AudioSampleRate48000
-
- - - - - -
-   - - -

- -

-Definition at line 65 of file audio.hch.

-


Function Documentation

-

- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
macro proc audio_init gain_level ,
input_source ,
sample_rate ,
AUDIOIN ,
AUDIOOUT 
-
- - - - - -
-   - - -

-Set some inital values to the audio hardware. -

-

Parameters:
- - - - -
gain_level Set the input amplifier to this amplification level.
input_source Choose between microphone input or linein input.
sample_rate Set the sample rate between 8000 and 48000
-
-
Returns:
void
-
Return values:
- - -
void 
-
- -

-Definition at line 45 of file audio.hcc. -

-Referenced by main().

-

- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
macro proc audio_main audiodata ,
AUDIOIN ,
AUDIOOUT 
-
- - - - - -
-   - - -

-Main audiodriver. This function never returns! It calls the audiohandlers and stores samples into a global array. Once 64 Samples are collected it raises a signal AUDIO_READY to let other processes know it's ready. We use quadruple buffering for audio input and double buffering for audio output. -

-

Parameters:
- - - - -
*audiodata pointer to audio information structure.
AUDIOIN Audio Input Handler
AUDIOOUT Audio Output Handler
-
-
Returns:
Never Returns.
-
Return values:
- - -
void 
-
- -

-Definition at line 76 of file audio.hcc. -

-Referenced by main().

-


Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/audio_8hch__dep__incl.map b/Graphic_Equalizer/doc/html/audio_8hch__dep__incl.map deleted file mode 100644 index 13b9d0b..0000000 --- a/Graphic_Equalizer/doc/html/audio_8hch__dep__incl.map +++ /dev/null @@ -1,7 +0,0 @@ -base referer -rect $audio_8hcc.html 7,7 87,34 -rect $display_8hcc.html 111,7 199,34 -rect $eventhandler_8hcc.html 223,7 346,34 -rect $fft_8hcc.html 370,7 429,34 -rect $main_8hcc.html 453,7 527,34 -rect $smartmedia_8hcc.html 551,7 669,34 diff --git a/Graphic_Equalizer/doc/html/audio_8hch__dep__incl.md5 b/Graphic_Equalizer/doc/html/audio_8hch__dep__incl.md5 deleted file mode 100644 index b5bb099..0000000 --- a/Graphic_Equalizer/doc/html/audio_8hch__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -47b49974e1875473dca8902c4d0a51aa \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/audio_8hch__dep__incl.png b/Graphic_Equalizer/doc/html/audio_8hch__dep__incl.png deleted file mode 100644 index 13e726a..0000000 Binary files a/Graphic_Equalizer/doc/html/audio_8hch__dep__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/configuration_8hch-source.html b/Graphic_Equalizer/doc/html/configuration_8hch-source.html deleted file mode 100644 index fa10daa..0000000 --- a/Graphic_Equalizer/doc/html/configuration_8hch-source.html +++ /dev/null @@ -1,53 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/configuration.hch Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

configuration.hch

Go to the documentation of this file.
00001 
-00019 #ifndef _CONFIGURATION_HCH
-00020 #define _CONFIGURATION_HCH 1
-00021 
-00022 
-00023 
-00024 /*
-00025  * To print debug information on the RS232 port set this define.
-00026  */
-00027 #define HAVE_DEBUG 0
-00028 
-00029 
-00030 
-00031 /*
-00032  * If we don't want to use the SmartMedia set this to 0. Data is then read from
-00033  * the ram, assuming it's there. Otherwise 1 will load the smartmedia
-00034  * routines.
-00035  */
-00036 #define HAVE_SMARTMEDIA 0
-00037 
-00038 
-00039 
-00040 /*
-00041  * FFT specific. TODO: Clean Up!
-00042  */
-00043 #define USE_RUNFFT      1
-00044 #define HARDWARE_MULTIPLY       1
-00045 #define PERFORM_FFT_CALCULATION 1
-00046 #define USE_UNSIGNED_AUDIO 0
-00047 
-00048 /*
-00049 FIXME:  DK doesn't override from commandline defines. We have to therefore
-00050         ignore this include guard until we can find around this.
-00051 #else
-00052 #error "ERROR file configuration.hch multiple times included"
-00053 */
-00054 #endif /* --- _CONFIGURATION_HCH --- */
-00055 
-00056 
-

Generated on Thu Dec 9 14:37:05 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/configuration_8hch.html b/Graphic_Equalizer/doc/html/configuration_8hch.html deleted file mode 100644 index 93a8495..0000000 --- a/Graphic_Equalizer/doc/html/configuration_8hch.html +++ /dev/null @@ -1,240 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/configuration.hch File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

configuration.hch File Reference

-

-This graph shows which files directly or indirectly include this file:

Included by dependency graph
- - - - - - - - - - - - -

-Go to the source code of this file. - - - - - - - - - - - - - - - - -

Defines

#define _CONFIGURATION_HCH   1
#define HAVE_DEBUG   0
#define HAVE_SMARTMEDIA   0
#define USE_RUNFFT   1
#define HARDWARE_MULTIPLY   1
#define PERFORM_FFT_CALCULATION   1
#define USE_UNSIGNED_AUDIO   0
-


Detailed Description

-

-Graphic Equalizer API

-

-Project information.

-Project Graphic Equalizer
-
Author:
O.M. Schinagl
-
Date:
20041101
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041101: O.M. Schinagl
- Initial version -

-Definition in file configuration.hch.


Define Documentation

-

- - - - -
- - - - -
#define _CONFIGURATION_HCH   1
-
- - - - - -
-   - - -

- -

-Definition at line 20 of file configuration.hch.

-

- - - - -
- - - - -
#define HAVE_DEBUG   0
-
- - - - - -
-   - - -

- -

-Definition at line 27 of file configuration.hch.

-

- - - - -
- - - - -
#define HAVE_SMARTMEDIA   0
-
- - - - - -
-   - - -

- -

-Definition at line 36 of file configuration.hch.

-

- - - - -
- - - - -
#define USE_RUNFFT   1
-
- - - - - -
-   - - -

- -

-Definition at line 43 of file configuration.hch.

-

- - - - -
- - - - -
#define HARDWARE_MULTIPLY   1
-
- - - - - -
-   - - -

- -

-Definition at line 44 of file configuration.hch.

-

- - - - -
- - - - -
#define PERFORM_FFT_CALCULATION   1
-
- - - - - -
-   - - -

- -

-Definition at line 45 of file configuration.hch.

-

- - - - -
- - - - -
#define USE_UNSIGNED_AUDIO   0
-
- - - - - -
-   - - -

- -

-Definition at line 46 of file configuration.hch.

-


Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/configuration_8hch__dep__incl.map b/Graphic_Equalizer/doc/html/configuration_8hch__dep__incl.map deleted file mode 100644 index 0c90433..0000000 --- a/Graphic_Equalizer/doc/html/configuration_8hch__dep__incl.map +++ /dev/null @@ -1,10 +0,0 @@ -base referer -rect $audio_8hcc.html 7,7 87,34 -rect $display_8hcc.html 111,7 199,34 -rect $eventhandler_8hcc.html 223,7 346,34 -rect $events_8hcc.html 370,7 455,34 -rect $fft_8hcc.html 479,7 538,34 -rect $main_8hcc.html 562,7 637,34 -rect $mouse_8hcc.html 661,7 746,34 -rect $runfft_8hcc.html 770,7 847,34 -rect $smartmedia_8hcc.html 871,7 989,34 diff --git a/Graphic_Equalizer/doc/html/configuration_8hch__dep__incl.md5 b/Graphic_Equalizer/doc/html/configuration_8hch__dep__incl.md5 deleted file mode 100644 index 64cf2d9..0000000 --- a/Graphic_Equalizer/doc/html/configuration_8hch__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -0b1a3fcf1ab800e34bed7bf1922c4760 \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/configuration_8hch__dep__incl.png b/Graphic_Equalizer/doc/html/configuration_8hch__dep__incl.png deleted file mode 100644 index 6581c6e..0000000 Binary files a/Graphic_Equalizer/doc/html/configuration_8hch__dep__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/dir_000000.html b/Graphic_Equalizer/doc/html/dir_000000.html deleted file mode 100644 index dbd5d83..0000000 --- a/Graphic_Equalizer/doc/html/dir_000000.html +++ /dev/null @@ -1,20 +0,0 @@ - - -Graphic Equalizer 2: C:/ Directory Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

C: Directory Reference

- - - - -

Directories

directory Project Marcel & Oliver
-
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/dir_000001.html b/Graphic_Equalizer/doc/html/dir_000001.html deleted file mode 100644 index 61512ed..0000000 --- a/Graphic_Equalizer/doc/html/dir_000001.html +++ /dev/null @@ -1,20 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/ Directory Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

Project Marcel & Oliver Directory Reference

- - - - -

Directories

directory Graphic_Equalizer
-
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/dir_000002.html b/Graphic_Equalizer/doc/html/dir_000002.html deleted file mode 100644 index 2e70b5e..0000000 --- a/Graphic_Equalizer/doc/html/dir_000002.html +++ /dev/null @@ -1,22 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/ Directory Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

Graphic_Equalizer Directory Reference

- - - - - - -

Directories

directory include
directory src
-
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/dir_000003.html b/Graphic_Equalizer/doc/html/dir_000003.html deleted file mode 100644 index 466ed9f..0000000 --- a/Graphic_Equalizer/doc/html/dir_000003.html +++ /dev/null @@ -1,49 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/ Directory Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

include Directory Reference

- - - - - - - - - - - - -

-

- - - - - - - - - - - - - - - - - - - -

Files

file  audio.hch
file  configuration.hch
file  display.hch
file  display_shared.hch
 Datastructures and defines for usage when interacting with the display library.
file  eventhandler.hch
file  eventhandler_shared.hch
file  events.hch
file  fft.hch
file  mouse.hch
file  mouse_shared.hch
file  runfft.hch
file  smartmedia.hch
file  smartmedia_shared.hch
file  weights_256.hch
-
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/dir_000004.html b/Graphic_Equalizer/doc/html/dir_000004.html deleted file mode 100644 index bed344b..0000000 --- a/Graphic_Equalizer/doc/html/dir_000004.html +++ /dev/null @@ -1,36 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/ Directory Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

src Directory Reference

- - - - - - - - - - - - - - - - - - - - -

Files

file  audio.hcc
file  display.hcc
file  eventhandler.hcc
file  events.hcc
file  fft.hcc
file  main.hcc
file  mouse.hcc
file  runfft.hcc
file  smartmedia.hcc
-
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/dirs.html b/Graphic_Equalizer/doc/html/dirs.html deleted file mode 100644 index 8a34b30..0000000 --- a/Graphic_Equalizer/doc/html/dirs.html +++ /dev/null @@ -1,25 +0,0 @@ - - -Graphic Equalizer 2: Directory Hierarchy - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
-

Graphic Equalizer 2 Directories

This directory hierarchy is sorted roughly, but not completely, alphabetically: -
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/display_8hcc-source.html b/Graphic_Equalizer/doc/html/display_8hcc-source.html deleted file mode 100644 index 6160bc7..0000000 --- a/Graphic_Equalizer/doc/html/display_8hcc-source.html +++ /dev/null @@ -1,310 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/display.hcc Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

display.hcc

Go to the documentation of this file.
00001 
-00019 /*
-00020  * Set the Clock rate for this domain. 25.175 Mhz is required for the Video output.
-00021  */
-00022 #define PAL_TARGET_CLOCK_RATE 25175000
-00023 
-00024 /******** System Includes *************/
-00025 #include <stdlib.hch>
-00026 
-00027 #include "pal_master.hch"
-00028 
-00029 /******** Application Includes ********/
-00030 #include "configuration.hch"
-00031 #include "audio.hch"
-00032 #include "eventhandler_shared.hch"
-00033 #include "mouse_shared.hch"
-00034 #include "smartmedia_shared.hch"
-00035 #include "display_shared.hch"
-00036 #include "display.hch"
-00037 
-00038 #if HAVE_DEBUG
-00039         #include "debug.hch"
-00040 #endif
-00041 
-00042 
-00043 
-00044 /*
-00045  * Channel to notify others when new mousedata is available. If so
-00046  * Then mousedata struct is updated with shared data.
-00047  */
-00048 chan unsigned 1 maskupdate_notification;
-00049 
-00050 
-00051 
-00065 void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events, mousedata_t *mousedata) {
-00066         /*
-00067          * Setup macro's RAM/Video handles and to coordinate pixel writing.
-00068          */
-00069         macro expr CLOCKRATE = PAL_ACTUAL_CLOCK_RATE;
-00070         macro expr VIDEOOUT = PalVideoOutOptimalCT(CLOCKRATE);
-00071         macro expr RAM_BANK0 = PalPL2RAMCT(0);
-00072         macro expr DW = PalPL2RAMGetMaxDataWidthCT();
-00073         macro expr AW = PalPL2RAMGetMaxAddressWidthCT();
-00074         macro expr VISIBLEX = PalVideoOutGetVisibleX(VIDEOOUT, CLOCKRATE);
-00075         macro expr TOTALX = PalVideoOutGetTotalX(VIDEOOUT, CLOCKRATE);
-00076         macro expr TOTALY = PalVideoOutGetTotalY(VIDEOOUT);
-00077         macro expr SCANX = PalVideoOutGetX(VIDEOOUT);
-00078         macro expr SCANY = PalVideoOutGetY(VIDEOOUT);
-00079         
-00080         unsigned DW pixeldata;
-00081         unsigned 24 visual_graph_color;
-00082         unsigned AW address, address_offset;
-00083 
-00084 
-00085 
-00086         /*
-00087          * If the passed button_state tells us the button is active, then we
-00088          * the button is 'on' and we draw it inverted. Otherwise we draw the
-00089          * area of the button normally.
-00090          */
-00091         macro proc draw_button(button_state) {
-00092                 if (button_state == pixeldata[31:24]) {
-00093                         PalVideoOutWrite(VIDEOOUT, ~PIXEL);
-00094                 } else {
-00095                         PalVideoOutWrite(VIDEOOUT, PIXEL);
-00096                 }
-00097         }
-00098 
-00099         /*
-00100          * Prime Rendering Pipeline to start where the skin starts.
-00101          */
-00102         PalPL2RAMSetReadAddress(RAM_BANK0, ADDRESS_SKIN_START);
-00103 
-00104         /*
-00105          * Run the following tasks indefinatly and in parallel
-00106          */
-00107         while (TRUE) {
-00108                 par {
-00109                         /*
-00110                          * Before starting this loop we allready set the the
-00111                          * address. Therefor we can start reading the
-00112                          * previously set address and prepare the next address
-00113                          * for the next cycle.
-00114                          */
-00115                         PalPL2RAMRead(RAM_BANK0, &pixeldata);
-00116                         PalPL2RAMSetReadAddress(RAM_BANK0, address_offset +address);
-00117 
-00118                         /*
-00119                          */
-00120                         switch (events->mode) {
-00121                                 case MODE_HELP:
-00122                                         address_offset = ADDRESS_HELP_START;
-00123                                         break;
-00124                                 case MODE_GRAPH:
-00125                                         address_offset = ADDRESS_GRAPHMASK_START;
-00126                                         break;
-00127                                 default:
-00128                                         address_offset = ADDRESS_SKIN_START;
-00129                                         break;
-00130                         }
-00131 
-00132                         if (MODE_GRAPH == events->mode) {
-00133                                 par {
-00134                                         visual_graph_color = ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[31:24]]) << 1) @ ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[31:24]]) << -1) @ ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[31:24]]) << 0);
-00135                                         PalVideoOutWrite(VIDEOOUT, 0 @ visual_graph_color);
-00136                                 }
-00137                         } else {
-00138                                 /*
-00139                                  * Determin what to draw where here. Every case has an
-00140                                  * if else statement comparing wether to draw something
-00141                                  * special or the background. Every specific drawing
-00142                                  * obviously only happens in the masked area.
-00143                                  */
-00144                                 switch (pixeldata[31:24]) {
-00145                                         /*
-00146                                          */
-00147                                         case AREA_WAVEFORM:
-00148                                                 if (SCANY == 0 @ skindata->area_waveform_bottom -(0 @ (audiodata->ifft_info.read[((SCANX -(0 @ skindata->area_waveform_left)) <-8)]))) {
-00149                                                         PalVideoOutWrite(VIDEOOUT, skindata->color_area_waveform);
-00150                                                 } else {
-00151                                                         PalVideoOutWrite(VIDEOOUT, PIXEL);
-00152                                                 }
-00153                                                 break;
-00154 
-00155                                         /*
-00156                                          * Volume control over the Y-axis.
-00157                                          */
-00158                                         case AREA_VOLUME_YAXIS:
-00159                                                 /*
-00160                                                  * The volume_position stores the
-00161                                                  * highest point of our bar. Every
-00162                                                  * pixel after this point is drawn.
-00163                                                  */
-00164                                                 if (SCANY >= 0 @ events->volume_position) {
-00165                                                         PalVideoOutWrite(VIDEOOUT, skindata->color_area_volume);
-00166                                                 } else {
-00167                                                         PalVideoOutWrite(VIDEOOUT, PIXEL);
-00168                                                 }
-00169                                                 break;
-00170                         
-00171                                         /*
-00172                                          * Spectrum Analyzer
-00173                                          */
-00174                                         case AREA_SPECTRUM_ANALYZER:
-00175                                                 /*
-00176                                                  * We draw every pixel that is smaller TODO
-00177                                                  */
-00178                                                 if ((SCANY >= (0 @ skindata->area_spectrum_bottom) -(0 @ audiodata->fft_info.read[(SCANX -(0 @ skindata->area_spectrum_left))[9:2]])) && ((SCANX -(0 @ skindata->area_spectrum_left)) <- 2)) {
-00179                                                         PalVideoOutWrite(VIDEOOUT, PIXEL_SPECTRUM);
-00180                                                 } else {
-00181                                                         PalVideoOutWrite(VIDEOOUT, PIXEL);
-00182                                                 }
-00183                                                 break;
-00184 
-00185                                         /*
-00186                                          * Since all buttons are drawn equally, either
-00187                                          * we draw them normally or we inverse them, we
-00188                                          * can handle them almost equally.
-00189                                          */
-00190                                         case BUTTON_PRESET_1:   /* fall through */
-00191                                         case BUTTON_PRESET_2:   /* fall through */
-00192                                         case BUTTON_PRESET_3:   /* fall through */
-00193                                         case BUTTON_PRESET_4:   /* fall through */
-00194                                         case BUTTON_PRESET_5:   /* fall through */
-00195                                         case BUTTON_PRESET_6:
-00196                                                 /*
-00197                                                  * The active preset tells us what
-00198                                                  * button is currently enabled. We must
-00199                                                  * however not forget to add the preset
-00200                                                  * button offset to possibly match it
-00201                                                  * with the current mask.
-00202                                                  */
-00203                                                 draw_button((events->active_preset +BUTTON_PRESET_1) <- 8);
-00204                                                 break;
-00205 
-00206                                         case BUTTON_PRECISE:            /* fall through */
-00207                                         case BUTTON_CONCAVE_HALF:       /* fall through */
-00208                                         case BUTTON_CONVEX_HALF:        /* fall through */
-00209                                         case BUTTON_CONCAVE_FULL:       /* fall through */
-00210                                         case BUTTON_CONVEX_FULL: 
-00211                                                 /*
-00212                                                  * equalizer mode tells us what button
-00213                                                  * is currently enabled. By adding the
-00214                                                  * equalizer mode button offset we can
-00215                                                  * safley check wether it matches our
-00216                                                  * mask.
-00217                                                  */
-00218                                                 draw_button((0 @ events->equalizer_mode) +BUTTON_PRECISE);
-00219                                                 break;
-00220 
-00221                                         case BUTTON_LOG:
-00222                                                 /*
-00223                                                  * 
-00224                                                  */
-00225                                                 draw_button((0 @ audiodata->display_log) +BUTTON_LOG);
-00226                                                 break;
-00227 
-00228                                         /*
-00229                                          * The default case is split up into two parts
-00230                                          * actually. This is because we have 128 bands
-00231                                          * for the equalizer and thus as many mask
-00232                                          * entries. Since we don't want 128 identical
-00233                                          * cases we check wether the equalizer mask is
-00234                                          * currently active and if so draw it. If this
-00235                                          * is not the case we simply draw the
-00236                                          * background.
-00237                                          */
-00238                                         default:
-00239                                         /* (pixeldata[31:24] <= AREA_EQUALIZER_MAX) &&  */
-00240                                                 if ((AREA_EQUALIZER_MIN <= pixeldata[31:24]) && (!events->locked_display)) {
-00241                                                         if ((SCANY == 0 @ events->equalizer_display[(pixeldata[31:24] -AREA_EQUALIZER_MIN) <- 7]) || ((SCANY +1) == 0 @ events->equalizer_display[(pixeldata[31:24] -AREA_EQUALIZER_MIN) <- 7])) {
-00242                                                                 PalVideoOutWrite(VIDEOOUT, skindata->color_equalizer);
-00243                                                         } else {
-00244                                                                 PalVideoOutWrite(VIDEOOUT, PIXEL);
-00245                                                         }
-00246                                                 } else {
-00247                                                         PalVideoOutWrite(VIDEOOUT, PIXEL);
-00248                                                 }
-00249                                         break;
-00250                                 }
-00251                         }
-00252 
-00253                         /*
-00254                          * We compare our current X and Y scan positions of the
-00255                          * output to the x and y data of the mouse. When those
-00256                          * are equal we set the current mask to the mask stored
-00257                          * in memory at that location. We then know what mask
-00258                          * is to be used for events.
-00259                          */
-00260                         if (MOUSE_UPDATED == mousedata->status) {
-00261                                 if ((SCANX == 0 @ mousedata->x) && (SCANY == 0 @ mousedata->y)) {
-00262                                         par {
-00263                                                 events->mask = pixeldata[31:24];
-00264                                                 mousedata->status = MOUSE_NOT_UPDATED;
-00265                                                 maskupdate_notification ! MOUSE_UPDATED;
-00266                                         }
-00267                                 } else {
-00268                                         delay;
-00269                                 }
-00270                         } else {
-00271                                 delay;
-00272                         }
-00273 
-00274                         /*
-00275                          * The current position of the screen can lay in an
-00276                          * area called the blanking area. We don't have data
-00277                          * for this area as it is not drawn. We therefor have
-00278                          * to determin wether we are beyond the visible area of
-00279                          * the screen, but before the end of the total width of
-00280                          * the screen. Our pipeline consists of 5 total stages.
-00281                          * Therefor we have to substract 5 pixels.
-00282                          */
-00283                         if ((SCANX > (VISIBLEX - 5)) && (SCANX <= (TOTALX - 5))) {
-00284                                 /*
-00285                                  * We are in the blanking area of the screen.
-00286                                  * If we are on the last line, and thus last
-00287                                  * pixel we reset our address counter.
-00288                                  */
-00289                                 if (SCANY == (TOTALY -1)) {
-00290                                         /*
-00291                                          * Reset our draw address counter to 0.
-00292                                          */
-00293                                         address = 0;
-00294                                 } else {
-00295                                         /*
-00296                                          * We have reached the end of the
-00297                                          * visible line, but not the end of
-00298                                          * the screen. Therefore do nothing.
-00299                                          */
-00300                                         delay;
-00301                                 }
-00302                         } else {
-00303                                 /*
-00304                                  * Increase the memory counter for each pixel
-00305                                  * drawn thus keeping the memory location in
-00306                                  * sync with the current pixel position.
-00307                                  */
-00308                                 address++;
-00309                         }
-00310                 }
-00311         }
-00312 } /* --- display_main() --- */
-00313 
-00314 
-00315 
-00328 void reload_equalizer(events_t *events, unsigned 4 *equalizer_levels) {
-00329         unsigned 7 equalizer_band;
-00330 
-00331         events->locked_display = TRUE;
-00332         delay;
-00333         do {
-00334                 events->equalizer_display[equalizer_band] = equalizer_table_inv[equalizer_levels[equalizer_band]];
-00335                 equalizer_band++;
-00336         } while (equalizer_band);
-00337         events->locked_display = FALSE;
-00338 } /* --- reload_equalizer() --- */
-

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/display_8hcc.html b/Graphic_Equalizer/doc/html/display_8hcc.html deleted file mode 100644 index 97893f6..0000000 --- a/Graphic_Equalizer/doc/html/display_8hcc.html +++ /dev/null @@ -1,252 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/display.hcc File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

display.hcc File Reference

#include <stdlib.hch>
-#include "pal_master.hch"
-#include "configuration.hch"
-#include "audio.hch"
-#include "eventhandler_shared.hch"
-#include "mouse_shared.hch"
-#include "smartmedia_shared.hch"
-#include "display_shared.hch"
-#include "display.hch"
- -

-Include dependency graph for display.hcc:

Include dependency graph
- - - - - - - - - - -

-Go to the source code of this file. - - - - - - - - - - - - - - -

Defines

#define PAL_TARGET_CLOCK_RATE   25175000

Functions

void display_main (skindata_t *skindata, audiodata_t *audiodata, events_t *events, mousedata_t *mousedata)
 This routine handles all drawing of pixels. It never returns!
void reload_equalizer (events_t *events, unsigned 4 *equalizer_levels)
 This function copies the supplied equalizer values to the array used for displaying equalizer data.

Variables

chan unsigned maskupdate_notification
-


Detailed Description

-

-Graphic Equalizer API

-

-Project information.

-Project Graphic Equalizer
-
Author:
O.M. Schinagl
-
Date:
20041011
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041011: O.M. Schinagl
- Initial version -

-Definition in file display.hcc.


Define Documentation

-

- - - - -
- - - - -
#define PAL_TARGET_CLOCK_RATE   25175000
-
- - - - - -
-   - - -

- -

-Definition at line 22 of file display.hcc.

-


Function Documentation

-

- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void display_main skindata_t skindata,
audiodata_t audiodata,
events_t events,
mousedata_t mousedata
-
- - - - - -
-   - - -

-This routine handles all drawing of pixels. It never returns! -

-

Parameters:
- - - - - -
*skindata struct with all skin information.
*audiodata struct with (i)fft data to be drawn.
*events struct with all events.
*mousedata struct with coordinates to current. X en Y.
-
-
Returns:
Never Returns.
-
Return values:
- - -
void 
-
- -

-Definition at line 65 of file display.hcc. -

-References events_t::active_preset, ADDRESS_SKIN_START, AREA_EQUALIZER_MIN, AREA_SPECTRUM_ANALYZER, AREA_VOLUME_YAXIS, AREA_WAVEFORM, BUTTON_CONCAVE_FULL, BUTTON_CONCAVE_HALF, BUTTON_CONVEX_FULL, BUTTON_CONVEX_HALF, BUTTON_LOG, BUTTON_PRECISE, BUTTON_PRESET_1, BUTTON_PRESET_2, BUTTON_PRESET_3, BUTTON_PRESET_4, BUTTON_PRESET_5, BUTTON_PRESET_6, audiodata_t::display_log, events_t::equalizer_display, events_t::equalizer_mode, events_t::locked_display, events_t::mask, maskupdate_notification, events_t::mode, MODE_GRAPH, MODE_HELP, MOUSE_UPDATED, PIXEL, PIXEL_SPECTRUM, mousedata_t::status, events_t::volume_position, mousedata_t::x, and mousedata_t::y. -

-Referenced by main().

-

- - - - -
- - - - - - - - - - - - - - - - - - -
void reload_equalizer events_t events,
unsigned 4 *  equalizer_levels
-
- - - - - -
-   - - -

-This function copies the supplied equalizer values to the array used for displaying equalizer data. -

-

Parameters:
- - - -
*events events struct
*equalizer_levels pointer to 128 entries where equalizer is to be copied from.
-
-
Returns:
void
-
Return values:
- - -
void 
-
- -

-Definition at line 328 of file display.hcc. -

-References events_t::equalizer_display, equalizer_table_inv, and events_t::locked_display. -

-Referenced by eventhandler_main().

-


Variable Documentation

-

- - - - -
- - - - -
chan unsigned maskupdate_notification
-
- - - - - -
-   - - -

- -

-Definition at line 48 of file display.hcc. -

-Referenced by display_main(), and eventhandler_main().

-


Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/display_8hcc__incl.map b/Graphic_Equalizer/doc/html/display_8hcc__incl.map deleted file mode 100644 index 81a6f64..0000000 --- a/Graphic_Equalizer/doc/html/display_8hcc__incl.map +++ /dev/null @@ -1,8 +0,0 @@ -base referer -rect $configuration_8hch.html 245,7 370,34 -rect $audio_8hch.html 394,7 474,34 -rect $eventhandler__shared_8hch.html 498,7 671,34 -rect $mouse__shared_8hch.html 695,7 831,34 -rect $smartmedia__shared_8hch.html 855,7 1021,34 -rect $display__shared_8hch.html 1045,7 1181,34 -rect $display_8hch.html 1205,7 1293,34 diff --git a/Graphic_Equalizer/doc/html/display_8hcc__incl.md5 b/Graphic_Equalizer/doc/html/display_8hcc__incl.md5 deleted file mode 100644 index 11ba440..0000000 --- a/Graphic_Equalizer/doc/html/display_8hcc__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -5e133a2b43b5f61d89ce22cb97bd0bbb \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/display_8hcc__incl.png b/Graphic_Equalizer/doc/html/display_8hcc__incl.png deleted file mode 100644 index 8341c12..0000000 Binary files a/Graphic_Equalizer/doc/html/display_8hcc__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/display_8hch-source.html b/Graphic_Equalizer/doc/html/display_8hch-source.html deleted file mode 100644 index d345da6..0000000 --- a/Graphic_Equalizer/doc/html/display_8hch-source.html +++ /dev/null @@ -1,49 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/display.hch Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

display.hch

Go to the documentation of this file.
00001 
-00019 #ifndef _DISPLAY_HCH
-00020 #define _DISPLAY_HCH 1
-00021 
-00022 
-00023 
-00024 /*
-00025  * Set the color for various items that will be drawn on screen.
-00026  */
-00027 #define PIXEL                   (pixeldata <- 24)
-00028 #define PIXEL_VOLUME            (0x2d74b5)
-00029 #define PIXEL_EQUALIZER         (0xc7541f)
-00030 #define PIXEL_SPECTRUM          ((((skindata->area_spectrum_bottom -(SCANY <- 10)) <<1) <- 8) @ 0x00 @ (((skindata->area_spectrum_bottom -(SCANY <- 10)) <<1) <- 8))
-00031 #define PIXEL_WAVEFORM          (0x2d74b5)
-00032 
-00033 
-00034 
-00035 /*
-00036  * Main display loop. This function never returns! It handles display output.
-00037  * It needs to respond to certain events set by the events pointer. Also it
-00038  * informs events what the current mask is. To optain the current mask we need
-00039  * the X and Y coordinates from our mousedata pointer.
-00040  */
-00041 void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events, mousedata_t *mousedata);
-00042 
-00043 
-00044 
-00045 /*
-00046  * reload equalizer bars into the display memory.
-00047  */
-00048 void reload_equalizer(events_t *events, unsigned 4 *equalizer_levels_ptr);
-00049 
-00050 #else
-00051 #error "ERROR file display.hch multiple times included"
-00052 #endif /* --- _DISPLAY_HCH --- */
-

Generated on Thu Dec 9 14:37:05 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/display_8hch.html b/Graphic_Equalizer/doc/html/display_8hch.html deleted file mode 100644 index 6dc74ce..0000000 --- a/Graphic_Equalizer/doc/html/display_8hch.html +++ /dev/null @@ -1,348 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/display.hch File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

display.hch File Reference

-

-This graph shows which files directly or indirectly include this file:

Included by dependency graph
- - - - - - - -

-Go to the source code of this file. - - - - - - - - - - - - - - - - - - - - - -

Defines

#define _DISPLAY_HCH   1
#define PIXEL   (pixeldata <- 24)
#define PIXEL_VOLUME   (0x2d74b5)
#define PIXEL_EQUALIZER   (0xc7541f)
#define PIXEL_SPECTRUM   ((((skindata->area_spectrum_bottom -(SCANY <- 10)) <<1) <- 8) @ 0x00 @ (((skindata->area_spectrum_bottom -(SCANY <- 10)) <<1) <- 8))
#define PIXEL_WAVEFORM   (0x2d74b5)

Functions

void display_main (skindata_t *skindata, audiodata_t *audiodata, events_t *events, mousedata_t *mousedata)
 This routine handles all drawing of pixels. It never returns!
void reload_equalizer (events_t *events, unsigned 4 *equalizer_levels_ptr)
 This function copies the supplied equalizer values to the array used for displaying equalizer data.
-


Detailed Description

-

-Graphic Equalizer API

-

-Project information.

-Project Graphic Equalizer
-
Author:
-
Date:
20041011
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041011:
- Initial version -

-Definition in file display.hch.


Define Documentation

-

- - - - -
- - - - -
#define _DISPLAY_HCH   1
-
- - - - - -
-   - - -

- -

-Definition at line 20 of file display.hch.

-

- - - - -
- - - - -
#define PIXEL   (pixeldata <- 24)
-
- - - - - -
-   - - -

- -

-Definition at line 27 of file display.hch. -

-Referenced by display_main().

-

- - - - -
- - - - -
#define PIXEL_VOLUME   (0x2d74b5)
-
- - - - - -
-   - - -

- -

-Definition at line 28 of file display.hch.

-

- - - - -
- - - - -
#define PIXEL_EQUALIZER   (0xc7541f)
-
- - - - - -
-   - - -

- -

-Definition at line 29 of file display.hch.

-

- - - - -
- - - - -
#define PIXEL_SPECTRUM   ((((skindata->area_spectrum_bottom -(SCANY <- 10)) <<1) <- 8) @ 0x00 @ (((skindata->area_spectrum_bottom -(SCANY <- 10)) <<1) <- 8))
-
- - - - - -
-   - - -

- -

-Definition at line 30 of file display.hch. -

-Referenced by display_main().

-

- - - - -
- - - - -
#define PIXEL_WAVEFORM   (0x2d74b5)
-
- - - - - -
-   - - -

- -

-Definition at line 31 of file display.hch.

-


Function Documentation

-

- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void display_main skindata_t skindata,
audiodata_t audiodata,
events_t events,
mousedata_t mousedata
-
- - - - - -
-   - - -

-This routine handles all drawing of pixels. It never returns! -

-

Parameters:
- - - - - -
*skindata struct with all skin information.
*audiodata struct with (i)fft data to be drawn.
*events struct with all events.
*mousedata struct with coordinates to current. X en Y.
-
-
Returns:
Never Returns.
-
Return values:
- - -
void 
-
- -

-Definition at line 65 of file display.hcc. -

-References events_t::active_preset, ADDRESS_SKIN_START, AREA_EQUALIZER_MIN, AREA_SPECTRUM_ANALYZER, AREA_VOLUME_YAXIS, AREA_WAVEFORM, BUTTON_CONCAVE_FULL, BUTTON_CONCAVE_HALF, BUTTON_CONVEX_FULL, BUTTON_CONVEX_HALF, BUTTON_LOG, BUTTON_PRECISE, BUTTON_PRESET_1, BUTTON_PRESET_2, BUTTON_PRESET_3, BUTTON_PRESET_4, BUTTON_PRESET_5, BUTTON_PRESET_6, audiodata_t::display_log, events_t::equalizer_display, events_t::equalizer_mode, events_t::locked_display, events_t::mask, maskupdate_notification, events_t::mode, MODE_GRAPH, MODE_HELP, MOUSE_UPDATED, PIXEL, PIXEL_SPECTRUM, mousedata_t::status, events_t::volume_position, mousedata_t::x, and mousedata_t::y. -

-Referenced by main().

-

- - - - -
- - - - - - - - - - - - - - - - - - -
void reload_equalizer events_t events,
unsigned 4 *  equalizer_levels
-
- - - - - -
-   - - -

-This function copies the supplied equalizer values to the array used for displaying equalizer data. -

-

Parameters:
- - - -
*events events struct
*equalizer_levels pointer to 128 entries where equalizer is to be copied from.
-
-
Returns:
void
-
Return values:
- - -
void 
-
- -

-Definition at line 328 of file display.hcc. -

-References events_t::equalizer_display, equalizer_table_inv, and events_t::locked_display. -

-Referenced by eventhandler_main().

-


Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/display_8hch__dep__incl.map b/Graphic_Equalizer/doc/html/display_8hch__dep__incl.map deleted file mode 100644 index 30f5f5c..0000000 --- a/Graphic_Equalizer/doc/html/display_8hch__dep__incl.map +++ /dev/null @@ -1,5 +0,0 @@ -base referer -rect $display_8hcc.html 8,7 96,34 -rect $eventhandler_8hcc.html 120,7 242,34 -rect $main_8hcc.html 266,7 341,34 -rect $smartmedia_8hcc.html 365,7 482,34 diff --git a/Graphic_Equalizer/doc/html/display_8hch__dep__incl.md5 b/Graphic_Equalizer/doc/html/display_8hch__dep__incl.md5 deleted file mode 100644 index 4d52805..0000000 --- a/Graphic_Equalizer/doc/html/display_8hch__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -fbc7c2d77330776f0959b271562e7250 \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/display_8hch__dep__incl.png b/Graphic_Equalizer/doc/html/display_8hch__dep__incl.png deleted file mode 100644 index f842760..0000000 Binary files a/Graphic_Equalizer/doc/html/display_8hch__dep__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/display__shared_8hch-source.html b/Graphic_Equalizer/doc/html/display__shared_8hch-source.html deleted file mode 100644 index 970054b..0000000 --- a/Graphic_Equalizer/doc/html/display__shared_8hch-source.html +++ /dev/null @@ -1,62 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/display_shared.hch Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

display_shared.hch

Go to the documentation of this file.
00001 
-00020 #ifndef _DISPLAY_SHARED_HCH
-00021 #define _DISPLAY_SHARED_HCH 1
-00022 
-00023 
-00024 
-00029 struct skindata_t {
-00034         struct skin_info_t {
-00035                 unsigned 10 area_bottom;        
-00036                 unsigned 10 area_top;           
-00037                 unsigned 10 area_left;          
-00038                 unsigned 10 area_right;         
-00039                 unsigned 24 color_primary;      
-00040                 unsigned 24 color_secondary;    
-00041         };
-00042         struct skin_info_t waveform;    
-00043         struct skin_info_t spectrum;    
-00044         struct skin_info_t volume;      
-00045         struct skin_info_t equalizer;   
-00046 };
-00047 
-00048 
-00049 
-00050 #define AREA_WAVEFORM           0x01    
-00051 #define AREA_VOLUME_YAXIS       0x02    
-00052 #define AREA_SPECTRUM_ANALYZER  0x03    
-00054 #define BUTTON_LOG              0x04    
-00055 #define BUTTON_DEMO             0x05    
-00056 #define BUTTON_RESET            0x06    
-00058 #define BUTTON_PRESET_1         0x07    
-00059 #define BUTTON_PRESET_2         0x08    
-00060 #define BUTTON_PRESET_3         0x09    
-00061 #define BUTTON_PRESET_4         0x0a    
-00062 #define BUTTON_PRESET_5         0x0b    
-00063 #define BUTTON_PRESET_6         0x0c    
-00065 #define BUTTON_CONVEX_FULL      0x0d    
-00066 #define BUTTON_CONVEX_HALF      0x0e    
-00067 #define BUTTON_PRECISE          0x0f    
-00068 #define BUTTON_CONCAVE_HALF     0x10    
-00069 #define BUTTON_CONCAVE_FULL     0x11    
-00071 #define BUTTON_HELP             0x12    
-00072 #define BUTTON_MODE             0x13    
-00074 #define AREA_EQUALIZER_MIN      0x80    
-00075 #define AREA_EQUALIZER_MAX      0xff    
-00077 #else
-00078 #error "ERROR file display_shared.hch multiple times included"
-00079 #endif /* --- _DISPLAY_SHARED_HCH --- */
-00080 
-

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/display__shared_8hch.html b/Graphic_Equalizer/doc/html/display__shared_8hch.html deleted file mode 100644 index 7d51724..0000000 --- a/Graphic_Equalizer/doc/html/display__shared_8hch.html +++ /dev/null @@ -1,691 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/display_shared.hch File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

display_shared.hch File Reference

Datastructures and defines for usage when interacting with the display library. More... -

- -

-This graph shows which files directly or indirectly include this file:

Included by dependency graph
- - - - - - - -

-Go to the source code of this file. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Data Structures

struct  skindata_t
 This struct contains all area- dimensions and color information for the skin. More...
struct  skindata_t::skin_info_t
 Structure containing the four boundry limits of an area and maximal two colors per area. More...

Defines

#define _DISPLAY_SHARED_HCH   1
#define AREA_WAVEFORM   0x01
#define AREA_VOLUME_YAXIS   0x02
#define AREA_SPECTRUM_ANALYZER   0x03
#define BUTTON_LOG   0x04
#define BUTTON_DEMO   0x05
#define BUTTON_RESET   0x06
#define BUTTON_PRESET_1   0x07
#define BUTTON_PRESET_2   0x08
#define BUTTON_PRESET_3   0x09
#define BUTTON_PRESET_4   0x0a
#define BUTTON_PRESET_5   0x0b
#define BUTTON_PRESET_6   0x0c
#define BUTTON_CONVEX_FULL   0x0d
#define BUTTON_CONVEX_HALF   0x0e
#define BUTTON_PRECISE   0x0f
#define BUTTON_CONCAVE_HALF   0x10
#define BUTTON_CONCAVE_FULL   0x11
#define BUTTON_HELP   0x12
#define BUTTON_MODE   0x13
#define AREA_EQUALIZER_MIN   0x80
#define AREA_EQUALIZER_MAX   0xff
-


Detailed Description

-Datastructures and defines for usage when interacting with the display library. -

-

-Project information.

-Graphic Equalizer 2
-
Author:
-
Date:
20041011
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041011:
- Initial version -

-Definition in file display_shared.hch.


Define Documentation

-

- - - - -
- - - - -
#define _DISPLAY_SHARED_HCH   1
-
- - - - - -
-   - - -

- -

-Definition at line 21 of file display_shared.hch.

-

- - - - -
- - - - -
#define AREA_WAVEFORM   0x01
-
- - - - - -
-   - - -

-Waveform area. -

-Definition at line 50 of file display_shared.hch. -

-Referenced by display_main().

-

- - - - -
- - - - -
#define AREA_VOLUME_YAXIS   0x02
-
- - - - - -
-   - - -

-Volume control on the Y plane. -

-Definition at line 51 of file display_shared.hch. -

-Referenced by display_main(), and eventhandler_main().

-

- - - - -
- - - - -
#define AREA_SPECTRUM_ANALYZER   0x03
-
- - - - - -
-   - - -

-Spectrum Analyzer area. -

-Definition at line 52 of file display_shared.hch. -

-Referenced by display_main().

-

- - - - -
- - - - -
#define BUTTON_LOG   0x04
-
- - - - - -
-   - - -

-Logarithmic display button. -

-Definition at line 54 of file display_shared.hch. -

-Referenced by display_main(), and eventhandler_main().

-

- - - - -
- - - - -
#define BUTTON_DEMO   0x05
-
- - - - - -
-   - - -

-Demo preset button. -

-Definition at line 55 of file display_shared.hch. -

-Referenced by eventhandler_main().

-

- - - - -
- - - - -
#define BUTTON_RESET   0x06
-
- - - - - -
-   - - -

-Reset presets button. -

-Definition at line 56 of file display_shared.hch. -

-Referenced by eventhandler_main().

-

- - - - -
- - - - -
#define BUTTON_PRESET_1   0x07
-
- - - - - -
-   - - -

-Button for switching to preset 1 -

-Definition at line 58 of file display_shared.hch. -

-Referenced by display_main(), and eventhandler_main().

-

- - - - -
- - - - -
#define BUTTON_PRESET_2   0x08
-
- - - - - -
-   - - -

-Button for switching to preset 2 -

-Definition at line 59 of file display_shared.hch. -

-Referenced by display_main().

-

- - - - -
- - - - -
#define BUTTON_PRESET_3   0x09
-
- - - - - -
-   - - -

-Button for switching to preset 3 -

-Definition at line 60 of file display_shared.hch. -

-Referenced by display_main().

-

- - - - -
- - - - -
#define BUTTON_PRESET_4   0x0a
-
- - - - - -
-   - - -

-Button for switching to preset 4 -

-Definition at line 61 of file display_shared.hch. -

-Referenced by display_main().

-

- - - - -
- - - - -
#define BUTTON_PRESET_5   0x0b
-
- - - - - -
-   - - -

-Button for switching to preset 5 -

-Definition at line 62 of file display_shared.hch. -

-Referenced by display_main().

-

- - - - -
- - - - -
#define BUTTON_PRESET_6   0x0c
-
- - - - - -
-   - - -

-Button for switching to preset 6 -

-Definition at line 63 of file display_shared.hch. -

-Referenced by display_main().

-

- - - - -
- - - - -
#define BUTTON_CONVEX_FULL   0x0d
-
- - - - - -
-   - - -

-/ - \ 'Convex' mode Button -

-Definition at line 65 of file display_shared.hch. -

-Referenced by display_main().

-

- - - - -
- - - - -
#define BUTTON_CONVEX_HALF   0x0e
-
- - - - - -
-   - - -

-/\ 'Convex' mode Button -

-Definition at line 66 of file display_shared.hch. -

-Referenced by display_main().

-

- - - - -
- - - - -
#define BUTTON_PRECISE   0x0f
-
- - - - - -
-   - - -

-| 'Precise' selection Button -

-Definition at line 67 of file display_shared.hch. -

-Referenced by display_main(), and eventhandler_main().

-

- - - - -
- - - - -
#define BUTTON_CONCAVE_HALF   0x10
-
- - - - - -
-   - - -

-\/ 'Concave' mode Button -

-Definition at line 68 of file display_shared.hch. -

-Referenced by display_main().

-

- - - - -
- - - - -
#define BUTTON_CONCAVE_FULL   0x11
-
- - - - - -
-   - - -

-\ _ / 'Concave' mode Button -

-Definition at line 69 of file display_shared.hch. -

-Referenced by display_main().

-

- - - - -
- - - - -
#define BUTTON_HELP   0x12
-
- - - - - -
-   - - -

-Button to display help screen. -

-Definition at line 71 of file display_shared.hch. -

-Referenced by eventhandler_main().

-

- - - - -
- - - - -
#define BUTTON_MODE   0x13
-
- - - - - -
-   - - -

-Button to change operation mode. -

-Definition at line 72 of file display_shared.hch. -

-Referenced by eventhandler_main().

-

- - - - -
- - - - -
#define AREA_EQUALIZER_MIN   0x80
-
- - - - - -
-   - - -

-First bar of the Equalizer Area. -

-Definition at line 74 of file display_shared.hch. -

-Referenced by display_main(), and eventhandler_main().

-

- - - - -
- - - - -
#define AREA_EQUALIZER_MAX   0xff
-
- - - - - -
-   - - -

-Last bar of the Equalizer Area. -

-Definition at line 75 of file display_shared.hch. -

-Referenced by eventhandler_main().

-


Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/display__shared_8hch__dep__incl.map b/Graphic_Equalizer/doc/html/display__shared_8hch__dep__incl.map deleted file mode 100644 index 30f5f5c..0000000 --- a/Graphic_Equalizer/doc/html/display__shared_8hch__dep__incl.map +++ /dev/null @@ -1,5 +0,0 @@ -base referer -rect $display_8hcc.html 8,7 96,34 -rect $eventhandler_8hcc.html 120,7 242,34 -rect $main_8hcc.html 266,7 341,34 -rect $smartmedia_8hcc.html 365,7 482,34 diff --git a/Graphic_Equalizer/doc/html/display__shared_8hch__dep__incl.md5 b/Graphic_Equalizer/doc/html/display__shared_8hch__dep__incl.md5 deleted file mode 100644 index 2c831b5..0000000 --- a/Graphic_Equalizer/doc/html/display__shared_8hch__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -6ad6e26d3432e59b7a161de855d0e8bc \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/display__shared_8hch__dep__incl.png b/Graphic_Equalizer/doc/html/display__shared_8hch__dep__incl.png deleted file mode 100644 index 7484dd7..0000000 Binary files a/Graphic_Equalizer/doc/html/display__shared_8hch__dep__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/doxygen.css b/Graphic_Equalizer/doc/html/doxygen.css deleted file mode 100644 index 1d4d631..0000000 --- a/Graphic_Equalizer/doc/html/doxygen.css +++ /dev/null @@ -1,271 +0,0 @@ -BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { - font-family: Geneva, Arial, Helvetica, sans-serif; -} -H1 { - text-align: center; -} -CAPTION { font-weight: bold } -DIV.qindex { - width: 100%; - background-color: #eeeeff; - border: 1px solid #b0b0b0; - text-align: center; - margin: 2px; - padding: 2px; - line-height: 140%; -} -DIV.nav { - width: 100%; - background-color: #eeeeff; - border: 1px solid #b0b0b0; - text-align: center; - margin: 2px; - padding: 2px; - line-height: 140%; -} -A.qindex { - text-decoration: none; - font-weight: bold; - color: #1A419D; -} -A.qindex:visited { - text-decoration: none; - font-weight: bold; - color: #1A419D -} -A.qindex:hover { - text-decoration: none; - background-color: #ddddff; -} -A.qindexHL { - text-decoration: none; - font-weight: bold; - background-color: #6666cc; - color: #ffffff; - border: 1px double #9295C2; -} -A.qindexHL:hover { - text-decoration: none; - background-color: #6666cc; - color: #ffffff; -} -A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff } -A.el { text-decoration: none; font-weight: bold } -A.elRef { font-weight: bold } -A.code:link { text-decoration: none; font-weight: normal; color: #0000FF} -A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF} -A.codeRef:link { font-weight: normal; color: #0000FF} -A.codeRef:visited { font-weight: normal; color: #0000FF} -A:hover { text-decoration: none; background-color: #f2f2ff } -DL.el { margin-left: -1cm } -.fragment { - font-family: monospace -} -PRE.fragment { - border: 1px solid #CCCCCC; - background-color: #f5f5f5; - margin-top: 4px; - margin-bottom: 4px; - margin-left: 2px; - margin-right: 8px; - padding-left: 6px; - padding-right: 6px; - padding-top: 4px; - padding-bottom: 4px; -} -DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } -TD.md { background-color: #F4F4FB; font-weight: bold; } -TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; } -TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; } -DIV.groupHeader { - margin-left: 16px; - margin-top: 12px; - margin-bottom: 6px; - font-weight: bold; -} -DIV.groupText { margin-left: 16px; font-style: italic; font-size: 14px } -BODY { - background: white; - color: black; - margin-right: 20px; - margin-left: 20px; -} -TD.indexkey { - background-color: #eeeeff; - font-weight: bold; - padding-right : 10px; - padding-top : 2px; - padding-left : 10px; - padding-bottom : 2px; - margin-left : 0px; - margin-right : 0px; - margin-top : 2px; - margin-bottom : 2px; - border: 1px solid #CCCCCC; -} -TD.indexvalue { - background-color: #eeeeff; - font-style: italic; - padding-right : 10px; - padding-top : 2px; - padding-left : 10px; - padding-bottom : 2px; - margin-left : 0px; - margin-right : 0px; - margin-top : 2px; - margin-bottom : 2px; - border: 1px solid #CCCCCC; -} -TR.memlist { - background-color: #f0f0f0; -} -P.formulaDsp { text-align: center; } -IMG.formulaDsp { } -IMG.formulaInl { vertical-align: middle; } -SPAN.keyword { color: #008000 } -SPAN.keywordtype { color: #604020 } -SPAN.keywordflow { color: #e08000 } -SPAN.comment { color: #800000 } -SPAN.preprocessor { color: #806020 } -SPAN.stringliteral { color: #002080 } -SPAN.charliteral { color: #008080 } -.mdTable { - border: 1px solid #868686; - background-color: #F4F4FB; -} -.mdRow { - padding: 8px 10px; -} -.mdescLeft { - padding: 0px 8px 4px 8px; - font-size: 12px; - font-style: italic; - background-color: #FAFAFA; - border-top: 1px none #E0E0E0; - border-right: 1px none #E0E0E0; - border-bottom: 1px none #E0E0E0; - border-left: 1px none #E0E0E0; - margin: 0px; -} -.mdescRight { - padding: 0px 8px 4px 8px; - font-size: 12px; - font-style: italic; - background-color: #FAFAFA; - border-top: 1px none #E0E0E0; - border-right: 1px none #E0E0E0; - border-bottom: 1px none #E0E0E0; - border-left: 1px none #E0E0E0; - margin: 0px; -} -.memItemLeft { - padding: 1px 0px 0px 8px; - margin: 4px; - border-top-width: 1px; - border-right-width: 1px; - border-bottom-width: 1px; - border-left-width: 1px; - border-top-color: #E0E0E0; - border-right-color: #E0E0E0; - border-bottom-color: #E0E0E0; - border-left-color: #E0E0E0; - border-top-style: solid; - border-right-style: none; - border-bottom-style: none; - border-left-style: none; - background-color: #FAFAFA; - font-size: 12px; -} -.memItemRight { - padding: 1px 8px 0px 8px; - margin: 4px; - border-top-width: 1px; - border-right-width: 1px; - border-bottom-width: 1px; - border-left-width: 1px; - border-top-color: #E0E0E0; - border-right-color: #E0E0E0; - border-bottom-color: #E0E0E0; - border-left-color: #E0E0E0; - border-top-style: solid; - border-right-style: none; - border-bottom-style: none; - border-left-style: none; - background-color: #FAFAFA; - font-size: 13px; -} -.memTemplItemLeft { - padding: 1px 0px 0px 8px; - margin: 4px; - border-top-width: 1px; - border-right-width: 1px; - border-bottom-width: 1px; - border-left-width: 1px; - border-top-color: #E0E0E0; - border-right-color: #E0E0E0; - border-bottom-color: #E0E0E0; - border-left-color: #E0E0E0; - border-top-style: none; - border-right-style: none; - border-bottom-style: none; - border-left-style: none; - background-color: #FAFAFA; - font-size: 12px; -} -.memTemplItemRight { - padding: 1px 8px 0px 8px; - margin: 4px; - border-top-width: 1px; - border-right-width: 1px; - border-bottom-width: 1px; - border-left-width: 1px; - border-top-color: #E0E0E0; - border-right-color: #E0E0E0; - border-bottom-color: #E0E0E0; - border-left-color: #E0E0E0; - border-top-style: none; - border-right-style: none; - border-bottom-style: none; - border-left-style: none; - background-color: #FAFAFA; - font-size: 13px; -} -.memTemplParams { - padding: 1px 0px 0px 8px; - margin: 4px; - border-top-width: 1px; - border-right-width: 1px; - border-bottom-width: 1px; - border-left-width: 1px; - border-top-color: #E0E0E0; - border-right-color: #E0E0E0; - border-bottom-color: #E0E0E0; - border-left-color: #E0E0E0; - border-top-style: solid; - border-right-style: none; - border-bottom-style: none; - border-left-style: none; - color: #606060; - background-color: #FAFAFA; - font-size: 12px; -} -.search { color: #003399; - font-weight: bold; -} -FORM.search { - margin-bottom: 0px; - margin-top: 0px; -} -INPUT.search { font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #eeeeff; -} -TD.tiny { font-size: 75%; -} -a { - color: #252E78; -} -a:visited { - color: #3D2185; -} diff --git a/Graphic_Equalizer/doc/html/doxygen.png b/Graphic_Equalizer/doc/html/doxygen.png deleted file mode 100644 index f0a274b..0000000 Binary files a/Graphic_Equalizer/doc/html/doxygen.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hcc-source.html b/Graphic_Equalizer/doc/html/eventhandler_8hcc-source.html deleted file mode 100644 index f6433b3..0000000 --- a/Graphic_Equalizer/doc/html/eventhandler_8hcc-source.html +++ /dev/null @@ -1,299 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/eventhandler.hcc Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

eventhandler.hcc

Go to the documentation of this file.
00001 
-00021 /******** System Includes *************/
-00022 #include <stdlib.hch>
-00023 
-00024 #include "pal_master.hch"
-00025 
-00026 /******** Application Includes ********/
-00027 #include "configuration.hch"
-00028 #include "audio.hch"
-00029 #include "mouse_shared.hch"
-00030 #include "eventhandler_shared.hch"
-00031 #include "eventhandler.hch"
-00032 #include "events.hch"
-00033 #include "display_shared.hch"
-00034 #include "display.hch"
-00035 
-00036 #if HAVE_DEBUG
-00037         #include "debug.hch"
-00038 #endif
-00039 
-00040 
-00041 
-00042 /*
-00043  */
-00044 extern chan unsigned 1 maskupdate_notification;
-00045 
-00046 
-00047 
-00059 void eventhandler_main(audiodata_t *audiodata, events_t *events, mousedata_t *mousedata) {
-00060         mpram {
-00061                 ram unsigned 4 write[768];      
-00062                 rom unsigned 4 read[768];       
-00063         } equalizer_levels with { block = "BlockRAM"};
-00064 
-00065         unsigned 10 preset_offset;
-00066         unsigned 10 reference_point, reference_point_right;
-00067         unsigned 5 volume_left;
-00068         unsigned 4 index_offset, index_end;
-00069         unsigned 4 equalizer_mode_local;
-00070         unsigned 1 newmaskupdate;
-00071 
-00072         load_preset(LOAD_PRESET_RESET, equalizer_levels.write);
-00073         reload_equalizer(events, &equalizer_levels.write[preset_offset]);
-00074 
-00075         while (TRUE) {
-00076                 maskupdate_notification ? newmaskupdate;
-00077 
-00078                 /*
-00079                  * First we determine what mousestate we currently have. Then
-00080                  * we check where we are to decide what to do.
-00081                  */
-00082                 switch (mousedata->state) {
-00083                         case MOUSE_STATE_ON_PRESS:
-00084                                 /*
-00085                                  * If we are displaying the graphic visual,
-00086                                  * any press returns to the application.
-00087                                  */
-00088                                 if (MODE_GRAPH == events->mode) {
-00089                                         events->mode = MODE_SKIN;
-00090                                         events->mask = 0;
-00091                                 } else {
-00092                                         delay;
-00093                                 }
-00094 
-00095                                 /*
-00096                                  */
-00097                                 if (BUTTON_MODE == events->mask) {
-00098                                         if (MODE_GRAPH == events->mode) {
-00099                                                 events->mode = MODE_SKIN;
-00100                                         } else {
-00101                                                 events->mode = MODE_GRAPH;
-00102                                         }
-00103                                 } else {
-00104                                         delay;
-00105                                 }
-00106 
-00107                                 /*
-00108                                  * If the current mask equals the help button
-00109                                  * we set display mode to help.
-00110                                  */
-00111                                 if (BUTTON_HELP == events->mask) {
-00112                                         /*
-00113                                          * Change the mode to help if it's
-00114                                          * currently not set, otherwise go back
-00115                                          * to skin mode.
-00116                                          */
-00117                                         if (MODE_HELP == events->mode) {
-00118                                                 events->mode = MODE_SKIN;
-00119                                         } else {
-00120                                                 events->mode = MODE_HELP;
-00121                                         }
-00122                                 } else {
-00123                                         delay;
-00124                                 }
-00125 
-00126                                 /*
-00127                                  * The Preset buttons span from 1 to 6 so if
-00128                                  * the mask one of those, we'll change the
-00129                                  * pointer to point to the current preset.
-00130                                  */
-00131                                 if ((BUTTON_PRESET_1 <= events->mask) && (events->mask <= BUTTON_PRESET_6)) {
-00132                                         /*
-00133                                          * The active preset is determined by
-00134                                          * the mask minus an offset. Hence
-00135                                          * ranging our active preset from 0 to
-00136                                          * 6.
-00137                                          */
-00138                                         events->active_preset = 0 @ (events->mask -BUTTON_PRESET_1);
-00139                                         /*
-00140                                          * Each equalizer is 128 bands wide,
-00141                                          * thus we need to add 128 * the preset
-00142                                          * for each different preset. This
-00143                                          * offset is calculated here.
-00144                                          */
-00145                                         preset_offset = events->active_preset << 7;
-00146                                         /*
-00147                                          * We set the pointer to the active
-00148                                          * part of the array by using the
-00149                                          * preset offset as our index. Hence
-00150                                          * depending on the selected preset
-00151                                          * we point to 0, 128, 256, 384, 512
-00152                                          * or 640.
-00153                                          */
-00154                                         audiodata->equalizer_levels_ptr = &equalizer_levels.read[preset_offset];
-00155                                         /*
-00156                                          * Finally update the equalizer bars
-00157                                          * that are drawn by the display.
-00158                                          */
-00159                                         reload_equalizer(events, &equalizer_levels.write[preset_offset]);
-00160                                 } else {
-00161                                         delay;
-00162                                 }
-00163 
-00164                                 if ((BUTTON_PRECISE <= events->mask) && (events->mask <= BUTTON_CONVEX_FULL)) {
-00165                                         events->equalizer_mode = (events->mask -BUTTON_PRECISE) <-4;
-00166                                 } else {
-00167                                         delay;
-00168                                 }
-00169 
-00170                                 /*
-00171                                  * If the demo button was pressed load the
-00172                                  * demo preset values into the presets.
-00173                                  */
-00174                                 if (BUTTON_DEMO == events->mask) {
-00175                                         load_preset(LOAD_PRESET_DEMO, equalizer_levels.write);
-00176                                         reload_equalizer(events, &equalizer_levels.write[preset_offset]);
-00177                                 }
-00178 
-00179                                 /*
-00180                                  * If the reset button was pressed load the
-00181                                  * reset values into the presets.
-00182                                  */
-00183                                 if (BUTTON_RESET == events->mask) {
-00184                                         load_preset(LOAD_PRESET_RESET, equalizer_levels.write);
-00185                                         reload_equalizer(events, &equalizer_levels.write[preset_offset]);
-00186                                 }
-00187 
-00188                                 /*
-00189                                  * If the current mask equals the log button,
-00190                                  * we flip the display_log bit.
-00191                                  */
-00192                                 if (BUTTON_LOG == events->mask) {
-00193                                         audiodata->display_log = !audiodata->display_log;
-00194                                 } else {
-00195                                         delay;
-00196                                 }
-00197 
-00198                                 break;
-00199 
-00200                         case MOUSE_STATE_DOWN:
-00201                                 /*
-00202                                  * If we are in the volume area we update the
-00203                                  * volume level for both channels.
-00204                                  */
-00205                                 if (AREA_VOLUME_YAXIS == events->mask) {
-00206                                         /*
-00207                                          * Copy the current Y cursor position
-00208                                          * to the events struct. This we then
-00209                                          * later use for drawing purposes.
-00210                                          */
-00211                                         events->volume_position = 0 @ mousedata->y;
-00212                                         /*
-00213                                          * Look the relative y-coordinate up in
-00214                                          * the volumecontrol lookup table. We
-00215                                          * make a local copy here because the
-00216                                          * RC200 call doesn't behave nicely
-00217                                          * when passing anything else.
-00218                                          */
-00219                                         volume_left = volumecontrol_table[((mousedata->y) -65) <- 6];
-00220                                         /*
-00221                                          * We feel that volume gets softer the
-00222                                          * closer it gets to the 0, and louder
-00223                                          * as it approaches 0x1f. The SetVolume
-00224                                          * RC200 call does this in an unnatural
-00225                                          * reverse way. Therefor we fix it.
-00226                                          */
-00227                                         RC200AudioOutSetVolume(!volume_left, 0x1f -volume_left, 0x1f -volume_left);
-00228                                 } else {
-00229                                         delay;
-00230                                 }
-00231 
-00232                                 if ((AREA_EQUALIZER_MIN <= events->mask) && (events->mask <= AREA_EQUALIZER_MAX)) {
-00233 
-00234                                         if (EQUALIZERMODE_PRECISE == events->equalizer_mode) {
-00235                                                 events->locked_display = TRUE;
-00236                                                 equalizer_levels.write[preset_offset +(0 @ events->mask) -AREA_EQUALIZER_MIN] = equalizer_table[mousedata->y -382];
-00237                                                 events->equalizer_display[(events->mask -AREA_EQUALIZER_MIN) <- 7] = mousedata->y;
-00238                                                 events->locked_display = FALSE;
-00239                                         } else {
-00240                                                 
-00241                                                 equalizer_mode_local = events->equalizer_mode +1;
-00242 
-00243                                                 events->locked_display = TRUE;
-00244                                                 index_offset = ((equalizer_mode_local << 1)); /* delay; */
-00245 
-00246                                                 if (events->mask < (AREA_EQUALIZER_MIN +(0 @ equalizer_mode_local))) {
-00247                                                         reference_point = events->equalizer_display[AREA_EQUALIZER_MIN -AREA_EQUALIZER_MIN];
-00248                                                         index_offset -= (((0 @ equalizer_mode_local) -(events->mask -AREA_EQUALIZER_MIN)) <- 4);
-00249                                                 } else {
-00250                                                         reference_point = events->equalizer_display[(events->mask - (0 @ equalizer_mode_local) -AREA_EQUALIZER_MIN) <- 7];
-00251                                                         index_offset -= 1;
-00252                                                 }
-00253 
-00254                                                 if (events->mask > (AREA_EQUALIZER_MAX -(0 @ equalizer_mode_local))) {
-00255                                                         reference_point_right = events->equalizer_display[AREA_EQUALIZER_MAX -AREA_EQUALIZER_MIN];
-00256                                                         index_end = (((0 @ equalizer_mode_local) -(AREA_EQUALIZER_MAX -events->mask)) <- 4) -1;
-00257                                                 } else {
-00258                                                         reference_point_right = events->equalizer_display[(events->mask + (0 @ equalizer_mode_local) -AREA_EQUALIZER_MIN) <- 7];
-00259                                                         index_end = 0;
-00260                                                 }
-00261                                                 events->locked_display = FALSE;
-00262 
-00263                                                 for (; index_offset != index_end; index_offset--) {
-00264                                                         unsigned 10 average_bar;
-00265                                                         unsigned 7 equalizer_index;
-00266                                                         unsigned 4 bar_index;
-00267                                                         
-00268                                                         if (index_offset == equalizer_mode_local) {
-00269                                                                 reference_point = reference_point_right;
-00270                                                         } else {
-00271                                                                 delay;
-00272                                                         }
-00273 
-00274                                                         if (index_offset > equalizer_mode_local) 
-00275                                                         {
-00276                                                                 bar_index = (index_offset -equalizer_mode_local);                       
-00277                                                                 equalizer_index = ((events->mask -(0 @ bar_index) -AREA_EQUALIZER_MIN) <- 7);
-00278                                                         } else 
-00279                                                         {
-00280                                                                 bar_index = (equalizer_mode_local -index_offset);
-00281                                                                 equalizer_index = ((events->mask +(0 @ bar_index) -AREA_EQUALIZER_MIN) <- 7);   
-00282                                                         }
-00283 
-00284                                                         if (reference_point > mousedata->y) {
-00285                                                                 average_bar = mousedata->y +((reference_point -mousedata->y) >> (equalizer_mode_local -bar_index));
-00286                                                         } else {
-00287                                                                 average_bar = mousedata->y -((mousedata->y -reference_point) >> (equalizer_mode_local -bar_index));
-00288                                                         }
-00289                                                                                                         
-00290                                                         events->locked_display = TRUE;
-00291                                                         equalizer_levels.write[preset_offset +(0 @ equalizer_index)] = equalizer_table[average_bar -382];
-00292                                                         events->equalizer_display[equalizer_index] = average_bar;
-00293                                                         events->locked_display = FALSE;                                         
-00294                                                 }
-00295                                         }
-00296                                 } else {
-00297                                         delay;
-00298                                 }
-00299 
-00300                                 break;
-00301 
-00302                         default:
-00303                                 break;
-00304                 }
-00305         }
-00306 } /* --- eventhandler_main() --- */
-00307 
-00308 
-00309 
-00310 /*
-00311  * Volume Control lookuptable.
-00312  * TODO: This table is now hardcoded. To ensure full skinability this table
-00313  * should be dynamically loaded.
-00314  */
-00315 rom unsigned 5 volumecontrol_table[46] = {31, 31, 30, 30, 29, 29, 28, 28, 27, 27, 26, 26, 25, 25, 24,  24, 23, 23, 22, 22, 21, 21, 20, 20, 19, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0};
-

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hcc.html b/Graphic_Equalizer/doc/html/eventhandler_8hcc.html deleted file mode 100644 index 3d700ac..0000000 --- a/Graphic_Equalizer/doc/html/eventhandler_8hcc.html +++ /dev/null @@ -1,191 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/eventhandler.hcc File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

eventhandler.hcc File Reference

#include <stdlib.hch>
-#include "pal_master.hch"
-#include "configuration.hch"
-#include "audio.hch"
-#include "mouse_shared.hch"
-#include "eventhandler_shared.hch"
-#include "eventhandler.hch"
-#include "events.hch"
-#include "display_shared.hch"
-#include "display.hch"
- -

-Include dependency graph for eventhandler.hcc:

Include dependency graph
- - - - - - - - - - - -

-Go to the source code of this file. - - - - - - - - - -

Functions

void eventhandler_main (audiodata_t *audiodata, events_t *events, mousedata_t *mousedata)

Variables

chan unsigned maskupdate_notification
rom unsigned volumecontrol_table [46] = {31, 31, 30, 30, 29, 29, 28, 28, 27, 27, 26, 26, 25, 25, 24, 24, 23, 23, 22, 22, 21, 21, 20, 20, 19, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0}
-


Detailed Description

-

-Graphic Equalizer API

-when the mousehandler registers a 'click' we coordinate the actions that follow that click.

-Project information.

-Project Graphic Equalizer
-
Author:
O.M. Schinagl
-
Date:
20041110
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041110: O.M. Schinagl
- Initial version -

-Definition in file eventhandler.hcc.


Function Documentation

-

- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void eventhandler_main audiodata_t audiodata,
events_t events,
mousedata_t mousedata
-
- - - - - -
-   - - -

-

Parameters:
- - - - -
*audiodata pointer to struct for setting equalizer levels.
*events pointer to struct with all events for display states.
*mousedata pointer to struct with mouse data for X and Y coordinates.
-
-
Returns:
Never Returns.
-
Return values:
- - -
void 
-
- -

-Definition at line 59 of file eventhandler.hcc. -

-References events_t::active_preset, AREA_EQUALIZER_MAX, AREA_EQUALIZER_MIN, AREA_VOLUME_YAXIS, BUTTON_DEMO, BUTTON_HELP, BUTTON_LOG, BUTTON_MODE, BUTTON_PRECISE, BUTTON_PRESET_1, BUTTON_RESET, audiodata_t::display_log, events_t::equalizer_display, audiodata_t::equalizer_levels_ptr, events_t::equalizer_mode, equalizer_table, EQUALIZERMODE_PRECISE, load_preset(), LOAD_PRESET_DEMO, LOAD_PRESET_RESET, events_t::locked_display, events_t::mask, maskupdate_notification, events_t::mode, MODE_GRAPH, MODE_HELP, MOUSE_STATE_DOWN, MOUSE_STATE_ON_PRESS, reload_equalizer(), mousedata_t::state, events_t::volume_position, volumecontrol_table, and mousedata_t::y. -

-Referenced by main().

- -

-Here is the call graph for this function:

- - - - -

Variable Documentation

-

- - - - -
- - - - -
chan unsigned maskupdate_notification
-
- - - - - -
-   - - -

- -

-Definition at line 48 of file display.hcc. -

-Referenced by display_main(), and eventhandler_main().

-

- - - - -
- - - - -
rom unsigned volumecontrol_table[46] = {31, 31, 30, 30, 29, 29, 28, 28, 27, 27, 26, 26, 25, 25, 24, 24, 23, 23, 22, 22, 21, 21, 20, 20, 19, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0}
-
- - - - - -
-   - - -

- -

-Definition at line 315 of file eventhandler.hcc. -

-Referenced by eventhandler_main().

-


Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hcc__incl.map b/Graphic_Equalizer/doc/html/eventhandler_8hcc__incl.map deleted file mode 100644 index 8e10f06..0000000 --- a/Graphic_Equalizer/doc/html/eventhandler_8hcc__incl.map +++ /dev/null @@ -1,9 +0,0 @@ -base referer -rect $configuration_8hch.html 245,7 370,34 -rect $audio_8hch.html 394,7 474,34 -rect $mouse__shared_8hch.html 498,7 634,34 -rect $eventhandler__shared_8hch.html 658,7 832,34 -rect $eventhandler_8hch.html 856,7 981,34 -rect $events_8hch.html 1005,7 1090,34 -rect $display__shared_8hch.html 1114,7 1250,34 -rect $display_8hch.html 1274,7 1362,34 diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hcc__incl.md5 b/Graphic_Equalizer/doc/html/eventhandler_8hcc__incl.md5 deleted file mode 100644 index 43b12ac..0000000 --- a/Graphic_Equalizer/doc/html/eventhandler_8hcc__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -e8a7f337e9a3e5ae2e720dcb8252ef7e \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hcc__incl.png b/Graphic_Equalizer/doc/html/eventhandler_8hcc__incl.png deleted file mode 100644 index 09c2a45..0000000 Binary files a/Graphic_Equalizer/doc/html/eventhandler_8hcc__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hcc_a2_cgraph.map b/Graphic_Equalizer/doc/html/eventhandler_8hcc_a2_cgraph.map deleted file mode 100644 index def60cd..0000000 --- a/Graphic_Equalizer/doc/html/eventhandler_8hcc_a2_cgraph.map +++ /dev/null @@ -1,3 +0,0 @@ -base referer -rect $events_8hcc.html#a3 210,7 301,34 -rect $display_8hcc.html#a3 195,58 315,85 diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hcc_a2_cgraph.md5 b/Graphic_Equalizer/doc/html/eventhandler_8hcc_a2_cgraph.md5 deleted file mode 100644 index 2dffa3a..0000000 --- a/Graphic_Equalizer/doc/html/eventhandler_8hcc_a2_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -61d7348e8088689b8e9bef2cac7fb456 \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hcc_a2_cgraph.png b/Graphic_Equalizer/doc/html/eventhandler_8hcc_a2_cgraph.png deleted file mode 100644 index d07857b..0000000 Binary files a/Graphic_Equalizer/doc/html/eventhandler_8hcc_a2_cgraph.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hcc_a3_cgraph.map b/Graphic_Equalizer/doc/html/eventhandler_8hcc_a3_cgraph.map deleted file mode 100644 index e15c770..0000000 --- a/Graphic_Equalizer/doc/html/eventhandler_8hcc_a3_cgraph.map +++ /dev/null @@ -1,3 +0,0 @@ -base referer -rect $events_8hcc.html#a2 210,7 301,34 -rect $display_8hcc.html#a4 195,58 315,85 diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hcc_a3_cgraph.md5 b/Graphic_Equalizer/doc/html/eventhandler_8hcc_a3_cgraph.md5 deleted file mode 100644 index 5572015..0000000 --- a/Graphic_Equalizer/doc/html/eventhandler_8hcc_a3_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -4cc99ebc2d7ee85c7be875aa4524a42e \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hcc_a3_cgraph.png b/Graphic_Equalizer/doc/html/eventhandler_8hcc_a3_cgraph.png deleted file mode 100644 index d07857b..0000000 Binary files a/Graphic_Equalizer/doc/html/eventhandler_8hcc_a3_cgraph.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hch-source.html b/Graphic_Equalizer/doc/html/eventhandler_8hch-source.html deleted file mode 100644 index a53a027..0000000 --- a/Graphic_Equalizer/doc/html/eventhandler_8hch-source.html +++ /dev/null @@ -1,36 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/eventhandler.hch Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

eventhandler.hch

Go to the documentation of this file.
00001 
-00019 #ifndef _EVENTHANDLER_HCH
-00020 #define _EVENTHANDLER_HCH 1
-00021 
-00022 
-00023 
-00024 #define LOAD_PRESET_RESET       0x000
-00025 #define LOAD_PRESET_DEMO        0x180
-00026 
-00027 
-00028 
-00029 /*
-00030  * This is the main eventhandler loop. We require pointers to the event struct
-00031  * to store actions to be performed and a mousedata pointer so that we know on
-00032  * what mousestate to respond. We never returns!
-00033  */
-00034 void eventhandler_main(audiodata_t *audiodata, events_t *events, mousedata_t *mousedata);
-00035 
-00036 #else
-00037 #error "ERROR file eventhandler.hch multiple times included"
-00038 #endif /* --- _EVENTHANDLER_HCH --- */
-00039 
-

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hch.html b/Graphic_Equalizer/doc/html/eventhandler_8hch.html deleted file mode 100644 index cbaba8d..0000000 --- a/Graphic_Equalizer/doc/html/eventhandler_8hch.html +++ /dev/null @@ -1,202 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/eventhandler.hch File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

eventhandler.hch File Reference

-

-This graph shows which files directly or indirectly include this file:

Included by dependency graph
- - - - - -

-Go to the source code of this file. - - - - - - - - - - - -

Defines

#define _EVENTHANDLER_HCH   1
#define LOAD_PRESET_RESET   0x000
#define LOAD_PRESET_DEMO   0x180

Functions

void eventhandler_main (audiodata_t *audiodata, events_t *events, mousedata_t *mousedata)
-


Detailed Description

-

-Graphic Equalizer API

-

-Project information.

-Project Graphic Equalizer
-
Author:
O.M. Schinagl
-
Date:
20041110
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041110: O.M. Schinagl
- Initial version -

-Definition in file eventhandler.hch.


Define Documentation

-

- - - - -
- - - - -
#define _EVENTHANDLER_HCH   1
-
- - - - - -
-   - - -

- -

-Definition at line 20 of file eventhandler.hch.

-

- - - - -
- - - - -
#define LOAD_PRESET_RESET   0x000
-
- - - - - -
-   - - -

- -

-Definition at line 24 of file eventhandler.hch. -

-Referenced by eventhandler_main().

-

- - - - -
- - - - -
#define LOAD_PRESET_DEMO   0x180
-
- - - - - -
-   - - -

- -

-Definition at line 25 of file eventhandler.hch. -

-Referenced by eventhandler_main().

-


Function Documentation

-

- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void eventhandler_main audiodata_t audiodata,
events_t events,
mousedata_t mousedata
-
- - - - - -
-   - - -

-

Parameters:
- - - - -
*audiodata pointer to struct for setting equalizer levels.
*events pointer to struct with all events for display states.
*mousedata pointer to struct with mouse data for X and Y coordinates.
-
-
Returns:
Never Returns.
-
Return values:
- - -
void 
-
- -

-Definition at line 59 of file eventhandler.hcc. -

-References events_t::active_preset, AREA_EQUALIZER_MAX, AREA_EQUALIZER_MIN, AREA_VOLUME_YAXIS, BUTTON_DEMO, BUTTON_HELP, BUTTON_LOG, BUTTON_MODE, BUTTON_PRECISE, BUTTON_PRESET_1, BUTTON_RESET, audiodata_t::display_log, events_t::equalizer_display, audiodata_t::equalizer_levels_ptr, events_t::equalizer_mode, equalizer_table, EQUALIZERMODE_PRECISE, load_preset(), LOAD_PRESET_DEMO, LOAD_PRESET_RESET, events_t::locked_display, events_t::mask, maskupdate_notification, events_t::mode, MODE_GRAPH, MODE_HELP, MOUSE_STATE_DOWN, MOUSE_STATE_ON_PRESS, reload_equalizer(), mousedata_t::state, events_t::volume_position, volumecontrol_table, and mousedata_t::y. -

-Referenced by main().

- -

-Here is the call graph for this function:

- - - - -
Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hch__dep__incl.map b/Graphic_Equalizer/doc/html/eventhandler_8hch__dep__incl.map deleted file mode 100644 index 6d9ee70..0000000 --- a/Graphic_Equalizer/doc/html/eventhandler_8hch__dep__incl.map +++ /dev/null @@ -1,3 +0,0 @@ -base referer -rect $eventhandler_8hcc.html 7,7 130,34 -rect $main_8hcc.html 154,7 229,34 diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hch__dep__incl.md5 b/Graphic_Equalizer/doc/html/eventhandler_8hch__dep__incl.md5 deleted file mode 100644 index af0fe6f..0000000 --- a/Graphic_Equalizer/doc/html/eventhandler_8hch__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -53efdfb40707cc5eba57fe4915bbbf35 \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hch__dep__incl.png b/Graphic_Equalizer/doc/html/eventhandler_8hch__dep__incl.png deleted file mode 100644 index 586b7d0..0000000 Binary files a/Graphic_Equalizer/doc/html/eventhandler_8hch__dep__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hch_a1_cgraph.map b/Graphic_Equalizer/doc/html/eventhandler_8hch_a1_cgraph.map deleted file mode 100644 index e15c770..0000000 --- a/Graphic_Equalizer/doc/html/eventhandler_8hch_a1_cgraph.map +++ /dev/null @@ -1,3 +0,0 @@ -base referer -rect $events_8hcc.html#a2 210,7 301,34 -rect $display_8hcc.html#a4 195,58 315,85 diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hch_a1_cgraph.md5 b/Graphic_Equalizer/doc/html/eventhandler_8hch_a1_cgraph.md5 deleted file mode 100644 index 5572015..0000000 --- a/Graphic_Equalizer/doc/html/eventhandler_8hch_a1_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -4cc99ebc2d7ee85c7be875aa4524a42e \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hch_a1_cgraph.png b/Graphic_Equalizer/doc/html/eventhandler_8hch_a1_cgraph.png deleted file mode 100644 index d07857b..0000000 Binary files a/Graphic_Equalizer/doc/html/eventhandler_8hch_a1_cgraph.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hch_a3_cgraph.map b/Graphic_Equalizer/doc/html/eventhandler_8hch_a3_cgraph.map deleted file mode 100644 index def60cd..0000000 --- a/Graphic_Equalizer/doc/html/eventhandler_8hch_a3_cgraph.map +++ /dev/null @@ -1,3 +0,0 @@ -base referer -rect $events_8hcc.html#a3 210,7 301,34 -rect $display_8hcc.html#a3 195,58 315,85 diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hch_a3_cgraph.md5 b/Graphic_Equalizer/doc/html/eventhandler_8hch_a3_cgraph.md5 deleted file mode 100644 index 2dffa3a..0000000 --- a/Graphic_Equalizer/doc/html/eventhandler_8hch_a3_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -61d7348e8088689b8e9bef2cac7fb456 \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/eventhandler_8hch_a3_cgraph.png b/Graphic_Equalizer/doc/html/eventhandler_8hch_a3_cgraph.png deleted file mode 100644 index d07857b..0000000 Binary files a/Graphic_Equalizer/doc/html/eventhandler_8hch_a3_cgraph.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/eventhandler__shared_8hch-source.html b/Graphic_Equalizer/doc/html/eventhandler__shared_8hch-source.html deleted file mode 100644 index 647d39b..0000000 --- a/Graphic_Equalizer/doc/html/eventhandler__shared_8hch-source.html +++ /dev/null @@ -1,68 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/eventhandler_shared.hch Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

eventhandler_shared.hch

Go to the documentation of this file.
00001 
-00019 #ifndef _EVENTHANDLER_SHARED_HCH
-00020 #define _EVENTHANDLER_SHARED_HCH 1
-00021 
-00022 
-00023 
-00024 /*** Data Types **********************/
-00025 
-00026 /*
-00027  * Type definition of the shared memory to be used in various processes
-00028  */
-00029 typedef struct {
-00030         ram unsigned 10 equalizer_display[128];
-00031         unsigned 10 active_preset;
-00032         unsigned 10 volume_position;
-00033         unsigned 8 mask;
-00034         unsigned 4 mode;
-00035         unsigned 4 equalizer_mode;
-00036         unsigned 1 locked_display;
-00037 } events_t;
-00038 
-00039 
-00040 #define MODE_SKIN       0x00
-00041 #define MODE_HELP       0x01
-00042 #define MODE_GRAPH      0x02
-00043 
-00044 
-00045 
-00046 #define EQUALIZERMODE_FULL      0x05
-00047 #define EQUALIZERMODE_HALF      0x03
-00048 #define EQUALIZERMODE_PRECISE   0x00
-00049 
-00050 
-00051 /*
-00052  * Volume Control lookuptable.
-00053  * TODO: This table is now hardcoded. To ensure full skinability this table
-00054  * should be dynamically loaded.
-00055  */
-00056 extern unsigned 5 volumecontrol_table[46];
-00057 
-00058 /*
-00059  * Equalizer lookup tables.
-00060  * TODO: This table is now hardcoded. To ensure full skinability this table
-00061  * should be dynamically loaded.
-00062  */
-00063 extern unsigned 4 equalizer_table[640];
-00064 extern unsigned 10 equalizer_table_inv[16];
-00065 
-00066 
-00067 
-00068 #else
-00069 #error "ERROR file eventhandler_shared.hch multiple times included"
-00070 #endif /* --- _EVENTHANDLER_SHARED_HCH --- */
-00071 
-

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/eventhandler__shared_8hch.html b/Graphic_Equalizer/doc/html/eventhandler__shared_8hch.html deleted file mode 100644 index ce2041f..0000000 --- a/Graphic_Equalizer/doc/html/eventhandler__shared_8hch.html +++ /dev/null @@ -1,334 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/eventhandler_shared.hch File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

eventhandler_shared.hch File Reference

-

-This graph shows which files directly or indirectly include this file:

Included by dependency graph
- - - - - - - - -

-Go to the source code of this file. - - - - - - - - - - - - - - - - - - - - - - - - - - -

Data Structures

struct  events_t

Defines

#define _EVENTHANDLER_SHARED_HCH   1
#define MODE_SKIN   0x00
#define MODE_HELP   0x01
#define MODE_GRAPH   0x02
#define EQUALIZERMODE_FULL   0x05
#define EQUALIZERMODE_HALF   0x03
#define EQUALIZERMODE_PRECISE   0x00

Variables

unsigned volumecontrol_table [46]
unsigned equalizer_table [640]
unsigned equalizer_table_inv [16]
-


Detailed Description

-

-Graphic Equalizer API

-

-Project information.

-Project Graphic Equalizer
-
Author:
O.M. Schinagl
-
Date:
20041110
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041110: O.M. Schinagl
- Initial version -

-Definition in file eventhandler_shared.hch.


Define Documentation

-

- - - - -
- - - - -
#define _EVENTHANDLER_SHARED_HCH   1
-
- - - - - -
-   - - -

- -

-Definition at line 20 of file eventhandler_shared.hch.

-

- - - - -
- - - - -
#define MODE_SKIN   0x00
-
- - - - - -
-   - - -

- -

-Definition at line 40 of file eventhandler_shared.hch.

-

- - - - -
- - - - -
#define MODE_HELP   0x01
-
- - - - - -
-   - - -

- -

-Definition at line 41 of file eventhandler_shared.hch. -

-Referenced by display_main(), and eventhandler_main().

-

- - - - -
- - - - -
#define MODE_GRAPH   0x02
-
- - - - - -
-   - - -

- -

-Definition at line 42 of file eventhandler_shared.hch. -

-Referenced by display_main(), and eventhandler_main().

-

- - - - -
- - - - -
#define EQUALIZERMODE_FULL   0x05
-
- - - - - -
-   - - -

- -

-Definition at line 46 of file eventhandler_shared.hch.

-

- - - - -
- - - - -
#define EQUALIZERMODE_HALF   0x03
-
- - - - - -
-   - - -

- -

-Definition at line 47 of file eventhandler_shared.hch.

-

- - - - -
- - - - -
#define EQUALIZERMODE_PRECISE   0x00
-
- - - - - -
-   - - -

- -

-Definition at line 48 of file eventhandler_shared.hch. -

-Referenced by eventhandler_main().

-


Variable Documentation

-

- - - - -
- - - - -
unsigned volumecontrol_table[46]
-
- - - - - -
-   - - -

- -

-Definition at line 315 of file eventhandler.hcc. -

-Referenced by eventhandler_main().

-

- - - - -
- - - - -
unsigned equalizer_table[640]
-
- - - - - -
-   - - -

- -

-Definition at line 75 of file events.hcc. -

-Referenced by eventhandler_main().

-

- - - - -
- - - - -
unsigned equalizer_table_inv[16]
-
- - - - - -
-   - - -

- -

-Definition at line 76 of file events.hcc. -

-Referenced by reload_equalizer().

-


Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/eventhandler__shared_8hch__dep__incl.map b/Graphic_Equalizer/doc/html/eventhandler__shared_8hch__dep__incl.map deleted file mode 100644 index e30c9f4..0000000 --- a/Graphic_Equalizer/doc/html/eventhandler__shared_8hch__dep__incl.map +++ /dev/null @@ -1,6 +0,0 @@ -base referer -rect $display_8hcc.html 8,7 96,34 -rect $eventhandler_8hcc.html 120,7 242,34 -rect $events_8hcc.html 266,7 352,34 -rect $main_8hcc.html 376,7 450,34 -rect $smartmedia_8hcc.html 474,7 592,34 diff --git a/Graphic_Equalizer/doc/html/eventhandler__shared_8hch__dep__incl.md5 b/Graphic_Equalizer/doc/html/eventhandler__shared_8hch__dep__incl.md5 deleted file mode 100644 index 5231ffe..0000000 --- a/Graphic_Equalizer/doc/html/eventhandler__shared_8hch__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -27ad7843295f3466cc8c70cc8c0de797 \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/eventhandler__shared_8hch__dep__incl.png b/Graphic_Equalizer/doc/html/eventhandler__shared_8hch__dep__incl.png deleted file mode 100644 index 838ca25..0000000 Binary files a/Graphic_Equalizer/doc/html/eventhandler__shared_8hch__dep__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/events_8hcc-source.html b/Graphic_Equalizer/doc/html/events_8hcc-source.html deleted file mode 100644 index d180b4a..0000000 --- a/Graphic_Equalizer/doc/html/events_8hcc-source.html +++ /dev/null @@ -1,60 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/events.hcc Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

events.hcc

Go to the documentation of this file.
00001 
-00022 /******** System Includes *************/
-00023 #include <stdlib.hch>
-00024 
-00025 #include "pal_master.hch"
-00026 
-00027 /******** Application Includes ********/
-00028 #include "configuration.hch"
-00029 #include "eventhandler_shared.hch"
-00030 #include "events.hch"
-00031 
-00032 #if HAVE_DEBUG
-00033         #include "debug.hch"
-00034 #endif
-00035 
-00036 
-00037 ram unsigned 8 presets_default_values[768] = {
-00038 #include "presets_hardcoded.txt"
-00039 };
-00040 
-00041 
-00042 
-00053 void load_preset(unsigned 10 preset, unsigned 4 *equalizer_levels_ptr) {
-00054         unsigned 10 equalizer_index;
-00055         unsigned 4 temp;
-00056 
-00057         equalizer_index = 0;
-00058         while (equalizer_index != 768) {
-00059                 temp = presets_default_values[preset +(0 @ (equalizer_index \\ 1))][7:4];
-00060                 equalizer_levels_ptr[equalizer_index] = temp;
-00061                 temp = presets_default_values[preset +(0 @ (equalizer_index \\ 1))][3:0];
-00062                 equalizer_levels_ptr[equalizer_index +1] = temp;
-00063 
-00064                 equalizer_index += 2;
-00065         }
-00066 } /* --- load_preset() --- */
-00067 
-00068 
-00069 
-00070 /*
-00071  * Equalizer lookuptabes.
-00072  * TODO: This table is now hardcoded. To ensure full skinability this table
-00073  * should be dynamically loaded.
-00074  */
-00075 ram unsigned 4 equalizer_table[640] = {15, 15, 15, 15, 15, 14, 14, 14, 14, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0};
-00076 ram unsigned 10 equalizer_table_inv[16] = {446, 444, 440, 436, 432, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 384};
-

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/events_8hcc.html b/Graphic_Equalizer/doc/html/events_8hcc.html deleted file mode 100644 index b6a4870..0000000 --- a/Graphic_Equalizer/doc/html/events_8hcc.html +++ /dev/null @@ -1,202 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/events.hcc File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

events.hcc File Reference

#include <stdlib.hch>
-#include "pal_master.hch"
-#include "configuration.hch"
-#include "eventhandler_shared.hch"
-#include "events.hch"
-#include "presets_hardcoded.txt"
- -

-Include dependency graph for events.hcc:

Include dependency graph
- - - - - - -

-Go to the source code of this file. - - - - - - - - - - - - -

Functions

void load_preset (unsigned 10 preset, unsigned 4 *equalizer_levels_ptr)
 This function loads 768 4bits presets into the equalizer_levels array pointed to by equalizer_levels.

Variables

ram unsigned presets_default_values [768]
ram unsigned equalizer_table [640] = {15, 15, 15, 15, 15, 14, 14, 14, 14, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0}
ram unsigned equalizer_table_inv [16] = {446, 444, 440, 436, 432, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 384}
-


Detailed Description

-

-Graphic Equalizer API

-that need to be performed.

-Project information.

-Project Graphic Equalizer
-
Author:
O.M. Schinagl
-
Date:
20041710
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041710: O.M. Schinagl
- Initial version -

-Definition in file events.hcc.


Function Documentation

-

- - - - -
- - - - - - - - - - - - - - - - - - -
void load_preset unsigned 10  preset,
unsigned 4 *  equalizer_levels_ptr
-
- - - - - -
-   - - -

-This function loads 768 4bits presets into the equalizer_levels array pointed to by equalizer_levels. -

-

Parameters:
- - -
*equalizer_levels Location where to store presets loaded from blockram.
-
-
Returns:
void
-
Return values:
- - -
void 
-
- -

-Definition at line 53 of file events.hcc. -

-References presets_default_values. -

-Referenced by eventhandler_main().

-


Variable Documentation

-

- - - - -
- - - - -
ram unsigned presets_default_values[768]
-
- - - - - -
-   - - -

-Initial value:

 {
-
-}
-
-

-Definition at line 37 of file events.hcc. -

-Referenced by load_preset(), and smartmedia_loaddata().

-

- - - - -
- - - - -
ram unsigned equalizer_table[640] = {15, 15, 15, 15, 15, 14, 14, 14, 14, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0}
-
- - - - - -
-   - - -

- -

-Definition at line 75 of file events.hcc. -

-Referenced by eventhandler_main().

-

- - - - -
- - - - -
ram unsigned equalizer_table_inv[16] = {446, 444, 440, 436, 432, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 384}
-
- - - - - -
-   - - -

- -

-Definition at line 76 of file events.hcc. -

-Referenced by reload_equalizer().

-


Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/events_8hcc__incl.map b/Graphic_Equalizer/doc/html/events_8hcc__incl.map deleted file mode 100644 index e45f3ce..0000000 --- a/Graphic_Equalizer/doc/html/events_8hcc__incl.map +++ /dev/null @@ -1,4 +0,0 @@ -base referer -rect $configuration_8hch.html 245,7 370,34 -rect $eventhandler__shared_8hch.html 394,7 568,34 -rect $events_8hch.html 592,7 677,34 diff --git a/Graphic_Equalizer/doc/html/events_8hcc__incl.md5 b/Graphic_Equalizer/doc/html/events_8hcc__incl.md5 deleted file mode 100644 index 4d585b8..0000000 --- a/Graphic_Equalizer/doc/html/events_8hcc__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -02bd65e19ec52f3ed8fe65e35b542b88 \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/events_8hcc__incl.png b/Graphic_Equalizer/doc/html/events_8hcc__incl.png deleted file mode 100644 index 6e1fc82..0000000 Binary files a/Graphic_Equalizer/doc/html/events_8hcc__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/events_8hch-source.html b/Graphic_Equalizer/doc/html/events_8hch-source.html deleted file mode 100644 index 2845fe7..0000000 --- a/Graphic_Equalizer/doc/html/events_8hch-source.html +++ /dev/null @@ -1,29 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/events.hch Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

events.hch

Go to the documentation of this file.
00001 
-00020 #ifndef _EVENTS_HCH
-00021 #define _EVENTS_HCH 1
-00022 
-00023 
-00024 
-00025 /*
-00026  * This function loads 768 4bits presets into the equalizer_levels array
-00027  * pointed to by equalizer_levels.
-00028  */
-00029 void load_preset(unsigned 10 preset, unsigned 4 *equalizer_levels_ptr);
-00030 
-00031 #else
-00032 #error "ERROR file events.hch multiple times included"
-00033 #endif /* --- _EVENTS_HCH --- */
-

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/events_8hch.html b/Graphic_Equalizer/doc/html/events_8hch.html deleted file mode 100644 index b3a2c5c..0000000 --- a/Graphic_Equalizer/doc/html/events_8hch.html +++ /dev/null @@ -1,132 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/events.hch File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

events.hch File Reference

-

-This graph shows which files directly or indirectly include this file:

Included by dependency graph
- - - - - -

-Go to the source code of this file. - - - - - - - - -

Defines

#define _EVENTS_HCH   1

Functions

void load_preset (unsigned 10 preset, unsigned 4 *equalizer_levels_ptr)
 This function loads 768 4bits presets into the equalizer_levels array pointed to by equalizer_levels.
-


Detailed Description

-

-Graphic Equalizer API

-that need to be performed.

-Project information.

-Project Graphic Equalizer
-
Author:
O.M. Schinagl
-
Date:
20041710
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041710: O.M. Schinagl
- Initial version -

-Definition in file events.hch.


Define Documentation

-

- - - - -
- - - - -
#define _EVENTS_HCH   1
-
- - - - - -
-   - - -

- -

-Definition at line 21 of file events.hch.

-


Function Documentation

-

- - - - -
- - - - - - - - - - - - - - - - - - -
void load_preset unsigned 10  preset,
unsigned 4 *  equalizer_levels_ptr
-
- - - - - -
-   - - -

-This function loads 768 4bits presets into the equalizer_levels array pointed to by equalizer_levels. -

-

Parameters:
- - -
*equalizer_levels Location where to store presets loaded from blockram.
-
-
Returns:
void
-
Return values:
- - -
void 
-
- -

-Definition at line 53 of file events.hcc. -

-References presets_default_values. -

-Referenced by eventhandler_main().

-


Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/events_8hch__dep__incl.map b/Graphic_Equalizer/doc/html/events_8hch__dep__incl.map deleted file mode 100644 index e1a4795..0000000 --- a/Graphic_Equalizer/doc/html/events_8hch__dep__incl.map +++ /dev/null @@ -1,3 +0,0 @@ -base referer -rect $eventhandler_8hcc.html 8,7 130,34 -rect $events_8hcc.html 154,7 240,34 diff --git a/Graphic_Equalizer/doc/html/events_8hch__dep__incl.md5 b/Graphic_Equalizer/doc/html/events_8hch__dep__incl.md5 deleted file mode 100644 index db0e635..0000000 --- a/Graphic_Equalizer/doc/html/events_8hch__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -9de3b703aa96c0fd466e7058f82e3b76 \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/events_8hch__dep__incl.png b/Graphic_Equalizer/doc/html/events_8hch__dep__incl.png deleted file mode 100644 index 7b9cfa7..0000000 Binary files a/Graphic_Equalizer/doc/html/events_8hch__dep__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/fft_8hcc-source.html b/Graphic_Equalizer/doc/html/fft_8hcc-source.html deleted file mode 100644 index d4cfdb6..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hcc-source.html +++ /dev/null @@ -1,445 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/fft.hcc Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

fft.hcc

Go to the documentation of this file.
00001 
-00020 #include <stdlib.hch>
-00021 #include "pal_master.hch"
-00022 
-00023 #include "audio.hch"
-00024 #include "weights_256.hch"
-00025 #include "configuration.hch"
-00026 #include "xilinxmult.hch"
-00027 #include "fft.hch"
-00028 
-00029 #if HAVE_DEBUG
-00030         #include "debug.hch"
-00031 #endif
-00032 
-00033 /* Define two multi-port RAMs for FFT calculation; one for real and one for imaginary values
-00034  * Extra block RAM settings are defined to make sure read and write actions can be performed
-00035  * within one clock-cycle.
-00036  * Left out extra settings on new board the clock changes TODO !!!!
-00037  */
-00038 #if HARDWARE_MULTIPLY
-00039 mpram
-00040 {
-00041   ram signed 18 rwrite[256];
-00042   rom signed 18 read[256];
-00043 } real with {block = "BlockRAM"/*, westart=2.5, welength=1, rclkpos={1.5}, wclkpos={3}, clkpulselen=0.5*/};
-00044 
-00045 mpram 
-00046 {
-00047   ram signed 18 rwrite[256];
-00048   rom signed 18 read[256];
-00049 } imaginary with {block = "BlockRAM"/*, westart=2.5, welength=1, rclkpos={1.5}, wclkpos={3}, clkpulselen=0.5*/};
-00050 #else
-00051 mpram
-00052 {
-00053   ram signed 24 rwrite[256];
-00054   rom signed 24 read[256];
-00055 } real with {block = "BlockRAM"/*, westart=2.5, welength=1, rclkpos={1.5}, wclkpos={3}, clkpulselen=0.5*/};
-00056 
-00057 mpram 
-00058 {
-00059   ram signed 24 rwrite[256];
-00060   rom signed 24 read[256];
-00061 } imaginary with {block = "BlockRAM"/*, westart=2.5, welength=1, rclkpos={1.5}, wclkpos={3}, clkpulselen=0.5*/};
-00062 #endif
-00063 // multiplication factors for equalizer function
-00064 ram signed 7 eq_settings[16] = {0,2,4,7,10,13,16,19,22,26,30,35,41,48,55,63};
-00065 
-00066 #if HARDWARE_MULTIPLY
-00067 #define DC_COMPONENT            0
-00068 #else
-00069 #define DC_COMPONENT            8470527
-00070 #endif
-00071 
-00082 macro proc multiply(result, op_a, op_b)
-00083 {
-00084 #if HARDWARE_MULTIPLY
-00085         xilinxmult(result, op_a, adjs(op_b,18));
-00086 #else
-00087         result = (adjs(op_a,38))*(adjs(op_a,38));
-00088 #endif  
-00089 }
-00090 
-00091 
-00092 
-00093 
-00104 void calculate_fft(unsigned 1 select_inverse)
-00105 {
-00106   unsigned 4 level;
-00107   unsigned 8 point1,point2,j,f,k;
-00108   unsigned 9 e,i;
-00109   signed 16 weight1,weight2;
-00110 #if HARDWARE_MULTIPLY
-00111   signed 18 p,q,r,t;
-00112 #else
-00113   signed 24 p,q,r,t;    
-00114 #endif
-00115   signed a,b;
-00116 
-00117 #if HARDWARE_MULTIPLY
-00118   // Macro to provide rescaling of 36-bit result of fixed point multiply
-00119   // down to an 18-bit result. The range of bits selected depends on the 
-00120   // number that represents the value of "1" in the trig function lookup
-00121   // tables. (Eg. for 16384 == 1, the lowest bit selected should be [14]).
-00122   macro expr rescale (x) = (x[35] @ x[30:14]);
-00123 #else
-00124   //Macro to rescale the multiply result down to a 24-bit value.
-00125   macro expr rescale (x) = ((x>>FRACBITS)<-24);
-00126 #endif
-00127 
-00128   for(level=1;level<=NUMBER_OF_COLUMNS;level++) // count all the columns
-00129   {
-00130         e=1<<(NUMBER_OF_COLUMNS-level+1); // number of points in each block in this column
-00131         f=(e>>1)<-8;                      // number of butterflies in each block in this column
-00132 
-00133         for(j=1;j<=f;j++)       // count all the butterflies in each block
-00134         {
-00135                 par
-00136                 {
-00137                         // Weight factors for real (the same for FFT and iFFT)
-00138                         weight1 = weight_re[((j-1)<<(level-1))<-7]; 
-00139 
-00140                         
-00141                         // Weight factors for imaginary (opposite for FFT and iFFT)
-00142                         weight2 = (!select_inverse) ? (weight_im[((j-1)<<(level-1))<-7]) : -(weight_im[((j-1)<<(level-1))<-7]); 
-00143 
-00144                         /* ORIGINAL CODE BELOW, MODIFIED BECAUSE OF MISMATCHING OUTPUT WITH BORLAND TESTAPP
-00145                         weight2 = (!select_inverse) ? -(weight_im[((j-1)<<(level-1))<-7]) : weight_im[((j-1)<<(level-1))<-7]; 
-00146                         */
-00147                         
-00148                         
-00149 
-00150                         for(i=0@j;i<=NUMBER_OF_POINTS;i+=e)   // count all the blocks in this column
-00151                         {       // Butterfly calculation
-00152                                 par
-00153                                 {
-00154                                         point1 = ((i<-8)-1);
-00155                                         point2 = (((i<-8)+f)-1);
-00156                                 }
-00157                                 
-00158                                 par
-00159                                 {
-00160                                         p = (real.read[point1] >> 1) + (real.rwrite[point2] >> 1);
-00161                                         q = (imaginary.read[point1] >> 1) + (imaginary.rwrite[point2] >> 1);
-00162                                 }
-00163                                 
-00164                                 par
-00165                                 {
-00166                                         r = (real.read[point1] >> 1) - (real.rwrite[point2] >> 1);
-00167                                         t = (imaginary.read[point1] >> 1) - (imaginary.rwrite[point2] >> 1);
-00168                                 }               
-00169 
-00170                                 multiply(a,r,weight1);
-00171                                 multiply(b,t,weight2);
-00172 
-00173                                 par
-00174                                 {
-00175                                         real.rwrite[point2] = (rescale(a-b));
-00176                                         imaginary.rwrite[point1] = q;
-00177                                 }
-00178 
-00179                                 multiply(a,t,weight1);
-00180                                 multiply(b,r,weight2);
-00181 
-00182                                 par
-00183                                 {       
-00184                                         real.rwrite[point1] = p;
-00185                                         imaginary.rwrite[point2] = (rescale(a+b));
-00186                                 }
-00187 
-00188                         }
-00189                 }
-00190         }
-00191   }
-00192 
-00193   j=1;
-00194   for(i=1;i<NUMBER_OF_POINTS;i++)
-00195   {
-00196         if(i<(0@j))
-00197         {
-00198                 par
-00199                 {
-00200                         point1=j-1;
-00201                         point2=(i-1)<-8;
-00202                 }
-00203                 /*
-00204                   COPYING ARRAY VALUES FROM ONE PLACE TO ANOTHER IN THE ARRAT MUST BE DONE IN 
-00205                   2 STEPS. FIRSTLY THE VALUES ARE COPIED TO SEPARATE VARIABLES AFTER THAT THEY
-00206                   ARE COPIED BACK TO THEIR NEW POSITION IN THE ARRAY. THIS MUST BE DONE TO 
-00207                   PREVENT TIMING ISSUES FROM OCCURING.
-00208                 */
-00209                 par
-00210                 {
-00211                         p = real.read[point1];
-00212                         q = imaginary.read[point1];
-00213                 }
-00214                 par
-00215                 {
-00216                         r = real.read[point2];
-00217                         t = imaginary.read[point2];
-00218                 }
-00219                 par
-00220                 {
-00221                         real.rwrite[point1] = r;        
-00222                         imaginary.rwrite[point1] = t;
-00223                 }
-00224                 par
-00225                 {
-00226                         real.rwrite[point2] = p;
-00227                         imaginary.rwrite[point2] = q;
-00228                 }
-00229         }
-00230 
-00231         k = NUMBER_OF_POINTS>>1;
-00232 
-00233 
-00234         while(k<j)
-00235         {
-00236                 j = j-k;
-00237                 k = k>>1;
-00238         }
-00239 
-00240         j+=k;
-00241   }
-00242 
-00243 }
-00244 
-00256 #if HARDWARE_MULTIPLY
-00257 void perform_fft(signed 18 *pcm_audio)
-00258 #else
-00259 void perform_fft(signed 16 *pcm_audio)
-00260 #endif
-00261 {
-00262         unsigned 8 k;
-00263 #if HARDWARE_MULTIPLY
-00264         signed 18 sample;
-00265         k=0;
-00266         sample = adjs(pcm_audio[k],18);
-00267 #else
-00268         signed 24 sample;
-00269         k=0;
-00270         sample = adjs(pcm_audio[k],24);
-00271 #endif
-00272         
-00273         //initialize variables for the copying pipeline
-00274 
-00275         
-00276         // copy audio data to real-array before starting FFT calculation
-00277         // and set imaginary values to zero
-00278         do
-00279         {
-00280                 //Copying the array values has been pipelined to prevent parallel access to the
-00281                 //pcm_audio array. This copying procedure must be finished before another 
-00282                 //sample is read from the audio input. The time available for this loop is 
-00283                 //determined by the sampling rate of 44,1 Khz
-00284                 par
-00285                 {
-00286                         //COPYING NEEDS TO BE DONE IN 2 STEPS, BECAUSE THE VALUE THAT NEEDS TO WRITTEN
-00287                         //TO THE REAL-RAM NEEDS TO BE AVAILABLE ON THE START OFF THE CLOCKCYCLE.
-00288 #if HARDWARE_MULTIPLY
-00289                         sample = adjs(pcm_audio[k+1],18);
-00290 #else
-00291                         sample = adjs(pcm_audio[k+1],24);
-00292 #endif
-00293                         real.rwrite[k] = sample;
-00294                         imaginary.rwrite[k] = 0;
-00295                         k++;
-00296                 }               
-00297         }  while (k);
-00298 
-00299         
-00300 
-00301 #if PERFORM_FFT_CALCULATION
-00302         calculate_fft(0);
-00303 #endif
-00304 
-00305 
-00306 }
-00307 
-00321 #if HARDWARE_MULTIPLY
-00322 void perform_ifft(signed 18 *modified_audio, unsigned 6 *ifft_info)
-00323 #else
-00324 void perform_ifft(signed 16 *modified_audio, unsigned 6 *ifft_info)
-00325 #endif
-00326 {
-00327         unsigned 6 k;
-00328 #if HARDWARE_MULTIPLY 
-00329         signed 18 p;
-00330 #else
-00331         signed 24 p;
-00332 #endif
-00333 #if PERFORM_FFT_CALCULATION     
-00334         calculate_fft(1);
-00335 #endif
-00336 
-00337         k=0;
-00338 //initialize variables for the copying pipeline
-00339 #if PERFORM_FFT_CALCULATION     
-00340         #if HARDWARE_MULTIPLY 
-00341                 p = (real.read[(0@k)+95] << NUMBER_OF_COLUMNS);
-00342         #else
-00343                 p = (real.read[(0@k)+95] >> NUMBER_OF_COLUMNS);
-00344         #endif
-00345 #else
-00346                 p = (real.read[(0@k)+95]);
-00347 #endif
-00348 
-00349         do
-00350         {
-00351                 //Copying the array values has been pipelined to prevent parallel access to the
-00352                 //pcm_audio array. This copying procedure must be finished before another 
-00353                 //sample is read from the audio input. The time available for this loop is 
-00354                 //determined by the sampling rate of 44,1 Khz
-00355                 par
-00356                 {
-00357                         /*
-00358                         *       Before copying the modified audio from the local real-array 
-00359                         *       to the output array of the audio I/O component, compensate
-00360                         *       for the FFT calculation by shifting the values. 
-00361                         *       95 is added to start the output from the middle of the sliding
-00362                         *       window, this is done to get a better sound quality.
-00363                         */
-00364 #if PERFORM_FFT_CALCULATION     
-00365         #if HARDWARE_MULTIPLY 
-00366                         p = (real.read[(0@k)+95] << NUMBER_OF_COLUMNS);
-00367         #else
-00368                         p = (real.read[(0@k)+95] >> NUMBER_OF_COLUMNS);
-00369         #endif
-00370 #else
-00371                         p = (real.read[(0@k)+95]);
-00372 #endif
-00373                         //Copy the modified audio from the local real array to the output array of the audio I/O component.
-00374 #if HARDWARE_MULTIPLY
-00375                         modified_audio[k] = p ;
-00376 #else
-00377                         modified_audio[k] = (p<-16);
-00378 #endif
-00379                         //Fill the array for displaying the waveform, only the 6 MSB are needed.
-00380                         ifft_info[k] = (unsigned 6)(32+(p[17:12]));             
-00381                         k++;
-00382                 }
-00383         } while(k);
-00384 }
-00385 
-00398 void equalize_audio(audiodata_t *audiodata)
-00399 {
-00400 #if HARDWARE_MULTIPLY
-00401   signed 18 p,q;
-00402 #else
-00403   signed 24 p,q;
-00404 #endif
-00405   signed 18 a;
-00406   unsigned 8 i, mirror_i, bit, m, n;
-00407   unsigned 7 old_value;
-00408   unsigned 9 tmp;
-00409   
-00410   //macro expr equalize_bar = multiply(q,a)[29:6];
-00411   
-00412   macro proc equalize_bar(retval)
-00413   {
-00414          signed result;
-00415          multiply(result, q,a);
-00416 #if HARDWARE_MULTIPLY
-00417          retval = result[23:6]; //drop last 6 bit to compensate the maximum multiplication with 64 from the eq_settings array
-00418 #else
-00419          retval = result[29:6]; //drop last 6 bit to compensate the maximum multiplication with 64 from the eq_settings array
-00420 #endif
-00421   } 
-00422 
-00423   p = real.read[0] - DC_COMPONENT; // remove DC component for calculations
-00424   real.rwrite[0] = p;
-00425   
-00426   for(i=0;i!=NUMBER_OF_FREQUENCIES;i++)   
-00427   {  
-00428         
-00429                 // set multiplication factor (0..64) for current frequency bar, The first frequency band must be equalized at 100% (63) since there is no DC-component taken into account.
-00430                 a = adjs(eq_settings[audiodata->equalizer_levels_ptr[i <- 7]],18);
-00431 
-00432 
-00433                 // multiply frequency with this factor and divide by 64 (drop 6 LSB's)
-00434                 q = real.read[i];
-00435         equalize_bar(p);
-00436         real.rwrite[i] = p;
-00437 
-00438         q = imaginary.read[i];
-00439         equalize_bar(p);
-00440         imaginary.rwrite[i] = p;
-00441 
-00442         // the upper part(128..255) of the spectrum is mirrored to the lower part; 
-00443         // these values need to be adjusted too
-00444         if ((i<-7)!=0) // if not in DC component bar
-00445         {
-00446                 mirror_i = (NUMBER_OF_POINTS-1)-i+1;
-00447                 q = real.read[mirror_i];
-00448                 equalize_bar(p);
-00449                 real.rwrite[mirror_i] = p;
-00450 
-00451                 q = imaginary.read[mirror_i];
-00452                 equalize_bar(p);
-00453                 imaginary.rwrite[mirror_i] = p;
-00454         }
-00455   }
-00456   
-00457   //write data to fft_info for display purposes
-00458   for(i=0;i<NUMBER_OF_FREQUENCIES;i++)
-00459   {
-00460                 p = real.read[i];
-00461                 q = imaginary.read[i];
-00462 #if HARDWARE_MULTIPLY
-00463                 if (p[17] == 1) p = -p; else delay;
-00464                 if (q[17] == 1) q = -q; else delay;
-00465 #else
-00466                 if (p[23] == 1) p = -p; else delay;
-00467                 if (q[23] == 1) q = -q; else delay;
-00468 #endif
-00469         p = (p<q) ? q : p; // This is done to get the best visual frequency result
-00470          
-00471         if (!audiodata->display_log)
-00472         {
-00473 
-00474                 bit=126;
-00475 #if HARDWARE_MULTIPLY
-00476                 while ((p[15] == 0) && (bit != 0))
-00477 #else
-00478                 while ((p[21] == 0) && (bit != 0))
-00479 #endif
-00480                         par
-00481                         {
-00482                                 p = p<<1;
-00483                                 bit = bit - 18;
-00484                         }
-00485                 old_value = audiodata->fft_info.write[0 @ (i <- 7)];
-00486                 tmp = ((0@old_value) + (0@bit))>>1;
-00487                 audiodata->fft_info.write[0 @ (i <- 7)] = (old_value <= (tmp<-7)) ? (tmp<-7) : old_value-1;
-00488         } 
-00489         else 
-00490         {
-00491                 old_value = audiodata->fft_info.write[0 @ (i <- 7)];
-00492 #if HARDWARE_MULTIPLY
-00493                 audiodata->fft_info.write[0 @ (i <- 7)] = (old_value<=(unsigned)(p[15:9])) ? (unsigned)(p[15:9]) : old_value-1;
-00494 #else
-00495                 audiodata->fft_info.write[0 @ (i <- 7)] = (old_value<=(unsigned)(p[21:15])) ? (unsigned)(p[21:15]) : old_value-1;
-00496 #endif
-00497         }
-00498   }
-00499 
-00500   // add DC component again before inverse FFT calculation is performed
-00501 
-00502   p = real.read[0] + DC_COMPONENT; 
-00503   real.rwrite[0] = p;
-00504 }
-00505 
-

Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/fft_8hcc.html b/Graphic_Equalizer/doc/html/fft_8hcc.html deleted file mode 100644 index 4440372..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hcc.html +++ /dev/null @@ -1,380 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/fft.hcc File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

fft.hcc File Reference

#include <stdlib.hch>
-#include "pal_master.hch"
-#include "audio.hch"
-#include "weights_256.hch"
-#include "configuration.hch"
-#include "xilinxmult.hch"
-#include "fft.hch"
- -

-Include dependency graph for fft.hcc:

Include dependency graph
- - - - - - - -

-Go to the source code of this file. - - - - - - - - - - - - - - - - - - - - - -

Defines

#define DC_COMPONENT   8470527

Functions

macro proc multiply (result, op_a, op_b)
 Procedure used for multiply-ing.
void calculate_fft (unsigned 1 select_inverse)
 This routine performs the Fast Fourier Transform for calculation of the frequency spectrum.
void perform_fft (signed 16 *pcm_audio)
void perform_ifft (signed 16 *modified_audio, unsigned 6 *ifft_info)
void equalize_audio (audiodata_t *audiodata)
 This routine equalizes the frequencies derived by the FFT calculation, according to the settings of the equalizer bars.

Variables

ram signed eq_settings [16] = {0,2,4,7,10,13,16,19,22,26,30,35,41,48,55,63}
-


Detailed Description

-

-Graphic Equalizer API

-on the samples. Besides the FFT this module also will equalize the audio signal according to the setting made by the user.

-Project information.

-Project Graphic Equalizer
-
Author:
M. Lauwerijssen
-
Date:
20041110
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041110: M. Lauwerijssen
- Initial version -

-Definition in file fft.hcc.


Define Documentation

-

- - - - -
- - - - -
#define DC_COMPONENT   8470527
-
- - - - - -
-   - - -

- -

-Definition at line 69 of file fft.hcc.

-


Function Documentation

-

- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
macro proc multiply result ,
op_a ,
op_b 
-
- - - - - -
-   - - -

-Procedure used for multiply-ing. -

-

Parameters:
- - - - -
result variable containing the result of the multiply procedure
op_a integer value to be multiplied.
op_b integer value to be multiplied.
-
-
Returns:
Procedure returns through variable.
-
Return values:
- - -
signed 36
-
- -

-Definition at line 82 of file fft.hcc. -

-Referenced by calculate_fft(), and equalize_audio().

-

- - - - -
- - - - - - - - - -
void calculate_fft unsigned 1  select_inverse  ) 
-
- - - - - -
-   - - -

-This routine performs the Fast Fourier Transform for calculation of the frequency spectrum. -

-

Parameters:
- - -
select_inverse determines if a FFT or iFFT has to be calculated
-
-
Returns:
nothing
-
Return values:
- - -
void cost 12391 cycles
-
- -

-Definition at line 104 of file fft.hcc. -

-References multiply(), NUMBER_OF_COLUMNS, NUMBER_OF_POINTS, weight_im, and weight_re. -

-Referenced by perform_fft(), and perform_ifft().

- -

-Here is the call graph for this function:

- - - -

- - - - -
- - - - - - - - - -
void perform_fft signed 16 *  pcm_audio  ) 
-
- - - - - -
-   - - -

- -

-Definition at line 259 of file fft.hcc. -

-References calculate_fft().

- -

-Here is the call graph for this function:

- - - - -

- - - - -
- - - - - - - - - - - - - - - - - - -
void perform_ifft signed 16 *  modified_audio,
unsigned 6 *  ifft_info
-
- - - - - -
-   - - -

- -

-Definition at line 324 of file fft.hcc. -

-References calculate_fft().

- -

-Here is the call graph for this function:

- - - - -

- - - - -
- - - - - - - - - -
void equalize_audio audiodata_t audiodata  ) 
-
- - - - - -
-   - - -

-This routine equalizes the frequencies derived by the FFT calculation, according to the settings of the equalizer bars. -

-

Note:
Cost: 3844 clock cycles (Maximum)
-
Parameters:
- - -
*audiodata pointer to the audiodata struct, containing the eq_info, etc.
-
-
Returns:
void
-
Return values:
- - -
void 
-
- -

-Definition at line 398 of file fft.hcc. -

-References audiodata_t::display_log, eq_settings, audiodata_t::equalizer_levels_ptr, multiply(), and NUMBER_OF_POINTS.

- -

-Here is the call graph for this function:

- - - -

Variable Documentation

-

- - - - -
- - - - -
ram signed eq_settings[16] = {0,2,4,7,10,13,16,19,22,26,30,35,41,48,55,63}
-
- - - - - -
-   - - -

- -

-Definition at line 64 of file fft.hcc. -

-Referenced by equalize_audio().

-


Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/fft_8hcc__incl.map b/Graphic_Equalizer/doc/html/fft_8hcc__incl.map deleted file mode 100644 index 15797f7..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hcc__incl.map +++ /dev/null @@ -1,5 +0,0 @@ -base referer -rect $audio_8hch.html 245,7 325,34 -rect $weights__256_8hch.html 349,7 472,34 -rect $configuration_8hch.html 496,7 621,34 -rect $fft_8hch.html 773,7 832,34 diff --git a/Graphic_Equalizer/doc/html/fft_8hcc__incl.md5 b/Graphic_Equalizer/doc/html/fft_8hcc__incl.md5 deleted file mode 100644 index 2c9dae2..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hcc__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -13348b3a575ac6358b96e7a456338526 \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/fft_8hcc__incl.png b/Graphic_Equalizer/doc/html/fft_8hcc__incl.png deleted file mode 100644 index b142ddb..0000000 Binary files a/Graphic_Equalizer/doc/html/fft_8hcc__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/fft_8hcc_a2_cgraph.map b/Graphic_Equalizer/doc/html/fft_8hcc_a2_cgraph.map deleted file mode 100644 index de7305e..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hcc_a2_cgraph.map +++ /dev/null @@ -1,2 +0,0 @@ -base referer -rect $fft_8hcc.html#a1 151,8 221,34 diff --git a/Graphic_Equalizer/doc/html/fft_8hcc_a2_cgraph.md5 b/Graphic_Equalizer/doc/html/fft_8hcc_a2_cgraph.md5 deleted file mode 100644 index eea4b2a..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hcc_a2_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -a664c98e0e50457202b8c3914d39308b \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/fft_8hcc_a2_cgraph.png b/Graphic_Equalizer/doc/html/fft_8hcc_a2_cgraph.png deleted file mode 100644 index 2f3869f..0000000 Binary files a/Graphic_Equalizer/doc/html/fft_8hcc_a2_cgraph.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/fft_8hcc_a3_cgraph.map b/Graphic_Equalizer/doc/html/fft_8hcc_a3_cgraph.map deleted file mode 100644 index c931a46..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hcc_a3_cgraph.map +++ /dev/null @@ -1,2 +0,0 @@ -base referer -rect $fft_8hcc.html#a2 151,8 221,34 diff --git a/Graphic_Equalizer/doc/html/fft_8hcc_a3_cgraph.md5 b/Graphic_Equalizer/doc/html/fft_8hcc_a3_cgraph.md5 deleted file mode 100644 index 91830d0..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hcc_a3_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -60d0602022030d538bcc3068a25b97cf \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/fft_8hcc_a3_cgraph.png b/Graphic_Equalizer/doc/html/fft_8hcc_a3_cgraph.png deleted file mode 100644 index 2f3869f..0000000 Binary files a/Graphic_Equalizer/doc/html/fft_8hcc_a3_cgraph.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/fft_8hcc_a4_cgraph.map b/Graphic_Equalizer/doc/html/fft_8hcc_a4_cgraph.map deleted file mode 100644 index 037531e..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hcc_a4_cgraph.map +++ /dev/null @@ -1,3 +0,0 @@ -base referer -rect $fft_8hcc.html#a3 145,8 238,34 -rect $fft_8hcc.html#a2 287,8 357,34 diff --git a/Graphic_Equalizer/doc/html/fft_8hcc_a4_cgraph.md5 b/Graphic_Equalizer/doc/html/fft_8hcc_a4_cgraph.md5 deleted file mode 100644 index a4d85c7..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hcc_a4_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -5f114e2457f864aa033edf5b807704fa \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/fft_8hcc_a4_cgraph.png b/Graphic_Equalizer/doc/html/fft_8hcc_a4_cgraph.png deleted file mode 100644 index b2d2b15..0000000 Binary files a/Graphic_Equalizer/doc/html/fft_8hcc_a4_cgraph.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/fft_8hcc_a5_cgraph.map b/Graphic_Equalizer/doc/html/fft_8hcc_a5_cgraph.map deleted file mode 100644 index 615e423..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hcc_a5_cgraph.map +++ /dev/null @@ -1,3 +0,0 @@ -base referer -rect $fft_8hcc.html#a3 150,8 244,34 -rect $fft_8hcc.html#a2 293,8 362,34 diff --git a/Graphic_Equalizer/doc/html/fft_8hcc_a5_cgraph.md5 b/Graphic_Equalizer/doc/html/fft_8hcc_a5_cgraph.md5 deleted file mode 100644 index 87668b8..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hcc_a5_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -99e366a583ff5563d9b44801efa74ea1 \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/fft_8hcc_a5_cgraph.png b/Graphic_Equalizer/doc/html/fft_8hcc_a5_cgraph.png deleted file mode 100644 index fd17c70..0000000 Binary files a/Graphic_Equalizer/doc/html/fft_8hcc_a5_cgraph.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/fft_8hcc_a6_cgraph.map b/Graphic_Equalizer/doc/html/fft_8hcc_a6_cgraph.map deleted file mode 100644 index ca8d210..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hcc_a6_cgraph.map +++ /dev/null @@ -1,2 +0,0 @@ -base referer -rect $fft_8hcc.html#a2 167,8 237,34 diff --git a/Graphic_Equalizer/doc/html/fft_8hcc_a6_cgraph.md5 b/Graphic_Equalizer/doc/html/fft_8hcc_a6_cgraph.md5 deleted file mode 100644 index 84ec6cb..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hcc_a6_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -556d882357bf3e1a8c4e82d6a4d5308a \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/fft_8hcc_a6_cgraph.png b/Graphic_Equalizer/doc/html/fft_8hcc_a6_cgraph.png deleted file mode 100644 index 29c7f08..0000000 Binary files a/Graphic_Equalizer/doc/html/fft_8hcc_a6_cgraph.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/fft_8hch-source.html b/Graphic_Equalizer/doc/html/fft_8hch-source.html deleted file mode 100644 index c741973..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hch-source.html +++ /dev/null @@ -1,48 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/fft.hch Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

fft.hch

Go to the documentation of this file.
00001 #define NUMBER_OF_COLUMNS       8
-00002 #define NUMBER_OF_POINTS        (1<<NUMBER_OF_COLUMNS)
-00003 #define NUMBER_OF_FREQUENCIES   (NUMBER_OF_POINTS>>1)
-00004 
-00005 #if HARDWARE_MULTIPLY
-00006 /*
-00007  * This routine obtains the audio data from the audio I/O component and copies this  
-00008  * data to local arrays for calculating purposes, and calls the FFT algorithm.
-00009 */
-00010 void perform_fft(signed 18 *pcm_audio);
-00011 
-00012 /* This routine calls the ifft algorithm and after completing that it obtains the 
-00013  * modified audio data and copies that to the output arrays of the audio I/O component. 
-00014  * Besides that it also fills the array used by the display routine for displaying the waveform.
-00015 */
-00016 void perform_ifft(signed 18 *modified_audio ,unsigned 6 *ifft_info);
-00017 #else
-00018 /*
-00019  * This routine obtains the audio data from the audio I/O component and copies this  
-00020  * data to local arrays for calculating purposes, and calls the FFT algorithm.
-00021 */
-00022 void perform_fft(signed 16 *pcm_audio);
-00023 
-00024 /* This routine calls the ifft algorithm and after completing that it obtains the 
-00025  * modified audio data and copies that to the output arrays of the audio I/O component. 
-00026  * Besides that it also fills the array used by the display routine for displaying the waveform.
-00027 */
-00028 void perform_ifft(signed 16 *modified_audio ,unsigned 6 *ifft_info);
-00029 #endif
-00030 
-00031 /* This routine equalizes the frequencies derived by the FFT calculation, 
-00032  * according to the settings of the equalizer bars.
-00033 */
-00034 void equalize_audio(audiodata_t *audiodata);
-

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/fft_8hch.html b/Graphic_Equalizer/doc/html/fft_8hch.html deleted file mode 100644 index 850be00..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hch.html +++ /dev/null @@ -1,261 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/fft.hch File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

fft.hch File Reference

-

-This graph shows which files directly or indirectly include this file:

Included by dependency graph
- - - - - -

-Go to the source code of this file. - - - - - - - - - - - - - - - - -

Defines

#define NUMBER_OF_COLUMNS   8
#define NUMBER_OF_POINTS   (1<<NUMBER_OF_COLUMNS)
#define NUMBER_OF_FREQUENCIES   (NUMBER_OF_POINTS>>1)

Functions

void perform_fft (signed 16 *pcm_audio)
void perform_ifft (signed 16 *modified_audio, unsigned 6 *ifft_info)
void equalize_audio (audiodata_t *audiodata)
 This routine equalizes the frequencies derived by the FFT calculation, according to the settings of the equalizer bars.
-


Define Documentation

-

- - - - -
- - - - -
#define NUMBER_OF_COLUMNS   8
-
- - - - - -
-   - - -

- -

-Definition at line 1 of file fft.hch. -

-Referenced by calculate_fft().

-

- - - - -
- - - - -
#define NUMBER_OF_POINTS   (1<<NUMBER_OF_COLUMNS)
-
- - - - - -
-   - - -

- -

-Definition at line 2 of file fft.hch. -

-Referenced by calculate_fft(), and equalize_audio().

-

- - - - -
- - - - -
#define NUMBER_OF_FREQUENCIES   (NUMBER_OF_POINTS>>1)
-
- - - - - -
-   - - -

- -

-Definition at line 3 of file fft.hch.

-


Function Documentation

-

- - - - -
- - - - - - - - - -
void perform_fft signed 16 *  pcm_audio  ) 
-
- - - - - -
-   - - -

- -

-Definition at line 259 of file fft.hcc. -

-References calculate_fft().

- -

-Here is the call graph for this function:

- - - - -

- - - - -
- - - - - - - - - - - - - - - - - - -
void perform_ifft signed 16 *  modified_audio,
unsigned 6 *  ifft_info
-
- - - - - -
-   - - -

- -

-Definition at line 324 of file fft.hcc. -

-References calculate_fft().

- -

-Here is the call graph for this function:

- - - - -

- - - - -
- - - - - - - - - -
void equalize_audio audiodata_t audiodata  ) 
-
- - - - - -
-   - - -

-This routine equalizes the frequencies derived by the FFT calculation, according to the settings of the equalizer bars. -

-

Note:
Cost: 3844 clock cycles (Maximum)
-
Parameters:
- - -
*audiodata pointer to the audiodata struct, containing the eq_info, etc.
-
-
Returns:
void
-
Return values:
- - -
void 
-
- -

-Definition at line 398 of file fft.hcc. -

-References audiodata_t::display_log, eq_settings, audiodata_t::equalizer_levels_ptr, multiply(), and NUMBER_OF_POINTS.

- -

-Here is the call graph for this function:

- - - -
Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/fft_8hch__dep__incl.map b/Graphic_Equalizer/doc/html/fft_8hch__dep__incl.map deleted file mode 100644 index 8e0f55e..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hch__dep__incl.map +++ /dev/null @@ -1,3 +0,0 @@ -base referer -rect $fft_8hcc.html 7,7 66,34 -rect $main_8hcc.html 90,7 165,34 diff --git a/Graphic_Equalizer/doc/html/fft_8hch__dep__incl.md5 b/Graphic_Equalizer/doc/html/fft_8hch__dep__incl.md5 deleted file mode 100644 index bdbfb74..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hch__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -6bb05a468f78b02050527b66e74f1b34 \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/fft_8hch__dep__incl.png b/Graphic_Equalizer/doc/html/fft_8hch__dep__incl.png deleted file mode 100644 index 9e82038..0000000 Binary files a/Graphic_Equalizer/doc/html/fft_8hch__dep__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/fft_8hch_a3_cgraph.map b/Graphic_Equalizer/doc/html/fft_8hch_a3_cgraph.map deleted file mode 100644 index 037531e..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hch_a3_cgraph.map +++ /dev/null @@ -1,3 +0,0 @@ -base referer -rect $fft_8hcc.html#a3 145,8 238,34 -rect $fft_8hcc.html#a2 287,8 357,34 diff --git a/Graphic_Equalizer/doc/html/fft_8hch_a3_cgraph.md5 b/Graphic_Equalizer/doc/html/fft_8hch_a3_cgraph.md5 deleted file mode 100644 index a4d85c7..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hch_a3_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -5f114e2457f864aa033edf5b807704fa \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/fft_8hch_a3_cgraph.png b/Graphic_Equalizer/doc/html/fft_8hch_a3_cgraph.png deleted file mode 100644 index b2d2b15..0000000 Binary files a/Graphic_Equalizer/doc/html/fft_8hch_a3_cgraph.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/fft_8hch_a4_cgraph.map b/Graphic_Equalizer/doc/html/fft_8hch_a4_cgraph.map deleted file mode 100644 index 615e423..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hch_a4_cgraph.map +++ /dev/null @@ -1,3 +0,0 @@ -base referer -rect $fft_8hcc.html#a3 150,8 244,34 -rect $fft_8hcc.html#a2 293,8 362,34 diff --git a/Graphic_Equalizer/doc/html/fft_8hch_a4_cgraph.md5 b/Graphic_Equalizer/doc/html/fft_8hch_a4_cgraph.md5 deleted file mode 100644 index 87668b8..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hch_a4_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -99e366a583ff5563d9b44801efa74ea1 \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/fft_8hch_a4_cgraph.png b/Graphic_Equalizer/doc/html/fft_8hch_a4_cgraph.png deleted file mode 100644 index fd17c70..0000000 Binary files a/Graphic_Equalizer/doc/html/fft_8hch_a4_cgraph.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/fft_8hch_a5_cgraph.map b/Graphic_Equalizer/doc/html/fft_8hch_a5_cgraph.map deleted file mode 100644 index ca8d210..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hch_a5_cgraph.map +++ /dev/null @@ -1,2 +0,0 @@ -base referer -rect $fft_8hcc.html#a2 167,8 237,34 diff --git a/Graphic_Equalizer/doc/html/fft_8hch_a5_cgraph.md5 b/Graphic_Equalizer/doc/html/fft_8hch_a5_cgraph.md5 deleted file mode 100644 index 84ec6cb..0000000 --- a/Graphic_Equalizer/doc/html/fft_8hch_a5_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -556d882357bf3e1a8c4e82d6a4d5308a \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/fft_8hch_a5_cgraph.png b/Graphic_Equalizer/doc/html/fft_8hch_a5_cgraph.png deleted file mode 100644 index 29c7f08..0000000 Binary files a/Graphic_Equalizer/doc/html/fft_8hch_a5_cgraph.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/files.html b/Graphic_Equalizer/doc/html/files.html deleted file mode 100644 index d24e5c6..0000000 --- a/Graphic_Equalizer/doc/html/files.html +++ /dev/null @@ -1,37 +0,0 @@ - - -Graphic Equalizer 2: File Index - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
-

Graphic Equalizer 2 File List

Here is a list of all files with brief descriptions: - - - - - - - - - - - - - - - - - - - - - - - -
C:/Project Marcel & Oliver/Graphic_Equalizer/include/audio.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/configuration.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/display.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/display_shared.hch [code]Datastructures and defines for usage when interacting with the display library
C:/Project Marcel & Oliver/Graphic_Equalizer/include/eventhandler.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/eventhandler_shared.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/events.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/fft.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/mouse.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/mouse_shared.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/runfft.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/smartmedia.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/smartmedia_shared.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/weights_256.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/src/audio.hcc [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/src/display.hcc [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/src/eventhandler.hcc [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/src/events.hcc [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/src/fft.hcc [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/src/main.hcc [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/src/mouse.hcc [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/src/runfft.hcc [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/src/smartmedia.hcc [code]
-
Generated on Thu Dec 9 14:37:05 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/ftv2blank.png b/Graphic_Equalizer/doc/html/ftv2blank.png deleted file mode 100644 index 493c3c0..0000000 Binary files a/Graphic_Equalizer/doc/html/ftv2blank.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/ftv2doc.png b/Graphic_Equalizer/doc/html/ftv2doc.png deleted file mode 100644 index f72999f..0000000 Binary files a/Graphic_Equalizer/doc/html/ftv2doc.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/ftv2folderclosed.png b/Graphic_Equalizer/doc/html/ftv2folderclosed.png deleted file mode 100644 index d6d0634..0000000 Binary files a/Graphic_Equalizer/doc/html/ftv2folderclosed.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/ftv2folderopen.png b/Graphic_Equalizer/doc/html/ftv2folderopen.png deleted file mode 100644 index bbe2c91..0000000 Binary files a/Graphic_Equalizer/doc/html/ftv2folderopen.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/ftv2lastnode.png b/Graphic_Equalizer/doc/html/ftv2lastnode.png deleted file mode 100644 index e7b9ba9..0000000 Binary files a/Graphic_Equalizer/doc/html/ftv2lastnode.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/ftv2link.png b/Graphic_Equalizer/doc/html/ftv2link.png deleted file mode 100644 index 14f3fed..0000000 Binary files a/Graphic_Equalizer/doc/html/ftv2link.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/ftv2mlastnode.png b/Graphic_Equalizer/doc/html/ftv2mlastnode.png deleted file mode 100644 index 09ceb6a..0000000 Binary files a/Graphic_Equalizer/doc/html/ftv2mlastnode.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/ftv2mnode.png b/Graphic_Equalizer/doc/html/ftv2mnode.png deleted file mode 100644 index 3254c05..0000000 Binary files a/Graphic_Equalizer/doc/html/ftv2mnode.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/ftv2node.png b/Graphic_Equalizer/doc/html/ftv2node.png deleted file mode 100644 index c9f06a5..0000000 Binary files a/Graphic_Equalizer/doc/html/ftv2node.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/ftv2plastnode.png b/Graphic_Equalizer/doc/html/ftv2plastnode.png deleted file mode 100644 index 0b07e00..0000000 Binary files a/Graphic_Equalizer/doc/html/ftv2plastnode.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/ftv2pnode.png b/Graphic_Equalizer/doc/html/ftv2pnode.png deleted file mode 100644 index 2001b79..0000000 Binary files a/Graphic_Equalizer/doc/html/ftv2pnode.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/ftv2vertline.png b/Graphic_Equalizer/doc/html/ftv2vertline.png deleted file mode 100644 index b330f3a..0000000 Binary files a/Graphic_Equalizer/doc/html/ftv2vertline.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/functions.html b/Graphic_Equalizer/doc/html/functions.html deleted file mode 100644 index 2ba7edc..0000000 --- a/Graphic_Equalizer/doc/html/functions.html +++ /dev/null @@ -1,40 +0,0 @@ - - -Graphic Equalizer 2: Data Fields - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
-
All | Variables
- -

-Here is a list of all struct and union fields with links to the structures/unions they belong to:

-
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/functions_vars.html b/Graphic_Equalizer/doc/html/functions_vars.html deleted file mode 100644 index d23b45c..0000000 --- a/Graphic_Equalizer/doc/html/functions_vars.html +++ /dev/null @@ -1,40 +0,0 @@ - - -Graphic Equalizer 2: Data Fields - Variables - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
-
All | Variables
- -

-

-
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/globals.html b/Graphic_Equalizer/doc/html/globals.html deleted file mode 100644 index cec412d..0000000 --- a/Graphic_Equalizer/doc/html/globals.html +++ /dev/null @@ -1,192 +0,0 @@ - - -Graphic Equalizer 2: Globals - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
-
All | Functions | Variables | Defines
-
_ | a | b | c | d | e | f | h | i | l | m | n | p | r | s | u | v | w
- -

- -

-Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- _ -

-

- a -

-

- b -

-

- c -

-

- d -

-

- e -

-

- f -

-

- h -

-

- i -

-

- l -

-

- m -

-

- n -

-

- p -

-

- r -

-

- s -

-

- u -

-

- v -

-

- w -

-
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/globals_defs.html b/Graphic_Equalizer/doc/html/globals_defs.html deleted file mode 100644 index f1ce8e4..0000000 --- a/Graphic_Equalizer/doc/html/globals_defs.html +++ /dev/null @@ -1,166 +0,0 @@ - - -Graphic Equalizer 2: Globals - Defines - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
-
All | Functions | Variables | Defines
-
_ | a | b | c | d | e | f | h | i | l | m | n | p | r | s | u | w
- -

- -

-

- _ -

-

- a -

-

- b -

-

- c -

-

- d -

-

- e -

-

- f -

-

- h -

-

- i -

-

- l -

-

- m -

-

- n -

-

- p -

-

- r -

-

- s -

-

- u -

-

- w -

-
Generated on Thu Dec 9 14:37:10 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/globals_func.html b/Graphic_Equalizer/doc/html/globals_func.html deleted file mode 100644 index d8ce10b..0000000 --- a/Graphic_Equalizer/doc/html/globals_func.html +++ /dev/null @@ -1,33 +0,0 @@ - - -Graphic Equalizer 2: Globals - Functions - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
-
All | Functions | Variables | Defines
- -

-

-
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/globals_vars.html b/Graphic_Equalizer/doc/html/globals_vars.html deleted file mode 100644 index 5cda06d..0000000 --- a/Graphic_Equalizer/doc/html/globals_vars.html +++ /dev/null @@ -1,25 +0,0 @@ - - -Graphic Equalizer 2: Globals - Variables - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
-
All | Functions | Variables | Defines
- -

-

-
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/graph_legend.dot b/Graphic_Equalizer/doc/html/graph_legend.dot deleted file mode 100644 index 5420927..0000000 --- a/Graphic_Equalizer/doc/html/graph_legend.dot +++ /dev/null @@ -1,22 +0,0 @@ -digraph G -{ - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=record]; - Node9 [shape="box",label="Inherited",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",style="filled" fontcolor="white"]; - Node10 -> Node9 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="Helvetica"]; - Node10 [shape="box",label="PublicBase",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classPublicBase.html"]; - Node11 -> Node10 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="Helvetica"]; - Node11 [shape="box",label="Truncated",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="red",URL="$classTruncated.html"]; - Node13 -> Node9 [dir=back,color="darkgreen",fontsize=10,style="solid",fontname="Helvetica"]; - Node13 [shape="box",label="ProtectedBase",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classProtectedBase.html"]; - Node14 -> Node9 [dir=back,color="firebrick4",fontsize=10,style="solid",fontname="Helvetica"]; - Node14 [shape="box",label="PrivateBase",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classPrivateBase.html"]; - Node15 -> Node9 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="Helvetica"]; - Node15 [shape="box",label="Undocumented",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="grey75"]; - Node16 -> Node9 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="Helvetica"]; - Node16 [shape="box",label="Templ< int >",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classTempl.html"]; - Node17 -> Node16 [dir=back,color="orange",fontsize=10,style="dashed",label="< int >",fontname="Helvetica"]; - Node17 [shape="box",label="Templ< T >",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classTempl.html"]; - Node18 -> Node9 [dir=back,color="darkorchid3",fontsize=10,style="dashed",label="m_usedClass",fontname="Helvetica"]; - Node18 [shape="box",label="Used",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classUsed.html"]; -} diff --git a/Graphic_Equalizer/doc/html/graph_legend.html b/Graphic_Equalizer/doc/html/graph_legend.html deleted file mode 100644 index b5e1c0d..0000000 --- a/Graphic_Equalizer/doc/html/graph_legend.html +++ /dev/null @@ -1,74 +0,0 @@ - - -Graphic Equalizer 2: Graph Legend - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
-

Graph Legend

This page explains how to interpret the graphs that are generated by doxygen.

-Consider the following example:

/*! Invisible class because of truncation */
-class Invisible { };
-
-/*! Truncated class, inheritance relation is hidden */
-class Truncated : public Invisible { };
-
-/* Class not documented with doxygen comments */
-class Undocumented { };
-
-/*! Class that is inherited using public inheritance */
-class PublicBase : public Truncated { };
-
-/*! A template class */
-template<class T> class Templ { };
-
-/*! Class that is inherited using protected inheritance */
-class ProtectedBase { };
-
-/*! Class that is inherited using private inheritance */
-class PrivateBase { };
-
-/*! Class that is used by the Inherited class */
-class Used { };
-
-/*! Super class that inherits a number of other classes */
-class Inherited : public PublicBase,
-                  protected ProtectedBase,
-                  private PrivateBase,
-                  public Undocumented
-                  public Templ<int>
-{
-  private:
-    Used *m_usedClass;
-};
-
If the MAX_DOT_GRAPH_HEIGHT tag in the configuration file is set to 240 this will result in the following graph:

-

-graph_legend.png -
-

-The boxes in the above graph have the following meaning:

-The arrows have the following meaning: -
Generated on Thu Dec 9 14:37:11 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/graph_legend.png b/Graphic_Equalizer/doc/html/graph_legend.png deleted file mode 100644 index b8cfe42..0000000 Binary files a/Graphic_Equalizer/doc/html/graph_legend.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/index.html b/Graphic_Equalizer/doc/html/index.html deleted file mode 100644 index bbefe91..0000000 --- a/Graphic_Equalizer/doc/html/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - -Graphic Equalizer 2 - - - - - diff --git a/Graphic_Equalizer/doc/html/main.html b/Graphic_Equalizer/doc/html/main.html deleted file mode 100644 index 586bea1..0000000 --- a/Graphic_Equalizer/doc/html/main.html +++ /dev/null @@ -1,14 +0,0 @@ - - -Graphic Equalizer 2: Main Page - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
-

Graphic Equalizer 2 Documentation

-

-

2.0.1


Generated on Thu Dec 9 14:37:05 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/main_8hcc-source.html b/Graphic_Equalizer/doc/html/main_8hcc-source.html deleted file mode 100644 index 33c19e6..0000000 --- a/Graphic_Equalizer/doc/html/main_8hcc-source.html +++ /dev/null @@ -1,153 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/main.hcc Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

main.hcc

Go to the documentation of this file.
00001 
-00019 /*
-00020  * Set the Clock rate for this domain. 25.175 Mhz is required for the Video output.
-00021  */
-00022 #define PAL_TARGET_CLOCK_RATE 25175000
-00023 
-00024 /******** System Includes *************/
-00025 #include "pal_master.hch"
-00026 
-00027 /******** Application Includes ********/
-00028 #include "configuration.hch"
-00029 #include "audio.hch"
-00030 #include "mouse_shared.hch"
-00031 #include "mouse.hch"
-00032 #include "eventhandler_shared.hch"
-00033 #include "eventhandler.hch"
-00034 #include "display_shared.hch"
-00035 #include "display.hch"
-00036 #include "smartmedia.hch"
-00037 
-00038 #include "fft.hch"
-00039 #include "runfft.hch"
-00040 
-00041 #if HAVE_DEBUG
-00042         #include "debug.hch"
-00043 #endif
-00044 
-00051 void main(void) {
-00052         /*
-00053          * Set VideoOut, Audio I/O and Ram Handles and set clockrate.
-00054          */
-00055         macro expr ClockRate = PAL_ACTUAL_CLOCK_RATE;
-00056         macro expr VideoOut = PalVideoOutOptimalCT(ClockRate);
-00057         macro expr AudioIn  = PalAudioInCT(0);
-00058         macro expr AudioOut = PalAudioOutCT(0);
-00059         macro expr RAM_BANK0 = PalPL2RAMCT(0);
-00060 
-00061         mousedata_t mousedata;
-00062         events_t events;
-00063         audiodata_t audiodata;
-00064         skindata_t skindata;
-00065         unsigned 1 result;
-00066 
-00067         /*
-00068          * Check library versions and Request various hardware functionality.
-00069          * We need at least Major Version 1. For Audio purposes we need atleast
-00070          * minor version 2.
-00071          */
-00072         PalVersionRequire(1, 2);
-00073         PalVideoOutRequire(1);
-00074         PalAudioInRequire(1);
-00075         PalAudioOutRequire(1);
-00076 
-00077         /*
-00078          * We verify some datawidths here at compile time. This to ensure
-00079          * successfull operation.
-00080          */
-00081         assert (PalVideoOutGetColorWidthCT(VideoOut) == 24, 0, 
-00082                 "We need a 24-bit color Display.");
-00083         assert (PalPL2RAMGetDataWidthCT(RAM_BANK0) >= 32, 0, 
-00084                 "We can't work with anything less then 32 bits wide ram.");
-00085 
-00086         /*
-00087          * Run The Following main tasks in parallel.
-00088          */
-00089         par {
-00090                 /*
-00091                  * Primary task is to 'Run' several hardware simultaniously.
-00092                  */
-00093                 PalVideoOutRun(VideoOut, ClockRate);
-00094                 MouseRun(ClockRate);
-00095                 PalAudioInRun(AudioIn, ClockRate);
-00096                 PalAudioOutRun(AudioOut, ClockRate);
-00097                 PalPL2RAMRun(RAM_BANK0, ClockRate);
-00098 #if HAVE_SMARTMEDIA
-00099                 /*
-00100                  * The smartmedia device needs the CPLD to run also.
-00101                  */
-00102                 CPLDRun(ClockRate);
-00103                 SmartMediaRun(ClockRate);
-00104 #endif
-00105 #if HAVE_DEBUG
-00106                 RC200RS232Run(RC200RS232_115200Baud, RC200RS232ParityNone,
-00107                         RC200RS232FlowControlNone, ClockRate);
-00108 #endif
-00109                 
-00110                 /*
-00111                  * Parallel to our Primary tasks we run the application.
-00112                  */
-00113                 seq {
-00114                         /*
-00115                          * But first we need to initialize Video and Audio.
-00116                          * We also load the data from the SmartMedia card
-00117                          * into the ram.
-00118                          */
-00119 #if HAVE_DEBUG
-00120                         print_cls();
-00121                         print_string("Graphic Equalizer 2");
-00122                         print_eol();
-00123 #endif
-00124                         PalVideoOutEnable(VideoOut);
-00125                         PalAudioInEnable(AudioIn);
-00126                         PalAudioOutEnable(AudioOut);
-00127                         audio_init(6, LINE_IN, SR_44100, AudioIn, AudioOut);
-00128 #if HAVE_SMARTMEDIA
-00129                         /*
-00130                          * Once we properly setup the SmartMedia we load our
-00131                          * data folowed by our main program loop.
-00132                          */
-00133                         result = smartmedia_init();
-00134                         if (!result) {
-00135 #endif
-00136                                 smartmedia_loaddata(&skindata);
-00137 
-00138                                 /*
-00139                                  * Main application starts here!
-00140                                  */
-00141                                 par {
-00142                                         /*
-00143                                          * From here we run the mouse driver, audio
-00144                                          * and display in parallel. None of these
-00145                                          * should ever return.
-00146                                          */
-00147                                         mouse_main(&mousedata);
-00148                                         display_main(&skindata, &audiodata, &events, &mousedata);
-00149                                         eventhandler_main(&audiodata, &events, &mousedata);
-00150                                         audio_main(audiodata, AudioIn, AudioOut);
-00151                                 }
-00152 #if HAVE_SMARTMEDIA
-00153                         } else {
-00154 #if HAVE_DEBUG
-00155                                 print_string("Error Initializing SmartMedia");
-00156 #endif
-00157                         }
-00158 #endif
-00159                 }
-00160         }
-00161 
-00162 } /* --- main() --- */
-

Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/main_8hcc.html b/Graphic_Equalizer/doc/html/main_8hcc.html deleted file mode 100644 index 91be25e..0000000 --- a/Graphic_Equalizer/doc/html/main_8hcc.html +++ /dev/null @@ -1,151 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/main.hcc File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

main.hcc File Reference

#include "pal_master.hch"
-#include "configuration.hch"
-#include "audio.hch"
-#include "mouse_shared.hch"
-#include "mouse.hch"
-#include "eventhandler_shared.hch"
-#include "eventhandler.hch"
-#include "display_shared.hch"
-#include "display.hch"
-#include "smartmedia.hch"
-#include "fft.hch"
-#include "runfft.hch"
- -

-Include dependency graph for main.hcc:

Include dependency graph
- - - - - - - - - - - - - - -

-Go to the source code of this file. - - - - - - - - -

Defines

#define PAL_TARGET_CLOCK_RATE   25175000

Functions

void main (void)
 Main Application Loop.
-


Detailed Description

-

-Graphic Equalizer API

-

-Project information.

-Project Graphic Equalizer
-
Author:
O.M. Schinagl
-
Date:
20041011
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041011: O.M. Schinagl
- Initial version -

-Definition in file main.hcc.


Define Documentation

-

- - - - -
- - - - -
#define PAL_TARGET_CLOCK_RATE   25175000
-
- - - - - -
-   - - -

- -

-Definition at line 22 of file main.hcc.

-


Function Documentation

-

- - - - -
- - - - - - - - - -
void main void   ) 
-
- - - - - -
-   - - -

-Main Application Loop. -

-

Returns:
void
-
Return values:
- - -
void 
-
- -

-Definition at line 51 of file main.hcc. -

-References audio_init(), audio_main(), CPLDRun, display_main(), eventhandler_main(), LINE_IN, mouse_main(), MouseRun, smartmedia_init(), smartmedia_loaddata(), SmartMediaRun, and SR_44100.

- -

-Here is the call graph for this function:

- - - - - - - - - - - -
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/main_8hcc__incl.map b/Graphic_Equalizer/doc/html/main_8hcc__incl.map deleted file mode 100644 index 93dc814..0000000 --- a/Graphic_Equalizer/doc/html/main_8hcc__incl.map +++ /dev/null @@ -1,12 +0,0 @@ -base referer -rect $configuration_8hch.html 143,7 269,34 -rect $audio_8hch.html 293,7 373,34 -rect $mouse__shared_8hch.html 397,7 533,34 -rect $mouse_8hch.html 557,7 645,34 -rect $eventhandler__shared_8hch.html 669,7 842,34 -rect $eventhandler_8hch.html 866,7 991,34 -rect $display__shared_8hch.html 1015,7 1151,34 -rect $display_8hch.html 1175,7 1263,34 -rect $smartmedia_8hch.html 1287,7 1405,34 -rect $fft_8hch.html 1429,7 1487,34 -rect $runfft_8hch.html 1511,7 1589,34 diff --git a/Graphic_Equalizer/doc/html/main_8hcc__incl.md5 b/Graphic_Equalizer/doc/html/main_8hcc__incl.md5 deleted file mode 100644 index 180884e..0000000 --- a/Graphic_Equalizer/doc/html/main_8hcc__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -1419fd3b33c01dc6aea19227c10014a5 \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/main_8hcc__incl.png b/Graphic_Equalizer/doc/html/main_8hcc__incl.png deleted file mode 100644 index a519b5a..0000000 Binary files a/Graphic_Equalizer/doc/html/main_8hcc__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/main_8hcc_a1_cgraph.map b/Graphic_Equalizer/doc/html/main_8hcc_a1_cgraph.map deleted file mode 100644 index fc498f4..0000000 --- a/Graphic_Equalizer/doc/html/main_8hcc_a1_cgraph.map +++ /dev/null @@ -1,10 +0,0 @@ -base referer -rect $audio_8hcc.html#a0 145,8 225,34 -rect $audio_8hcc.html#a1 140,58 230,85 -rect $display_8hcc.html#a2 134,109 236,136 -rect $eventhandler_8hcc.html#a2 117,160 253,186 -rect $mouse_8hcc.html#a0 136,210 234,237 -rect $smartmedia_8hch.html#a9 126,261 244,288 -rect $smartmedia_8hcc.html#a1 109,312 261,338 -rect $events_8hcc.html#a3 325,134 416,161 -rect $display_8hcc.html#a3 310,185 430,212 diff --git a/Graphic_Equalizer/doc/html/main_8hcc_a1_cgraph.md5 b/Graphic_Equalizer/doc/html/main_8hcc_a1_cgraph.md5 deleted file mode 100644 index 095d857..0000000 --- a/Graphic_Equalizer/doc/html/main_8hcc_a1_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -f9b3a03c002f36a20920f8e86e483e1a \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/main_8hcc_a1_cgraph.png b/Graphic_Equalizer/doc/html/main_8hcc_a1_cgraph.png deleted file mode 100644 index c55d7a3..0000000 Binary files a/Graphic_Equalizer/doc/html/main_8hcc_a1_cgraph.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/mouse_8hcc-source.html b/Graphic_Equalizer/doc/html/mouse_8hcc-source.html deleted file mode 100644 index dfb8298..0000000 --- a/Graphic_Equalizer/doc/html/mouse_8hcc-source.html +++ /dev/null @@ -1,116 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/mouse.hcc Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

mouse.hcc

Go to the documentation of this file.
00001 
-00021 /******** System Includes *************/
-00022 #include <stdlib.hch>
-00023 
-00024 #include "pal_master.hch"
-00025 #include "pal_mouse.hch"
-00026 
-00027 /******** Application Includes ********/
-00028 #include "configuration.hch"
-00029 #include "mouse_shared.hch"
-00030 #include "mouse.hch"
-00031 
-00032 #if HAVE_DEBUG
-00033         #include "debug.hch"
-00034 #endif
-00035 
-00036 
-00037 
-00048 void mouse_main(mousedata_t *mousedata) {
-00049         unsigned 18 touch_sampler;
-00050         unsigned 10 x, oldx;
-00051         unsigned 9 y, oldy;
-00052         unsigned 3 mousestate, oldmousestate;
-00053         unsigned 1 touch, touched, oldtouched;
-00054 
-00055         /*
-00056          * We only check for mouse states once every 2^18 time. This to
-00057          * overcome the sampling of the 'Touch' state of the RC200 libs. When
-00058          * using newer libs this might be overkill, e.g. smaller values may
-00059          * work or sampling all together will be redundant.
-00060          */
-00061         touch_sampler = 1;
-00062         while (TRUE) {
-00063                 if (!touch_sampler) {
-00064                         /*
-00065                          * We are here ready to set mouse states. We compare
-00066                          * current and previous states and thereby determine
-00067                          * the state to send to others
-00068                          */
-00069                         if (touched) {
-00070                                 if(oldtouched) {
-00071                                         mousestate = MOUSE_STATE_DOWN;
-00072                                 } else {
-00073                                         mousestate = MOUSE_STATE_ON_PRESS;
-00074                                 }
-00075                                 oldtouched = TRUE;
-00076                         } else {
-00077                                 if(oldtouched) {
-00078                                         mousestate = MOUSE_STATE_ON_RELEASE;
-00079                                 } else {
-00080                                         mousestate = MOUSE_STATE_UP;
-00081                                 }
-00082                                 oldtouched = FALSE;
-00083                         }
-00084                         /*
-00085                          * We have now processed our Touch. Reset it for the
-00086                          * next run.
-00087                          */
-00088                         touched = FALSE;
-00089 
-00090                         /*
-00091                          * In the rare occurance that we receive values
-00092                          * beyond our range, we set them to some sane
-00093                          * values here.
-00094                          */
-00095                          x = (x > 639) ? 0 : x;
-00096                          y = (y > 479) ? 0 : y;
-00097 
-00098                         /*
-00099                          * Compare Previous States and Coordinates to determine
-00100                          * wether they have changed. If so, Copy them into
-00101                          * shared memory, notify the listening processes and
-00102                          * Set the new as previous values for the next run. We
-00103                          * can only do this when the display has handled all
-00104                          * changes.
-00105                          */
-00106                         if (((oldmousestate != mousestate) || (oldx != x) || (oldy != y)) && (MOUSE_NOT_UPDATED == mousedata->status)) {
-00107                                 //par {
-00108                                         oldx = x;
-00109                                         oldy = y;
-00110                                         oldmousestate = mousestate;
-00111                                         mousedata->x = x;
-00112                                         mousedata->y = 0 @ y;
-00113                                         mousedata->state = mousestate;
-00114                                         mousedata->status = MOUSE_UPDATED;
-00115                                 //}
-00116                         }
-00117                 }
-00118 
-00119                 /*
-00120                  * Read the current X and Y of the 'cursor' and register wether
-00121                  * the display was touched. If touched store this in a local
-00122                  * store. This we do to catch the sampling of the RC200 lib.
-00123                  */
-00124                 RC200TouchScreenReadScaled(&x, &y, &touch);
-00125                 if (touch) {
-00126                         touched = TRUE;
-00127                 }
-00128 
-00129                 touch_sampler++;
-00130         }
-00131 } /* --- mouse_main() --- */
-

Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/mouse_8hcc.html b/Graphic_Equalizer/doc/html/mouse_8hcc.html deleted file mode 100644 index 6dffc76..0000000 --- a/Graphic_Equalizer/doc/html/mouse_8hcc.html +++ /dev/null @@ -1,101 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/mouse.hcc File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

mouse.hcc File Reference

#include <stdlib.hch>
-#include "pal_master.hch"
-#include "pal_mouse.hch"
-#include "configuration.hch"
-#include "mouse_shared.hch"
-#include "mouse.hch"
- -

-Include dependency graph for mouse.hcc:

Include dependency graph
- - - - - - -

-Go to the source code of this file. - - - - - -

Functions

void mouse_main (mousedata_t *mousedata)
 Main mousedriver. This function never returns! It calls the main mousehandler and returns the States and coordinates into a shared store.
-


Detailed Description

-

-Graphic Equalizer API

-input function itself is however performed by the touchscreen of the RC200.

-Project information.

-Project Graphic Equalizer
-
Author:
O.M. Schinagl
-
Date:
20041011
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041011: O.M. Schinagl
- Initial version -

-Definition in file mouse.hcc.


Function Documentation

-

- - - - -
- - - - - - - - - -
void mouse_main mousedata_t mousedata  ) 
-
- - - - - -
-   - - -

-Main mousedriver. This function never returns! It calls the main mousehandler and returns the States and coordinates into a shared store. -

-

Parameters:
- - -
*mousedata Storage for all mousedata and states.
-
-
Returns:
Never Returns.
-
Return values:
- - -
void 
-
- -

-Definition at line 48 of file mouse.hcc. -

-References MOUSE_NOT_UPDATED, mousedata_t::state, mousedata_t::status, mousedata_t::x, and mousedata_t::y. -

-Referenced by main().

-


Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/mouse_8hcc__incl.map b/Graphic_Equalizer/doc/html/mouse_8hcc__incl.map deleted file mode 100644 index ed301e8..0000000 --- a/Graphic_Equalizer/doc/html/mouse_8hcc__incl.map +++ /dev/null @@ -1,4 +0,0 @@ -base referer -rect $configuration_8hch.html 381,7 506,34 -rect $mouse__shared_8hch.html 530,7 666,34 -rect $mouse_8hch.html 690,7 778,34 diff --git a/Graphic_Equalizer/doc/html/mouse_8hcc__incl.md5 b/Graphic_Equalizer/doc/html/mouse_8hcc__incl.md5 deleted file mode 100644 index 8a79480..0000000 --- a/Graphic_Equalizer/doc/html/mouse_8hcc__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -254026f7ee99dbe927548df7b2f1ac05 \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/mouse_8hcc__incl.png b/Graphic_Equalizer/doc/html/mouse_8hcc__incl.png deleted file mode 100644 index f87dd35..0000000 Binary files a/Graphic_Equalizer/doc/html/mouse_8hcc__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/mouse_8hch-source.html b/Graphic_Equalizer/doc/html/mouse_8hch-source.html deleted file mode 100644 index 5c7b232..0000000 --- a/Graphic_Equalizer/doc/html/mouse_8hch-source.html +++ /dev/null @@ -1,38 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/mouse.hch Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

mouse.hch

Go to the documentation of this file.
00001 
-00019 #ifndef _MOUSEDRIVER_HCH
-00020 #define _MOUSEDRIVER_HCH 1
-00021 
-00022 
-00023 
-00024 /*
-00025  * Create a define to keep API generic
-00026  */
-00027 #define MouseRun(ClockRate) RC200TouchScreenRun(ClockRate)
-00028 
-00029 
-00030 
-00031 /*
-00032  * Main mousedriver loop. This procedure never returns! It handles mouse input,
-00033  * updates the shared memory and notifies listeners. It requires a pointer to
-00034  * a mousedata_t struct to store mouse information.
-00035  */
-00036 void mouse_main(mousedata_t *mousedata);
-00037 
-00038 #else
-00039 #error "ERROR file mousedriver.hch multiple times included"
-00040 #endif /* --- _MOUSEDRIVER_HCH --- */
-00041 
-

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/mouse_8hch.html b/Graphic_Equalizer/doc/html/mouse_8hch.html deleted file mode 100644 index 557d23f..0000000 --- a/Graphic_Equalizer/doc/html/mouse_8hch.html +++ /dev/null @@ -1,157 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/mouse.hch File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

mouse.hch File Reference

-

-This graph shows which files directly or indirectly include this file:

Included by dependency graph
- - - - - -

-Go to the source code of this file. - - - - - - - - - - -

Defines

#define _MOUSEDRIVER_HCH   1
#define MouseRun(ClockRate)   RC200TouchScreenRun(ClockRate)

Functions

void mouse_main (mousedata_t *mousedata)
 Main mousedriver. This function never returns! It calls the main mousehandler and returns the States and coordinates into a shared store.
-


Detailed Description

-

-Graphic Equalizer API

-

-Project information.

-Project Graphic Equalizer
-
Author:
O.M. Schinagl
-
Date:
20041011
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041011: O.M. Schinagl
- Initial version -

-Definition in file mouse.hch.


Define Documentation

-

- - - - -
- - - - -
#define _MOUSEDRIVER_HCH   1
-
- - - - - -
-   - - -

- -

-Definition at line 20 of file mouse.hch.

-

- - - - -
- - - - - - - - - -
#define MouseRun ClockRate   )    RC200TouchScreenRun(ClockRate)
-
- - - - - -
-   - - -

- -

-Definition at line 27 of file mouse.hch. -

-Referenced by main().

-


Function Documentation

-

- - - - -
- - - - - - - - - -
void mouse_main mousedata_t mousedata  ) 
-
- - - - - -
-   - - -

-Main mousedriver. This function never returns! It calls the main mousehandler and returns the States and coordinates into a shared store. -

-

Parameters:
- - -
*mousedata Storage for all mousedata and states.
-
-
Returns:
Never Returns.
-
Return values:
- - -
void 
-
- -

-Definition at line 48 of file mouse.hcc. -

-References MOUSE_NOT_UPDATED, mousedata_t::state, mousedata_t::status, mousedata_t::x, and mousedata_t::y. -

-Referenced by main().

-


Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/mouse_8hch__dep__incl.map b/Graphic_Equalizer/doc/html/mouse_8hch__dep__incl.map deleted file mode 100644 index c2ecffa..0000000 --- a/Graphic_Equalizer/doc/html/mouse_8hch__dep__incl.map +++ /dev/null @@ -1,3 +0,0 @@ -base referer -rect $main_8hcc.html 8,7 82,34 -rect $mouse_8hcc.html 106,7 192,34 diff --git a/Graphic_Equalizer/doc/html/mouse_8hch__dep__incl.md5 b/Graphic_Equalizer/doc/html/mouse_8hch__dep__incl.md5 deleted file mode 100644 index 30a98a4..0000000 --- a/Graphic_Equalizer/doc/html/mouse_8hch__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -13b256c6eed7f888f4f52496299b4b2d \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/mouse_8hch__dep__incl.png b/Graphic_Equalizer/doc/html/mouse_8hch__dep__incl.png deleted file mode 100644 index ac0c83c..0000000 Binary files a/Graphic_Equalizer/doc/html/mouse_8hch__dep__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/mouse__shared_8hch-source.html b/Graphic_Equalizer/doc/html/mouse__shared_8hch-source.html deleted file mode 100644 index 1910665..0000000 --- a/Graphic_Equalizer/doc/html/mouse__shared_8hch-source.html +++ /dev/null @@ -1,53 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/mouse_shared.hch Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

mouse_shared.hch

Go to the documentation of this file.
00001 
-00019 #ifndef _MOUSEDRIVER_SHARED_HCH
-00020 #define _MOUSEDRIVER_SHARED_HCH 1
-00021 
-00022 /*** Data Types **********************/
-00023 
-00024 /*
-00025  * Type definition of the shared memory to be used in various processes
-00026  */
-00027 typedef struct {
-00028         unsigned 10 x, y;
-00029         unsigned 3 state;
-00030         unsigned 1 status;
-00031 } mousedata_t;
-00032 
-00033 
-00034 
-00035 /*
-00036  * States used to identify wether mouse data is updated
-00037  */
-00038 #define MOUSE_NOT_UPDATED       0
-00039 #define MOUSE_UPDATED           1
-00040 
-00041 
-00042 
-00043 /*
-00044  * Set of Mouse States defines
-00045  */
-00046 #define MOUSE_STATE_UP          0
-00047 #define MOUSE_STATE_ON_PRESS    1
-00048 #define MOUSE_STATE_DOWN        2
-00049 #define MOUSE_STATE_ON_RELEASE  3
-00050 
-00051 
-00052 
-00053 #else
-00054 #error "ERROR file mousedriver_shared.hch multiple times included"
-00055 #endif /* --- _MOUSEDRIVER_SHARED_HCH --- */
-00056 
-

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/mouse__shared_8hch.html b/Graphic_Equalizer/doc/html/mouse__shared_8hch.html deleted file mode 100644 index 05df284..0000000 --- a/Graphic_Equalizer/doc/html/mouse__shared_8hch.html +++ /dev/null @@ -1,247 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/mouse_shared.hch File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

mouse_shared.hch File Reference

-

-This graph shows which files directly or indirectly include this file:

Included by dependency graph
- - - - - - - - -

-Go to the source code of this file. - - - - - - - - - - - - - - - - - - - -

Data Structures

struct  mousedata_t

Defines

#define _MOUSEDRIVER_SHARED_HCH   1
#define MOUSE_NOT_UPDATED   0
#define MOUSE_UPDATED   1
#define MOUSE_STATE_UP   0
#define MOUSE_STATE_ON_PRESS   1
#define MOUSE_STATE_DOWN   2
#define MOUSE_STATE_ON_RELEASE   3
-


Detailed Description

-

-Graphic Equalizer API

-

-Project information.

-Project Graphic Equalizer
-
Author:
O.M. Schinagl
-
Date:
20041011
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041011: O.M. Schinagl
- Initial version -

-Definition in file mouse_shared.hch.


Define Documentation

-

- - - - -
- - - - -
#define _MOUSEDRIVER_SHARED_HCH   1
-
- - - - - -
-   - - -

- -

-Definition at line 20 of file mouse_shared.hch.

-

- - - - -
- - - - -
#define MOUSE_NOT_UPDATED   0
-
- - - - - -
-   - - -

- -

-Definition at line 38 of file mouse_shared.hch. -

-Referenced by mouse_main().

-

- - - - -
- - - - -
#define MOUSE_UPDATED   1
-
- - - - - -
-   - - -

- -

-Definition at line 39 of file mouse_shared.hch. -

-Referenced by display_main().

-

- - - - -
- - - - -
#define MOUSE_STATE_UP   0
-
- - - - - -
-   - - -

- -

-Definition at line 46 of file mouse_shared.hch.

-

- - - - -
- - - - -
#define MOUSE_STATE_ON_PRESS   1
-
- - - - - -
-   - - -

- -

-Definition at line 47 of file mouse_shared.hch. -

-Referenced by eventhandler_main().

-

- - - - -
- - - - -
#define MOUSE_STATE_DOWN   2
-
- - - - - -
-   - - -

- -

-Definition at line 48 of file mouse_shared.hch. -

-Referenced by eventhandler_main().

-

- - - - -
- - - - -
#define MOUSE_STATE_ON_RELEASE   3
-
- - - - - -
-   - - -

- -

-Definition at line 49 of file mouse_shared.hch.

-


Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/mouse__shared_8hch__dep__incl.map b/Graphic_Equalizer/doc/html/mouse__shared_8hch__dep__incl.map deleted file mode 100644 index 199f162..0000000 --- a/Graphic_Equalizer/doc/html/mouse__shared_8hch__dep__incl.map +++ /dev/null @@ -1,6 +0,0 @@ -base referer -rect $display_8hcc.html 8,7 96,34 -rect $eventhandler_8hcc.html 120,7 242,34 -rect $main_8hcc.html 266,7 341,34 -rect $mouse_8hcc.html 365,7 450,34 -rect $smartmedia_8hcc.html 474,7 592,34 diff --git a/Graphic_Equalizer/doc/html/mouse__shared_8hch__dep__incl.md5 b/Graphic_Equalizer/doc/html/mouse__shared_8hch__dep__incl.md5 deleted file mode 100644 index 003654a..0000000 --- a/Graphic_Equalizer/doc/html/mouse__shared_8hch__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -0fb2c7882172821abee6da1bc34d0db2 \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/mouse__shared_8hch__dep__incl.png b/Graphic_Equalizer/doc/html/mouse__shared_8hch__dep__incl.png deleted file mode 100644 index 01b165d..0000000 Binary files a/Graphic_Equalizer/doc/html/mouse__shared_8hch__dep__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/runfft_8hcc-source.html b/Graphic_Equalizer/doc/html/runfft_8hcc-source.html deleted file mode 100644 index 28ce4b0..0000000 --- a/Graphic_Equalizer/doc/html/runfft_8hcc-source.html +++ /dev/null @@ -1,168 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/runfft.hcc Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

runfft.hcc

Go to the documentation of this file.
00001 
-00020 #include <stdlib.hch>
-00021 #include "pal_master.hch"
-00022 
-00023 #include "configuration.hch"
-00024 #if USE_RUNFFT
-00025 #include "audio.hch"
-00026 #include "fft.hch"
-00027 
-00028 #if HAVE_DEBUG
-00029         #include "debug.hch"
-00030 #endif
-00031 
-00032 /*
-00033  * Forward declarations
-00034  */
-00035 static macro expr ClockRate = PAL_ACTUAL_CLOCK_RATE;
-00036 #if HARDWARE_MULTIPLY
-00037 //input buffer
-00038 ram signed 18 audio_buffer_in[256] with { block = "BlockRAM"};
-00039 //output buffer
-00040 ram signed 18 audio_buffer_out[128] with { block = "BlockRAM"}; 
-00041 #else
-00042 //input buffer
-00043 ram signed 16 audio_buffer_in[256] with { block = "BlockRAM"};
-00044 //output buffer
-00045 ram signed 16 audio_buffer_out[128] with { block = "BlockRAM"}; 
-00046 #endif
-00047 //EQ settings for the FFT
-00048 ram unsigned 4 EQ_info[128] with { block = "BlockRAM"}; 
-00049 //EQ settings received from the display
-00050 
-00051 
-00052 #if HARDWARE_MULTIPLY
-00053 signed 18 *audioptr_in1,*audioptr_in2,*audioptr_in3,*audioptr_in4;
-00054 
-00055 signed 18 *audioptr_out1,*audioptr_out2;
-00056 
-00057 unsigned 6 *displayptr1,*displayptr2,*displayptr3,*displayptr4;
-00058 #else
-00059 signed 16 *audioptr_in1,*audioptr_in2,*audioptr_in3,*audioptr_in4;
-00060 
-00061 signed 16 *audioptr_out1,*audioptr_out2;
-00062 
-00063 unsigned 6 *displayptr1,*displayptr2,*displayptr3,*displayptr4;
-00064 #endif
-00065 
-00076 macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT)
-00077 {
-00078         signed 18 sample;
-00079         unsigned 6 sample_count;
-00080         unsigned 8 i,cycle;
-00081         unsigned 4 eqinfo;
-00082 
-00083         unsigned 1 FFT_Sync, first;
-00084         macro expr OW = PalAudioOutGetMaxDataWidthCT ();
-00085         macro expr IW = PalAudioInGetMaxDataWidthCT  ();
-00086         signed LeftNew, RightNew;
-00087         signed Output_sample;
-00088 
-00089         ram unsigned 6 input[64];
-00090 
-00091         //pointers for double and quadruple buffering:
-00092         audioptr_in1 = &audio_buffer_in[0];
-00093         audioptr_in2 = &audio_buffer_in[64];
-00094         audioptr_in3 = &audio_buffer_in[128];
-00095         audioptr_in4 = &audio_buffer_in[192];
-00096 
-00097         audioptr_out1 = &audio_buffer_out[0];
-00098         audioptr_out2 = &audio_buffer_out[64];
-00099 
-00100         displayptr1 = &audiodata.ifft_info.write[0];
-00101         displayptr2 = &audiodata.ifft_info.write[64];
-00102         displayptr3 = &audiodata.ifft_info.write[128];
-00103         displayptr4 = &audiodata.ifft_info.write[192];
-00104 
-00105         FFT_Sync=0;
-00106 par
-00107 {
-00108         for(;;)
-00109         {
-00110                 if (FFT_Sync)   //if 64 samples are read from ADC...
-00111                 {
-00112                         par
-00113                         {
-00114                                 // switch pointers 
-00115                                 audioptr_in1 = audioptr_in2;
-00116                                 audioptr_in2 = audioptr_in3;
-00117                                 audioptr_in3 = audioptr_in4;
-00118                                 audioptr_in4 = audioptr_in1;
-00119                                 
-00120                                 audioptr_out1 = audioptr_out2;
-00121                                 audioptr_out2 = audioptr_out1;
-00122 
-00123                                 displayptr1=displayptr2;
-00124                                 displayptr2=displayptr3;
-00125                                 displayptr3=displayptr4;
-00126                                 displayptr4=displayptr1;
-00127                                 
-00128                                 FFT_Sync = 0;
-00129                         }
-00130                 
-00131                         // FFT calculation
-00132                         perform_fft(audioptr_in1);
-00133                         
-00134 #if PERFORM_FFT_CALCULATION
-00135                         equalize_audio(&audiodata);
-00136 #endif
-00137                         // inverse FFT calculation
-00138                         perform_ifft(audioptr_out1,displayptr1);                
-00139                 }
-00140                 else
-00141                         delay;
-00142         }       
-00143 
-00144         for(sample_count=0;;)//store the samples in the inputbuffer
-00145         {
-00146                 if (!FFT_Sync)
-00147                 {
-00148                         par
-00149                         {
-00150                                 seq
-00151                                 {
-00152                                         PalAudioInRead(AUDIOIN, &LeftNew, &RightNew);
-00153 #if HARDWARE_MULTIPLY                                   
-00154                                         audioptr_in1[sample_count] = LeftNew;//drop 2 LSB's
-00155 #else
-00156                                         audioptr_in1[sample_count] = (LeftNew\\2);//drop 2 LSB's
-00157 #endif
-00158                                         sample_count++; 
-00159                                         if (!sample_count) 
-00160                                         {
-00161                                                 FFT_Sync = 1; 
-00162                                         }
-00163                                 }
-00164                                 seq
-00165                                 {
-00166                                         Output_sample = audioptr_out2[sample_count];
-00167                                 }
-00168                         }
-00169                 }
-00170                 else
-00171                 {
-00172                         delay;
-00173                 }
-00174         }
-00175         for(;;)
-00176         {
-00177                 PalAudioOutWrite(AUDIOOUT,(signed OW)(Output_sample @ 0),(signed OW)(Output_sample @ 0));
-00178         }
-00179 }//end par
-00180 }// end function
-00181 #endif
-00182 
-

Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/runfft_8hcc.html b/Graphic_Equalizer/doc/html/runfft_8hcc.html deleted file mode 100644 index 8f3023f..0000000 --- a/Graphic_Equalizer/doc/html/runfft_8hcc.html +++ /dev/null @@ -1,45 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/runfft.hcc File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

runfft.hcc File Reference

#include <stdlib.hch>
-#include "pal_master.hch"
-#include "configuration.hch"
- -

-Include dependency graph for runfft.hcc:

Include dependency graph
- - - - -

-Go to the source code of this file. - -
-


Detailed Description

-

-Graphic Equalizer API

-audiosamples are correctly buffered and fed correctly to the FFT.
- This module will also handle the output of the modified audio samples.

-Project information.

-Project Graphic Equalizer
-
Author:
M. Lauwerijssen
-
Date:
20041110
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041110: M. Lauwerijssen
- Initial version -

-Definition in file runfft.hcc.


Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/runfft_8hcc__incl.map b/Graphic_Equalizer/doc/html/runfft_8hcc__incl.map deleted file mode 100644 index d372980..0000000 --- a/Graphic_Equalizer/doc/html/runfft_8hcc__incl.map +++ /dev/null @@ -1,2 +0,0 @@ -base referer -rect $configuration_8hch.html 245,7 370,34 diff --git a/Graphic_Equalizer/doc/html/runfft_8hcc__incl.md5 b/Graphic_Equalizer/doc/html/runfft_8hcc__incl.md5 deleted file mode 100644 index ff1d843..0000000 --- a/Graphic_Equalizer/doc/html/runfft_8hcc__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -7129277ffd9cca9295345528e3048acb \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/runfft_8hcc__incl.png b/Graphic_Equalizer/doc/html/runfft_8hcc__incl.png deleted file mode 100644 index 3a3f863..0000000 Binary files a/Graphic_Equalizer/doc/html/runfft_8hcc__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/runfft_8hch-source.html b/Graphic_Equalizer/doc/html/runfft_8hch-source.html deleted file mode 100644 index 2e52e1b..0000000 --- a/Graphic_Equalizer/doc/html/runfft_8hch-source.html +++ /dev/null @@ -1,15 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/runfft.hch Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

runfft.hch

Go to the documentation of this file.
00001 extern macro proc RunFFT (AudioIn, AudioOut);
-

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/runfft_8hch.html b/Graphic_Equalizer/doc/html/runfft_8hch.html deleted file mode 100644 index c33f46c..0000000 --- a/Graphic_Equalizer/doc/html/runfft_8hch.html +++ /dev/null @@ -1,66 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/runfft.hch File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

runfft.hch File Reference

-

-This graph shows which files directly or indirectly include this file:

Included by dependency graph
- - - - -

-Go to the source code of this file. - - - - -

Functions

macro proc RunFFT (AudioIn, AudioOut)
-


Function Documentation

-

- - - - -
- - - - - - - - - - - - - - - - - - -
macro proc RunFFT AudioIn ,
AudioOut 
-
- - - - - -
-   - - -

-

-


Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/runfft_8hch__dep__incl.map b/Graphic_Equalizer/doc/html/runfft_8hch__dep__incl.map deleted file mode 100644 index cf253aa..0000000 --- a/Graphic_Equalizer/doc/html/runfft_8hch__dep__incl.map +++ /dev/null @@ -1,2 +0,0 @@ -base referer -rect $main_8hcc.html 9,7 83,34 diff --git a/Graphic_Equalizer/doc/html/runfft_8hch__dep__incl.md5 b/Graphic_Equalizer/doc/html/runfft_8hch__dep__incl.md5 deleted file mode 100644 index 49eeeaa..0000000 --- a/Graphic_Equalizer/doc/html/runfft_8hch__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -209ac5ed7914b67b6e24a36a5cd34862 \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/runfft_8hch__dep__incl.png b/Graphic_Equalizer/doc/html/runfft_8hch__dep__incl.png deleted file mode 100644 index 9d7198c..0000000 Binary files a/Graphic_Equalizer/doc/html/runfft_8hch__dep__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/sample_8hcc-source.html b/Graphic_Equalizer/doc/html/sample_8hcc-source.html deleted file mode 100644 index f7ee92e..0000000 --- a/Graphic_Equalizer/doc/html/sample_8hcc-source.html +++ /dev/null @@ -1,78 +0,0 @@ - - -Graphic Equalizer: C:/Project Marcel & Oliver/Graphic_Equalizer/src/sample.hcc Source File - - - -
Main Page | File List | Globals
- -

sample.hcc

Go to the documentation of this file.
00001 
-00019 /******** System Includes *************/
-00020 
-00021 /******** Application Includes ********/
-00022 #include "sample.hch"
-00023 
-00024 
-00025 
-00026 /*
-00027  * Pointer that points towards the current 64 bits samples.
-00028  */
-00029 signed 16 *audio_in_ptr;
-00030 
-00031 /*
-00032  * 64 step counter to keep track of our samples. This is a private variable.
-00033  */
-00034 unsigned 8 sample_count;
-00035 
-00036 
-00037 
-00046 void sample_add(signed 16 in_sample) {
-00047         /*
-00048          * We only sample 64 bits in our buffer, hence we circulate around the
-00049          * last 6 bits.
-00050          */
-00051         audio_in_ptr[sample_count <-6] = in_sample;
-00052         sample_count++;
-00053 } /* --- sample_add() --- */
-00054 
-00055 
-00056 
-00065 void sample_get(signed 16 *out_sample) {
-00066         /*
-00067          * We circulate around a 64 bits buffer, therefor we only use the last
-00068          *  6 bits.
-00069          */
-00070         *out_sample = audio_out_ptr[sample_count <-6];
-00071 } /* --- sample_get() --- */
-00072 
-00073 
-00074 
-00084 unsigned 1 sample_rotate_buffers(void) {
-00085         unsigned 1 retval;      /* store for returnvalue */
-00086 
-00087         retval = 0;
-00088         /*
-00089          * We only want to read 64 samples, but calculations work nicer if we
-00090          * use 256 samples. Therefor we circulate our audio pointer around.
-00091          */
-00092         if (!(sample_count <- 6)) {
-00093                 /*
-00094                  * 64 Samples have passed. We are back at '0'. Use the full
-00095                  * sample count as index which is 0 64 128 or 192 and back to
-00096                  * 0. Our Output is only 128 big so we only look at the
-00097                  * 7 LSB. Also, notify the main application that 64 samples
-00098                  * have been processed.
-00099                  */
-00100                 par {
-00101                         audio_in_ptr = &pcm_audio_in[sample_count];
-00102                         audio_out_ptr = &pcm_audio_out[(sample_count <- 7)];
-00103                         retval = 1;
-00104                 }
-00105         }
-00106 } /* --- sample_rotate_buffers() --- */
-

Generated on Mon Nov 29 10:53:29 2004 for Graphic Equalizer by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/sample_8hcc.html b/Graphic_Equalizer/doc/html/sample_8hcc.html deleted file mode 100644 index bbe85aa..0000000 --- a/Graphic_Equalizer/doc/html/sample_8hcc.html +++ /dev/null @@ -1,182 +0,0 @@ - - -Graphic Equalizer: C:/Project Marcel & Oliver/Graphic_Equalizer/src/sample.hcc File Reference - - - -
Main Page | File List | Globals
- -

sample.hcc File Reference

#include "sample.hch"
- -

-Include dependency graph for sample.hcc:

Include dependency graph
- - - - -

-Go to the source code of this file. - - - - - - - - - - - -

Functions

void sample_add (signed 16 in_sample)
 This procedure adds the supplied sample to the input buffer.
void sample_get (signed 16 *out_sample)
 This procedure gets the sample from the current output buffer.
unsigned sample_rotate_buffers (void)
 This procedure rotates our buffers around if 64 samples are read into our current buffer.
-


Detailed Description

-

-Audiodriver API

-

-Project information.

-Project Graphic Equalizer
-
Author:
O.M. Schinagl
-
Date:
20041021
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041021: O.M. Schinagl
- Initial version -

-Definition in file sample.hcc.


Function Documentation

-

- - - - -
- - - - - - - - - -
void sample_add signed 16  in_sample  ) 
-
- - - - - -
-   - - -

-This procedure adds the supplied sample to the input buffer. -

-

Parameters:
- - -
signed 16 in_sample 16 bits signed sample to be added.
-
-
Returns:
void
-
Return values:
- - -
void 
-
- -

-Definition at line 46 of file sample.hcc.

-

- - - - -
- - - - - - - - - -
void sample_get signed 16 *  out_sample  ) 
-
- - - - - -
-   - - -

-This procedure gets the sample from the current output buffer. -

-

Parameters:
- - -
* in_sample pointer to storage for sample.
-
-
Returns:
void
-
Return values:
- - -
void 
-
- -

-Definition at line 65 of file sample.hcc.

-

- - - - -
- - - - - - - - - -
unsigned sample_rotate_buffers void   ) 
-
- - - - - -
-   - - -

-This procedure rotates our buffers around if 64 samples are read into our current buffer. -

-

Parameters:
- - -
in_sample 16 bits signed sample to be added.
-
-
Returns:
1 when 64 samples have passed, 0 otherwise.
-
Return values:
- - -
unsigned 1;
-
- -

-Definition at line 84 of file sample.hcc.

-


Generated on Mon Nov 29 10:53:30 2004 for Graphic Equalizer by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/sample_8hcc__incl.map b/Graphic_Equalizer/doc/html/sample_8hcc__incl.map deleted file mode 100644 index 3cc520a..0000000 --- a/Graphic_Equalizer/doc/html/sample_8hcc__incl.map +++ /dev/null @@ -1,2 +0,0 @@ -base referer -rect $sample_8hch.html 8,7 98,34 diff --git a/Graphic_Equalizer/doc/html/sample_8hcc__incl.md5 b/Graphic_Equalizer/doc/html/sample_8hcc__incl.md5 deleted file mode 100644 index 7c12b7e..0000000 --- a/Graphic_Equalizer/doc/html/sample_8hcc__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -1fc36cd8ce3c69063c04bf4a24a0e84e \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/sample_8hcc__incl.png b/Graphic_Equalizer/doc/html/sample_8hcc__incl.png deleted file mode 100644 index 55cd496..0000000 Binary files a/Graphic_Equalizer/doc/html/sample_8hcc__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/sample_8hch-source.html b/Graphic_Equalizer/doc/html/sample_8hch-source.html deleted file mode 100644 index 5789f08..0000000 --- a/Graphic_Equalizer/doc/html/sample_8hch-source.html +++ /dev/null @@ -1,37 +0,0 @@ - - -Graphic Equalizer: C:/Project Marcel & Oliver/Graphic_Equalizer/include/sample.hch Source File - - - -
Main Page | File List | Globals
- -

sample.hch

Go to the documentation of this file.
00001 
-00019 #ifndef _SAMPLE_HCH
-00020 #define _SAMPLE_HCH 1
-00021 
-00022 
-00023 
-00024 /*
-00025  * This procedure adds the supplied sample to the input buffer.
-00026  */
-00027 void sample_add(in_sample);
-00028 
-00029 
-00030 
-00031 /*
-00032  * This procedure rotates our buffers around if 64 samples are read into our
-00033  * current buffer. It returns 1 when 64 samples have passed, 0 otherwise.
-00034  */
-00035 unsigned 1 sample_rotate_buffers(void);
-00036 
-00037 #else
-00038 #error "ERROR file sample.hch multiple times included"
-00039 #endif /* --- _SAMPLE_HCH --- */
-00040 
-

Generated on Mon Nov 29 10:53:29 2004 for Graphic Equalizer by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/sample_8hch.html b/Graphic_Equalizer/doc/html/sample_8hch.html deleted file mode 100644 index 8c96e57..0000000 --- a/Graphic_Equalizer/doc/html/sample_8hch.html +++ /dev/null @@ -1,89 +0,0 @@ - - -Graphic Equalizer: C:/Project Marcel & Oliver/Graphic_Equalizer/include/sample.hch File Reference - - - -
Main Page | File List | Globals
- -

sample.hch File Reference

-

-This graph shows which files directly or indirectly include this file:

Included by dependency graph
- - - - -

-Go to the source code of this file. - - - - - -

Functions

unsigned sample_rotate_buffers (void)
 This procedure rotates our buffers around if 64 samples are read into our current buffer.
-


Detailed Description

-

-Audiodriver API

-

-Project information.

-Project Graphic Equalizer
-
Author:
O.M. Schinagl
-
Date:
20041011
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041011: O.M. Schinagl
- Initial version -

-Definition in file sample.hch.


Function Documentation

-

- - - - -
- - - - - - - - - -
unsigned sample_rotate_buffers void   ) 
-
- - - - - -
-   - - -

-This procedure rotates our buffers around if 64 samples are read into our current buffer. -

-

Parameters:
- - -
in_sample 16 bits signed sample to be added.
-
-
Returns:
1 when 64 samples have passed, 0 otherwise.
-
Return values:
- - -
unsigned 1;
-
- -

-Definition at line 84 of file sample.hcc.

-


Generated on Mon Nov 29 10:53:30 2004 for Graphic Equalizer by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/sample_8hch__dep__incl.map b/Graphic_Equalizer/doc/html/sample_8hch__dep__incl.map deleted file mode 100644 index 6282c3e..0000000 --- a/Graphic_Equalizer/doc/html/sample_8hch__dep__incl.map +++ /dev/null @@ -1,2 +0,0 @@ -base referer -rect $sample_8hcc.html 8,7 98,34 diff --git a/Graphic_Equalizer/doc/html/sample_8hch__dep__incl.md5 b/Graphic_Equalizer/doc/html/sample_8hch__dep__incl.md5 deleted file mode 100644 index 2f59778..0000000 --- a/Graphic_Equalizer/doc/html/sample_8hch__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -9b1a683b9bef5e200828acd3ea8684fb \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/sample_8hch__dep__incl.png b/Graphic_Equalizer/doc/html/sample_8hch__dep__incl.png deleted file mode 100644 index edc203a..0000000 Binary files a/Graphic_Equalizer/doc/html/sample_8hch__dep__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/smartmedia_8hcc-source.html b/Graphic_Equalizer/doc/html/smartmedia_8hcc-source.html deleted file mode 100644 index f291834..0000000 --- a/Graphic_Equalizer/doc/html/smartmedia_8hcc-source.html +++ /dev/null @@ -1,215 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/smartmedia.hcc Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

smartmedia.hcc

Go to the documentation of this file.
00001 
-00019 /******** System Includes *************/
-00020 #include <stdlib.hch>
-00021 
-00022 #include "pal_master.hch"
-00023 
-00024 /******** Application Includes ********/
-00025 #include "configuration.hch"
-00026 #include "display_shared.hch"
-00027 #include "smartmedia_shared.hch"
-00028 #include "smartmedia.hch"
-00029 
-00030 #if HAVE_DEBUG
-00031         #include "debug.hch"
-00032 #endif
-00033 
-00034 #include "audio.hch"
-00035 #include "mouse_shared.hch"
-00036 #include "eventhandler_shared.hch"
-00037 #include "display.hch" /* FIXME: temporary include, needs to be moved to 'init' */
-00038 
-00046 unsigned 1 smartmedia_init(void) {
-00047         unsigned 1 retval;
-00048         /*
-00049          * Firstly we enable both the CPLD and the SmartMedia.
-00050          */
-00051         RC200CPLDEnable();
-00052         RC200SmartMediaInit(&retval);
-00053 
-00054         if (retval) {
-00055                 RC200SmartMediaReset(&retval);
-00056                 RC200SmartMediaInit(&retval);
-00057         }
-00058         
-00059         return retval;  
-00060 } /* --- smartmedia_init() --- */
-00061 
-00062 
-00063 
-00072 void smartmedia_loaddata(skindata_t *skindata) {
-00073         /*
-00074          * Setup RAM Handle, and determin maximum Data and Address widths
-00075          */
-00076         macro expr RAM_BANK0 = PalPL2RAMCT(0);
-00077         macro expr DW = PalPL2RAMGetMaxDataWidthCT();
-00078         macro expr AW = PalPL2RAMGetMaxAddressWidthCT();
-00079 
-00080         unsigned DW data;
-00081         unsigned 27 smartmedia_address, smartmedia_address_mask;
-00082         unsigned AW address;
-00083         unsigned 8 mask, r, g, b;
-00084         unsigned 3 stage;
-00085         unsigned 1 result;
-00086 
-00087         extern ram unsigned 8 presets_default_values[768];
-00088 
-00089 #if HAVE_DEBUG
-00090         /*
-00091          * Print some nice stats about data loading.
-00092          */
-00093         print_eol();
-00094         print_hex_value(0);
-00095 #endif
-00096         /*
-00097          * Before we enter our loop to fill our memory with valid data, we have
-00098          * to set the startup positions for the SmartMedia.
-00099          */
-00100         smartmedia_address = SMARTMEDIA_ADDRESS_SKIN_START;
-00101         smartmedia_address_mask = SMARTMEDIA_ADDRESS_SKINMASK_START;
-00102         stage = STAGE_LOAD_SKIN;
-00103         /*
-00104          * We start with the address of the skin, and do the loop until we have
-00105          * done the end of the help.
-00106          */
-00107         for (address = ADDRESS_SKIN_START; address != (ADDRESS_PRESET_RESET_END +1); address++) {
-00108                 /*
-00109                  * Once we are done with the loading of our skin, we need to
-00110                  * change the smartmedia start addresses.
-00111                  */
-00112                 switch (address) {
-00113                         case ADDRESS_HELP_START:
-00114                                 smartmedia_address = SMARTMEDIA_ADDRESS_HELP_START;
-00115                                 smartmedia_address_mask = SMARTMEDIA_ADDRESS_HELPMASK_START;
-00116                                 stage = STAGE_LOAD_HELP;
-00117                                 break;
-00118                         case ADDRESS_GRAPHMASK_START:
-00119                                 smartmedia_address_mask = SMARTMEDIA_ADDRESS_GRAPHMASK_START;
-00120                                 stage = STAGE_LOAD_GRAPH;
-00121                                 break;
-00122                         case ADDRESS_PRESET_DEMO_START:
-00123                                 smartmedia_address_mask = SMARTMEDIA_ADDRESS_PRESET_DEMO_START;
-00124                                 stage = STAGE_LOAD_PRESET;
-00125                                 break;
-00126                         case ADDRESS_PRESET_RESET_START:
-00127                                 smartmedia_address_mask = SMARTMEDIA_ADDRESS_PRESET_RESET_START;
-00128                                 stage = STAGE_LOAD_PRESET;
-00129                                 break;
-00130                         default:
-00131                                 break;
-00132                 }
-00133 
-00134                 /*
-00135                  * Before reading our data from the smartmedia we set our
-00136                  * address pointer to the address from our loop.
-00137                  */
-00138 #if HAVE_SMARTMEDIA
-00139                 PalPL2RAMSetWriteAddress(RAM_BANK0, address);
-00140 #else
-00141                 PalPL2RAMSetWriteAddress(RAM_BANK0, 0);
-00142 #endif
-00143 
-00144                 /*
-00145                  * SmartMedia data is read one byte per call. Because we want
-00146                  * to store the mask + the rgb values in one variable for later
-00147                  * useage we need to read those 4 bytes from the smartmedia
-00148                  * before storing it as one.
-00149                  */
-00150 #if HAVE_SMARTMEDIA
-00151                 /*
-00152                  * FIXME: Due to a bug in the DK2 smartmedia libraries we need
-00153                  * stop reading after each byte with OperationEnd call. This is
-00154                  * VERY slow and must be changed.
-00155                  */
-00156                 if ((STAGE_LOAD_SKIN == stage) || (STAGE_LOAD_HELP == stage)) {
-00157                         RC200SmartMediaSetAddress(READ, smartmedia_address);
-00158                         RC200SmartMediaRead(&r, TRUE);
-00159                         RC200SmartMediaOperationEnd(&result);
-00160                         RC200SmartMediaSetAddress(READ, (smartmedia_address +1));
-00161                         RC200SmartMediaRead(&g, TRUE);
-00162                         RC200SmartMediaOperationEnd(&result);
-00163                         RC200SmartMediaSetAddress(READ, (smartmedia_address +2));
-00164                         RC200SmartMediaRead(&b, TRUE);
-00165                         RC200SmartMediaOperationEnd(&result);
-00166                 }
-00167                 RC200SmartMediaSetAddress(READ, smartmedia_address_mask);
-00168                 RC200SmartMediaRead(&mask, TRUE);
-00169                 RC200SmartMediaOperationEnd(&result);
-00170 
-00171                 switch (stage) {
-00172                         case STAGE_LOAD_SKIN:
-00173                                 data = 0 @ mask @ r @ g @ b;
-00174                                 break;
-00175                         case STAGE_LOAD_HELP:
-00176                                 data = 0 @ mask @ r @ g @ b;
-00177                                 break;
-00178                         case STAGE_LOAD_GRAPH:
-00179                                 data = (unsigned DW)(0 @ mask) << 24;
-00180                                 break;
-00181                         case STAGE_LOAD_PRESET:
-00182                                 presets_default_values[(address -ADDRESS_PRESET_DEMO_START) <- 10] = mask;
-00183                 }
-00184                 
-00185 #else
-00186                 data = 0x0000ff00;
-00187 #endif
-00188                 /*
-00189                  * Now that we have gathered all pixel data, store it in ram.
-00190                  */
-00191                 PalPL2RAMWrite(RAM_BANK0, data);
-00192 
-00193 #if HAVE_DEBUG
-00194                 /*
-00195                  * Print some nice stats about data loading.
-00196                  */
-00197                 if (!(address <- 10)) {
-00198                         print_cr();
-00199                         print_hex_value(0 @ (address \\ 11));
-00200                         print_string(" / 000001C2 | data: ");
-00201                         print_hex_value(data <- 32);
-00202                 }
-00203 #endif
-00204 
-00205                 /*
-00206                  * Finally increase al our indexes approperiatly.
-00207                  */
-00208                 smartmedia_address += 3;
-00209                 smartmedia_address_mask++;
-00210         }
-00211 
-00212         /*
-00213          * This block needs to probably move up into the fore loop where we
-00214          * calculate these settings later.
-00215          */
-00216         skindata->area_spectrum_top = 200;
-00217         skindata->area_spectrum_bottom = 335;
-00218         skindata->area_spectrum_left = 77;
-00219         skindata->area_spectrum_right = 575;
-00220         skindata->area_waveform_top = 46;
-00221         skindata->area_waveform_bottom = 118;
-00222         skindata->area_waveform_left = 76;
-00223         skindata->area_waveform_right = 413;
-00224         skindata->area_volume_top = 112;
-00225         skindata->area_volume_bottom = 66;
-00226         skindata->area_volume_left = 439;
-00227         skindata->area_volume_right = 455;
-00228         skindata->color_area_volume = PIXEL_VOLUME;
-00229         skindata->color_area_waveform = PIXEL_WAVEFORM;
-00230 //      skindata->color_area_spectrum_top = PIXEL_SPECTRUM;
-00231 //      skindata->color_area_spectrum_bottom = PIXEL_SPECTRUM;
-00232         skindata->color_equalizer = PIXEL_EQUALIZER;
-00233 } /* --- smartmedia_loaddata() --- */
-

Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/smartmedia_8hcc.html b/Graphic_Equalizer/doc/html/smartmedia_8hcc.html deleted file mode 100644 index bd026c4..0000000 --- a/Graphic_Equalizer/doc/html/smartmedia_8hcc.html +++ /dev/null @@ -1,153 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/smartmedia.hcc File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

smartmedia.hcc File Reference

#include <stdlib.hch>
-#include "pal_master.hch"
-#include "configuration.hch"
-#include "display_shared.hch"
-#include "smartmedia_shared.hch"
-#include "smartmedia.hch"
-#include "audio.hch"
-#include "mouse_shared.hch"
-#include "eventhandler_shared.hch"
-#include "display.hch"
- -

-Include dependency graph for smartmedia.hcc:

Include dependency graph
- - - - - - - - - - - -

-Go to the source code of this file. - - - - - - - - -

Functions

unsigned smartmedia_init (void)
 We here initialize the Smart Media card and verify wether the card is inserted and such.
void smartmedia_loaddata (skindata_t *skindata)
 We load our memory with skin and help data from the smartmedia.
-


Detailed Description

-

-Graphic Equalizer API

-

-Project information.

-Project Graphic Equalizer
-
Author:
O.M. Schinagl
-
Date:
20041110
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041110: O.M. Schinagl
- Initial version -

-Definition in file smartmedia.hcc.


Function Documentation

-

- - - - -
- - - - - - - - - -
unsigned smartmedia_init void   ) 
-
- - - - - -
-   - - -

-We here initialize the Smart Media card and verify wether the card is inserted and such. -

-

Returns:
We return 0 on success, 1 on error.
-
Return values:
- - -
unsigned 1
-
- -

-Definition at line 46 of file smartmedia.hcc. -

-Referenced by main().

-

- - - - -
- - - - - - - - - -
void smartmedia_loaddata skindata_t skindata  ) 
-
- - - - - -
-   - - -

-We load our memory with skin and help data from the smartmedia. -

-

Parameters:
- - -
*skindata skindata like boundries and colors of elements.
-
-
Returns:
void
-
Return values:
- - -
void 
-
- -

-Definition at line 72 of file smartmedia.hcc. -

-References ADDRESS_GRAPHMASK_START, ADDRESS_HELP_START, ADDRESS_PRESET_DEMO_START, ADDRESS_PRESET_RESET_END, ADDRESS_PRESET_RESET_START, presets_default_values, READ, STAGE_LOAD_GRAPH, STAGE_LOAD_HELP, STAGE_LOAD_PRESET, and STAGE_LOAD_SKIN. -

-Referenced by main().

-


Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/smartmedia_8hcc__incl.map b/Graphic_Equalizer/doc/html/smartmedia_8hcc__incl.map deleted file mode 100644 index f1c196f..0000000 --- a/Graphic_Equalizer/doc/html/smartmedia_8hcc__incl.map +++ /dev/null @@ -1,9 +0,0 @@ -base referer -rect $configuration_8hch.html 245,7 370,34 -rect $display__shared_8hch.html 394,7 530,34 -rect $smartmedia__shared_8hch.html 554,7 720,34 -rect $smartmedia_8hch.html 744,7 861,34 -rect $audio_8hch.html 885,7 965,34 -rect $mouse__shared_8hch.html 989,7 1125,34 -rect $eventhandler__shared_8hch.html 1149,7 1322,34 -rect $display_8hch.html 1346,7 1434,34 diff --git a/Graphic_Equalizer/doc/html/smartmedia_8hcc__incl.md5 b/Graphic_Equalizer/doc/html/smartmedia_8hcc__incl.md5 deleted file mode 100644 index 4d36ea5..0000000 --- a/Graphic_Equalizer/doc/html/smartmedia_8hcc__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -86c9bdde69fa949899315e166183a539 \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/smartmedia_8hcc__incl.png b/Graphic_Equalizer/doc/html/smartmedia_8hcc__incl.png deleted file mode 100644 index a0e23b0..0000000 Binary files a/Graphic_Equalizer/doc/html/smartmedia_8hcc__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/smartmedia_8hch-source.html b/Graphic_Equalizer/doc/html/smartmedia_8hch-source.html deleted file mode 100644 index 112cdc0..0000000 --- a/Graphic_Equalizer/doc/html/smartmedia_8hch-source.html +++ /dev/null @@ -1,65 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/smartmedia.hch Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

smartmedia.hch

Go to the documentation of this file.
00001 
-00019 #ifndef _SMARTMEDIA_HCH
-00020 #define _SMARTMEDIA_HCH 1
-00021 
-00022 
-00023 
-00024 /*
-00025  * SmartMedia functioncalls a bit to be set to either Read or Write. This
-00026  * define should make life easier identifying which one is what.
-00027  */
-00028 #define READ 0
-00029 #define WRITE 1
-00030 
-00031 
-00032 
-00033 /*
-00034  * The different stages the smart media loaders knows.
-00035  */
-00036 #define STAGE_LOAD_SKIN         0x00
-00037 #define STAGE_LOAD_HELP         0x01
-00038 #define STAGE_LOAD_GRAPH        0x02
-00039 #define STAGE_LOAD_PRESET       0x03
-00040 
-00041 
-00042 
-00043 /*
-00044  * Create a define to keep API generic
-00045  * FIXME: replace with PAL calls when avaiable.
-00046  */
-00047 #define CPLDRun(ClockRate) RC200CPLDRun(ClockRate)
-00048 #define SmartMediaRun(ClockRate) RC200SmartMediaRun(ClockRate)
-00049 
-00050 
-00051 
-00052 /*
-00053  * Initializes the smartmedia device.
-00054  */
-00055 
-00056 unsigned 1 smartmedia_init(void);
-00057 
-00058 
-00059 
-00060 /*
-00061  * This function loads the memory with data from the smartmedia card.
-00062  */
-00063 void smartmedia_loaddata(skindata_t *skindata);
-00064 
-00065 #else
-00066 #error "ERROR file smartmedia.hch multiple times included"
-00067 #endif /* --- _SMARTMEDIA_HCH --- */
-00068 
-

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/smartmedia_8hch.html b/Graphic_Equalizer/doc/html/smartmedia_8hch.html deleted file mode 100644 index 3521eac..0000000 --- a/Graphic_Equalizer/doc/html/smartmedia_8hch.html +++ /dev/null @@ -1,406 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/smartmedia.hch File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

smartmedia.hch File Reference

-

-This graph shows which files directly or indirectly include this file:

Included by dependency graph
- - - - - -

-Go to the source code of this file. - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Defines

#define _SMARTMEDIA_HCH   1
#define READ   0
#define WRITE   1
#define STAGE_LOAD_SKIN   0x00
#define STAGE_LOAD_HELP   0x01
#define STAGE_LOAD_GRAPH   0x02
#define STAGE_LOAD_PRESET   0x03
#define CPLDRun(ClockRate)   RC200CPLDRun(ClockRate)
#define SmartMediaRun(ClockRate)   RC200SmartMediaRun(ClockRate)

Functions

unsigned smartmedia_init (void)
 We here initialize the Smart Media card and verify wether the card is inserted and such.
void smartmedia_loaddata (skindata_t *skindata)
 We load our memory with skin and help data from the smartmedia.
-


Detailed Description

-

-Graphic Equalizer API

-

-Project information.

-Project Graphic Equalizer
-
Author:
O.M. Schinagl
-
Date:
20041110
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041110: O.M. Schinagl
- Initial version -

-Definition in file smartmedia.hch.


Define Documentation

-

- - - - -
- - - - -
#define _SMARTMEDIA_HCH   1
-
- - - - - -
-   - - -

- -

-Definition at line 20 of file smartmedia.hch.

-

- - - - -
- - - - -
#define READ   0
-
- - - - - -
-   - - -

- -

-Definition at line 28 of file smartmedia.hch. -

-Referenced by smartmedia_loaddata().

-

- - - - -
- - - - -
#define WRITE   1
-
- - - - - -
-   - - -

- -

-Definition at line 29 of file smartmedia.hch.

-

- - - - -
- - - - -
#define STAGE_LOAD_SKIN   0x00
-
- - - - - -
-   - - -

- -

-Definition at line 36 of file smartmedia.hch. -

-Referenced by smartmedia_loaddata().

-

- - - - -
- - - - -
#define STAGE_LOAD_HELP   0x01
-
- - - - - -
-   - - -

- -

-Definition at line 37 of file smartmedia.hch. -

-Referenced by smartmedia_loaddata().

-

- - - - -
- - - - -
#define STAGE_LOAD_GRAPH   0x02
-
- - - - - -
-   - - -

- -

-Definition at line 38 of file smartmedia.hch. -

-Referenced by smartmedia_loaddata().

-

- - - - -
- - - - -
#define STAGE_LOAD_PRESET   0x03
-
- - - - - -
-   - - -

- -

-Definition at line 39 of file smartmedia.hch. -

-Referenced by smartmedia_loaddata().

-

- - - - -
- - - - - - - - - -
#define CPLDRun ClockRate   )    RC200CPLDRun(ClockRate)
-
- - - - - -
-   - - -

- -

-Definition at line 47 of file smartmedia.hch. -

-Referenced by main().

-

- - - - -
- - - - - - - - - -
#define SmartMediaRun ClockRate   )    RC200SmartMediaRun(ClockRate)
-
- - - - - -
-   - - -

- -

-Definition at line 48 of file smartmedia.hch. -

-Referenced by main().

-


Function Documentation

-

- - - - -
- - - - - - - - - -
unsigned smartmedia_init void   ) 
-
- - - - - -
-   - - -

-We here initialize the Smart Media card and verify wether the card is inserted and such. -

-

Returns:
We return 0 on success, 1 on error.
-
Return values:
- - -
unsigned 1
-
- -

-Definition at line 46 of file smartmedia.hcc. -

-Referenced by main().

-

- - - - -
- - - - - - - - - -
void smartmedia_loaddata skindata_t skindata  ) 
-
- - - - - -
-   - - -

-We load our memory with skin and help data from the smartmedia. -

-

Parameters:
- - -
*skindata skindata like boundries and colors of elements.
-
-
Returns:
void
-
Return values:
- - -
void 
-
- -

-Definition at line 72 of file smartmedia.hcc. -

-References ADDRESS_GRAPHMASK_START, ADDRESS_HELP_START, ADDRESS_PRESET_DEMO_START, ADDRESS_PRESET_RESET_END, ADDRESS_PRESET_RESET_START, presets_default_values, READ, STAGE_LOAD_GRAPH, STAGE_LOAD_HELP, STAGE_LOAD_PRESET, and STAGE_LOAD_SKIN. -

-Referenced by main().

-


Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/smartmedia_8hch__dep__incl.map b/Graphic_Equalizer/doc/html/smartmedia_8hch__dep__incl.map deleted file mode 100644 index 46f0913..0000000 --- a/Graphic_Equalizer/doc/html/smartmedia_8hch__dep__incl.map +++ /dev/null @@ -1,3 +0,0 @@ -base referer -rect $main_8hcc.html 8,7 82,34 -rect $smartmedia_8hcc.html 106,7 224,34 diff --git a/Graphic_Equalizer/doc/html/smartmedia_8hch__dep__incl.md5 b/Graphic_Equalizer/doc/html/smartmedia_8hch__dep__incl.md5 deleted file mode 100644 index 0f51fe8..0000000 --- a/Graphic_Equalizer/doc/html/smartmedia_8hch__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -a6514b61ed04d96f1fee892121b51cd5 \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/smartmedia_8hch__dep__incl.png b/Graphic_Equalizer/doc/html/smartmedia_8hch__dep__incl.png deleted file mode 100644 index dc6420a..0000000 Binary files a/Graphic_Equalizer/doc/html/smartmedia_8hch__dep__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/smartmedia__shared_8hch-source.html b/Graphic_Equalizer/doc/html/smartmedia__shared_8hch-source.html deleted file mode 100644 index f21af8d..0000000 --- a/Graphic_Equalizer/doc/html/smartmedia__shared_8hch-source.html +++ /dev/null @@ -1,77 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/smartmedia_shared.hch Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

smartmedia_shared.hch

Go to the documentation of this file.
00001 
-00019 #ifndef _SMARTMEDIA_SHARED_HCH
-00020 #define _SMARTMEDIA_SHARED_HCH 1
-00021 
-00022 
-00023 
-00024 /*
-00025  * Here we set the various sizes of the data in use. Do not round this values
-00026  * in anyway! For example, 640 pixels times 480 pixels is 307200 (4b000) pixels
-00027  * total.
-00028  */
-00029 #define SIZE_SKIN       0x04afff
-00030 #define SIZE_HELP       0x04afff
-00031 #define SIZE_GRAPH      0x04afff
-00032 #define SIZE_SKINMASK   0x018fff
-00033 #define SIZE_HELPMASK   0x018fff
-00034 #define SIZE_GRAPHMASK  0x018fff
-00035 
-00036 #define SIZE_PRESET     0x0001c0
-00037 
-00038 /*
-00039  * Here we setup the start and end address for the various components.
-00040  */
-00041 
-00042 #define SMARTMEDIA_ADDRESS_SKIN_START           0x084000 /* Block:  33 */
-00043 #define SMARTMEDIA_ADDRESS_SKINMASK_START       0x168000 /* Block:  90 */
-00044 #define SMARTMEDIA_ADDRESS_HELP_START           0x1b4000 /* Block: 109 */
-00045 #define SMARTMEDIA_ADDRESS_HELPMASK_START       0x298000 /* Block: 166 */
-00046 #define SMARTMEDIA_ADDRESS_GRAPHMASK_START      0x2e4000 /* Block: 185 */
-00047 
-00048 #define SMARTMEDIA_ADDRESS_PRESET_DEMO_START    0x330000 /* Block: 204 */
-00049 #define SMARTMEDIA_ADDRESS_PRESET_RESET_START   0x334000 /* Block: 205 */
-00050 
-00051 #define SMARTMEDIA_ADDRESS_SKIN_END             (SMARTMEDIA_ADDRESS_SKIN_START +(SIZE_SKIN *3))
-00052 #define SMARTMEDIA_ADDRESS_SKINMASK_END         (SMARTMEDIA_ADDRESS_SKINMASK_START +(SIZE_SKINMASK *3))
-00053 #define SMARTMEDIA_ADDRESS_HELP_END             (SMARTMEDIA_ADDRESS_HELP_START +(SIZE_HELP *3))
-00054 #define SMARTMEDIA_ADDRESS_HELPMASK_END         (SMARTMEDIA_ADDRESS_HELPMASK_START +(SIZE_HELPMASK *3))
-00055 #define SMARTMEDIA_ADDRESS_GRAPHMASK_END        (SMARTMEDIA_ADDRESS_GRAPHMASK_START +(SIZE_GRAPHMASK *3))
-00056 
-00057 #define SMARTMEDIA_ADDRESS_PRESET_DEMO_END      (SMARTMEDIA_ADDRESS_PRESET_DEMO_START +(SIZE_PRESET))
-00058 #define SMARTMEDIA_ADDRESS_PRESET_RESET_END     (SMARTMEDIA_ADDRESS_PRESET_RESET_START +(SIZE_PRESET))
-00059 
-00060 #define ADDRESS_SKIN_START              0x000000
-00061 #define ADDRESS_SKIN_END                (ADDRESS_SKIN_START +SIZE_SKIN)
-00062 
-00063 #define ADDRESS_HELP_START              0x04b000
-00064 #define ADDRESS_HELP_END                (ADDRESS_HELP_START +SIZE_HELP)
-00065 
-00066 #define ADDRESS_GRAPHMASK_START         0x096000
-00067 #define ADDRESS_GRAPHMASK_END           (ADDRESS_GRAPHMASK_START +SIZE_GRAPH)
-00068 
-00069 #define ADDRESS_PRESET_DEMO_START       0x0e1000
-00070 #define ADDRESS_PRESET_DEMO_END         (ADDRESS_PRESET_DEMO_START +SIZE_PRESET)
-00071 
-00072 #define ADDRESS_PRESET_RESET_START      0x0e11c0
-00073 #define ADDRESS_PRESET_RESET_END        (ADDRESS_PRESET_RESET_START +SIZE_PRESET)
-00074 
-00075 
-00076 
-00077 #else
-00078 #error "ERROR file smartmedia_shared.hch multiple times included"
-00079 #endif /* --- _SMARTMEDIA_SHARED_HCH --- */
-00080 
-

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/smartmedia__shared_8hch.html b/Graphic_Equalizer/doc/html/smartmedia__shared_8hch.html deleted file mode 100644 index 6226246..0000000 --- a/Graphic_Equalizer/doc/html/smartmedia__shared_8hch.html +++ /dev/null @@ -1,920 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/smartmedia_shared.hch File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

smartmedia_shared.hch File Reference

-

-This graph shows which files directly or indirectly include this file:

Included by dependency graph
- - - - - -

-Go to the source code of this file. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Defines

#define _SMARTMEDIA_SHARED_HCH   1
#define SIZE_SKIN   0x04afff
#define SIZE_HELP   0x04afff
#define SIZE_GRAPH   0x04afff
#define SIZE_SKINMASK   0x018fff
#define SIZE_HELPMASK   0x018fff
#define SIZE_GRAPHMASK   0x018fff
#define SIZE_PRESET   0x0001c0
#define SMARTMEDIA_ADDRESS_SKIN_START   0x084000
#define SMARTMEDIA_ADDRESS_SKINMASK_START   0x168000
#define SMARTMEDIA_ADDRESS_HELP_START   0x1b4000
#define SMARTMEDIA_ADDRESS_HELPMASK_START   0x298000
#define SMARTMEDIA_ADDRESS_GRAPHMASK_START   0x2e4000
#define SMARTMEDIA_ADDRESS_PRESET_DEMO_START   0x330000
#define SMARTMEDIA_ADDRESS_PRESET_RESET_START   0x334000
#define SMARTMEDIA_ADDRESS_SKIN_END   (SMARTMEDIA_ADDRESS_SKIN_START +(SIZE_SKIN *3))
#define SMARTMEDIA_ADDRESS_SKINMASK_END   (SMARTMEDIA_ADDRESS_SKINMASK_START +(SIZE_SKINMASK *3))
#define SMARTMEDIA_ADDRESS_HELP_END   (SMARTMEDIA_ADDRESS_HELP_START +(SIZE_HELP *3))
#define SMARTMEDIA_ADDRESS_HELPMASK_END   (SMARTMEDIA_ADDRESS_HELPMASK_START +(SIZE_HELPMASK *3))
#define SMARTMEDIA_ADDRESS_GRAPHMASK_END   (SMARTMEDIA_ADDRESS_GRAPHMASK_START +(SIZE_GRAPHMASK *3))
#define SMARTMEDIA_ADDRESS_PRESET_DEMO_END   (SMARTMEDIA_ADDRESS_PRESET_DEMO_START +(SIZE_PRESET))
#define SMARTMEDIA_ADDRESS_PRESET_RESET_END   (SMARTMEDIA_ADDRESS_PRESET_RESET_START +(SIZE_PRESET))
#define ADDRESS_SKIN_START   0x000000
#define ADDRESS_SKIN_END   (ADDRESS_SKIN_START +SIZE_SKIN)
#define ADDRESS_HELP_START   0x04b000
#define ADDRESS_HELP_END   (ADDRESS_HELP_START +SIZE_HELP)
#define ADDRESS_GRAPHMASK_START   0x096000
#define ADDRESS_GRAPHMASK_END   (ADDRESS_GRAPHMASK_START +SIZE_GRAPH)
#define ADDRESS_PRESET_DEMO_START   0x0e1000
#define ADDRESS_PRESET_DEMO_END   (ADDRESS_PRESET_DEMO_START +SIZE_PRESET)
#define ADDRESS_PRESET_RESET_START   0x0e11c0
#define ADDRESS_PRESET_RESET_END   (ADDRESS_PRESET_RESET_START +SIZE_PRESET)
-


Detailed Description

-

-Graphic Equalizer API

-

-Project information.

-Project Graphic Equalizer
-
Author:
O.M. Schinagl
-
Date:
20041202
-
Version:
0.1
-

-Copyright

-Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

-Change history

-20041202: O.M. Schinagl
- Initial version -

-Definition in file smartmedia_shared.hch.


Define Documentation

-

- - - - -
- - - - -
#define _SMARTMEDIA_SHARED_HCH   1
-
- - - - - -
-   - - -

- -

-Definition at line 20 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define SIZE_SKIN   0x04afff
-
- - - - - -
-   - - -

- -

-Definition at line 29 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define SIZE_HELP   0x04afff
-
- - - - - -
-   - - -

- -

-Definition at line 30 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define SIZE_GRAPH   0x04afff
-
- - - - - -
-   - - -

- -

-Definition at line 31 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define SIZE_SKINMASK   0x018fff
-
- - - - - -
-   - - -

- -

-Definition at line 32 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define SIZE_HELPMASK   0x018fff
-
- - - - - -
-   - - -

- -

-Definition at line 33 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define SIZE_GRAPHMASK   0x018fff
-
- - - - - -
-   - - -

- -

-Definition at line 34 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define SIZE_PRESET   0x0001c0
-
- - - - - -
-   - - -

- -

-Definition at line 36 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define SMARTMEDIA_ADDRESS_SKIN_START   0x084000
-
- - - - - -
-   - - -

- -

-Definition at line 42 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define SMARTMEDIA_ADDRESS_SKINMASK_START   0x168000
-
- - - - - -
-   - - -

- -

-Definition at line 43 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define SMARTMEDIA_ADDRESS_HELP_START   0x1b4000
-
- - - - - -
-   - - -

- -

-Definition at line 44 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define SMARTMEDIA_ADDRESS_HELPMASK_START   0x298000
-
- - - - - -
-   - - -

- -

-Definition at line 45 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define SMARTMEDIA_ADDRESS_GRAPHMASK_START   0x2e4000
-
- - - - - -
-   - - -

- -

-Definition at line 46 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define SMARTMEDIA_ADDRESS_PRESET_DEMO_START   0x330000
-
- - - - - -
-   - - -

- -

-Definition at line 48 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define SMARTMEDIA_ADDRESS_PRESET_RESET_START   0x334000
-
- - - - - -
-   - - -

- -

-Definition at line 49 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define SMARTMEDIA_ADDRESS_SKIN_END   (SMARTMEDIA_ADDRESS_SKIN_START +(SIZE_SKIN *3))
-
- - - - - -
-   - - -

- -

-Definition at line 51 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define SMARTMEDIA_ADDRESS_SKINMASK_END   (SMARTMEDIA_ADDRESS_SKINMASK_START +(SIZE_SKINMASK *3))
-
- - - - - -
-   - - -

- -

-Definition at line 52 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define SMARTMEDIA_ADDRESS_HELP_END   (SMARTMEDIA_ADDRESS_HELP_START +(SIZE_HELP *3))
-
- - - - - -
-   - - -

- -

-Definition at line 53 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define SMARTMEDIA_ADDRESS_HELPMASK_END   (SMARTMEDIA_ADDRESS_HELPMASK_START +(SIZE_HELPMASK *3))
-
- - - - - -
-   - - -

- -

-Definition at line 54 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define SMARTMEDIA_ADDRESS_GRAPHMASK_END   (SMARTMEDIA_ADDRESS_GRAPHMASK_START +(SIZE_GRAPHMASK *3))
-
- - - - - -
-   - - -

- -

-Definition at line 55 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define SMARTMEDIA_ADDRESS_PRESET_DEMO_END   (SMARTMEDIA_ADDRESS_PRESET_DEMO_START +(SIZE_PRESET))
-
- - - - - -
-   - - -

- -

-Definition at line 57 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define SMARTMEDIA_ADDRESS_PRESET_RESET_END   (SMARTMEDIA_ADDRESS_PRESET_RESET_START +(SIZE_PRESET))
-
- - - - - -
-   - - -

- -

-Definition at line 58 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define ADDRESS_SKIN_START   0x000000
-
- - - - - -
-   - - -

- -

-Definition at line 60 of file smartmedia_shared.hch. -

-Referenced by display_main().

-

- - - - -
- - - - -
#define ADDRESS_SKIN_END   (ADDRESS_SKIN_START +SIZE_SKIN)
-
- - - - - -
-   - - -

- -

-Definition at line 61 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define ADDRESS_HELP_START   0x04b000
-
- - - - - -
-   - - -

- -

-Definition at line 63 of file smartmedia_shared.hch. -

-Referenced by smartmedia_loaddata().

-

- - - - -
- - - - -
#define ADDRESS_HELP_END   (ADDRESS_HELP_START +SIZE_HELP)
-
- - - - - -
-   - - -

- -

-Definition at line 64 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define ADDRESS_GRAPHMASK_START   0x096000
-
- - - - - -
-   - - -

- -

-Definition at line 66 of file smartmedia_shared.hch. -

-Referenced by smartmedia_loaddata().

-

- - - - -
- - - - -
#define ADDRESS_GRAPHMASK_END   (ADDRESS_GRAPHMASK_START +SIZE_GRAPH)
-
- - - - - -
-   - - -

- -

-Definition at line 67 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define ADDRESS_PRESET_DEMO_START   0x0e1000
-
- - - - - -
-   - - -

- -

-Definition at line 69 of file smartmedia_shared.hch. -

-Referenced by smartmedia_loaddata().

-

- - - - -
- - - - -
#define ADDRESS_PRESET_DEMO_END   (ADDRESS_PRESET_DEMO_START +SIZE_PRESET)
-
- - - - - -
-   - - -

- -

-Definition at line 70 of file smartmedia_shared.hch.

-

- - - - -
- - - - -
#define ADDRESS_PRESET_RESET_START   0x0e11c0
-
- - - - - -
-   - - -

- -

-Definition at line 72 of file smartmedia_shared.hch. -

-Referenced by smartmedia_loaddata().

-

- - - - -
- - - - -
#define ADDRESS_PRESET_RESET_END   (ADDRESS_PRESET_RESET_START +SIZE_PRESET)
-
- - - - - -
-   - - -

- -

-Definition at line 73 of file smartmedia_shared.hch. -

-Referenced by smartmedia_loaddata().

-


Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/smartmedia__shared_8hch__dep__incl.map b/Graphic_Equalizer/doc/html/smartmedia__shared_8hch__dep__incl.map deleted file mode 100644 index 010c863..0000000 --- a/Graphic_Equalizer/doc/html/smartmedia__shared_8hch__dep__incl.map +++ /dev/null @@ -1,3 +0,0 @@ -base referer -rect $display_8hcc.html 7,7 95,34 -rect $smartmedia_8hcc.html 119,7 237,34 diff --git a/Graphic_Equalizer/doc/html/smartmedia__shared_8hch__dep__incl.md5 b/Graphic_Equalizer/doc/html/smartmedia__shared_8hch__dep__incl.md5 deleted file mode 100644 index b1d0df9..0000000 --- a/Graphic_Equalizer/doc/html/smartmedia__shared_8hch__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -cc243b4bbcc02c0ce51bf569d27b4250 \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/smartmedia__shared_8hch__dep__incl.png b/Graphic_Equalizer/doc/html/smartmedia__shared_8hch__dep__incl.png deleted file mode 100644 index ddc355c..0000000 Binary files a/Graphic_Equalizer/doc/html/smartmedia__shared_8hch__dep__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/structaudiodata__t.html b/Graphic_Equalizer/doc/html/structaudiodata__t.html deleted file mode 100644 index 5c3b5fd..0000000 --- a/Graphic_Equalizer/doc/html/structaudiodata__t.html +++ /dev/null @@ -1,77 +0,0 @@ - - -Graphic Equalizer 2: audiodata_t Struct Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
-

audiodata_t Struct Reference

- - - - - - -

Data Fields

unsigned * equalizer_levels_ptr
unsigned display_log
-

Field Documentation

-

- - - - -
- - - - -
unsigned* audiodata_t::equalizer_levels_ptr
-
- - - - - -
-   - - -

- -

-Definition at line 34 of file audio.hch. -

-Referenced by equalize_audio(), and eventhandler_main().

-

- - - - -
- - - - -
unsigned audiodata_t::display_log
-
- - - - - -
-   - - -

- -

-Definition at line 35 of file audio.hch. -

-Referenced by display_main(), equalize_audio(), and eventhandler_main().

-


The documentation for this struct was generated from the following file: -
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/structevents__t.html b/Graphic_Equalizer/doc/html/structevents__t.html deleted file mode 100644 index 6f88ff4..0000000 --- a/Graphic_Equalizer/doc/html/structevents__t.html +++ /dev/null @@ -1,222 +0,0 @@ - - -Graphic Equalizer 2: events_t Struct Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
-

events_t Struct Reference

- - - - - - - - - - - - - - - - -

Data Fields

ram unsigned equalizer_display [128]
unsigned active_preset
unsigned volume_position
unsigned mask
unsigned mode
unsigned equalizer_mode
unsigned locked_display
-

Field Documentation

-

- - - - -
- - - - -
ram unsigned events_t::equalizer_display[128]
-
- - - - - -
-   - - -

- -

-Definition at line 30 of file eventhandler_shared.hch. -

-Referenced by display_main(), eventhandler_main(), and reload_equalizer().

-

- - - - -
- - - - -
unsigned events_t::active_preset
-
- - - - - -
-   - - -

- -

-Definition at line 31 of file eventhandler_shared.hch. -

-Referenced by display_main(), and eventhandler_main().

-

- - - - -
- - - - -
unsigned events_t::volume_position
-
- - - - - -
-   - - -

- -

-Definition at line 32 of file eventhandler_shared.hch. -

-Referenced by display_main(), and eventhandler_main().

-

- - - - -
- - - - -
unsigned events_t::mask
-
- - - - - -
-   - - -

- -

-Definition at line 33 of file eventhandler_shared.hch. -

-Referenced by display_main(), and eventhandler_main().

-

- - - - -
- - - - -
unsigned events_t::mode
-
- - - - - -
-   - - -

- -

-Definition at line 34 of file eventhandler_shared.hch. -

-Referenced by display_main(), and eventhandler_main().

-

- - - - -
- - - - -
unsigned events_t::equalizer_mode
-
- - - - - -
-   - - -

- -

-Definition at line 35 of file eventhandler_shared.hch. -

-Referenced by display_main(), and eventhandler_main().

-

- - - - -
- - - - -
unsigned events_t::locked_display
-
- - - - - -
-   - - -

- -

-Definition at line 36 of file eventhandler_shared.hch. -

-Referenced by display_main(), eventhandler_main(), and reload_equalizer().

-


The documentation for this struct was generated from the following file: -
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/structmousedata__t.html b/Graphic_Equalizer/doc/html/structmousedata__t.html deleted file mode 100644 index 675c18a..0000000 --- a/Graphic_Equalizer/doc/html/structmousedata__t.html +++ /dev/null @@ -1,135 +0,0 @@ - - -Graphic Equalizer 2: mousedata_t Struct Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
-

mousedata_t Struct Reference

- - - - - - - - - - -

Data Fields

unsigned x
unsigned y
unsigned state
unsigned status
-

Field Documentation

-

- - - - -
- - - - -
unsigned mousedata_t::x
-
- - - - - -
-   - - -

- -

-Definition at line 28 of file mouse_shared.hch. -

-Referenced by display_main(), and mouse_main().

-

- - - - -
- - - - -
unsigned mousedata_t::y
-
- - - - - -
-   - - -

- -

-Definition at line 28 of file mouse_shared.hch. -

-Referenced by display_main(), eventhandler_main(), and mouse_main().

-

- - - - -
- - - - -
unsigned mousedata_t::state
-
- - - - - -
-   - - -

- -

-Definition at line 29 of file mouse_shared.hch. -

-Referenced by eventhandler_main(), and mouse_main().

-

- - - - -
- - - - -
unsigned mousedata_t::status
-
- - - - - -
-   - - -

- -

-Definition at line 30 of file mouse_shared.hch. -

-Referenced by display_main(), and mouse_main().

-


The documentation for this struct was generated from the following file: -
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/structskindata__t.html b/Graphic_Equalizer/doc/html/structskindata__t.html deleted file mode 100644 index 2ae74df..0000000 --- a/Graphic_Equalizer/doc/html/structskindata__t.html +++ /dev/null @@ -1,139 +0,0 @@ - - -Graphic Equalizer 2: skindata_t Struct Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
-

skindata_t Struct Reference

This struct contains all area- dimensions and color information for the skin. -More... -

-Collaboration diagram for skindata_t:

Collaboration graph
- - - -
[legend]
- - - - - - - - - - -

Data Fields

skin_info_t waveform
skin_info_t spectrum
skin_info_t volume
skin_info_t equalizer
-

Detailed Description

-This struct contains all area- dimensions and color information for the skin. -

- -

-Definition at line 29 of file display_shared.hch.


Field Documentation

-

- - - - -
- - - - -
struct skin_info_t skindata_t::waveform
-
- - - - - -
-   - - -

-We store all information about the waveform area here. -

-Definition at line 42 of file display_shared.hch.

-

- - - - -
- - - - -
struct skin_info_t skindata_t::spectrum
-
- - - - - -
-   - - -

-We store all information about the spectrum analyzer area here. -

-Definition at line 43 of file display_shared.hch.

-

- - - - -
- - - - -
struct skin_info_t skindata_t::volume
-
- - - - - -
-   - - -

-We store all information about the volume control area here. -

-Definition at line 44 of file display_shared.hch.

-

- - - - -
- - - - -
struct skin_info_t skindata_t::equalizer
-
- - - - - -
-   - - -

-We store all information about the equalizerbars here. -

-Definition at line 45 of file display_shared.hch.

-


The documentation for this struct was generated from the following file: -
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/structskindata__t_1_1skin__info__t.html b/Graphic_Equalizer/doc/html/structskindata__t_1_1skin__info__t.html deleted file mode 100644 index 42de9e3..0000000 --- a/Graphic_Equalizer/doc/html/structskindata__t_1_1skin__info__t.html +++ /dev/null @@ -1,189 +0,0 @@ - - -Graphic Equalizer 2: skindata_t::skin_info_t Struct Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
-

skindata_t::skin_info_t Struct Reference

Structure containing the four boundry limits of an area and maximal two colors per area. -More... -

- - - - - - - - - - - - - - - -

Data Fields

unsigned area_bottom
unsigned area_top
unsigned area_left
unsigned area_right
unsigned color_primary
unsigned color_secondary
-


Detailed Description

-Structure containing the four boundry limits of an area and maximal two colors per area. -

- -

-Definition at line 34 of file display_shared.hch.


Field Documentation

-

- - - - -
- - - - -
unsigned skindata_t::skin_info_t::area_bottom
-
- - - - - -
-   - - -

-lowest point registerd in the area -

-Definition at line 35 of file display_shared.hch.

-

- - - - -
- - - - -
unsigned skindata_t::skin_info_t::area_top
-
- - - - - -
-   - - -

-highest point registerd in the area -

-Definition at line 36 of file display_shared.hch.

-

- - - - -
- - - - -
unsigned skindata_t::skin_info_t::area_left
-
- - - - - -
-   - - -

-leftmost point registerd in the area -

-Definition at line 37 of file display_shared.hch.

-

- - - - -
- - - - -
unsigned skindata_t::skin_info_t::area_right
-
- - - - - -
-   - - -

-rightmost point registerd in the area -

-Definition at line 38 of file display_shared.hch.

-

- - - - -
- - - - -
unsigned skindata_t::skin_info_t::color_primary
-
- - - - - -
-   - - -

-primary color for this area -

-Definition at line 39 of file display_shared.hch.

-

- - - - -
- - - - -
unsigned skindata_t::skin_info_t::color_secondary
-
- - - - - -
-   - - -

-optionally an area can have a second color -

-Definition at line 40 of file display_shared.hch.

-


The documentation for this struct was generated from the following file: -
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/structskindata__t__coll__graph.map b/Graphic_Equalizer/doc/html/structskindata__t__coll__graph.map deleted file mode 100644 index c8bb9b0..0000000 --- a/Graphic_Equalizer/doc/html/structskindata__t__coll__graph.map +++ /dev/null @@ -1,2 +0,0 @@ -base referer -rect $structskindata__t_1_1skin__info__t.html 8,8 162,168 diff --git a/Graphic_Equalizer/doc/html/structskindata__t__coll__graph.md5 b/Graphic_Equalizer/doc/html/structskindata__t__coll__graph.md5 deleted file mode 100644 index 87c2419..0000000 --- a/Graphic_Equalizer/doc/html/structskindata__t__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -577445d3608b8ce3a5b31a17d5e2c760 \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/structskindata__t__coll__graph.png b/Graphic_Equalizer/doc/html/structskindata__t__coll__graph.png deleted file mode 100644 index d949888..0000000 Binary files a/Graphic_Equalizer/doc/html/structskindata__t__coll__graph.png and /dev/null differ diff --git a/Graphic_Equalizer/doc/html/tree.html b/Graphic_Equalizer/doc/html/tree.html deleted file mode 100644 index 60c70e1..0000000 --- a/Graphic_Equalizer/doc/html/tree.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - TreeView - - - - - -
-

Graphic Equalizer 2

-
-

o*Main Page

-

o+File List

-
-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/audio.hch

-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/configuration.hch

-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/display.hch

-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/display_shared.hch

-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/eventhandler.hch

-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/eventhandler_shared.hch

-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/events.hch

-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/fft.hch

-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/mouse.hch

-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/mouse_shared.hch

-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/runfft.hch

-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/smartmedia.hch

-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/smartmedia_shared.hch

-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/weights_256.hch

-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/src/audio.hcc

-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/src/display.hcc

-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/src/eventhandler.hcc

-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/src/events.hcc

-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/src/fft.hcc

-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/src/main.hcc

-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/src/mouse.hcc

-

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/src/runfft.hcc

-

|\*C:/Project Marcel & Oliver/Graphic_Equalizer/src/smartmedia.hcc

-
-

o+Data Structures

- -

o*Data Fields

-

o+Directories

- -

\*Globals

-
-
- - diff --git a/Graphic_Equalizer/doc/html/weights__256_8hch-source.html b/Graphic_Equalizer/doc/html/weights__256_8hch-source.html deleted file mode 100644 index e282ad2..0000000 --- a/Graphic_Equalizer/doc/html/weights__256_8hch-source.html +++ /dev/null @@ -1,278 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/weights_256.hch Source File - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

weights_256.hch

Go to the documentation of this file.
00001 #define INTBITS 1
-00002 #define FRACBITS 14
-00003 
-00004 rom signed 16 weight_re[128] = {
-00005         16384,
-00006         16379,
-00007         16364,
-00008         16340,
-00009         16305,
-00010         16261,
-00011         16207,
-00012         16143,
-00013         16069,
-00014         15986,
-00015         15893,
-00016         15791,
-00017         15679,
-00018         15557,
-00019         15426,
-00020         15286,
-00021         15137,
-00022         14978,
-00023         14811,
-00024         14635,
-00025         14449,
-00026         14256,
-00027         14053,
-00028         13842,
-00029         13623,
-00030         13395,
-00031         13160,
-00032         12916,
-00033         12665,
-00034         12406,
-00035         12140,
-00036         11866,
-00037         11585,
-00038         11297,
-00039         11003,
-00040         10702,
-00041         10394,
-00042         10080,
-00043         9760,
-00044         9434,
-00045         9102,
-00046         8765,
-00047         8423,
-00048         8076,
-00049         7723,
-00050         7366,
-00051         7005,
-00052         6639,
-00053         6270,
-00054         5897,
-00055         5520,
-00056         5139,
-00057         4756,
-00058         4370,
-00059         3981,
-00060         3590,
-00061         3196,
-00062         2801,
-00063         2404,
-00064         2006,
-00065         1606,
-00066         1205,
-00067         804,
-00068         402,
-00069         0,
-00070         -402,
-00071         -804,
-00072         -1205,
-00073         -1606,
-00074         -2006,
-00075         -2404,
-00076         -2801,
-00077         -3196,
-00078         -3590,
-00079         -3981,
-00080         -4370,
-00081         -4756,
-00082         -5139,
-00083         -5520,
-00084         -5897,
-00085         -6270,
-00086         -6639,
-00087         -7005,
-00088         -7366,
-00089         -7723,
-00090         -8076,
-00091         -8423,
-00092         -8765,
-00093         -9102,
-00094         -9434,
-00095         -9760,
-00096         -10080,
-00097         -10394,
-00098         -10702,
-00099         -11003,
-00100         -11297,
-00101         -11585,
-00102         -11866,
-00103         -12140,
-00104         -12406,
-00105         -12665,
-00106         -12916,
-00107         -13160,
-00108         -13395,
-00109         -13623,
-00110         -13842,
-00111         -14053,
-00112         -14256,
-00113         -14449,
-00114         -14635,
-00115         -14811,
-00116         -14978,
-00117         -15137,
-00118         -15286,
-00119         -15426,
-00120         -15557,
-00121         -15679,
-00122         -15791,
-00123         -15893,
-00124         -15986,
-00125         -16069,
-00126         -16143,
-00127         -16207,
-00128         -16261,
-00129         -16305,
-00130         -16340,
-00131         -16364,
-00132         -16379
-00133 } with {block = "BlockRAM"};
-00134 
-00135 rom signed 16 weight_im[128] = {
-00136         0,
-00137         -402,
-00138         -804,
-00139         -1205,
-00140         -1606,
-00141         -2006,
-00142         -2404,
-00143         -2801,
-00144         -3196,
-00145         -3590,
-00146         -3981,
-00147         -4370,
-00148         -4756,
-00149         -5139,
-00150         -5520,
-00151         -5897,
-00152         -6270,
-00153         -6639,
-00154         -7005,
-00155         -7366,
-00156         -7723,
-00157         -8076,
-00158         -8423,
-00159         -8765,
-00160         -9102,
-00161         -9434,
-00162         -9760,
-00163         -10080,
-00164         -10394,
-00165         -10702,
-00166         -11003,
-00167         -11297,
-00168         -11585,
-00169         -11866,
-00170         -12140,
-00171         -12406,
-00172         -12665,
-00173         -12916,
-00174         -13160,
-00175         -13395,
-00176         -13623,
-00177         -13842,
-00178         -14053,
-00179         -14256,
-00180         -14449,
-00181         -14635,
-00182         -14811,
-00183         -14978,
-00184         -15137,
-00185         -15286,
-00186         -15426,
-00187         -15557,
-00188         -15679,
-00189         -15791,
-00190         -15893,
-00191         -15986,
-00192         -16069,
-00193         -16143,
-00194         -16207,
-00195         -16261,
-00196         -16305,
-00197         -16340,
-00198         -16364,
-00199         -16379,
-00200         -16384,
-00201         -16379,
-00202         -16364,
-00203         -16340,
-00204         -16305,
-00205         -16261,
-00206         -16207,
-00207         -16143,
-00208         -16069,
-00209         -15986,
-00210         -15893,
-00211         -15791,
-00212         -15679,
-00213         -15557,
-00214         -15426,
-00215         -15286,
-00216         -15137,
-00217         -14978,
-00218         -14811,
-00219         -14635,
-00220         -14449,
-00221         -14256,
-00222         -14053,
-00223         -13842,
-00224         -13623,
-00225         -13395,
-00226         -13160,
-00227         -12916,
-00228         -12665,
-00229         -12406,
-00230         -12140,
-00231         -11866,
-00232         -11585,
-00233         -11297,
-00234         -11003,
-00235         -10702,
-00236         -10394,
-00237         -10080,
-00238         -9760,
-00239         -9434,
-00240         -9102,
-00241         -8765,
-00242         -8423,
-00243         -8076,
-00244         -7723,
-00245         -7366,
-00246         -7005,
-00247         -6639,
-00248         -6270,
-00249         -5897,
-00250         -5520,
-00251         -5139,
-00252         -4756,
-00253         -4370,
-00254         -3981,
-00255         -3590,
-00256         -3196,
-00257         -2801,
-00258         -2404,
-00259         -2006,
-00260         -1606,
-00261         -1205,
-00262         -804,
-00263         -402,
-00264 } with {block = "BlockRAM"};
-

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/weights__256_8hch.html b/Graphic_Equalizer/doc/html/weights__256_8hch.html deleted file mode 100644 index f4f534e..0000000 --- a/Graphic_Equalizer/doc/html/weights__256_8hch.html +++ /dev/null @@ -1,141 +0,0 @@ - - -Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/weights_256.hch File Reference - - - -
Main Page | Data Structures | Directories | File List | Data Fields | Globals
- -

weights_256.hch File Reference

-

-This graph shows which files directly or indirectly include this file:

Included by dependency graph
- - - - -

-Go to the source code of this file. - - - - - - - - - - - -

Defines

#define INTBITS   1
#define FRACBITS   14

Variables

rom signed weight_re [128]
rom signed weight_im [128]
-


Define Documentation

-

- - - - -
- - - - -
#define INTBITS   1
-
- - - - - -
-   - - -

- -

-Definition at line 1 of file weights_256.hch.

-

- - - - -
- - - - -
#define FRACBITS   14
-
- - - - - -
-   - - -

- -

-Definition at line 2 of file weights_256.hch.

-


Variable Documentation

-

- - - - -
- - - - -
rom signed weight_re[128]
-
- - - - - -
-   - - -

- -

-Definition at line 4 of file weights_256.hch. -

-Referenced by calculate_fft().

-

- - - - -
- - - - -
rom signed weight_im[128]
-
- - - - - -
-   - - -

- -

-Definition at line 135 of file weights_256.hch. -

-Referenced by calculate_fft().

-


Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  - -doxygen 1.3.9.1
- - diff --git a/Graphic_Equalizer/doc/html/weights__256_8hch__dep__incl.map b/Graphic_Equalizer/doc/html/weights__256_8hch__dep__incl.map deleted file mode 100644 index d753c47..0000000 --- a/Graphic_Equalizer/doc/html/weights__256_8hch__dep__incl.map +++ /dev/null @@ -1,2 +0,0 @@ -base referer -rect $fft_8hcc.html 40,7 98,34 diff --git a/Graphic_Equalizer/doc/html/weights__256_8hch__dep__incl.md5 b/Graphic_Equalizer/doc/html/weights__256_8hch__dep__incl.md5 deleted file mode 100644 index a2121ab..0000000 --- a/Graphic_Equalizer/doc/html/weights__256_8hch__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -109f72098a9f38fff30825084869cdf5 \ No newline at end of file diff --git a/Graphic_Equalizer/doc/html/weights__256_8hch__dep__incl.png b/Graphic_Equalizer/doc/html/weights__256_8hch__dep__incl.png deleted file mode 100644 index 223c4ed..0000000 Binary files a/Graphic_Equalizer/doc/html/weights__256_8hch__dep__incl.png and /dev/null differ diff --git a/Graphic_Equalizer/include/audio.hch b/Graphic_Equalizer/include/audio.hch deleted file mode 100644 index 988ef59..0000000 --- a/Graphic_Equalizer/include/audio.hch +++ /dev/null @@ -1,87 +0,0 @@ -/*! \file audio.hch - * - * \section generic Graphic Equalizer API - * - * \section project Project information. - * Project Graphic Equalizer\n - * \author O.M. Schinagl - * \date 20041021 - * \version 0.1 - * - * \section copyright Copyright - * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved - * - * \section history Change history - * 20041021: O.M. Schinagl\n Initial version - * - ********************************************************************/ - -#ifndef _AUDIO_HCH -#define _AUDIO_HCH 1 - -/* - * Type definition of the shared memory to be used in various processes - */ -typedef struct { - mpram { - ram unsigned 7 write[256]; - rom unsigned 7 read[256]; - } fft_info with { block = "BlockRAM"}; - mpram { - ram unsigned 6 write[256]; - rom unsigned 6 read[256]; - } ifft_info with { block = "BlockRAM"}; - unsigned 4 *equalizer_levels_ptr; - unsigned 1 display_log; -} audiodata_t; - - - - -/* - * States used to indicate wether audio data is sampled. - */ -#define AUDIO_NOT_READY 0 -#define AUDIO_READY 1 - - - -/* - * Line in or Mic in aliases for audio_init. - */ -#define LINE_IN RC200AudioInLineIn -#define MIC_IN RC200AudioInMicrophone - - - -/* - * Sample Rate Aliases for audio_init. - */ -#define SR_8000 RC200AudioSampleRate8000 -#define SR_11025 RC200AudioSampleRate11025 -#define SR_16000 RC200AudioSampleRate16000 -#define SR_22050 RC200AudioSampleRate22050 -#define SR_44100 RC200AudioSampleRate44100 -#define SR_48000 RC200AudioSampleRate48000 - - - -/* - * Initialize the Audio sub-system. gain_level sets the internal amplifier to - * passed level, input_source chooses between line in or mic in. The - * sample_rate is set to supplied rate. Defines for these are mentioned above. - */ -macro proc audio_init(gain_level, input_source, sample_rate, AUDIOIN, AUDIOOUT); - - - -/* - * Main audiodriver loop. This procedure never returns! It handles audio io and - * updates the shared memory. It needs Audio I/O handlers passed. - */ -macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT); - -#else -#error "ERROR file audio.hch multiple times included" -#endif /* --- _AUDIO_HCH --- */ - diff --git a/Graphic_Equalizer/include/configuration.hch b/Graphic_Equalizer/include/configuration.hch deleted file mode 100644 index 17c1b3f..0000000 --- a/Graphic_Equalizer/include/configuration.hch +++ /dev/null @@ -1,56 +0,0 @@ -/*! \file configuration.hch - * - * \section generic Configuration for the entire application - * - * \section project Project information. - * Project Graphic Equalizer\n - * \author O.M. Schinagl - * \date 20041101 - * \version 0.1 - * - * \section copyright Copyright - * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved - * - * \section history Change history - * 20041101: O.M. Schinagl\n Initial version - * - ********************************************************************/ - -#ifndef _CONFIGURATION_HCH -#define _CONFIGURATION_HCH 1 - - - -/* - * To print debug information on the RS232 port set this define. - */ -#define HAVE_DEBUG 0 - - - -/* - * If we don't want to use the SmartMedia set this to 0. Data is then read from - * the ram, assuming it's there. Otherwise 1 will load the smartmedia - * routines. - */ -#define HAVE_SMARTMEDIA 0 - - - -/* - * FFT specific. TODO: Clean Up! - */ -#define USE_RUNFFT 1 -#define HARDWARE_MULTIPLY 1 -#define PERFORM_FFT_CALCULATION 1 -#define USE_UNSIGNED_AUDIO 0 - -/* -FIXME: DK doesn't override from commandline defines. We have to therefore - ignore this include guard until we can find around this. -#else -#error "ERROR file configuration.hch multiple times included" -*/ -#endif /* --- _CONFIGURATION_HCH --- */ - - diff --git a/Graphic_Equalizer/include/display.hch b/Graphic_Equalizer/include/display.hch deleted file mode 100644 index af29b4f..0000000 --- a/Graphic_Equalizer/include/display.hch +++ /dev/null @@ -1,52 +0,0 @@ -/*! \file display.hch - * - * \section generic Display API - * - * \section project Project information. - * Project Graphic Equalizer\n - * \author - * \date 20041011 - * \version 0.1 - * - * \section copyright Copyright - * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved - * - * \section history Change history - * 20041011: \n Initial version - * - ********************************************************************/ - -#ifndef _DISPLAY_HCH -#define _DISPLAY_HCH 1 - - - -/* - * Set the color for various items that will be drawn on screen. - */ -#define PIXEL (pixeldata <- 24) -#define PIXEL_VOLUME (0x2d74b5) -#define PIXEL_EQUALIZER (0xc7541f) -#define PIXEL_SPECTRUM ((((skindata->area_spectrum_bottom -(SCANY <- 10)) <<1) <- 8) @ 0x00 @ (((skindata->area_spectrum_bottom -(SCANY <- 10)) <<1) <- 8)) -#define PIXEL_WAVEFORM (0x2d74b5) - - - -/* - * Main display loop. This function never returns! It handles display output. - * It needs to respond to certain events set by the events pointer. Also it - * informs events what the current mask is. To optain the current mask we need - * the X and Y coordinates from our mousedata pointer. - */ -void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events, mousedata_t *mousedata); - - - -/* - * reload equalizer bars into the display memory. - */ -void reload_equalizer(events_t *events, unsigned 4 *equalizer_levels_ptr); - -#else -#error "ERROR file display.hch multiple times included" -#endif /* --- _DISPLAY_HCH --- */ diff --git a/Graphic_Equalizer/include/display_shared.hch b/Graphic_Equalizer/include/display_shared.hch deleted file mode 100644 index 11d6edc..0000000 --- a/Graphic_Equalizer/include/display_shared.hch +++ /dev/null @@ -1,80 +0,0 @@ -/*! \file display_shared.hch - * - * \brief Datastructures and defines for usage when interacting with the - * display library. - * - * \section project Project information. - * Graphic Equalizer 2\n - * \author - * \date 20041011 - * \version 0.1 - * - * \section copyright Copyright - * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved - * - * \section history Change history - * 20041011: \n Initial version - * - ********************************************************************/ - -#ifndef _DISPLAY_SHARED_HCH -#define _DISPLAY_SHARED_HCH 1 - - - -/*! \struct skindata_t - * \brief This struct contains all area- dimensions and color information - * for the skin. - */ -struct skindata_t { - /*! \struct skin_info_t - * \brief Structure containing the four boundry limits of an area and - * maximal two colors per area. - */ - struct skin_info_t { - unsigned 10 area_bottom; /*!< lowest point registerd in the area */ - unsigned 10 area_top; /*!< highest point registerd in the area */ - unsigned 10 area_left; /*!< leftmost point registerd in the area */ - unsigned 10 area_right; /*!< rightmost point registerd in the area */ - unsigned 24 color_primary; /*!< primary color for this area */ - unsigned 24 color_secondary; /*!< optionally an area can have a second color */ - }; - struct skin_info_t waveform; /*!< We store all information about the waveform area here. */ - struct skin_info_t spectrum; /*!< We store all information about the spectrum analyzer area here. */ - struct skin_info_t volume; /*!< We store all information about the volume control area here. */ - struct skin_info_t equalizer; /*!< We store all information about the equalizerbars here. */ -}; - - - -#define AREA_WAVEFORM 0x01 /*!< Waveform area. */ -#define AREA_VOLUME_YAXIS 0x02 /*!< Volume control on the Y plane. */ -#define AREA_SPECTRUM_ANALYZER 0x03 /*!< Spectrum Analyzer area. */ - -#define BUTTON_LOG 0x04 /*!< Logarithmic display button. */ -#define BUTTON_DEMO 0x05 /*!< Demo preset button. */ -#define BUTTON_RESET 0x06 /*!< Reset presets button. */ - -#define BUTTON_PRESET_1 0x07 /*!< Button for switching to preset 1 */ -#define BUTTON_PRESET_2 0x08 /*!< Button for switching to preset 2 */ -#define BUTTON_PRESET_3 0x09 /*!< Button for switching to preset 3 */ -#define BUTTON_PRESET_4 0x0a /*!< Button for switching to preset 4 */ -#define BUTTON_PRESET_5 0x0b /*!< Button for switching to preset 5 */ -#define BUTTON_PRESET_6 0x0c /*!< Button for switching to preset 6 */ - -#define BUTTON_CONVEX_FULL 0x0d /*!< / - \ 'Convex' mode Button*/ -#define BUTTON_CONVEX_HALF 0x0e /*!< /\ 'Convex' mode Button */ -#define BUTTON_PRECISE 0x0f /*!< | 'Precise' selection Button */ -#define BUTTON_CONCAVE_HALF 0x10 /*!< \/ 'Concave' mode Button */ -#define BUTTON_CONCAVE_FULL 0x11 /*!< \ _ / 'Concave' mode Button */ - -#define BUTTON_HELP 0x12 /*!< Button to display help screen. */ -#define BUTTON_MODE 0x13 /*!< Button to change operation mode. */ - -#define AREA_EQUALIZER_MIN 0x80 /*!< First bar of the Equalizer Area. */ -#define AREA_EQUALIZER_MAX 0xff /*!< Last bar of the Equalizer Area. */ - -#else -#error "ERROR file display_shared.hch multiple times included" -#endif /* --- _DISPLAY_SHARED_HCH --- */ - diff --git a/Graphic_Equalizer/include/eventhandler.hch b/Graphic_Equalizer/include/eventhandler.hch deleted file mode 100644 index 0f3eca9..0000000 --- a/Graphic_Equalizer/include/eventhandler.hch +++ /dev/null @@ -1,39 +0,0 @@ -/*! \file eventhandler.hch - * - * \section generic SmartMedia API - * - * \section project Project information. - * Project Graphic Equalizer\n - * \author O.M. Schinagl - * \date 20041110 - * \version 0.1 - * - * \section copyright Copyright - * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved - * - * \section history Change history - * 20041110: O.M. Schinagl\n Initial version - * - ********************************************************************/ - -#ifndef _EVENTHANDLER_HCH -#define _EVENTHANDLER_HCH 1 - - - -#define LOAD_PRESET_RESET 0x000 -#define LOAD_PRESET_DEMO 0x180 - - - -/* - * This is the main eventhandler loop. We require pointers to the event struct - * to store actions to be performed and a mousedata pointer so that we know on - * what mousestate to respond. We never returns! - */ -void eventhandler_main(audiodata_t *audiodata, events_t *events, mousedata_t *mousedata); - -#else -#error "ERROR file eventhandler.hch multiple times included" -#endif /* --- _EVENTHANDLER_HCH --- */ - diff --git a/Graphic_Equalizer/include/eventhandler_shared.hch b/Graphic_Equalizer/include/eventhandler_shared.hch deleted file mode 100644 index d21cff4..0000000 --- a/Graphic_Equalizer/include/eventhandler_shared.hch +++ /dev/null @@ -1,71 +0,0 @@ -/*! \file eventhandler_shared.hch - * - * \section generic Shared definitions etc. for eveents. - * - * \section project Project information. - * Project Graphic Equalizer\n - * \author O.M. Schinagl - * \date 20041110 - * \version 0.1 - * - * \section copyright Copyright - * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved - * - * \section history Change history - * 20041110: O.M. Schinagl\n Initial version - * - *****************************************************************************/ - -#ifndef _EVENTHANDLER_SHARED_HCH -#define _EVENTHANDLER_SHARED_HCH 1 - - - -/*** Data Types **********************/ - -/* - * Type definition of the shared memory to be used in various processes - */ -typedef struct { - ram unsigned 10 equalizer_display[128]; - unsigned 10 active_preset; - unsigned 10 volume_position; - unsigned 8 mask; - unsigned 4 mode; - unsigned 4 equalizer_mode; - unsigned 1 locked_display; -} events_t; - - -#define MODE_SKIN 0x00 -#define MODE_HELP 0x01 -#define MODE_GRAPH 0x02 - - - -#define EQUALIZERMODE_FULL 0x05 -#define EQUALIZERMODE_HALF 0x03 -#define EQUALIZERMODE_PRECISE 0x00 - - -/* - * Volume Control lookuptable. - * TODO: This table is now hardcoded. To ensure full skinability this table - * should be dynamically loaded. - */ -extern unsigned 5 volumecontrol_table[46]; - -/* - * Equalizer lookup tables. - * TODO: This table is now hardcoded. To ensure full skinability this table - * should be dynamically loaded. - */ -extern unsigned 4 equalizer_table[640]; -extern unsigned 10 equalizer_table_inv[16]; - - - -#else -#error "ERROR file eventhandler_shared.hch multiple times included" -#endif /* --- _EVENTHANDLER_SHARED_HCH --- */ - diff --git a/Graphic_Equalizer/include/events.hch b/Graphic_Equalizer/include/events.hch deleted file mode 100644 index 885e89f..0000000 --- a/Graphic_Equalizer/include/events.hch +++ /dev/null @@ -1,33 +0,0 @@ -/*! \file events.hch - * - * \section generic This module contains the various actions and events - * that need to be performed. - * - * \section project Project information. - * Project Graphic Equalizer\n - * \author O.M. Schinagl - * \date 20041710 - * \version 0.1 - * - * \section copyright Copyright - * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved - * - * \section history Change history - * 20041710: O.M. Schinagl\n Initial version - * - ******************************************************************************/ - -#ifndef _EVENTS_HCH -#define _EVENTS_HCH 1 - - - -/* - * This function loads 768 4bits presets into the equalizer_levels array - * pointed to by equalizer_levels. - */ -void load_preset(unsigned 10 preset, unsigned 4 *equalizer_levels_ptr); - -#else -#error "ERROR file events.hch multiple times included" -#endif /* --- _EVENTS_HCH --- */ diff --git a/Graphic_Equalizer/include/fft.hch b/Graphic_Equalizer/include/fft.hch deleted file mode 100644 index 635ea7b..0000000 --- a/Graphic_Equalizer/include/fft.hch +++ /dev/null @@ -1,34 +0,0 @@ -#define NUMBER_OF_COLUMNS 8 -#define NUMBER_OF_POINTS (1<>1) - -#if HARDWARE_MULTIPLY -/* - * This routine obtains the audio data from the audio I/O component and copies this - * data to local arrays for calculating purposes, and calls the FFT algorithm. -*/ -void perform_fft(signed 18 *pcm_audio); - -/* This routine calls the ifft algorithm and after completing that it obtains the - * modified audio data and copies that to the output arrays of the audio I/O component. - * Besides that it also fills the array used by the display routine for displaying the waveform. -*/ -void perform_ifft(signed 18 *modified_audio ,unsigned 6 *ifft_info); -#else -/* - * This routine obtains the audio data from the audio I/O component and copies this - * data to local arrays for calculating purposes, and calls the FFT algorithm. -*/ -void perform_fft(signed 16 *pcm_audio); - -/* This routine calls the ifft algorithm and after completing that it obtains the - * modified audio data and copies that to the output arrays of the audio I/O component. - * Besides that it also fills the array used by the display routine for displaying the waveform. -*/ -void perform_ifft(signed 16 *modified_audio ,unsigned 6 *ifft_info); -#endif - -/* This routine equalizes the frequencies derived by the FFT calculation, - * according to the settings of the equalizer bars. -*/ -void equalize_audio(audiodata_t *audiodata); diff --git a/Graphic_Equalizer/include/mouse.hch b/Graphic_Equalizer/include/mouse.hch deleted file mode 100644 index ac26bbf..0000000 --- a/Graphic_Equalizer/include/mouse.hch +++ /dev/null @@ -1,41 +0,0 @@ -/*! \file mouse.hch - * - * \section generic Mousedriver API - * - * \section project Project information. - * Project Graphic Equalizer\n - * \author O.M. Schinagl - * \date 20041011 - * \version 0.1 - * - * \section copyright Copyright - * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved - * - * \section history Change history - * 20041011: O.M. Schinagl\n Initial version - * - ********************************************************************/ - -#ifndef _MOUSEDRIVER_HCH -#define _MOUSEDRIVER_HCH 1 - - - -/* - * Create a define to keep API generic - */ -#define MouseRun(ClockRate) RC200TouchScreenRun(ClockRate) - - - -/* - * Main mousedriver loop. This procedure never returns! It handles mouse input, - * updates the shared memory and notifies listeners. It requires a pointer to - * a mousedata_t struct to store mouse information. - */ -void mouse_main(mousedata_t *mousedata); - -#else -#error "ERROR file mousedriver.hch multiple times included" -#endif /* --- _MOUSEDRIVER_HCH --- */ - diff --git a/Graphic_Equalizer/include/mouse_shared.hch b/Graphic_Equalizer/include/mouse_shared.hch deleted file mode 100644 index 09c5021..0000000 --- a/Graphic_Equalizer/include/mouse_shared.hch +++ /dev/null @@ -1,56 +0,0 @@ -/*! \file mouse_shared.hch - * - * \section generic Shared definitions etc. - * - * \section project Project information. - * Project Graphic Equalizer\n - * \author O.M. Schinagl - * \date 20041011 - * \version 0.1 - * - * \section copyright Copyright - * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved - * - * \section history Change history - * 20041011: O.M. Schinagl\n Initial version - * - *****************************************************************************/ - -#ifndef _MOUSEDRIVER_SHARED_HCH -#define _MOUSEDRIVER_SHARED_HCH 1 - -/*** Data Types **********************/ - -/* - * Type definition of the shared memory to be used in various processes - */ -typedef struct { - unsigned 10 x, y; - unsigned 3 state; - unsigned 1 status; -} mousedata_t; - - - -/* - * States used to identify wether mouse data is updated - */ -#define MOUSE_NOT_UPDATED 0 -#define MOUSE_UPDATED 1 - - - -/* - * Set of Mouse States defines - */ -#define MOUSE_STATE_UP 0 -#define MOUSE_STATE_ON_PRESS 1 -#define MOUSE_STATE_DOWN 2 -#define MOUSE_STATE_ON_RELEASE 3 - - - -#else -#error "ERROR file mousedriver_shared.hch multiple times included" -#endif /* --- _MOUSEDRIVER_SHARED_HCH --- */ - diff --git a/Graphic_Equalizer/include/runfft.hch b/Graphic_Equalizer/include/runfft.hch deleted file mode 100644 index d6f6ce0..0000000 --- a/Graphic_Equalizer/include/runfft.hch +++ /dev/null @@ -1 +0,0 @@ -extern macro proc RunFFT (AudioIn, AudioOut); diff --git a/Graphic_Equalizer/include/smartmedia.hch b/Graphic_Equalizer/include/smartmedia.hch deleted file mode 100644 index 8cd87c0..0000000 --- a/Graphic_Equalizer/include/smartmedia.hch +++ /dev/null @@ -1,68 +0,0 @@ -/*! \file smartmedia.hch - * - * \section generic SmartMedia API - * - * \section project Project information. - * Project Graphic Equalizer\n - * \author O.M. Schinagl - * \date 20041110 - * \version 0.1 - * - * \section copyright Copyright - * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved - * - * \section history Change history - * 20041110: O.M. Schinagl\n Initial version - * - ********************************************************************/ - -#ifndef _SMARTMEDIA_HCH -#define _SMARTMEDIA_HCH 1 - - - -/* - * SmartMedia functioncalls a bit to be set to either Read or Write. This - * define should make life easier identifying which one is what. - */ -#define READ 0 -#define WRITE 1 - - - -/* - * The different stages the smart media loaders knows. - */ -#define STAGE_LOAD_SKIN 0x00 -#define STAGE_LOAD_HELP 0x01 -#define STAGE_LOAD_GRAPH 0x02 -#define STAGE_LOAD_PRESET 0x03 - - - -/* - * Create a define to keep API generic - * FIXME: replace with PAL calls when avaiable. - */ -#define CPLDRun(ClockRate) RC200CPLDRun(ClockRate) -#define SmartMediaRun(ClockRate) RC200SmartMediaRun(ClockRate) - - - -/* - * Initializes the smartmedia device. - */ - -unsigned 1 smartmedia_init(void); - - - -/* - * This function loads the memory with data from the smartmedia card. - */ -void smartmedia_loaddata(skindata_t *skindata); - -#else -#error "ERROR file smartmedia.hch multiple times included" -#endif /* --- _SMARTMEDIA_HCH --- */ - diff --git a/Graphic_Equalizer/include/smartmedia_shared.hch b/Graphic_Equalizer/include/smartmedia_shared.hch deleted file mode 100644 index 33fdb0a..0000000 --- a/Graphic_Equalizer/include/smartmedia_shared.hch +++ /dev/null @@ -1,80 +0,0 @@ -/*! \file smartmedia_shared.hch - * - * \section generic SmartMedia Shared - * - * \section project Project information. - * Project Graphic Equalizer\n - * \author O.M. Schinagl - * \date 20041202 - * \version 0.1 - * - * \section copyright Copyright - * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved - * - * \section history Change history - * 20041202: O.M. Schinagl\n Initial version - * - ********************************************************************/ - -#ifndef _SMARTMEDIA_SHARED_HCH -#define _SMARTMEDIA_SHARED_HCH 1 - - - -/* - * Here we set the various sizes of the data in use. Do not round this values - * in anyway! For example, 640 pixels times 480 pixels is 307200 (4b000) pixels - * total. - */ -#define SIZE_SKIN 0x04afff -#define SIZE_HELP 0x04afff -#define SIZE_GRAPH 0x04afff -#define SIZE_SKINMASK 0x018fff -#define SIZE_HELPMASK 0x018fff -#define SIZE_GRAPHMASK 0x018fff - -#define SIZE_PRESET 0x0001c0 - -/* - * Here we setup the start and end address for the various components. - */ - -#define SMARTMEDIA_ADDRESS_SKIN_START 0x084000 /* Block: 33 */ -#define SMARTMEDIA_ADDRESS_SKINMASK_START 0x168000 /* Block: 90 */ -#define SMARTMEDIA_ADDRESS_HELP_START 0x1b4000 /* Block: 109 */ -#define SMARTMEDIA_ADDRESS_HELPMASK_START 0x298000 /* Block: 166 */ -#define SMARTMEDIA_ADDRESS_GRAPHMASK_START 0x2e4000 /* Block: 185 */ - -#define SMARTMEDIA_ADDRESS_PRESET_DEMO_START 0x330000 /* Block: 204 */ -#define SMARTMEDIA_ADDRESS_PRESET_RESET_START 0x334000 /* Block: 205 */ - -#define SMARTMEDIA_ADDRESS_SKIN_END (SMARTMEDIA_ADDRESS_SKIN_START +(SIZE_SKIN *3)) -#define SMARTMEDIA_ADDRESS_SKINMASK_END (SMARTMEDIA_ADDRESS_SKINMASK_START +(SIZE_SKINMASK *3)) -#define SMARTMEDIA_ADDRESS_HELP_END (SMARTMEDIA_ADDRESS_HELP_START +(SIZE_HELP *3)) -#define SMARTMEDIA_ADDRESS_HELPMASK_END (SMARTMEDIA_ADDRESS_HELPMASK_START +(SIZE_HELPMASK *3)) -#define SMARTMEDIA_ADDRESS_GRAPHMASK_END (SMARTMEDIA_ADDRESS_GRAPHMASK_START +(SIZE_GRAPHMASK *3)) - -#define SMARTMEDIA_ADDRESS_PRESET_DEMO_END (SMARTMEDIA_ADDRESS_PRESET_DEMO_START +(SIZE_PRESET)) -#define SMARTMEDIA_ADDRESS_PRESET_RESET_END (SMARTMEDIA_ADDRESS_PRESET_RESET_START +(SIZE_PRESET)) - -#define ADDRESS_SKIN_START 0x000000 -#define ADDRESS_SKIN_END (ADDRESS_SKIN_START +SIZE_SKIN) - -#define ADDRESS_HELP_START 0x04b000 -#define ADDRESS_HELP_END (ADDRESS_HELP_START +SIZE_HELP) - -#define ADDRESS_GRAPHMASK_START 0x096000 -#define ADDRESS_GRAPHMASK_END (ADDRESS_GRAPHMASK_START +SIZE_GRAPH) - -#define ADDRESS_PRESET_DEMO_START 0x0e1000 -#define ADDRESS_PRESET_DEMO_END (ADDRESS_PRESET_DEMO_START +SIZE_PRESET) - -#define ADDRESS_PRESET_RESET_START 0x0e11c0 -#define ADDRESS_PRESET_RESET_END (ADDRESS_PRESET_RESET_START +SIZE_PRESET) - - - -#else -#error "ERROR file smartmedia_shared.hch multiple times included" -#endif /* --- _SMARTMEDIA_SHARED_HCH --- */ - diff --git a/Graphic_Equalizer/include/weights_256.hch b/Graphic_Equalizer/include/weights_256.hch deleted file mode 100644 index f2f71ff..0000000 --- a/Graphic_Equalizer/include/weights_256.hch +++ /dev/null @@ -1,264 +0,0 @@ -#define INTBITS 1 -#define FRACBITS 14 - -rom signed 16 weight_re[128] = { - 16384, - 16379, - 16364, - 16340, - 16305, - 16261, - 16207, - 16143, - 16069, - 15986, - 15893, - 15791, - 15679, - 15557, - 15426, - 15286, - 15137, - 14978, - 14811, - 14635, - 14449, - 14256, - 14053, - 13842, - 13623, - 13395, - 13160, - 12916, - 12665, - 12406, - 12140, - 11866, - 11585, - 11297, - 11003, - 10702, - 10394, - 10080, - 9760, - 9434, - 9102, - 8765, - 8423, - 8076, - 7723, - 7366, - 7005, - 6639, - 6270, - 5897, - 5520, - 5139, - 4756, - 4370, - 3981, - 3590, - 3196, - 2801, - 2404, - 2006, - 1606, - 1205, - 804, - 402, - 0, - -402, - -804, - -1205, - -1606, - -2006, - -2404, - -2801, - -3196, - -3590, - -3981, - -4370, - -4756, - -5139, - -5520, - -5897, - -6270, - -6639, - -7005, - -7366, - -7723, - -8076, - -8423, - -8765, - -9102, - -9434, - -9760, - -10080, - -10394, - -10702, - -11003, - -11297, - -11585, - -11866, - -12140, - -12406, - -12665, - -12916, - -13160, - -13395, - -13623, - -13842, - -14053, - -14256, - -14449, - -14635, - -14811, - -14978, - -15137, - -15286, - -15426, - -15557, - -15679, - -15791, - -15893, - -15986, - -16069, - -16143, - -16207, - -16261, - -16305, - -16340, - -16364, - -16379 -} with {block = "BlockRAM"}; - -rom signed 16 weight_im[128] = { - 0, - -402, - -804, - -1205, - -1606, - -2006, - -2404, - -2801, - -3196, - -3590, - -3981, - -4370, - -4756, - -5139, - -5520, - -5897, - -6270, - -6639, - -7005, - -7366, - -7723, - -8076, - -8423, - -8765, - -9102, - -9434, - -9760, - -10080, - -10394, - -10702, - -11003, - -11297, - -11585, - -11866, - -12140, - -12406, - -12665, - -12916, - -13160, - -13395, - -13623, - -13842, - -14053, - -14256, - -14449, - -14635, - -14811, - -14978, - -15137, - -15286, - -15426, - -15557, - -15679, - -15791, - -15893, - -15986, - -16069, - -16143, - -16207, - -16261, - -16305, - -16340, - -16364, - -16379, - -16384, - -16379, - -16364, - -16340, - -16305, - -16261, - -16207, - -16143, - -16069, - -15986, - -15893, - -15791, - -15679, - -15557, - -15426, - -15286, - -15137, - -14978, - -14811, - -14635, - -14449, - -14256, - -14053, - -13842, - -13623, - -13395, - -13160, - -12916, - -12665, - -12406, - -12140, - -11866, - -11585, - -11297, - -11003, - -10702, - -10394, - -10080, - -9760, - -9434, - -9102, - -8765, - -8423, - -8076, - -7723, - -7366, - -7005, - -6639, - -6270, - -5897, - -5520, - -5139, - -4756, - -4370, - -3981, - -3590, - -3196, - -2801, - -2404, - -2006, - -1606, - -1205, - -804, - -402, -} with {block = "BlockRAM"}; diff --git a/Graphic_Equalizer/src/audio.hcc b/Graphic_Equalizer/src/audio.hcc deleted file mode 100644 index 91901e1..0000000 --- a/Graphic_Equalizer/src/audio.hcc +++ /dev/null @@ -1,102 +0,0 @@ -/*! @file audio.hcc - * - * @section generic Audio init and main loop - * - * @section project Project information. - * Project Graphic Equalizer\n - * @author O.M. Schinagl - * @date 20041011 - * @version 0.1 - * - * @section copyright Copyright - * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved - * - * @section history Change history - * 20041011: \n Initial version - * - ********************************************************************/ - -/******** System Includes *************/ -#include - -#include "pal_master.hch" - -/******** Application Includes ********/ -#include "configuration.hch" -#include "audio.hch" - - - -/*! \fn macro proc audio_init(gain_level, input_source, sample_rate, AUDIOIN, AUDIOOUT) - * - * \brief Set some inital values to the audio hardware. - * - * \param gain_level Set the input amplifier to this amplification - * level. - * \param input_source Choose between microphone input or linein - * input. - * \param sample_rate Set the sample rate between 8000 - * and 48000 - * - * \return void - * \retval void - * - */ -macro proc audio_init(gain_level, input_source, sample_rate, AUDIOIN, AUDIOOUT) { - /* - * We simply call the appropiate handlers and pass values along. We - * Don't set the mute on input gain. We have volume control to do this. - * Input and Output sampling rates are equal. We dont' need different - * rates. - */ - RC200AudioInSetGain(FALSE, gain_level, gain_level); - RC200AudioInSetInput(input_source); - PalAudioInSetSampleRate(AUDIOIN, sample_rate); - PalAudioOutSetSampleRate(AUDIOOUT, sample_rate); -} /* --- audio_init() --- */ - - -#if !USE_RUNFFT -//TODO: put runfft here! -/*! @fn macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT); - * - * @brief Main audiodriver. This function never returns! It calls the - * audiohandlers and stores samples into a global array. Once 64 - * Samples are collected it raises a signal AUDIO_READY to let - * other processes know it's ready. We use quadruple buffering for - * audio input and double buffering for audio output. - * - * @param *audiodata pointer to audio information structure. - * @param AUDIOIN Audio Input Handler - * @param AUDIOOUT Audio Output Handler - * - * @return Never Returns. - * @retval void - */ -macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT) { - /* - * Determin the data width for the current platform. - */ - macro expr IW = PalAudioInGetMaxDataWidthCT(); - macro expr OW = PalAudioOutGetMaxDataWidthCT(); - - signed IW sample_left_in, sample_right_in; - signed OW sample_left_out, sample_right_out; - - while (TRUE) { - PalAudioInRead(AUDIOIN, &sample_left_in, &sample_right_in); - -/* par { - sample_add(sample_left_in); - sample_get(&sample_left_out); - sample_right_out = sample_right_in; - } - if (rotate_samples()) { - / * - * 64 Samples have been processed, calculate. - * / - } -*/ PalAudioOutWrite(AUDIOOUT, (signed OW)(sample_left_in @ 0), (signed OW)(sample_right_in @ 0)); - } -} /* --- audio_main() --- */ -#endif diff --git a/Graphic_Equalizer/src/display.hcc b/Graphic_Equalizer/src/display.hcc deleted file mode 100644 index 1aeb9d9..0000000 --- a/Graphic_Equalizer/src/display.hcc +++ /dev/null @@ -1,338 +0,0 @@ -/*! \file display.hcc - * - * \section generic Message build up information and more - * - * \section project Project information. - * Project Graphic Equalizer\n - * \author O.M. Schinagl - * \date 20041011 - * \version 0.1 - * - * \section copyright Copyright - * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved - * - * \section history Change history - * 20041011: O.M. Schinagl\n Initial version - * - ********************************************************************/ - -/* - * Set the Clock rate for this domain. 25.175 Mhz is required for the Video output. - */ -#define PAL_TARGET_CLOCK_RATE 25175000 - -/******** System Includes *************/ -#include - -#include "pal_master.hch" - -/******** Application Includes ********/ -#include "configuration.hch" -#include "audio.hch" -#include "eventhandler_shared.hch" -#include "mouse_shared.hch" -#include "smartmedia_shared.hch" -#include "display_shared.hch" -#include "display.hch" - -#if HAVE_DEBUG - #include "debug.hch" -#endif - - - -/* - * Channel to notify others when new mousedata is available. If so - * Then mousedata struct is updated with shared data. - */ -chan unsigned 1 maskupdate_notification; - - - -/*! \fn void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events, mousedata_t *mousedata) - * - * \brief This routine handles all drawing of pixels. It never returns! - * - * \param *skindata struct with all skin information. - * \param *audiodata struct with (i)fft data to be drawn. - * \param *events struct with all events. - * \param *mousedata struct with coordinates to current. - * X en Y. - * - * \return Never Returns. - * \retval void - */ -void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events, mousedata_t *mousedata) { - /* - * Setup macro's RAM/Video handles and to coordinate pixel writing. - */ - macro expr CLOCKRATE = PAL_ACTUAL_CLOCK_RATE; - macro expr VIDEOOUT = PalVideoOutOptimalCT(CLOCKRATE); - macro expr RAM_BANK0 = PalPL2RAMCT(0); - macro expr DW = PalPL2RAMGetMaxDataWidthCT(); - macro expr AW = PalPL2RAMGetMaxAddressWidthCT(); - macro expr VISIBLEX = PalVideoOutGetVisibleX(VIDEOOUT, CLOCKRATE); - macro expr TOTALX = PalVideoOutGetTotalX(VIDEOOUT, CLOCKRATE); - macro expr TOTALY = PalVideoOutGetTotalY(VIDEOOUT); - macro expr SCANX = PalVideoOutGetX(VIDEOOUT); - macro expr SCANY = PalVideoOutGetY(VIDEOOUT); - - unsigned DW pixeldata; - unsigned 24 visual_graph_color; - unsigned AW address, address_offset; - - - - /* - * If the passed button_state tells us the button is active, then we - * the button is 'on' and we draw it inverted. Otherwise we draw the - * area of the button normally. - */ - macro proc draw_button(button_state) { - if (button_state == pixeldata[31:24]) { - PalVideoOutWrite(VIDEOOUT, ~PIXEL); - } else { - PalVideoOutWrite(VIDEOOUT, PIXEL); - } - } - - /* - * Prime Rendering Pipeline to start where the skin starts. - */ - PalPL2RAMSetReadAddress(RAM_BANK0, ADDRESS_SKIN_START); - - /* - * Run the following tasks indefinatly and in parallel - */ - while (TRUE) { - par { - /* - * Before starting this loop we allready set the the - * address. Therefor we can start reading the - * previously set address and prepare the next address - * for the next cycle. - */ - PalPL2RAMRead(RAM_BANK0, &pixeldata); - PalPL2RAMSetReadAddress(RAM_BANK0, address_offset +address); - - /* - */ - switch (events->mode) { - case MODE_HELP: - address_offset = ADDRESS_HELP_START; - break; - case MODE_GRAPH: - address_offset = ADDRESS_GRAPHMASK_START; - break; - default: - address_offset = ADDRESS_SKIN_START; - break; - } - - if (MODE_GRAPH == events->mode) { - par { - visual_graph_color = ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[31:24]]) << 1) @ ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[31:24]]) << -1) @ ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[31:24]]) << 0); - PalVideoOutWrite(VIDEOOUT, 0 @ visual_graph_color); - } - } else { - /* - * Determin what to draw where here. Every case has an - * if else statement comparing wether to draw something - * special or the background. Every specific drawing - * obviously only happens in the masked area. - */ - switch (pixeldata[31:24]) { - /* - */ - case AREA_WAVEFORM: - if (SCANY == 0 @ skindata->area_waveform_bottom -(0 @ (audiodata->ifft_info.read[((SCANX -(0 @ skindata->area_waveform_left)) <-8)]))) { - PalVideoOutWrite(VIDEOOUT, skindata->color_area_waveform); - } else { - PalVideoOutWrite(VIDEOOUT, PIXEL); - } - break; - - /* - * Volume control over the Y-axis. - */ - case AREA_VOLUME_YAXIS: - /* - * The volume_position stores the - * highest point of our bar. Every - * pixel after this point is drawn. - */ - if (SCANY >= 0 @ events->volume_position) { - PalVideoOutWrite(VIDEOOUT, skindata->color_area_volume); - } else { - PalVideoOutWrite(VIDEOOUT, PIXEL); - } - break; - - /* - * Spectrum Analyzer - */ - case AREA_SPECTRUM_ANALYZER: - /* - * We draw every pixel that is smaller TODO - */ - if ((SCANY >= (0 @ skindata->area_spectrum_bottom) -(0 @ audiodata->fft_info.read[(SCANX -(0 @ skindata->area_spectrum_left))[9:2]])) && ((SCANX -(0 @ skindata->area_spectrum_left)) <- 2)) { - PalVideoOutWrite(VIDEOOUT, PIXEL_SPECTRUM); - } else { - PalVideoOutWrite(VIDEOOUT, PIXEL); - } - break; - - /* - * Since all buttons are drawn equally, either - * we draw them normally or we inverse them, we - * can handle them almost equally. - */ - case BUTTON_PRESET_1: /* fall through */ - case BUTTON_PRESET_2: /* fall through */ - case BUTTON_PRESET_3: /* fall through */ - case BUTTON_PRESET_4: /* fall through */ - case BUTTON_PRESET_5: /* fall through */ - case BUTTON_PRESET_6: - /* - * The active preset tells us what - * button is currently enabled. We must - * however not forget to add the preset - * button offset to possibly match it - * with the current mask. - */ - draw_button((events->active_preset +BUTTON_PRESET_1) <- 8); - break; - - case BUTTON_PRECISE: /* fall through */ - case BUTTON_CONCAVE_HALF: /* fall through */ - case BUTTON_CONVEX_HALF: /* fall through */ - case BUTTON_CONCAVE_FULL: /* fall through */ - case BUTTON_CONVEX_FULL: - /* - * equalizer mode tells us what button - * is currently enabled. By adding the - * equalizer mode button offset we can - * safley check wether it matches our - * mask. - */ - draw_button((0 @ events->equalizer_mode) +BUTTON_PRECISE); - break; - - case BUTTON_LOG: - /* - * - */ - draw_button((0 @ audiodata->display_log) +BUTTON_LOG); - break; - - /* - * The default case is split up into two parts - * actually. This is because we have 128 bands - * for the equalizer and thus as many mask - * entries. Since we don't want 128 identical - * cases we check wether the equalizer mask is - * currently active and if so draw it. If this - * is not the case we simply draw the - * background. - */ - default: - /* (pixeldata[31:24] <= AREA_EQUALIZER_MAX) && */ - if ((AREA_EQUALIZER_MIN <= pixeldata[31:24]) && (!events->locked_display)) { - if ((SCANY == 0 @ events->equalizer_display[(pixeldata[31:24] -AREA_EQUALIZER_MIN) <- 7]) || ((SCANY +1) == 0 @ events->equalizer_display[(pixeldata[31:24] -AREA_EQUALIZER_MIN) <- 7])) { - PalVideoOutWrite(VIDEOOUT, skindata->color_equalizer); - } else { - PalVideoOutWrite(VIDEOOUT, PIXEL); - } - } else { - PalVideoOutWrite(VIDEOOUT, PIXEL); - } - break; - } - } - - /* - * We compare our current X and Y scan positions of the - * output to the x and y data of the mouse. When those - * are equal we set the current mask to the mask stored - * in memory at that location. We then know what mask - * is to be used for events. - */ - if (MOUSE_UPDATED == mousedata->status) { - if ((SCANX == 0 @ mousedata->x) && (SCANY == 0 @ mousedata->y)) { - par { - events->mask = pixeldata[31:24]; - mousedata->status = MOUSE_NOT_UPDATED; - maskupdate_notification ! MOUSE_UPDATED; - } - } else { - delay; - } - } else { - delay; - } - - /* - * The current position of the screen can lay in an - * area called the blanking area. We don't have data - * for this area as it is not drawn. We therefor have - * to determin wether we are beyond the visible area of - * the screen, but before the end of the total width of - * the screen. Our pipeline consists of 5 total stages. - * Therefor we have to substract 5 pixels. - */ - if ((SCANX > (VISIBLEX - 5)) && (SCANX <= (TOTALX - 5))) { - /* - * We are in the blanking area of the screen. - * If we are on the last line, and thus last - * pixel we reset our address counter. - */ - if (SCANY == (TOTALY -1)) { - /* - * Reset our draw address counter to 0. - */ - address = 0; - } else { - /* - * We have reached the end of the - * visible line, but not the end of - * the screen. Therefore do nothing. - */ - delay; - } - } else { - /* - * Increase the memory counter for each pixel - * drawn thus keeping the memory location in - * sync with the current pixel position. - */ - address++; - } - } - } -} /* --- display_main() --- */ - - - -/*! \fn void reload_equalizer(events_t *events, unsigned 4 *equalizer_levels) - - * \brief This function copies the supplied equalizer values to the array - * used for displaying equalizer data. - * - * \param *events events struct - * \param *equalizer_levels pointer to 128 entries where equalizer - * is to be copied from. - * - * \return void - * \retval void - */ -void reload_equalizer(events_t *events, unsigned 4 *equalizer_levels) { - unsigned 7 equalizer_band; - - events->locked_display = TRUE; - delay; - do { - events->equalizer_display[equalizer_band] = equalizer_table_inv[equalizer_levels[equalizer_band]]; - equalizer_band++; - } while (equalizer_band); - events->locked_display = FALSE; -} /* --- reload_equalizer() --- */ diff --git a/Graphic_Equalizer/src/eventhandler.hcc b/Graphic_Equalizer/src/eventhandler.hcc deleted file mode 100644 index e1f90ae..0000000 --- a/Graphic_Equalizer/src/eventhandler.hcc +++ /dev/null @@ -1,315 +0,0 @@ -/*! \file eventhandler.hcc - * - * \section generic This modules coordinates all events. Thus for example - * when the mousehandler registers a 'click' we coordinate - * the actions that follow that click. - * - * \section project Project information. - * Project Graphic Equalizer\n - * \author O.M. Schinagl - * \date 20041110 - * \version 0.1 - * - * \section copyright Copyright - * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved - * - * \section history Change history - * 20041110: O.M. Schinagl\n Initial version - * - ********************************************************************/ - -/******** System Includes *************/ -#include - -#include "pal_master.hch" - -/******** Application Includes ********/ -#include "configuration.hch" -#include "audio.hch" -#include "mouse_shared.hch" -#include "eventhandler_shared.hch" -#include "eventhandler.hch" -#include "events.hch" -#include "display_shared.hch" -#include "display.hch" - -#if HAVE_DEBUG - #include "debug.hch" -#endif - - - -/* - */ -extern chan unsigned 1 maskupdate_notification; - - - -/*! \fn void eventhandler_main(audiodata_t *audiodata, events_t *events, mousedata_t *mousedata); - * \brief - * - * \param *audiodata pointer to struct for setting equalizer levels. - * \param *events pointer to struct with all events for display states. - * \param *mousedata pointer to struct with mouse data for X and Y - * coordinates. - * - * \return Never Returns. - * \retval void - */ -void eventhandler_main(audiodata_t *audiodata, events_t *events, mousedata_t *mousedata) { - mpram { - ram unsigned 4 write[768]; - rom unsigned 4 read[768]; - } equalizer_levels with { block = "BlockRAM"}; - - unsigned 10 preset_offset; - unsigned 10 reference_point, reference_point_right; - unsigned 5 volume_left; - unsigned 4 index_offset, index_end; - unsigned 4 equalizer_mode_local; - unsigned 1 newmaskupdate; - - load_preset(LOAD_PRESET_RESET, equalizer_levels.write); - reload_equalizer(events, &equalizer_levels.write[preset_offset]); - - while (TRUE) { - maskupdate_notification ? newmaskupdate; - - /* - * First we determine what mousestate we currently have. Then - * we check where we are to decide what to do. - */ - switch (mousedata->state) { - case MOUSE_STATE_ON_PRESS: - /* - * If we are displaying the graphic visual, - * any press returns to the application. - */ - if (MODE_GRAPH == events->mode) { - events->mode = MODE_SKIN; - events->mask = 0; - } else { - delay; - } - - /* - */ - if (BUTTON_MODE == events->mask) { - if (MODE_GRAPH == events->mode) { - events->mode = MODE_SKIN; - } else { - events->mode = MODE_GRAPH; - } - } else { - delay; - } - - /* - * If the current mask equals the help button - * we set display mode to help. - */ - if (BUTTON_HELP == events->mask) { - /* - * Change the mode to help if it's - * currently not set, otherwise go back - * to skin mode. - */ - if (MODE_HELP == events->mode) { - events->mode = MODE_SKIN; - } else { - events->mode = MODE_HELP; - } - } else { - delay; - } - - /* - * The Preset buttons span from 1 to 6 so if - * the mask one of those, we'll change the - * pointer to point to the current preset. - */ - if ((BUTTON_PRESET_1 <= events->mask) && (events->mask <= BUTTON_PRESET_6)) { - /* - * The active preset is determined by - * the mask minus an offset. Hence - * ranging our active preset from 0 to - * 6. - */ - events->active_preset = 0 @ (events->mask -BUTTON_PRESET_1); - /* - * Each equalizer is 128 bands wide, - * thus we need to add 128 * the preset - * for each different preset. This - * offset is calculated here. - */ - preset_offset = events->active_preset << 7; - /* - * We set the pointer to the active - * part of the array by using the - * preset offset as our index. Hence - * depending on the selected preset - * we point to 0, 128, 256, 384, 512 - * or 640. - */ - audiodata->equalizer_levels_ptr = &equalizer_levels.read[preset_offset]; - /* - * Finally update the equalizer bars - * that are drawn by the display. - */ - reload_equalizer(events, &equalizer_levels.write[preset_offset]); - } else { - delay; - } - - if ((BUTTON_PRECISE <= events->mask) && (events->mask <= BUTTON_CONVEX_FULL)) { - events->equalizer_mode = (events->mask -BUTTON_PRECISE) <-4; - } else { - delay; - } - - /* - * If the demo button was pressed load the - * demo preset values into the presets. - */ - if (BUTTON_DEMO == events->mask) { - load_preset(LOAD_PRESET_DEMO, equalizer_levels.write); - reload_equalizer(events, &equalizer_levels.write[preset_offset]); - } - - /* - * If the reset button was pressed load the - * reset values into the presets. - */ - if (BUTTON_RESET == events->mask) { - load_preset(LOAD_PRESET_RESET, equalizer_levels.write); - reload_equalizer(events, &equalizer_levels.write[preset_offset]); - } - - /* - * If the current mask equals the log button, - * we flip the display_log bit. - */ - if (BUTTON_LOG == events->mask) { - audiodata->display_log = !audiodata->display_log; - } else { - delay; - } - - break; - - case MOUSE_STATE_DOWN: - /* - * If we are in the volume area we update the - * volume level for both channels. - */ - if (AREA_VOLUME_YAXIS == events->mask) { - /* - * Copy the current Y cursor position - * to the events struct. This we then - * later use for drawing purposes. - */ - events->volume_position = 0 @ mousedata->y; - /* - * Look the relative y-coordinate up in - * the volumecontrol lookup table. We - * make a local copy here because the - * RC200 call doesn't behave nicely - * when passing anything else. - */ - volume_left = volumecontrol_table[((mousedata->y) -65) <- 6]; - /* - * We feel that volume gets softer the - * closer it gets to the 0, and louder - * as it approaches 0x1f. The SetVolume - * RC200 call does this in an unnatural - * reverse way. Therefor we fix it. - */ - RC200AudioOutSetVolume(!volume_left, 0x1f -volume_left, 0x1f -volume_left); - } else { - delay; - } - - if ((AREA_EQUALIZER_MIN <= events->mask) && (events->mask <= AREA_EQUALIZER_MAX)) { - - if (EQUALIZERMODE_PRECISE == events->equalizer_mode) { - events->locked_display = TRUE; - equalizer_levels.write[preset_offset +(0 @ events->mask) -AREA_EQUALIZER_MIN] = equalizer_table[mousedata->y -382]; - events->equalizer_display[(events->mask -AREA_EQUALIZER_MIN) <- 7] = mousedata->y; - events->locked_display = FALSE; - } else { - - equalizer_mode_local = events->equalizer_mode +1; - - events->locked_display = TRUE; - index_offset = ((equalizer_mode_local << 1)); /* delay; */ - - if (events->mask < (AREA_EQUALIZER_MIN +(0 @ equalizer_mode_local))) { - reference_point = events->equalizer_display[AREA_EQUALIZER_MIN -AREA_EQUALIZER_MIN]; - index_offset -= (((0 @ equalizer_mode_local) -(events->mask -AREA_EQUALIZER_MIN)) <- 4); - } else { - reference_point = events->equalizer_display[(events->mask - (0 @ equalizer_mode_local) -AREA_EQUALIZER_MIN) <- 7]; - index_offset -= 1; - } - - if (events->mask > (AREA_EQUALIZER_MAX -(0 @ equalizer_mode_local))) { - reference_point_right = events->equalizer_display[AREA_EQUALIZER_MAX -AREA_EQUALIZER_MIN]; - index_end = (((0 @ equalizer_mode_local) -(AREA_EQUALIZER_MAX -events->mask)) <- 4) -1; - } else { - reference_point_right = events->equalizer_display[(events->mask + (0 @ equalizer_mode_local) -AREA_EQUALIZER_MIN) <- 7]; - index_end = 0; - } - events->locked_display = FALSE; - - for (; index_offset != index_end; index_offset--) { - unsigned 10 average_bar; - unsigned 7 equalizer_index; - unsigned 4 bar_index; - - if (index_offset == equalizer_mode_local) { - reference_point = reference_point_right; - } else { - delay; - } - - if (index_offset > equalizer_mode_local) - { - bar_index = (index_offset -equalizer_mode_local); - equalizer_index = ((events->mask -(0 @ bar_index) -AREA_EQUALIZER_MIN) <- 7); - } else - { - bar_index = (equalizer_mode_local -index_offset); - equalizer_index = ((events->mask +(0 @ bar_index) -AREA_EQUALIZER_MIN) <- 7); - } - - if (reference_point > mousedata->y) { - average_bar = mousedata->y +((reference_point -mousedata->y) >> (equalizer_mode_local -bar_index)); - } else { - average_bar = mousedata->y -((mousedata->y -reference_point) >> (equalizer_mode_local -bar_index)); - } - - events->locked_display = TRUE; - equalizer_levels.write[preset_offset +(0 @ equalizer_index)] = equalizer_table[average_bar -382]; - events->equalizer_display[equalizer_index] = average_bar; - events->locked_display = FALSE; - } - } - } else { - delay; - } - - break; - - default: - break; - } - } -} /* --- eventhandler_main() --- */ - - - -/* - * Volume Control lookuptable. - * TODO: This table is now hardcoded. To ensure full skinability this table - * should be dynamically loaded. - */ -rom unsigned 5 volumecontrol_table[46] = {31, 31, 30, 30, 29, 29, 28, 28, 27, 27, 26, 26, 25, 25, 24, 24, 23, 23, 22, 22, 21, 21, 20, 20, 19, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0}; diff --git a/Graphic_Equalizer/src/events.hcc b/Graphic_Equalizer/src/events.hcc deleted file mode 100644 index 2e8c272..0000000 --- a/Graphic_Equalizer/src/events.hcc +++ /dev/null @@ -1,76 +0,0 @@ -/*! \file events.hcc - * - * \section generic This module contains the various actions and events - * that need to be performed. - * - * \section project Project information. - * Project Graphic Equalizer\n - * \author O.M. Schinagl - * \date 20041710 - * \version 0.1 - * - * \section copyright Copyright - * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved - * - * \section history Change history - * 20041710: O.M. Schinagl\n Initial version - * - *****************************************************************************/ - - - -/******** System Includes *************/ -#include - -#include "pal_master.hch" - -/******** Application Includes ********/ -#include "configuration.hch" -#include "eventhandler_shared.hch" -#include "events.hch" - -#if HAVE_DEBUG - #include "debug.hch" -#endif - - -ram unsigned 8 presets_default_values[768] = { -#include "presets_hardcoded.txt" -}; - - - -/*! \fn void load_preset(unsigned 10 preset, unsigned 4 *equalizer_levels_ptr); - * \brief This function loads 768 4bits presets into the equalizer_levels - * array pointed to by equalizer_levels. - * - * \param *equalizer_levels Location where to store presets loaded - * from blockram. - * - * \return void - * \retval void - */ -void load_preset(unsigned 10 preset, unsigned 4 *equalizer_levels_ptr) { - unsigned 10 equalizer_index; - unsigned 4 temp; - - equalizer_index = 0; - while (equalizer_index != 768) { - temp = presets_default_values[preset +(0 @ (equalizer_index \\ 1))][7:4]; - equalizer_levels_ptr[equalizer_index] = temp; - temp = presets_default_values[preset +(0 @ (equalizer_index \\ 1))][3:0]; - equalizer_levels_ptr[equalizer_index +1] = temp; - - equalizer_index += 2; - } -} /* --- load_preset() --- */ - - - -/* - * Equalizer lookuptabes. - * TODO: This table is now hardcoded. To ensure full skinability this table - * should be dynamically loaded. - */ -ram unsigned 4 equalizer_table[640] = {15, 15, 15, 15, 15, 14, 14, 14, 14, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0}; -ram unsigned 10 equalizer_table_inv[16] = {446, 444, 440, 436, 432, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 384}; diff --git a/Graphic_Equalizer/src/fft.hcc b/Graphic_Equalizer/src/fft.hcc deleted file mode 100644 index 0be69fe..0000000 --- a/Graphic_Equalizer/src/fft.hcc +++ /dev/null @@ -1,505 +0,0 @@ -/*! \file fft.hcc - * - * \section generic This modules will take care of the actual FFT calculation - * on the samples. Besides the FFT this module also will - * equalize the audio signal according to the setting made by the user. - * - * \section project Project information. - * Project Graphic Equalizer\n - * \author M. Lauwerijssen - * \date 20041110 - * \version 0.1 - * - * \section copyright Copyright - * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved - * - * \section history Change history - * 20041110: M. Lauwerijssen\n Initial version - * - ********************************************************************/ -#include -#include "pal_master.hch" - -#include "audio.hch" -#include "weights_256.hch" -#include "configuration.hch" -#include "xilinxmult.hch" -#include "fft.hch" - -#if HAVE_DEBUG - #include "debug.hch" -#endif - -/* Define two multi-port RAMs for FFT calculation; one for real and one for imaginary values - * Extra block RAM settings are defined to make sure read and write actions can be performed - * within one clock-cycle. - * Left out extra settings on new board the clock changes TODO !!!! - */ -#if HARDWARE_MULTIPLY -mpram -{ - ram signed 18 rwrite[256]; - rom signed 18 read[256]; -} real with {block = "BlockRAM"/*, westart=2.5, welength=1, rclkpos={1.5}, wclkpos={3}, clkpulselen=0.5*/}; - -mpram -{ - ram signed 18 rwrite[256]; - rom signed 18 read[256]; -} imaginary with {block = "BlockRAM"/*, westart=2.5, welength=1, rclkpos={1.5}, wclkpos={3}, clkpulselen=0.5*/}; -#else -mpram -{ - ram signed 24 rwrite[256]; - rom signed 24 read[256]; -} real with {block = "BlockRAM"/*, westart=2.5, welength=1, rclkpos={1.5}, wclkpos={3}, clkpulselen=0.5*/}; - -mpram -{ - ram signed 24 rwrite[256]; - rom signed 24 read[256]; -} imaginary with {block = "BlockRAM"/*, westart=2.5, welength=1, rclkpos={1.5}, wclkpos={3}, clkpulselen=0.5*/}; -#endif -// multiplication factors for equalizer function -ram signed 7 eq_settings[16] = {0,2,4,7,10,13,16,19,22,26,30,35,41,48,55,63}; - -#if HARDWARE_MULTIPLY -#define DC_COMPONENT 0 -#else -#define DC_COMPONENT 8470527 -#endif - -/*! \fn macro proc multiply(result, op_a, op_b); - * \brief Procedure used for multiply-ing - * - * \param result variable containing the result of the multiply procedure - * \param op_a integer value to be multiplied. - * \param op_b integer value to be multiplied. - * - * \return Procedure returns through variable. - * \retval signed 36 - */ -macro proc multiply(result, op_a, op_b) -{ -#if HARDWARE_MULTIPLY - xilinxmult(result, op_a, adjs(op_b,18)); -#else - result = (adjs(op_a,38))*(adjs(op_a,38)); -#endif -} - - - - -/*! \fn void calculate_fft(unsigned 1 select_inverse) - * \brief This routine performs the Fast Fourier Transform for calculation of the frequency spectrum - * - * \param select_inverse determines if a FFT or iFFT has to be calculated - * - * \return nothing - * \retval void - * - * cost 12391 cycles - */ -void calculate_fft(unsigned 1 select_inverse) -{ - unsigned 4 level; - unsigned 8 point1,point2,j,f,k; - unsigned 9 e,i; - signed 16 weight1,weight2; -#if HARDWARE_MULTIPLY - signed 18 p,q,r,t; -#else - signed 24 p,q,r,t; -#endif - signed a,b; - -#if HARDWARE_MULTIPLY - // Macro to provide rescaling of 36-bit result of fixed point multiply - // down to an 18-bit result. The range of bits selected depends on the - // number that represents the value of "1" in the trig function lookup - // tables. (Eg. for 16384 == 1, the lowest bit selected should be [14]). - macro expr rescale (x) = (x[35] @ x[30:14]); -#else - //Macro to rescale the multiply result down to a 24-bit value. - macro expr rescale (x) = ((x>>FRACBITS)<-24); -#endif - - for(level=1;level<=NUMBER_OF_COLUMNS;level++) // count all the columns - { - e=1<<(NUMBER_OF_COLUMNS-level+1); // number of points in each block in this column - f=(e>>1)<-8; // number of butterflies in each block in this column - - for(j=1;j<=f;j++) // count all the butterflies in each block - { - par - { - // Weight factors for real (the same for FFT and iFFT) - weight1 = weight_re[((j-1)<<(level-1))<-7]; - - - // Weight factors for imaginary (opposite for FFT and iFFT) - weight2 = (!select_inverse) ? (weight_im[((j-1)<<(level-1))<-7]) : -(weight_im[((j-1)<<(level-1))<-7]); - - /* ORIGINAL CODE BELOW, MODIFIED BECAUSE OF MISMATCHING OUTPUT WITH BORLAND TESTAPP - weight2 = (!select_inverse) ? -(weight_im[((j-1)<<(level-1))<-7]) : weight_im[((j-1)<<(level-1))<-7]; - */ - - - - for(i=0@j;i<=NUMBER_OF_POINTS;i+=e) // count all the blocks in this column - { // Butterfly calculation - par - { - point1 = ((i<-8)-1); - point2 = (((i<-8)+f)-1); - } - - par - { - p = (real.read[point1] >> 1) + (real.rwrite[point2] >> 1); - q = (imaginary.read[point1] >> 1) + (imaginary.rwrite[point2] >> 1); - } - - par - { - r = (real.read[point1] >> 1) - (real.rwrite[point2] >> 1); - t = (imaginary.read[point1] >> 1) - (imaginary.rwrite[point2] >> 1); - } - - multiply(a,r,weight1); - multiply(b,t,weight2); - - par - { - real.rwrite[point2] = (rescale(a-b)); - imaginary.rwrite[point1] = q; - } - - multiply(a,t,weight1); - multiply(b,r,weight2); - - par - { - real.rwrite[point1] = p; - imaginary.rwrite[point2] = (rescale(a+b)); - } - - } - } - } - } - - j=1; - for(i=1;i>1; - - - while(k>1; - } - - j+=k; - } - -} - -/*! \fn void perform_fft(signed 18 *pcm_audio) - * \brief This routine obtains the audio data from the audio I/O component and copies this - * data to local arrays for calculating purposes, and calls the FFT algorithm. - * - * \param *pcm_audio pointer to array containg the audio data - * - * \return nothing - * \retval void - * - * cost 258 cycles (excl. the calculate FFT function) - */ -#if HARDWARE_MULTIPLY -void perform_fft(signed 18 *pcm_audio) -#else -void perform_fft(signed 16 *pcm_audio) -#endif -{ - unsigned 8 k; -#if HARDWARE_MULTIPLY - signed 18 sample; - k=0; - sample = adjs(pcm_audio[k],18); -#else - signed 24 sample; - k=0; - sample = adjs(pcm_audio[k],24); -#endif - - //initialize variables for the copying pipeline - - - // copy audio data to real-array before starting FFT calculation - // and set imaginary values to zero - do - { - //Copying the array values has been pipelined to prevent parallel access to the - //pcm_audio array. This copying procedure must be finished before another - //sample is read from the audio input. The time available for this loop is - //determined by the sampling rate of 44,1 Khz - par - { - //COPYING NEEDS TO BE DONE IN 2 STEPS, BECAUSE THE VALUE THAT NEEDS TO WRITTEN - //TO THE REAL-RAM NEEDS TO BE AVAILABLE ON THE START OFF THE CLOCKCYCLE. -#if HARDWARE_MULTIPLY - sample = adjs(pcm_audio[k+1],18); -#else - sample = adjs(pcm_audio[k+1],24); -#endif - real.rwrite[k] = sample; - imaginary.rwrite[k] = 0; - k++; - } - } while (k); - - - -#if PERFORM_FFT_CALCULATION - calculate_fft(0); -#endif - - -} - -/*! \fn void perform_ifft(signed 18 *modified_audio, unsigned 6 *ifft_info) - * \brief This routine calls the ifft algorithm and after completing that it obtains the - * modified audio data and copies that to the output arrays of the audio I/O component. - * Besides that it also fills the array used by the display routine for displaying the waveform. - * - * \param *modified_audio pointer to array containg the audio data - * \param *ifft_info Pointer to the ifft_info array containing the modified waveform data for display purposes - * - * \return nothing - * \retval void - * - * cost 258 cycles (excl. the calculate iFFT function) - */ -#if HARDWARE_MULTIPLY -void perform_ifft(signed 18 *modified_audio, unsigned 6 *ifft_info) -#else -void perform_ifft(signed 16 *modified_audio, unsigned 6 *ifft_info) -#endif -{ - unsigned 6 k; -#if HARDWARE_MULTIPLY - signed 18 p; -#else - signed 24 p; -#endif -#if PERFORM_FFT_CALCULATION - calculate_fft(1); -#endif - - k=0; -//initialize variables for the copying pipeline -#if PERFORM_FFT_CALCULATION - #if HARDWARE_MULTIPLY - p = (real.read[(0@k)+95] << NUMBER_OF_COLUMNS); - #else - p = (real.read[(0@k)+95] >> NUMBER_OF_COLUMNS); - #endif -#else - p = (real.read[(0@k)+95]); -#endif - - do - { - //Copying the array values has been pipelined to prevent parallel access to the - //pcm_audio array. This copying procedure must be finished before another - //sample is read from the audio input. The time available for this loop is - //determined by the sampling rate of 44,1 Khz - par - { - /* - * Before copying the modified audio from the local real-array - * to the output array of the audio I/O component, compensate - * for the FFT calculation by shifting the values. - * 95 is added to start the output from the middle of the sliding - * window, this is done to get a better sound quality. - */ -#if PERFORM_FFT_CALCULATION - #if HARDWARE_MULTIPLY - p = (real.read[(0@k)+95] << NUMBER_OF_COLUMNS); - #else - p = (real.read[(0@k)+95] >> NUMBER_OF_COLUMNS); - #endif -#else - p = (real.read[(0@k)+95]); -#endif - //Copy the modified audio from the local real array to the output array of the audio I/O component. -#if HARDWARE_MULTIPLY - modified_audio[k] = p ; -#else - modified_audio[k] = (p<-16); -#endif - //Fill the array for displaying the waveform, only the 6 MSB are needed. - ifft_info[k] = (unsigned 6)(32+(p[17:12])); - k++; - } - } while(k); -} - -/*! \fn void equalize_audio(audiodata_t *audiodata) - * \brief This routine equalizes the frequencies derived by the FFT calculation, - * according to the settings of the equalizer bars. - * - * \note Cost: 3844 clock cycles (Maximum) - * - * \param *audiodata pointer to the audiodata struct, containing the eq_info, etc. - * - * \return void - * \retval void - * - */ -void equalize_audio(audiodata_t *audiodata) -{ -#if HARDWARE_MULTIPLY - signed 18 p,q; -#else - signed 24 p,q; -#endif - signed 18 a; - unsigned 8 i, mirror_i, bit, m, n; - unsigned 7 old_value; - unsigned 9 tmp; - - //macro expr equalize_bar = multiply(q,a)[29:6]; - - macro proc equalize_bar(retval) - { - signed result; - multiply(result, q,a); -#if HARDWARE_MULTIPLY - retval = result[23:6]; //drop last 6 bit to compensate the maximum multiplication with 64 from the eq_settings array -#else - retval = result[29:6]; //drop last 6 bit to compensate the maximum multiplication with 64 from the eq_settings array -#endif - } - - p = real.read[0] - DC_COMPONENT; // remove DC component for calculations - real.rwrite[0] = p; - - for(i=0;i!=NUMBER_OF_FREQUENCIES;i++) - { - - // set multiplication factor (0..64) for current frequency bar, The first frequency band must be equalized at 100% (63) since there is no DC-component taken into account. - a = adjs(eq_settings[audiodata->equalizer_levels_ptr[i <- 7]],18); - - - // multiply frequency with this factor and divide by 64 (drop 6 LSB's) - q = real.read[i]; - equalize_bar(p); - real.rwrite[i] = p; - - q = imaginary.read[i]; - equalize_bar(p); - imaginary.rwrite[i] = p; - - // the upper part(128..255) of the spectrum is mirrored to the lower part; - // these values need to be adjusted too - if ((i<-7)!=0) // if not in DC component bar - { - mirror_i = (NUMBER_OF_POINTS-1)-i+1; - q = real.read[mirror_i]; - equalize_bar(p); - real.rwrite[mirror_i] = p; - - q = imaginary.read[mirror_i]; - equalize_bar(p); - imaginary.rwrite[mirror_i] = p; - } - } - - //write data to fft_info for display purposes - for(i=0;idisplay_log) - { - - bit=126; -#if HARDWARE_MULTIPLY - while ((p[15] == 0) && (bit != 0)) -#else - while ((p[21] == 0) && (bit != 0)) -#endif - par - { - p = p<<1; - bit = bit - 18; - } - old_value = audiodata->fft_info.write[0 @ (i <- 7)]; - tmp = ((0@old_value) + (0@bit))>>1; - audiodata->fft_info.write[0 @ (i <- 7)] = (old_value <= (tmp<-7)) ? (tmp<-7) : old_value-1; - } - else - { - old_value = audiodata->fft_info.write[0 @ (i <- 7)]; -#if HARDWARE_MULTIPLY - audiodata->fft_info.write[0 @ (i <- 7)] = (old_value<=(unsigned)(p[15:9])) ? (unsigned)(p[15:9]) : old_value-1; -#else - audiodata->fft_info.write[0 @ (i <- 7)] = (old_value<=(unsigned)(p[21:15])) ? (unsigned)(p[21:15]) : old_value-1; -#endif - } - } - - // add DC component again before inverse FFT calculation is performed - - p = real.read[0] + DC_COMPONENT; - real.rwrite[0] = p; -} - diff --git a/Graphic_Equalizer/src/main.hcc b/Graphic_Equalizer/src/main.hcc deleted file mode 100644 index 78918b8..0000000 --- a/Graphic_Equalizer/src/main.hcc +++ /dev/null @@ -1,162 +0,0 @@ -/*! \file main.hcc - * - * \section generic Message build up information and more - * - * \section project Project information. - * Project Graphic Equalizer\n - * \author O.M. Schinagl - * \date 20041011 - * \version 0.1 - * - * \section copyright Copyright - * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved - * - * \section history Change history - * 20041011: O.M. Schinagl\n Initial version - * - *****************************************************************************/ - -/* - * Set the Clock rate for this domain. 25.175 Mhz is required for the Video output. - */ -#define PAL_TARGET_CLOCK_RATE 25175000 - -/******** System Includes *************/ -#include "pal_master.hch" - -/******** Application Includes ********/ -#include "configuration.hch" -#include "audio.hch" -#include "mouse_shared.hch" -#include "mouse.hch" -#include "eventhandler_shared.hch" -#include "eventhandler.hch" -#include "display_shared.hch" -#include "display.hch" -#include "smartmedia.hch" - -#include "fft.hch" -#include "runfft.hch" - -#if HAVE_DEBUG - #include "debug.hch" -#endif - -/*! \fn void main(void); - * \brief Main Application Loop. - * - * \return void - * \retval void - */ -void main(void) { - /* - * Set VideoOut, Audio I/O and Ram Handles and set clockrate. - */ - macro expr ClockRate = PAL_ACTUAL_CLOCK_RATE; - macro expr VideoOut = PalVideoOutOptimalCT(ClockRate); - macro expr AudioIn = PalAudioInCT(0); - macro expr AudioOut = PalAudioOutCT(0); - macro expr RAM_BANK0 = PalPL2RAMCT(0); - - mousedata_t mousedata; - events_t events; - audiodata_t audiodata; - skindata_t skindata; - unsigned 1 result; - - /* - * Check library versions and Request various hardware functionality. - * We need at least Major Version 1. For Audio purposes we need atleast - * minor version 2. - */ - PalVersionRequire(1, 2); - PalVideoOutRequire(1); - PalAudioInRequire(1); - PalAudioOutRequire(1); - - /* - * We verify some datawidths here at compile time. This to ensure - * successfull operation. - */ - assert (PalVideoOutGetColorWidthCT(VideoOut) == 24, 0, - "We need a 24-bit color Display."); - assert (PalPL2RAMGetDataWidthCT(RAM_BANK0) >= 32, 0, - "We can't work with anything less then 32 bits wide ram."); - - /* - * Run The Following main tasks in parallel. - */ - par { - /* - * Primary task is to 'Run' several hardware simultaniously. - */ - PalVideoOutRun(VideoOut, ClockRate); - MouseRun(ClockRate); - PalAudioInRun(AudioIn, ClockRate); - PalAudioOutRun(AudioOut, ClockRate); - PalPL2RAMRun(RAM_BANK0, ClockRate); -#if HAVE_SMARTMEDIA - /* - * The smartmedia device needs the CPLD to run also. - */ - CPLDRun(ClockRate); - SmartMediaRun(ClockRate); -#endif -#if HAVE_DEBUG - RC200RS232Run(RC200RS232_115200Baud, RC200RS232ParityNone, - RC200RS232FlowControlNone, ClockRate); -#endif - - /* - * Parallel to our Primary tasks we run the application. - */ - seq { - /* - * But first we need to initialize Video and Audio. - * We also load the data from the SmartMedia card - * into the ram. - */ -#if HAVE_DEBUG - print_cls(); - print_string("Graphic Equalizer 2"); - print_eol(); -#endif - PalVideoOutEnable(VideoOut); - PalAudioInEnable(AudioIn); - PalAudioOutEnable(AudioOut); - audio_init(6, LINE_IN, SR_44100, AudioIn, AudioOut); -#if HAVE_SMARTMEDIA - /* - * Once we properly setup the SmartMedia we load our - * data folowed by our main program loop. - */ - result = smartmedia_init(); - if (!result) { -#endif - smartmedia_loaddata(&skindata); - - /* - * Main application starts here! - */ - par { - /* - * From here we run the mouse driver, audio - * and display in parallel. None of these - * should ever return. - */ - mouse_main(&mousedata); - display_main(&skindata, &audiodata, &events, &mousedata); - eventhandler_main(&audiodata, &events, &mousedata); - audio_main(audiodata, AudioIn, AudioOut); - } -#if HAVE_SMARTMEDIA - } else { -#if HAVE_DEBUG - print_string("Error Initializing SmartMedia"); -#endif - } -#endif - } - } - -} /* --- main() --- */ diff --git a/Graphic_Equalizer/src/mouse.hcc b/Graphic_Equalizer/src/mouse.hcc deleted file mode 100644 index 61ce619..0000000 --- a/Graphic_Equalizer/src/mouse.hcc +++ /dev/null @@ -1,131 +0,0 @@ -/*! \file mouse.hcc - * - * \section generic This module takes care of mouse input. The mouse - * input function itself is however performed by the - * touchscreen of the RC200. - * - * \section project Project information. - * Project Graphic Equalizer\n - * \author O.M. Schinagl - * \date 20041011 - * \version 0.1 - * - * \section copyright Copyright - * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved - * - * \section history Change history - * 20041011: O.M. Schinagl\n Initial version - * - ********************************************************************/ - -/******** System Includes *************/ -#include - -#include "pal_master.hch" -#include "pal_mouse.hch" - -/******** Application Includes ********/ -#include "configuration.hch" -#include "mouse_shared.hch" -#include "mouse.hch" - -#if HAVE_DEBUG - #include "debug.hch" -#endif - - - -/*! \fn void mouse_main(mousedata_t *mousedata); - * \brief Main mousedriver. This function never returns! It calls the - * main mousehandler and returns the States and coordinates - * into a shared store. - * - * \param *mousedata Storage for all mousedata and states. - * - * \return Never Returns. - * \retval void - */ -void mouse_main(mousedata_t *mousedata) { - unsigned 18 touch_sampler; - unsigned 10 x, oldx; - unsigned 9 y, oldy; - unsigned 3 mousestate, oldmousestate; - unsigned 1 touch, touched, oldtouched; - - /* - * We only check for mouse states once every 2^18 time. This to - * overcome the sampling of the 'Touch' state of the RC200 libs. When - * using newer libs this might be overkill, e.g. smaller values may - * work or sampling all together will be redundant. - */ - touch_sampler = 1; - while (TRUE) { - if (!touch_sampler) { - /* - * We are here ready to set mouse states. We compare - * current and previous states and thereby determine - * the state to send to others - */ - if (touched) { - if(oldtouched) { - mousestate = MOUSE_STATE_DOWN; - } else { - mousestate = MOUSE_STATE_ON_PRESS; - } - oldtouched = TRUE; - } else { - if(oldtouched) { - mousestate = MOUSE_STATE_ON_RELEASE; - } else { - mousestate = MOUSE_STATE_UP; - } - oldtouched = FALSE; - } - /* - * We have now processed our Touch. Reset it for the - * next run. - */ - touched = FALSE; - - /* - * In the rare occurance that we receive values - * beyond our range, we set them to some sane - * values here. - */ - x = (x > 639) ? 0 : x; - y = (y > 479) ? 0 : y; - - /* - * Compare Previous States and Coordinates to determine - * wether they have changed. If so, Copy them into - * shared memory, notify the listening processes and - * Set the new as previous values for the next run. We - * can only do this when the display has handled all - * changes. - */ - if (((oldmousestate != mousestate) || (oldx != x) || (oldy != y)) && (MOUSE_NOT_UPDATED == mousedata->status)) { - //par { - oldx = x; - oldy = y; - oldmousestate = mousestate; - mousedata->x = x; - mousedata->y = 0 @ y; - mousedata->state = mousestate; - mousedata->status = MOUSE_UPDATED; - //} - } - } - - /* - * Read the current X and Y of the 'cursor' and register wether - * the display was touched. If touched store this in a local - * store. This we do to catch the sampling of the RC200 lib. - */ - RC200TouchScreenReadScaled(&x, &y, &touch); - if (touch) { - touched = TRUE; - } - - touch_sampler++; - } -} /* --- mouse_main() --- */ diff --git a/Graphic_Equalizer/src/runfft.hcc b/Graphic_Equalizer/src/runfft.hcc deleted file mode 100644 index 55d4b05..0000000 --- a/Graphic_Equalizer/src/runfft.hcc +++ /dev/null @@ -1,182 +0,0 @@ -/*! \file runfft.hcc - * - * \section generic This module will handle the audio I/O. It will ensure the - * audiosamples are correctly buffered and fed correctly to the FFT.\n - * This module will also handle the output of the modified audio samples. - * - * \section project Project information. - * Project Graphic Equalizer\n - * \author M. Lauwerijssen - * \date 20041110 - * \version 0.1 - * - * \section copyright Copyright - * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved - * - * \section history Change history - * 20041110: M. Lauwerijssen\n Initial version - * - ********************************************************************/ -#include -#include "pal_master.hch" - -#include "configuration.hch" -#if USE_RUNFFT -#include "audio.hch" -#include "fft.hch" - -#if HAVE_DEBUG - #include "debug.hch" -#endif - -/* - * Forward declarations - */ -static macro expr ClockRate = PAL_ACTUAL_CLOCK_RATE; -#if HARDWARE_MULTIPLY -//input buffer -ram signed 18 audio_buffer_in[256] with { block = "BlockRAM"}; -//output buffer -ram signed 18 audio_buffer_out[128] with { block = "BlockRAM"}; -#else -//input buffer -ram signed 16 audio_buffer_in[256] with { block = "BlockRAM"}; -//output buffer -ram signed 16 audio_buffer_out[128] with { block = "BlockRAM"}; -#endif -//EQ settings for the FFT -ram unsigned 4 EQ_info[128] with { block = "BlockRAM"}; -//EQ settings received from the display - - -#if HARDWARE_MULTIPLY -signed 18 *audioptr_in1,*audioptr_in2,*audioptr_in3,*audioptr_in4; - -signed 18 *audioptr_out1,*audioptr_out2; - -unsigned 6 *displayptr1,*displayptr2,*displayptr3,*displayptr4; -#else -signed 16 *audioptr_in1,*audioptr_in2,*audioptr_in3,*audioptr_in4; - -signed 16 *audioptr_out1,*audioptr_out2; - -unsigned 6 *displayptr1,*displayptr2,*displayptr3,*displayptr4; -#endif - -/*! \fn macro proc audio_main(AUDIOIN, AUDIOOUT); - * \brief Audio I/O component main. - * - * \param audiodata Pointer to audiodata struct - * \param AUDIOIN Handle to audio-input - * \param AUDIOOUT Handle to audio-output - * - * \return Never Returns. - * \retval void - */ -macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT) -{ - signed 18 sample; - unsigned 6 sample_count; - unsigned 8 i,cycle; - unsigned 4 eqinfo; - - unsigned 1 FFT_Sync, first; - macro expr OW = PalAudioOutGetMaxDataWidthCT (); - macro expr IW = PalAudioInGetMaxDataWidthCT (); - signed LeftNew, RightNew; - signed Output_sample; - - ram unsigned 6 input[64]; - - //pointers for double and quadruple buffering: - audioptr_in1 = &audio_buffer_in[0]; - audioptr_in2 = &audio_buffer_in[64]; - audioptr_in3 = &audio_buffer_in[128]; - audioptr_in4 = &audio_buffer_in[192]; - - audioptr_out1 = &audio_buffer_out[0]; - audioptr_out2 = &audio_buffer_out[64]; - - displayptr1 = &audiodata.ifft_info.write[0]; - displayptr2 = &audiodata.ifft_info.write[64]; - displayptr3 = &audiodata.ifft_info.write[128]; - displayptr4 = &audiodata.ifft_info.write[192]; - - FFT_Sync=0; -par -{ - for(;;) - { - if (FFT_Sync) //if 64 samples are read from ADC... - { - par - { - // switch pointers - audioptr_in1 = audioptr_in2; - audioptr_in2 = audioptr_in3; - audioptr_in3 = audioptr_in4; - audioptr_in4 = audioptr_in1; - - audioptr_out1 = audioptr_out2; - audioptr_out2 = audioptr_out1; - - displayptr1=displayptr2; - displayptr2=displayptr3; - displayptr3=displayptr4; - displayptr4=displayptr1; - - FFT_Sync = 0; - } - - // FFT calculation - perform_fft(audioptr_in1); - -#if PERFORM_FFT_CALCULATION - equalize_audio(&audiodata); -#endif - // inverse FFT calculation - perform_ifft(audioptr_out1,displayptr1); - } - else - delay; - } - - for(sample_count=0;;)//store the samples in the inputbuffer - { - if (!FFT_Sync) - { - par - { - seq - { - PalAudioInRead(AUDIOIN, &LeftNew, &RightNew); -#if HARDWARE_MULTIPLY - audioptr_in1[sample_count] = LeftNew;//drop 2 LSB's -#else - audioptr_in1[sample_count] = (LeftNew\\2);//drop 2 LSB's -#endif - sample_count++; - if (!sample_count) - { - FFT_Sync = 1; - } - } - seq - { - Output_sample = audioptr_out2[sample_count]; - } - } - } - else - { - delay; - } - } - for(;;) - { - PalAudioOutWrite(AUDIOOUT,(signed OW)(Output_sample @ 0),(signed OW)(Output_sample @ 0)); - } -}//end par -}// end function -#endif - diff --git a/Graphic_Equalizer/src/smartmedia.hcc b/Graphic_Equalizer/src/smartmedia.hcc deleted file mode 100644 index ff405c1..0000000 --- a/Graphic_Equalizer/src/smartmedia.hcc +++ /dev/null @@ -1,233 +0,0 @@ -/*! \file smartmedia.hcc - * - * \section generic Here we interface with the SmartMedia card. - * - * \section project Project information. - * Project Graphic Equalizer\n - * \author O.M. Schinagl - * \date 20041110 - * \version 0.1 - * - * \section copyright Copyright - * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved - * - * \section history Change history - * 20041110: O.M. Schinagl\n Initial version - * - ********************************************************************/ - -/******** System Includes *************/ -#include - -#include "pal_master.hch" - -/******** Application Includes ********/ -#include "configuration.hch" -#include "display_shared.hch" -#include "smartmedia_shared.hch" -#include "smartmedia.hch" - -#if HAVE_DEBUG - #include "debug.hch" -#endif - -#include "audio.hch" -#include "mouse_shared.hch" -#include "eventhandler_shared.hch" -#include "display.hch" /* FIXME: temporary include, needs to be moved to 'init' */ - -/*! \fn unsigned 1 smartmedia_init(void); - * \brief We here initialize the Smart Media card and verify wether the - * card is inserted and such. - * - * \return We return 0 on success, 1 on error. - * \retval unsigned 1 - */ -unsigned 1 smartmedia_init(void) { - unsigned 1 retval; - /* - * Firstly we enable both the CPLD and the SmartMedia. - */ - RC200CPLDEnable(); - RC200SmartMediaInit(&retval); - - if (retval) { - RC200SmartMediaReset(&retval); - RC200SmartMediaInit(&retval); - } - - return retval; -} /* --- smartmedia_init() --- */ - - - -/*! \fn void smartmedia_loaddata(skindata_t *skindata); - * \brief We load our memory with skin and help data from the smartmedia. - * - * \param *skindata skindata like boundries and colors of elements. - * - * \return void - * \retval void - */ -void smartmedia_loaddata(skindata_t *skindata) { - /* - * Setup RAM Handle, and determin maximum Data and Address widths - */ - macro expr RAM_BANK0 = PalPL2RAMCT(0); - macro expr DW = PalPL2RAMGetMaxDataWidthCT(); - macro expr AW = PalPL2RAMGetMaxAddressWidthCT(); - - unsigned DW data; - unsigned 27 smartmedia_address, smartmedia_address_mask; - unsigned AW address; - unsigned 8 mask, r, g, b; - unsigned 3 stage; - unsigned 1 result; - - extern ram unsigned 8 presets_default_values[768]; - -#if HAVE_DEBUG - /* - * Print some nice stats about data loading. - */ - print_eol(); - print_hex_value(0); -#endif - /* - * Before we enter our loop to fill our memory with valid data, we have - * to set the startup positions for the SmartMedia. - */ - smartmedia_address = SMARTMEDIA_ADDRESS_SKIN_START; - smartmedia_address_mask = SMARTMEDIA_ADDRESS_SKINMASK_START; - stage = STAGE_LOAD_SKIN; - /* - * We start with the address of the skin, and do the loop until we have - * done the end of the help. - */ - for (address = ADDRESS_SKIN_START; address != (ADDRESS_PRESET_RESET_END +1); address++) { - /* - * Once we are done with the loading of our skin, we need to - * change the smartmedia start addresses. - */ - switch (address) { - case ADDRESS_HELP_START: - smartmedia_address = SMARTMEDIA_ADDRESS_HELP_START; - smartmedia_address_mask = SMARTMEDIA_ADDRESS_HELPMASK_START; - stage = STAGE_LOAD_HELP; - break; - case ADDRESS_GRAPHMASK_START: - smartmedia_address_mask = SMARTMEDIA_ADDRESS_GRAPHMASK_START; - stage = STAGE_LOAD_GRAPH; - break; - case ADDRESS_PRESET_DEMO_START: - smartmedia_address_mask = SMARTMEDIA_ADDRESS_PRESET_DEMO_START; - stage = STAGE_LOAD_PRESET; - break; - case ADDRESS_PRESET_RESET_START: - smartmedia_address_mask = SMARTMEDIA_ADDRESS_PRESET_RESET_START; - stage = STAGE_LOAD_PRESET; - break; - default: - break; - } - - /* - * Before reading our data from the smartmedia we set our - * address pointer to the address from our loop. - */ -#if HAVE_SMARTMEDIA - PalPL2RAMSetWriteAddress(RAM_BANK0, address); -#else - PalPL2RAMSetWriteAddress(RAM_BANK0, 0); -#endif - - /* - * SmartMedia data is read one byte per call. Because we want - * to store the mask + the rgb values in one variable for later - * useage we need to read those 4 bytes from the smartmedia - * before storing it as one. - */ -#if HAVE_SMARTMEDIA - /* - * FIXME: Due to a bug in the DK2 smartmedia libraries we need - * stop reading after each byte with OperationEnd call. This is - * VERY slow and must be changed. - */ - if ((STAGE_LOAD_SKIN == stage) || (STAGE_LOAD_HELP == stage)) { - RC200SmartMediaSetAddress(READ, smartmedia_address); - RC200SmartMediaRead(&r, TRUE); - RC200SmartMediaOperationEnd(&result); - RC200SmartMediaSetAddress(READ, (smartmedia_address +1)); - RC200SmartMediaRead(&g, TRUE); - RC200SmartMediaOperationEnd(&result); - RC200SmartMediaSetAddress(READ, (smartmedia_address +2)); - RC200SmartMediaRead(&b, TRUE); - RC200SmartMediaOperationEnd(&result); - } - RC200SmartMediaSetAddress(READ, smartmedia_address_mask); - RC200SmartMediaRead(&mask, TRUE); - RC200SmartMediaOperationEnd(&result); - - switch (stage) { - case STAGE_LOAD_SKIN: - data = 0 @ mask @ r @ g @ b; - break; - case STAGE_LOAD_HELP: - data = 0 @ mask @ r @ g @ b; - break; - case STAGE_LOAD_GRAPH: - data = (unsigned DW)(0 @ mask) << 24; - break; - case STAGE_LOAD_PRESET: - presets_default_values[(address -ADDRESS_PRESET_DEMO_START) <- 10] = mask; - } - -#else - data = 0x0000ff00; -#endif - /* - * Now that we have gathered all pixel data, store it in ram. - */ - PalPL2RAMWrite(RAM_BANK0, data); - -#if HAVE_DEBUG - /* - * Print some nice stats about data loading. - */ - if (!(address <- 10)) { - print_cr(); - print_hex_value(0 @ (address \\ 11)); - print_string(" / 000001C2 | data: "); - print_hex_value(data <- 32); - } -#endif - - /* - * Finally increase al our indexes approperiatly. - */ - smartmedia_address += 3; - smartmedia_address_mask++; - } - - /* - * This block needs to probably move up into the fore loop where we - * calculate these settings later. - */ - skindata->area_spectrum_top = 200; - skindata->area_spectrum_bottom = 335; - skindata->area_spectrum_left = 77; - skindata->area_spectrum_right = 575; - skindata->area_waveform_top = 46; - skindata->area_waveform_bottom = 118; - skindata->area_waveform_left = 76; - skindata->area_waveform_right = 413; - skindata->area_volume_top = 112; - skindata->area_volume_bottom = 66; - skindata->area_volume_left = 439; - skindata->area_volume_right = 455; - skindata->color_area_volume = PIXEL_VOLUME; - skindata->color_area_waveform = PIXEL_WAVEFORM; -// skindata->color_area_spectrum_top = PIXEL_SPECTRUM; -// skindata->color_area_spectrum_bottom = PIXEL_SPECTRUM; - skindata->color_equalizer = PIXEL_EQUALIZER; -} /* --- smartmedia_loaddata() --- */ diff --git a/Graphic_Equalizer_Split/Graphic_Equalizer.hp b/Graphic_Equalizer_Split/Graphic_Equalizer.hp new file mode 100644 index 0000000..d1885ef --- /dev/null +++ b/Graphic_Equalizer_Split/Graphic_Equalizer.hp @@ -0,0 +1,574 @@ +#@hp +type chip +configuration Release EDIF +configuration FastLoad_Debug EDIF +configuration FastLoad EDIF +configuration Full_Debug EDIF +configuration Full EDIF +setting Release debug false +setting Release warnings true +setting Release parfunc false +setting Release parchan false +setting Release parmem false +setting Release rewrite true +setting Release high true +setting Release cse true +setting Release pcse true +setting Release rcse true +setting Release cr true +setting Release rcr true +setting Release browse true +setting Release estimate false +setting Release noTimeCon false +setting Release ignoreInclDirs false +setting Release ignoreLibDirs false +setting Release noFastCarry false +setting Release mapper true +setting Release netlistSimulator false +setting Release useCustomBuild false +setting Release exclude false +setting Release target edif +setting Release target.compile edif +setting Release family XilinxVirtexII +setting Release family.lib none +setting Release vTool Generic +setting Release netExp speed +setting Release outDir Release +setting Release intDir Release +setting Release part XC2V1000-4-FG456 +setting Release define:NDEBUG true +setting Release define:USE_ true +setting Release define:USE_RC200E true +setting Release "include:C:\\Program Files\\celoxica\\pdk\\hardware\\include" true +setting Release include:include true +setting Release include:..\\Support_Libs\\debug false +setting Release lib:stdlib.hcl true +setting Release lib:rc200e.hcl true +setting Release lib:pal_rc200e.hcl true +setting Release "libdir:C:\\Program Files\\celoxica\\pdk\\hardware\\lib" true +setting Release define:HANDELCV3 false +setting Release define:SIMULATE false +setting Release define:DEBUG false +setting Release define:USE_RC100 false +setting Release define:NSIMULATE false +setting Release define:USE_SIM false +setting Release define:USE_ADMXRC2 false +setting Release define:USE_NIOS false +setting Release define:USE_NDB false +setting Release define:USE_RC1000 false +setting Release define:USE_RC200 false +setting Release define:USE_ARMSTRIPE false +setting Release define:USE_EDB false +setting Release define:USE_V2PRO false +setting Release define:USE_MV2P false +setting Release define:RC200 false +setting Release include:..\\..\\Support_Libs\\debug false +setting Release lib:rc100.hcl false +setting Release lib:pal_rc100.hcl false +setting Release lib:pal_framebuffer16.hcl false +setting Release lib:sim.hcl false +setting Release lib:pal_sim.hcl false +setting Release lib:admxrc2.hcl false +setting Release lib:pal_admxrc2.hcl false +setting Release lib:pal_console.hcl false +setting Release lib:ndb.hcl false +setting Release lib:pal_ndb.hcl false +setting Release lib:rc1000.hcl false +setting Release lib:pal_rc1000.hcl false +setting Release lib:rc200.hcl false +setting Release lib:pal_rc200.hcl false +setting Release lib:pal_keyboard.hcl false +setting Release lib:pal_framebuffer8.hcl false +setting Release lib:pal_framebufferdb.hcl false +setting Release lib:edb.hcl false +setting Release lib:pal_edb.hcl false +setting Release lib:mv2p.hcl false +setting Release lib:pal_mv2p.hcl false +setting Release lib:pal_mouse.hcl false +setting Release "lib:C:\\Program Files\\Celoxica\\PDK\\Hardware\\Lib\\stdlib.hcl" false +setting Release "libdir:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\lib" false +setting Release ansimodules:..\\..\\..\\Software\\Lib\\PalSim.lib false +setting Release define:HAVE_DEBUG false +setting Release "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\include" false +setting Release "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\includes" false +setting Release "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\" false +setting Release include:..\\..\\..\\include false +setting Release include:C:\\Project_CVS\\Support_Libs\\debug false +setting Release define:HAVE_SMARTMEDIA true +setting Release define:USE_RUNFFT true +setting Release define:HARDWARE_MULTIPLY true +setting Release define:PERFORM_FFT_CALCULATION true +setting Release define:USE_UNSIGNED_AUDIO false +setting Release define:_CONFIGURATION_HCH true +setting Release include:data true +command Release "cd Release" +command Release "call edifmake_rc200_optimized Graphic_Equalizer" +output Release bin\\Graphic_Equalizer.bit +setting FastLoad_Debug debug true +setting FastLoad_Debug warnings true +setting FastLoad_Debug parfunc false +setting FastLoad_Debug parchan false +setting FastLoad_Debug parmem false +setting FastLoad_Debug rewrite true +setting FastLoad_Debug high true +setting FastLoad_Debug cse true +setting FastLoad_Debug pcse true +setting FastLoad_Debug rcse true +setting FastLoad_Debug cr true +setting FastLoad_Debug rcr true +setting FastLoad_Debug browse true +setting FastLoad_Debug estimate false +setting FastLoad_Debug noTimeCon false +setting FastLoad_Debug ignoreInclDirs false +setting FastLoad_Debug ignoreLibDirs false +setting FastLoad_Debug noFastCarry false +setting FastLoad_Debug mapper true +setting FastLoad_Debug netlistSimulator false +setting FastLoad_Debug useCustomBuild false +setting FastLoad_Debug exclude false +setting FastLoad_Debug target edif +setting FastLoad_Debug target.compile edif +setting FastLoad_Debug family XilinxVirtexII +setting FastLoad_Debug family.lib none +setting FastLoad_Debug vTool Generic +setting FastLoad_Debug netExp speed +setting FastLoad_Debug outDir FastLoad_Debug +setting FastLoad_Debug intDir FastLoad_Debug +setting FastLoad_Debug part XC2V1000-4-FG456 +setting FastLoad_Debug define:NDEBUG true +setting FastLoad_Debug define:HANDELCV3 false +setting FastLoad_Debug define:SIMULATE false +setting FastLoad_Debug define:DEBUG false +setting FastLoad_Debug define:USE_ true +setting FastLoad_Debug define:USE_RC100 false +setting FastLoad_Debug define:NSIMULATE false +setting FastLoad_Debug define:USE_SIM false +setting FastLoad_Debug define:USE_ADMXRC2 false +setting FastLoad_Debug define:USE_NIOS false +setting FastLoad_Debug define:USE_NDB false +setting FastLoad_Debug define:USE_RC1000 false +setting FastLoad_Debug define:USE_RC200 false +setting FastLoad_Debug define:USE_RC200E true +setting FastLoad_Debug define:USE_ARMSTRIPE false +setting FastLoad_Debug define:USE_EDB false +setting FastLoad_Debug define:USE_V2PRO false +setting FastLoad_Debug define:USE_MV2P false +setting FastLoad_Debug define:RC200 false +setting FastLoad_Debug lib:stdlib.hcl true +setting FastLoad_Debug lib:rc100.hcl false +setting FastLoad_Debug lib:pal_rc100.hcl false +setting FastLoad_Debug lib:pal_framebuffer16.hcl false +setting FastLoad_Debug lib:sim.hcl false +setting FastLoad_Debug lib:pal_sim.hcl false +setting FastLoad_Debug lib:admxrc2.hcl false +setting FastLoad_Debug lib:pal_admxrc2.hcl false +setting FastLoad_Debug lib:pal_console.hcl false +setting FastLoad_Debug lib:ndb.hcl false +setting FastLoad_Debug lib:pal_ndb.hcl false +setting FastLoad_Debug lib:rc1000.hcl false +setting FastLoad_Debug lib:pal_rc1000.hcl false +setting FastLoad_Debug lib:rc200.hcl false +setting FastLoad_Debug lib:pal_rc200.hcl false +setting FastLoad_Debug lib:rc200e.hcl true +setting FastLoad_Debug lib:pal_rc200e.hcl true +setting FastLoad_Debug lib:pal_keyboard.hcl false +setting FastLoad_Debug lib:pal_framebuffer8.hcl false +setting FastLoad_Debug lib:pal_framebufferdb.hcl false +setting FastLoad_Debug lib:edb.hcl false +setting FastLoad_Debug lib:pal_edb.hcl false +setting FastLoad_Debug lib:mv2p.hcl false +setting FastLoad_Debug lib:pal_mv2p.hcl false +setting FastLoad_Debug lib:pal_mouse.hcl false +setting FastLoad_Debug ansimodules:..\\..\\..\\Software\\Lib\\PalSim.lib false +setting FastLoad_Debug "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\include" false +setting FastLoad_Debug "libdir:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\lib" false +setting FastLoad_Debug "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\includes" false +setting FastLoad_Debug "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\" false +setting FastLoad_Debug include:..\\..\\..\\include false +setting FastLoad_Debug include:include true +setting FastLoad_Debug include:..\\Support_Libs\\debug true +setting FastLoad_Debug include:C:\\Project_CVS\\Support_Libs\\debug false +setting FastLoad_Debug "lib:C:\\Program Files\\Celoxica\\PDK\\Hardware\\Lib\\stdlib.hcl" false +setting FastLoad_Debug "include:C:\\Program Files\\celoxica\\pdk\\hardware\\include" true +setting FastLoad_Debug "libdir:C:\\Program Files\\celoxica\\pdk\\hardware\\lib" true +setting FastLoad_Debug define:HAVE_DEBUG true +setting FastLoad_Debug define:HAVE_SMARTMEDIA false +setting FastLoad_Debug define:USE_RUNFFT true +setting FastLoad_Debug define:HARDWARE_MULTIPLY true +setting FastLoad_Debug define:PERFORM_FFT_CALCULATION true +setting FastLoad_Debug define:USE_UNSIGNED_AUDIO false +setting FastLoad_Debug include:..\\..\\Support_Libs\\debug false +setting FastLoad_Debug define:_CONFIGURATION_HCH true +setting FastLoad_Debug include:data true +command FastLoad_Debug "cd FastLoad_Debug" +command FastLoad_Debug "call edifmake_rc200_unoptimized Graphic_Equalizer" +output FastLoad_Debug bin\\Graphic_Equalizer.bit +setting FastLoad debug true +setting FastLoad warnings true +setting FastLoad parfunc false +setting FastLoad parchan false +setting FastLoad parmem false +setting FastLoad rewrite true +setting FastLoad high true +setting FastLoad cse true +setting FastLoad pcse true +setting FastLoad rcse true +setting FastLoad cr true +setting FastLoad rcr true +setting FastLoad browse true +setting FastLoad estimate false +setting FastLoad noTimeCon false +setting FastLoad ignoreInclDirs false +setting FastLoad ignoreLibDirs false +setting FastLoad noFastCarry false +setting FastLoad mapper true +setting FastLoad netlistSimulator false +setting FastLoad useCustomBuild false +setting FastLoad exclude false +setting FastLoad target edif +setting FastLoad target.compile edif +setting FastLoad family XilinxVirtexII +setting FastLoad family.lib none +setting FastLoad vTool Generic +setting FastLoad netExp speed +setting FastLoad outDir FastLoad +setting FastLoad intDir FastLoad +setting FastLoad part XC2V1000-4-FG456 +setting FastLoad define:NDEBUG true +setting FastLoad define:HANDELCV3 false +setting FastLoad define:SIMULATE false +setting FastLoad define:DEBUG false +setting FastLoad define:USE_ true +setting FastLoad define:USE_RC100 false +setting FastLoad define:NSIMULATE false +setting FastLoad define:USE_SIM false +setting FastLoad define:USE_ADMXRC2 false +setting FastLoad define:USE_NIOS false +setting FastLoad define:USE_NDB false +setting FastLoad define:USE_RC1000 false +setting FastLoad define:USE_RC200 false +setting FastLoad define:USE_RC200E true +setting FastLoad define:USE_ARMSTRIPE false +setting FastLoad define:USE_EDB false +setting FastLoad define:USE_V2PRO false +setting FastLoad define:USE_MV2P false +setting FastLoad define:RC200 false +setting FastLoad lib:stdlib.hcl true +setting FastLoad lib:rc100.hcl false +setting FastLoad lib:pal_rc100.hcl false +setting FastLoad lib:pal_framebuffer16.hcl false +setting FastLoad lib:sim.hcl false +setting FastLoad lib:pal_sim.hcl false +setting FastLoad lib:admxrc2.hcl false +setting FastLoad lib:pal_admxrc2.hcl false +setting FastLoad lib:pal_console.hcl false +setting FastLoad lib:ndb.hcl false +setting FastLoad lib:pal_ndb.hcl false +setting FastLoad lib:rc1000.hcl false +setting FastLoad lib:pal_rc1000.hcl false +setting FastLoad lib:rc200.hcl false +setting FastLoad lib:pal_rc200.hcl false +setting FastLoad lib:rc200e.hcl true +setting FastLoad lib:pal_rc200e.hcl true +setting FastLoad lib:pal_keyboard.hcl false +setting FastLoad lib:pal_framebuffer8.hcl false +setting FastLoad lib:pal_framebufferdb.hcl false +setting FastLoad lib:edb.hcl false +setting FastLoad lib:pal_edb.hcl false +setting FastLoad lib:mv2p.hcl false +setting FastLoad lib:pal_mv2p.hcl false +setting FastLoad lib:pal_mouse.hcl false +setting FastLoad ansimodules:..\\..\\..\\Software\\Lib\\PalSim.lib false +setting FastLoad "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\include" false +setting FastLoad "libdir:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\lib" false +setting FastLoad "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\includes" false +setting FastLoad "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\" false +setting FastLoad include:..\\..\\..\\include false +setting FastLoad include:include true +setting FastLoad include:..\\Support_Libs\\debug false +setting FastLoad include:C:\\Project_CVS\\Support_Libs\\debug false +setting FastLoad "lib:C:\\Program Files\\Celoxica\\PDK\\Hardware\\Lib\\stdlib.hcl" false +setting FastLoad "include:C:\\Program Files\\celoxica\\pdk\\hardware\\include" true +setting FastLoad "libdir:C:\\Program Files\\celoxica\\pdk\\hardware\\lib" true +setting FastLoad define:HAVE_DEBUG false +setting FastLoad define:HAVE_SMARTMEDIA false +setting FastLoad define:USE_RUNFFT true +setting FastLoad define:HARDWARE_MULTIPLY true +setting FastLoad define:PERFORM_FFT_CALCULATION true +setting FastLoad define:USE_UNSIGNED_AUDIO false +setting FastLoad include:..\\..\\Support_Libs\\debug false +setting FastLoad define:_CONFIGURATION_HCH true +setting FastLoad include:data true +command FastLoad "cd FastLoad" +command FastLoad "call edifmake_rc200_unoptimized Graphic_Equalizer" +output FastLoad bin\\Graphic_Equalizer.bit +setting Full_Debug debug true +setting Full_Debug warnings true +setting Full_Debug parfunc false +setting Full_Debug parchan false +setting Full_Debug parmem false +setting Full_Debug rewrite true +setting Full_Debug high true +setting Full_Debug cse true +setting Full_Debug pcse true +setting Full_Debug rcse true +setting Full_Debug cr true +setting Full_Debug rcr true +setting Full_Debug browse true +setting Full_Debug estimate false +setting Full_Debug noTimeCon false +setting Full_Debug ignoreInclDirs false +setting Full_Debug ignoreLibDirs false +setting Full_Debug noFastCarry false +setting Full_Debug mapper true +setting Full_Debug netlistSimulator false +setting Full_Debug useCustomBuild false +setting Full_Debug exclude false +setting Full_Debug target edif +setting Full_Debug target.compile edif +setting Full_Debug family XilinxVirtexII +setting Full_Debug family.lib none +setting Full_Debug vTool Generic +setting Full_Debug netExp speed +setting Full_Debug outDir Full_Debug +setting Full_Debug intDir Full_Debug +setting Full_Debug part XC2V1000-4-FG456 +setting Full_Debug define:NDEBUG true +setting Full_Debug define:USE_ true +setting Full_Debug define:USE_RC200E true +setting Full_Debug "include:C:\\Program Files\\celoxica\\pdk\\hardware\\include" true +setting Full_Debug include:include true +setting Full_Debug include:..\\Support_Libs\\debug true +setting Full_Debug lib:stdlib.hcl true +setting Full_Debug lib:rc200e.hcl true +setting Full_Debug lib:pal_rc200e.hcl true +setting Full_Debug "libdir:C:\\Program Files\\celoxica\\pdk\\hardware\\lib" true +setting Full_Debug define:HANDELCV3 false +setting Full_Debug define:SIMULATE false +setting Full_Debug define:DEBUG false +setting Full_Debug define:USE_RC100 false +setting Full_Debug define:NSIMULATE false +setting Full_Debug define:USE_SIM false +setting Full_Debug define:USE_ADMXRC2 false +setting Full_Debug define:USE_NIOS false +setting Full_Debug define:USE_NDB false +setting Full_Debug define:USE_RC1000 false +setting Full_Debug define:USE_RC200 false +setting Full_Debug define:USE_ARMSTRIPE false +setting Full_Debug define:USE_EDB false +setting Full_Debug define:USE_V2PRO false +setting Full_Debug define:USE_MV2P false +setting Full_Debug define:RC200 false +setting Full_Debug "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\include" false +setting Full_Debug "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\includes" false +setting Full_Debug "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\" false +setting Full_Debug include:..\\..\\..\\include false +setting Full_Debug include:C:\\Project_CVS\\Support_Libs\\debug false +setting Full_Debug lib:rc100.hcl false +setting Full_Debug lib:pal_rc100.hcl false +setting Full_Debug lib:pal_framebuffer16.hcl false +setting Full_Debug lib:sim.hcl false +setting Full_Debug lib:pal_sim.hcl false +setting Full_Debug lib:admxrc2.hcl false +setting Full_Debug lib:pal_admxrc2.hcl false +setting Full_Debug lib:pal_console.hcl false +setting Full_Debug lib:ndb.hcl false +setting Full_Debug lib:pal_ndb.hcl false +setting Full_Debug lib:rc1000.hcl false +setting Full_Debug lib:pal_rc1000.hcl false +setting Full_Debug lib:rc200.hcl false +setting Full_Debug lib:pal_rc200.hcl false +setting Full_Debug lib:pal_keyboard.hcl false +setting Full_Debug lib:pal_framebuffer8.hcl false +setting Full_Debug lib:pal_framebufferdb.hcl false +setting Full_Debug lib:edb.hcl false +setting Full_Debug lib:pal_edb.hcl false +setting Full_Debug lib:mv2p.hcl false +setting Full_Debug lib:pal_mv2p.hcl false +setting Full_Debug lib:pal_mouse.hcl false +setting Full_Debug "lib:C:\\Program Files\\Celoxica\\PDK\\Hardware\\Lib\\stdlib.hcl" false +setting Full_Debug "libdir:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\lib" false +setting Full_Debug ansimodules:..\\..\\..\\Software\\Lib\\PalSim.lib false +setting Full_Debug define:HAVE_DEBUG true +setting Full_Debug include:..\\..\\Support_Libs\\debug false +setting Full_Debug define:HAVE_SMARTMEDIA true +setting Full_Debug define:USE_RUNFFT true +setting Full_Debug define:HARDWARE_MULTIPLY true +setting Full_Debug define:PERFORM_FFT_CALCULATION true +setting Full_Debug define:USE_UNSIGNED_AUDIO false +setting Full_Debug define:_CONFIGURATION_HCH true +setting Full_Debug include:data true +command Full_Debug "cd Full_Debug" +command Full_Debug "call edifmake_rc200_unoptimized Graphic_Equalizer" +output Full_Debug bin\\Graphic_Equalizer.bit +setting Full debug true +setting Full warnings true +setting Full parfunc false +setting Full parchan false +setting Full parmem false +setting Full rewrite true +setting Full high true +setting Full cse true +setting Full pcse true +setting Full rcse true +setting Full cr true +setting Full rcr true +setting Full browse true +setting Full estimate false +setting Full noTimeCon false +setting Full ignoreInclDirs false +setting Full ignoreLibDirs false +setting Full noFastCarry false +setting Full mapper true +setting Full netlistSimulator false +setting Full useCustomBuild false +setting Full exclude false +setting Full target edif +setting Full target.compile edif +setting Full family XilinxVirtexII +setting Full family.lib none +setting Full vTool Generic +setting Full netExp speed +setting Full outDir Full +setting Full intDir Full +setting Full part XC2V1000-4-FG456 +setting Full define:NDEBUG true +setting Full define:USE_ true +setting Full define:USE_RC200E true +setting Full "include:C:\\Program Files\\celoxica\\pdk\\hardware\\include" true +setting Full include:include true +setting Full include:..\\Support_Libs\\debug false +setting Full lib:stdlib.hcl true +setting Full lib:rc200e.hcl true +setting Full lib:pal_rc200e.hcl true +setting Full "libdir:C:\\Program Files\\celoxica\\pdk\\hardware\\lib" true +setting Full define:HANDELCV3 false +setting Full define:SIMULATE false +setting Full define:DEBUG false +setting Full define:USE_RC100 false +setting Full define:NSIMULATE false +setting Full define:USE_SIM false +setting Full define:USE_ADMXRC2 false +setting Full define:USE_NIOS false +setting Full define:USE_NDB false +setting Full define:USE_RC1000 false +setting Full define:USE_RC200 false +setting Full define:USE_ARMSTRIPE false +setting Full define:USE_EDB false +setting Full define:USE_V2PRO false +setting Full define:USE_MV2P false +setting Full define:RC200 false +setting Full "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\include" false +setting Full "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\includes" false +setting Full "include:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\" false +setting Full include:..\\..\\..\\include false +setting Full include:C:\\Project_CVS\\Support_Libs\\debug false +setting Full lib:rc100.hcl false +setting Full lib:pal_rc100.hcl false +setting Full lib:pal_framebuffer16.hcl false +setting Full lib:sim.hcl false +setting Full lib:pal_sim.hcl false +setting Full lib:admxrc2.hcl false +setting Full lib:pal_admxrc2.hcl false +setting Full lib:pal_console.hcl false +setting Full lib:ndb.hcl false +setting Full lib:pal_ndb.hcl false +setting Full lib:rc1000.hcl false +setting Full lib:pal_rc1000.hcl false +setting Full lib:rc200.hcl false +setting Full lib:pal_rc200.hcl false +setting Full lib:pal_keyboard.hcl false +setting Full lib:pal_framebuffer8.hcl false +setting Full lib:pal_framebufferdb.hcl false +setting Full lib:edb.hcl false +setting Full lib:pal_edb.hcl false +setting Full lib:mv2p.hcl false +setting Full lib:pal_mv2p.hcl false +setting Full lib:pal_mouse.hcl false +setting Full "lib:C:\\Program Files\\Celoxica\\PDK\\Hardware\\Lib\\stdlib.hcl" false +setting Full "libdir:R:\\c2hardw\\Program Files\\celoxica\\pdk\\hardware\\lib" false +setting Full ansimodules:..\\..\\..\\Software\\Lib\\PalSim.lib false +setting Full define:HAVE_DEBUG false +setting Full include:..\\..\\Support_Libs\\debug false +setting Full define:HAVE_SMARTMEDIA true +setting Full define:USE_RUNFFT true +setting Full define:HARDWARE_MULTIPLY true +setting Full define:PERFORM_FFT_CALCULATION true +setting Full define:USE_UNSIGNED_AUDIO false +setting Full define:_CONFIGURATION_HCH true +setting Full include:data true +command Full "cd Full" +command Full "call edifmake_rc200_unoptimized Graphic_Equalizer" +output Full bin\\Graphic_Equalizer.bit +document include\\audio.hch { + type hch +} +document include\\configuration.hch { + type hch +} +document include\\display.hch { + type hch +} +document include\\display_shared.hch { + type hch +} +document include\\eventhandler.hch { + type hch +} +document include\\eventhandler_shared.hch { + type hch +} +document include\\events.hch { + type hch +} +document include\\fft.hch { + type hch +} +document include\\mouse.hch { + type hch +} +document include\\mouse_shared.hch { + type hch +} +document include\\smartmedia.hch { + type hch +} +document include\\smartmedia_shared.hch { + type hch +} +document include\\weights_256.hch { + type hch +} +document src\\audio.hcc { + type hcc +} +document src\\display.hcc { + type hcc +} +document src\\eventhandler.hcc { + type hcc +} +document src\\events.hcc { + type hcc +} +document src\\fft.hcc { + type hcc +} +document src\\main.hcc { + type hcc +} +document src\\mouse.hcc { + type hcc +} +document src\\smartmedia.hcc { + type hcc +} +document ..\\support_libs\\debug\\debug.hcc { + type hcc +} +document ..\\support_libs\\debug\\debug.hch { + type hch +} +document src\\runfft.hcc { + type hcc +} diff --git a/Graphic_Equalizer_Split/Graphic_Equalizer.hw b/Graphic_Equalizer_Split/Graphic_Equalizer.hw new file mode 100644 index 0000000..59b9054 --- /dev/null +++ b/Graphic_Equalizer_Split/Graphic_Equalizer.hw @@ -0,0 +1,2 @@ +#@hw +project graphic_equalizer.hp diff --git a/Graphic_Equalizer_Split/Graphic_Equalizer.pref b/Graphic_Equalizer_Split/Graphic_Equalizer.pref new file mode 100644 index 0000000..50fac51 --- /dev/null +++ b/Graphic_Equalizer_Split/Graphic_Equalizer.pref @@ -0,0 +1,164 @@ +[WorkState_v1_2.Frames.ChildFrames.Document-16] +ptn_Child1=ViewFrame-0 +[WorkState_v1_2.Frames.ChildFrames.Document-16.ViewFrame-0] +DocPathName=C:\Project_CVS\Graphic_Equalizer\include\audio.hch +DocumentString= +DocTemplateIndex=5 +WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPMCAAAAAAMCAAAAAAICDAAAAAAGBAAAAA +IsActiveChildFrame=False +[WorkState_v1_2.Frames.ChildFrames.Document-8] +ptn_Child1=ViewFrame-0 +[WorkState_v1_2.Frames.ChildFrames.Document-8.ViewFrame-0] +DocPathName=C:\Project_CVS\Graphic_Equalizer\src\display.hcc +DocumentString= +DocTemplateIndex=4 +WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPAAAAAAAAAAAAAAAAMPCAAAAAEDBAAAAA +IsActiveChildFrame=False +[WorkState_v1_2.Frames.ChildFrames.Document-9] +ptn_Child1=ViewFrame-0 +[WorkState_v1_2.Frames.ChildFrames.Document-9.ViewFrame-0] +DocPathName=C:\Project_CVS\Graphic_Equalizer\src\audio.hcc +DocumentString= +DocTemplateIndex=4 +WindowPlacement=MCAAAAAACAAAAAAADAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPGBAAAAAAGBAAAAAACBDAAAAAKEBAAAAA +IsActiveChildFrame=True +[WorkState_v1_2.Frames.ChildFrames.Document-10] +ptn_Child1=ViewFrame-0 +[WorkState_v1_2.Frames.ChildFrames.Document-10.ViewFrame-0] +DocPathName=C:\Project_CVS\Graphic_Equalizer\include\display_shared.hch +DocumentString= +DocTemplateIndex=5 +WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPCEAAAAAACEAAAAAAGBDAAAAAMKBAAAAA +IsActiveChildFrame=False +[WorkState_v1_2.Frames.ChildFrames.Document-11] +ptn_Child1=ViewFrame-0 +[WorkState_v1_2.Frames.ChildFrames.Document-11.ViewFrame-0] +DocPathName=C:\project_cvs\graphic_equalizer\include\display.hch +DocumentString= +DocTemplateIndex=5 +WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPIFAAAAAAIFAAAAAAHEDAAAAACMBAAAAA +IsActiveChildFrame=False +[WorkState_v1_2.Frames.ChildFrames.Document-12] +ptn_Child1=ViewFrame-0 +[WorkState_v1_2.Frames.ChildFrames.Document-12.ViewFrame-0] +DocPathName=C:\Project_CVS\Graphic_Equalizer\include\mouse.hch +DocumentString= +DocTemplateIndex=5 +WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPOGAAAAAAOGAAAAAANFDAAAAAINBAAAAA +IsActiveChildFrame=False +[WorkState_v1_2.Frames.ChildFrames.Document-13] +ptn_Child1=ViewFrame-0 +[WorkState_v1_2.Frames.ChildFrames.Document-13.ViewFrame-0] +DocPathName=C:\Project_CVS\Graphic_Equalizer\include\events.hch +DocumentString= +DocTemplateIndex=5 +WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPGBAAAAAAGBAAAAAACBDAAAAAKEBAAAAA +IsActiveChildFrame=False +[WorkState_v1_2.Frames.ChildFrames.Document-14] +ptn_Child1=ViewFrame-0 +[WorkState_v1_2.Frames.ChildFrames.Document-14.ViewFrame-0] +DocPathName=C:\Project_CVS\Graphic_Equalizer\include\eventhandler_shared.hch +DocumentString= +DocTemplateIndex=5 +WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPIFAAAAAAIFAAAAAAEFDAAAAAMIBAAAAA +IsActiveChildFrame=False +[WorkState_v1_2.Frames.ChildFrames.Document-15] +ptn_Child1=ViewFrame-0 +[WorkState_v1_2.Frames.ChildFrames.Document-15.ViewFrame-0] +DocPathName=C:\Project_CVS\Graphic_Equalizer\include\audio.hch +DocumentString= +DocTemplateIndex=5 +WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPMCAAAAAAMCAAAAAAICDAAAAAAGBAAAAA +IsActiveChildFrame=False +[WorkState_v1_2.Frames.ChildFrames.Document-4] +ptn_Child1=ViewFrame-0 +[WorkState_v1_2.Frames.ChildFrames.Document-4.ViewFrame-0] +DocPathName=C:\Project_CVS\Graphic_Equalizer\src\main.hcc +DocumentString= +DocTemplateIndex=4 +WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPMCAAAAAAMCAAAAAAICDAAAAAAGBAAAAA +IsActiveChildFrame=False +[WorkState_v1_2.Frames.ChildFrames.Document-5] +ptn_Child1=ViewFrame-0 +[WorkState_v1_2.Frames.ChildFrames.Document-5.ViewFrame-0] +DocPathName=C:\Project_CVS\Graphic_Equalizer\include\smartmedia.hch +DocumentString= +DocTemplateIndex=5 +WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPIFAAAAAAIFAAAAAAEFDAAAAAMIBAAAAA +IsActiveChildFrame=False +[WorkState_v1_2.Frames.ChildFrames.Document-6] +ptn_Child1=ViewFrame-0 +[WorkState_v1_2.Frames.ChildFrames.Document-6.ViewFrame-0] +DocPathName=C:\Project_CVS\Graphic_Equalizer\include\fft.hch +DocumentString= +DocTemplateIndex=5 +WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPOGAAAAAAOGAAAAAAKGDAAAAACKBAAAAA +IsActiveChildFrame=False +[WorkState_v1_2.Frames.ChildFrames.Document-7] +ptn_Child1=ViewFrame-0 +[WorkState_v1_2.Frames.ChildFrames.Document-7.ViewFrame-0] +DocPathName=C:\Project_CVS\Graphic_Equalizer\include\configuration.hch +DocumentString= +DocTemplateIndex=5 +WindowPlacement=MCAAAAAACAAAAAAADAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPGBAAAAAAGBAAAAAACBDAAAAAKEBAAAAA +IsActiveChildFrame=True +[WorkState_v1_2] +ptn_Child1=Frames +ptn_Child2=DK Design Suite Preferences +ptn_Child3=Breakpoints +ptn_Child4=WatchVars +[WorkState_v1_2.Frames] +ptn_Child1=ChildFrames +[WorkState_v1_2.Frames.ChildFrames] +ptn_Child1=Document-0 +ptn_Child2=Document-1 +ptn_Child3=Document-2 +ptn_Child4=Document-3 +[WorkState_v1_2.Frames.ChildFrames.Document-0] +ptn_Child1=ViewFrame-0 +[WorkState_v1_2.Frames.ChildFrames.Document-0.ViewFrame-0] +DocPathName=C:\Project_CVS\Graphic_Equalizer\src\display.hcc +DocumentString= +DocTemplateIndex=4 +WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPAAAAAAAAAAAAAAAAALCAAAAAADBAAAAA +IsActiveChildFrame=False +[WorkState_v1_2.Frames.ChildFrames.Document-1] +ptn_Child1=ViewFrame-0 +[WorkState_v1_2.Frames.ChildFrames.Document-1.ViewFrame-0] +DocPathName=C:\Project_CVS\Graphic_Equalizer\src\eventhandler.hcc +DocumentString= +DocTemplateIndex=4 +WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPCEAAAAAACEAAAAAAGPCAAAAAGHBAAAAA +IsActiveChildFrame=False +[WorkState_v1_2.Frames.ChildFrames.Document-2] +ptn_Child1=ViewFrame-0 +[WorkState_v1_2.Frames.ChildFrames.Document-2.ViewFrame-0] +DocPathName=C:\Project_CVS\Graphic_Equalizer\include\eventhandler.hch +DocumentString= +DocTemplateIndex=5 +WindowPlacement=MCAAAAAACAAAAAAADAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPIFAAAAAAIFAAAAAAMADAAAAAMIBAAAAA +IsActiveChildFrame=True +[WorkState_v1_2.Frames.ChildFrames.Document-3] +ptn_Child1=ViewFrame-0 +[WorkState_v1_2.Frames.ChildFrames.Document-3.ViewFrame-0] +DocPathName=C:\Project_CVS\Graphic_Equalizer\include\eventhandler_shared.hch +DocumentString= +DocTemplateIndex=5 +WindowPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPMPPPPPPPJOPPPPPPMCAAAAAAMCAAAAAAAOCAAAAAAGBAAAAA +IsActiveChildFrame=False +[WorkState_v1_2.DK Design Suite Preferences] +Active Project Index=0 +Active Configuration Index=4 +[WorkState_v1_2.WatchVars] +ptn_Child1=Watch0 +ptn_Child2=Watch1 +ptn_Child3=Watch2 +ptn_Child4=Watch3 +[WorkState_v1_2.WatchVars.Watch0] +empty=True +[WorkState_v1_2.WatchVars.Watch1] +empty=True +[WorkState_v1_2.WatchVars.Watch2] +empty=True +[WorkState_v1_2.WatchVars.Watch3] +empty=True diff --git a/Graphic_Equalizer_Split/data/graph_mask.raw b/Graphic_Equalizer_Split/data/graph_mask.raw new file mode 100644 index 0000000..9125381 --- /dev/null +++ b/Graphic_Equalizer_Split/data/graph_mask.raw @@ -0,0 +1,639 @@ +€€€€€~~~~~}}}}|||||{{{{{zzzzzzyyyxxxxxxwwwwwvvvvvvuuuutttttssssssrrrrrrrqqqpppppppoooooonnnnmmmmmmllllllkkkkkkkkjjjiiiiiiiihhhhhhggggggggfffffeeeeeeedddddddddcccccccbbbbbbbaaaaaaaa``````````_______^^^^^^^^^^]]]]]]]]]]]]\\\\\\\\\\\\\[[[[[[[[[[ZZZZZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[\\\\\\\\\\\\]]]]]]]]]]]]]^^^^^^^^^^______``````````aaaaaaaaabbbbbbccccccccddddddddeeeeeeeefffffggggggghhhhhhhiiiiiiijjjjkkkkkkklllllllmmmmmmnnnnooooooppppppqqqqrrrrrrsssssstttttuuuuvvvvvvwwwwwxxxxxxxyyzzzzzz{{{{{|||||}}}}~~~~~€€€€€€€€€€~~~~~}}}}|||||{{{{{zzzzzzyyyxxxxxxwwwwwvvvvvvuuuutttttssssssrrrrrrqqqqppppppooooooonnnmmmmmmmllllllkkkkkkjjjjjiiiiiihhhhhhhhgggggggffffeeeeeeeeedddddddccccccccbbbbbbaaaaaaaaa`````````______^^^^^^^^^^^]]]]]]]]]]]\\\\\\\\\\\\\[[[[[[[[[ZZZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZ[[[[[[[[[\\\\\\\\\\\\]]]]]]]]]]]^^^^^^^^^^^^______`````````aaaaaaaabbbbbbbcccccccddddddddeeeeeeeeffffgggggggghhhhhhhiiiiiijjjjjkkkkkkkllllllmmmmmmnnnnooooooppppppqqqqrrrrrrssssssstttttuuuvvvvvvvwwwwwxxxxxxyyzzzzzzz{{{{{|||||}}}~~~~~€€€€€€€€~~~~~}}}}|||||{{{{{zzzzzyyyxxxxxxxwwwwwvvvvvvuuuutttttssssssrrrrrqqqqqpppppoooooonnnnnmmmmmmlllllllkkkkkkjjjjiiiiiiihhhhhhggggggggfffffeeeeeeeddddddddcccccccbbbbbbbaaaaaaaa`````````______^^^^^^^^^^]]]]]]]]]]]]\\\\\\\\\\\[[[[[[[[[ZZZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZ[[[[[[[[[\\\\\\\\\\\]]]]]]]]]]]^^^^^^^^^^______`````````aaaaaaaaabbbbbbccccccccdddddddeeeeeeeefffffggggggghhhhhhiiiiiiiijjjjkkkkkkllllllmmmmmmnnnnnooooooopppppqqqqqrrrrrsssssstttttuuuuvvvvvvwwwwwxxxxxxyyyyzzzzz{{{{{|||||}}}}~~~~~€€€€€~~~~~}}}|||||{{{{{zzzzzyyyyxxxxxxwwwwwvvvvvuuuuttttttsssssssrrrrrqqqpppppppoooooonnnnmmmmmmllllllkkkkkkjjjjjiiiiiiihhhhhhhggggggfffffeeeeeeeedddddddccccccccbbbbbbaaaaaaaa``````````______^^^^^^^^^]]]]]]]]]]]\\\\\\\\\\\[[[[[[[[[ZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZ[[[[[[[[\\\\\\\\\\\\]]]]]]]]]]]^^^^^^^^^______``````````aaaaaaabbbbbbbcccccccddddddddeeeeeeefffffgggggghhhhhhhhiiiiiijjjjjkkkkkklllllllmmmmmmnnnnooooooppppppqqqqrrrrrssssssttttttuuuuvvvvvwwwwwxxxxxxyyyyzzzzz{{{{{|||||}}}}~~~~~€€~~~~~}}}}|||||{{{{{zzzzzyyyyxxxxxxwwwwwvvvvvuuuuttttttsssssrrrrrrqqqqppppppooooooonnnmmmmmmmllllllkkkkkkjjjjiiiiiiihhhhhhhgggggggffffeeeeeeeddddddddcccccccccbbbbbaaaaaaa`````````______^^^^^^^^^^]]]]]]]]]]\\\\\\\\\\\[[[[[[[[[ZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZ[[[[[[[[[\\\\\\\\\\\]]]]]]]]]]^^^^^^^^^^_______````````aaaaaaaabbbbbcccccccccdddddddeeeeeeeefffgggggggghhhhhhiiiiiiiijjjkkkkkkkllllllmmmmmmnnnnooooooppppppqqqqrrrrrrssssstttttttuuuvvvvvwwwwwxxxxxxxyyyzzzzz{{{{{|||||}}}}~~~~~€~~~~~}}}}|||||{{{{{zzzzzyyyyxxxxxxwwwwwvvvvvuuuuttttttsssssrrrrrrqqqqppppppooooonnnnnmmmmmmlllllllkkkkkkjjjjiiiiiihhhhhhhgggggggfffffeeeeeeeddddddddcccccccbbbbbaaaaaaaa````````_______^^^^^^^^^^]]]]]]]]]]\\\\\\\\\\[[[[[[[ZZZZZZZZZZZZZZYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYZZZZZZZZZZZZZ[[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^^^______`````````aaaaaaabbbbbccccccccdddddddeeeeeeeefffffgggggghhhhhhhhiiiiiijjjjkkkkkkllllllmmmmmmnnnnnooooopppppppqqqrrrrrrrsssssttttttuuuuvvvvvwwwwwxxxxxxyyyyzzzzz{{{{{|||||}}}~~~~~~~~~~}}}}|||||{{{{{zzzzzyyyxxxxxxxwwwwwvvvvvuuutttttttsssssrrrrrrqqqqpppppoooooonnnnmmmmmmllllllkkkkkkjjjjjiiiiiiihhhhhhgggggggffffeeeeeeeedddddddccccccccbbbbbaaaaaaa`````````______^^^^^^^^^]]]]]]]]]]\\\\\\\\\\[[[[[[[ZZZZZZZZZZZZZYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYZZZZZZZZZZZZ[[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^_______````````aaaaaaaabbbbbcccccccddddddddeeeeeeeffffgggggggghhhhhhiiiiiijjjjjkkkkkklllllllmmmmmmnnnnoooooopppppqqqqrrrrrrsssssttttttuuuuvvvvvwwwwwxxxxxxyyyyzzzzz{{{{{|||||}}}}~~~~~~~~~~}}}|||||{{{{{zzzzzyyyyxxxxxwwwwwwvvvvvuuuuttttttsssssrrrrrrrqqqpppppooooooonnnmmmmmmmllllllkkkkkkjjjjiiiiiihhhhhhhhggggggfffffeeeeeeddddddddcccccccbbbbbaaaaaaaaa```````_______^^^^^^^^]]]]]]]]]]\\\\\\\\\\[[[[[[[[ZZZZZZZZZZZYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYZZZZZZZZZZZZ[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^^______````````aaaaaaaabbbbbccccccccdddddddeeeeeeefffffgggggghhhhhhhiiiiiiijjjkkkkkkkllllllmmmmmmnnnnoooooopppppqqqqrrrrrrsssssttttttuuuuvvvvvwwwwwwxxxxxyyyyzzzzz{{{{{|||||}}}}~~~~~~~~~~}}}}|||||{{{{{zzzzzyyyyxxxxxwwwwwwvvvvvuuuutttttssssssrrrrrqqqqppppppoooooonnnnmmmmmmlllllllkkkkkkjjjjiiiiiihhhhhhggggggggfffeeeeeeeeddddddccccccccbbbbbaaaaaaaa````````______^^^^^^^^^]]]]]]]]]\\\\\\\\\\[[[[[[[ZZZZZZZZZZZYYYYYYYYYYYYYXXXXXXXXXXXXXXXWWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWXXXXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZZ[[[[[[[[\\\\\\\\\\]]]]]]]]]^^^^^^^^_______```````aaaaaaaaabbbbbcccccccdddddddeeeeeeeffffggggggghhhhhhhiiiiiijjjjkkkkkkllllllmmmmmmnnnnoooooopppppppqqqrrrrrssssssstttttuuuvvvvvwwwwwwwxxxxxyyyzzzzz{{{{{|||||}}}}~~~~~~~~~}}}}|||||{{{{{zzzzzyyyyxxxxxwwwwwwvvvvvuuuutttttssssssrrrrrqqqqppppppoooooonnnnmmmmmllllllkkkkkkjjjjjiiiiiiihhhhhhggggggfffffeeeeeeddddddddcccccccbbbbbaaaaaaaa```````_______^^^^^^^^]]]]]]]]]\\\\\\\\\\[[[[[[ZZZZZZZZZZZZYYYYYYYYYYYYXXXXXXXXXXXXXXWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWXXXXXXXXXXXXXYYYYYYYYYYYYYZZZZZZZZZZZ[[[[[[\\\\\\\\\\]]]]]]]]]^^^^^^^^^______````````aaaaaaabbbbbccccccccdddddddeeeeeefffffggggggghhhhhhiiiiiijjjjjkkkkkklllllllmmmmmnnnoooooooppppppqqqqrrrrrsssssstttttuuuuvvvvvwwwwwwxxxxxyyyyzzzzz{{{{{|||||}}}~~~~~~~~}}}}|||||{{{{{zzzzzyyyxxxxxwwwwwwwvvvvvuuutttttsssssssrrrrrqqqpppppppooooonnnmmmmmmmllllllkkkkkkjjjjiiiiiihhhhhhggggggggffffeeeeeeeddddddccccccccbbbbbaaaaaaa````````______^^^^^^^^]]]]]]]]]]\\\\\\\\[[[[[[[ZZZZZZZZZZZYYYYYYYYYYYYXXXXXXXXXXXXXWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWXXXXXXXXXXXXYYYYYYYYYYYYYZZZZZZZZZZZ[[[[[[\\\\\\\\\]]]]]]]]]]^^^^^^^_______```````aaaaaaaabbbbbcccccccddddddeeeeeeeeffffggggggghhhhhhiiiiiiijjjkkkkkkkllllllmmmmmmnnnnoooooppppppqqqqrrrrrsssssstttttuuuuvvvvvwwwwwwxxxxxyyyyzzzzz{{{{{|||||}}}}~~~~~}}}|||||{{{{{zzzzzzzyyxxxxxwwwwwwvvvvvuuuutttttssssssrrrrrqqqqppppppooooonnnnmmmmmmlllllllkkkkkkjjjjiiiiiihhhhhhggggggfffffeeeeeeedddddddccccccbbbbbaaaaaaaa```````_______^^^^^^^]]]]]]]]]\\\\\\\\\\[[[[[[ZZZZZZZZZZYYYYYYYYYYYXXXXXXXXXXXXXXWWWWWWWWWVVVVVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVWWWWWWWWXXXXXXXXXXXXXXYYYYYYYYYYYZZZZZZZZZZ[[[[[[[\\\\\\\\\\]]]]]]]]^^^^^^^^______````````aaaaaaabbbbbccccccddddddddeeeeeefffffgggggghhhhhhhiiiiiijjjjkkkkkkllllllmmmmmmnnnnoooooppppppqqqqrrrrrsssssstttttuuuuvvvvvwwwwwwxxxxxyyyzzzzzz{{{{{|||||}}}}~~~~}}|||||{{{{{zzzzzzyyyxxxxxwwwwwwvvvvvuuuutttttssssssrrrrrqqqqpppppoooooonnnnmmmmmmlllllkkkkkkjjjjjiiiiiiihhhhhhggggggffffeeeeeeedddddddcccccccbbbbaaaaaaa`````````_____^^^^^^^^]]]]]]]]\\\\\\\\\[[[[[[[[ZZZZZZZZZZYYYYYYYYYYXXXXXXXXXXXXWWWWWWWWWWVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVWWWWWWWWWWXXXXXXXXXXXXXYYYYYYYYYYZZZZZZZZZZ[[[[[[[\\\\\\\\\]]]]]]]]]^^^^^^^_____`````````aaaaaaaabbbccccccccddddddeeeeeeeefffggggggghhhhhhiiiiiijjjjjkkkkkklllllmmmmmmmnnnooooooopppppqqqrrrrrssssssstttttuuuvvvvvwwwwwwwxxxxxyyzzzzzz{{{{{|||||}}}~~}}}|||||{{{{{zzzzzzyyyxxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqqpppppoooooonnnnmmmmmmlllllkkkkkkjjjjiiiiiihhhhhhgggggggfffffeeeeeeddddddccccccccbbbbbaaaaaaa````````_____^^^^^^^]]]]]]]]]\\\\\\\\\[[[[[[ZZZZZZZZZZYYYYYYYYYYYXXXXXXXXXXXWWWWWWWWWVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVWWWWWWWWWXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZ[[[[[[\\\\\\\\\]]]]]]]]^^^^^^^^_____```````aaaaaaaabbbbbcccccccdddddddeeeeeefffffgggggghhhhhhiiiiiiijjjkkkkkkklllllmmmmmmnnnnoooooopppppqqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxxyyzzzzzzz{{{{{|||||}}~}}||||||{{{{{zzzzzyyxxxxxxxwwwwwvvvvvuuutttttsssssrrrrrrrqqqpppppooooooonnnmmmmmlllllllkkkkkkjjjjiiiiiihhhhhhggggggffffeeeeeeeeddddddccccccbbbbbaaaaaaaa```````_____^^^^^^^^]]]]]]]]\\\\\\\\\[[[[[[ZZZZZZZZZZYYYYYYYYYYXXXXXXXXXXXXWWWWWWWWVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVWWWWWWWWWXXXXXXXXXXXYYYYYYYYYYZZZZZZZZZZ[[[[[[\\\\\\\\\]]]]]]]]]^^^^^^^_____````````aaaaaaabbbbbcccccccddddddeeeeeeeffffgggggghhhhhhhiiiiiijjjjkkkkkkllllllmmmmmnnnnoooooopppppqqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxxyyyzzzzz{{{{{||||||}}}}|||||{{{{{zzzzzyyxxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqqpppppoooooonnnnmmmmmllllllkkkkkkkjjjiiiiiiihhhhhhggggggffffeeeeeeddddddccccccccbbbbbaaaaaa````````_____^^^^^^^^]]]]]]]]\\\\\\\\\[[[[[[ZZZZZZZZZYYYYYYYYYYXXXXXXXXXXXWWWWWWWVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVWWWWWWWWXXXXXXXXXXXYYYYYYYYYYZZZZZZZZZ[[[[[[\\\\\\\\\]]]]]]]^^^^^^^^^_____```````aaaaaaabbbbbcccccccddddddeeeeeeefffggggggghhhhhhiiiiiijjjjkkkkkkllllllmmmmmnnnnoooooopppppqqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxxyyyzzzzz{{{{{|||||}}|||||{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqqpppppooooonnnnmmmmmmllllllkkkkkjjjjiiiiiihhhhhhgggggggfffffeeeeeeddddddccccccbbbbbaaaaaaaa```````____^^^^^^^^^]]]]]]]\\\\\\\\\[[[[[ZZZZZZZZZZYYYYYYYYYYXXXXXXXXXXWWWWWWWWVVVVVVVVVVVVUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUVVVVVVVVVVVVVWWWWWWWXXXXXXXXXXYYYYYYYYYYZZZZZZZZZZ[[[[[\\\\\\\\\]]]]]]]]^^^^^^^^____````````aaaaaaabbbbbccccccdddddddeeeeeefffffgggggghhhhhhiiiiiiijjjkkkkklllllllmmmmmmnnnnooooopppppqqqrrrrrrrssssstttttuuuvvvvvwwwwwxxxxxyyyyzzzzz{{{{{|||||}||||{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqqpppppooooonnnmmmmmmmlllllkkkkkkjjjjiiiiiihhhhhhggggggffffeeeeeeddddddddccccccbbbbaaaaaaa````````_____^^^^^^^]]]]]]]]\\\\\\\\\[[[[[ZZZZZZZZYYYYYYYYYYXXXXXXXXXXWWWWWWWWVVVVVVVVVVVVUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUVVVVVVVVVVVVVWWWWWWWXXXXXXXXXXYYYYYYYYYYZZZZZZZZZ[[[[[\\\\\\\\\]]]]]]]^^^^^^^^_____```````aaaaaaaabbbcccccccdddddddeeeeeeffffgggggghhhhhhhiiiiiijjjjkkkkkklllllmmmmmmnnnnooooopppppqqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyzzzzz{{{{{||||||||{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuutttttsssssrrrrrrrqqppppppooooonnnnmmmmmmlllllkkkkkkkjjjiiiiiiihhhhhhggggggffffeeeeeeddddddcccccccbbbbbaaaaaa```````_____^^^^^^^^]]]]]]]\\\\\\\\\[[[[[ZZZZZZZZZYYYYYYYYYYXXXXXXXXXXWWWWWWVVVVVVVVVVVVVUUUUUUUUUUUUTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTUUUUUUUUUUUUUVVVVVVVVVVVVWWWWWWWXXXXXXXXXXYYYYYYYYYYZZZZZZZZ[[[[[\\\\\\\\\]]]]]]]]^^^^^^^_____````````aaaaaabbbbbccccccddddddeeeeeeefffggggggghhhhhhiiiiiijjjjkkkkkklllllmmmmmmnnnnoooooppppppqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyyzzzzz{{{{{|||||{{{{{zzzzzyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqppppppooooonnnnmmmmmmlllllkkkkkkjjjjiiiiiihhhhhgggggggfffffeeeeeeddddddccccccbbbbaaaaaaaa```````____^^^^^^^]]]]]]]]\\\\\\\\\[[[[[ZZZZZZZZYYYYYYYYYXXXXXXXXXXWWWWWWWWVVVVVVVVVVVUUUUUUUUUUUUTTTTTTTTTTTTTTTSSSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSTTTTTTTTTTTTTTTUUUUUUUUUUUUUVVVVVVVVVVVWWWWWWWXXXXXXXXXXYYYYYYYYYZZZZZZZZZ[[[[[\\\\\\\\\]]]]]]]^^^^^^^^___````````aaaaaaabbbbccccccdddddddeeeeeefffffgggggghhhhhiiiiiijjjjkkkkkklllllmmmmmmmnnnooooopppppppqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyyzzzzz{{{{{||{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqppppppooooonnnnmmmmmllllllkkkkkkjjjjiiiiihhhhhhggggggffffeeeeeedddddddccccccbbbbbaaaaaa````````_____^^^^^^^]]]]]]]]\\\\\\\[[[[[ZZZZZZZZZYYYYYYYYYXXXXXXXXXXWWWWWWVVVVVVVVVVVUUUUUUUUUUUTTTTTTTTTTTTTTTSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTTTTTTUUUUUUUUUUUVVVVVVVVVVVVWWWWWWXXXXXXXXXXYYYYYYYYYZZZZZZZZ[[[[[\\\\\\\\]]]]]]]^^^^^^^^_____```````aaaaaaabbbbbccccccddddddeeeeeeffffgggggghhhhhhhiiiiijjjkkkkkkkllllllmmmmmnnnnoooooppppppqqrrrrrrrssssstttttuuuvvvvvwwwwwxxxxxyyyyzzzzz{{{{{|{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqpppppppooooonnnmmmmmlllllllkkkkkjjjiiiiiiihhhhhhggggggffffeeeeeeddddddcccccccbbbbbaaaaaa``````_____^^^^^^^^]]]]]]]\\\\\\\\[[[[[ZZZZZZZZYYYYYYYYYXXXXXXXXXWWWWWWWVVVVVVVVVVUUUUUUUUUUUUTTTTTTTTTTTTTSSSSSSSSSSRRRRRRRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTTTTTUUUUUUUUUUUVVVVVVVVVVWWWWWWWWXXXXXXXXYYYYYYYYYZZZZZZZZZ[[[[[\\\\\\\]]]]]]]]^^^^^^^_____```````aaaaaabbbbbccccccddddddeeeeeeefffggggggghhhhhhiiiiiijjjjkkkkkllllllmmmmmnnnnoooooppppppqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyzzzzz{{{{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuutttttsssssrrrrrrrqqppppppooooonnnnmmmmmllllllkkkkkjjjjiiiiiihhhhhhhgggggfffffeeeeeeddddddccccccbbbbaaaaaa````````_____^^^^^^]]]]]]]]\\\\\\\[[[[[ZZZZZZZZZYYYYYYYYYXXXXXXXXWWWWWWWVVVVVVVVVVUUUUUUUUUUUTTTTTTTTTTTTSSSSSSSSSSRRRRRRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTTTTUUUUUUUUUUUVVVVVVVVVVWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZ[[[[[\\\\\\\\]]]]]]]^^^^^^^_____```````aaaaaabbbbccccccdddddddeeeeeefffffggggghhhhhhiiiiiijjjjkkkkkllllllmmmmmnnnnoooooppppppqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyyzzzzz{{{{{{zzzzzyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqppppppooooonnnnmmmmmllllllkkkkkjjjjiiiiiihhhhhggggggffffeeeeeedddddddccccccbbbbbaaaaaa``````_____^^^^^^^^]]]]]]\\\\\\\\[[[[[[ZZZZZZZYYYYYYYYYXXXXXXXXXWWWWWWVVVVVVVVVVUUUUUUUUUUTTTTTTTTTTTTTSSSSSSSSRRRRRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRSSSSSSSSSTTTTTTTTTTTTUUUUUUUUUUVVVVVVVVVVWWWWWWWXXXXXXXXYYYYYYYYYZZZZZZZZ[[[[[[\\\\\\\]]]]]]]^^^^^^^_____``````aaaaaaabbbbbccccccddddddeeeeeeffffgggggghhhhhiiiiiiijjjkkkkklllllllmmmmmnnnooooopppppppqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyzzzzz{{{{{zzzzzyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqppppppooooonnnnmmmmmllllllkkkkkjjjjiiiiiihhhhhggggggffffeeeeeeddddddcccccccbbbaaaaaaa```````____^^^^^^^]]]]]]]]\\\\\\\[[[[[ZZZZZZZZYYYYYYYYYXXXXXXXXWWWWWVVVVVVVVVVUUUUUUUUUUTTTTTTTTTTTTTSSSSSSSSSRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQPPPPPPPPPPPPPPPPPPPPOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRSSSSSSSSSTTTTTTTTTTTTUUUUUUUUUUVVVVVVVVVVWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZ[[[[[\\\\\\\\]]]]]]]^^^^^^^^___````````aaaaaabbbbccccccddddddeeeeeeefffggggggghhhhhiiiiiijjjjkkkkkllllllmmmmmnnnnoooooppppppqqrrrrrrrssssstttttuuuvvvvvwwwwwxxxxxyyyzzzzz{{zzzzzyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqpppppppooooonnnmmmmmlllllkkkkkkkjjjiiiiihhhhhhhggggggffffeeeeeeddddddccccccbbbbaaaaaa```````_____^^^^^^]]]]]]]\\\\\\\\[[[[[ZZZZZZZYYYYYYYYYXXXXXXXXWWWWWWVVVVVVVVVVUUUUUUUUUUTTTTTTTTTTTSSSSSSSSRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQPPPPPPPPPPPPPPPOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRSSSSSSSTTTTTTTTTTTTUUUUUUUUUUVVVVVVVVVVWWWWWWXXXXXXXYYYYYYYYYZZZZZZZZ[[[[[\\\\\\\]]]]]]]]^^^^^^_____``````aaaaaabbbbccccccdddddddeeeeeeffffgggggghhhhhhiiiiijjjjkkkkkklllllmmmmmnnnnoooooppppppqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyzzzzz{zzzzyyyyxxxxxwwwwwvvvvvuutttttsssssrrrrrrrqqppppppooooonnnnmmmmmlllllkkkkkkjjjjiiiiihhhhhhgggggfffffeeeeedddddddccccccbbbbbaaaaaa``````____^^^^^^^^]]]]]]\\\\\\\[[[[[ZZZZZZZZYYYYYYYYYXXXXXXXWWWWWWVVVVVVVVVUUUUUUUUUUTTTTTTTTTTTSSSSSSSSRRRRRRRRRRRRQQQQQQQQQQQQQQQQQPPPPPPPPPPPPPOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQRRRRRRRRRRRRRSSSSSSSTTTTTTTTTTTUUUUUUUUUUVVVVVVVVVWWWWWWXXXXXXXXYYYYYYYYYZZZZZZZ[[[[[\\\\\\\\]]]]]]^^^^^^^____``````aaaaaaabbbbbccccccddddddeeeeefffffggggghhhhhhiiiiijjjjkkkkkklllllmmmmmnnnnoooooppppppqqqrrrrrrssssstttttuuuvvvvvwwwwwxxxxxyyyzzzzzzzzyyyyxxxxxwwwwwvvvvvuutttttssssssrrrrrqqqppppppooooonnnnmmmmmlllllkkkkkkjjjjiiiiihhhhhhgggggffffeeeeeeddddddcccccccbbbaaaaaaa``````_____^^^^^^]]]]]]]]\\\\\\\[[[[ZZZZZZZYYYYYYYYYXXXXXXXXWWWWWWVVVVVVVVVUUUUUUUUUUTTTTTTTTTTSSSSSSSRRRRRRRRRRRRRQQQQQQQQQQQQQQQPPPPPPPPPPPOOOOOOOOOOOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPQQQQQQQQQQQQQQQRRRRRRRRRRRRSSSSSSSSTTTTTTTTTTUUUUUUUUUUVVVVVVVVVWWWWWWXXXXXXXYYYYYYYYYZZZZZZZZ[[[\\\\\\\\]]]]]]]^^^^^^^_____``````aaaaaabbbbccccccddddddeeeeeeefffggggghhhhhhhiiiiijjjkkkkkkklllllmmmmmnnnooooopppppppqqrrrrrsssssstttttuuuvvvvvwwwwwxxxxxyyyyzzzzzyyyxxxxxwwwwwvvvvvuuuttttttsssssrrrrrqqqppppppooooonnnnmmmmmlllllkkkkkkjjjjiiiiihhhhhhgggggffffeeeeeeddddddccccccbbbbaaaaaa```````___^^^^^^^^]]]]]]\\\\\\\\[[[[[ZZZZZZZYYYYYYYYXXXXXXXWWWWWWVVVVVVVVVUUUUUUUUUTTTTTTTTTTSSSSSSSRRRRRRRRRRRRRQQQQQQQQQQQQQQPPPPPPPPPPOOOOOOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQQQQQRRRRRRRRRRRRSSSSSSSSTTTTTTTTTTUUUUUUUUVVVVVVVVVWWWWWWXXXXXXXXYYYYYYYZZZZZZZZ[[[[[\\\\\\\]]]]]]]^^^^^^^____``````aaaaaabbbbccccccdddddddeeeeeeffffggggghhhhhhiiiiijjjjkkkkkklllllmmmmmnnnnoooooppppppqqrrrrrssssstttttttuuvvvvvwwwwwxxxxxyyyyzzyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrqqqqpppppooooonnnmmmmmlllllkkkkkkkjjiiiiiihhhhhgggggggfffeeeeeeedddddccccccbbbbbaaaaaa``````____^^^^^^]]]]]]]]\\\\\\[[[[[ZZZZZZZZYYYYYYYXXXXXXXXWWWWWWVVVVVVVVVUUUUUUUUTTTTTTTTTTSSSSSSSRRRRRRRRRRRQQQQQQQQQQQQQQPPPPPPPPPPOOOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQQQQQRRRRRRRRRRRSSSSSSTTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWXXXXXXXYYYYYYYYZZZZZZZ[[[[[\\\\\\\]]]]]]]^^^^^^____``````aaaaaaabbbbbccccccdddddeeeeeeffffgggggghhhhhiiiiiijjjkkkkkklllllmmmmmnnnnooooopppppqqqqrrrrrssssstttttuuuvvvvvwwwwwxxxxxyyyyzyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrqqqpppppooooonnnnmmmmmlllllkkkkkkjjjiiiiiihhhhhggggggffffeeeeeedddddcccccccbbbaaaaaaa``````_____^^^^^^]]]]]]\\\\\\\\[[[[ZZZZZZZYYYYYYYYXXXXXXXXWWWWWVVVVVVVVVUUUUUUUUUTTTTTTTTTSSSSSSSRRRRRRRRRRRQQQQQQQQQQQQPPPPPPPPPPOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQQRRRRRRRRRRRSSSSSSSSTTTTTTTTTUUUUUUUUVVVVVVVVVWWWWWXXXXXXXXXYYYYYYYZZZZZZZZ[[[[\\\\\\\]]]]]]^^^^^^^_____``````aaaaaabbbbccccccdddddeeeeeeffffgggggghhhhhiiiiiiijjkkkkkklllllmmmmmnnnnooooopppppqqqqrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyzyyxxxxxwwwwwvvvvvuuutttttsssssrrrrrqqqqpppppooooonnnnmmmmmlllllkkkkkjjjjiiiiiihhhhhggggggffffeeeeeddddddccccccbbbbaaaaaa```````___^^^^^^^]]]]]]]\\\\\\[[[[[ZZZZZZZZYYYYYYYXXXXXXXXWWWWWVVVVVVVVVUUUUUUUTTTTTTTTTTSSSSSSRRRRRRRRRRRRQQQQQQQQQQQPPPPPPPPPOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOPPPPPPPPPQQQQQQQQQQQRRRRRRRRRRRSSSSSSTTTTTTTTTTUUUUUUUUVVVVVVVVVWWWWWXXXXXXXYYYYYYYYZZZZZZZ[[[[[\\\\\\]]]]]]]]^^^^^^____``````aaaaaabbbbccccccdddddddeeeeefffggggggghhhhhiiiiiijjjjkkkkklllllmmmmmnnnooooopppppqqqqrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyyxxxwwwwwvvvvvuuuutttttsssssrrrrrqqqqpppppooooonnnnmmmmmlllllkkkkkjjjiiiiiiihhhhhggggggffffeeeeeddddddccccccbbbbaaaaaa``````____^^^^^^]]]]]]]\\\\\\\[[[[ZZZZZZZYYYYYYYYXXXXXXXWWWWWVVVVVVVVVUUUUUUUUTTTTTTTTTTSSSSSSRRRRRRRRRRQQQQQQQQQQQPPPPPPPPPOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOPPPPPPPPQQQQQQQQQQQQRRRRRRRRRRSSSSSSTTTTTTTTTTUUUUUUUVVVVVVVVVWWWWWXXXXXXXXYYYYYYYZZZZZZZZ[[[\\\\\\\\]]]]]]^^^^^^____``````aaaaaaabbbcccccccddddddeeeeeffffgggggghhhhhiiiiiijjjjkkkkklllllmmmmmnnnnooooopppppqqqrrrrrssssstttttuuuuvvvvvwwwwwxxxxyyxxxxxwwwwwvvvvuuuutttttsssssrrrrrqqqqpppppooooonnnmmmmmlllllkkkkkjjjjiiiiiihhhhhgggggffffeeeeeedddddddcccccbbbaaaaaaa``````_____^^^^^^]]]]]]\\\\\\\[[[[[ZZZZZZYYYYYYYXXXXXXXXWWWWWVVVVVVVVVUUUUUUUTTTTTTTTTSSSSSSRRRRRRRRRRQQQQQQQQQQQPPPPPPPPOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOPPPPPPPQQQQQQQQQQQRRRRRRRRRRSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVVWWWWWXXXXXXXYYYYYYYYZZZZZZ[[[[[\\\\\\]]]]]]^^^^^^^_____``````aaaaaabbbbcccccddddddeeeeeeffffggggghhhhhiiiiiijjjjkkkkklllllmmmmmnnnnooooopppppqqqqrrrrrssssstttttuuuvvvvwwwwwxxxxxyxxxxwwwwwvvvvvuuutttttsssssrrrrrqqqpppppooooonnnnmmmmmlllllkkkkkjjjjiiiiiihhhhhgggggffffeeeeeedddddccccccbbbbaaaaaa```````___^^^^^^^]]]]]]\\\\\\\[[[[ZZZZZZZZYYYYYYXXXXXXXWWWWWVVVVVVVVVUUUUUUUUTTTTTTTTSSSSSSSRRRRRRRRRRQQQQQQQQQQPPPPPPPOOOOOOOOOOOOOONNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNOOOOOOOOOOOOOPPPPPPPPQQQQQQQQQQRRRRRRRRRRSSSSSSTTTTTTTTTUUUUUUUVVVVVVVVVWWWWWXXXXXXXXYYYYYYZZZZZZZ[[[[\\\\\\\\]]]]]]^^^^^^____``````aaaaaabbbbccccccdddddeeeeeeefffggggghhhhhiiiiiiijjjkkkkklllllmmmmmnnnnooooopppppqqqqrrrrrssssstttttuuvvvvvwwwwwxxxxxxxxwwwwwvvvvvuutttttsssssrrrrrqqqqpppppooooonnnnmmmmmlllllkkkkkjjjjiiiiiihhhhhgggggffffeeeeeedddddccccccbbbbaaaaaa``````____^^^^^^]]]]]]]\\\\\\[[[[[ZZZZZZYYYYYYYYXXXXXXXWWWWWVVVVVVVVUUUUUUUTTTTTTTTTSSSSSSRRRRRRRRRQQQQQQQQQQPPPPPPPOOOOOOOOOOOOONNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNOOOOOOOOOOOOPPPPPPPPQQQQQQQQQQRRRRRRRRSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVWWWWWXXXXXXXXYYYYYYYZZZZZZZ[[[[[\\\\\\]]]]]]^^^^^^____``````aaaaaaabbbcccccccdddddeeeeeeffffggggghhhhhiiiiiijjjjkkkkklllllmmmmmnnnooooopppppqqqqrrrrrssssstttttuuuvvvvvwwwwwxxxxxwwwwwvvvvvuuuttttsssssrrrrrqqqqpppppooooonnnnmmmmmlllllkkkkkjjjiiiiihhhhhhhgggggfffeeeeeeedddddccccccbbbbaaaaaa`````_____^^^^^^]]]]]]\\\\\\\[[[ZZZZZZZZYYYYYYXXXXXXXXWWWWWVVVVVVVUUUUUUUUTTTTTTTTSSSSSSSRRRRRRRRQQQQQQQQQQPPPPPPPPOOOOOOOOOOONNNNNNNNNNNNNNMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNOOOOOOOOOOOOPPPPPPPQQQQQQQQQQRRRRRRRRRSSSSSSTTTTTTTTTUUUUUUUVVVVVVVVWWWWWXXXXXXXYYYYYYYZZZZZZZ[[[[\\\\\\]]]]]]^^^^^^^_____`````aaaaaabbbbccccccdddddeeeeeeffffggggghhhhhhiiiiijjjjkkkkklllllmmmmmnnnnooooopppppqqqrrrrrsssssttttuuuuvvvvvwwwwwxxwwwwwvvvvvuuuutttttsssssrrrrrqqqpppppooooonnnmmmmmlllllkkkkkjjjjiiiiihhhhhhgggggffffeeeeeddddddcccccccbbbaaaaa```````___^^^^^^^]]]]]]\\\\\\[[[[[ZZZZZZYYYYYYYYXXXXXXWWWWWVVVVVVVVUUUUUUUTTTTTTTTTSSSSSRRRRRRRRRRQQQQQQQQQPPPPPPPOOOOOOOOOOONNNNNNNNNNNNNMMMMMMMMMMMMMMMLLLLLLLLLLLLKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLMMMMMMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOOOPPPPPPPPQQQQQQQQQRRRRRRRRRRSSSSSTTTTTTTTUUUUUUUUVVVVVVVWWWWWXXXXXXXYYYYYYYZZZZZZ[[[[[\\\\\\\]]]]]]^^^^^^____``````aaaaabbbbccccccddddddeeeeeffffggggghhhhhhiiiiijjjjkkkkklllllmmmmmnnnnooooopppppqqrrrrrssssstttttuuuuvvvvvwwwwwxwwwwvvvvvuuuutttttsssssrrrrrqqpppppooooonnnnmmmmmlllllkkkkkjjjjiiiiihhhhhhgggggffffeeeeeddddddcccccbbbbaaaaaa``````____^^^^^^]]]]]]]\\\\\\[[[[ZZZZZZZYYYYYYXXXXXXXXWWWWVVVVVVVUUUUUUUUUTTTTTTTSSSSSRRRRRRRRRQQQQQQQQQQPPPPPPOOOOOOOOOOOONNNNNNNNNNNNMMMMMMMMMMMMMMLLLLLLLLLLLKKKKKKKKKKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLMMMMMMMMMMMMMNNNNNNNNNNNNNOOOOOOOOOOOPPPPPPQQQQQQQQQQRRRRRRRRRSSSSSTTTTTTTTUUUUUUUUVVVVVVVVWWWWXXXXXXXYYYYYYZZZZZZZZ[[[[\\\\\\]]]]]]^^^^^^____``````aaaaaaabbbcccccdddddddeeeeefffggggghhhhhhhiiiiijjjkkkkklllllmmmmmnnnnooooopppppqqqrrrrrssssstttttuuuvvvvvwwwwxwwwwvvvvvuuutttttsssssrrrrrqqpppppooooonnnnmmmmmlllllkkkkkjjjjiiiiihhhhhhgggggffffeeeeeddddddcccccbbbbaaaaaa``````____^^^^^^]]]]]]\\\\\\\[[[ZZZZZZZYYYYYYYXXXXXXWWWWWVVVVVVVVUUUUUUUTTTTTTTTSSSSSRRRRRRRRRQQQQQQQQQQPPPPPPOOOOOOOOOONNNNNNNNNNNMMMMMMMMMMMMMMLLLLLLLLLLKKKKKKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLMMMMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOOPPPPPPQQQQQQQQQQRRRRRRRRRSSSSSTTTTTTTUUUUUUUUVVVVVVVWWWWWXXXXXXYYYYYYYYZZZZZZ[[[[\\\\\\]]]]]]^^^^^^^___```````aaaaaabbbbcccccddddddeeeeeffffggggghhhhhhiiiiijjjjkkkkklllllmmmmmnnnooooopppppqqqrrrrrssssstttttuuvvvvvwwwwwwwwvvvvvuutttttsssssrrrrrqqqqpppppooooonnnmmmmmlllllkkkkkkjjiiiiihhhhhhhgggggfffeeeeedddddddcccccbbbaaaaaaa`````_____^^^^^]]]]]]\\\\\\[[[[[ZZZZZZYYYYYYYXXXXXXWWWWWVVVVVVVUUUUUUUUTTTTTTTSSSSSRRRRRRRRRQQQQQQQQQPPPPPPOOOOOOOOOONNNNNNNNNNNMMMMMMMMMMMMMLLLLLLLLLLKKKKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKLLLLLLLLLLMMMMMMMMMMMMNNNNNNNNNNNOOOOOOOOOOPPPPPPPQQQQQQQQRRRRRRRRRSSSSSTTTTTTTTUUUUUUUVVVVVVVVWWWWWXXXXXXYYYYYYZZZZZZ[[[[[\\\\\\\]]]]]]^^^^^_____`````aaaaaabbbbcccccddddddeeeeeffffggggghhhhhhiiiiijjjkkkkkklllllmmmmmnnooooopppppqqqqrrrrrssssstttttuuuvvvvvwwwwwvvvvvuutttttsssssrrrrrqqqqpppppooooonnmmmmmlllllkkkkkkkjjiiiiihhhhhhgggggffffeeeeeddddddcccccbbbbaaaaaa`````____^^^^^^]]]]]]]\\\\\\[[[[ZZZZZZYYYYYYYXXXXXXXWWWWWVVVVVVUUUUUUUTTTTTTTTSSSSSSRRRRRRRRQQQQQQQQPPPPPPPOOOOOOOOOONNNNNNNNNNMMMMMMMMMMMMLLLLLLLLLKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKLLLLLLLLMMMMMMMMMMMMMNNNNNNNNNNOOOOOOOOOOPPPPPPQQQQQQQQQRRRRRRRSSSSSSSTTTTTTTUUUUUUUUVVVVVVWWWWWXXXXXXYYYYYYYYZZZZZZ[[[[\\\\\\]]]]]]^^^^^^____`````aaaaaabbbbcccccddddddeeeeeffffggggghhhhhhiiiiijjjkkkkkklllllmmmmmnnnooooopppppqqqrrrrrssssstttttuuuvvvvvwwvvvvvuuuutttttssssrrrrrqqqqpppppooooonnmmmmmllllllkkkkkjjjiiiiiihhhhhgggggffffeeeeedddddccccccbbbbaaaaa``````____^^^^^^]]]]]]\\\\\\\[[[ZZZZZZZYYYYYYXXXXXXWWWWWVVVVVVVVUUUUUUTTTTTTTSSSSSSSRRRRRRRQQQQQQQQQPPPPPPOOOOOOOOONNNNNNNNNNNMMMMMMMMMMMLLLLLLLLLKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKLLLLLLLLLMMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOPPPPPPPQQQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVVWWWWWXXXXXXXYYYYYYZZZZZZ[[[[\\\\\\]]]]]]^^^^^^^___```````aaaaabbbcccccccdddddeeeeefffggggghhhhhiiiiiiijjkkkkkllllllmmmmmnnnooooopppppqqqqrrrrrssstttttuuuuvvvvvwvvvvuuuutttttsssssrrrrqqqpppppooooonnnnmmmmmlllllkkkkkjjjiiiiiihhhhhgggggffffeeeeedddddccccccbbbbaaaaa``````____^^^^^^]]]]]\\\\\\[[[[[ZZZZZZYYYYYYYXXXXXXWWWWWVVVVVVUUUUUUUUTTTTTTTSSSSSRRRRRRRRQQQQQQQQPPPPPPPOOOOOOOONNNNNNNNNNMMMMMMMMMMMMLLLLLLLKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKLLLLLLLLMMMMMMMMMMMNNNNNNNNNNOOOOOOOOOPPPPPPQQQQQQQQQRRRRRRRSSSSSTTTTTTTTUUUUUUUVVVVVVVWWWWWXXXXXXYYYYYYZZZZZZ[[[[[\\\\\\\]]]]]^^^^^^____``````aaaaabbbbccccccdddddeeeeeffffggggghhhhhiiiiiijjkkkkklllllmmmmmnnnnooooopppppqqqqrrrrssssstttttuuuvvvvwvvvvuuutttttsssssrrrrrqqpppppooooonnnnmmmmmlllllkkkkkjjiiiiiiihhhhhgggggfffeeeeedddddcccccccbbbaaaaa```````___^^^^^]]]]]]]\\\\\\[[[[ZZZZZZYYYYYYXXXXXXWWWWWVVVVVVVVUUUUUUTTTTTTTTSSSSSRRRRRRRQQQQQQQQQPPPPPOOOOOOOOOONNNNNNNNNMMMMMMMMMMMLLLLLLLKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIIIIIIIIHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKLLLLLLLLMMMMMMMMMMMNNNNNNNNNOOOOOOOOOOPPPPPQQQQQQQQRRRRRRRRSSSSSTTTTTTTUUUUUUUVVVVVVVWWWWWXXXXXXYYYYYYYZZZZZZ[[[[\\\\\\]]]]]]^^^^^____``````aaaaabbbbccccccdddddeeeeeffffggggghhhhhiiiiiijjjkkkkklllllmmmmmnnnooooopppppqqqrrrrrssssstttttuuvvvvvvvvuutttttsssssrrrrrqqqpppppooooonnnnmmmmmlllllkkkkkjjjiiiiihhhhhgggggffffeeeeedddddccccccbbbbaaaaa``````____^^^^^]]]]]]\\\\\\\[[[ZZZZZZZYYYYYYXXXXXXWWWWWVVVVVVUUUUUUUUTTTTTTSSSSSRRRRRRRRQQQQQQQQPPPPPOOOOOOOOONNNNNNNNNNMMMMMMMMMMLLLLLLLLKKKKKKKKKKKKJJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIIIIHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJKKKKKKKKKKKKKLLLLLLLMMMMMMMMMMNNNNNNNNNNOOOOOOOOOPPPPPQQQQQQQQQRRRRRRRSSSSSTTTTTTTUUUUUUUVVVVVVWWWWWXXXXXXXYYYYYYZZZZZZ[[[[\\\\\\]]]]]]^^^^^____``````aaaaabbbbccccccdddddeeeeeffffggggghhhhhiiiiijjjjkkkkklllllmmmmmnnnnooooopppppqqrrrrrssssstttttuuuvvvvvuuuttttsssssrrrrrqqqqppppooooonnnmmmmmlllllkkkkkjjjjiiiiihhhhhgggggffffeeeeedddddccccccbbbbaaaaa`````____^^^^^^]]]]]]\\\\\[[[[[ZZZZZZYYYYYYYXXXXXXWWWWVVVVVVUUUUUUUTTTTTTTTSSSSSRRRRRRRQQQQQQQQPPPPPOOOOOOOOONNNNNNNNNNMMMMMMMMLLLLLLLLKKKKKKKKKKKKJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIHHHHHHHHHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJKKKKKKKKKKKKKLLLLLLLMMMMMMMMMNNNNNNNNNNOOOOOOOOOPPPPPQQQQQQQRRRRRRRRSSSSSTTTTTTTUUUUUUUUVVVVVVWWWWXXXXXXYYYYYYZZZZZZ[[[[[\\\\\]]]]]]]^^^^^^____`````aaaaabbbcccccccdddddeeeeefffggggghhhhhiiiiijjjjkkkkklllllmmmmmnnnnoooooppppqqqrrrrrsssssttttuuuuvvuuuutttttssssrrrrrqqqqpppppooooonnmmmmmlllllkkkkkjjjjiiiiihhhhhgggggffffeeeeedddddccccccbbaaaaaaa`````___^^^^^^^]]]]]\\\\\\[[[[ZZZZZZYYYYYYXXXXXXWWWWWVVVVVVVUUUUUUTTTTTTTSSSSSRRRRRRRRQQQQQQQPPPPPOOOOOOOOONNNNNNNNNMMMMMMMMMMLLLLLLKKKKKKKKKKKKKJJJJJJJJJJJJIIIIIIIIIIIIIIIIHHHHHHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIJJJJJJJJJJJJJKKKKKKKKKKKKLLLLLLLMMMMMMMMMMNNNNNNNNOOOOOOOOOPPPPPQQQQQQQQRRRRRRRSSSSSTTTTTTTTUUUUUUVVVVVVWWWWWXXXXXXYYYYYYYZZZZZZ[[[[\\\\\\]]]]]^^^^^^____`````aaaaaabbbccccccdddddeeeeeffffggggghhhhhiiiiijjjkkkkklllllmmmmmnnnooooopppppqqqqrrrrrssstttttuuuuvuuutttttsssssrrrrqqqpppppooooonnnmmmmmlllllkkkkkjjjjiiiiihhhhhgggggfffeeeeedddddcccccccbbaaaaaa`````____^^^^^^]]]]]\\\\\\\[[[ZZZZZZZYYYYYYXXXXXXWWWWVVVVVVUUUUUUUUTTTTTTSSSSSRRRRRRRQQQQQQQQPPPPPOOOOOOOOONNNNNNNNMMMMMMMMMMLLLLLLLKKKKKKKKKKKJJJJJJJJJJJJIIIIIIIIIIIIIIHHHHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHIIIIIIIIIIIIIIJJJJJJJJJJJJJKKKKKKKKKKKLLLLLLMMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPQQQQQQQRRRRRRRRSSSSSTTTTTTUUUUUUUVVVVVVVWWWXXXXXXXYYYYYYZZZZZZ[[[[\\\\\\]]]]]^^^^^^____`````aaaaaabbbccccccdddddeeeeeffffggggghhhhhiiiiijjjjkkkkklllllmmmmmnnooooopppppqqqqrrrrssssstttttuuvuutttttsssssrrrrrqqpppppooooonnnmmmmmlllllkkkkkjjjiiiiihhhhhgggggffffeeeeedddddccccccbbbaaaaaa`````____^^^^^^]]]]]\\\\\\[[[[ZZZZZZYYYYYYYXXXXXXWWWWVVVVVVUUUUUUTTTTTTTTSSSSSRRRRRRQQQQQQQPPPPPPPOOOOOOONNNNNNNNNMMMMMMMMMLLLLLLKKKKKKKKKKKJJJJJJJJJJJIIIIIIIIIIIIIIHHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHIIIIIIIIIIIIIIJJJJJJJJJJJKKKKKKKKKKKKLLLLLLMMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPQQQQQQQQRRRRRRSSSSSTTTTTTTUUUUUUUVVVVVVWWWWXXXXXXYYYYYYZZZZZZ[[[[\\\\\\]]]]]^^^^^^^___`````aaaaaaabbccccccdddddeeeeeffffggggghhhhhiiiiijjjjkkkkklllllmmmmmnnooooopppppqqqrrrrrssssstttttuuuutttsssssrrrrrqqqpppppooooonnnnmmmmmlllkkkkkjjjjiiiiihhhhhgggggffffeeeeedddddcccccbbbbaaaaaa`````____^^^^^]]]]]]\\\\\\[[[[ZZZZZYYYYYYXXXXXXWWWWWVVVVVVVUUUUUUTTTTTTSSSSSRRRRRRRRQQQQQQQPPPPPOOOOOOOONNNNNNNNMMMMMMMMMLLLLLLKKKKKKKKKKJJJJJJJJJJJJIIIIIIIIIIIIHHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHIIIIIIIIIIIIIJJJJJJJJJJJKKKKKKKKKKLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOPPPPPQQQQQQQQRRRRRRRSSSSSTTTTTTTUUUUUUVVVVVVWWWWWXXXXXXYYYYYYYZZZZZ[[[\\\\\\\]]]]]]^^^^^____`````aaaaaabbbbcccccdddddeeeeefffggggghhhhhiiiiijjjjkkkkkllllmmmmmnnnnooooopppppqqrrrrrsssssttttuutttttssssrrrrrqqqqppppooooonnnmmmmmlllllkkkkkjjjiiiiihhhhhgggggffffeeeeedddddcccccbbbaaaaaaa`````___^^^^^]]]]]]]\\\\\[[[ZZZZZZZYYYYYYXXXXXXWWWWVVVVVVUUUUUUTTTTTTTTSSSSRRRRRRRQQQQQQQQPPPPPOOOOOOONNNNNNNNNMMMMMMMMMLLLLLLKKKKKKKKKJJJJJJJJJJJIIIIIIIIIIIIHHHHHHHHHHGGGGGGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGHHHHHHHHHHIIIIIIIIIIIIIJJJJJJJJJJJKKKKKKKKKLLLLLLMMMMMMMMMNNNNNNNNOOOOOOOOPPPPPQQQQQQQRRRRRRRRSSSSTTTTTTTUUUUUUVVVVVVVWWWXXXXXXXYYYYYYZZZZZZ[[[[\\\\\]]]]]]^^^^^____`````aaaaaabbbbcccccdddddeeeeeffffggggghhhhhiiiiijjkkkkklllllmmmmmnnnnoooooppppqqqrrrrrsssstttttuttttsssssrrrrqqqqpppppooonnnnmmmmmlllllkkkkkjjjiiiiihhhhhgggggfffeeeeedddddcccccccbbaaaaaa`````____^^^^^]]]]]]\\\\\[[[[ZZZZZZYYYYYYYXXXXXXWWWWVVVVVVUUUUUUTTTTTTSSSSSRRRRRRRQQQQQQQPPPPPOOOOOOOONNNNNNNNMMMMMMMMMLLLLLKKKKKKKKKKJJJJJJJJJJIIIIIIIIIIIIIHHHHHHHHGGGGGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGHHHHHHHHHIIIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOPPPPPQQQQQQQQRRRRRRSSSSSTTTTTTUUUUUUUVVVVVVWWWWXXXXXXYYYYYYZZZZZZ[[[[\\\\\]]]]]]^^^^^____`````aaaaaabbbccccccdddddeeeeeffffggggghhhhhiiiiijjkkkkklllllmmmmmnnnnoooopppppqqqqrrrsssssttttttttsssssrrrrrqqpppppooooonnnmmmmmlllllkkkkkjjiiiiihhhhhgggggffffeeeeedddddccccccbbbaaaaaa`````____^^^^^]]]]]]\\\\\[[[[ZZZZZZYYYYYXXXXXXWWWWWVVVVVVVUUUUUUTTTTTTSSSSRRRRRRRQQQQQQQQPPPPOOOOOOONNNNNNNNNMMMMMMMLLLLLLLKKKKKKKKKKJJJJJJJJJJIIIIIIIIIIIHHHHHHHGGGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGHHHHHHHHIIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOPPPPQQQQQQQRRRRRRRRSSSTTTTTTTUUUUUUVVVVVVWWWWWXXXXXXYYYYYZZZZZZZ[[[\\\\\]]]]]]]^^^^^___`````aaaaaaabbccccccdddddeeeeeffffggggghhhhhiiiiijjjkkkkklllllmmmmmnnooooopppppqqqrrrrrssssstttttsssssrrrrrqqpppppooooonnnmmmmmlllllkkkkkjjjiiiiihhhhhgggggfffeeeeedddddccccccbbbaaaaaa`````____^^^^^]]]]]\\\\\\[[[[ZZZZZZYYYYYXXXXXXWWWWVVVVVVUUUUUUTTTTTTTSSSSSRRRRRRQQQQQQQPPPPPOOOOOOOONNNNNNNMMMMMMMMLLLLLLKKKKKKKKKJJJJJJJJJJIIIIIIIIIIIHHHHHHHHGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGHHHHHHHIIIIIIIIIIIIJJJJJJJJJJKKKKKKKKLLLLLLLMMMMMMMNNNNNNNNOOOOOOOPPPPPQQQQQQQQRRRRRRSSSSSTTTTTTUUUUUUVVVVVVVWWWXXXXXXXYYYYYZZZZZZ[[[[\\\\\\]]]]]^^^^^____`````aaaaaabbcccccccdddddeeeeeffggggghhhhhiiiiijjjjkkkkklllllmmmmmnnooooopppppqqqrrrrrsssssttttsssrrrrrqqqqppppooooonnnnmmmlllllkkkkkjjjjiiiiihhhhhgggggfffeeeeedddddccccccbbaaaaaaa`````___^^^^^]]]]]\\\\\\\[[[ZZZZZYYYYYYYXXXXXXWWWWVVVVVVUUUUUUTTTTTTSSSSRRRRRRRRQQQQQQPPPPPOOOOOOONNNNNNNNMMMMMMMLLLLLLLKKKKKKKKJJJJJJJJJJIIIIIIIIIIHHHHHHHHGGGGGGGGGGGGFFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFGGGGGGGGGGGGGHHHHHHHIIIIIIIIIIJJJJJJJJJJKKKKKKKKKLLLLLLMMMMMMMMNNNNNNNOOOOOOOOPPPPPQQQQQQRRRRRRRSSSSTTTTTTUUUUUUUVVVVVVWWWWXXXXXXYYYYYYZZZZZ[[[[\\\\\\]]]]]^^^^^____`````aaaaaabbbccccccdddddeeeeeffggggghhhhhiiiiijjjjkkkkklllllmmmmnnnnooooopppqqqqrrrrrssssttsssssrrrrqqqqpppppoooonnnmmmmmllllkkkkkjjjjiiiiihhhhhgggggffeeeeedddddddcccccbbaaaaaa`````____^^^^^]]]]]\\\\\\[[[[ZZZZZYYYYYYXXXXXXXWWWVVVVVVVUUUUUUTTTTTTSSSSRRRRRRQQQQQQQQPPPOOOOOOOONNNNNNNMMMMMMMMMLLLLLKKKKKKKKKJJJJJJJJJIIIIIIIIIIHHHHHHHGGGGGGGGGGGGGFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFGGGGGGGGGGGGHHHHHHHHIIIIIIIIIIJJJJJJJJJKKKKKKKKLLLLLMMMMMMMMMNNNNNNNNOOOOOOOPPPPQQQQQQQRRRRRRRSSSTTTTTTTUUUUUUVVVVVVWWWWXXXXXXYYYYYYZZZZZ[[[[\\\\\\]]]]]^^^^^____`````aaaaaabbbcccccddddddeeeeefffggggghhhhhiiiiijjjkkkkkllllmmmmmnnnnoooopppppqqqrrrrssssstssssrrrrrqqqpppppooooonnmmmmmlllllkkkkkjjjiiiiihhhhhgggggfffeeeeedddddcccccbbbaaaaaa`````____^^^^^]]]]]\\\\\\[[[[ZZZZZYYYYYYXXXXXWWWWVVVVVVUUUUUUTTTTTTTSSSSSRRRRRRQQQQQQPPPPPOOOOOOOONNNNNNMMMMMMMMMLLLLLKKKKKKKKJJJJJJJJJIIIIIIIIIIHHHHHHGGGGGGGGGGGGFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEDDDDDDDDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFGGGGGGGGGGGHHHHHHIIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLMMMMMMMMMNNNNNNOOOOOOOPPPPPQQQQQQQRRRRRRSSSSSTTTTTTUUUUUUVVVVVVVWWWXXXXXYYYYYYYZZZZZ[[[\\\\\\\]]]]]^^^^^___`````aaaaaaabbcccccdddddeeeeeffffggggghhhhhiiiiijjkkkkklllllmmmmmnnnooooopppppqqrrrrrssssssssrrrrrqqpppppooooonnnmmmmmlllllkkkkkjjiiiiihhhhhgggggffffeeeeedddddcccccbbbbaaaaa`````____^^^^^]]]]]\\\\\\[[[[ZZZZZYYYYYYXXXXXWWWWVVVVVVUUUUUUTTTTTTSSSSRRRRRRQQQQQQQQPPPPOOOOOOONNNNNNNNMMMMMMMLLLLLKKKKKKKKKJJJJJJJJJIIIIIIIIHHHHHHHGGGGGGGGGGGFFFFFFFFFFFFFFEEEEEEEEEEEEEEEDDDDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDEEEEEEEEEEEEEEEFFFFFFFFFFFFFFGGGGGGGGGGGHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKLLLLLMMMMMMMMNNNNNNNOOOOOOOOPPPPQQQQQQQRRRRRRSSSSTTTTTTUUUUUUUVVVVVVWWWWXXXXXYYYYYYZZZZZ[[[[\\\\\\]]]]]^^^^^____`````aaaaabbbcccccdddddeeeeeffffggggghhhhhiiiiijjjkkkkklllllmmmmmnnooooopppppqqqrrrrrsssssrrrrrqqqppppooooonnnnmmmmlllllkkkkkjjiiiiihhhhhgggggffffeeeeedddddcccccbbbbaaaaa`````___^^^^^]]]]]\\\\\\\[[ZZZZZZYYYYYXXXXXXXWWWVVVVVVVUUUUUUTTTTTTSSSSRRRRRRQQQQQQPPPPPOOOOOOONNNNNNNMMMMMMMMLLLLLKKKKKKKKJJJJJJJJIIIIIIIIIIHHHHHHGGGGGGGGGGFFFFFFFFFFFFFEEEEEEEEEEEEEEEDDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDEEEEEEEEEEEEEEEFFFFFFFFFFFFGGGGGGGGGGHHHHHHHIIIIIIIIIIJJJJJJJKKKKKKKKKLLLLLMMMMMMMNNNNNNNNOOOOOOPPPPPQQQQQQRRRRRRRSSSTTTTTTTUUUUUUVVVVVVWWWWXXXXXXYYYYYZZZZZZ[[[\\\\\\]]]]]^^^^^____`````aaaaabbbbcccccdddddeeeeefffggggghhhhhiiiiijjjkkkkklllllmmmmnnnoooooppppqqqqrrrrrssssrrrqqqqpppppoooonnnnmmmmmlllkkkkkjjjjiiiiihhhhgggggffffeeeeedddddcccccbbbaaaaa`````____^^^^^]]]]]\\\\\[[[[ZZZZZZYYYYYXXXXXXWWWWVVVVVVUUUUUTTTTTTTSSSSSRRRRRRQQQQQQPPPPOOOOOOONNNNNNNMMMMMMMLLLLLKKKKKKKKKJJJJJJJIIIIIIIIIHHHHHHHHGGGGGGGGGGFFFFFFFFFFFEEEEEEEEEEEEEEDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEEEEEFFFFFFFFFFFGGGGGGGGGGHHHHHHHIIIIIIIIIJJJJJJJJKKKKKKKKLLLLLMMMMMMMMNNNNNNOOOOOOOOPPPQQQQQQQRRRRRRSSSSSTTTTTTUUUUUVVVVVVWWWWXXXXXXYYYYYZZZZZZZ[[[\\\\\]]]]]^^^^^____`````aaaaabbbbcccccdddddeeeeeffffggggghhhiiiiijjjjkkkkkllllmmmmmnnnnooopppppqqqqrrrrssrrrrrqqqpppppooooonnmmmmmlllllkkkkjjjjiiiiihhhhhggggfffeeeeedddddcccccbbbbaaaaa`````____^^^^^]]]]]\\\\\[[[[ZZZZZZYYYYYXXXXXXWWWWVVVVVUUUUUUTTTTTTSSSSRRRRRRQQQQQQQPPPPPOOOOOONNNNNNNMMMMMMMMLLLLLKKKKKKKJJJJJJJJIIIIIIIIIHHHHHHGGGGGGGGGGFFFFFFFFFFFEEEEEEEEEEEEEDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEEEFFFFFFFFFFFFGGGGGGGGGGHHHHHHIIIIIIIIIJJJJJJJKKKKKKKKLLLLLMMMMMMMNNNNNNNNOOOOOOPPPPPQQQQQQRRRRRRSSSSTTTTTTUUUUUUUVVVVVWWWXXXXXXXYYYYYZZZZZZ[[[[\\\\\]]]]]^^^^^___`````aaaaabbbbcccccdddddeeeeeffffgggghhhhhiiiiijjjkkkklllllmmmmmnnnooooopppppqqrrrrrsrrrrqqqpppppooooonnmmmmmlllllkkkkkjjjiiiiihhhhhgggggffeeeeedddddcccccbbbbaaaaa`````____^^^^^]]]]]\\\\\[[[ZZZZZZZYYYYYXXXXXXWWWWVVVVVUUUUUUTTTTTTSSSSRRRRRRQQQQQQPPPPOOOOOOOONNNNNNMMMMMMMLLLLLKKKKKKKKJJJJJJJIIIIIIIIIHHHHHHGGGGGGGGGGFFFFFFFFFFEEEEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCDDDDDDDDDEEEEEEEEEEEEFFFFFFFFFFGGGGGGGGGGHHHHHHIIIIIIIIIJJJJJJJJKKKKKKKLLLLLMMMMMMMMNNNNNNOOOOOOOPPPPQQQQQQRRRRRRRSSSTTTTTTTUUUUUUVVVVVWWWWXXXXXXYYYYYZZZZZZ[[[[\\\\\]]]]]^^^^^____`````aaaaabbbcccccdddddeeeeefffggggghhhhhiiiiijjkkkkklllllmmmmmnnnooooopppppqqrrrrrrrrqqqqpppooooonnnnmmmmlllllkkkkkjjiiiiihhhhhgggggfffeeeeedddddcccccbbbbaaaaa`````___^^^^^]]]]]\\\\\[[[[ZZZZZZYYYYYXXXXXWWWWVVVVVVUUUUUUUTTTTTSSSSSRRRRRRQQQQQQPPPPOOOOOONNNNNNNNMMMMMMLLLLLKKKKKKKJJJJJJJJIIIIIIIIIHHHHHHGGGGGGGGGFFFFFFFFFFEEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCDDDDDDDDDEEEEEEEEEEEFFFFFFFFFFGGGGGGGGGHHHHHHIIIIIIIIIJJJJJJJKKKKKKKKLLLLLMMMMMMNNNNNNNOOOOOOOPPPQQQQQQQRRRRRRSSSSSTTTTTUUUUUUVVVVVVWWWWXXXXXYYYYYZZZZZZ[[[[\\\\\]]]]]^^^^^____`````aaaaabbbbcccccdddddeeeeeffggggghhhhhiiiiijjjkkkkklllllmmmnnnnoooooppppqqqqrrrrrrqqpppppoooonnnnmmmmmllllkkkkkjjjiiiihhhhhgggggffffeeeeeddddcccccbbbaaaaa`````____^^^^^]]]]]\\\\\[[[[ZZZZZZYYYYYXXXXXWWWWVVVVVVUUUUUTTTTTTSSSSRRRRRRQQQQQQQPPPPPOOOOOONNNNNNMMMMMMMMLLLKKKKKKKKJJJJJJJJJIIIIIIIHHHHHHGGGGGGGGGFFFFFFFFFFEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGHHHHHHIIIIIIIIJJJJJJJJJKKKKKKKLLLLMMMMMMMNNNNNNNOOOOOOPPPPPQQQQQQRRRRRRSSSSTTTTTTUUUUUVVVVVVVWWWXXXXXYYYYYZZZZZZZ[[[\\\\\]]]]]^^^^^____`````aaaaabbbbcccccddddeeeeefffggggghhhhhiiiijjjjkkkkkllllmmmmmnnnoooopppppqqqrrrrrqqpppppooooonnnmmmmmlllllkkkjjjjiiiiihhhhgggggffffeeeeedddddcccccbbaaaaa`````____^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYYXXXXXWWWWVVVVVVUUUUUTTTTTTSSSSRRRRRRQQQQQQPPPPOOOOOONNNNNNNNMMMMMMLLLLLKKKKKKKKJJJJJJJIIIIIIIIHHHHHGGGGGGGGGGFFFFFFFFEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBCCCCCCCCCCCCDDDDDDDDDEEEEEEEEEEFFFFFFFFFGGGGGGGGGGHHHHHIIIIIIIJJJJJJJJKKKKKKKLLLLLMMMMMMMNNNNNNNOOOOOOPPPPQQQQQQRRRRRRRSSSTTTTTTTUUUUUVVVVVVWWWWXXXXXYYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^___`````aaaaabbbcccccdddddeeeeeffffggggghhhiiiiijjjjkkkklllllmmmmmnnooooopppppqqqrrqqqqppppooooonnmmmmmlllllkkkkkjjjiiiiihhhhhggggfffeeeeedddddcccccbbbaaaaa`````____^^^^^]]]]]\\\\\[[[ZZZZZYYYYYYYXXXXXWWWVVVVVVVUUUUUTTTTTTSSSSRRRRRRQQQQQQPPPPOOOOOONNNNNNMMMMMMMMLLLLKKKKKKKJJJJJJJJIIIIIIIHHHHHGGGGGGGGGFFFFFFFFFFEEEEEEEEEEDDDDDDDCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAABBBBBBBBBBBBBBBCCCCCCCCCCCCDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGHHHHHIIIIIIIIJJJJJJJKKKKKKKKLLLLMMMMMMMNNNNNNOOOOOOOPPPQQQQQQQRRRRRRSSSSTTTTTTUUUUUVVVVVVWWWWXXXXXYYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^____`````aaaaabbcccccdddddeeeeeffffgggghhhhhiiiiijjkkkkklllllmmmmmnnnooooopppqqqqrqqqpppppoooonnnmmmmlllllkkkkkjjjiiiiihhhhhgggggffeeeeedddddcccccbbbaaaaa`````___^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYYXXXXXWWWWVVVVVUUUUUUTTTTTTTSSSRRRRRQQQQQQQPPPPPOOOOOONNNNNNMMMMMMLLLLLKKKKKKKJJJJJJJIIIIIIIIHHHHHHGGGGGGGFFFFFFFFFEEEEEEEEEEDDDDDDDDCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAABBBBBBBBBBBBBBBCCCCCCCCCCCDDDDDDDEEEEEEEEEEFFFFFFFFFGGGGGGGGHHHHHHIIIIIIIJJJJJJJJKKKKKKLLLLLMMMMMMNNNNNNNOOOOOOPPPPPQQQQQQRRRRRSSSSTTTTTTUUUUUUVVVVVWWWWXXXXXYYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^____`````aaaaabbcccccdddddeeeeefffggggghhhhhiiiiijjkkkkklllllmmmmnnnnoooopppppqqqqqpppppooonnnnmmmmmllllkkkkkjjjjiiihhhhhgggggfffeeeeedddddcccccbbbbaaaaa`````__^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYYXXXXXWWWWVVVVVUUUUUUTTTTTSSSSRRRRRRQQQQQQPPPPOOOOOONNNNNNNMMMMMMMLLLLKKKKKKKJJJJJJJIIIIIIIHHHHHHGGGGGGGGFFFFFFFFFEEEEEEEEEEDDDDDDCCCCCCCCCCCBBBBBBBBBBBBBBAAAAAAAAAA@@@@@@@@@@@@@@@@@@@@@@@@??????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAABBBBBBBBBBBBBCCCCCCCCCCCCDDDDDDEEEEEEEEEEFFFFFFFFFGGGGGGGHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLMMMMMMMMNNNNNNOOOOOOPPPPQQQQQQRRRRRRRSSSTTTTTUUUUUUUVVVVVWWWXXXXXYYYYYYYZZZZZ[[[\\\\\]]]]]^^^^^___`````aaaaabbbbcccccdddddeeeeeffggggghhhhhiiiijjjjkkkkklllmmmmmnnnnoooopppppqqqqpppooooonnnmmmmmlllllkkkkjjjiiiiihhhhgggggffffeeeedddddcccccbbbaaaaa`````___^^^^^]]]]]\\\\\\[[[ZZZZZYYYYYYXXXXXWWWWVVVVVUUUUUUTTTTTSSSSRRRRRRQQQQQQPPPPOOOOOONNNNNNMMMMMMMLLLLLKKKKKKJJJJJJJIIIIIIIIHHHHHGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCCCCBBBBBBBBBBBBBAAAAAAAAAA@@@@@@@@@@@@@@@@@@@??????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@AAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFFGGGGGGGGHHHHHIIIIIIIJJJJJJJJKKKKKKLLLLLMMMMMMNNNNNNOOOOOOOPPPQQQQQQQRRRRRRSSSSTTTTTUUUUUUVVVVVWWWWXXXXXYYYYYYZZZZZ[[\\\\\\\]]]]]^^^^^__`````aaaaabbbbcccccdddddeeeefffggggghhhhiiiiijjjjkkkklllllmmmmmnnoooooppppqqppppooooonnnnmmmmlllllkkkkkjjiiiiihhhhhggggffffeeeeedddcccccbbbbaaaaa`````___^^^^^]]]]]\\\\\\[[ZZZZZYYYYYYYXXXXXWWWVVVVVUUUUUUUTTTTTSSSRRRRRRRQQQQQPPPPPOOOOOONNNNNNMMMMMMLLLLKKKKKKKKJJJJJJIIIIIIIHHHHHGGGGGGGGFFFFFFFFFEEEEEEEEDDDDDDDCCCCCCCCCCBBBBBBBBBBBBAAAAAAAAA@@@@@@@@@@@@@@@@?????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@AAAAAAAABBBBBBBBBBBBBCCCCCCCCCCDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGHHHHHIIIIIIIIJJJJJJKKKKKKKLLLLMMMMMMNNNNNNNOOOOOOPPPPPQQQQQRRRRRRSSSSTTTTTUUUUUUVVVVVWWWWXXXXXYYYYYYZZZZZ[[[\\\\\\]]]]]^^^^^__`````aaaaabbbbcccccddddeeeeeffffggghhhhhiiiiijjjkkkkklllllmmmmnnnoooooppppqppppoooonnnnmmmlllllkkkkkjjjiiiiihhhhhgggggffeeeeedddddcccccbbbaaaaa`````____^^^^^]]]]]\\\\\[[ZZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSSSRRRRRRQQQQQPPPPOOOOOONNNNNNNMMMMMMLLLLLKKKKKKJJJJJJJJIIIIIIHHHHHGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDCCCCCCCCCCBBBBBBBBBBBAAAAAAAA@@@@@@@@@@@@@@@@???????????????????????>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>??????????????????????@@@@@@@@@@@@@@@@@AAAAAAABBBBBBBBBBBCCCCCCCCCCDDDDDDDEEEEEEEEFFFFFFFFFGGGGGGGGHHHHHIIIIIIJJJJJJJKKKKKKKLLLLLMMMMMMNNNNNNOOOOOOPPPPQQQQQRRRRRRSSSSTTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZZ[[[\\\\\]]]]]^^^^^____`````aaaaabbcccccdddddeeeeefffggggghhhhhiiiiijjkkkkklllllmmmmnnnnoooppppppppooooonnmmmmmllllkkkkkjjjjiiiihhhhhgggggffeeeeedddddcccccbbbaaaaa`````___^^^^^]]]]]\\\\\[[[ZZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSSSRRRRRQQQQQQPPPPOOOOOONNNNNNMMMMMMMLLLKKKKKKKKJJJJJJIIIIIIIIHHHHHGGGGGGGFFFFFFFFEEEEEEEEDDDDDCCCCCCCCCCBBBBBBBBBBBBAAAAAAA@@@@@@@@@@@@@@????????????????????>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????????????@@@@@@@@@@@@@AAAAAAAABBBBBBBBBBBCCCCCCCCCCDDDDDEEEEEEEEEFFFFFFFGGGGGGGGHHHHHIIIIIIIJJJJJJJKKKKKKKLLLLMMMMMMNNNNNNOOOOOOOPPPQQQQQQQRRRRRSSSTTTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZZZ[[\\\\\]]]]]^^^^^____`````aaaaabbcccccdddddeeeeefffggggghhhhhiiiijjjkkkkkllllmmmmmnnnooooopppppooooonnmmmmmlllllkkkkjjjjiiiiihhhgggggffffeeeedddddcccccbbaaaaa`````____^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSSSRRRRRQQQQQQPPPPOOOOOONNNNNNMMMMMMLLLLKKKKKKJJJJJJJIIIIIIIHHHHHGGGGGGGGFFFFFFFEEEEEEEEEDDDDDCCCCCCCCCCBBBBBBBBBBAAAAAAA@@@@@@@@@@@@@?????????????????>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>??????????????????@@@@@@@@@@@@AAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDEEEEEEEEFFFFFFFFGGGGGGGHHHHHIIIIIIIIJJJJJJKKKKKKLLLLMMMMMMNNNNNNNOOOOOOPPPPQQQQQQRRRRRSSSSTTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^^____`````aaaaabbbcccccdddddeeeffffggggghhhhiiiiijjjjkkklllllmmmmmnnnoooooppppooonnnnmmmmlllllkkkkkjjiiiiihhhhhggggffffeeeeeddddcccccbbbaaaaa````____^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTTTSSSRRRRRQQQQQQQPPPOOOOONNNNNNNMMMMMMLLLLLKKKKKKJJJJJJIIIIIIIHHHHHGGGGGGGFFFFFFFFEEEEEEEEDDDDDCCCCCCCCCBBBBBBBBBBAAAAAAAA@@@@@@@@@@@@???????????????>>>>>>>>>>>>>>>>>>>>>>>==============================================>>>>>>>>>>>>>>>>>>>>>>???????????????@@@@@@@@@@@@@AAAAAAABBBBBBBBBBCCCCCCCCCDDDDDEEEEEEEEEFFFFFFFGGGGGGGGHHHHHIIIIIIJJJJJJKKKKKKKLLLLLMMMMMMNNNNNNOOOOOPPPPQQQQQQRRRRRSSSSTTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^___````aaaaabbbbcccccddddeeeeefffgggghhhhhiiiiijjjkkkkklllllmmmnnnnooooppooooonnnmmmmmllllkkkkkjjiiiiihhhhhgggggfffeeeeedddddcccbbbbaaaaa`````___^^^^^]]]]]\\\\\[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSSSRRRRRQQQQQQPPPPOOOOONNNNNNMMMMMMMLLLKKKKKKKJJJJJJIIIIIIIHHHHHGGGGGGGFFFFFFFEEEEEEEEEDDDDDCCCCCCCCCBBBBBBBBBBAAAAAA@@@@@@@@@@@@??????????????>>>>>>>>>>>>>>>>>>>================================================================>>>>>>>>>>>>>>>>>>??????????????@@@@@@@@@@@@@AAAAAABBBBBBBBBBCCCCCCCCCDDDDDEEEEEEEEFFFFFFFFGGGGGGHHHHHIIIIIIIIJJJJJJKKKKKKLLLLMMMMMMNNNNNNOOOOOPPPPQQQQQQRRRRRSSSSTTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^__`````aaaaabbbbccccdddddeeeeeffggggghhhhhiiiiijjjkkkkkllllmmmmmnnooooopoooonnnmmmmmlllllkkkjjjjiiiihhhhhgggggffeeeeedddddcccccbbbaaaaa`````__^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSSRRRRRRQQQQQPPPPOOOOOONNNNNNMMMMMMLLLLKKKKKKJJJJJJJIIIIIIHHHHHGGGGGGGFFFFFFFFEEEEEEEDDDDDCCCCCCCCCBBBBBBBBBAAAAAAA@@@@@@@@@@??????????????>>>>>>>>>>>>>>>>=================<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<================>>>>>>>>>>>>>>>>??????????????@@@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCCDDDDDEEEEEEEEFFFFFFFGGGGGGGGHHHHHIIIIIIJJJJJJKKKKKKLLLLMMMMMMNNNNNNNOOOOOOPPPPQQQQQRRRRRRSSTTTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^___`````aaaaabbcccccdddddeeeeefffggggghhhhhiiijjjjkkkklllllmmmmmnnoooopooonnnnmmmlllllkkkkkjjjiiiiihhhhgggggfffeeeedddddcccccbbbaaaaa`````___^^^^]]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSRRRRRRRQQQQQPPPOOOOOOONNNNNNMMMMMLLLLLKKKKKKJJJJJJIIIIIIIHHHGGGGGGGGFFFFFFFEEEEEEEEDDDDDCCCCCCCCCBBBBBBBBAAAAAAA@@@@@@@@@@@???????????>>>>>>>>>>>>>>>==============<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=============>>>>>>>>>>>>>>>????????????@@@@@@@@@@@AAAAAABBBBBBBBBCCCCCCCCCDDDDDEEEEEEEFFFFFFFFGGGGGGGHHHHIIIIIIJJJJJJKKKKKKKLLLLLMMMMMNNNNNNOOOOOOPPPPQQQQQRRRRRRSSSTTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^____`````aaaaabbcccccdddddeeeeffffggggghhhhiiiiijjkkkkklllllmmmmnnnnoooooonnmmmmmllllkkkkkjjjiiiiihhhhhgggffffeeeeeddddcccccbbbbaaa`````____^^^^^]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSSSRRRRRRQQQQQPPPPOOOOOONNNNNMMMMMMMLLLKKKKKKKJJJJJJIIIIIIHHHHHGGGGGGFFFFFFFFEEEEEEEDDDDDCCCCCCCCCBBBBBBBBBAAAAAA@@@@@@@@@@???????????>>>>>>>>>>>>>>===========<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<===========>>>>>>>>>>>>>>???????????@@@@@@@@@@AAAAAAABBBBBBBBCCCCCCCCCDDDDDEEEEEEEEFFFFFFFGGGGGGHHHHHIIIIIIIJJJJJJKKKKKKLLLLMMMMMMNNNNNOOOOOOPPPPQQQQQRRRRRRSSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[[\\\\\]]]^^^^^____`````aaaabbbbcccccdddeeeeeffffgggghhhhhiiiiijjkkkkkllllmmmmmnnnooooonnnmmmmlllllkkkkjjjjiiihhhhhgggggfffeeeeedddddccccbbbaaaaa````____^^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTSSSSRRRRRRQQQQQPPPPOOOOOONNNNNMMMMMMLLLLKKKKKKJJJJJJJIIIIIIHHHHGGGGGGGFFFFFFFFEEEEEEDDDDDCCCCCCCCCBBBBBBBBAAAAA@@@@@@@@@@????????????>>>>>>>>>>>>==========<<<<<<<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<==========>>>>>>>>>>>>>???????????@@@@@@@@@@AAAAABBBBBBBBBCCCCCCCCCDDDDDEEEEEEFFFFFFFGGGGGGGGHHHHIIIIIIJJJJJJKKKKKKLLLLMMMMMMNNNNNOOOOOOOPPPQQQQQRRRRRRRSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^^___````aaaaabbbbccccdddddeeeeeffggggghhhhhiiiijjjjkkklllllmmmmnnnnoooonnmmmmlllllkkkkkjjiiiiihhhhgggggfffeeeeedddddcccccbbaaaaa`````___^^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTSSSSRRRRRRQQQQQPPPPOOOOONNNNNNMMMMMMLLLLKKKKKKJJJJJJIIIIIIIHHHGGGGGGGFFFFFFFEEEEEEEEDDDDDCCCCCCCBBBBBBBBBAAAAA@@@@@@@@@@??????????>>>>>>>>>>>>=========<<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<=========>>>>>>>>>>>>>??????????@@@@@@@@@@AAAAABBBBBBBBCCCCCCCCDDDDDEEEEEEEFFFFFFFFGGGGGGHHHHIIIIIIJJJJJJKKKKKKKLLLMMMMMMMNNNNNNOOOOOPPPPQQQQQRRRRRRSSSSTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^^__`````aaaaabbbcccccdddddeeeeeffggggghhhhiiiiijjjkkkkklllllmmmnnnoonnnmmmmmllllkkkkkjjiiiiihhhhhggggffffeeedddddcccccbbbaaaaa`````__^^^^^]]]]]\\\\\[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTSSSRRRRRRRQQQQQPPPOOOOONNNNNNNMMMMMLLLLLKKKKKJJJJJJIIIIIIHHHHHGGGGGGFFFFFFFEEEEEEEDDDDDCCCCCCCCBBBBBBBAAAAAA@@@@@@@@@??????????>>>>>>>>>>>=========<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<=========>>>>>>>>>>>??????????@@@@@@@@@AAAAAABBBBBBBBCCCCCCCDDDDDEEEEEEEEFFFFFFGGGGGGHHHHHIIIIIIIJJJJJJKKKKKLLLLLMMMMMNNNNNNOOOOOPPPPQQQQQRRRRRRSSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[\\\\\]]]]]^^^^^___`````aaaaabbcccccdddddeeeeffffggghhhhhiiiiijjjkkkkkllllmmmmmnnonnnmmmmlllllkkkjjjjiiiihhhhhgggggffeeeeeddddcccccbbbbaaaa`````___^^^^]]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWVVVVVUUUUUTTTTTTTSSRRRRRRQQQQQPPPPOOOOONNNNNNMMMMMLLLLKKKKKKJJJJJJJIIIIIIHHHHGGGGGGFFFFFFFEEEEEEEDDDDDCCCCCCCBBBBBBBBBAAAAA@@@@@@@@@??????????>>>>>>>>>>========<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;;;;;;::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<=========>>>>>>>>>>??????????@@@@@@@@@AAAAABBBBBBBBCCCCCCCCDDDDDEEEEEEFFFFFFFFGGGGGGHHHHIIIIIIJJJJJJKKKKKKLLLLMMMMMNNNNNNOOOOOPPPPQQQQQRRRRRRSSSTTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^____`````aaaabbbcccccddddeeeeefffggggghhhhhiiijjjjkkkklllllmmmmnnnnnmmmmmlllkkkkkjjjiiiiihhhhgggggffeeeeedddddccccbbbbaaaaa```____^^^^^]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWVVVVVUUUUUTTTTTTSSSRRRRRRQQQQQPPPPOOOOONNNNNNMMMMMLLLLKKKKKKJJJJJJIIIIIIIHHHGGGGGGGFFFFFFEEEEEEEDDDDDCCCCCCCBBBBBBBBAAAAA@@@@@@@@@?????????>>>>>>>>>>>========<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<=======>>>>>>>>>>>>????????@@@@@@@@@AAAAABBBBBBBBBCCCCCCDDDDDEEEEEEEEFFFFFFGGGGGGHHHHIIIIIIJJJJJJKKKKKKKLLLMMMMMNNNNNNNOOOOOPPPQQQQQRRRRRRRSSTTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[[[\\\\\]]]^^^^^____````aaaaabbbbcccdddddeeeeefffggggghhhhiiiiijjkkkkkllllmmmmmnnmmmmmllllkkkkkjjjiiiiihhhhhgggffffeeeedddddcccccbbaaaaa`````___^^^^^]]]]]\\\\[[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTTSSSRRRRRRQQQQQPPPPOOOOONNNNNMMMMMMLLLLKKKKKKJJJJJIIIIIIHHHHHGGGGGGFFFFFFFEEEEEEDDDDDCCCCCCCBBBBBBBBAAAAA@@@@@@@@@????????>>>>>>>>>>========<<<<<<<<<<<<;;;;;;;;;;;;;;;;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;<<<<<<<<<<<<<=======>>>>>>>>>>?????????@@@@@@@@@AAAAABBBBBBBCCCCCCCCDDDDDEEEEEEFFFFFFGGGGGGHHHHHIIIIIIIJJJJJKKKKKKLLLLMMMMMMNNNNNOOOOOPPPPQQQQQRRRRRRSSTTTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZZ[[[[\\\\]]]]]^^^^^__`````aaaaabbbcccccdddddeeeffffgggghhhhhiiiiijjkkkkkllllmmmmmnmmmmlllllkkkkjjjjiiihhhhhgggggfffeeeeeddddcccccbbaaaaa`````___^^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTSSRRRRRRRQQQQQPPPOOOOONNNNNMMMMMMMLLLKKKKKJJJJJJJIIIIIIHHHHGGGGGGFFFFFFEEEEEEEEDDDCCCCCCCCBBBBBBBAAAAA@@@@@@@@@?????????>>>>>>>>>=======<<<<<<<<<<<;;;;;;;;;;;;;;;:::::::::::::::::::::::99999999999999999999999999999999999999999999::::::::::::::::::::::;;;;;;;;;;;;;;;<<<<<<<<<<<========>>>>>>>>>????????@@@@@@@@@AAAAABBBBBBBBCCCCCCCDDDDEEEEEEEFFFFFFFGGGGGGHHHHIIIIIIJJJJJJKKKKKLLLLMMMMMMNNNNNOOOOOPPPPQQQQQRRRRRRSSSTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^^__`````aaaaabbbcccccddddeeeeeffggggghhhhhiiiijjjjkkklllllmmmmnmmmmllllkkkkkjjiiiiihhhhgggggfffeeeeedddddcccbbbbaaaa`````____^^^]]]]]\\\\\[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTSSRRRRRRQQQQQPPPPOOOOONNNNNMMMMMMLLLLKKKKKJJJJJJIIIIIIIHHHGGGGGGGFFFFFFEEEEEEDDDDDCCCCCCBBBBBBBBAAAAA@@@@@@@@@????????>>>>>>>>>======<<<<<<<<<<<<;;;;;;;;;;;;;:::::::::::::::::::9999999999999999999999999999999999999999999999999999999999999:::::::::::::::::::;;;;;;;;;;;;;;<<<<<<<<<<<======>>>>>>>>>?????????@@@@@@@@@AAAAABBBBBBBCCCCCCDDDDDEEEEEEEFFFFFFGGGGGGHHHHIIIIIIJJJJJJKKKKKLLLLMMMMMMNNNNNOOOOOPPPPQQQQQRRRRRRSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[\\\\\]]]]]^^^^____`````aaabbbbccccdddddeeeeeffggggghhhhiiiiijjjkkkkklllmmmmmmmmlllllkkkkjjjiiiihhhhhggggffffeeedddddccccbbbbaaaaa````___^^^^^]]]]\\\\\[[[[ZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMMLLLLKKKKKJJJJJJIIIIIHHHHHGGGGGGFFFFFFFEEEEEEDDDDCCCCCCCBBBBBBBBAAAAA@@@@@@@????????>>>>>>>>>>======<<<<<<<<<<;;;;;;;;;;;;:::::::::::::::::9999999999999999888888888888888888888888888888888888888888889999999999999999::::::::::::::::;;;;;;;;;;;;;<<<<<<<<<<======>>>>>>>>>>???????@@@@@@@@AAAAABBBBBBBCCCCCCCCDDDDEEEEEEFFFFFFGGGGGGHHHHHIIIIIJJJJJJJKKKKKLLLMMMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZ[[[\\\\\]]]]^^^^^____````aaaaabbbccccdddddeeeeffffggghhhhhiiiijjjjkkkklllllmmmmmmllllkkkkkjjiiiihhhhhgggggffeeeeeddddcccccbbbaaaaa`````__^^^^^]]]]]\\\\[[[[ZZZZZYYYXXXXXWWWWVVVVVUUUUUTTTTTSSSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMMLLKKKKKKKJJJJJJIIIIIHHHHGGGGGGFFFFFFEEEEEEDDDDDCCCCCCCBBBBBBBAAAAA@@@@@@@@???????>>>>>>>>>======<<<<<<<<<<;;;;;;;;;;;;;:::::::::::::99999999999999888888888888888888888888888888888888888888888888888888888888899999999999999::::::::::::::;;;;;;;;;;;;<<<<<<<<<<=======>>>>>>>>????????@@@@@@@AAAAABBBBBBBBCCCCCCDDDDDEEEEEEFFFFFFFGGGGGGHHHHIIIIIJJJJJJKKKKKKLLLMMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYZZZZZ[[[[\\\]]]]]^^^^^___`````aaaaabbcccccddddeeeeefffggggghhhhhiiijjjkkkkkllllmmmmmlllkkkkkjjjiiiiihhhhgggggffeeeeeddddcccccbbbbaaa`````___^^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSSSRRRRRQQQQQPPPOOOOONNNNNMMMMMLLLLKKKKKKJJJJJIIIIIIIHHHGGGGGGGFFFFFFEEEEEEDDDDCCCCCCCBBBBBBBAAAAA@@@@@@@????????>>>>>>>>=======<<<<<<<<<<;;;;;;;;;;;::::::::::::999999999999888888888888888888888888888888888888888888888888888888888888888888888888888899999999999:::::::::::::;;;;;;;;;;;<<<<<<<<<<======>>>>>>>>>???????@@@@@@@@AAAAABBBBBBCCCCCCCCDDDEEEEEEEFFFFFFGGGGGGHHHHIIIIIIJJJJJKKKKKKLLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSSTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^^__`````aaaabbbbcccccdddeeeeefffggggghhhhiiiiijjkkkkkllllmmlllllkkkkjjjjiiiihhhhhgggffffeeeedddddccccbbbaaaa`````____^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLLKKKKKKJJJJJIIIIIIHHHHGGGGGGFFFFFFFEEEEEEDDDDCCCCCCBBBBBBBAAAA@@@@@@@@????????>>>>>>>>======<<<<<<<<<;;;;;;;;;;;:::::::::::::9999999999888888888888888888888777777777777777777777777777777777777777777778888888888888888888889999999999::::::::::::;;;;;;;;;;;;<<<<<<<<=======>>>>>>>?????????@@@@@@@AAAABBBBBBBBCCCCCCDDDDEEEEEEFFFFFFGGGGGGHHHHIIIIIIJJJJJKKKKKKKLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSSTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^___`````aaaabbbbccccdddddeeeffffgggghhhhhiiiijjjkkkklllllmllllkkkkkjjjiiiiihhhgggggfffeeeeeddddcccccbbaaaaa````____^^^^^]]]\\\\\[[[[ZZZZYYYYYXXXXXWWVVVVVUUUUUTTTTTSSSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLLKKKKKKJJJJJIIIIIIHHHHGGGGGFFFFFFEEEEEEDDDDDCCCCCCCBBBBBBAAAAA@@@@@@@????????>>>>>>>=======<<<<<<<<;;;;;;;;;;::::::::::::99999999998888888888888888877777777777777777777777777777777777777777777777777777777777778888888888888888889999999999:::::::::::;;;;;;;;;;<<<<<<<<<======>>>>>>>>???????@@@@@@@@AAAAABBBBBBCCCCCCDDDDDEEEEEEFFFFFFFGGGGGHHHIIIIIIIJJJJJKKKKKKLLLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSSTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZ[[[[\\\\\]]]]^^^^^____```aaaaabbbcccccddddeeeeeffggggghhhhiiiiijjkkkkkllllmllllkkkkjjiiiiihhhhgggggfffeeeeedddcccccbbbaaaaa`````__^^^^^]]]]]\\\\[[[[ZZZZZYYYYXXXXXWWWVVVVVUUUUTTTTTSSSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLKKKKKKKJJJJJIIIIIHHHHHGGGGGFFFFFFEEEEEEDDDDCCCCCCBBBBBBBBAAA@@@@@@@@???????>>>>>>>>======<<<<<<<<<;;;;;;;;;:::::::::::9999999998888888888888888777777777777777777777777777777777777777777777777777777777777777777777777778888888888888888999999999:::::::::::;;;;;;;;;<<<<<<<<=======>>>>>>>????????@@@@@@@AAAABBBBBBBCCCCCCCDDDEEEEEEEFFFFFFGGGGGHHHHHIIIIIJJJJJKKKKKKLLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSTTTTTUUUUVVVVVWWWWXXXXXYYYYZZZZZ[[[\\\\]]]]]^^^^^___`````aaaaabbcccccddddeeeeeffggggghhhhiiiiijjjkkkllllllllkkkkkjjiiiihhhhhggggffffeeedddddccccbbbbaaaa`````__^^^^^]]]]]\\\\\[[[ZZZZZYYYYYXXXWWWWVVVVVUUUUUTTTTTSSSRRRRRQQQQQPPPOOOOONNNNNMMMMMLLLLKKKKKKJJJJJIIIIIHHHHGGGGGGFFFFFFFEEEEEEDDDDCCCCCCBBBBBBAAAAA@@@@@@????????>>>>>>>=======<<<<<<<;;;;;;;;;;::::::::::99999999988888888888888777777777777777777777666666666666666666666666666666666666666666667777777777777777777778888888888888899999999::::::::::;;;;;;;;;;<<<<<<<<======>>>>>>>>???????@@@@@@AAAAABBBBBBBCCCCCCDDDDEEEEEEFFFFFFGGGGGGHHHHIIIIIJJJJJKKKKKKLLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSTTTTTUUUUUVVVVVWWWWXXXXYYYYYZZZZZ[[\\\\\]]]]]^^^^^___`````aaaabbbccccdddddeeeeffffggghhhhhiiiijjjkkkkklllllkkkkkjjiiiiihhhhgggggffeeeeeddddcccccbbbaaaaa```____^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJJIIIIIHHHHGGGGGGFFFFFEEEEEEDDDDDCCCCCCCBBBBBBAAAA@@@@@@@??????>>>>>>>>======<<<<<<<<;;;;;;;;;;::::::::::9999999888888888888877777777777777777666666666666666666666666666666666666666666666666666666666666677777777777777777788888888888899999999::::::::::;;;;;;;;;;<<<<<<<=======>>>>>>>??????@@@@@@@@AAAABBBBBBCCCCCCDDDDDEEEEEEFFFFFGGGGGGGHHHIIIIIJJJJJJJKKKKKLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^____````aaaaabbcccccddddeeeeefffggggghhhiiiiijjjkkkkkllllkkkjjjjiiiihhhhhggggffeeeeedddddccccbbaaaaa`````___^^^^^]]]]\\\\\[[[ZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJJIIIIIHHHHGGGGGGFFFFFEEEEEEDDDDCCCCCCBBBBBBAAAAA@@@@@@@???????>>>>>>>>=====<<<<<<<;;;;;;;;;::::::::::999999988888888888877777777777777776666666666666666666666666666666666666666666666666666666666666666666666666677777777777777778888888888899999999::::::::::;;;;;;;;<<<<<<<<=====>>>>>>>????????@@@@@@AAAAABBBBBBCCCCCCCDDDEEEEEEEFFFFFGGGGGGHHHHIIIIIJJJJJJKKKKKLLLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZ[[[[\\\\\]]]]^^^^^__`````aaaaabbbcccdddddeeeeefffgggghhhhhiiijjjjkkkkllkkkkkjjjiiiiihhhhgggggffeeeedddddccccbbbaaaa`````___^^^^^]]]]]\\\[[[[ZZZZZYYYYXXXXXWWWWVVVUUUUUTTTTTSSSSRRRRRQQQQQPPPOOOOONNNNNMMMMMLLLKKKKKJJJJJJJIIIIIHHHGGGGGGGFFFFFEEEEEEDDDDCCCCCCBBBBBBAAAA@@@@@@@???????>>>>>>>=====<<<<<<<<;;;;;;;;::::::::::99999998888888888877777777777777666666666666666666666655555555555555555555555555555555555555555666666666666666666666667777777777777788888888888999999::::::::::;;;;;;;;;<<<<<<<=====>>>>>>>>??????@@@@@@@@AAABBBBBBBCCCCCCDDDDEEEEEEFFFFFGGGGGGHHHHIIIIIJJJJJJKKKKKLLLLMMMMMNNNNNOOOOOPPQQQQQRRRRRSSSSTTTTTUUUUUVVVVWWWWXXXXXYYYZZZZZ[[[[\\\\]]]]]^^^^^__`````aaaabbbbccccdddddeeefffggggghhhhiiiiijjkkkkklkkkkjjjjiiiihhhgggggfffeeeeeddddcccccbbaaaaa````____^^^]]]]]\\\\\[[[ZZZZZYYYYYXXXXWWWVVVVVUUUUTTTTTSSSSRRRRRQQQQQPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJJIIIIIHHHHGGGGGFFFFFFEEEEEEEDDDCCCCCCCBBBBBBAAAA@@@@@@???????>>>>>>>=====<<<<<<<;;;;;;;;;:::::::::999999888888888887777777777777666666666666666666555555555555555555555555555555555555555555555555555555555556666666666666666666777777777777888888888888999999:::::::::;;;;;;;;<<<<<<<<=====>>>>>>????????@@@@@@AAAABBBBBBCCCCCCDDDDEEEEEEFFFFFFGGGGGHHHHIIIIIJJJJJJKKKKKLLLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSTTTTTUUUUVVVVVWWWWXXXXYYYYYZZZZZ[[\\\\\]]]]]^^^^____```aaaaabbbcccccddddeeeeeffggggghhhhiiiijjjkkkklkkkkjjjiiihhhhhggggffffeeeedddddcccbbbbaaaa`````__^^^^^]]]]\\\\\[[[ZZZZZYYYYYXXXXXWWVVVVVUUUUUTTTTSSSSRRRRRQQQQQPPOOOOONNNNNMMMMMMLLLKKKKKJJJJJJIIIIIHHHHGGGGGFFFFFFEEEEEDDDDCCCCCCBBBBBBAAAAA@@@@@@@??????>>>>>>>====<<<<<<<<<;;;;;;;:::::::::99999988888888887777777777777666666666666666555555555555555544444444444444444444444444444444444444444555555555555555556666666666666667777777777778888888888999999:::::::::;;;;;;;;<<<<<<<<====>>>>>>>>??????@@@@@@AAAAABBBBBBCCCCCCCDDDEEEEEFFFFFFFGGGGGHHHIIIIIJJJJJJJKKKKKLLMMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSSTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[\\\\\]]]]^^^^^___`````aaabbbbccccdddddeeeefffgggghhhhhiiiijjkkkkkkkkjjiiiiihhhhgggggfffeeeeedddcccccbbbaaaa`````__^^^^^]]]]]\\\\[[[[ZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLKKKKKJJJJJJIIIIIHHHHGGGGGFFFFFFEEEEEDDDDCCCCCCBBBBBBAAAA@@@@@@????????>>>>>>=====<<<<<<<;;;;;;;;:::::::::9999998888888887777777777776666666666666655555555555544444444444444444444444444444444444444444444444444444444444555555555555566666666666667777777777777888888888999999:::::::::;;;;;;;<<<<<<<<=====>>>>>>???????@@@@@@@AAABBBBBBBCCCCCCDDDDEEEEEFFFFFFGGGGGHHHHIIIIIJJJJJJKKKKKLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZ[[[[\\\]]]]]^^^^^___`````aaaabbcccccddddeeeeeffggggghhhhiiiiijjjkkkkkkjjiiiihhhhhggggffeeeeeddddcccccbbbaaaaa```____^^^^]]]]]\\\\\[[ZZZZZYYYYXXXXXWWWWVVVVUUUUUTTTTTSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLKKKKKKKJJJJJIIIIIHHHGGGGGFFFFFFFEEEEEDDDCCCCCCCBBBBBBAAAA@@@@@@??????>>>>>>=====<<<<<<<<;;;;;;;:::::::::999998888888888777777777776666666666666555555555544444444444444444444444444444444444444444444444444444444444444444444444444555555555566666666666677777777777888888888899999:::::::::;;;;;;;;<<<<<<<=====>>>>>>???????@@@@@@AAAABBBBBBCCCCCCDDDDEEEEEFFFFFFGGGGGHHHHIIIIIJJJJJKKKKKKLLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSTTTTTUUUUUVVVVWWWXXXXXYYYYZZZZZ[[[\\\\\]]]]]^^^____````aaaaabbcccccddddeeeeefffggghhhhhiiiijjjkkkkkjjiiiiihhhhgggggffeeeedddddccccbbbbaaa`````___^^^^^]]]]\\\\\[[ZZZZZYYYYYXXXXWWWWVVVVVUUUTTTTTSSSSRRRRQQQQQPPPPOOOOONNNNNMMMMMLLKKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEEDDDDCCCCCCBBBBBAAAAA@@@@@@@??????>>>>>>=====<<<<<<;;;;;;;;:::::::::99999888888888877777777776666666666655555555554444444444444444444443333333333333333333333333333333333333333344444444444444444444445555555555666666666667777777777888888888899999:::::::::;;;;;;;<<<<<<=====>>>>>>>??????@@@@@@AAAAABBBBBCCCCCCDDDDEEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKKLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRSSSSTTTTTUUUUVVVVVWWWWXXXYYYYYZZZZZ[[[\\\\\]]]]^^^^^__`````aaaabbbbcccdddddeeeefffggggghhhiiiiijjjkkjjjjiiiihhhhhggggffeeeeeddddcccccbbaaaaa````____^^^^]]]]]\\\[[[[ZZZZYYYYYXXXXXWWVVVVVUUUUUTTTTSSSSRRRRRQQQQPPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEEDDDDCCCCCBBBBBBAAAA@@@@@@??????>>>>>>>=====<<<<<<<;;;;;;;;:::::::9999988888888877777777776666666666655555555544444444444444444333333333333333333333333333333333333333333333333333333333334444444444444444445555555566666666666677777777778888888899999::::::::;;;;;;;<<<<<<<<=====>>>>>>??????@@@@@@@AAABBBBBBBCCCCCDDDEEEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKKKLLLLMMMMMNNNNNOOOOOPPPPQQQQRRRRRSSSTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZ[[[[\\\\]]]]]^^^^___````aaaaabbbcccccdddeeeeefffgggghhhhhiiijjjjkjjjiiiiihhhhgggffffeeeedddddccccbbaaaaa`````___^^^]]]]]\\\\\[[[ZZZZZYYYYXXXXXWWVVVVVUUUUUTTTTTSSSRRRRRQQQQQPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEEDDDDCCCCCBBBBBBAAAA@@@@@@??????>>>>>>=====<<<<<<<;;;;;;;::::::::999998888888877777777776666666666555555555444444444444444333333333333333333333333333333333333333333333333333333333333333333333334444444444444445555555556666666666777777777788888888899999:::::::;;;;;;;;<<<<<<=====>>>>>>???????@@@@@@AAAABBBBBBCCCCCDDDDEEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSTTTTTUUUUUVVVVVWWWXXXXXYYYYZZZZZ[[\\\\\]]]]]^^^^__`````aaaaabbbccccdddddeeeffffgggghhhhiiiiijjkjjjiiiihhhgggggfffeeeeeddddcccccbbaaaa`````__^^^^^]]]]\\\\\[[[ZZZZZYYYYYXXXWWWWVVVVUUUUUTTTTTSSRRRRRQQQQQPPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEEEEDDDCCCCCBBBBBBBAAA@@@@@@@??????>>>>>>====<<<<<<;;;;;;;;:::::::99999888888888777777777666666666655555554444444444444433333333333333333333322222222222222222222222222222222222222222333333333333333333333344444444444445555555566666666667777777778888888899999::::::::;;;;;;;<<<<<<<===>>>>>>>??????@@@@@@AAAABBBBBBCCCCCDDDDEEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLLLMMMMMNNNNNOOOOOPPQQQQQRRRRRSSSTTTTTUUUUUVVVWWWWXXXXYYYYYZZZZZ[[\\\\\]]]]^^^^^___`````aaabbbcccccddddeeeeeffggggghhhhiiiijjjjjiiiiihhhggggffffeeeedddddcccbbbaaaaa````___^^^^]]]]]\\\\[[[[ZZZYYYYYXXXXWWWWVVVVVUUUUTTTTTSSSRRRRQQQQQPPPPOOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEEDDDCCCCCCBBBBBAAAAA@@@@@??????>>>>>>>=====<<<<<<;;;;;;;:::::::9999988888888777777777666666666655555544444444444443333333333333333322222222222222222222222222222222222222222222222222222222222333333333333333333444444444444555555666666666677777777788888888899999::::::;;;;;;;;<<<<<<=====>>>>>>??????@@@@@AAAAABBBBBCCCCCCCDDEEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLLLMMMMMNNNNNOOOOPPPQQQQQRRRRSSSSTTTTTUUUUVVVVVWWWXXXXYYYYYZZZZ[[[[\\\]]]]]^^^^____````aaaaabbccccdddddeeeefffgggghhhhiiiiijjjjiiihhhhgggggfffeeeeedddccccbbbbaaaa`````__^^^^^]]]]\\\\\[[ZZZZZYYYYXXXXXWWWVVVVVUUUUUTTTSSSSRRRRRQQQQPPPPOOOOONNNNNMMMLLLLKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEEDDDCCCCCCBBBBBAAAA@@@@@@??????>>>>>>====<<<<<<;;;;;;;;:::::::9999988888888777777777666666665555555544444444444333333333333333222222222222222222222222222222222222222222222222222222222222222222222223333333333333334444444444445555555666666666777777777888888899999::::::::;;;;;;;<<<<<<====>>>>>>???????@@@@@@AAAABBBBBCCCCCCDDEEEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKKKLLLLMMMMNNNNNOOOOOPPPPQQQRRRRRSSSSTTTTUUUUUVVVVVWWXXXXXYYYYZZZZZ[[[\\\\\]]]^^^^^___`````aaaabbbccccddddeeeeeffggggghhhhiiiijjiiiihhhhhggggffffeeeddddcccccbbbaaaaa```___^^^^^]]]]\\\\\[[ZZZZZYYYYYXXXXWWWWVVVUUUUUTTTTTSSSRRRRRQQQQQPPOOOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEDDDCCCCCCCBBBBBAAA@@@@@@@??????>>>>>>====<<<<<<;;;;;;::::::::999998888888777777777666666666555555444444444443333333333333322222222222222222222111111111111111111111111111111111111111112222222222222222222233333333333333444444444445555555666666667777777778888888899999:::::::;;;;;;<<<<<<<===>>>>>>>??????@@@@@@AAAABBBBBCCCCCCDDDDEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSTTTTTUUUUUVVVVWWWWXXXYYYYYZZZZZ[[[\\\\\]]]]^^^^^__````aaaaabbcccccddddeeeeffffggghhhhhiiiijiiiihhhhgggggffeeeedddddccccbbbbaaa`````___^^^^]]]]]\\\[[[[ZZZZYYYYYXXXXWWWVVVVUUUUUTTTTTSSSRRRRRQQQQQPPOOOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEEDDDDCCCCCCBBBBBAAAA@@@@@@?????>>>>>>>=====<<<<<<;;;;;;::::::99999888888887777777776666666555555554444444444333333333333222222222222222211111111111111111111111111111111111111111111111111111111111222222222222222233333333333334444444444555555566666666777777777888888899999::::::;;;;;;;<<<<<<=====>>>>>>?????@@@@@@AAAABBBBBCCCCCCDDDDEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSTTTTTUUUUUVVVVWWWWXXXXYYYYYZZZ[[[[\\\\]]]]]^^^^__`````aaaabbbbcccdddddeeeefffggggghhhiiiijiiihhhhhggggffeeeeeddddcccccbbaaaa`````___^^^^^]]]\\\\\[[[ZZZZZYYYYXXXXXWWVVVVVUUUUTTTTTSSSSRRRQQQQQPPPPOOOONNNNNMMMMMLLLLKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEDDDDCCCCCCBBBBBAAAA@@@@@@?????>>>>>>====<<<<<<;;;;;;;:::::::9999988888877777777766666666555555444444444433333333333222222222222222111111111111111000000000000000000000000000000000000000001111111111111112222222222222223333333333334444444444555555666666677777777788888899999::::::::;;;;;;<<<<<<====>>>>>>?????@@@@@@@AAABBBBBCCCCCCCDDDEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKLLLLMMMMMNNNNNOOOPPPPQQQQQRRRRSSSSTTTTTUUUVVVVVWWWXXXXXYYYYZZZZZ[[\\\\\]]]]^^^^^__`````aaaabbbcccccdddeeeeefffgggghhhhhiiiiiihhhhgggggffeeeedddddccccbbaaaaa````____^^^]]]]]\\\\[[[ZZZZZYYYYYXXXWWWWVVVVUUUUUTTTTSSSRRRRRQQQQPPPPOOOOONNNNMMMMMLLLKKKKKJJJJJIIIIHHHHGGGGGFFFFFEEEEEDDDDCCCCCCBBBBBAAAA@@@@@??????>>>>>>====<<<<<<;;;;;;:::::::999998888888777777776666666555555444444444433333333332222222222222211111111111110000000000000000000000000000000000000000000000000000000011111111111122222222222222333333333344444444445555556666666677777778888888899999::::::;;;;;;<<<<<<<===>>>>>>>??????@@@@@AAAABBBBBCCCCCCDDDDEEEEEFFFFFGGGGGHHHIIIIJJJJJKKKKKLLLLMMMMMNNNNOOOOOPPPQQQQRRRRRSSSSTTTTUUUUUVVVWWWWXXXXYYYYYZZZZZ[[\\\\]]]]]^^^^____```aaaaabbbccccdddddeeefffggggghhhhiiiiihhhhhgggfffeeeeeddddcccccbbaaaa`````__^^^^^]]]]\\\\\[[[ZZZYYYYYXXXXWWWWVVVVUUUUUTTTTTSSRRRRRQQQQQPPPOOOOONNNNNMMMLLLLKKKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEEEDDCCCCCCCBBBBBAAA@@@@@???????>>>>>=====<<<<<<;;;;;;::::::999988888888777777766666666555555444444444333333333322222222222211111111111000000000000000000000000000000000000000000000000000000000000000000000111111111112222222222222333333333344444444455555566666667777777788888889999::::::;;;;;;;<<<<<<=====>>>>>??????@@@@@AAAABBBBBCCCCCCDDDEEEEEEFFFFFGGGGGHHIIIIIJJJJJKKKKKLLLLMMMMNNNNNOOOOOPPQQQQQRRRRRSSSTTTTTUUUUUVVVVWWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^^___`````aaabbbcccccddddeeeeeffgggghhhhhiiiihhhgggggfffeeeedddddcccbbbaaaaa````__^^^^^]]]]\\\\\[[ZZZZZYYYYXXXXXWWWVVVVVUUUTTTTTSSSRRRRRQQQQQPPOOOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHGGGGGFFFFFEEEEEEEDDCCCCCCBBBBBAAAA@@@@@??????>>>>>====<<<<<<;;;;;;;::::::9999988888877777777666666655555544444444433333333332222222222211111111100000000000000000000/////////////////////////////////////////00000000000000000000111111111222222222223333333333444444444555555666666667777777888888899999::::::;;;;;;<<<<<<====>>>>>??????@@@@@AAAABBBBBCCCCCCDDDEEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKKKLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSTTTTTUUUUVVVVVWWXXXXXYYYYZZZZZ[[[\\\\\]]]^^^^^___````aaaaabbccccdddddeeeeffggggghhhhiihhhhhggggfffeeeeedddcccccbbbaaaa`````__^^^^]]]]]\\\\[[[ZZZZYYYYYXXXXWWWWVVVUUUUUTTTTSSSSRRRRQQQQQPPPOOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEEDDDCCCCCCBBBBBAAAA@@@@@?????>>>>>>====<<<<<<;;;;;;:::::::9998888888877777776666666655555444444444333333332222222222221111111100000000000000000////////////////////////////////////////////////////////0000000000000000111111111222222222223333333334444444445555566666667777777788888889999::::::;;;;;;<<<<<<<===>>>>>>>?????@@@@@AAABBBBBCCCCCCCDDEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLMMMMMNNNNNOOOOPPPPQQQQQRRRRSSSTTTTUUUUUVVVVWWWWXXXYYYYYZZZZ[[[[\\\\]]]]]^^^___`````aaaabbcccccddddeeeeeffgggghhhhhihhhhgggggfffeeedddddccccbbbaaaaa```___^^^^^]]]]\\\\\[[ZZZZZYYYYXXXXXWWVVVVVUUUUTTTTTSSSRRRRRQQQPPPPOOOOONNNNMMMMMLLLLKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEDDDCCCCCCBBBBBAAAA@@@@@?????>>>>>>====<<<<<<;;;;;;::::::99998888887777777766666665555544444444333333333322222222221111111000000000000000/////////////////////////////////////////////////////////////////////00000000000000011111111222222222233333333334444444555556666666677777778888889999::::::;;;;;;;<<<<<<====>>>>>>?????@@@@@AAAABBBBBCCCCCCDDEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKLLLLMMMMMNNNOOOOOPPPPQQQQRRRRRSSTTTTTUUUUVVVVVWWWXXXXXYYYZZZZZ[[[\\\\\]]]]^^^^^__````aaaaabbccccdddddeeeeffggggghhhhihhhhggggffeeeeeddddccccbbbbaaa`````___^^^^]]]]]\\\[[[ZZZZZYYYYXXXXXWWVVVVVUUUUTTTTTSSRRRRRQQQQQPPPOOOOONNNNNMMMMLLLKKKKKJJJJIIIIIHHHHGGGGGFFFFFEEEEEDDCCCCCCCBBBBBAAA@@@@@?????>>>>>>>===<<<<<;;;;;;;::::::99999888888777777666666665555544444443333333332222222222111111110000000000000////////////////////.......................................////////////////////000000000000001111111222222222233333333344444444555556666666777777888888899999::::::;;;;;;<<<<<====>>>>>>?????@@@@@AAAABBBBBCCCCCCDDDEEEEEFFFFFGGGGGHHHIIIIIJJJJKKKKKLLLLMMMMNNNNNOOOOOPPQQQQQRRRRRSSSTTTTTUUUVVVVVWWWXXXXXYYYYZZZZZ[[\\\\]]]]]^^^^__`````aaaabbbbcccddddeeeeefffggghhhhhhhhgggggffeeeedddddccccbbaaaaa````___^^^^^]]]\\\\\[[[ZZZZYYYYYXXXWWWWVVVVUUUUUTTTTSSSRRRRQQQQQPPPOOOOONNNNNMMMMMLLKKKKKJJJJJIIIIHHHHGGGGGFFFFFEEEEEDDDCCCCCBBBBBAAAA@@@@@?????>>>>>>====<<<<<;;;;;;:::::::9998888888777777766666655555444444444333333332222222222111111000000000000/////////////////........................................................////////////////00000000000001111112222222222333333344444444455555666666777777778888889999::::::;;;;;;<<<<<====>>>>>>?????@@@@@AAAABBBBBCCCCCDDDDEEEEEFFFFFGGGGGHHHHIIIJJJJJKKKKKLLLMMMMMNNNNNOOOOOPPQQQQQRRRRSSSSTTTTUUUUUVVVWWWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^^__````aaaaabbbcccdddddeeeefffggggghhhhhhggggffeeeeeddddccccbbbaaaa````____^^^]]]]]\\\\[[[ZZZZZYYYXXXXXWWWVVVVVUUUUTTTTTSSRRRRRQQQQPPPPOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHGGGGGFFFFFEEEEEDDDDCCCCCBBBBBAAAA@@@@@?????>>>>>>====<<<<<;;;;;;::::::999988888877777776666666555554444444433333332222222221111111000000000000/////////////...............---------------------------------------...............//////////////00000000000111111112222222233333333444444455555666666667777778888889999::::::;;;;;;;<<<<<===>>>>>>>?????@@@@@AAABBBBBCCCCCDDDDEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKKKLLMMMMMNNNNNOOOOPPPPQQQRRRRRSSSTTTTTUUUUVVVVVWWXXXXXYYYYZZZZZ[[\\\\]]]]]^^^^____```aaaabbbbccccdddeeeeefffgggghhhhhgggggffeeeedddddccccbbaaaaa````__^^^^^]]]]\\\\[[[[ZZZYYYYYXXXXWWWVVVVVUUUUUTTTSSSRRRRRQQQQQPPOOOOONNNNMMMMMLLLLKKKKJJJJJIIIIIHHGGGGGFFFFFEEEEEDDDDCCCCCBBBBBAAAA@@@@@?????>>>>>===<<<<<<<;;;;;;:::::9999988888877777766666665555544444443333333322222222111111100000000000////////////............--------------------------------------------------------.........../////////////0000000000011111122222222233333334444444455555666666777777888888899999:::::;;;;;;<<<<<<====>>>>>?????@@@@@AAAABBBBBCCCCCDDDEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKKLLLMMMMMNNNNOOOOOPPPQQQQQRRRRRSSTTTTUUUUUVVVVVWWXXXXYYYYYZZZZ[[[[\\\]]]]^^^^^___```aaaaabbbccccdddddeeefffggggghhhhgggfffeeeeeddddcccbbbbaaaa````___^^^^]]]]\\\\\[[ZZZZZYYYYXXXXXWWWVVVUUUUUTTTTSSSSRRRRQQQQQPPOOOOONNNNNMMMMLLLLKKKKKJJJIIIIIHHHHGGGGFFFFFEEEEEDDDDCCCCCBBBBBAAA@@@@@?????>>>>>====<<<<<<;;;;;:::::::9998888888777777666666655554444444433333332222222221111110000000000///////////..........---------------------------------------------------------------------..........///////////00000000001111111222222223333333344444445555666666667777778888889999::::::;;;;;<<<<<<====>>>>>?????@@@@@AAAABBBBBCCCCCDDDDEEEEEFFFFFGGGHHHHIIIIIJJJJKKKKKLLLLMMMNNNNNOOOOOPPPQQQQQRRRRSSSTTTTUUUUUVVVVWWXXXXXYYYYZZZZZ[[[\\\\\]]]^^^^____````aaabbbbccccddddeeeeeffgggghhgggggfffeeeedddddcccbbbaaaa`````__^^^^^]]]]\\\\[[[ZZZZYYYYYXXXXWWVVVVVUUUUTTTTTSSSRRRRRQQQPPPPOOOONNNNNMMMMMLLKKKKKJJJJJIIIIHHHHGGGGGFFFFEEEEEDDDCCCCCBBBBBAAAA@@@@@?????>>>>>====<<<<<<;;;;;::::::99998888887777777666666555554444443333333322222222111111100000000////////////........--------------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------------------.........///////////00000000011111122222222233333334444444555556666667777778888889999::::::;;;;;<<<<<<<===>>>>>?????@@@@@AAAABBBBBCCCCCDDDDEEEEEFFFFGGGGGHHHIIIIJJJJJKKKKKLLLMMMMMNNNNNOOOPPPPQQQQRRRRRSSTTTTTUUUUVVVVVWWWXXXYYYYYZZZZ[[[[\\\\]]]^^^^^___`````aaaabbccccdddddeeeeffggggghggggfffeeeeedddccccbbbbaaaa```____^^^^]]]]\\\\\[[ZZZZYYYYYXXXXWWWVVVVUUUUUTTTTSSSSRRRQQQQQPPPOOOOONNNNMMMMMLLKKKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEEDDCCCCCBBBBBAAAA@@@@@?????>>>>>====<<<<<<;;;;;::::::9999888888777777666666655544444444333333322222222111110000000000//////////.........----------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----------------.........//////////000000000011111222222233333333444444455556666667777778888888999:::::::;;;;;<<<<<<====>>>>>?????@@@@@AAABBBBBCCCCCDDDEEEEEFFFFFGGGGGHHIIIIIJJJJJKKKKKLLLMMMMMNNNNOOOOOPPQQQQQRRRRSSSSTTTUUUUUVVVVWWWWXXXXYYYYYZZZ[[[\\\\\]]]]^^^____````aaaabbbccccddddeeeeeffgggghggggfffeeedddddccccbbbaaa`````___^^^^]]]]]\\\[[[[ZZZZYYYYXXXXXWWVVVVVUUUUTTTTTSSRRRRQQQQQPPPOOOOONNNNNMMMLLLLKKKKJJJJJIIIIIHHGGGGGFFFFFEEEEEDDDCCCCCBBBBBAAAA@@@@@?????>>>>>===<<<<<<<;;;;;:::::99999888887777776666665555544444433333333222222211111000000000//////////........---------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------------.......//////////000000000111112222222233333334444445555566666667777778888899999:::::;;;;;<<<<<<====>>>>>?????@@@@@AAAABBBBBCCCCCDDEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKLLLLMMMMNNNNNOOOOOPPQQQQQRRRRSSSTTTTTUUUVVVVVWWWXXXXXYYYYZZZ[[[[\\\\]]]]]^^^^__`````aaaabbccccdddddeeeeffggggggggffeeeeeddddccccbbbbaaa````____^^^^]]]\\\\\[[[ZZZZYYYYYXXXWWWWVVVVUUUUTTTTTSSRRRRRQQQQPPPPOOONNNNNMMMMMLLLKKKKKJJJJIIIIIHHHGGGGFFFFFEEEEEDDDCCCCCBBBBBAAA@@@@@?????>>>>>====<<<<<;;;;;;:::::99998888887777777666666555544444443333332222222211111000000000//////////......--------------,,,,,,,,,,,,,,,,,,+++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,--------------......//////////0000000001111122222223333334444444455556666667777778888889999:::::;;;;;;<<<<<====>>>>>?????@@@@@AAAABBBBBCCCCCDDEEEEEFFFFFGGGGHHHHIIIIIJJJJKKKKKLLMMMMMNNNNNOOOOPPPPQQQRRRRRSSSTTTTTUUUUVVVWWWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^___````aaaabbbbcccddddeeeeefffggggggffeeeedddddccccbbaaaa`````___^^^]]]]]\\\\[[[ZZZZZYYYXXXXXWWWVVVVUUUUUTTTSSSSRRRRQQQQQPPOOOOONNNNMMMMMLLLKKKKKJJJJJIIIHHHHGGGGGFFFFEEEEEDDDDCCCCCBBBAAAA@@@@@?????>>>>>====<<<<<;;;;;;:::::999988888877777766666665554444444333333322222211111110000000/////////.......------------,,,,,,,,,,,,,,,,++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,-----------........////////000000001111112222223333333344444455556666667777778888888999:::::;;;;;;;<<<<<===>>>>>?????@@@@@AAAABBBBCCCCCDDDDEEEEEFFFGGGGGHHHHIIIIJJJJJKKKKKLLMMMMMNNNNOOOOOPPPQQQQQRRRSSSSTTTTUUUUUVVVVWWXXXXXYYYYZZZZZ[[\\\\]]]]]^^^^__`````aaaabbbcccdddddeeeefffgggggfffeeeeddddccccbbbaaaa````____^^^]]]]\\\\\[[[ZZZYYYYYXXXXWWWVVVVVUUUTTTTTSSSRRRRRQQQQPPOOOOONNNNNMMMMLLLLKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEDDDCCCCCBBBBBAAA@@@@@?????>>>>>====<<<<<;;;;;;:::::99998888887777766666655555444444333333322222221111100000000////////.......-----------,,,,,,,,,,,,,,++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,-----------....../////////00000001111122222222333333444444555556666666777778888889999:::::;;;;;;<<<<<====>>>>>?????@@@@@AABBBBBCCCCCDDDDEEEEFFFFFGGGGGHHIIIIIJJJJJKKKKLLLLMMMNNNNNOOOOOPPPQQQQRRRRRSSTTTTTUUUUVVVVVWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^____```aaaabbbbccccdddeeeeffffggggffeeeedddddccccbbaaaa`````__^^^^]]]]]\\\\[[ZZZZZYYYYXXXXXWWWVVVUUUUUTTTTSSSSRRRRQQQQQPPOOOONNNNNMMMMMLLKKKKKJJJJIIIIIHHHGGGGGFFFFFEEEEEDDCCCCCBBBBBAAA@@@@@?????>>>>>===<<<<<;;;;;;;:::::999888887777777666666555544444433333332222222111110000000/////////......----------,,,,,,,,,,,,,++++++++++++++++++***************************************+++++++++++++++++++,,,,,,,,,,,,----------.......////////0000000011111222222333333334444445555666666777777888889999:::::;;;;;;<<<<<====>>>>>?????@@@@@AABBBBBCCCCCDDDEEEEEFFFFFGGGGGHHIIIIIJJJJKKKKKLLLMMMMMNNNNNOOOPPPQQQQQRRRRSSSTTTTUUUUUVVVVWWXXXXXYYYYZZZZZ[[[\\\]]]]]^^^^___`````aaabbbccccdddddeeefffggffffeeeeddddcccbbbbaaaa````___^^^^]]]]\\\\\[[ZZZZYYYYYXXXXWWVVVVVUUUUTTTTTSSSRRRQQQQQPPPOOOOONNNNMMMMMLLKKKKKJJJJIIIIIHHHHGGGFFFFFEEEEEDDDCCCCCBBBBBAAAA@@@@@???>>>>>>>==<<<<<;;;;;;:::::999988888777777666666655544444443333332222221111100000000////////.....----------,,,,,,,,,,,,,+++++++++++++++******************************************************+++++++++++++++,,,,,,,,,,,,----------...../////////00000001111122222223333334444445555666666777777888889999:::::;;;;;;<<<<<===>>>>>>????@@@@@AAAABBBBBCCCCCDDEEEEEFFFFFGGGGHHHHIIIIIJJJKKKKKLLLMMMMMNNNNOOOOOPPQQQQQRRRRSSTTTTTUUUUVVVVVWWWXXXYYYYYZZZZ[[[\\\\\]]]^^^^____````aaabbbbccccddddeeeffffgfffeeeedddddcccbbbaaaaa````__^^^^]]]]]\\\\[[ZZZZZYYYYXXXXXWWVVVVUUUUUTTTTSSRRRRRQQQQPPPPOOOONNNNNMMMLLLLKKKKJJJJJIIIIHHHGGGGGFFFFEEEEEDDDDCCCCBBBBBAAA@@@@@?????>>>>>===<<<<<;;;;;;:::::9999888887777776666655555444444333333322222211111000000/////////.....----------,,,,,,,,,,++++++++++++++***************))))))))))))))))))))))))))))))))))))***************++++++++++++++,,,,,,,,,,----------.....////////0000000111112222223333334444445555566666777777788888999:::::;;;;;;;<<<<<==>>>>>?????@@@@@AAAABBBBBCCCCDDDEEEEEFFFFGGGGGHHHHIIIIJJJJJKKKLLLLMMMMNNNNNOOOOPPPQQQQRRRRRSSSTTTUUUUUVVVVWWWXXXXXYYYZZZZZ[[[\\\\]]]]]^^^___````aaaaabbccccdddddeeeeffgfffeeeedddcccccbbbaaaa```____^^^^]]]]\\\\\[[ZZZZYYYYYXXXXWWVVVVVUUUUTTTTSSSRRRRQQQQQPPPOOOOONNNMMMMMLLLKKKKKJJJJIIIIIHHGGGGGFFFFFEEEEDDDDCCCCCBBBAAAA@@@@@?????>>>>>===<<<<<<;;;;;:::::9999888887777776666655554444443333332222221111100000000///////.....---------,,,,,,,,,,+++++++++++++***********))))))))))))))))))))))))))))))))))))))))))))))))))))))***********++++++++++++,,,,,,,,,,---------.....////////0000000111112222223333333444444555566666777777888889999:::::;;;;;<<<<<<==>>>>>?????@@@@@AAAABBBBCCCCCDDDDEEEFFFFFGGGGGHHHIIIIIJJJJKKKKKLLMMMMMNNNNOOOOOPPQQQQQRRRRSSSSTTTTUUUVVVVVWWWXXXXYYYYYZZZ[[[\\\\\]]]]^^^____````aaaabbcccccddddeeeeffgffeeeeedddccccbbbaaaaa```___^^^^]]]]]\\\[[[ZZZZZYYYYXXXWWWWVVVVUUUUUTTTTSSRRRRRQQQQPPOOOOONNNNMMMMMLLLKKKKKJJJIIIIIHHHGGGGGFFFFFEEEEEDDCCCCCBBBBBAAA@@@@@?????>>>>>====<<<<<;;;;;:::::99988888777776666666555444444433333322222211111000000////////.....---------,,,,,,,,,,+++++++++++**********))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))**********+++++++++++,,,,,,,,,,---------.....///////000000111112222222333333444444555566666677777888889999:::::;;;;;<<<<<====>>>>>?????@@@@@AABBBBBCCCCCDDDEEEEEFFFFFGGGGGHHIIIIIJJJJKKKKKLLMMMMMNNNNOOOOOPPPQQQRRRRRSSSTTTTUUUUUVVVWWWWXXXXYYYYZZZZZ[[\\\\]]]]]^^^^__````aaaaabbccccddddeeeeeffffeeeddddcccccbbbaaa````____^^^^]]]\\\\\[[[ZZZZYYYYYXXXWWWVVVVVUUUUTTTSSSSRRRRQQQQQPPOOOONNNNNMMMMLLLLKKKJJJJJIIIIHHHHGGGGFFFFFEEEEEDDCCCCCBBBBBAAA@@@@@?????>>>>>===<<<<<;;;;;:::::999988888777776666665555444444333333322222211110000000//////.....---------,,,,,,,,,+++++++++++*********)))))))))))))))))))(((((((((((((((((((((((((((((((((((()))))))))))))))))))********++++++++++++,,,,,,,,---------.....//////000000001111222222333333444444555566666677777888889999:::::;;;;;<<<<<====>>>>>?????@@@@@AABBBBBCCCCCDDDEEEEEFFFFFGGGGHHHIIIIJJJJJKKKKLLLLMMMNNNNNOOOOPPPQQQQQRRRSSSSTTTTUUUUVVVVVWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^___````aaaabbcccccddddeeeeffeeeeeddddccccbbaaaaa````___^^^^^]]]\\\\[[[ZZZZZYYYXXXXWWWWVVVVUUUTTTTTSSSRRRRRQQQQPPOOOOONNNNMMMMMLLKKKKKJJJJIIIIIHHHGGGGGFFFEEEEEDDDDCCCCBBBBBAAAA@@@?????>>>>>====<<<<<;;;;;:::::99998888877777666666555544444333333222222111110000000///////.....--------,,,,,,,,++++++++++********))))))))))))))))((((((((((((((((((((((((((((((((((((((((((((((((((()))))))))))))))))*******++++++++++,,,,,,,,,-------.....////////0000001111122222233333334444455566666667777788888999:::::;;;;;<<<<<====>>>>>?????@@@@AAAABBBBBCCCDDDDEEEEEFFFFGGGGGHHIIIIIJJJJKKKKKLLLMMMMMNNNOOOOOPPPQQQQRRRRRSSTTTTTUUUUVVVVWWWXXXXYYYYZZZZZ[[\\\\]]]]^^^^^__````aaaaabbbcccddddeeeeefeeeedddddccccbbaaaa`````___^^^]]]]\\\\\[[[ZZZYYYYYXXXXWWWVVVVVUUUTTTTSSSSRRRRQQQPPPPOOOONNNNNMMMMLLKKKKKJJJJJIIIIHHGGGGGFFFFFEEEEDDDDCCCCCBBBBAAA@@@@@????>>>>>====<<<<<;;;;;:::::999988888777776666665555444443333332222221111000000////////.....-------,,,,,,,,,+++++++++*******))))))))))))))(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()))))))))))))********+++++++++,,,,,,,,--------.....///////0000000111222222233333344444555566666677777888889999:::::;;;;;<<<<<===>>>>>????@@@@@AAAABBBBCCCCCDDDEEEEFFFFFGGGGGHHHIIIJJJJJKKKKKLLLMMMMNNNNNOOOPPPPQQQQRRRRSSSTTTTUUUUVVVVVWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^__`````aaaabbbcccdddddeeeefeeeeddddccccbbbaaaa````__^^^^^]]]]\\\\[[ZZZZZYYYYXXXXWWWWVVVUUUUTTTTTSSSRRRQQQQQPPPOOOOONNNNMMMMMLLKKKKJJJJJIIIIHHHGGGGFFFFFEEEEEDDDCCCCCBBBBBAA@@@@@?????>>>>====<<<<<;;;;;:::::999888887777766666665554444433333332222221111000000//////.....--------,,,,,,,,+++++++++******)))))))))))))(((((((((((((((((((''''''''''''''''''''''''''''''''''''((((((((((((((((((())))))))))))******+++++++++,,,,,,,,,-------.....///////000000111122222233333344444555566666677777888889999:::::;;;;;<<<<<====>>>?????@@@@@AAABBBBBCCCCCDDEEEEEFFFFFGGGGHHHHIIIIJJJJJKKKLLLMMMMMNNNNOOOOOPPQQQQQRRRRSSTTTTTUUUUVVVVWWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^^___```aaaabbbbccccdddeeeefeeedddddccccbbaaaa`````__^^^^]]]]\\\\\[[ZZZZYYYYYXXXXWWVVVVVUUUUTTTTSSSSRRRQQQQPPPPOOOONNNMMMMMLLLKKKKKJJJJIIIIIHHGGGGGFFFFEEEEEDDCCCCCBBBBBAAA@@@@@?????>>>>>==<<<<<;;;;;:::::9999888887777766666655544444433333322222111110000000//////.....------,,,,,,,,,+++++++++******)))))))))))((((((((((((((('''''''''''''''''''''''''''''''''''''''''''''''''''((((((((((((((())))))))))))******+++++++++,,,,,,,,-------.....//////000000111112222233333344444445566666677777888889999:::::;;;;;<<<<<===>>>>>?????@@@@@AABBBBBCCCCCDDDEEEEEFFFGGGGGHHHIIIIIJJJJKKKKKLLMMMMMNNNNOOOOPPPQQQQRRRRSSSSTTTUUUUVVVVVWWWXXXYYYYYZZZZ[[[\\\\\]]]^^^^___`````aaabbbccccdddddeeeeeeddddcccccbbaaaa````__^^^^^]]]]\\\\[[ZZZZZYYYYXXXXWWWVVVVUUUUTTTTTSSRRRRQQQQQPPPOOONNNNNMMMMLLLLKKKKJJJJJIIIHHHHGGGGFFFFFEEEEDDDCCCCBBBBBAAAA@@@@?????>>>>>==<<<<<;;;;;:::::99998888877777666665555444444333332222221111000000//////.....--------,,,,,,,++++++++******)))))))))))(((((((((((((''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((()))))))))))*******+++++++,,,,,,,,-------.....//////00000001112222222333334444445555666667777788888999:::::;;;;;<<<<<===>>>>>?????@@@@AAABBBBBCCCCDDDDEEEEFFFFFGGGHHHHIIIIJJJJJKKKKLLLMMMMNNNNNOOOOPPQQQQQRRRRSSSTTTTTUUUVVVVWWWWXXXXYYYZZZZZ[[[\\\\]]]^^^^^___````aaabbbcccccddddeeeeeeddddcccbbbaaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVVUUUUTTTTSSRRRRRQQQQPPPPOOONNNNMMMMMLLLKKKKKJJJIIIIIHHHGGGGFFFFFEEEEEDDCCCCCBBBBAAAA@@@@@???>>>>>====<<<<;;;;;:::::99998888877777666665554444444333332222221111000000//////....-------,,,,,,,,+++++++*******))))))))))((((((((((((''''''''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''''((((((((((((())))))))))******++++++++,,,,,,,--------...///////00000011112222223333344444455556666677777888889999:::::;;;;;<<<====>>>>>????@@@@@AAAABBBCCCCCDDDEEEEEFFFFFGGGGHHIIIIIJJJJKKKKKLLMMMMMNNNNOOOOPPPPQQQRRRRRSSSTTTTUUUVVVVVWWWXXXXYYYYYZZZ[[[\\\\]]]]]^^^___````aaaaabbccccddddeeeeedddcccccbbbaaaa```____^^^^]]]]\\\[[[[ZZZZYYYYXXXWWWWVVVVUUUUTTTTTSSRRRRQQQQQPPOOOONNNNNMMMMLLLLKKKJJJJIIIIIHHHGGGGGFFFEEEEEDDDCCCCCBBBBBAA@@@@@?????>>>>====<<<<<;;;;;::::99988888777776666655554444443333322222221110000000//////....------,,,,,,,++++++++******)))))))))((((((((((('''''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''(((((((((((())))))))*******+++++++,,,,,,,,------....//////00000011112222223333344444455556666677777888889999::::;;;;;<<<<<===>>>>?????@@@@@AAABBBBBCCCCCDDEEEEEFFFFGGGGGHHIIIIIJJJJKKKKLLLLMMMNNNNNOOOOPPPQQQQQRRRSSSTTTTTUUUUVVVWWWWXXXXYYYYZZZ[[[[\\\\]]]]^^^____````aaaabbcccccddddeeeedddccccbbbaaaaa```___^^^^]]]]]\\\[[[ZZZZYYYYYXXXWWWVVVVVUUUUTTTSSSRRRRRQQQQPPOOOOONNNNMMMMMLLKKKKJJJJJIIIIHHHHGGGFFFFFEEEEDDDDCCCCBBBBBAA@@@@@?????>>>>>===<<<<<;;;;;:::::99888887777766666555544444433333222221111100000//////.....-------,,,,,,+++++++++*****))))))))((((((((((''''''''''''''&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''''(((((((((()))))))))*****+++++++++,,,,,,------.....//////000001111122222333334444444555666667777788888999:::::;;;;;<<<<<==>>>>>?????@@@@@AAABBBBBCCCCDDDEEEEFFFFFGGGGHHHHIIIJJJJJKKKKLLLMMMMMNNNOOOOOPPPQQQQRRRRRSSTTTTUUUUVVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]]^^^^__````aaaaabbccccddddeedddddccccbbbaaa`````___^^^^]]]\\\\[[[[ZZZZYYYXXXXXWWWVVVVUUUTTTTTSSSRRRRQQQQQPPOOOONNNNNMMMMLLKKKKKJJJJIIIIIHHGGGGGFFFFEEEEEDDDCCCCCBBBAAAA@@@@?????>>>>>==<<<<<;;;;;:::::999888887777766666655544444433333222221111000000//////....------,,,,,,,,+++++++*****)))))))))(((((((((''''''''''''&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&'''''''''''''((((((((())))))))*****++++++++,,,,,,,-------...///////00000011112222233333444444556666666777778888899:::::;;;;;<<<<<===>>>>>?????@@@AAAABBBBCCCCCDDEEEEEFFFFGGGGGHHHIIIIIJJJKKKKKLLLMMMMNNNNNOOOPPPQQQQQRRRRSSTTTTTUUUUVVVVWWXXXXXYYYYZZZZ[[[\\\\]]]]^^^^__`````aaaabbccccdddddeddddccccbbbbaaa````___^^^^^]]]\\\\[[[ZZZYYYYYXXXXWWWVVVVVUUUTTTTSSSRRRRRQQQPPPOOOOONNNNMMMMMLLKKKKJJJJJIIIIHHHGGGGFFFFFEEEEDDCCCCCBBBBBAAA@@@@@????>>>>>===<<<<;;;;;:::::999988887777766666655444444433333222221110000000//////....------,,,,,,++++++++*****))))))))((((((((('''''''''''&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&'''''''''''((((((((()))))))))*****+++++++,,,,,,,------....//////00000011112222233333444444555666666777778888999:::::;;;;;<<<<====>>>>>????@@@@@AABBBBBCCCCCDDDEEEFFFFFGGGGHHHHIIIIJJJJJKKKLLLMMMMMNNNNOOOOOPPQQQQRRRRRSSTTTTUUUUVVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^^^__````aaaabbbbcccddddeddddccccbbaaaa`````___^^^]]]]\\\\\[[[ZZZYYYYXXXXXWWWVVVUUUUTTTTTSSSRRRQQQQQPPPOOOONNNNNMMMLLLKKKKKJJJJIIIIIHHGGGGFFFFFEEEEDDDCCCCBBBBBAAA@@@@@?????>>>====<<<<<;;;;:::::99998888877777666665544444433333222221111000000/////.....-------,,,,,,++++++*****)))))))))(((((((((''''''''''&&&&&&&%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%&&&&&&&&''''''''''((((((((())))))))*****+++++++,,,,,,------...../////000000111122222333334444445556666677777888889999:::::;;;<<<<<====>>>>?????@@@@@AABBBBBCCCCDDDDEEEEFFFFFGGGHHHIIIIIJJJJKKKKKLLMMMMNNNNNOOOOPPQQQQQRRRRSSTTTTTUUUUVVVVWWXXXXXYYYYZZZZ[[\\\\\]]]]^^^^__`````aaaabbbcccddddedddcccccbbaaaa````__^^^^^]]]]\\\\[[ZZZZZYYYYXXXXWWVVVVVUUUUTTTTSSRRRRRQQQQPPPOOOOONNNMMMMMLLLKKKKJJJJJIIIHHHGGGGGFFFFEEEEEDDCCCCCBBBBAAAA@@@?????>>>>>===<<<<<;;;;;::::9998888877777666665554444443333322222111100000//////....------,,,,,,++++++++*****)))))))((((((((''''''''''&&&&&&&%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%&&&&&&&&''''''''''((((((())))))))*****+++++++,,,,,,-------...///////0000011122222333334444444556666677777888889999::::;;;;;<<<<<==>>>>>?????@@@@AAAABBBCCCCCDDDEEEEEFFFFGGGGGHHIIIIJJJJJKKKKLLMMMMMNNNNOOOOOPPQQQQRRRRRSSSTTTUUUUVVVVVWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^^___```aaaabbbcccccddddddccccbbaaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYXXXXXWWVVVVUUUUTTTTTSSRRRRQQQQQPPPOOONNNNNMMMMLLLKKKKKJJJIIIIHHHHGGGGFFFFFEEEDDDDCCCCBBBBBAA@@@@@????>>>>>===<<<<<;;;;;:::::998888877777666665555444443333322222111100000//////....------,,,,,,++++++*****))))))))(((((((''''''''''&&&&&&&%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%&&&&&&''''''''''(((((((()))))))*****++++++,,,,,,,------....//////000001111222223333344444555666667777788888999:::::;;;;;<<<<<==>>>>>????@@@@@AAABBBBBCCCDDDDEEEEFFFFFGGGGHHHIIIIJJJJKKKKKLLMMMMNNNNNOOOOPPQQQQQRRRRSSSTTTTTUUUVVVVWWWXXXXXYYYZZZZ[[[\\\]]]]]^^^^___```aaaaabbbccccddddddccccbbaaaa````___^^^^]]]]\\\\[[[ZZZZYYYYXXXXWWVVVVVUUUUTTTTSSSRRRRQQQQPPOOOOONNNNMMMMLLLLKKKJJJJJIIIIHHHGGGGGFFFEEEEEDDDCCCCBBBBBAA@@@@@?????>>>>====<<<;;;;;:::::999888887777766666555544444333332222211100000///////...-------,,,,,,++++++****)))))))(((((((('''''''''&&&&&&%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$##################################$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%&&&&&&'''''''''((((((())))))))***+++++++,,,,,,------....//////000001111222223333344444555566666777778888899:::::;;;;;<<<<====>>>?????@@@@@AAABBBBBCCCCDDEEEEEFFFFGGGGGHHIIIIJJJJJKKKKLLLLMMMNNNNOOOOOPPPQQQRRRRSSSSTTTTUUUVVVVVWWWXXXXYYYZZZZ[[[[\\\\]]]^^^^____````aaabbbccccdddddcccccbbaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVUUUUUTTTTSSRRRRQQQQQPPOOOONNNNNMMMMLLKKKKKJJJJIIIIHHHHGGGFFFFFEEEEDDDCCCCCBBBAAAA@@@@?????>>>>===<<<<<;;;;:::::999988887777766666555444443333322222111100000//////....-----,,,,,,+++++++*****))))))((((((('''''''''&&&&&&%%%%%%%%%%$$$$$$$$$$$$$$$#################################################$$$$$$$$$$$$$$$%%%%%%%%%%&&&&&&'''''''''(((((((())))))*****++++++,,,,,,-----....//////000001111222223333344444555566666777778888999:::::;;;;<<<<<====>>>>?????@@@AAAABBBBCCCCCDDEEEEFFFFFGGGGHHHHIIIJJJJKKKKKLLLMMMNNNNNOOOOPPPQQQQQRRRSSSTTTTUUUUUVVVWWWXXXXYYYYYZZZ[[[\\\\]]]]]^^^___````aaabbbcccccddddcccbbbaaaa`````__^^^^]]]]\\\\\[[ZZZZYYYYXXXWWWWVVVVUUUUTTTSSSSRRRRQQQQPPOOOOONNNNMMMMLLLKKKKJJJJIIIIIHHGGGGGFFFFEEEEDDDDCCCBBBBBAAA@@@@@????>>>>>==<<<<<;;;;;::::999988888777666665555444443333322222111100000/////....------,,,,,,++++++****))))))))(((((((''''''''&&&&&&%%%%%%%%%%$$$$$$$$$$$$###########################################################$$$$$$$$$$$$$%%%%%%%%%%&&&&&&'''''''(((((((()))))))****++++++,,,,,,,------..../////000001112222233333444445555666667777888889999:::;;;;;<<<<<===>>>>>????@@@@@AABBBBBCCCCDDDDEEEFFFFGGGGGHHHIIIIIJJJKKKKLLLLMMMMNNNOOOOOPPPQQQQRRRSSSSTTTTUUUUVVVWWWWXXXXYYYYZZZ[[[\\\\\]]]]^^^___`````aaaabbccccddddcccbbbaaaa```___^^^^^]]]]\\\[[[ZZZZZYYYYXXXWWWVVVVUUUUUTTTSSSRRRRQQQQQPPOOOONNNNNMMMMLLKKKKKJJJJIIIIHHHGGGGFFFFEEEEEDDCCCCCBBBBAAA@@@@@?????>>>====<<<<;;;;;:::::99888887777766665555444443333322222111100000/////...-------,,,,,,++++++****))))))(((((((('''''''&&&&&%%%%%%%%%%$$$$$$$$$$$##################""""""""""""""""""""""""""""""""""#################$$$$$$$$$$$%%%%%%%%%%&&&&&''''''''((((((()))))))***+++++++,,,,,,------..../////00000111122222333334444455566667777788888999:::::;;;;;<<<====>>>>?????@@@@@AABBBBCCCCCDDDEEEEEFFFGGGGHHHHIIIIJJJKKKKKLLLMMMMNNNNNOOOPPPQQQQQRRRRSSTTTTUUUUUVVVVWWXXXXYYYYZZZZZ[[\\\\]]]]^^^^^__````aaaabbccccddccccbbbbaaaa```___^^^^]]]]]\\\[[[ZZZZYYYXXXXXWWWVVVVUUUTTTTTSSSRRRRQQQPPPPOOOONNNNMMMLLLLKKKKJJJJIIIIIHHGGGGFFFFFEEEEDDDCCCCBBBBBAAA@@@?????>>>>====<<<<;;;;;:::::9988888777776666655544444333332222211100000/////....------,,,,,+++++++*****))))))((((((''''''''&&&&&%%%%%%%%%%$$$$$$$$$$#############"""""""""""""""""""""""""""""""""""""""""""""""""##############$$$$$$$$$$%%%%%%%%%%&&&&&'''''''((((((())))))*****++++++,,,,,------..../////00000111122222333334444455666667777788888999:::::;;;;;<<<<===>>>>?????@@@@AABBBBBCCCCDDDDEEEEFFFFFGGGHHHIIIIIJJJJKKKLLLLMMMMNNNNOOOPPPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXXYYYYZZZZ[[\\\\]]]]]^^^^__````aaaabbbccccdccccbbbaaa`````___^^^^]]]\\\\[[[ZZZZZYYYXXXXWWWVVVVVUUUTTTTSSSRRRRRQQQPPPOOOONNNNNMMMLLLKKKKKJJJJIIIHHHHGGGGFFFFEEEEEDDCCCCBBBBBAA@@@@@????>>>>>===<<<<<;;;:::::99998888777776666655444443333322222111100000/////....------,,,,,++++++****))))))((((((((''''''&&&&&&%%%%%%%%$$$$$$$$$$############"""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""#############$$$$$$$$$$%%%%%%%&&&&&&'''''''((((((())))))****++++++,,,,,-------.../////00000111122222333334444455566666777778889999:::::;;;;<<<<<==>>>>>????@@@@@AAABBBBBCCCDDDEEEEEFFFFGGGHHHHIIIIJJJJKKKKKLLMMMMNNNNNOOOOPPQQQQRRRRRSSTTTTUUUUVVVVVWWXXXXYYYYZZZZZ[[\\\\]]]]^^^^__`````aaaabbccccdccccbbbaaa````___^^^^^]]]\\\\[[[ZZZYYYYYXXXXWWWVVVUUUUTTTTTSSSRRRQQQQPPPPOOOONNNMMMMMLLLKKKKJJJIIIIIHHHGGGGFFFFFEEEDDDCCCCCBBBBAAA@@@@?????>>>>====<<<;;;;;::::99998888877776666655544443333322222111100000/////....------,,,,,++++++****))))))((((((''''''''&&&&&%%%%%%%$$$$$$$$$$############""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""###########$$$$$$$$$$%%%%%%%%&&&&&'''''''(((((()))))))***+++++++,,,,,------..../////0000011122222333334444555566666777788888999::::;;;;;<<<<====>>>?????@@@@AAAABBBBCCCCCDDEEEEFFFFFGGGGHHIIIIIJJJJKKKKLLMMMMMNNNNOOOOPPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^^^__````aaaabbccccdcccbbaaaaa````___^^^]]]]\\\\\[[[ZZZYYYYXXXXWWWWVVVUUUUTTTTSSRRRRRQQQQPPPOOONNNNNMMMMLLLKKKKKJJJIIIIHHHGGGGGFFFEEEEEDDDCCCCBBBBBAA@@@@@????>>>>>==<<<<;;;;;:::::9998888877777666555544444333332222111100000/////...-----,,,,,,,+++++*****))))))((((((''''''&&&&&%%%%%%%%$$$$$$$$$##########""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"""""""""##########$$$$$$$$$%%%%%%%&&&&&''''''((((((())))))*****+++++,,,,,,-----..../////000001111222333334444455556666777778888899:::::;;;;;<<<<===>>>>>???@@@@@AAABBBBBCCCCDDEEEEEFFFFGGGGGHHIIIIJJJJKKKKKLLMMMMNNNNNOOOOPPQQQQRRRRRSSSTTTUUUUVVVVWWWWXXXYYYYZZZZ[[\\\\\]]]]^^^^__````aaaaabbbccccccbbaaaa````____^^^]]]]\\\\[[ZZZZZYYYYXXXXWWVVVVUUUUUTTTTSSRRRRQQQQQPPPOOONNNNMMMMMLLLKKKJJJJIIIIIHHHGGGFFFFFEEEEDDDCCCCCBBBAAAA@@@@????>>>>>==<<<<<;;;;:::::998888877777666665554444433333222221100000/////....-----,,,,,,+++++****))))))((((((('''''''&&&&%%%%%%%$$$$$$$$$##########""""""""!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!"""""""##########$$$$$$$$$%%%%%%%%&&&''''''''(((((())))))****+++++,,,,,,-----..../////0000011122222333334444455666667777788888999:::::;;;<<<<<===>>>>>????@@@AAAABBBBCCCCCDDEEEEFFFFFGGGGHHIIIIIJJJJKKKKLLMMMMMNNNNOOOOPPQQQQQRRRRSSSTTTUUUUUVVVVWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^____```aaaabbbccccccbbaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYXXXXXWWVVVVUUUUTTTTSSSRRRRQQQQPPOOOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGGFFFFEEEEEDDDCCCBBBBBAAA@@@@?????>>>====<<<<;;;;;::::999888877777666665554444433333222221100000/////....-----,,,,,,+++++****))))))(((((('''''''&&&&&%%%%%%$$$$$$$$$########""""""""!!!!!!!!!!!!!! !!!!!!!!!!!!!!"""""""#########$$$$$$$$$%%%%%%&&&&&''''''(((((()))))))***+++++,,,,,,,-----.../////0000011122222333334444455666667777788889999::::;;;;;<<<====>>>>?????@@@@AABBBBBCCCCDDEEEEEFFFFGGGGGHHHIIIJJJJKKKKKLLLMMMNNNNOOOOOPPPQQQRRRRSSSSTTTTUUUVVVVWWWXXXXXYYYZZZZ[[[\\\]]]]]^^^^___```aaaabbbcccccbbaaaaa````__^^^^]]]]\\\\[[[ZZZZYYYYXXXXWWVVVVVUUUUTTTTSSRRRRQQQQQPPOOOONNNNMMMMMLLKKKKJJJJIIIIIHHGGGGFFFFFEEEEDDCCCCCBBBBAAA@@@@@???>>>>>===<<<<<;;;;:::::99888887777666665555444333332222211110000/////....-----,,,,,,+++++****))))))((((((''''''&&&&%%%%%%%%$$$$$$$#########""""""!!!!!!!!!!!!! !!!!!!!!!!!!"""""""########$$$$$$$$%%%%%%%&&&&''''''((((((())))))****+++++,,,,,,-----..../////00011112222233333444455556666677788888999:::::;;;;<<<<<==>>>>>????@@@@@AABBBBCCCCCDDDEEEFFFFFGGGGHHHIIIIIJJJKKKKLLLMMMMMNNNOOOOPPPQQQQQRRRSSSTTTTUUUVVVVVWWWXXXXYYYZZZZ[[[[\\\\]]]^^^^___```aaaaabbbccccbbaaaa````___^^^^]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVUUUUTTTTTSSRRRRQQQQPPOOOOONNNNMMMMLLKKKKKJJJJIIIIHHHGGGGFFFFEEEEEDDCCCCBBBBBAAA@@@?????>>>>===<<<<<;;;;;:::9998888877777666655544444333322222111100000/////..-----,,,,,,,+++++***)))))(((((((''''''&&&&&%%%%%%$$$$$$$$########"""""""!!!!!!!!!!  !!!!!!!!!!""""""#########$$$$$$$%%%%%%%&&&&&''''''(((((()))))****+++++,,,,,,-----.../////000001112222233334444455556666777778888899::::;;;;;<<<<<==>>>>?????@@@@AABBBBBCCCCDDDEEEEEFFFGGGGHHHHIIIIJJJKKKKKLLLMMMMNNNOOOOOPPPQQQQRRRSSSTTTTTUUUUVVVWWWXXXXYYYYYZZZ[[[\\\\]]]^^^^____````aaabbbccccbbaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYXXXWWWWVVVVUUUUTTTSSSRRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJJIIIIHHGGGGFFFFFEEEEDDCCCCCBBBBAA@@@@@????>>>>>===<<<;;;;;::::9999888877777666665544444333332222111100000/////..-----,,,,,,+++++****)))))(((((('''''''&&&%%%%%%%%$$$$$$#########"""""!!!!!!!!!!  !!!!!!!!!!"""""########$$$$$$$%%%%%%%&&&&''''''(((((()))))****+++++,,,,,,-----.../////000001111222333334444455566666777778888999::::;;;;;<<<<==>>>>>????@@@@@AAABBBCCCCCDDDEEEEFFFFFGGGHHHIIIIJJJJJKKKLLLMMMMNNNNNOOOPPPQQQQRRRRRSSTTTTUUUUVVVWWWWXXXXYYYYZZZ[[[\\\\]]]]]^^^___````aaabbbccbbbaaaaa````__^^^^]]]]\\\[[[[ZZZZYYYYXXXWWWVVVVUUUUUTTTSSSRRRRQQQPPPPOOOONNNNMMMLLLLKKKKJJJJIIIHHHHGGGGFFFFEEEEEDDCCCCBBBBBAA@@@@?????>>>>==<<<<<;;;;:::::99988888777666665554444433333222221100000/////...------,,,,,+++++****)))))((((((''''''&&&&%%%%%%$$$$$$$$#######"""""!!!!!!!!!!  !!!!!!!!!!"""""########$$$$$$$%%%%%%&&&&''''''((((((()))))***+++++,,,,,-------../////00000111222223333344444556666677778888899:::::;;;;<<<<<===>>>?????@@@@AAABBBBBCCCDDDEEEEEFFFFGGGHHHHIIIIJJJJKKKLLLLMMMMNNNNOOOPPPPQQQQRRRRSSTTTTUUUUUVVVVWWXXXXYYYYZZZ[[[[\\\\]]]]^^^___````aaaaabbcbbbaaaa```____^^^^]]]]\\\[[[ZZZZYYYYYXXXWWWVVVVUUUTTTTSSSSRRRRQQQPPPOOOONNNNNMMMLLLKKKKJJJJJIIIHHHGGGGFFFFFEEEDDDCCCCCBBBBAA@@@@@????>>>>===<<<<;;;;;::::99998887777766665555444433333222221100000/////....-----,,,,,+++++****)))))(((((('''''&&&&&%%%%%%$$$$$$########"""""!!!!!!!!!  !!!!!!!!!"""""#######$$$$$$%%%%%%%&&&&&'''''(((((()))))****+++++,,,,,-----.../////000001112222233333444455566667777788889999:::;;;;;<<<<====>>>>???@@@@@AAABBBBCCCCCDDEEEEFFFFFGGGGHHIIIIJJJJJKKKKLLMMMMNNNNNOOOOPPQQQQRRRRSSSTTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^____````aaaabbcbbbaaaa```___^^^^]]]]]\\\[[[ZZZZYYYXXXXWWWVVVVVUUUTTTTSSSRRRQQQQQPPPOOOONNNMMMMMLLLKKKKJJJIIIIHHHHGGGGFFFEEEEEDDDCCCCBBBAAAA@@@@?????>>>>==<<<<<;;;;:::::9988887777766666555444443332222211110000/////....-----,,,,,+++++***)))))((((('''''''&&&%%%%%%%$$$$$$#######"""""!!!!!!!!!  !!!!!!!!!"""""########$$$$$$%%%%%%&&&&''''''((((()))))****+++++,,,,,-----..../////0001111222223333444445566666777778888999:::::;;;<<<<<===>>>>?????@@@AAAABBBBCCCCDDEEEEEFFFFGGGGHHHIIIIJJJJKKKKLLMMMMMNNNNOOOOPPQQQQQRRRRSSTTTTUUUUVVVVVWWXXXXYYYYZZZZ[[\\\\]]]]]^^^^__````aaaabbcbbbaaaa```___^^^^]]]\\\\[[[ZZZZZYYYXXXXWWWVVVUUUUTTTTTSSSRRRQQQQPPPOOOOONNNMMMMLLLKKKKKJJJIIIIHHHGGGGGFFFEEEEDDDCCCCCBBBAAA@@@@@????>>>====<<<<;;;;;::::99888887777666665544444333332222111100000////...-----,,,,,+++++****)))))(((((''''''&&&&%%%%%%$$$$$$$######"""""!!!!!!!!!  !!!!!!!!!"""""######$$$$$$%%%%%%&&&&''''''((((()))))****+++++,,,,,-----....////00000111222233333444445556666677788888999::::;;;;;<<<====>>>>????@@@@@AABBBBCCCCCDDEEEEFFFFGGGGGHHIIIIJJJJKKKKKLLMMMMNNNNOOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZZZ[[\\\\]]]]^^^^__````aaaabbbbbaaa````____^^^^]]]\\\\[[[ZZZYYYYXXXXXWWWVVVUUUUTTTTSSRRRRRQQQQPPPOOONNNNMMMMMLLLKKKJJJJIIIIIHHHGGGFFFFEEEEEDDDCCCBBBBBAAA@@@@???>>>>>===<<<<<;;;;:::999988887777766665554444333332222211100000/////..-----,,,,,+++++****)))))(((((''''''&&&&%%%%%%$$$$$$#######"""""!!!!!!!  !!!!!!!!"""""######$$$$$$%%%%%%%&&&'''''''((((()))))***+++++,,,,,-----.../////00000112222233333444455556666777778889999::::;;;;<<<<<==>>>>>????@@@@AABBBBBCCCCDDEEEEEFFFFGGGGHHIIIIIJJJJKKKKLLMMMMMNNNNOOOOPPQQQQRRRRRSSSTTTUUUUVVVVWWXXXXXYYYYZZZZ[[\\\\]]]]^^^^___````aaaabbbbaaa````___^^^]]]]]\\\\[[[ZZZYYYYXXXXWWVVVVVUUUUTTTTSSRRRRQQQQPPPPOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGGFFFFEEEEDDCCCCCBBBBAAA@@@@@???>>>>====<<<<;;;:::::9998888877776666655444443333222221100000/////...-----,,,,,+++++****)))))(((((''''''&&&&%%%%%$$$$$$######"""""!!!!!!!!  !!!!!!!"""""#######$$$$$$%%%%%&&&&''''''((((()))))****+++++,,,,,-----../////0000011122222333444445556666677778888899:::::;;;;<<<<===>>>>????@@@@@AABBBBCCCCCDDDEEEFFFFGGGGGHHHIIIJJJJKKKKKLLLMMMNNNNOOOOPPPPQQQRRRRSSSTTTUUUUVVVVVWWWXXXYYYYZZZZ[[\\\\]]]]]^^^^__````aaaabbbbaaa````___^^^]]]]\\\\[[ZZZZZYYYYXXXXWWVVVVUUUUTTTTTSSRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJJIIIIHHGGGGFFFFEEEEEDDCCCCBBBBBAAA@@@????>>>>>===<<<;;;;;::::9999888877777666555444443333322221110000/////....----,,,,,+++++***)))))((((('''''''&&%%%%%%$$$$$$$######""""!!!!!!!  !!!!!!!!""""######$$$$$$%%%%%%&&&''''''((((()))))****+++++,,,,,----.../////0000111122223333344444556666777778888999::::;;;;;<<<<==>>>>>????@@@@AABBBBBCCCCDDDEEEEEFFFGGGGHHHIIIJJJJJKKKKLLLMMMNNNNNOOOOPPPQQQRRRRSSSTTTTTUUUVVVVWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^__````aaaabbaaaa`````___^^^]]]]\\\\[[ZZZZYYYYXXXXXWWVVVVUUUUTTTTSSRRRRRQQQQPPOOOONNNNMMMMLLLKKKKJJJJIIIIHHHGGGGFFFFEEEEDDCCCCCBBBBAA@@@@@????>>>>====<<<;;;;:::::9998887777766665555444433333222111100000////....-----,,,+++++****)))))((((('''''&&&&%%%%%%$$$$$$#######"""!!!!!!!  !!!!!!""""######$$$$$$%%%%%%%&&&'''''((((()))))****+++++,,,,-----....///0000011112222333334444555666677777888899:::::;;;;<<<<====>>>????@@@@@AAABBBCCCCCDDDEEEEFFFGGGGHHHHIIIIJJJKKKKLLLLMMMMNNNOOOOPPPQQQRRRRRSSSTTTTUUUVVVVWWWXXXXXYYYZZZZ[[[\\\]]]]^^^^__`````aaaabaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYXXXXWWVVVVVUUUUTTTTSSRRRRQQQQPPPOOOONNNNMMMMLLKKKKJJJJJIIIIHHGGGGFFFFFEEEEDDCCCCBBBBBAA@@@@????>>>>>==<<<<;;;;;::::9988888777766666555444443332222211100000/////..-----,,,,,++++****)))))((((('''''&&&&%%%%%%$$$$$######"""""!!!!!!  !!!!!!"""""#######$$$$$%%%%%%&&&&'''''((((()))))***++++,,,,,-----.../////0000011222223333444445566666777788888999:::;;;;;<<<<===>>>>>???@@@@AAABBBBBCCCDDDEEEEFFFFFGGGHHHIIIIJJJJJKKKLLLMMMMNNNOOOOPPPPQQQQRRRSSSTTTTUUUVVVVVWWWXXXXYYYZZZZ[[[\\\]]]]]^^^^___```aaaabaaaa````__^^^^]]]]\\\\[[[ZZZZYYYYXXXXWWVVVVUUUUTTTTTSSRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJIIIIIHHGGGGFFFFEEEDDDDCCCCBBBBAA@@@@@????>>>>===<<<<;;;;:::::998888777776666555544433333222211110000/////..-----,,,,,+++++***)))))((((('''''&&&%%%%%%%$$$$$######""""!!!!!!  !!!!!!""""######$$$$$%%%%%%&&&&'''''((((()))))**+++++,,,,,-----.../////000011122223333344445555666777778888999:::::;;;<<<<====>>>>???@@@@@AAABBBBCCCDDDDEEEEFFFFGGGHHHIIIIIJJJJKKKLLLMMMMNNNNNOOOPPPQQQQRRRSSSTTTTTUUUUVVVWWWXXXXYYYZZZZ[[[[\\\\]]]^^^^___```aaaabaaaa````__^^^^]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVUUUUTTTSSSRRRRRQQQQPPOOOONNNNMMMLLLKKKKKJJJJIIIHHHGGGGGFFFFEEEDDDCCCCBBBBBAA@@@@?????>>>>==<<<<;;;;;::::99888887777666665544443333322221111000/////....----,,,,,+++++**)))))((((('''''&&&&%%%%%%$$$$$#######"""!!!!!!!  !!!!!!""""######$$$$$%%%%%%&&&&'''''((((()))))***+++++,,,,,---..../////000011112223333344445556666677788888999::::;;;;;<<<===>>>>?????@@@AAABBBBBCCCCDDEEEEFFFFGGGGGHHIIIIJJJJKKKKKLLMMMMNNNNOOOPPPQQQQRRRRRSSTTTTUUUUVVVWWWXXXXYYYYYZZZ[[[\\\\]]]^^^^___```aaaaaaaa````__^^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVVUUUUTTTSSSRRRRQQQPPPOOOOONNNNMMMLLLKKKKJJJJJIIIHHHGGGGFFFEEEEEDDDCCCCBBBAAA@@@@@????>>>====<<<<;;;;:::::99888877777666655444443333222221100000////....-----,,,,+++++***))))(((((''''''&&&%%%%%%$$$$$#####"""""!!!!!!  !!!!!!"""""#####$$$$$%%%%%%%&&''''''((((())))****+++++,,,,-----...////000001112222233344444555666677777888999:::::;;;;<<<====>>>>????@@@@@AABBBBCCCCDDEEEEEFFFFGGGGHHIIIIJJJJJKKKKLLMMMMNNNNOOOOOPPQQQQRRRRSSTTTTUUUUVVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^^___````aaaaaa````__^^^^]]]]\\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTTSSSRRRRQQQPPPOOOONNNMMMMMLLLKKKKJJJIIIIHHHGGGGGFFFEEEEDDDCCCCCBBBAAA@@@@?????>>>===<<<<;;;;;:::999888887777666665544443333322221110000/////...-----,,,,,+++****)))))((((('''''&&&%%%%%$$$$$$#####""""!!!!!!  !!!!!!""""#####$$$$$$%%%%%&&'''''((((()))))****++++,,,,,-----../////000011112222333334445556666677778888899::::;;;;;<<<<==>>>>?????@@@@AABBBBCCCCCDDEEEEFFFFGGGGGHHIIIIJJJJKKKKLLMMMMMNNNNOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\\]]]]^^^___````aaaaaa````__^^^^]]]]\\\[[[ZZZZYYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQQPPPOOOONNNMMMMLLLKKKKKJJJIIIIHHHGGGFFFFFEEEEDDDCCCBBBBAAAA@@@@???>>>>====<<<<;;;:::::999888877777666555444443333222221100000////..-----,,,,,+++++***)))))((((('''''&&%%%%%%%$$$$$#####"""!!!!!!!  !!!!!!""""#####$$$$$%%%%%%&&&'''''((((()))))**+++++,,,,,-----...///000001112222233334444455666677777888899:::::;;;;<<<<===>>>>????@@@@AAABBBBCCCCDDEEEEFFFFFGGGGHHIIIIJJJJKKKKKLLMMMMNNNNOOOOPPQQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^___````aaaaa`````__^^^^]]]]\\\[[[ZZZZYYYXXXXWWWWVVVVUUUTTTTSSSRRRQQQQPPPOOOOONNNMMMMLLLKKKJJJJIIIIIHHHGGGFFFFEEEEDDDDCCCBBBBAAA@@@?????>>>>===<<<;;;;;::::999888887776666555544443333322211100000////...----,,,,,+++++***)))))((((('''''&&%%%%%%$$$$$#####""""!!!!!!  !!!!!!""""#####$$$$$%%%%%%&&&'''''((((()))))**+++++,,,,,----....////00000112222333334444555666677778888899::::;;;;;<<<<==>>>>?????@@@@AABBBBCCCCDDDDEEEFFFFGGGGHHIIIIIJJJJKKKKLLMMMMNNNNOOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWWXXXXYYYYZZZZ[[\\\\]]]]^^^___`````aaaa```___^^^^]]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTTSSSRRRQQQQPPPOOONNNNMMMMMLLLKKKJJJJIIIIHHGGGGGFFFFEEEEDDCCCCBBBBBAAA@@@????>>>>>===<<<;;;;:::::99988877777666655544444333222211110000/////..-----,,,,+++++****)))((((('''''&&&&%%%%%$$$$$#####""""!!!!!  !!!!!"""#####$$$$$%%%%%&&&&'''''((((())))****+++++,,,-----.../////0000111222233334444455666677777888899:::::;;;;<<<<==>>>>>????@@@@AABBBBBCCCCDDDEEEFFFFGGGGGHHHIIIJJJJKKKKLLMMMMMNNNNOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]]^^^^__````aaaa```___^^^^]]]\\\\[[[ZZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRRQQQQPPPOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGFFFFEEEEEDDCCCCBBBBAA@@@@@????>>>>==<<<<<;;;;::::998888877776666555544433332222211100000///....----,,,,,++++***)))))(((('''''&&&&%%%%%$$$$$#####""""!!!!!  !!!!!""""#####$$$$$%%%%%&&&'''''(((()))))****++++,,,,,---....////000001122222333344445555666777788888999:::;;;;<<<<<===>>>????@@@@@AAABBBCCCCDDDEEEEEFFFGGGGHHHIIIJJJJKKKKKLLLMMMNNNNOOOOPPQQQQRRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZZ[[\\\\]]]]^^^^__````aaaa```___^^^^]]]\\\\[[[ZZZYYYYXXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOOONNNNMMMMLLKKKKJJJJIIIIIHHGGGGFFFFEEEEDDCCCCCBBBBAA@@@@????>>>>>==<<<<;;;;:::::9988887777766665544444333322221111000/////...----,,,,,+++++**)))))(((((''''&&&&%%%%%$$$$$#####"""!!!!!  !!!!!""""#####$$$$$%%%%%&&&&'''((((()))))***+++++,,,,,----../////00001111222333344444555666777778888999:::::;;;<<<<===>>>>>???@@@@AAABBBCCCCCDDDEEEEFFFGGGGHHHIIIIIJJJKKKKLLLMMMNNNNOOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXXYYYYZZZZ[[\\\\]]]]^^^^__````aa`````___^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMMLLKKKKJJJJIIIIHHGGGGFFFFFEEEEDDCCCCBBBBAAA@@@@????>>>>==<<<<<;;;;::::9988888777766665554444333322222110000/////...-----,,,+++++***)))))((((('''''&&%%%%%$$$$$#####""""!!!!!  !!!!!""""#####$$$$$%%%%%&&&'''''((((()))))**+++++,,,,-----../////00001112222233344445555666677788888999::::;;;<<<<<===>>>>???@@@@AAAABBBBCCCDDDEEEEFFFFFGGGHHHIIIIJJJKKKKLLLMMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^__`````a````___^^^]]]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSSRRRRQQQQPPOOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGFFFFEEEDDDDCCCCBBBBAA@@@@?????>>>>==<<<<;;;;;::::9988887777766665544443333322221110000////....---,,,,,++++****))))((((('''''&&%%%%%$$$$$#####""""!!!!!  !!!!!"""#####$$$$$%%%%%&&&'''''((((())))***++++,,,,,----....///00001111222233333444555666677777888999::::;;;;;<<<===>>>>?????@@@AAABBBBCCCDDDDEEEEFFFFGGGHHHIIIIJJJKKKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]]^^^^__````a````___^^^]]]]\\\\[[ZZZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPPOOOONNNNMMMMLLKKKKJJJJIIIIIHHGGGGFFFFEEEDDDCCCCBBBBBAA@@@@????>>>====<<<<;;;;:::99998888777766655554444333322222110000/////..-----,,,,+++++***)))))((('''''&&&&%%%%$$$$$#####""""!!!!!  !!!!!""""#####$$$$$%%%&&&&'''''(((()))))**+++++,,,,-----.../////0001112222233334445555666677778889999::::;;;;<<<====>>>>????@@@AAABBBBBCCCCDDEEEEFFFFGGGHHHIIIIIJJJJKKKLLLMMMMNNNOOOOPPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^__````a````___^^^]]]]\\\\[[ZZZZYYYYXXXXWWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFFFEEEDDDCCCCBBBAAA@@@@@????>>>===<<<<;;;;;:::99988887777766655544443333322211100000////...----,,,,+++++**)))))(((((''''&&&&%%%%%$$$$#####"""!!!!!  !!!!!""""#####$$$$%%%%%&&&''''((((()))))***+++++,,,----....////0000011222233333444455666677777888899::::;;;;;<<<<==>>>>????@@@@@AABBBBCCCCDDEEEEFFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWWXXXXYYYZZZZ[[[\\\]]]]^^^^__````a````___^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKKJJJJIIIHHHGGGGFFFEEEEDDDDCCCCBBBAAA@@@@???>>>>>===<<<<;;;:::::9998888777666655554444333222221110000/////..----,,,,,++++***))))((((('''''&&&%%%%%$$$$$###""""!!!!!  !!!!!""""####$$$$$%%%%%&&'''''((((())))****++++,,,,,---.../////000011222223333444455566667777888899:::::;;;;<<<<==>>>>>????@@@@AABBBBCCCCDDDEEEEFFFFGGGGHHIIIIJJJJKKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^__````````__^^^^]]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIIHHHGGGGFFFEEEEDDDCCCBBBBBAAA@@@@???>>>>===<<<<<;;;::::99988888777666655544444333222211100000///...-----,,,,+++++**)))))(((('''''&&%%%%%$$$$$#####"""!!!!!  !!!!!""#####$$$$$%%%%%&&&'''''((()))))***+++++,,,,-----..////0000011222233334444455666677778888899::::;;;;<<<<<==>>>>????@@@@AABBBBBCCCCDDEEEEFFFFGGGGHHIIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]]^^^^___``````__^^^^]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQPPPOOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFFEEEEDDDCCCBBBBAAA@@@@@???>>>>===<<<;;;;:::::999888777766666555444333322222111000/////...----,,,,,+++****))))(((((''''&&&%%%%$$$$$#####"""!!!!!  !!!!!""#####$$$$$%%%%&&&&''''((((()))****++++,,,,,----../////000011222223333444455666667777888899:::::;;;;<<<<==>>>>????@@@@@AABBBBCCCCDDEEEEFFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOOOPPQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYYYZZZ[[[\\\\]]]^^^^___``````__^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVVUUUUTTTSSSRRRRQQQPPPOOOONNNMMMMLLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDDDCCCBBBBAAA@@@????>>>>>===<<<;;;;::::9988888777766665544444333322221100000////...-----,,,+++++***))))((((('''''&&%%%%%$$$$#####""""!!!  !!!!""""#####$$$%%%%%&&&'''''((((())))**+++++,,,,-----..////00000111222333344444555666777788888999:::;;;;<<<<==>>>>>????@@@@AABBBBCCCCDDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^___``````__^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTTSSSRRRRQQQPPPOOOONNNMMMMLLLKKKJJJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBBAAA@@@????>>>>==<<<<;;;;;::::998888777776666554444333322222110000/////...---,,,,,++++***)))))((('''''&&&%%%%%$$$$$####"""!!!!!  !!!!!""""####$$$$$%%%%%&&'''''(((()))))**++++,,,,,----../////0000111222223334444555666777778888999:::;;;;;<<<<===>>>????@@@@AABBBBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJJKKKKLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^___`````__^^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQQPPPOOOONNNMMMMLLLKKKJJJJIIIIHHGGGGGFFFFEEEEDDCCCCBBBBAA@@@@?????>>>>==<<<<;;;;:::::998888777766665554444333322221110000////..-----,,,,+++++***)))(((((''''&&&&%%%%$$$$$#####""!!!!!  !!!!!"""#####$$$$$%%%%&&&''''((((())))**+++++,,,,-----...///0000111122223334444555566667778888999:::::;;;<<<<===>>>?????@@@@AAABBBCCCCDDDEEEFFFFGGGGGHHHIIIJJJJKKKKLLMMMMNNNNOOOOPPQQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^^___````__^^^^]]]]\\\[[[ZZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNNMMMMLLLKKKJJJJIIIIHHGGGGFFFFEEEEEDDCCCCBBBBAA@@@@????>>>>===<<<<;;;;::::998888777776666554444333332222110000/////..----,,,,,++++**)))))(((('''''&&&%%%%%$$$#####"""!!!!!  !!!!!""#####$$$$%%%%%&&'''''(((()))))***+++,,,,,----.../////000111222233333444555666677777888999::::;;;<<<<====>>>>???@@@@AAABBBCCCCDDDEEEEEFFFGGGGHHHIIIJJJJKKKKLLMMMMNNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZZZ[[\\\\]]]]^^^___````__^^^^]]]]\\\[[[ZZZZYYYXXXXWWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGFFFFEEEEDDCCCCBBBBBAA@@@@????>>>>==<<<<;;;;;::::998888777766666554444333322211110000////..-----,,,,++++***))))(((((''''&&%%%%%$$$$#####""""!!!!  !!!!"""#####$$$$%%%%%&&&'''((((())))****++++,,,-----...////000111122223333444555666667777888999::::;;;;;<<<===>>>>???@@@@AAABBBBBCCCDDDEEEEFFFGGGGHHHIIIJJJJKKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWWXXXXYYYYZZZZ[[\\\\]]]]^^^___````__^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHHGGGGFFFFEEEEDDCCCCBBBBAA@@@@@????>>>>==<<<<;;;;:::9999888877776665554444433332221110000/////..----,,,,,++++**)))))((((''''&&&%%%%$$$$$####""""!!!!!  !!!!!""""###$$$$$%%%%&&&&''''((()))))***++++,,,,,---.../////000011222233334444455666677778889999::::;;;;<<<===>>>>???@@@@@AAABBBBCCCDDDEEEEFFFGGGGHHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^___````__^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFFEEEEDDCCCCBBBBAA@@@@????>>>====<<<<;;;;:::9998888777776665554444333222221110000///...-----,,,,+++****))))(((('''''&&%%%%%$$$$#####""!!!!!  !!!!!"""#####$$$%%%%%&&&'''''(((()))****++++,,,,-----..////000011222223333444455666677777888899::::;;;;<<<====>>>>????@@@AAABBBBCCCDDDEEEEFFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^___``___^^^^]]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCCBBBBAA@@@@????>>>===<<<<;;;;;:::9998888777666655554444333222211100000///...----,,,,,+++***)))))(((('''&&&&%%%%$$$$$####""!!!!!  !!!!!"""####$$$$$%%%&&&&''''(((()))))**++++,,,,,----..////000001122223333444455566667777888899::::;;;;;<<<<==>>>>????@@@AAABBBBCCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]]^^^^__`___^^^^]]]\\\\[[[ZZZYYYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@@????>>>===<<<<;;;::::999988887776666555444333332222111000////....----,,,++++****))))((('''''&&&%%%%$$$$$###""""!!!!  !!!""""####$$$$$%%%%&&'''''(((())))***++++,,,,----...////000011222233333444455666677778888999::::;;;;<<<<==>>>>????@@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^^__`___^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>>>===<<<<;;;::::999888777776666555444333322221111000////...---,,,,,++++***)))))(((''''&&&&%%%%$$$#####"""!!!!!  !!!!!""#####$$$$%%%%&&&''''(((()))))**++++,,,,,----..////000011112223333444455666677777888899::::;;;;<<<<==>>>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^__`___^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEEDDDCCCCBBBAAA@@@@???>>>>===<<<;;;;;::::99988877776666554444433332222110000/////...---,,,,+++++***)))(((('''''&&&%%%$$$$$####""""!!!!  !!!!"""####$$$$$%%%%&&'''''(((())))**+++++,,,,----../////00001112223333444445556667777888899::::;;;;;<<<<==>>>>????@@@@AABBBBCCCCDDEEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^__`___^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBBAAA@@@@???>>>>===<<<;;;;::::999988877776666554444333322222110000////..-----,,,,++++**)))))((((''''&&%%%%%$$$$#####"""!!!  !!!!""#####$$$$%%%%%&&&'''(((()))))***+++,,,,-----...///0000111222223334444555666777788889999:::;;;;<<<<==>>>>????@@@@AABBBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^__`__^^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@?????>>>>===<<<;;;;::::998888777776666554444333322221100000////..----,,,,+++++**))))(((('''''&&%%%%$$$$$####""!!!!!  !!!!!"""###$$$$$%%%%&&&'''''((())))***+++++,,,----...///0000011122223334444555666777778888999:::;;;;<<<<==>>>>?????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^^____^^^]]]]\\\\[[ZZZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<<;;;;::::99888877776666554444433332222110000////...----,,,,++++**)))))((((''''&&%%%%%$$$$#####""!!!!  !!!!"""#####$$$%%%%%&&&''''((()))))***++++,,,----....////00011122223334444455566667778888999:::;;;;<<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^____^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;:::::99888877776666554444333322222110000////..----,,,,,++++**))))(((((''''&&%%%%$$$$$####""!!!!!  !!!!!"""####$$$$$%%%&&&''''((((()))***++++,,,,,---...////00011122222333344455566667778888999:::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^____^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTSSSRRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBBAAA@@@????>>>>==<<<<;;;;::::998888777776666554444333322211100000////..----,,,,+++****))))(((('''&&&&%%%%$$$$#####""!!!!  !!!"""#####$$$$%%%&&&&''''(((()))****++++,,,,---...////000001122223333444555666677777888999::::;;;<<<<===>>>????@@@@AABBBBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRRRSSTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^____^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQPPPOOOONNNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@?????>>>>==<<<<;;;;::::99888877776665555444433332221110000///...-----,,,,+++***))))((((('''&&&%%%%$$$$$###"""!!!!!  !!!!!""####$$$$$%%%%&&''''((((())))**++++,,,,-----..////00001122223333444555566667777888999::::;;;<<<<===>>>?????@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^____^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQPPPOOOONNNMMMMLLLKKKJJJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<<;;;;::::99888877776665554444333222221110000///...----,,,+++++***))))((('''''&&&%%%%$$$#####"""!!!!  !!!!""#####$$$$%%%%&&'''''(((())))**+++++,,,,----..////00001122222333344445566667777888999::::;;;<<<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJJKKKKLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^__^^^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQPPPOOOONNNMMMMLLLKKKJJJJIIIIHHGGGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9999888877776665554444333222211100000///...----,,,++++***)))))(((''''&&&%%%%%$$$####"""!!!!!  !!!!!""####$$$$%%%%%&&''''(((()))))**++++,,,,----..////000001122223333444455666677778889999::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGGHHHIIIJJJJKKKKLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^^_^^^^]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQPPPOOOONNNMMMMLLLKKKJJJJIIIIHHGGGGFFFFEEEEDDCCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::99988887776666655544443332222111000////...-----,,,++++***)))(((('''''&&&%%%$$$$#####"""!!!  !!!!""#####$$$$%%%%&&'''''(((())))**++++,,,,-----..////00001122223333444455666667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCCDDDEEEEFFFGGGGHHHIIIJJJJKKKKLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTTSSSRRRRQQQPPPOOOONNNMMMMLLLKKKJJJJIIIIHHGGGGFFFFEEEEDDCCCCBBBBAA@@@@@????>>>>==<<<<;;;;:::99988887776666555444333332222111000////...---,,,,+++++***)))((((''''&&%%%%%$$$$####""!!!!!  !!!!!"""###$$$$%%%%%&&&'''(((())))**+++++,,,,----..////00001122223333344445566667777888899::::;;;;<<<===>>>>???@@@@@AAABBBBCCCDDDEEEEFFFGGGGHHHIIIJJJJKKKKLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPPOOOONNNMMMMLLLKKKJJJJIIIIHHGGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>===<<<<<;;;;:::99988887776666555444333322221111000////...---,,,,++++**)))))((((''''&&%%%%$$$$$####""!!!!  !!!!"""###$$$$$%%%%&&&'''(((()))))***+++,,,,----..////00001111222333344445566667777888899::::;;;;<<<<<==>>>>????@@@AAABBBBCCCDDDEEEEFFFGGGGHHHIIIJJJJKKKKLLMMMMNNNNOOOOPPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>===<<<<;;;::::99998888777666655544433332222110000////....---,,,,++++**))))(((('''''&&%%%%$$$$####"""!!!!   !!!!""""####$$$%%%%&&&'''''((())))***+++,,,,----....///00001112223333444455666677778888999::::;;;;<<<<==>>>>????@@@AAABBBBCCCDDDEEEEFFFGGGGHHHIIIJJJJKKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>===<<<<;;;::::99988877776666655544433332222110000////..----,,,,,++++**))))((((''''&&%%%%%$$$$####""!!!!   !!!"""####$$$%%%%%&&&''''((())))***+++,,,,,----...///00001112223333444455666667777888899::::;;;;<<<<==>>>>????@@@AAABBBBCCCDDDEEEEFFFGGGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCCBBBBAA@@@@????>>>===<<<<;;;::::99988877776666554444333332222110000////..----,,,,++++**)))))((((''''&&%%%%$$$$#####""!!!!   !!!"""#####$$$$%%%&&&''''((()))))***++++,,,----...///00001112223333344445556667777888899::::;;;;<<<<==>>>>????@@@AAABBBBCCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@?????>>>===<<<<;;;::::99988877776666554444333322221100000////..----,,,,++++**))))(((('''''&&%%%%$$$$###"""!!!!!   !!!!!""####$$$$%%%&&&'''''(((()))***++++,,,----...///00000111222233344445556667777888899::::;;;;<<<<==>>>>?????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^^^^^]]]]\\\[[[ZZZZYYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>>===<<<;;;;;::::9998887777666655444433332222110000////..-----,,,,++++**))))(((('''&&&%%%%$$$$$###"""!!!!   !!!!""####$$$$$%%%%&&''''(((()))***++++,,,-----...////000111222233344445556667777888899::::;;;;;<<<<==>>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>>===<<<;;;;::::99888887777666655444433332222110000////..----,,,,+++****))))(((('''&&&%%%%$$$####""""!!!!   !!!!"""####$$$$%%%%&&''''(((()))****++++,,,,---...////00011122223334444555666777788888999:::;;;;<<<<==>>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>>===<<<;;;;::::99888877776666554444433332222110000////..----,,,,+++***))))((((('''&&&%%%%$$$####"""!!!   !!!!""####$$$$%%%%&&''''((((())))**++++,,,,---...////00011122223334444455566667778888999:::;;;;<<<<==>>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>>===<<<;;;;::::99888877776666554444333322211110000////..----,,,,+++***))))(((''''&&&%%%%%$$$####"""!!!   !!!!""####$$$$%%%%%&&''''(((())))**++++,,,,---...////00011112222333344455566667778888999:::;;;;<<<<==>>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCCCBBBAAA@@@@???>>>>===<<<;;;;::::9988887777666655444433332221110000///...-----,,,,+++***))))(((''''&&&%%%$$$$#####"""!!!  + + + + + + + + + + + + + + + + + + +  !!!!""#####$$$$%%%%&&''''(((())))**++++,,,,-----..////0000112222333344455566667778888999:::;;;;<<<<==>>>>????@@@@AABBBBCCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@?????>>>>===<<<;;;;::::9988887777666655444433332221110000///...----,,,++++****))))(((''''&&&%%%$$$$####""!!!!  + + + + + + + + + + + + + + + + + + + + + + + + + +  !!!!"""###$$$$%%%%&&''''(((())))***++++,,,,----..////0000112222333344455566667778888999:::;;;;<<<<==>>>>?????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;:::::9988887777666655444433332221110000///...----,,,++++***)))(((('''''&&&%%%$$$$####""!!!!  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  !!!!"""###$$$$%%%%&&'''''(((())))**++++,,,,----..////0000112222333344455566667778888999:::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;::::99888877776666655444433332221110000///...----,,,++++***)))((((''''&&%%%%$$$$$####""!!!!  + + + + + + + + + + + + + + + + + + + +  !!!!"""###$$$$$%%%%&&&'''(((())))**++++,,,,----..////00001122223333444555666667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;::::99888877776665554444333222211110000///...----,,,++++***)))((((''''&&%%%%$$$$####""!!!!!  + + + + + + + + + + + + + + +  !!!!!"""####$$$%%%%&&&'''(((())))**++++,,,,----..////00001112222333344445566667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^]]]\\\\[[[ZZZYYYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;::::998888777766655544443332222111000////...-----,,,++++***)))((((''''&&%%%%$$$$####""!!!!  + + + + + + + + + + + + + + +  !!!"""####$$$%%%%&&&'''(((())))**++++,,,,-----..////0000112222333344445566667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;::::998888777766655544443332222111000////...---,,,,++++**)))))((((''''&&%%%%$$$$####""!!!!  + + + + + +  + + + + + +  !!!"""####$$$%%%%&&&'''(((()))))***+++,,,,----..////0000112222333344445566667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;::::998888777766655544443332222111000////...---,,,,++++**))))((((''''&&%%%%%$$$$####""!!!!  + + + + + + +  + + + + + +  !!!"""####$$$%%%%%&&&''''((())))***+++,,,,----..////0000112222333344445566667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCCBBBBAAA@@@????>>>>==<<<<;;;;::::998888777766655544443332222111000////...---,,,,++++**))))((((''''&&%%%%$$$$###""""!!!!  + + + + +  + + + + +  !!!""""####$$$$%%%&&&''''((())))***+++,,,,----..////0000112222333344445566667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<<;;;;::::998888777766655544443332222111000////...---,,,,++++**))))((((''''&&%%%%$$$$###"""!!!!  + + + + +  + + + + +  !!!!""####$$$$%%%&&&''''((())))***+++,,,,----..////0000112222333344445566667777888999::::;;;<<<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::99988887776666655544443332222111000////...---,,,,++++**))))((((''''&&%%%%$$$$###"""!!!!  + + + + +  + + + + +  !!!!""####$$$$%%%&&&''''((())))***+++,,,,----..////00001122223333444455666667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000/////...---,,,,++++**))))((((''''&&%%%%$$$$###"""!!!!  + + +  + + + +  !!!!""####$$$$%%%&&&''''((())))***+++,,,,----../////0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++***))))((((''''&&%%%%$$$$###"""!!!!  + + + + +  + + + + +  !!!!""####$$$$%%%&&&''''((())))****++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$$$###"""!!!!  + + + + +  + + + + +  !!!!""####$$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + +  + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + + +  + + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + +  + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + + +  + + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + +  + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + +  + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + + +  + + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + +  + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + +  + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + +  + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + +  + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + +  + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + +  + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + +  + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + +  + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + +  + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + +  + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + +  + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + +  + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + +  + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + + +  + + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + +  + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + +  + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + + +  + + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + +  + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + + +  + + + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$####"""!!!  + + + +  + + +  !!!!""####$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++**))))(((('''&&&%%%%$$$$$###"""!!!!  + + + + +  + + + + +  !!!!""####$$$$$%%%%&&''''(((()))***++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000////..----,,,,++++***))))((((''''&&%%%%$$$$###"""!!!!  + + + + +  + + + + +  !!!!""####$$$$%%%&&&''''((())))****++++,,,----...///0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9998888777666655544433332222110000/////...---,,,,++++**))))((((''''&&%%%%$$$$###"""!!!!  + + +  + + + +  !!!!""####$$$$%%%&&&''''((())))***+++,,,,----../////0000111222333344445566667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::99988887776666655544443332222111000////...---,,,,++++**))))((((''''&&%%%%$$$$###"""!!!!  + + + + +  + + + + +  !!!!""####$$$$%%%&&&''''((())))***+++,,,,----..////00001122223333444455666667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<<;;;;::::998888777766655544443332222111000////...---,,,,++++**))))((((''''&&%%%%$$$$###"""!!!!  + + + + +  + + + + +  !!!!""####$$$$%%%&&&''''((())))***+++,,,,----..////0000112222333344445566667777888999::::;;;<<<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCCBBBBAAA@@@????>>>>==<<<<;;;;::::998888777766655544443332222111000////...---,,,,++++**))))((((''''&&%%%%$$$$###""""!!!!  + + + + +  + + + + +  !!!""""####$$$$%%%&&&''''((())))***+++,,,,----..////0000112222333344445566667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;::::998888777766655544443332222111000////...---,,,,++++**))))((((''''&&%%%%%$$$$####""!!!!  + + + + + + +  + + + + + +  !!!"""####$$$%%%%%&&&''''((())))***+++,,,,----..////0000112222333344445566667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;::::998888777766655544443332222111000////...---,,,,++++**)))))((((''''&&%%%%$$$$####""!!!!  + + + + + +  + + + + + +  !!!"""####$$$%%%%&&&'''(((()))))***+++,,,,----..////0000112222333344445566667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^]]]\\\\[[[ZZZYYYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;::::998888777766655544443332222111000////...-----,,,++++***)))((((''''&&%%%%$$$$####""!!!!  + + + + + + + + + + + + + + +  !!!"""####$$$%%%%&&&'''(((())))**++++,,,,-----..////0000112222333344445566667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;::::99888877776665554444333222211110000///...----,,,++++***)))((((''''&&%%%%$$$$####""!!!!!  + + + + + + + + + + + + + + +  !!!!!"""####$$$%%%%&&&'''(((())))**++++,,,,----..////00001112222333344445566667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;::::99888877776666655444433332221110000///...----,,,++++***)))((((''''&&%%%%$$$$$####""!!!!  + + + + + + + + + + + + + + + + + + + +  !!!!"""###$$$$$%%%%&&&'''(((())))**++++,,,,----..////00001122223333444555666667777888999::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;:::::9988887777666655444433332221110000///...----,,,++++***)))(((('''''&&&%%%$$$$####""!!!!  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  !!!!"""###$$$$%%%%&&'''''(((())))**++++,,,,----..////0000112222333344455566667778888999:::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@?????>>>>===<<<;;;;::::9988887777666655444433332221110000///...----,,,++++****))))(((''''&&&%%%$$$$####""!!!!  + + + + + + + + + + + + + + + + + + + + + + + + + +  !!!!"""###$$$$%%%%&&''''(((())))***++++,,,,----..////0000112222333344455566667778888999:::;;;;<<<<==>>>>?????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCCCBBBAAA@@@@???>>>>===<<<;;;;::::9988887777666655444433332221110000///...-----,,,,+++***))))(((''''&&&%%%$$$$#####"""!!!  + + + + + + + + + + + + + + + + + + +  !!!!""#####$$$$%%%%&&''''(((())))**++++,,,,-----..////0000112222333344455566667778888999:::;;;;<<<<==>>>>????@@@@AABBBBCCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>>===<<<;;;;::::99888877776666554444333322211110000////..----,,,,+++***))))(((''''&&&%%%%%$$$####"""!!!   !!!!""####$$$$%%%%%&&''''(((())))**++++,,,,---...////00011112222333344455566667778888999:::;;;;<<<<==>>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>>===<<<;;;;::::99888877776666554444433332222110000////..----,,,,+++***))))((((('''&&&%%%%$$$####"""!!!   !!!!""####$$$$%%%%&&''''((((())))**++++,,,,---...////00011122223334444455566667778888999:::;;;;<<<<==>>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>>===<<<;;;;::::99888887777666655444433332222110000////..----,,,,+++****))))(((('''&&&%%%%$$$####""""!!!!   !!!!"""####$$$$%%%%&&''''(((()))****++++,,,,---...////00011122223334444555666777788888999:::;;;;<<<<==>>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^^^^]]]]\\\[[[ZZZZYYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>>===<<<;;;;;::::9998887777666655444433332222110000////..-----,,,,++++**))))(((('''&&&%%%%$$$$$###"""!!!!   !!!!""####$$$$$%%%%&&''''(((()))***++++,,,-----...////000111222233344445556667777888899::::;;;;;<<<<==>>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@?????>>>===<<<<;;;::::99988877776666554444333322221100000////..----,,,,++++**))))(((('''''&&%%%%$$$$###"""!!!!!   !!!!!""####$$$$%%%&&&'''''(((()))***++++,,,----...///00000111222233344445556667777888899::::;;;;<<<<==>>>>?????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^^^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCCBBBBAA@@@@????>>>===<<<<;;;::::99988877776666554444333332222110000////..----,,,,++++**)))))((((''''&&%%%%$$$$#####""!!!!   !!!"""#####$$$$%%%&&&''''((()))))***++++,,,----...///00001112223333344445556667777888899::::;;;;<<<<==>>>>????@@@AAABBBBCCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>===<<<<;;;::::99988877776666655544433332222110000////..----,,,,,++++**))))((((''''&&%%%%%$$$$####""!!!!   !!!"""####$$$%%%%%&&&''''((())))***+++,,,,,----...///00001112223333444455666667777888899::::;;;;<<<<==>>>>????@@@AAABBBBCCCDDDEEEEFFFGGGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>===<<<<;;;::::99998888777666655544433332222110000////....---,,,,++++**))))(((('''''&&%%%%$$$$####"""!!!!   !!!!""""####$$$%%%%&&&'''''((())))***+++,,,,----....///00001112223333444455666677778888999::::;;;;<<<<==>>>>????@@@AAABBBBCCCDDDEEEEFFFGGGGHHHIIIJJJJKKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPPOOOONNNMMMMLLLKKKJJJJIIIIHHGGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>===<<<<<;;;;:::99988887776666555444333322221111000////...---,,,,++++**)))))((((''''&&%%%%$$$$$####""!!!!  !!!!"""###$$$$$%%%%&&&'''(((()))))***+++,,,,----..////00001111222333344445566667777888899::::;;;;<<<<<==>>>>????@@@AAABBBBCCCDDDEEEEFFFGGGGHHHIIIJJJJKKKKLLMMMMNNNNOOOOPPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTTSSSRRRRQQQPPPOOOONNNMMMMLLLKKKJJJJIIIIHHGGGGFFFFEEEEDDCCCCBBBBAA@@@@@????>>>>==<<<<;;;;:::99988887776666555444333332222111000////...---,,,,+++++***)))((((''''&&%%%%%$$$$####""!!!!!  !!!!!"""###$$$$%%%%%&&&'''(((())))**+++++,,,,----..////00001122223333344445566667777888899::::;;;;<<<===>>>>???@@@@@AAABBBBCCCDDDEEEEFFFGGGGHHHIIIJJJJKKKKLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^_^^^^]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQPPPOOOONNNMMMMLLLKKKJJJJIIIIHHGGGGFFFFEEEEDDCCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::99988887776666655544443332222111000////...-----,,,++++***)))(((('''''&&&%%%$$$$#####"""!!!  !!!!""#####$$$$%%%%&&'''''(((())))**++++,,,,-----..////00001122223333444455666667777888899::::;;;;<<<===>>>>???@@@@AAABBBCCCCCDDDEEEEFFFGGGGHHHIIIJJJJKKKKLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYYYZZZ[[[\\\\]]]^^^^_^^^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQPPPOOOONNNMMMMLLLKKKJJJJIIIIHHGGGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<;;;;:::9999888877776665554444333222211100000///...----,,,++++***)))))(((''''&&&%%%%%$$$####"""!!!!!  !!!!!""####$$$$%%%%%&&''''(((()))))**++++,,,,----..////000001122223333444455666677778889999::::;;;;<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGGHHHIIIJJJJKKKKLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^^___^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQPPPOOOONNNMMMMLLLKKKJJJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@????>>>>==<<<<<;;;;::::99888877776665554444333222221110000///...----,,,+++++***))))((('''''&&&%%%%$$$#####"""!!!!  !!!!""#####$$$$%%%%&&'''''(((())))**+++++,,,,----..////00001122222333344445566667777888999::::;;;<<<<<===>>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJJKKKKLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^____^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQPPPOOOONNNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBAA@@@@?????>>>>==<<<<;;;;::::99888877776665555444433332221110000///...-----,,,,+++***))))((((('''&&&%%%%$$$$$###"""!!!!!  !!!!!""####$$$$$%%%%&&''''((((())))**++++,,,,-----..////00001122223333444555566667777888999::::;;;<<<<===>>>?????@@@@AAABBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^____^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTSSSRRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBBAAA@@@????>>>>==<<<<;;;;::::998888777776666554444333322211100000////..----,,,,+++****))))(((('''&&&&%%%%$$$$#####""!!!!  !!!"""#####$$$$%%%&&&&''''(((()))****++++,,,,---...////000001122223333444555666677777888999::::;;;<<<<===>>>????@@@@AABBBBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRRRSSTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^____^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<;;;;:::::99888877776666554444333322222110000////..----,,,,,++++**))))(((((''''&&%%%%$$$$$####""!!!!!  !!!!!"""####$$$$$%%%&&&''''((((()))***++++,,,,,---...////00011122222333344455566667778888999:::::;;;<<<<===>>>????@@@@AABBBBCCCCDDEEEEEFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^____^^^]]]]\\\\[[ZZZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIHHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>>==<<<<<;;;;::::99888877776666554444433332222110000////...----,,,,++++**)))))((((''''&&%%%%%$$$$#####""!!!!  !!!!"""#####$$$%%%%%&&&''''((()))))***++++,,,----....////00011122223334444455566667778888999:::;;;;<<<<<===>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHHIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^____^^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@?????>>>>===<<<;;;;::::998888777776666554444333322221100000////..----,,,,+++++**))))(((('''''&&%%%%$$$$$####""!!!!!  !!!!!"""###$$$$$%%%%&&&'''''((())))***+++++,,,----...///0000011122223334444555666777778888999:::;;;;<<<<==>>>>?????@@@@AABBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^^_____^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPOOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBBAAA@@@@???>>>>===<<<;;;;::::999988877776666554444333322222110000////..-----,,,,++++**)))))((((''''&&%%%%%$$$$#####"""!!!  !!!!""#####$$$$%%%%%&&&'''(((()))))***+++,,,,-----...///0000111222223334444555666777788889999:::;;;;<<<<==>>>>????@@@@AABBBBBCCCCDDEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^__`___^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFEEEEEDDDCCCCBBBAAA@@@@???>>>>===<<<;;;;;::::99988877776666554444433332222110000/////...---,,,,+++++***)))(((('''''&&&%%%$$$$$####""""!!!!  !!!!"""####$$$$$%%%%&&'''''(((())))**+++++,,,,----../////00001112223333444445556667777888899::::;;;;;<<<<==>>>>????@@@@AABBBBCCCCDDEEEEEFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^__`___^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKJJJJIIIHHHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>>>===<<<<;;;::::999888777776666555444333322221111000////...---,,,,,++++***)))))(((''''&&&&%%%%$$$#####"""!!!!!  !!!!!""#####$$$$%%%%&&&''''(((()))))**++++,,,,,----..////000011112223333444455666677777888899::::;;;;<<<<==>>>>>????@@@@AABBBBCCCCDDEEEEFFFFGGGHHHHIIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^__`___^^^^]]]\\\\[[[ZZZYYYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCBBBAAA@@@@@????>>>===<<<<;;;::::999988887776666555444333332222111000////....----,,,++++****))))((('''''&&&%%%%$$$$$###""""!!!!  !!!""""####$$$$$%%%%&&'''''(((())))***++++,,,,----...////000011222233333444455666677778888999::::;;;;<<<<==>>>>????@@@@@AABBBBCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^^__`___^^^^]]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFEEEDDDCCCCCBBBBAA@@@@????>>>===<<<<;;;;;:::9998888777666655554444333222211100000///...----,,,,,+++***)))))(((('''&&&&%%%%$$$$$####""!!!!!  !!!!!"""####$$$$$%%%&&&&''''(((()))))**++++,,,,,----..////000001122223333444455566667777888899::::;;;;;<<<<==>>>>????@@@AAABBBBCCCCCDDEEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNNOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]]^^^^__```__^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRQQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHGGGGFFFFFEEEEDDCCCCBBBBAA@@@@????>>>====<<<<;;;;:::9998888777776665554444333222221110000///...-----,,,,+++****))))(((('''''&&%%%%%$$$$#####""!!!!!  !!!!!"""#####$$$%%%%%&&&'''''(((()))****++++,,,,-----..////000011222223333444455666677777888899::::;;;;<<<====>>>>????@@@AAABBBBCCCDDDEEEEFFFFFGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQQRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^___````__^^^^]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKJJJJIIIIHHHGGGGFFFFEEEEDDCCCCBBBBAA@@@@@????>>>>==<<<<;;;;:::9999888877776665554444433332221110000/////..----,,,,,++++**)))))((((''''&&&%%%%$$$$$####""""!!!!!  !!!!!""""###$$$$$%%%%&&&&''''((()))))***++++,,,,,---.../////000011222233334444455666677778889999::::;;;;<<<===>>>>???@@@@@AAABBBBCCCDDDEEEEFFFGGGGHHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]^^^___````__^^^^]]]]\\\[[[ZZZZYYYXXXXWWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGFFFFEEEEDDCCCCBBBBBAA@@@@????>>>>==<<<<;;;;;::::998888777766666554444333322211110000////..-----,,,,++++***))))(((((''''&&%%%%%$$$$#####""""!!!!  !!!!"""#####$$$$%%%%%&&&'''((((())))****++++,,,-----...////000111122223333444555666667777888999::::;;;;;<<<===>>>>???@@@@AAABBBBBCCCDDDEEEEFFFGGGGHHHIIIJJJJKKKKKLLLMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWWXXXXYYYYZZZZ[[\\\\]]]]^^^___````__^^^^]]]]\\\[[[ZZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNNNMMMMLLLKKKJJJJIIIIHHGGGGFFFFEEEEEDDCCCCBBBBAA@@@@????>>>>===<<<<;;;;::::998888777776666554444333332222110000/////..----,,,,,++++**)))))(((('''''&&&%%%%%$$$#####"""!!!!!  !!!!!""#####$$$$%%%%%&&'''''(((()))))***+++,,,,,----.../////000111222233333444555666677777888999::::;;;<<<<====>>>>???@@@@AAABBBCCCCDDDEEEEEFFFGGGGHHHIIIJJJJKKKKLLMMMMNNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZZZ[[\\\\]]]]^^^___````__^^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQQPPPOOOONNNMMMMLLLKKKJJJJIIIIHHGGGGGFFFFEEEEDDCCCCBBBBAA@@@@?????>>>>==<<<<;;;;:::::998888777766665554444333322221110000////..-----,,,,+++++***)))(((((''''&&&&%%%%$$$$$#####""!!!!!  !!!!!"""#####$$$$$%%%%&&&''''((((())))**+++++,,,,-----...///0000111122223334444555566667778888999:::::;;;<<<<===>>>?????@@@@AAABBBCCCCDDDEEEFFFFGGGGGHHHIIIJJJJKKKKLLMMMMNNNNOOOOPPQQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^^___`````__^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTTSSSRRRRQQQPPPOOOONNNMMMMLLLKKKJJJJJIIIIHHHGGGFFFFEEEEDDCCCCBBBBBAAA@@@????>>>>==<<<<;;;;;::::998888777776666554444333322222110000/////...---,,,,,++++***)))))((('''''&&&%%%%%$$$$$####"""!!!!!  !!!!!""""####$$$$$%%%%%&&'''''(((()))))**++++,,,,,----../////0000111222223334444555666777778888999:::;;;;;<<<<===>>>????@@@@AABBBBBCCCCDDDEEEFFFFGGGGHHIIIIJJJJJKKKKLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^___``````__^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVVUUUUTTTSSSRRRRQQQPPPOOOONNNMMMMLLLLKKKKJJJIIIIHHHGGGFFFFEEEEDDDDCCCBBBBAAA@@@????>>>>>===<<<;;;;::::9988888777766665544444333322221100000////...-----,,,+++++***))))((((('''''&&%%%%%$$$$#####""""!!!  !!!!""""#####$$$%%%%%&&&'''''((((())))**+++++,,,,-----..////00000111222333344444555666777788888999:::;;;;<<<<==>>>>>????@@@@AABBBBCCCCDDDDEEEFFFFGGGGHHIIIIJJJJKKKKLLLMMMMNNNNOOOOPPQQQQRRRRSSTTTTUUUUVVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^___``````__^^^^]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQPPPOOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGFFFFFEEEEDDDCCCBBBBAAA@@@@@???>>>>===<<<;;;;:::::999888777766666555444333322222111000/////...----,,,,,+++****))))(((((''''&&&%%%%$$$$$#####"""!!!!!  !!!!!""#####$$$$$%%%%&&&&''''((((()))****++++,,,,,----../////000011222223333444455666667777888899:::::;;;;<<<<==>>>>????@@@@@AABBBBCCCCDDEEEEFFFFFGGGGHHIIIIJJJJKKKKLLMMMMNNNNOOOOOPPQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYYYZZZ[[[\\\\]]]^^^^___``````__^^^^]]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTSSSRRRRQQQQQPPOOOONNNNMMMLLLKKKKJJJIIIIIHHHGGGGFFFEEEEDDDCCCBBBBBAAA@@@@???>>>>===<<<<<;;;::::99988888777666655544444333222211100000///...-----,,,,+++++**)))))(((('''''&&%%%%%$$$$$#####"""!!!!!  !!!!!""#####$$$$$%%%%%&&&'''''((()))))***+++++,,,,-----..////0000011222233334444455666677778888899::::;;;;<<<<<==>>>>????@@@@AABBBBBCCCCDDEEEEFFFFGGGGHHIIIIIJJJJKKKKLLMMMMNNNNOOOPPPQQQQQRRRRSSTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]]^^^^___```````___^^^]]]]\\\\[[ZZZZYYYYXXXXWWVVVVUUUUTTTTTSSRRRRQQQQPPOOOONNNNMMMLLLKKKKKJJJJIIIHHHGGGGFFFEEEEDDDDCCCCBBBAAA@@@@???>>>>>===<<<<;;;:::::9998888777666655554444333222221110000/////..----,,,,,++++***))))((((('''''&&&%%%%%$$$$$###""""!!!!!  !!!!!""""####$$$$$%%%%%&&'''''((((())))****++++,,,,,---.../////000011222223333444455566667777888899:::::;;;;<<<<==>>>>>????@@@@AABBBBCCCCDDDEEEEFFFFGGGGHHIIIIJJJJKKKKKLLMMMMNNNNOOOPPPQQQQRRRSSSTTTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\]]]]^^^^__`````````___^^^]]]]\\\\[[ZZZZYYYYXXXXWWWVVVVUUUUTTTTSSRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJIIIHHHGGGGFFFFFEEEDDDCCCCBBBAAA@@@@@????>>>===<<<<;;;;;:::99988887777766655544443333322211100000////...----,,,,+++++**)))))(((((''''&&&&%%%%%$$$$#####"""!!!!!  !!!!!""""#####$$$$%%%%%&&&''''((((()))))***+++++,,,----....////0000011222233333444455666677777888899::::;;;;;<<<<==>>>>????@@@@@AABBBBCCCCDDEEEEFFFFFGGGGHHIIIIJJJJKKKLLLMMMMNNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWWXXXXYYYZZZZ[[[\\\]]]]^^^^__````a````___^^^]]]]\\\\[[ZZZZZYYYYXXXXWWVVVVUUUUTTTTSSRRRRQQQQPPPOOOONNNNMMMMLLKKKKJJJJIIIIIHHGGGGFFFFEEEDDDCCCCBBBBBAA@@@@????>>>====<<<<;;;;:::99998888777766655554444333322222110000/////..-----,,,,+++++***)))))((('''''&&&&%%%%$$$$$#####""""!!!!!  !!!!!""""#####$$$$$%%%&&&&'''''(((()))))**+++++,,,,-----.../////0001112222233334445555666677778889999::::;;;;<<<====>>>>????@@@AAABBBBBCCCCDDEEEEFFFFGGGHHHIIIIIJJJJKKKLLLMMMMNNNOOOOPPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^__````a````___^^^]]]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUTTTTSSSRRRRQQQQPPOOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGFFFFEEEDDDDCCCCBBBBAA@@@@?????>>>>==<<<<;;;;;::::9988887777766665544443333322221110000////....---,,,,,++++****))))((((('''''&&%%%%%$$$$$#####""""!!!!!  !!!!!"""#####$$$$$%%%%%&&&'''''((((())))***++++,,,,,----....///00001111222233333444555666677777888999::::;;;;;<<<===>>>>?????@@@AAABBBBCCCDDDDEEEEFFFFGGGHHHIIIIJJJKKKKKLLLMMMMNNNOOOOPPPQQQRRRRSSSSTTTTUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]]^^^^__````a`````___^^^^]]]\\\\[[[ZZZYYYYXXXXWWVVVVUUUUUTTTTSSRRRRQQQQPPOOOONNNNMMMMMLLKKKKJJJJIIIIHHGGGGFFFFFEEEEDDCCCCBBBBAAA@@@@????>>>>==<<<<<;;;;::::9988888777766665554444333322222110000/////...-----,,,+++++***)))))((((('''''&&%%%%%$$$$$#####""""!!!!!  !!!!!""""#####$$$$$%%%%%&&&'''''((((()))))**+++++,,,,-----../////00001112222233344445555666677788888999::::;;;<<<<<===>>>>???@@@@AAAABBBBCCCDDDEEEEFFFFFGGGHHHIIIIJJJKKKKLLLMMMMMNNNOOOOPPPQQQRRRRSSSTTTUUUUUVVVVWWWXXXYYYYZZZZ[[\\\\]]]]^^^^__`````aaa```___^^^^]]]\\\\[[[ZZZYYYYXXXXXWWWVVVUUUUTTTTSSRRRRQQQQPPOOOOONNNNMMMMLLKKKKJJJJIIIIIHHGGGGFFFFEEEEDDCCCCCBBBBAA@@@@????>>>>>==<<<<;;;;:::::9988887777766665544444333322221111000/////...----,,,,,+++++**)))))(((((''''&&&&%%%%%$$$$$#####"""!!!!!  !!!!!""""#####$$$$$%%%%%&&&&'''((((()))))***+++++,,,,,----../////00001111222333344444555666777778888999:::::;;;<<<<===>>>>>???@@@@AAABBBCCCCCDDDEEEEFFFGGGGHHHIIIIIJJJKKKKLLLMMMNNNNOOOOOPPPQQQRRRRSSSTTTUUUUVVVVWWXXXXXYYYYZZZZ[[\\\\]]]]^^^^__````aaaa```___^^^^]]]\\\\[[[ZZZZZYYYXXXXWWWVVVUUUUTTTTSSRRRRRQQQQPPPOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGFFFFEEEEEDDCCCCBBBBAA@@@@@????>>>>==<<<<<;;;;::::998888877776666555544433332222211100000///....----,,,,,++++***)))))(((('''''&&&&%%%%%$$$$$#####""""!!!!!  !!!!!""""#####$$$$$%%%%%&&&'''''(((()))))****++++,,,,,---....////000001122222333344445555666777788888999:::;;;;<<<<<===>>>????@@@@@AAABBBCCCCDDDEEEEEFFFGGGGHHHIIIJJJJKKKKKLLLMMMNNNNOOOOPPQQQQRRRRRSSSTTTUUUUVVVVWWXXXXYYYYZZZZZ[[\\\\]]]]^^^^__````aaaa```___^^^^]]]]]\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTTTSSSRRRQQQQPPPOOONNNNMMMMMLLLKKKJJJJIIIIHHGGGGGFFFFEEEEDDCCCCBBBBBAAA@@@????>>>>>===<<<;;;;:::::99988877777666655544444333222211110000/////..-----,,,,+++++****)))((((('''''&&&&%%%%%$$$$$#####""""!!!!!  !!!!!"""#####$$$$$%%%%%&&&&'''''((((())))****+++++,,,-----.../////0000111222233334444455666677777888899:::::;;;;<<<<==>>>>>????@@@@AABBBBBCCCCDDDEEEFFFFGGGGGHHHIIIJJJJKKKKLLMMMMMNNNNOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZZ[[\\\\]]]]]^^^^__````aaaa`````__^^^^]]]]\\\[[[ZZZZYYYXXXXWWWWVVVVUUUTTTTSSSRRRQQQQPPPOOOOONNNMMMMLLLKKKJJJJIIIIIHHHGGGFFFFEEEEDDDDCCCBBBBAAA@@@?????>>>>===<<<;;;;;::::999888887776666555544443333322211100000////...----,,,,,+++++***)))))((((('''''&&%%%%%%$$$$$#####""""!!!!!!  !!!!!!""""#####$$$$$%%%%%%&&&'''''((((()))))**+++++,,,,,----....////00000112222333334444555666677778888899::::;;;;;<<<<==>>>>?????@@@@AABBBBCCCCDDDDEEEFFFFGGGGHHIIIIIJJJJKKKKLLMMMMNNNNOOOOOPPQQQQRRRRSSTTTTUUUUVVVVWWWXXXXYYYYZZZZ[[\\\\]]]]^^^___`````aaaaa````__^^^^]]]]\\\[[[ZZZZYYYYYXXXWWWVVVVUUUTTTTSSSRRRQQQQQPPPOOOONNNMMMMLLLKKKKKJJJIIIIHHHGGGFFFFFEEEEDDDCCCBBBBAAAA@@@@???>>>>====<<<<;;;:::::999888877777666555444443333222221100000////..-----,,,,,+++++***)))))((((('''''&&%%%%%%%$$$$$#####"""!!!!!!!  !!!!!!""""#####$$$$$%%%%%%&&&'''''((((()))))**+++++,,,,,-----...///000001112222233334444455666677777888899:::::;;;;<<<<===>>>>????@@@@AAABBBBCCCCDDEEEEFFFFFGGGGHHIIIIJJJJKKKKKLLMMMMNNNNOOOOPPQQQQQRRRRSSTTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^___````aaaaaa````__^^^^]]]]\\\\\[[ZZZZYYYYXXXWWWVVVVUUUTTTTTSSSRRRRQQQPPPOOOONNNMMMMMLLLKKKKJJJIIIIHHHGGGGGFFFEEEEDDDCCCCCBBBAAA@@@@?????>>>===<<<<;;;;;:::999888887777666665544443333322221110000/////...-----,,,,,+++****)))))((((('''''&&&%%%%%$$$$$$#####""""!!!!!!  !!!!!!""""#####$$$$$$%%%%%&&'''''((((()))))****++++,,,,,-----../////000011112222333334445556666677778888899::::;;;;;<<<<==>>>>?????@@@@AABBBBCCCCCDDEEEEFFFFGGGGGHHIIIIJJJJKKKKLLMMMMMNNNNOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZ[[[\\\\\]]]]^^^___````aaaaaa````__^^^^^]]]]\\\\[[ZZZZYYYYXXXWWWVVVVVUUUUTTTSSSRRRRQQQPPPOOOOONNNNMMMLLLKKKKJJJJJIIIHHHGGGGFFFEEEEEDDDCCCCBBBAAA@@@@@????>>>====<<<<;;;;:::::99888877777666655444443333222221100000////....-----,,,,+++++***))))(((((''''''&&&%%%%%%$$$$$#####"""""!!!!!!  !!!!!!"""""#####$$$$$%%%%%%%&&''''''((((())))****+++++,,,,-----...////000001112222233344444555666677777888999:::::;;;;<<<====>>>>????@@@@@AABBBBCCCCDDEEEEEFFFFGGGGHHIIIIJJJJJKKKKLLMMMMNNNNOOOOOPPQQQQRRRRSSTTTTUUUUVVVVVWWXXXXYYYYZZZ[[[\\\\]]]^^^^^___````aaaaaaa````__^^^^]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVUUUUTTTSSSRRRRRQQQQPPOOOONNNNMMMLLLKKKKKJJJJIIIHHHGGGGGFFFFEEEDDDCCCCBBBBBAA@@@@?????>>>>==<<<<;;;;;::::99888887777666665544443333322221111000/////....----,,,,,+++++**)))))((((('''''&&&&%%%%%%$$$$$#######"""!!!!!!!  !!!!!!""""######$$$$$%%%%%%&&&&'''''((((()))))***+++++,,,,,---..../////000011112223333344445556666677788888999::::;;;;;<<<===>>>>?????@@@AAABBBBBCCCCDDEEEEFFFFGGGGGHHIIIIJJJJKKKKKLLMMMMNNNNOOOPPPQQQQRRRRRSSTTTTUUUUVVVWWWXXXXYYYYYZZZ[[[\\\\]]]^^^^___```aaaaaaaaa````__^^^^]]]]\\\\[[[ZZZZYYYYXXXXWWVVVVUUUUTTTTTSSRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJIIIIIHHGGGGFFFFEEEDDDDCCCCBBBBAA@@@@@????>>>>===<<<<;;;;:::::998888777776666555544433333222211110000/////..-----,,,,,+++++***)))))((((('''''&&&%%%%%%%$$$$$######""""!!!!!!  !!!!!!""""######$$$$$%%%%%%&&&&'''''((((()))))**+++++,,,,,-----.../////000011122223333344445555666777778888999:::::;;;<<<<====>>>>???@@@@@AAABBBBCCCDDDDEEEEFFFFGGGHHHIIIIIJJJJKKKLLLMMMMNNNNNOOOPPPQQQQRRRSSSTTTTTUUUUVVVWWWXXXXYYYZZZZ[[[[\\\\]]]^^^^___```aaaabaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYXXXXWWVVVVVUUUUTTTTSSRRRRQQQQPPPOOOONNNNMMMMLLKKKKJJJJJIIIIHHGGGGFFFFFEEEEDDCCCCBBBBBAA@@@@????>>>>>==<<<<;;;;;::::9988888777766666555444443332222211100000/////..-----,,,,,++++****)))))((((('''''&&&&%%%%%%$$$$$######"""""!!!!!!  !!!!!!"""""#######$$$$$%%%%%%&&&&'''''((((()))))***++++,,,,,-----.../////0000011222223333444445566666777788888999:::;;;;;<<<<===>>>>>???@@@@AAABBBBBCCCDDDEEEEFFFFFGGGHHHIIIIJJJJJKKKLLLMMMMNNNOOOOPPPPQQQQRRRSSSTTTTUUUVVVVVWWWXXXXYYYZZZZ[[[\\\]]]]]^^^^___```aaaabaaaa`````___^^^]]]]\\\\[[ZZZZYYYYXXXXXWWVVVVUUUUTTTTSSRRRRRQQQQPPOOOONNNNMMMMLLLKKKKJJJJIIIIHHHGGGGFFFFEEEEDDCCCCCBBBBAA@@@@@????>>>>====<<<;;;;:::::9998887777766665555444433333222111100000////....-----,,,+++++****)))))((((('''''&&&&%%%%%%$$$$$$#######"""!!!!!!!  !!!!!!""""######$$$$$$%%%%%%%&&&'''''((((()))))****+++++,,,,-----....///0000011112222333334444555666677777888899:::::;;;;<<<<====>>>????@@@@@AAABBBCCCCCDDDEEEEFFFGGGGHHHHIIIIJJJKKKKLLLLMMMMNNNOOOOPPPQQQRRRRRSSSTTTTUUUVVVVWWWXXXXXYYYZZZZ[[[\\\]]]]^^^^__`````aaaabbbaaa````___^^^]]]]\\\\[[ZZZZZYYYYXXXXWWVVVVUUUUTTTTTSSRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJJIIIIHHGGGGFFFFEEEEEDDCCCCBBBBBAAA@@@????>>>>>===<<<;;;;;::::9999888877777666555444443333322221110000/////....----,,,,,+++++***)))))((((('''''''&&%%%%%%$$$$$$$######""""!!!!!!!  !!!!!!!!""""######$$$$$$%%%%%%&&&''''''((((()))))****+++++,,,,,----.../////0000111122223333344444556666777778888999::::;;;;;<<<<==>>>>>????@@@@AABBBBBCCCCDDDEEEEEFFFGGGGHHHIIIJJJJJKKKKLLLMMMNNNNNOOOOPPPQQQRRRRSSSTTTTTUUUVVVVWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^__````aaaabbbbaaa````___^^^]]]]]\\\\[[[ZZZYYYYXXXXWWVVVVVUUUUTTTTSSRRRRQQQQPPPPOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGGFFFFEEEEDDCCCCCBBBBAAA@@@@@???>>>>====<<<<;;;:::::9998888877776666655444443333222221100000/////...-----,,,,,+++++****)))))(((((''''''&&&&%%%%%$$$$$$######"""""!!!!!!!!  !!!!!!!"""""#######$$$$$$%%%%%&&&&''''''((((()))))****+++++,,,,,-----../////0000011122222333444445556666677778888899:::::;;;;<<<<===>>>>????@@@@@AABBBBCCCCCDDDEEEFFFFGGGGGHHHIIIJJJJKKKKKLLLMMMNNNNOOOOPPPPQQQRRRRSSSTTTUUUUVVVVVWWWXXXYYYYZZZZ[[\\\\]]]]]^^^^__````aaaabbbbaaa````____^^^^]]]\\\\[[[ZZZYYYYXXXXXWWWVVVUUUUTTTTSSRRRRRQQQQPPPOOONNNNMMMMMLLLKKKJJJJIIIIIHHHGGGFFFFEEEEEDDDCCCBBBBBAAA@@@@???>>>>>===<<<<<;;;;:::999988887777766665554444333332222211100000/////..-----,,,,,+++++****)))))(((((''''''&&&&%%%%%%$$$$$$#######"""""!!!!!!!  !!!!!!!!"""""######$$$$$$%%%%%%%&&&'''''''((((()))))***+++++,,,,,-----.../////00000112222233333444455556666777778889999::::;;;;<<<<<==>>>>>????@@@@AABBBBBCCCCDDEEEEEFFFFGGGGHHIIIIIJJJJKKKKLLMMMMMNNNNOOOOPPQQQQRRRRRSSSTTTUUUUVVVVWWXXXXXYYYYZZZZ[[\\\\]]]]^^^^___````aaaabbbbbaaaa```___^^^^]]]\\\\[[[ZZZZZYYYXXXXWWWVVVUUUUTTTTTSSSRRRQQQQPPPOOOOONNNMMMMLLLKKKKKJJJIIIIHHHGGGGGFFFEEEEDDDCCCCCBBBAAA@@@@@????>>>====<<<<;;;;;::::99888887777666665544444333332222111100000////...-----,,,,,+++++****)))))(((((''''''&&&&%%%%%%$$$$$$$######"""""!!!!!!!!!  !!!!!!!!!"""""######$$$$$$%%%%%%&&&&''''''((((()))))****+++++,,,,,-----....////00000111222233333444445556666677788888999::::;;;;;<<<====>>>>????@@@@@AABBBBCCCCCDDEEEEFFFFGGGGGHHIIIIJJJJKKKKKLLMMMMNNNNOOOOOPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYZZZZZ[[\\\\]]]]^^^^__````aaaabbbbbbaaaa```___^^^^]]]]]\\\[[[ZZZZYYYXXXXWWWVVVVVUUUTTTTSSSRRRQQQQQPPPOOOONNNMMMMMLLLKKKKJJJIIIIHHHHGGGGFFFEEEEEDDDCCCCBBBAAAA@@@@?????>>>>==<<<<<;;;;:::::9988887777766666555444443332222211110000/////....-----,,,,,+++++***)))))((((('''''''&&&%%%%%%%$$$$$$#######"""""!!!!!!!!!  !!!!!!!!!"""""########$$$$$$%%%%%%&&&&''''''((((()))))****+++++,,,,,-----..../////0001111222223333444445566666777778888999:::::;;;<<<<<===>>>>?????@@@AAAABBBBCCCCDDEEEEEFFFFGGGGHHHIIIIJJJJKKKKLLMMMMMNNNNOOOOPPQQQQQRRRRSSTTTTUUUUVVVVVWWXXXXYYYYZZZZ[[\\\\]]]]]^^^^__````aaaabbcbbbaaaa```____^^^^]]]]\\\[[[ZZZZYYYYYXXXWWWVVVVUUUTTTTSSSSRRRRQQQPPPOOOONNNNNMMMLLLKKKKJJJJJIIIHHHGGGGFFFFFEEEDDDCCCCCBBBBAA@@@@@????>>>>===<<<<;;;;;::::99998887777766665555444433333222221100000/////....-----,,,,,+++++****)))))(((((('''''&&&&&%%%%%%$$$$$$########"""""!!!!!!!!!  !!!!!!!!!"""""#######$$$$$$%%%%%%%&&&&&'''''(((((()))))****+++++,,,,,-----.../////000001112222233333444455566667777788889999:::;;;;;<<<<====>>>>???@@@@@AAABBBBCCCCCDDEEEEFFFFFGGGGHHIIIIJJJJJKKKKLLMMMMNNNNNOOOOPPQQQQRRRRSSSTTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^____````aaaabbcbbbaaaaa````__^^^^]]]]\\\[[[[ZZZZYYYYXXXWWWVVVVUUUUUTTTSSSRRRRQQQPPPPOOOONNNNMMMLLLLKKKKJJJJIIIHHHHGGGGFFFFEEEEEDDCCCCBBBBBAA@@@@?????>>>>==<<<<<;;;;:::::99988888777666665554444433333222221100000/////...------,,,,,+++++****)))))((((((''''''&&&&%%%%%%$$$$$$$$#######"""""!!!!!!!!!!  !!!!!!!!!!"""""########$$$$$$$%%%%%%&&&&''''''((((((()))))***+++++,,,,,-------../////00000111222223333344444556666677778888899:::::;;;;<<<<<===>>>?????@@@@AAABBBBBCCCDDDEEEEEFFFFGGGHHHHIIIIJJJJKKKLLLLMMMMNNNNOOOPPPPQQQQRRRRSSTTTTUUUUUVVVVWWXXXXYYYYZZZ[[[[\\\\]]]]^^^___````aaaaabbcccbbaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYXXXWWWWVVVVUUUUTTTSSSRRRRRQQQQPPOOOONNNNNMMMMLLKKKKJJJJJIIIIHHGGGGFFFFFEEEEDDCCCCCBBBBAA@@@@@????>>>>>===<<<;;;;;::::9999888877777666665544444333332222111100000/////..-----,,,,,,+++++****)))))(((((('''''''&&&%%%%%%%%$$$$$$#########"""""!!!!!!!!!!  !!!!!!!!!!"""""########$$$$$$$%%%%%%%&&&&''''''(((((()))))****+++++,,,,,,-----.../////000001111222333334444455566666777778888999::::;;;;;<<<<==>>>>>????@@@@@AAABBBCCCCCDDDEEEEFFFFFGGGHHHIIIIJJJJJKKKLLLMMMMNNNNNOOOPPPQQQQRRRRRSSTTTTUUUUVVVWWWWXXXXYYYYZZZ[[[\\\\]]]]]^^^___````aaabbbccccbbaaaa````___^^^^]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVUUUUTTTTTSSRRRRQQQQPPOOOOONNNNMMMMLLKKKKKJJJJIIIIHHHGGGGFFFFEEEEEDDCCCCBBBBBAAA@@@?????>>>>===<<<<<;;;;;:::9998888877777666655544444333322222111100000/////..-----,,,,,,,+++++***)))))(((((((''''''&&&&&%%%%%%$$$$$$$$########"""""""!!!!!!!!!!  !!!!!!!!!!""""""#########$$$$$$$%%%%%%%&&&&&''''''(((((()))))****+++++,,,,,,-----.../////000001112222233334444455556666777778888899::::;;;;;<<<<<==>>>>?????@@@@AABBBBBCCCCDDDEEEEEFFFGGGGHHHHIIIIJJJKKKKKLLLMMMMNNNOOOOOPPPQQQQRRRSSSTTTTTUUUUVVVWWWXXXXYYYYYZZZ[[[\\\\]]]^^^^____````aaabbbccccbbaaaaa````__^^^^]]]]\\\\[[[ZZZZYYYYXXXXWWVVVVVUUUUTTTTSSRRRRQQQQQPPOOOONNNNMMMMMLLKKKKJJJJIIIIIHHGGGGFFFFFEEEEDDCCCCCBBBBAAA@@@@@???>>>>>===<<<<<;;;;:::::99888887777666665555444333332222211110000/////....-----,,,,,,+++++****))))))((((((''''''&&&&%%%%%%%%$$$$$$$#########""""""!!!!!!!!!!!!! !!!!!!!!!!!!"""""""########$$$$$$$$%%%%%%%&&&&''''''((((((())))))****+++++,,,,,,-----..../////00011112222233333444455556666677788888999:::::;;;;<<<<<==>>>>>????@@@@@AABBBBCCCCCDDDEEEFFFFFGGGGHHHIIIIIJJJKKKKLLLMMMMMNNNOOOOPPPQQQQQRRRSSSTTTTUUUVVVVVWWWXXXXYYYZZZZ[[[[\\\\]]]^^^^___```aaaaabbbcccccbbaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYXXXXXWWVVVVUUUUTTTTSSSRRRRQQQQPPOOOOONNNNMMMMLLKKKKKJJJJIIIIHHGGGGGFFFFEEEEEDDDCCCBBBBBAAA@@@@?????>>>====<<<<;;;;;::::999888877777666665554444433333222221100000/////....-----,,,,,,+++++****))))))(((((('''''''&&&&&%%%%%%$$$$$$$$$########""""""""!!!!!!!!!!!!!! !!!!!!!!!!!!!!"""""""#########$$$$$$$$$%%%%%%&&&&&''''''(((((()))))))***+++++,,,,,,,-----.../////0000011122222333334444455666667777788889999::::;;;;;<<<====>>>>?????@@@@AABBBBBCCCCDDEEEEEFFFFGGGGGHHHIIIJJJJKKKKKLLLMMMNNNNOOOOOPPPQQQRRRRSSSSTTTTUUUVVVVWWWXXXXXYYYZZZZ[[[\\\]]]]]^^^^___```aaaabbbccccccbbaaaa````____^^^]]]]\\\\[[ZZZZZYYYYXXXXWWVVVVUUUUUTTTTSSRRRRQQQQQPPPOOONNNNMMMMMLLLKKKJJJJIIIIIHHHGGGFFFFFEEEEDDDCCCCCBBBAAAA@@@@????>>>>>==<<<<<;;;;:::::998888877777666665554444433333222221100000/////....-----,,,,,,+++++****))))))((((((('''''''&&&&%%%%%%%$$$$$$$$$##########""""""""!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!"""""""##########$$$$$$$$$%%%%%%%%&&&''''''''(((((())))))****+++++,,,,,,-----..../////0000011122222333334444455666667777788888999:::::;;;<<<<<===>>>>>????@@@AAAABBBBCCCCCDDEEEEFFFFFGGGGHHIIIIIJJJJKKKKLLMMMMMNNNNOOOOPPQQQQQRRRRSSSTTTUUUUUVVVVWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^____```aaaabbbccccccbbaaaaa````___^^^]]]]\\\\\[[[ZZZYYYYXXXXWWWWVVVUUUUTTTTSSRRRRRQQQQPPPOOONNNNNMMMMLLLKKKKKJJJIIIIHHHGGGGGFFFEEEEEDDDCCCCBBBBBAA@@@@@????>>>>>==<<<<;;;;;:::::9998888877777666555544444333332222111100000/////...-----,,,,,,,+++++*****))))))((((((''''''&&&&&%%%%%%%%$$$$$$$$$##########""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"""""""""##########$$$$$$$$$%%%%%%%&&&&&''''''((((((())))))*****+++++,,,,,,-----..../////000001111222333334444455556666777778888899:::::;;;;;<<<<===>>>>>???@@@@@AAABBBBBCCCCDDEEEEEFFFFGGGGGHHIIIIJJJJKKKKKLLMMMMNNNNNOOOOPPQQQQRRRRRSSSTTTUUUUVVVVWWWWXXXYYYYZZZZ[[\\\\\]]]]^^^^__````aaaaabbbcccccccbbbaaa````___^^^^^]]]\\\\[[[ZZZYYYYYXXXXWWWVVVUUUUTTTTTSSSRRRQQQQPPPPOOOONNNMMMMMLLLKKKKJJJIIIIIHHHGGGGFFFFFEEEDDDCCCCCBBBBAAA@@@@?????>>>>====<<<;;;;;::::99998888877776666655544443333322222111100000/////....------,,,,,++++++****))))))((((((''''''''&&&&&%%%%%%%$$$$$$$$$$############""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""###########$$$$$$$$$$%%%%%%%%&&&&&'''''''(((((()))))))***+++++++,,,,,------..../////0000011122222333334444555566666777788888999::::;;;;;<<<<====>>>?????@@@@AAAABBBBCCCCCDDEEEEFFFFFGGGGHHIIIIIJJJJKKKKLLMMMMMNNNNOOOOPPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^^^__````aaaabbccccdccccbbbaaa`````___^^^^]]]\\\\[[[ZZZZZYYYXXXXWWWVVVVVUUUTTTTSSSRRRRRQQQPPPOOOONNNNNMMMLLLKKKKKJJJJIIIHHHHGGGGFFFFEEEEEDDCCCCBBBBBAA@@@@@????>>>>>===<<<<<;;;:::::99998888777776666655444443333322222111100000/////....------,,,,,++++++****))))))((((((((''''''&&&&&&%%%%%%%%$$$$$$$$$$############"""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""#############$$$$$$$$$$%%%%%%%&&&&&&'''''''((((((())))))****++++++,,,,,-------.../////00000111122222333334444455566666777778889999:::::;;;;<<<<<==>>>>>????@@@@@AAABBBBBCCCDDDEEEEEFFFFGGGHHHHIIIIJJJJKKKKKLLMMMMNNNNNOOOOPPQQQQRRRRRSSTTTTUUUUVVVVVWWXXXXYYYYZZZZZ[[\\\\]]]]^^^^__`````aaaabbccccdccccbbbbaaaa```___^^^^]]]]]\\\[[[ZZZZYYYXXXXXWWWVVVVUUUTTTTTSSSRRRRQQQPPPPOOOONNNNMMMLLLLKKKKJJJJIIIIIHHGGGGFFFFFEEEEDDDCCCCBBBBBAAA@@@?????>>>>====<<<<;;;;;:::::9988888777776666655544444333332222211100000/////....------,,,,,+++++++*****))))))((((((''''''''&&&&&%%%%%%%%%%$$$$$$$$$$#############"""""""""""""""""""""""""""""""""""""""""""""""""##############$$$$$$$$$$%%%%%%%%%%&&&&&'''''''((((((())))))*****++++++,,,,,------..../////00000111122222333334444455666667777788888999:::::;;;;;<<<<===>>>>?????@@@@AABBBBBCCCCDDDDEEEEFFFFFGGGHHHIIIIIJJJJKKKLLLLMMMMNNNNOOOPPPPQQQQRRRRSSTTTTTUUUUVVVVWWXXXXXYYYYZZZZ[[\\\\]]]]]^^^^__````aaaabbbccccdddcccbbbaaaa```___^^^^^]]]]\\\[[[ZZZZZYYYYXXXWWWVVVVUUUUUTTTSSSRRRRQQQQQPPOOOONNNNNMMMMLLKKKKKJJJJIIIIHHHGGGGFFFFEEEEEDDCCCCCBBBBAAA@@@@@?????>>>====<<<<;;;;;:::::99888887777766665555444443333322222111100000/////...-------,,,,,,++++++****))))))(((((((('''''''&&&&&%%%%%%%%%%$$$$$$$$$$$##################""""""""""""""""""""""""""""""""""#################$$$$$$$$$$$%%%%%%%%%%&&&&&''''''''((((((()))))))***+++++++,,,,,,------..../////00000111122222333334444455566667777788888999:::::;;;;;<<<====>>>>?????@@@@@AABBBBCCCCCDDDEEEEEFFFGGGGHHHHIIIIJJJKKKKKLLLMMMMNNNNNOOOPPPQQQQQRRRRSSTTTTUUUUUVVVVWWXXXXYYYYZZZZZ[[\\\\]]]]^^^^^__````aaaabbccccddddcccbbbaaaa`````__^^^^]]]]\\\\\[[ZZZZYYYYXXXWWWWVVVVUUUUTTTSSSSRRRRQQQQPPOOOOONNNNMMMMLLLKKKKJJJJIIIIIHHGGGGGFFFFEEEEDDDDCCCBBBBBAAA@@@@@????>>>>>==<<<<<;;;;;::::999988888777666665555444443333322222111100000/////....------,,,,,,++++++****))))))))(((((((''''''''&&&&&&%%%%%%%%%%$$$$$$$$$$$$###########################################################$$$$$$$$$$$$$%%%%%%%%%%&&&&&&'''''''(((((((()))))))****++++++,,,,,,,------..../////000001112222233333444445555666667777888889999:::;;;;;<<<<<===>>>>>????@@@@@AABBBBBCCCCDDDDEEEFFFFGGGGGHHHIIIIIJJJKKKKLLLLMMMMNNNOOOOOPPPQQQQRRRSSSSTTTTUUUUVVVWWWWXXXXYYYYZZZ[[[\\\\\]]]]^^^___`````aaaabbccccddddcccccbbaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVUUUUUTTTTSSRRRRQQQQQPPOOOONNNNNMMMMLLKKKKKJJJJIIIIHHHHGGGFFFFFEEEEDDDCCCCCBBBAAAA@@@@?????>>>>===<<<<<;;;;:::::999988887777766666555444443333322222111100000//////....-----,,,,,,+++++++*****))))))((((((('''''''''&&&&&&%%%%%%%%%%$$$$$$$$$$$$$$$#################################################$$$$$$$$$$$$$$$%%%%%%%%%%&&&&&&'''''''''(((((((())))))*****++++++,,,,,,-----....//////000001111222223333344444555566666777778888999:::::;;;;<<<<<====>>>>?????@@@AAAABBBBCCCCCDDEEEEFFFFFGGGGHHHHIIIJJJJKKKKKLLLMMMNNNNNOOOOPPPQQQQQRRRSSSTTTTUUUUUVVVWWWXXXXYYYYYZZZ[[[\\\\]]]]]^^^___````aaabbbcccccdddddccccbbaaaa````___^^^^]]]]\\\\[[[ZZZZYYYYXXXXWWVVVVVUUUUTTTTSSSRRRRQQQQPPOOOOONNNNMMMMLLLLKKKJJJJJIIIIHHHGGGGGFFFEEEEEDDDCCCCBBBBBAA@@@@@?????>>>>====<<<;;;;;:::::999888887777766666555544444333332222211100000///////...-------,,,,,,++++++****)))))))(((((((('''''''''&&&&&&%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$##################################$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%&&&&&&'''''''''((((((())))))))***+++++++,,,,,,------....//////000001111222223333344444555566666777778888899:::::;;;;;<<<<====>>>?????@@@@@AAABBBBBCCCCDDEEEEEFFFFGGGGGHHIIIIJJJJJKKKKLLLLMMMNNNNOOOOOPPPQQQRRRRSSSSTTTTUUUVVVVVWWWXXXXYYYZZZZ[[[[\\\\]]]^^^^____````aaabbbccccddddddccccbbaaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYXXXXXWWVVVVUUUUTTTTTSSRRRRQQQQQPPPOOONNNNNMMMMLLLKKKKKJJJIIIIHHHHGGGGFFFFFEEEDDDDCCCCBBBBBAA@@@@@????>>>>>===<<<<<;;;;;:::::998888877777666665555444443333322222111100000//////....------,,,,,,++++++*****))))))))(((((((''''''''''&&&&&&&%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%&&&&&&''''''''''(((((((()))))))*****++++++,,,,,,,------....//////000001111222223333344444555666667777788888999:::::;;;;;<<<<<==>>>>>????@@@@@AAABBBBBCCCDDDDEEEEFFFFFGGGGHHHIIIIJJJJKKKKKLLMMMMNNNNNOOOOPPQQQQQRRRRSSSTTTTTUUUVVVVWWWXXXXXYYYZZZZ[[[\\\]]]]]^^^^___```aaaaabbbccccddddddcccccbbaaaa````__^^^^^]]]]\\\\[[ZZZZZYYYYXXXXWWVVVVVUUUUTTTTSSRRRRRQQQQPPPOOOOONNNMMMMMLLLKKKKJJJJJIIIHHHGGGGGFFFFEEEEEDDCCCCCBBBBAAAA@@@?????>>>>>===<<<<<;;;;;::::9998888877777666665554444443333322222111100000//////....------,,,,,,++++++++*****)))))))((((((((''''''''''&&&&&&&%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%&&&&&&&&''''''''''((((((())))))))*****+++++++,,,,,,-------...///////0000011122222333334444444556666677777888889999::::;;;;;<<<<<==>>>>>?????@@@@AAAABBBCCCCCDDDEEEEEFFFFGGGGGHHIIIIJJJJJKKKKLLMMMMMNNNNOOOOOPPQQQQRRRRRSSSTTTUUUUVVVVVWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^^___```aaaabbbcccccdddddddccccbbaaaa`````___^^^]]]]\\\\\[[[ZZZYYYYXXXXXWWWVVVUUUUTTTTTSSSRRRQQQQQPPPOOOONNNNNMMMLLLKKKKKJJJJIIIIIHHGGGGFFFFFEEEEDDDCCCCBBBBBAAA@@@@@?????>>>====<<<<<;;;;:::::99998888877777666665544444433333222221111000000/////.....-------,,,,,,++++++*****)))))))))(((((((((''''''''''&&&&&&&%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%&&&&&&&&''''''''''((((((((())))))))*****+++++++,,,,,,------...../////000000111122222333334444445556666677777888889999:::::;;;<<<<<====>>>>?????@@@@@AABBBBBCCCCDDDDEEEEFFFFFGGGHHHIIIIIJJJJKKKKKLLMMMMNNNNNOOOOPPQQQQQRRRRSSTTTTTUUUUVVVVWWXXXXXYYYYZZZZ[[\\\\\]]]]^^^^__`````aaaabbbcccddddeddddccccbbbbaaa````___^^^^^]]]\\\\[[[ZZZYYYYYXXXXWWWVVVVVUUUTTTTSSSRRRRRQQQPPPOOOOONNNNMMMMMLLKKKKJJJJJIIIIHHHGGGGFFFFFEEEEDDCCCCCBBBBBAAA@@@@@????>>>>>===<<<<;;;;;:::::999988887777766666655444444433333222221110000000//////....------,,,,,,++++++++*****))))))))((((((((('''''''''''&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&'''''''''''((((((((()))))))))*****+++++++,,,,,,,------....//////00000011112222233333444444555666666777778888999:::::;;;;;<<<<====>>>>>????@@@@@AABBBBBCCCCCDDDEEEFFFFFGGGGHHHHIIIIJJJJJKKKLLLMMMMMNNNNOOOOOPPQQQQRRRRRSSTTTTUUUUVVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]^^^^^__````aaaabbbbcccddddedddddccccbbbaaa`````___^^^^]]]\\\\[[[[ZZZZYYYXXXXXWWWVVVVUUUTTTTTSSSRRRRQQQQQPPOOOONNNNNMMMMLLKKKKKJJJJIIIIIHHGGGGGFFFFEEEEEDDDCCCCCBBBAAAA@@@@?????>>>>>==<<<<<;;;;;:::::999888887777766666655544444433333222221111000000//////....------,,,,,,,,+++++++*****)))))))))(((((((((''''''''''''&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&'''''''''''''((((((((())))))))*****++++++++,,,,,,,-------...///////00000011112222233333444444556666666777778888899:::::;;;;;<<<<<===>>>>>?????@@@AAAABBBBCCCCCDDEEEEEFFFFGGGGGHHHIIIIIJJJKKKKKLLLMMMMNNNNNOOOPPPQQQQQRRRRSSTTTTTUUUUVVVVWWXXXXXYYYYZZZZ[[[\\\\]]]]^^^^__`````aaaabbccccdddddeeedddccccbbbaaaaa```___^^^^]]]]]\\\[[[ZZZZYYYYYXXXWWWVVVVVUUUUTTTSSSRRRRRQQQQPPOOOOONNNNMMMMMLLKKKKJJJJJIIIIHHHHGGGFFFFFEEEEDDDDCCCCBBBBBAA@@@@@?????>>>>>===<<<<<;;;;;:::::99888887777766666555544444433333222221111100000//////.....-------,,,,,,+++++++++*****))))))))((((((((((''''''''''''''&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''''(((((((((()))))))))*****+++++++++,,,,,,------.....//////000001111122222333334444444555666667777788888999:::::;;;;;<<<<<==>>>>>?????@@@@@AAABBBBBCCCCDDDEEEEFFFFFGGGGHHHHIIIJJJJJKKKKLLLMMMMMNNNOOOOOPPPQQQQRRRRRSSTTTTUUUUVVVVVWWXXXXYYYYYZZZZ[[\\\\]]]]]^^^^__````aaaaabbccccddddeeeedddcccccbbbaaaa```____^^^^]]]]\\\[[[[ZZZZYYYYXXXWWWWVVVVUUUUTTTTTSSRRRRQQQQQPPOOOONNNNNMMMMLLLLKKKJJJJIIIIIHHHGGGGGFFFEEEEEDDDCCCCCBBBBBAA@@@@@?????>>>>====<<<<<;;;;;::::99988888777776666655554444443333322222221110000000//////....------,,,,,,,++++++++******)))))))))((((((((((('''''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''(((((((((((())))))))*******+++++++,,,,,,,,------....//////00000011112222223333344444455556666677777888889999::::;;;;;<<<<<===>>>>?????@@@@@AAABBBBBCCCCCDDEEEEEFFFFGGGGGHHIIIIIJJJJKKKKLLLLMMMNNNNNOOOOPPPQQQQQRRRSSSTTTTTUUUUVVVWWWWXXXXYYYYZZZ[[[[\\\\]]]]^^^____````aaaabbcccccddddeeeeeddddcccbbbaaaaa````__^^^^]]]]]\\\\[[ZZZZYYYYYXXXXWWVVVVVUUUUTTTTSSRRRRRQQQQPPPPOOONNNNMMMMMLLLKKKKKJJJIIIIIHHHGGGGFFFFFEEEEEDDCCCCCBBBBAAAA@@@@@???>>>>>====<<<<;;;;;:::::99998888877777666665554444444333332222221111000000//////....-------,,,,,,,,+++++++*******))))))))))((((((((((((''''''''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''''((((((((((((())))))))))******++++++++,,,,,,,--------...///////00000011112222223333344444455556666677777888889999:::::;;;;;<<<====>>>>>????@@@@@AAAABBBCCCCCDDDEEEEEFFFFFGGGGHHIIIIIJJJJKKKKKLLMMMMMNNNNOOOOPPPPQQQRRRRRSSSTTTTUUUVVVVVWWWXXXXYYYYYZZZ[[[\\\\]]]]]^^^___````aaaaabbccccddddeeeeeeddddcccccbbaaaa````__^^^^^]]]]\\\\[[ZZZZZYYYYXXXXWWWVVVVUUUUTTTTTSSRRRRQQQQQPPPOOONNNNNMMMMLLLLKKKKJJJJJIIIHHHHGGGGFFFFFEEEEDDDCCCCBBBBBAAAA@@@@?????>>>>>==<<<<<;;;;;:::::99998888877777666665555444444333332222221111000000//////.....--------,,,,,,,++++++++******)))))))))))(((((((((((((''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((()))))))))))*******+++++++,,,,,,,,-------.....//////00000001112222222333334444445555666667777788888999:::::;;;;;<<<<<===>>>>>?????@@@@AAABBBBBCCCCDDDDEEEEFFFFFGGGHHHHIIIIJJJJJKKKKLLLMMMMNNNNNOOOOPPQQQQQRRRRSSSTTTTTUUUVVVVWWWWXXXXYYYZZZZZ[[[\\\\]]]^^^^^___````aaabbbcccccddddeeeeeedddddccccbbaaaa`````__^^^^]]]]\\\\\[[ZZZZYYYYYXXXXWWVVVVVUUUUTTTTSSSSRRRQQQQPPPPOOOONNNMMMMMLLLKKKKKJJJJIIIIIHHGGGGGFFFFEEEEEDDCCCCCBBBBBAAA@@@@@?????>>>>>==<<<<<;;;;;:::::9999888887777766666655544444433333322222111110000000//////.....------,,,,,,,,,+++++++++******)))))))))))((((((((((((((('''''''''''''''''''''''''''''''''''''''''''''''''''((((((((((((((())))))))))))******+++++++++,,,,,,,,-------.....//////000000111112222233333344444445566666677777888889999:::::;;;;;<<<<<===>>>>>?????@@@@@AABBBBBCCCCCDDDEEEEEFFFGGGGGHHHIIIIIJJJJKKKKKLLMMMMMNNNNOOOOPPPQQQQRRRRSSSSTTTUUUUVVVVVWWWXXXYYYYYZZZZ[[[\\\\\]]]^^^^___`````aaabbbccccdddddeeeeeeeddddccccbbbaaaa````__^^^^^]]]]\\\\[[ZZZZZYYYYXXXXWWWWVVVUUUUTTTTTSSSRRRQQQQQPPPOOOOONNNNMMMMMLLKKKKJJJJJIIIIHHHGGGGFFFFFEEEEEDDDCCCCCBBBBBAA@@@@@?????>>>>====<<<<<;;;;;:::::999888887777766666665554444433333332222221111000000//////.....--------,,,,,,,,+++++++++******)))))))))))))(((((((((((((((((((''''''''''''''''''''''''''''''''''''((((((((((((((((((())))))))))))******+++++++++,,,,,,,,,-------.....///////000000111122222233333344444555566666677777888889999:::::;;;;;<<<<<====>>>?????@@@@@AAABBBBBCCCCCDDEEEEEFFFFFGGGGHHHHIIIIJJJJJKKKLLLMMMMMNNNNOOOOOPPQQQQQRRRRSSTTTTTUUUUVVVVWWWWXXXYYYYZZZZZ[[[\\\]]]]^^^^^___```aaaabbbbccccdddeeeefeeeedddddccccbbaaaa`````___^^^]]]]\\\\\[[[ZZZYYYYYXXXXWWWVVVVVUUUTTTTSSSSRRRRQQQPPPPOOOONNNNNMMMMLLKKKKKJJJJJIIIIHHGGGGGFFFFFEEEEDDDDCCCCCBBBBAAA@@@@@????>>>>>====<<<<<;;;;;:::::999988888777776666665555444443333332222221111000000////////.....-------,,,,,,,,,+++++++++*******))))))))))))))(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()))))))))))))********+++++++++,,,,,,,,--------.....///////0000000111222222233333344444555566666677777888889999:::::;;;;;<<<<<===>>>>>????@@@@@AAAABBBBCCCCCDDDEEEEFFFFFGGGGGHHHIIIJJJJJKKKKKLLLMMMMNNNNNOOOPPPPQQQQRRRRSSSTTTTUUUUVVVVVWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^__`````aaaabbbcccdddddeeeefeeeeeddddccccbbaaaaa````___^^^^^]]]\\\\[[[ZZZZZYYYXXXXWWWWVVVVUUUTTTTTSSSRRRRRQQQQPPOOOOONNNNMMMMMLLKKKKKJJJJIIIIIHHHGGGGGFFFEEEEEDDDDCCCCBBBBBAAAA@@@?????>>>>>====<<<<<;;;;;:::::99998888877777666666555544444333333222222111110000000///////.....--------,,,,,,,,++++++++++********))))))))))))))))((((((((((((((((((((((((((((((((((((((((((((((((((()))))))))))))))))*******++++++++++,,,,,,,,,-------.....////////0000001111122222233333334444455566666667777788888999:::::;;;;;<<<<<====>>>>>?????@@@@AAAABBBBBCCCDDDDEEEEEFFFFGGGGGHHIIIIIJJJJKKKKKLLLMMMMMNNNOOOOOPPPQQQQRRRRRSSTTTTTUUUUVVVVWWWXXXXYYYYZZZZZ[[\\\\]]]]^^^^^__````aaaaabbbcccddddeeeeefffeeeddddcccccbbbaaa````____^^^^]]]\\\\\[[[ZZZZYYYYYXXXWWWVVVVVUUUUTTTSSSSRRRRQQQQQPPOOOONNNNNMMMMLLLLKKKJJJJJIIIIHHHHGGGGFFFFFEEEEEDDCCCCCBBBBBAAA@@@@@?????>>>>>===<<<<<;;;;;:::::999988888777776666665555444444333333322222211110000000//////.....---------,,,,,,,,,+++++++++++*********)))))))))))))))))))(((((((((((((((((((((((((((((((((((()))))))))))))))))))********++++++++++++,,,,,,,,---------.....//////000000001111222222333333444444555566666677777888889999:::::;;;;;<<<<<====>>>>>?????@@@@@AABBBBBCCCCCDDDEEEEEFFFFFGGGGHHHIIIIJJJJJKKKKLLLLMMMNNNNNOOOOPPPQQQQQRRRSSSSTTTTUUUUVVVVVWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^___````aaaabbcccccddddeeeeffffeeeeedddccccbbbaaaaa```___^^^^]]]]]\\\[[[ZZZZZYYYYXXXWWWWVVVVUUUUUTTTTSSRRRRRQQQQPPOOOOONNNNMMMMMLLLKKKKKJJJIIIIIHHHGGGGGFFFFFEEEEEDDCCCCCBBBBBAAA@@@@@?????>>>>>====<<<<<;;;;;:::::99988888777776666666555444444433333322222211111000000////////.....---------,,,,,,,,,,+++++++++++**********))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))**********+++++++++++,,,,,,,,,,---------.....///////000000111112222222333333444444555566666677777888889999:::::;;;;;<<<<<====>>>>>?????@@@@@AABBBBBCCCCCDDDEEEEEFFFFFGGGGGHHIIIIIJJJJKKKKKLLMMMMMNNNNOOOOOPPPQQQRRRRRSSSTTTTUUUUUVVVWWWWXXXXYYYYZZZZZ[[\\\\]]]]]^^^^__````aaaaabbccccddddeeeeefffffeeeedddcccccbbbaaaa```____^^^^]]]]\\\\\[[ZZZZYYYYYXXXXWWVVVVVUUUUTTTTSSSRRRRQQQQQPPPOOOOONNNMMMMMLLLKKKKKJJJJIIIIIHHGGGGGFFFFFEEEEDDDDCCCCCBBBAAAA@@@@@?????>>>>>===<<<<<<;;;;;:::::9999888887777776666655554444443333332222221111100000000///////.....---------,,,,,,,,,,+++++++++++++***********))))))))))))))))))))))))))))))))))))))))))))))))))))))***********++++++++++++,,,,,,,,,,---------.....////////0000000111112222223333333444444555566666777777888889999:::::;;;;;<<<<<<==>>>>>?????@@@@@AAAABBBBCCCCCDDDDEEEFFFFFGGGGGHHHIIIIIJJJJKKKKKLLMMMMMNNNNOOOOOPPQQQQQRRRRSSSSTTTTUUUVVVVVWWWXXXXYYYYYZZZ[[[\\\\\]]]]^^^____````aaaabbcccccddddeeeeffgfffeeeedddddcccbbbaaaaa````__^^^^]]]]]\\\\[[ZZZZZYYYYXXXXXWWVVVVUUUUUTTTTSSRRRRRQQQQPPPPOOOONNNNNMMMLLLLKKKKJJJJJIIIIHHHGGGGGFFFFEEEEEDDDDCCCCBBBBBAAA@@@@@?????>>>>>===<<<<<;;;;;;:::::9999888887777776666655555444444333333322222211111000000/////////.....----------,,,,,,,,,,++++++++++++++***************))))))))))))))))))))))))))))))))))))***************++++++++++++++,,,,,,,,,,----------.....////////0000000111112222223333334444445555566666777777788888999:::::;;;;;;;<<<<<==>>>>>?????@@@@@AAAABBBBBCCCCDDDEEEEEFFFFGGGGGHHHHIIIIJJJJJKKKLLLLMMMMNNNNNOOOOPPPQQQQRRRRRSSSTTTUUUUUVVVVWWWXXXXXYYYZZZZZ[[[\\\\]]]]]^^^___````aaaaabbccccdddddeeeeffgffffeeeeddddcccbbbbaaaa````___^^^^]]]]\\\\\[[ZZZZYYYYYXXXXWWVVVVVUUUUTTTTTSSSRRRQQQQQPPPOOOOONNNNMMMMMLLKKKKKJJJJIIIIIHHHHGGGFFFFFEEEEEDDDCCCCCBBBBBAAAA@@@@@???>>>>>>>==<<<<<;;;;;;:::::999988888777777666666655544444443333332222221111100000000////////.....----------,,,,,,,,,,,,,+++++++++++++++******************************************************+++++++++++++++,,,,,,,,,,,,----------...../////////00000001111122222223333334444445555666666777777888889999:::::;;;;;;<<<<<===>>>>>>????@@@@@AAAABBBBBCCCCCDDEEEEEFFFFFGGGGHHHHIIIIIJJJKKKKKLLLMMMMMNNNNOOOOOPPQQQQQRRRRSSTTTTTUUUUVVVVVWWWXXXYYYYYZZZZ[[[\\\\\]]]^^^^____````aaabbbbccccddddeeeffffgggffeeeedddddccccbbaaaa`````__^^^^]]]]]\\\\[[ZZZZZYYYYXXXXXWWWVVVUUUUUTTTTSSSSRRRRQQQQQPPOOOONNNNNMMMMMLLKKKKKJJJJIIIIIHHHGGGGGFFFFFEEEEEDDCCCCCBBBBBAAA@@@@@?????>>>>>===<<<<<;;;;;;;:::::999888887777777666666555544444433333332222222111110000000/////////......----------,,,,,,,,,,,,,++++++++++++++++++***************************************+++++++++++++++++++,,,,,,,,,,,,----------.......////////0000000011111222222333333334444445555666666777777888889999:::::;;;;;;<<<<<====>>>>>?????@@@@@AABBBBBCCCCCDDDEEEEEFFFFFGGGGGHHIIIIIJJJJKKKKKLLLMMMMMNNNNNOOOPPPQQQQQRRRRSSSTTTTUUUUUVVVVWWXXXXXYYYYZZZZZ[[[\\\]]]]]^^^^___`````aaabbbccccdddddeeefffggggfffeeeeddddccccbbbaaaa````____^^^]]]]\\\\\[[[ZZZYYYYYXXXXWWWVVVVVUUUTTTTTSSSRRRRRQQQQPPOOOOONNNNNMMMMLLLLKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEDDDCCCCCBBBBBAAA@@@@@?????>>>>>====<<<<<;;;;;;:::::99998888887777766666655555444444333333322222221111100000000////////.......-----------,,,,,,,,,,,,,,++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,-----------....../////////00000001111122222222333333444444555556666666777778888889999:::::;;;;;;<<<<<====>>>>>?????@@@@@AABBBBBCCCCCDDDDEEEEFFFFFGGGGGHHIIIIIJJJJJKKKKLLLLMMMNNNNNOOOOOPPPQQQQRRRRRSSTTTTTUUUUVVVVVWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^____```aaaabbbbccccdddeeeeffffgggggffeeeedddddccccbbaaaa`````___^^^]]]]]\\\\[[[ZZZZZYYYXXXXXWWWVVVVUUUUUTTTSSSSRRRRQQQQQPPOOOOONNNNMMMMMLLLKKKKKJJJJJIIIHHHHGGGGGFFFFEEEEEDDDDCCCCCBBBAAAA@@@@@?????>>>>>====<<<<<;;;;;;:::::999988888877777766666665554444444333333322222211111110000000/////////.......------------,,,,,,,,,,,,,,,,++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,-----------........////////000000001111112222223333333344444455556666667777778888888999:::::;;;;;;;<<<<<===>>>>>?????@@@@@AAAABBBBCCCCCDDDDEEEEEFFFGGGGGHHHHIIIIJJJJJKKKKKLLMMMMMNNNNOOOOOPPPQQQQQRRRSSSSTTTTUUUUUVVVVWWXXXXXYYYYZZZZZ[[\\\\]]]]]^^^^__`````aaaabbbcccdddddeeeefffggggggffeeeeeddddccccbbbbaaa````____^^^^]]]\\\\\[[[ZZZZYYYYYXXXWWWWVVVVUUUUTTTTTSSRRRRRQQQQPPPPOOONNNNNMMMMMLLLKKKKKJJJJIIIIIHHHGGGGFFFFFEEEEEDDDCCCCCBBBBBAAA@@@@@?????>>>>>====<<<<<;;;;;;:::::99998888887777777666666555544444443333332222222211111000000000//////////......--------------,,,,,,,,,,,,,,,,,,+++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,--------------......//////////0000000001111122222223333334444444455556666667777778888889999:::::;;;;;;<<<<<====>>>>>?????@@@@@AAAABBBBBCCCCCDDEEEEEFFFFFGGGGHHHHIIIIIJJJJKKKKKLLMMMMMNNNNNOOOOPPPPQQQRRRRRSSSTTTTTUUUUVVVWWWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^___````aaaabbbbcccddddeeeeefffgggggggfffeeedddddccccbbbaaa`````___^^^^]]]]]\\\[[[[ZZZZYYYYXXXXXWWVVVVVUUUUTTTTTSSRRRRQQQQQPPPOOOOONNNNNMMMLLLLKKKKJJJJJIIIIIHHGGGGGFFFFFEEEEEDDDCCCCCBBBBBAAAA@@@@@?????>>>>>===<<<<<<<;;;;;:::::99999888887777776666665555544444433333333222222211111000000000//////////........---------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------------.......//////////000000000111112222222233333334444445555566666667777778888899999:::::;;;;;<<<<<<====>>>>>?????@@@@@AAAABBBBBCCCCCDDEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKLLLLMMMMNNNNNOOOOOPPQQQQQRRRRSSSTTTTTUUUVVVVVWWWXXXXXYYYYZZZ[[[[\\\\]]]]]^^^^__`````aaaabbccccdddddeeeeffgggggggggfffeeeeedddccccbbbbaaaa```____^^^^]]]]\\\\\[[ZZZZYYYYYXXXXWWWVVVVUUUUUTTTTSSSSRRRQQQQQPPPOOOOONNNNMMMMMLLKKKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEEDDCCCCCBBBBBAAAA@@@@@?????>>>>>====<<<<<<;;;;;::::::9999888888777777666666655544444444333333322222222111110000000000//////////.........----------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----------------.........//////////000000000011111222222233333333444444455556666667777778888888999:::::::;;;;;<<<<<<====>>>>>?????@@@@@AAABBBBBCCCCCDDDEEEEEFFFFFGGGGGHHIIIIIJJJJJKKKKKLLLMMMMMNNNNOOOOOPPQQQQQRRRRSSSSTTTUUUUUVVVVWWWWXXXXYYYYYZZZ[[[\\\\\]]]]^^^____````aaaabbbccccddddeeeeeffgggghgggggfffeeeedddddcccbbbaaaa`````__^^^^^]]]]\\\\[[[ZZZZYYYYYXXXXWWVVVVVUUUUTTTTTSSSRRRRRQQQPPPPOOOONNNNNMMMMMLLKKKKKJJJJJIIIIHHHHGGGGGFFFFEEEEEDDDCCCCCBBBBBAAAA@@@@@?????>>>>>====<<<<<<;;;;;::::::99998888887777777666666555554444443333333322222222111111100000000////////////........--------------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------------------.........///////////00000000011111122222222233333334444444555556666667777778888889999::::::;;;;;<<<<<<<===>>>>>?????@@@@@AAAABBBBBCCCCCDDDDEEEEEFFFFGGGGGHHHIIIIJJJJJKKKKKLLLMMMMMNNNNNOOOPPPPQQQQRRRRRSSTTTTTUUUUVVVVVWWWXXXYYYYYZZZZ[[[[\\\\]]]^^^^^___`````aaaabbccccdddddeeeeffggggghhhgggfffeeeeeddddcccbbbbaaaa````___^^^^]]]]\\\\\[[ZZZZZYYYYXXXXXWWWVVVUUUUUTTTTSSSSRRRRQQQQQPPOOOOONNNNNMMMMLLLLKKKKKJJJIIIIIHHHHGGGGFFFFFEEEEEDDDDCCCCCBBBBBAAA@@@@@?????>>>>>====<<<<<<;;;;;:::::::9998888888777777666666655554444444433333332222222221111110000000000///////////..........---------------------------------------------------------------------..........///////////00000000001111111222222223333333344444445555666666667777778888889999::::::;;;;;<<<<<<====>>>>>?????@@@@@AAAABBBBBCCCCCDDDDEEEEEFFFFFGGGHHHHIIIIIJJJJKKKKKLLLLMMMNNNNNOOOOOPPPQQQQQRRRRSSSTTTTUUUUUVVVVWWXXXXXYYYYZZZZZ[[[\\\\\]]]^^^^____````aaabbbbccccddddeeeeeffgggghhhhgggggffeeeedddddccccbbaaaaa````__^^^^^]]]]\\\\[[[[ZZZYYYYYXXXXWWWVVVVVUUUUUTTTSSSRRRRRQQQQQPPOOOOONNNNMMMMMLLLLKKKKJJJJJIIIIIHHGGGGGFFFFFEEEEEDDDDCCCCCBBBBBAAAA@@@@@?????>>>>>===<<<<<<<;;;;;;:::::9999988888877777766666665555544444443333333322222222111111100000000000////////////............--------------------------------------------------------.........../////////////0000000000011111122222222233333334444444455555666666777777888888899999:::::;;;;;;<<<<<<====>>>>>?????@@@@@AAAABBBBBCCCCCDDDEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKKLLLMMMMMNNNNOOOOOPPPQQQQQRRRRRSSTTTTUUUUUVVVVVWWXXXXYYYYYZZZZ[[[[\\\]]]]^^^^^___```aaaaabbbccccdddddeeefffggggghhhhhggggffeeeeeddddccccbbbaaaa````____^^^]]]]]\\\\[[[ZZZZZYYYXXXXXWWWVVVVVUUUUTTTTTSSRRRRRQQQQPPPPOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHGGGGGFFFFFEEEEEDDDDCCCCCBBBBBAAAA@@@@@?????>>>>>>====<<<<<;;;;;;::::::999988888877777776666666555554444444433333332222222221111111000000000000/////////////...............---------------------------------------...............//////////////00000000000111111112222222233333333444444455555666666667777778888889999::::::;;;;;;;<<<<<===>>>>>>>?????@@@@@AAABBBBBCCCCCDDDDEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKKKLLMMMMMNNNNNOOOOPPPPQQQRRRRRSSSTTTTTUUUUVVVVVWWXXXXXYYYYZZZZZ[[\\\\]]]]]^^^^____```aaaabbbbccccdddeeeeefffgggghhhhhhgggggffeeeedddddccccbbaaaaa````___^^^^^]]]\\\\\[[[ZZZZYYYYYXXXWWWWVVVVUUUUUTTTTSSSRRRRQQQQQPPPOOOOONNNNNMMMMMLLKKKKKJJJJJIIIIHHHHGGGGGFFFFFEEEEEDDDCCCCCBBBBBAAAA@@@@@?????>>>>>>====<<<<<;;;;;;:::::::9998888888777777766666655555444444444333333332222222222111111000000000000/////////////////........................................................////////////////00000000000001111112222222222333333344444444455555666666777777778888889999::::::;;;;;;<<<<<====>>>>>>?????@@@@@AAAABBBBBCCCCCDDDDEEEEEFFFFFGGGGGHHHHIIIJJJJJKKKKKLLLMMMMMNNNNNOOOOOPPQQQQQRRRRSSSSTTTTUUUUUVVVWWWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^^__````aaaaabbbcccdddddeeeefffggggghhhhhhhggggffeeeeeddddccccbbbbaaa`````___^^^^]]]]]\\\[[[ZZZZZYYYYXXXXXWWVVVVVUUUUTTTTTSSRRRRRQQQQQPPPOOOOONNNNNMMMMLLLKKKKKJJJJIIIIIHHHHGGGGGFFFFFEEEEEDDCCCCCCCBBBBBAAA@@@@@?????>>>>>>>===<<<<<;;;;;;;::::::99999888888777777666666665555544444443333333332222222222111111110000000000000////////////////////.......................................////////////////////000000000000001111111222222222233333333344444444555556666666777777888888899999::::::;;;;;;<<<<<====>>>>>>?????@@@@@AAAABBBBBCCCCCCDDDEEEEEFFFFFGGGGGHHHIIIIIJJJJKKKKKLLLLMMMMNNNNNOOOOOPPQQQQQRRRRRSSSTTTTTUUUVVVVVWWWXXXXXYYYYZZZZZ[[\\\\]]]]]^^^^__`````aaaabbbbcccddddeeeeefffggghhhhhhhhhgggggfffeeedddddccccbbbaaaaa```___^^^^^]]]]\\\\\[[ZZZZZYYYYXXXXXWWVVVVVUUUUTTTTTSSSRRRRRQQQPPPPOOOOONNNNMMMMMLLLLKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEDDDCCCCCCBBBBBAAAA@@@@@?????>>>>>>====<<<<<<;;;;;;::::::99998888887777777766666665555544444444333333333322222222221111111000000000000000/////////////////////////////////////////////////////////////////////00000000000000011111111222222222233333333334444444555556666666677777778888889999::::::;;;;;;;<<<<<<====>>>>>>?????@@@@@AAAABBBBBCCCCCCDDEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKLLLLMMMMMNNNOOOOOPPPPQQQQRRRRRSSTTTTTUUUUVVVVVWWWXXXXXYYYZZZZZ[[[\\\\\]]]]^^^^^__````aaaaabbccccdddddeeeeffggggghhhhihhhhhggggfffeeeeedddcccccbbbaaaa`````__^^^^]]]]]\\\\[[[ZZZZYYYYYXXXXWWWWVVVUUUUUTTTTSSSSRRRRQQQQQPPPOOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEEDDDCCCCCCBBBBBAAAA@@@@@?????>>>>>>====<<<<<<;;;;;;:::::::9998888888877777776666666655555444444444333333332222222222221111111100000000000000000////////////////////////////////////////////////////////0000000000000000111111111222222222223333333334444444445555566666667777777788888889999::::::;;;;;;<<<<<<<===>>>>>>>?????@@@@@AAABBBBBCCCCCCCDDEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLMMMMMNNNNNOOOOPPPPQQQQQRRRRSSSTTTTUUUUUVVVVWWWWXXXYYYYYZZZZ[[[[\\\\]]]]]^^^___`````aaaabbcccccddddeeeeeffgggghhhhhiiihhhgggggfffeeeedddddcccbbbaaaaa````__^^^^^]]]]\\\\\[[ZZZZZYYYYXXXXXWWWVVVVVUUUTTTTTSSSRRRRRQQQQQPPOOOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHGGGGGFFFFFEEEEEEEDDCCCCCCBBBBBAAAA@@@@@??????>>>>>====<<<<<<;;;;;;;::::::9999988888877777777666666655555544444444433333333332222222222211111111100000000000000000000/////////////////////////////////////////00000000000000000000111111111222222222223333333333444444444555555666666667777777888888899999::::::;;;;;;<<<<<<====>>>>>??????@@@@@AAAABBBBBCCCCCCDDDEEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKKKLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSTTTTTUUUUVVVVVWWXXXXXYYYYZZZZZ[[[\\\\\]]]^^^^^___````aaaaabbccccdddddeeeeffggggghhhhiiiihhhhhgggfffeeeeeddddcccccbbaaaa`````__^^^^^]]]]\\\\\[[[ZZZYYYYYXXXXWWWWVVVVUUUUUTTTTTSSRRRRRQQQQQPPPOOOOONNNNNMMMLLLLKKKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEEEDDCCCCCCCBBBBBAAA@@@@@???????>>>>>=====<<<<<<;;;;;;::::::999988888888777777766666666555555444444444333333333322222222222211111111111000000000000000000000000000000000000000000000000000000000000000000000111111111112222222222222333333333344444444455555566666667777777788888889999::::::;;;;;;;<<<<<<=====>>>>>??????@@@@@AAAABBBBBCCCCCCDDDEEEEEEFFFFFGGGGGHHIIIIIJJJJJKKKKKLLLLMMMMNNNNNOOOOOPPQQQQQRRRRRSSSTTTTTUUUUUVVVVWWWXXXXYYYYYZZZZ[[\\\\\]]]]^^^^^___`````aaabbbcccccddddeeeeeffgggghhhhhiiiiihhhhgggggffeeeedddddccccbbaaaaa````____^^^]]]]]\\\\[[[ZZZZZYYYYYXXXWWWWVVVVUUUUUTTTTSSSRRRRRQQQQPPPPOOOOONNNNMMMMMLLLKKKKKJJJJJIIIIHHHHGGGGGFFFFFEEEEEDDDDCCCCCCBBBBBAAAA@@@@@??????>>>>>>====<<<<<<;;;;;;:::::::999998888888777777776666666555555444444444433333333332222222222222211111111111110000000000000000000000000000000000000000000000000000000011111111111122222222222222333333333344444444445555556666666677777778888888899999::::::;;;;;;<<<<<<<===>>>>>>>??????@@@@@AAAABBBBBCCCCCCDDDDEEEEEFFFFFGGGGGHHHIIIIJJJJJKKKKKLLLLMMMMMNNNNOOOOOPPPQQQQRRRRRSSSSTTTTUUUUUVVVWWWWXXXXYYYYYZZZZZ[[\\\\]]]]]^^^^____```aaaaabbbccccdddddeeefffggggghhhhiiiiiihhhhhggggffeeeeeddddcccccbbaaaa`````___^^^^^]]]\\\\\[[[ZZZZZYYYYXXXXXWWVVVVVUUUUTTTTTSSSSRRRQQQQQPPPPOOOONNNNNMMMMMLLLLKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEDDDDCCCCCCBBBBBAAAA@@@@@@?????>>>>>>====<<<<<<;;;;;;;:::::::9999988888877777777766666666555555444444444433333333333222222222222222111111111111111000000000000000000000000000000000000000001111111111111112222222222222223333333333334444444444555555666666677777777788888899999::::::::;;;;;;<<<<<<====>>>>>>?????@@@@@@@AAABBBBBCCCCCCCDDDEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKLLLLMMMMMNNNNNOOOPPPPQQQQQRRRRSSSSTTTTTUUUVVVVVWWWXXXXXYYYYZZZZZ[[\\\\\]]]]^^^^^__`````aaaabbbcccccdddeeeeefffgggghhhhhiiiiiiihhhhgggggffeeeedddddccccbbbbaaa`````___^^^^]]]]]\\\[[[[ZZZZYYYYYXXXXWWWVVVVUUUUUTTTTTSSSRRRRRQQQQQPPOOOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEEDDDDCCCCCCBBBBBAAAA@@@@@@?????>>>>>>>=====<<<<<<;;;;;;::::::99999888888887777777776666666555555554444444444333333333333222222222222222211111111111111111111111111111111111111111111111111111111111222222222222222233333333333334444444444555555566666666777777777888888899999::::::;;;;;;;<<<<<<=====>>>>>>?????@@@@@@AAAABBBBBCCCCCCDDDDEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSTTTTTUUUUUVVVVWWWWXXXXYYYYYZZZ[[[[\\\\]]]]]^^^^__`````aaaabbbbcccdddddeeeefffggggghhhiiiijiiiihhhhhggggffffeeeddddcccccbbbaaaaa```___^^^^^]]]]\\\\\[[ZZZZZYYYYYXXXXWWWWVVVUUUUUTTTTTSSSRRRRRQQQQQPPOOOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEDDDCCCCCCCBBBBBAAA@@@@@@@??????>>>>>>====<<<<<<;;;;;;::::::::999998888888777777777666666666555555444444444443333333333333322222222222222222222111111111111111111111111111111111111111112222222222222222222233333333333333444444444445555555666666667777777778888888899999:::::::;;;;;;<<<<<<<===>>>>>>>??????@@@@@@AAAABBBBBCCCCCCDDDDEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSTTTTTUUUUUVVVVWWWWXXXYYYYYZZZZZ[[[\\\\\]]]]^^^^^__````aaaaabbcccccddddeeeeffffggghhhhhiiiijjjiiihhhhgggggfffeeeeedddccccbbbbaaaa`````__^^^^^]]]]\\\\\[[ZZZZZYYYYXXXXXWWWVVVVVUUUUUTTTSSSSRRRRRQQQQPPPPOOOOONNNNNMMMLLLLKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEEDDDCCCCCCBBBBBAAAA@@@@@@??????>>>>>>====<<<<<<;;;;;;;;:::::::9999988888888777777777666666665555555544444444444333333333333333222222222222222222222222222222222222222222222222222222222222222222222223333333333333334444444444445555555666666666777777777888888899999::::::::;;;;;;;<<<<<<====>>>>>>???????@@@@@@AAAABBBBBCCCCCCDDEEEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKKKLLLLMMMMNNNNNOOOOOPPPPQQQRRRRRSSSSTTTTUUUUUVVVVVWWXXXXXYYYYZZZZZ[[[\\\\\]]]^^^^^___`````aaaabbbccccddddeeeeeffggggghhhhiiiijjjjiiiiihhhggggffffeeeedddddcccbbbaaaaa````___^^^^]]]]]\\\\[[[[ZZZYYYYYXXXXWWWWVVVVVUUUUTTTTTSSSRRRRQQQQQPPPPOOOONNNNNMMMMMLLLKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEEDDDCCCCCCBBBBBAAAAA@@@@@??????>>>>>>>=====<<<<<<;;;;;;;:::::::9999988888888777777777666666666655555544444444444443333333333333333322222222222222222222222222222222222222222222222222222222222333333333333333333444444444444555555666666666677777777788888888899999::::::;;;;;;;;<<<<<<=====>>>>>>??????@@@@@AAAAABBBBBCCCCCCCDDEEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLLLMMMMMNNNNNOOOOPPPQQQQQRRRRSSSSTTTTTUUUUVVVVVWWWXXXXYYYYYZZZZ[[[[\\\]]]]]^^^^____````aaaaabbccccdddddeeeefffgggghhhhiiiiijjjjjiiiihhhgggggfffeeeeeddddcccccbbaaaa`````__^^^^^]]]]\\\\\[[[ZZZZZYYYYYXXXWWWWVVVVUUUUUTTTTTSSRRRRRQQQQQPPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJIIIIIHHHGGGGGFFFFFEEEEEEEDDDCCCCCBBBBBBBAAA@@@@@@@??????>>>>>>====<<<<<<;;;;;;;;:::::::99999888888888777777777666666666655555554444444444444433333333333333333333322222222222222222222222222222222222222222333333333333333333333344444444444445555555566666666667777777778888888899999::::::::;;;;;;;<<<<<<<===>>>>>>>??????@@@@@@AAAABBBBBBCCCCCDDDDEEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLLLMMMMMNNNNNOOOOOPPQQQQQRRRRRSSSTTTTTUUUUUVVVWWWWXXXXYYYYYZZZZZ[[\\\\\]]]]^^^^^___`````aaabbbcccccddddeeeeeffggggghhhhiiiijjjjjjiiiiihhhhgggffffeeeedddddccccbbaaaaa`````___^^^]]]]]\\\\\[[[ZZZZZYYYYXXXXXWWVVVVVUUUUUTTTTTSSSRRRRRQQQQQPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEEDDDDCCCCCBBBBBBAAAA@@@@@@??????>>>>>>=====<<<<<<<;;;;;;;::::::::999998888888877777777776666666666555555555444444444444444333333333333333333333333333333333333333333333333333333333333333333333334444444444444445555555556666666666777777777788888888899999:::::::;;;;;;;;<<<<<<=====>>>>>>???????@@@@@@AAAABBBBBBCCCCCDDDDEEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKLLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSTTTTTUUUUUVVVVVWWWXXXXXYYYYZZZZZ[[\\\\\]]]]]^^^^__`````aaaaabbbccccdddddeeeffffgggghhhhiiiiijjkjjjjiiiihhhhhggggffeeeeeddddcccccbbaaaaa````____^^^^]]]]]\\\[[[[ZZZZYYYYYXXXXXWWVVVVVUUUUUTTTTSSSSRRRRRQQQQPPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEEDDDDCCCCCBBBBBBAAAA@@@@@@??????>>>>>>>=====<<<<<<<;;;;;;;;:::::::9999988888888877777777776666666666655555555544444444444444444333333333333333333333333333333333333333333333333333333333334444444444444444445555555566666666666677777777778888888899999::::::::;;;;;;;<<<<<<<<=====>>>>>>??????@@@@@@@AAABBBBBBBCCCCCDDDEEEEEEEFFFFFGGGGGHHHIIIIIJJJJJKKKKKLLLLMMMMMNNNNNOOOOOPPPPQQQQRRRRRSSSTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZ[[[[\\\\]]]]]^^^^___````aaaaabbbcccccdddeeeeefffgggghhhhhiiijjjjkkkjjiiiiihhhhgggggffeeeedddddccccbbbbaaa`````___^^^^^]]]]\\\\\[[ZZZZZYYYYYXXXXWWWWVVVVVUUUTTTTTSSSSRRRRQQQQQPPPPOOOOONNNNNMMMMMLLKKKKKKJJJJJIIIIIHHHHGGGGGFFFFFEEEEEEDDDDCCCCCCBBBBBAAAAA@@@@@@@??????>>>>>>=====<<<<<<;;;;;;;;:::::::::99999888888888877777777776666666666655555555554444444444444444444443333333333333333333333333333333333333333344444444444444444444445555555555666666666667777777777888888888899999:::::::::;;;;;;;<<<<<<=====>>>>>>>??????@@@@@@AAAAABBBBBCCCCCCDDDDEEEEEEFFFFFGGGGGHHHHIIIIIJJJJJKKKKKKLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRSSSSTTTTTUUUUVVVVVWWWWXXXYYYYYZZZZZ[[[\\\\\]]]]^^^^^__`````aaaabbbbcccdddddeeeefffggggghhhiiiiijjjkkkkkjjiiiihhhhhggggffeeeeeddddcccccbbbaaaaa```____^^^^]]]]]\\\\\[[ZZZZZYYYYXXXXXWWWWVVVVUUUUUTTTTTSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLKKKKKKKJJJJJIIIIIHHHGGGGGFFFFFFFEEEEEDDDCCCCCCCBBBBBBAAAA@@@@@@??????>>>>>>=====<<<<<<<<;;;;;;;:::::::::999998888888888777777777776666666666666555555555544444444444444444444444444444444444444444444444444444444444444444444444444555555555566666666666677777777777888888888899999:::::::::;;;;;;;;<<<<<<<=====>>>>>>???????@@@@@@AAAABBBBBBCCCCCCDDDDEEEEEFFFFFFGGGGGHHHHIIIIIJJJJJKKKKKKLLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSTTTTTUUUUUVVVVWWWXXXXXYYYYZZZZZ[[[\\\\\]]]]]^^^____````aaaaabbcccccddddeeeeefffggghhhhhiiiijjjkkkkkkjjiiiiihhhhgggggfffeeeeedddcccccbbbaaaa`````__^^^^^]]]]]\\\\[[[[ZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLKKKKKJJJJJJIIIIIHHHHGGGGGFFFFFFEEEEEDDDDCCCCCCBBBBBBAAAA@@@@@@????????>>>>>>=====<<<<<<<;;;;;;;;:::::::::9999998888888887777777777776666666666666655555555555544444444444444444444444444444444444444444444444444444444444555555555555566666666666667777777777777888888888999999:::::::::;;;;;;;<<<<<<<<=====>>>>>>???????@@@@@@@AAABBBBBBBCCCCCCDDDDEEEEEFFFFFFGGGGGHHHHIIIIIJJJJJJKKKKKLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZ[[[[\\\]]]]]^^^^^___`````aaaabbcccccddddeeeeeffggggghhhhiiiiijjjkkkkkkkjjjiiihhhhhggggffffeeeedddddcccbbbbaaaa`````__^^^^^]]]]\\\\\[[[ZZZZZYYYYYXXXXXWWVVVVVUUUUUTTTTSSSSRRRRRQQQQQPPOOOOONNNNNMMMMMMLLLKKKKKJJJJJJIIIIIHHHHGGGGGFFFFFFEEEEEDDDDCCCCCCBBBBBBAAAAA@@@@@@@??????>>>>>>>====<<<<<<<<<;;;;;;;:::::::::99999988888888887777777777777666666666666666555555555555555544444444444444444444444444444444444444444555555555555555556666666666666667777777777778888888888999999:::::::::;;;;;;;;<<<<<<<<====>>>>>>>>??????@@@@@@AAAAABBBBBBCCCCCCCDDDEEEEEFFFFFFFGGGGGHHHIIIIIJJJJJJJKKKKKLLMMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSSTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[\\\\\]]]]^^^^^___`````aaabbbbccccdddddeeeefffgggghhhhhiiiijjkkkkkkkkkjjjjiiiihhhgggggfffeeeeeddddcccccbbaaaaa````____^^^]]]]]\\\\\[[[ZZZZZYYYYYXXXXWWWVVVVVUUUUTTTTTSSSSRRRRRQQQQQPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJJIIIIIHHHHGGGGGFFFFFFEEEEEEEDDDCCCCCCCBBBBBBAAAA@@@@@@???????>>>>>>>=====<<<<<<<;;;;;;;;;:::::::::999999888888888887777777777777666666666666666666555555555555555555555555555555555555555555555555555555555556666666666666666666777777777777888888888888999999:::::::::;;;;;;;;<<<<<<<<=====>>>>>>????????@@@@@@AAAABBBBBBCCCCCCDDDDEEEEEEFFFFFFGGGGGHHHHIIIIIJJJJJJKKKKKLLLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSTTTTTUUUUVVVVVWWWWXXXXYYYYYZZZZZ[[\\\\\]]]]]^^^^____```aaaaabbbcccccddddeeeeeffggggghhhhiiiijjjkkkklkkkkkjjjiiiiihhhhgggggffeeeedddddccccbbbaaaa`````___^^^^^]]]]]\\\[[[[ZZZZZYYYYXXXXXWWWWVVVUUUUUTTTTTSSSSRRRRRQQQQQPPPOOOOONNNNNMMMMMLLLKKKKKJJJJJJJIIIIIHHHGGGGGGGFFFFFEEEEEEDDDDCCCCCCBBBBBBAAAA@@@@@@@???????>>>>>>>=====<<<<<<<<;;;;;;;;::::::::::99999998888888888877777777777777666666666666666666666655555555555555555555555555555555555555555666666666666666666666667777777777777788888888888999999::::::::::;;;;;;;;;<<<<<<<=====>>>>>>>>??????@@@@@@@@AAABBBBBBBCCCCCCDDDDEEEEEEFFFFFGGGGGGHHHHIIIIIJJJJJJKKKKKLLLLMMMMMNNNNNOOOOOPPQQQQQRRRRRSSSSTTTTTUUUUUVVVVWWWWXXXXXYYYZZZZZ[[[[\\\\]]]]]^^^^^__`````aaaabbbbccccdddddeeefffggggghhhhiiiiijjkkkkklllkkkjjjjiiiihhhhhggggffeeeeedddddccccbbaaaaa`````___^^^^^]]]]\\\\\[[[ZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJJIIIIIHHHHGGGGGGFFFFFEEEEEEDDDDCCCCCCBBBBBBAAAAA@@@@@@@???????>>>>>>>>=====<<<<<<<;;;;;;;;;::::::::::999999988888888888877777777777777776666666666666666666666666666666666666666666666666666666666666666666666666677777777777777778888888888899999999::::::::::;;;;;;;;<<<<<<<<=====>>>>>>>????????@@@@@@AAAAABBBBBBCCCCCCCDDDEEEEEEEFFFFFGGGGGGHHHHIIIIIJJJJJJKKKKKLLLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZ[[[[\\\\\]]]]^^^^^__`````aaaaabbbcccdddddeeeeefffgggghhhhhiiijjjjkkkkllllkkkkkjjiiiiihhhhgggggffeeeeeddddcccccbbbaaaaa```____^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLLKKKKKJJJJJJIIIIIHHHHGGGGGGFFFFFEEEEEEDDDDDCCCCCCCBBBBBBAAAA@@@@@@@??????>>>>>>>>======<<<<<<<<;;;;;;;;;;::::::::::9999999888888888888877777777777777777666666666666666666666666666666666666666666666666666666666666677777777777777777788888888888899999999::::::::::;;;;;;;;;;<<<<<<<=======>>>>>>>??????@@@@@@@@AAAABBBBBBCCCCCCDDDDDEEEEEEFFFFFGGGGGGGHHHIIIIIJJJJJJJKKKKKLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^____````aaaaabbcccccddddeeeeefffggggghhhiiiiijjjkkkkklllllkkkkkjjiiiihhhhhggggffffeeedddddccccbbbbaaaa`````__^^^^^]]]]]\\\\\[[[ZZZZZYYYYYXXXWWWWVVVVVUUUUUTTTTTSSSRRRRRQQQQQPPPOOOOONNNNNMMMMMLLLLKKKKKKJJJJJIIIIIHHHHGGGGGGFFFFFFFEEEEEEDDDDCCCCCCBBBBBBAAAAA@@@@@@????????>>>>>>>=======<<<<<<<;;;;;;;;;;::::::::::99999999988888888888888777777777777777777777666666666666666666666666666666666666666666667777777777777777777778888888888888899999999::::::::::;;;;;;;;;;<<<<<<<<======>>>>>>>>???????@@@@@@AAAAABBBBBBBCCCCCCDDDDEEEEEEFFFFFFGGGGGGHHHHIIIIIJJJJJKKKKKKLLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSTTTTTUUUUUVVVVVWWWWXXXXYYYYYZZZZZ[[\\\\\]]]]]^^^^^___`````aaaabbbccccdddddeeeeffffggghhhhhiiiijjjkkkkklllllllkkkkjjiiiiihhhhgggggfffeeeeedddcccccbbbaaaaa`````__^^^^^]]]]]\\\\[[[[ZZZZZYYYYXXXXXWWWVVVVVUUUUTTTTTSSSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLKKKKKKKJJJJJIIIIIHHHHHGGGGGFFFFFFEEEEEEDDDDCCCCCCBBBBBBBBAAA@@@@@@@@???????>>>>>>>>======<<<<<<<<<;;;;;;;;;:::::::::::9999999998888888888888888777777777777777777777777777777777777777777777777777777777777777777777777778888888888888888999999999:::::::::::;;;;;;;;;<<<<<<<<=======>>>>>>>????????@@@@@@@AAAABBBBBBBCCCCCCCDDDEEEEEEEFFFFFFGGGGGHHHHHIIIIIJJJJJKKKKKKLLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSTTTTTUUUUVVVVVWWWWXXXXXYYYYZZZZZ[[[\\\\]]]]]^^^^^___`````aaaaabbcccccddddeeeeeffggggghhhhiiiiijjjkkklllllllllkkkkkjjjiiiiihhhgggggfffeeeeeddddcccccbbaaaaa````____^^^^^]]]\\\\\[[[[ZZZZYYYYYXXXXXWWVVVVVUUUUUTTTTTSSSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLLKKKKKKJJJJJIIIIIIHHHHGGGGGFFFFFFEEEEEEDDDDDCCCCCCCBBBBBBAAAAA@@@@@@@????????>>>>>>>=======<<<<<<<<;;;;;;;;;;::::::::::::99999999998888888888888888877777777777777777777777777777777777777777777777777777777777778888888888888888889999999999:::::::::::;;;;;;;;;;<<<<<<<<<======>>>>>>>>???????@@@@@@@@AAAAABBBBBBCCCCCCDDDDDEEEEEEFFFFFFFGGGGGHHHIIIIIIIJJJJJKKKKKKLLLLMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSSTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZ[[[[\\\\\]]]]^^^^^____```aaaaabbbcccccddddeeeeeffggggghhhhiiiiijjkkkkkllllmlllllkkkkjjjjiiiihhhhhgggffffeeeedddddccccbbbaaaa`````____^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMLLLLKKKKKKJJJJJIIIIIIHHHHGGGGGGFFFFFFFEEEEEEDDDDCCCCCCBBBBBBBAAAA@@@@@@@@????????>>>>>>>>======<<<<<<<<<;;;;;;;;;;;:::::::::::::9999999999888888888888888888888777777777777777777777777777777777777777777778888888888888888888889999999999::::::::::::;;;;;;;;;;;;<<<<<<<<=======>>>>>>>?????????@@@@@@@AAAABBBBBBBBCCCCCCDDDDEEEEEEFFFFFFGGGGGGHHHHIIIIIIJJJJJKKKKKKKLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSSTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^___`````aaaabbbbccccdddddeeeffffgggghhhhhiiiijjjkkkklllllmmmlllkkkkkjjjiiiiihhhhgggggffeeeeeddddcccccbbbbaaa`````___^^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSSSRRRRRQQQQQPPPOOOOONNNNNMMMMMLLLLKKKKKKJJJJJIIIIIIIHHHGGGGGGGFFFFFFEEEEEEDDDDCCCCCCCBBBBBBBAAAAA@@@@@@@????????>>>>>>>>=======<<<<<<<<<<;;;;;;;;;;;::::::::::::999999999999888888888888888888888888888888888888888888888888888888888888888888888888888899999999999:::::::::::::;;;;;;;;;;;<<<<<<<<<<======>>>>>>>>>???????@@@@@@@@AAAAABBBBBBCCCCCCCCDDDEEEEEEEFFFFFFGGGGGGHHHHIIIIIIJJJJJKKKKKKLLLLMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSSTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^^__`````aaaabbbbcccccdddeeeeefffggggghhhhiiiiijjkkkkkllllmmmmmllllkkkkkjjiiiihhhhhgggggffeeeeeddddcccccbbbaaaaa`````__^^^^^]]]]]\\\\[[[[ZZZZZYYYXXXXXWWWWVVVVVUUUUUTTTTTSSSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMMLLKKKKKKKJJJJJJIIIIIHHHHGGGGGGFFFFFFEEEEEEDDDDDCCCCCCCBBBBBBBAAAAA@@@@@@@@???????>>>>>>>>>======<<<<<<<<<<;;;;;;;;;;;;;:::::::::::::99999999999999888888888888888888888888888888888888888888888888888888888888899999999999999::::::::::::::;;;;;;;;;;;;<<<<<<<<<<=======>>>>>>>>????????@@@@@@@AAAAABBBBBBBBCCCCCCDDDDDEEEEEEFFFFFFFGGGGGGHHHHIIIIIJJJJJJKKKKKKLLLMMMMMMNNNNNOOOOOPPPPQQQQQRRRRRSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYZZZZZ[[[[\\\]]]]]^^^^^___`````aaaaabbcccccddddeeeeefffggggghhhhhiiijjjkkkkkllllmmmmmmlllllkkkkjjjiiiihhhhhggggffffeeedddddccccbbbbaaaaa````___^^^^^]]]]\\\\\[[[[ZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSSSRRRRRQQQQQPPPPOOOOONNNNNMMMMMMLLLLKKKKKJJJJJJIIIIIHHHHHGGGGGGFFFFFFFEEEEEEDDDDCCCCCCCBBBBBBBBAAAAA@@@@@@@????????>>>>>>>>>>======<<<<<<<<<<;;;;;;;;;;;;:::::::::::::::::9999999999999999888888888888888888888888888888888888888888889999999999999999::::::::::::::::;;;;;;;;;;;;;<<<<<<<<<<======>>>>>>>>>>???????@@@@@@@@AAAAABBBBBBBCCCCCCCCDDDDEEEEEEFFFFFFGGGGGGHHHHHIIIIIJJJJJJJKKKKKLLLMMMMMMMNNNNNOOOOOPPPQQQQQRRRRRSSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZ[[[\\\\\]]]]^^^^^____````aaaaabbbccccdddddeeeeffffggghhhhhiiiijjjjkkkklllllmmmmmmmllllkkkkkjjiiiiihhhhgggggfffeeeeedddddcccbbbbaaaa`````____^^^]]]]]\\\\\[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTSSRRRRRRQQQQQPPPPOOOOONNNNNMMMMMMLLLLKKKKKJJJJJJIIIIIIIHHHGGGGGGGFFFFFFEEEEEEDDDDDCCCCCCBBBBBBBBAAAAA@@@@@@@@@????????>>>>>>>>>======<<<<<<<<<<<<;;;;;;;;;;;;;:::::::::::::::::::9999999999999999999999999999999999999999999999999999999999999:::::::::::::::::::;;;;;;;;;;;;;;<<<<<<<<<<<======>>>>>>>>>?????????@@@@@@@@@AAAAABBBBBBBCCCCCCDDDDDEEEEEEEFFFFFFGGGGGGHHHHIIIIIIJJJJJJKKKKKLLLLMMMMMMNNNNNOOOOOPPPPQQQQQRRRRRRSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[\\\\\]]]]]^^^^____`````aaabbbbccccdddddeeeeeffggggghhhhiiiiijjjkkkkklllmmmmmmmmmlllllkkkkjjjjiiihhhhhgggggfffeeeeeddddcccccbbaaaaa`````___^^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTSSRRRRRRRQQQQQPPPOOOOONNNNNMMMMMMMLLLKKKKKJJJJJJJIIIIIIHHHHGGGGGGFFFFFFEEEEEEEEDDDCCCCCCCCBBBBBBBAAAAA@@@@@@@@@?????????>>>>>>>>>=======<<<<<<<<<<<;;;;;;;;;;;;;;;:::::::::::::::::::::::99999999999999999999999999999999999999999999::::::::::::::::::::::;;;;;;;;;;;;;;;<<<<<<<<<<<========>>>>>>>>>????????@@@@@@@@@AAAAABBBBBBBBCCCCCCCDDDDEEEEEEEFFFFFFFGGGGGGHHHHIIIIIIJJJJJJKKKKKLLLLMMMMMMNNNNNOOOOOPPPPQQQQQRRRRRRSSSTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^^__`````aaaaabbbcccccddddeeeeeffggggghhhhhiiiijjjjkkklllllmmmmnmmmmmllllkkkkkjjjiiiiihhhhhgggffffeeeedddddcccccbbaaaaa`````___^^^^^]]]]]\\\\[[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTTSSSRRRRRRQQQQQPPPPOOOOONNNNNMMMMMMLLLLKKKKKKJJJJJIIIIIIHHHHHGGGGGGFFFFFFFEEEEEEDDDDDCCCCCCCBBBBBBBBAAAAA@@@@@@@@@????????>>>>>>>>>>========<<<<<<<<<<<<;;;;;;;;;;;;;;;;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;<<<<<<<<<<<<<=======>>>>>>>>>>?????????@@@@@@@@@AAAAABBBBBBBCCCCCCCCDDDDDEEEEEEFFFFFFGGGGGGHHHHHIIIIIIIJJJJJKKKKKKLLLLMMMMMMNNNNNOOOOOPPPPQQQQQRRRRRRSSTTTTTTTUUUUUVVVVVWWXXXXXYYYYYZZZZZ[[[[\\\\]]]]]^^^^^__`````aaaaabbbcccccdddddeeeffffgggghhhhhiiiiijjkkkkkllllmmmmmnnnmmmmmlllkkkkkjjjiiiiihhhhgggggffeeeeedddddccccbbbbaaaaa```____^^^^^]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWVVVVVUUUUUTTTTTTSSSRRRRRRQQQQQPPPPOOOOONNNNNNMMMMMLLLLKKKKKKJJJJJJIIIIIIIHHHGGGGGGGFFFFFFEEEEEEEDDDDDCCCCCCCBBBBBBBBAAAAA@@@@@@@@@?????????>>>>>>>>>>>========<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<=======>>>>>>>>>>>>????????@@@@@@@@@AAAAABBBBBBBBBCCCCCCDDDDDEEEEEEEEFFFFFFGGGGGGHHHHIIIIIIJJJJJJKKKKKKKLLLMMMMMNNNNNNNOOOOOPPPQQQQQRRRRRRRSSTTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[[[\\\\\]]]^^^^^____````aaaaabbbbcccdddddeeeeefffggggghhhhiiiiijjkkkkkllllmmmmmnnnnnmmmmlllllkkkjjjjiiiihhhhhgggggffeeeeeddddcccccbbbbaaaa`````___^^^^]]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWVVVVVUUUUUTTTTTTTSSRRRRRRQQQQQPPPPOOOOONNNNNNMMMMMLLLLKKKKKKJJJJJJJIIIIIIHHHHGGGGGGFFFFFFFEEEEEEEDDDDDCCCCCCCBBBBBBBBBAAAAA@@@@@@@@@??????????>>>>>>>>>>========<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;;;;;;::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<=========>>>>>>>>>>??????????@@@@@@@@@AAAAABBBBBBBBCCCCCCCCDDDDDEEEEEEFFFFFFFFGGGGGGHHHHIIIIIIJJJJJJKKKKKKLLLLMMMMMNNNNNNOOOOOPPPPQQQQQRRRRRRSSSTTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^____`````aaaabbbcccccddddeeeeefffggggghhhhhiiijjjjkkkklllllmmmmnnnnnnmmmmmllllkkkkkjjiiiiihhhhhggggffffeeedddddcccccbbbaaaaa`````__^^^^^]]]]]\\\\\[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTSSSRRRRRRRQQQQQPPPOOOOONNNNNNNMMMMMLLLLLKKKKKJJJJJJIIIIIIHHHHHGGGGGGFFFFFFFEEEEEEEDDDDDCCCCCCCCBBBBBBBAAAAAA@@@@@@@@@??????????>>>>>>>>>>>=========<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<=========>>>>>>>>>>>??????????@@@@@@@@@AAAAAABBBBBBBBCCCCCCCDDDDDEEEEEEEEFFFFFFGGGGGGHHHHHIIIIIIIJJJJJJKKKKKLLLLLMMMMMNNNNNNOOOOOPPPPQQQQQRRRRRRSSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[\\\\\]]]]]^^^^^___`````aaaaabbcccccdddddeeeeffffggghhhhhiiiiijjjkkkkkllllmmmmmnnooonnmmmmlllllkkkkkjjiiiiihhhhgggggfffeeeeedddddcccccbbaaaaa`````___^^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTSSSSRRRRRRQQQQQPPPPOOOOONNNNNNMMMMMMLLLLKKKKKKJJJJJJIIIIIIIHHHGGGGGGGFFFFFFFEEEEEEEEDDDDDCCCCCCCBBBBBBBBBAAAAA@@@@@@@@@@??????????>>>>>>>>>>>>=========<<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<=========>>>>>>>>>>>>>??????????@@@@@@@@@@AAAAABBBBBBBBCCCCCCCCDDDDDEEEEEEEFFFFFFFFGGGGGGHHHHIIIIIIJJJJJJKKKKKKKLLLMMMMMMMNNNNNNOOOOOPPPPQQQQQRRRRRRSSSSTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^^__`````aaaaabbbcccccdddddeeeeeffggggghhhhiiiiijjjkkkkklllllmmmnnnoooonnnmmmmlllllkkkkjjjjiiihhhhhgggggfffeeeeedddddccccbbbaaaaa````____^^^^^]]]]]\\\\\[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTSSSSRRRRRRQQQQQPPPPOOOOOONNNNNMMMMMMLLLLKKKKKKJJJJJJJIIIIIIHHHHGGGGGGGFFFFFFFFEEEEEEDDDDDCCCCCCCCCBBBBBBBBAAAAA@@@@@@@@@@????????????>>>>>>>>>>>>==========<<<<<<<<<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<==========>>>>>>>>>>>>>???????????@@@@@@@@@@AAAAABBBBBBBBBCCCCCCCCCDDDDDEEEEEEFFFFFFFGGGGGGGGHHHHIIIIIIJJJJJJKKKKKKLLLLMMMMMMNNNNNOOOOOOOPPPQQQQQRRRRRRRSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^^___````aaaaabbbbccccdddddeeeeeffggggghhhhhiiiijjjjkkklllllmmmmnnnnooooonnmmmmmllllkkkkkjjjiiiiihhhhhgggffffeeeeeddddcccccbbbbaaa`````____^^^^^]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTSSSSRRRRRRQQQQQPPPPOOOOOONNNNNMMMMMMMLLLKKKKKKKJJJJJJIIIIIIHHHHHGGGGGGFFFFFFFFEEEEEEEDDDDDCCCCCCCCCBBBBBBBBBAAAAAA@@@@@@@@@@???????????>>>>>>>>>>>>>>===========<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<===========>>>>>>>>>>>>>>???????????@@@@@@@@@@AAAAAAABBBBBBBBCCCCCCCCCDDDDDEEEEEEEEFFFFFFFGGGGGGHHHHHIIIIIIIJJJJJJKKKKKKLLLLMMMMMMNNNNNOOOOOOPPPPQQQQQRRRRRRSSSSTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[[\\\\\]]]^^^^^____`````aaaabbbbcccccdddeeeeeffffgggghhhhhiiiiijjkkkkkllllmmmmmnnnoooooonnnnmmmlllllkkkkkjjjiiiiihhhhgggggfffeeeedddddcccccbbbaaaaa`````___^^^^]]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSRRRRRRRQQQQQPPPOOOOOOONNNNNNMMMMMLLLLLKKKKKKJJJJJJIIIIIIIHHHGGGGGGGGFFFFFFFEEEEEEEEDDDDDCCCCCCCCCBBBBBBBBAAAAAAA@@@@@@@@@@@???????????>>>>>>>>>>>>>>>==============<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=============>>>>>>>>>>>>>>>????????????@@@@@@@@@@@AAAAAABBBBBBBBBCCCCCCCCCDDDDDEEEEEEEFFFFFFFFGGGGGGGHHHHIIIIIIJJJJJJKKKKKKKLLLLLMMMMMNNNNNNOOOOOOPPPPQQQQQRRRRRRSSSTTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^____`````aaaaabbcccccdddddeeeeffffggggghhhhiiiiijjkkkkklllllmmmmnnnnooooooonnnmmmmmlllllkkkjjjjiiiihhhhhgggggffeeeeedddddcccccbbbaaaaa`````__^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSSRRRRRRQQQQQPPPPOOOOOONNNNNNMMMMMMLLLLKKKKKKJJJJJJJIIIIIIHHHHHGGGGGGGFFFFFFFFEEEEEEEDDDDDCCCCCCCCCBBBBBBBBBAAAAAAA@@@@@@@@@@??????????????>>>>>>>>>>>>>>>>=================<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<================>>>>>>>>>>>>>>>>??????????????@@@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCCDDDDDEEEEEEEEFFFFFFFGGGGGGGGHHHHHIIIIIIJJJJJJKKKKKKLLLLMMMMMMNNNNNNNOOOOOOPPPPQQQQQRRRRRRSSTTTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^___`````aaaaabbcccccdddddeeeeefffggggghhhhhiiijjjjkkkklllllmmmmmnnoooopooooonnnmmmmmllllkkkkkjjiiiiihhhhhgggggfffeeeeedddddcccbbbbaaaaa`````___^^^^^]]]]]\\\\\[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSSSRRRRRQQQQQQPPPPOOOOONNNNNNMMMMMMMLLLKKKKKKKJJJJJJIIIIIIIHHHHHGGGGGGGFFFFFFFEEEEEEEEEDDDDDCCCCCCCCCBBBBBBBBBBAAAAAA@@@@@@@@@@@@??????????????>>>>>>>>>>>>>>>>>>>================================================================>>>>>>>>>>>>>>>>>>??????????????@@@@@@@@@@@@@AAAAAABBBBBBBBBBCCCCCCCCCDDDDDEEEEEEEEFFFFFFFFGGGGGGHHHHHIIIIIIIIJJJJJJKKKKKKLLLLMMMMMMNNNNNNOOOOOPPPPQQQQQQRRRRRSSSSTTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^__`````aaaaabbbbccccdddddeeeeeffggggghhhhhiiiiijjjkkkkkllllmmmmmnnooooopppooonnnnmmmmlllllkkkkkjjiiiiihhhhhggggffffeeeeeddddcccccbbbaaaaa````____^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWWVVVVVUUUUUTTTTTTTSSSRRRRRQQQQQQQPPPOOOOONNNNNNNMMMMMMLLLLLKKKKKKJJJJJJIIIIIIIHHHHHGGGGGGGFFFFFFFFEEEEEEEEDDDDDCCCCCCCCCBBBBBBBBBBAAAAAAAA@@@@@@@@@@@@???????????????>>>>>>>>>>>>>>>>>>>>>>>==============================================>>>>>>>>>>>>>>>>>>>>>>???????????????@@@@@@@@@@@@@AAAAAAABBBBBBBBBBCCCCCCCCCDDDDDEEEEEEEEEFFFFFFFGGGGGGGGHHHHHIIIIIIJJJJJJKKKKKKKLLLLLMMMMMMNNNNNNOOOOOPPPPQQQQQQRRRRRSSSSTTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^___````aaaaabbbbcccccddddeeeeefffgggghhhhhiiiiijjjkkkkklllllmmmnnnnooooppppooooonnmmmmmlllllkkkkjjjjiiiiihhhgggggffffeeeedddddcccccbbaaaaa`````____^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSSSRRRRRQQQQQQPPPPOOOOOONNNNNNMMMMMMLLLLKKKKKKJJJJJJJIIIIIIIHHHHHGGGGGGGGFFFFFFFEEEEEEEEEDDDDDCCCCCCCCCCBBBBBBBBBBAAAAAAA@@@@@@@@@@@@@?????????????????>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>??????????????????@@@@@@@@@@@@AAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDEEEEEEEEFFFFFFFFGGGGGGGHHHHHIIIIIIIIJJJJJJKKKKKKLLLLMMMMMMNNNNNNNOOOOOOPPPPQQQQQQRRRRRSSSSTTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZ[[[\\\\\]]]]]^^^^^____`````aaaaabbbcccccdddddeeeffffggggghhhhiiiiijjjjkkklllllmmmmmnnnooooopppppooooonnmmmmmllllkkkkkjjjjiiiihhhhhgggggffeeeeedddddcccccbbbaaaaa`````___^^^^^]]]]]\\\\\[[[ZZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSSSRRRRRQQQQQQPPPPOOOOOONNNNNNMMMMMMMLLLKKKKKKKKJJJJJJIIIIIIIIHHHHHGGGGGGGFFFFFFFFEEEEEEEEDDDDDCCCCCCCCCCBBBBBBBBBBBBAAAAAAA@@@@@@@@@@@@@@????????????????????>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????????????@@@@@@@@@@@@@AAAAAAAABBBBBBBBBBBCCCCCCCCCCDDDDDEEEEEEEEEFFFFFFFGGGGGGGGHHHHHIIIIIIIJJJJJJJKKKKKKKLLLLMMMMMMNNNNNNOOOOOOOPPPQQQQQQQRRRRRSSSTTTTTTTUUUUUVVVVVWWWXXXXXYYYYYZZZZZZZ[[\\\\\]]]]]^^^^^____`````aaaaabbcccccdddddeeeeefffggggghhhhhiiiijjjkkkkkllllmmmmmnnnooooopppppppoooonnnnmmmlllllkkkkkjjjiiiiihhhhhgggggffeeeeedddddcccccbbbaaaaa`````____^^^^^]]]]]\\\\\[[ZZZZZZYYYYYXXXXXWWWWVVVVVUUUUUTTTTTTSSSSRRRRRRQQQQQPPPPOOOOOONNNNNNNMMMMMMLLLLLKKKKKKJJJJJJJJIIIIIIHHHHHGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDCCCCCCCCCCBBBBBBBBBBBAAAAAAAA@@@@@@@@@@@@@@@@???????????????????????>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>??????????????????????@@@@@@@@@@@@@@@@@AAAAAAABBBBBBBBBBBCCCCCCCCCCDDDDDDDEEEEEEEEFFFFFFFFFGGGGGGGGHHHHHIIIIIIJJJJJJJKKKKKKKLLLLLMMMMMMNNNNNNOOOOOOPPPPQQQQQRRRRRRSSSSTTTTTTUUUUUVVVVVWWWWXXXXXYYYYYZZZZZZ[[[\\\\\]]]]]^^^^^____`````aaaaabbcccccdddddeeeeefffggggghhhhhiiiiijjkkkkklllllmmmmnnnnooopppppppppooooonnnnmmmmlllllkkkkkjjiiiiihhhhhggggffffeeeeedddcccccbbbbaaaaa`````___^^^^^]]]]]\\\\\\[[ZZZZZYYYYYYYXXXXXWWWVVVVVUUUUUUUTTTTTSSSRRRRRRRQQQQQPPPPPOOOOOONNNNNNMMMMMMLLLLKKKKKKKKJJJJJJIIIIIIIHHHHHGGGGGGGGFFFFFFFFFEEEEEEEEDDDDDDDCCCCCCCCCCBBBBBBBBBBBBAAAAAAAAA@@@@@@@@@@@@@@@@?????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@AAAAAAAABBBBBBBBBBBBBCCCCCCCCCCDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGHHHHHIIIIIIIIJJJJJJKKKKKKKLLLLMMMMMMNNNNNNNOOOOOOPPPPPQQQQQRRRRRRSSSSTTTTTUUUUUUVVVVVWWWWXXXXXYYYYYYZZZZZ[[[\\\\\\]]]]]^^^^^__`````aaaaabbbbcccccddddeeeeeffffggghhhhhiiiiijjjkkkkklllllmmmmnnnoooooppppqqqpppooooonnnmmmmmlllllkkkkjjjiiiiihhhhgggggffffeeeedddddcccccbbbaaaaa`````___^^^^^]]]]]\\\\\\[[[ZZZZZYYYYYYXXXXXWWWWVVVVVUUUUUUTTTTTSSSSRRRRRRQQQQQQPPPPOOOOOONNNNNNMMMMMMMLLLLLKKKKKKJJJJJJJIIIIIIIIHHHHHGGGGGGGFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCCCCCCBBBBBBBBBBBBBAAAAAAAAAA@@@@@@@@@@@@@@@@@@@??????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@AAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFFGGGGGGGGHHHHHIIIIIIIJJJJJJJJKKKKKKLLLLLMMMMMMNNNNNNOOOOOOOPPPQQQQQQQRRRRRRSSSSTTTTTUUUUUUVVVVVWWWWXXXXXYYYYYYZZZZZ[[\\\\\\\]]]]]^^^^^__`````aaaaabbbbcccccdddddeeeefffggggghhhhiiiiijjjjkkkklllllmmmmmnnoooooppppqqqqpppppooonnnnmmmmmllllkkkkkjjjjiiihhhhhgggggfffeeeeedddddcccccbbbbaaaaa`````__^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYYXXXXXWWWWVVVVVUUUUUUTTTTTSSSSRRRRRRQQQQQQPPPPOOOOOONNNNNNNMMMMMMMLLLLKKKKKKKJJJJJJJIIIIIIIHHHHHHGGGGGGGGFFFFFFFFFEEEEEEEEEEDDDDDDCCCCCCCCCCCBBBBBBBBBBBBBBAAAAAAAAAA@@@@@@@@@@@@@@@@@@@@@@@@??????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAABBBBBBBBBBBBBCCCCCCCCCCCCDDDDDDEEEEEEEEEEFFFFFFFFFGGGGGGGHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLMMMMMMMMNNNNNNOOOOOOPPPPQQQQQQRRRRRRRSSSTTTTTUUUUUUUVVVVVWWWXXXXXYYYYYYYZZZZZ[[[\\\\\]]]]]^^^^^___`````aaaaabbbbcccccdddddeeeeeffggggghhhhhiiiijjjjkkkkklllmmmmmnnnnoooopppppqqqqqpppppoooonnnmmmmlllllkkkkkjjjiiiiihhhhhgggggffeeeeedddddcccccbbbaaaaa`````___^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYYXXXXXWWWWVVVVVUUUUUUTTTTTTTSSSRRRRRQQQQQQQPPPPPOOOOOONNNNNNMMMMMMLLLLLKKKKKKKJJJJJJJIIIIIIIIHHHHHHGGGGGGGFFFFFFFFFEEEEEEEEEEDDDDDDDDCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAABBBBBBBBBBBBBBBCCCCCCCCCCCDDDDDDDEEEEEEEEEEFFFFFFFFFGGGGGGGGHHHHHHIIIIIIIJJJJJJJJKKKKKKLLLLLMMMMMMNNNNNNNOOOOOOPPPPPQQQQQQRRRRRSSSSTTTTTTUUUUUUVVVVVWWWWXXXXXYYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^____`````aaaaabbcccccdddddeeeeefffggggghhhhhiiiiijjkkkkklllllmmmmnnnnoooopppppqqqqqqqppppooooonnmmmmmlllllkkkkkjjjiiiiihhhhhggggfffeeeeedddddcccccbbbaaaaa`````____^^^^^]]]]]\\\\\[[[ZZZZZYYYYYYYXXXXXWWWVVVVVVVUUUUUTTTTTTSSSSRRRRRRQQQQQQPPPPOOOOOONNNNNNMMMMMMMMLLLLKKKKKKKJJJJJJJJIIIIIIIHHHHHGGGGGGGGGFFFFFFFFFFEEEEEEEEEEDDDDDDDCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAABBBBBBBBBBBBBBBCCCCCCCCCCCCDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGHHHHHIIIIIIIIJJJJJJJKKKKKKKKLLLLMMMMMMMNNNNNNOOOOOOOPPPQQQQQQQRRRRRRSSSSTTTTTTUUUUUVVVVVVWWWWXXXXXYYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^____`````aaaaabbcccccdddddeeeeeffffgggghhhhhiiiiijjkkkkklllllmmmmmnnnooooopppqqqqrrrqqpppppooooonnnmmmmmlllllkkkjjjjiiiiihhhhgggggffffeeeeedddddcccccbbaaaaa`````____^^^^^]]]]]\\\\\[[[[ZZZZZYYYYYYXXXXXWWWWVVVVVVUUUUUTTTTTTSSSSRRRRRRQQQQQQPPPPOOOOOONNNNNNNNMMMMMMLLLLLKKKKKKKKJJJJJJJIIIIIIIIHHHHHGGGGGGGGGGFFFFFFFFEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBCCCCCCCCCCCCDDDDDDDDDEEEEEEEEEEFFFFFFFFFGGGGGGGGGGHHHHHIIIIIIIJJJJJJJJKKKKKKKLLLLLMMMMMMMNNNNNNNOOOOOOPPPPQQQQQQRRRRRRRSSSTTTTTTTUUUUUVVVVVVWWWWXXXXXYYYYYYZZZZZ[[[[\\\\\]]]]]^^^^^___`````aaaaabbbcccccdddddeeeeeffffggggghhhiiiiijjjjkkkklllllmmmmmnnooooopppppqqqrrrrrqqpppppoooonnnnmmmmmllllkkkkkjjjiiiihhhhhgggggffffeeeeeddddcccccbbbaaaaa`````____^^^^^]]]]]\\\\\[[[[ZZZZZZYYYYYXXXXXWWWWVVVVVVUUUUUTTTTTTSSSSRRRRRRQQQQQQQPPPPPOOOOOONNNNNNMMMMMMMMLLLKKKKKKKKJJJJJJJJJIIIIIIIHHHHHHGGGGGGGGGFFFFFFFFFFEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGHHHHHHIIIIIIIIJJJJJJJJJKKKKKKKLLLLMMMMMMMNNNNNNNOOOOOOPPPPPQQQQQQRRRRRRSSSSTTTTTTUUUUUVVVVVVVWWWXXXXXYYYYYZZZZZZZ[[[\\\\\]]]]]^^^^^____`````aaaaabbbbcccccddddeeeeefffggggghhhhhiiiijjjjkkkkkllllmmmmmnnnoooopppppqqqrrrrrrqqqqpppooooonnnnmmmmlllllkkkkkjjiiiiihhhhhgggggfffeeeeedddddcccccbbbbaaaaa`````___^^^^^]]]]]\\\\\[[[[ZZZZZZYYYYYXXXXXWWWWVVVVVVUUUUUUUTTTTTSSSSSRRRRRRQQQQQQPPPPOOOOOONNNNNNNNMMMMMMLLLLLKKKKKKKJJJJJJJJIIIIIIIIIHHHHHHGGGGGGGGGFFFFFFFFFFEEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCDDDDDDDDDEEEEEEEEEEEFFFFFFFFFFGGGGGGGGGHHHHHHIIIIIIIIIJJJJJJJKKKKKKKKLLLLLMMMMMMNNNNNNNOOOOOOOPPPQQQQQQQRRRRRRSSSSSTTTTTUUUUUUVVVVVVWWWWXXXXXYYYYYZZZZZZ[[[[\\\\\]]]]]^^^^^____`````aaaaabbbbcccccdddddeeeeeffggggghhhhhiiiiijjjkkkkklllllmmmnnnnoooooppppqqqqrrrrrrrqqqpppppooooonnmmmmmlllllkkkkkjjjiiiiihhhhhgggggffeeeeedddddcccccbbbbaaaaa`````____^^^^^]]]]]\\\\\[[[ZZZZZZZYYYYYXXXXXXWWWWVVVVVUUUUUUTTTTTTSSSSRRRRRRQQQQQQPPPPOOOOOOOONNNNNNMMMMMMMLLLLLKKKKKKKKJJJJJJJIIIIIIIIIHHHHHHGGGGGGGGGGFFFFFFFFFFEEEEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCDDDDDDDDDEEEEEEEEEEEEFFFFFFFFFFGGGGGGGGGGHHHHHHIIIIIIIIIJJJJJJJJKKKKKKKLLLLLMMMMMMMMNNNNNNOOOOOOOPPPPQQQQQQRRRRRRRSSSTTTTTTTUUUUUUVVVVVWWWWXXXXXXYYYYYZZZZZZ[[[[\\\\\]]]]]^^^^^____`````aaaaabbbcccccdddddeeeeefffggggghhhhhiiiiijjkkkkklllllmmmmmnnnooooopppppqqrrrrrrrrrrqqqpppppooooonnmmmmmlllllkkkkjjjjiiiiihhhhhggggfffeeeeedddddcccccbbbbaaaaa`````____^^^^^]]]]]\\\\\[[[[ZZZZZZYYYYYXXXXXXWWWWVVVVVUUUUUUTTTTTTSSSSRRRRRRQQQQQQQPPPPPOOOOOONNNNNNNMMMMMMMMLLLLLKKKKKKKJJJJJJJJIIIIIIIIIHHHHHHGGGGGGGGGGFFFFFFFFFFFEEEEEEEEEEEEEDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEEEFFFFFFFFFFFFGGGGGGGGGGHHHHHHIIIIIIIIIJJJJJJJKKKKKKKKLLLLLMMMMMMMNNNNNNNNOOOOOOPPPPPQQQQQQRRRRRRSSSSTTTTTTUUUUUUUVVVVVWWWXXXXXXXYYYYYZZZZZZ[[[[\\\\\]]]]]^^^^^___`````aaaaabbbbcccccdddddeeeeeffffgggghhhhhiiiiijjjkkkklllllmmmmmnnnooooopppppqqrrrrrsssrrrqqqqpppppoooonnnnmmmmmlllkkkkkjjjjiiiiihhhhgggggffffeeeeedddddcccccbbbaaaaa`````____^^^^^]]]]]\\\\\[[[[ZZZZZZYYYYYXXXXXXWWWWVVVVVVUUUUUTTTTTTTSSSSSRRRRRRQQQQQQPPPPOOOOOOONNNNNNNMMMMMMMLLLLLKKKKKKKKKJJJJJJJIIIIIIIIIHHHHHHHHGGGGGGGGGGFFFFFFFFFFFEEEEEEEEEEEEEEDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEEEEEFFFFFFFFFFFGGGGGGGGGGHHHHHHHIIIIIIIIIJJJJJJJJKKKKKKKKLLLLLMMMMMMMMNNNNNNOOOOOOOOPPPQQQQQQQRRRRRRSSSSSTTTTTTUUUUUVVVVVVWWWWXXXXXXYYYYYZZZZZZZ[[[\\\\\]]]]]^^^^^____`````aaaaabbbbcccccdddddeeeeeffffggggghhhiiiiijjjjkkkkkllllmmmmmnnnnooopppppqqqqrrrrssssrrrrrqqqppppooooonnnnmmmmlllllkkkkkjjiiiiihhhhhgggggffffeeeeedddddcccccbbbbaaaaa`````___^^^^^]]]]]\\\\\\\[[ZZZZZZYYYYYXXXXXXXWWWVVVVVVVUUUUUUTTTTTTSSSSRRRRRRQQQQQQPPPPPOOOOOOONNNNNNNMMMMMMMMLLLLLKKKKKKKKJJJJJJJJIIIIIIIIIIHHHHHHGGGGGGGGGGFFFFFFFFFFFFFEEEEEEEEEEEEEEEDDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDEEEEEEEEEEEEEEEFFFFFFFFFFFFGGGGGGGGGGHHHHHHHIIIIIIIIIIJJJJJJJKKKKKKKKKLLLLLMMMMMMMNNNNNNNNOOOOOOPPPPPQQQQQQRRRRRRRSSSTTTTTTTUUUUUUVVVVVVWWWWXXXXXXYYYYYZZZZZZ[[[\\\\\\]]]]]^^^^^____`````aaaaabbbbcccccdddddeeeeefffggggghhhhhiiiiijjjkkkkklllllmmmmnnnoooooppppqqqqrrrrrsssssrrrrrqqpppppooooonnnmmmmmlllllkkkkkjjiiiiihhhhhgggggffffeeeeedddddcccccbbbbaaaaa`````____^^^^^]]]]]\\\\\\[[[[ZZZZZYYYYYYXXXXXWWWWVVVVVVUUUUUUTTTTTTSSSSRRRRRRQQQQQQQQPPPPOOOOOOONNNNNNNNMMMMMMMLLLLLKKKKKKKKKJJJJJJJJJIIIIIIIIHHHHHHHGGGGGGGGGGGFFFFFFFFFFFFFFEEEEEEEEEEEEEEEDDDDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDEEEEEEEEEEEEEEEFFFFFFFFFFFFFFGGGGGGGGGGGHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKLLLLLMMMMMMMMNNNNNNNOOOOOOOOPPPPQQQQQQQRRRRRRSSSSTTTTTTUUUUUUUVVVVVVWWWWXXXXXYYYYYYZZZZZ[[[[\\\\\\]]]]]^^^^^____`````aaaaabbbcccccdddddeeeeeffffggggghhhhhiiiiijjjkkkkklllllmmmmmnnooooopppppqqqrrrrrsssssssrrrrrqqqpppppooooonnmmmmmlllllkkkkkjjjiiiiihhhhhgggggfffeeeeedddddcccccbbbaaaaaa`````____^^^^^]]]]]\\\\\\[[[[ZZZZZYYYYYYXXXXXWWWWVVVVVVUUUUUUTTTTTTTSSSSSRRRRRRQQQQQQPPPPPOOOOOOOONNNNNNMMMMMMMMMLLLLLKKKKKKKKJJJJJJJJJIIIIIIIIIIHHHHHHGGGGGGGGGGGGFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEDDDDDDDDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFGGGGGGGGGGGHHHHHHIIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLMMMMMMMMMNNNNNNOOOOOOOPPPPPQQQQQQQRRRRRRSSSSSTTTTTTUUUUUUVVVVVVVWWWXXXXXYYYYYYYZZZZZ[[[\\\\\\\]]]]]^^^^^___`````aaaaaaabbcccccdddddeeeeeffffggggghhhhhiiiiijjkkkkklllllmmmmmnnnooooopppppqqrrrrrssssssssssrrrrqqqqpppppoooonnnmmmmmllllkkkkkjjjjiiiiihhhhhgggggffeeeeedddddddcccccbbaaaaaa`````____^^^^^]]]]]\\\\\\[[[[ZZZZZYYYYYYXXXXXXXWWWVVVVVVVUUUUUUTTTTTTSSSSRRRRRRQQQQQQQQPPPOOOOOOOONNNNNNNMMMMMMMMMLLLLLKKKKKKKKKJJJJJJJJJIIIIIIIIIIHHHHHHHGGGGGGGGGGGGGFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFGGGGGGGGGGGGHHHHHHHHIIIIIIIIIIJJJJJJJJJKKKKKKKKLLLLLMMMMMMMMMNNNNNNNNOOOOOOOPPPPQQQQQQQRRRRRRRSSSTTTTTTTUUUUUUVVVVVVWWWWXXXXXXYYYYYYZZZZZ[[[[\\\\\\]]]]]^^^^^____`````aaaaaabbbcccccddddddeeeeefffggggghhhhhiiiiijjjkkkkkllllmmmmmnnnnoooopppppqqqrrrrssssstttsssrrrrrqqqqppppooooonnnnmmmlllllkkkkkjjjjiiiiihhhhhgggggfffeeeeedddddccccccbbaaaaaaa`````___^^^^^]]]]]\\\\\\\[[[ZZZZZYYYYYYYXXXXXXWWWWVVVVVVUUUUUUTTTTTTSSSSRRRRRRRRQQQQQQPPPPPOOOOOOONNNNNNNNMMMMMMMLLLLLLLKKKKKKKKJJJJJJJJJJIIIIIIIIIIHHHHHHHHGGGGGGGGGGGGFFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFGGGGGGGGGGGGGHHHHHHHIIIIIIIIIIJJJJJJJJJJKKKKKKKKKLLLLLLMMMMMMMMNNNNNNNOOOOOOOOPPPPPQQQQQQRRRRRRRSSSSTTTTTTUUUUUUUVVVVVVWWWWXXXXXXYYYYYYZZZZZ[[[[\\\\\\]]]]]^^^^^____`````aaaaaabbbccccccdddddeeeeeffggggghhhhhiiiiijjjjkkkkklllllmmmmnnnnooooopppqqqqrrrrrssssttttsssssrrrrrqqpppppooooonnnmmmmmlllllkkkkkjjjiiiiihhhhhgggggfffeeeeedddddccccccbbbaaaaaa`````____^^^^^]]]]]\\\\\\[[[[ZZZZZZYYYYYXXXXXXWWWWVVVVVVUUUUUUTTTTTTTSSSSSRRRRRRQQQQQQQPPPPPOOOOOOOONNNNNNNMMMMMMMMLLLLLLKKKKKKKKKJJJJJJJJJJIIIIIIIIIIIHHHHHHHHGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGHHHHHHHIIIIIIIIIIIIJJJJJJJJJJKKKKKKKKLLLLLLLMMMMMMMNNNNNNNNOOOOOOOPPPPPQQQQQQQQRRRRRRSSSSSTTTTTTUUUUUUVVVVVVVWWWXXXXXXXYYYYYZZZZZZ[[[[\\\\\\]]]]]^^^^^____`````aaaaaabbcccccccdddddeeeeeffggggghhhhhiiiiijjjjkkkkklllllmmmmmnnooooopppppqqqrrrrrssssstttttsssssrrrrrqqpppppooooonnnmmmmmlllllkkkkkjjiiiiihhhhhgggggffffeeeeedddddccccccbbbaaaaaa`````____^^^^^]]]]]]\\\\\[[[[ZZZZZZYYYYYXXXXXXWWWWWVVVVVVVUUUUUUTTTTTTSSSSRRRRRRRQQQQQQQQPPPPOOOOOOONNNNNNNNNMMMMMMMLLLLLLLKKKKKKKKKKJJJJJJJJJJIIIIIIIIIIIHHHHHHHGGGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGHHHHHHHHIIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOPPPPQQQQQQQRRRRRRRRSSSTTTTTTTUUUUUUVVVVVVWWWWWXXXXXXYYYYYZZZZZZZ[[[\\\\\]]]]]]]^^^^^___`````aaaaaaabbccccccdddddeeeeeffffggggghhhhhiiiiijjjkkkkklllllmmmmmnnooooopppppqqqrrrrrssssstttttttsssssrrrrqqqqpppppooonnnnmmmmmlllllkkkkkjjjiiiiihhhhhgggggfffeeeeedddddcccccccbbaaaaaa`````____^^^^^]]]]]]\\\\\[[[[ZZZZZZYYYYYYYXXXXXXWWWWVVVVVVUUUUUUTTTTTTSSSSSRRRRRRRQQQQQQQPPPPPOOOOOOOONNNNNNNNMMMMMMMMMLLLLLKKKKKKKKKKJJJJJJJJJJIIIIIIIIIIIIIHHHHHHHHGGGGGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGHHHHHHHHHIIIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOPPPPPQQQQQQQQRRRRRRSSSSSTTTTTTUUUUUUUVVVVVVWWWWXXXXXXYYYYYYZZZZZZ[[[[\\\\\]]]]]]^^^^^____`````aaaaaabbbccccccdddddeeeeeffffggggghhhhhiiiiijjkkkkklllllmmmmmnnnnoooopppppqqqqrrrsssssttttttttttssssrrrrrqqqqppppooooonnnmmmmmlllllkkkkkjjjiiiiihhhhhgggggffffeeeeedddddcccccbbbaaaaaaa`````___^^^^^]]]]]]]\\\\\[[[ZZZZZZZYYYYYYXXXXXXWWWWVVVVVVUUUUUUTTTTTTTTSSSSRRRRRRRQQQQQQQQPPPPPOOOOOOONNNNNNNNNMMMMMMMMMLLLLLLKKKKKKKKKJJJJJJJJJJJIIIIIIIIIIIIHHHHHHHHHHGGGGGGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGHHHHHHHHHHIIIIIIIIIIIIIJJJJJJJJJJJKKKKKKKKKLLLLLLMMMMMMMMMNNNNNNNNOOOOOOOOPPPPPQQQQQQQRRRRRRRRSSSSTTTTTTTUUUUUUVVVVVVVWWWXXXXXXXYYYYYYZZZZZZ[[[[\\\\\]]]]]]^^^^^____`````aaaaaabbbbcccccdddddeeeeeffffggggghhhhhiiiiijjkkkkklllllmmmmmnnnnoooooppppqqqrrrrrsssstttttuuutttsssssrrrrrqqqpppppooooonnnnmmmmmlllkkkkkjjjjiiiiihhhhhgggggffffeeeeedddddcccccbbbbaaaaaa`````____^^^^^]]]]]]\\\\\\[[[[ZZZZZYYYYYYXXXXXXWWWWWVVVVVVVUUUUUUTTTTTTSSSSSRRRRRRRRQQQQQQQPPPPPOOOOOOOONNNNNNNNMMMMMMMMMLLLLLLKKKKKKKKKKJJJJJJJJJJJJIIIIIIIIIIIIHHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHIIIIIIIIIIIIIJJJJJJJJJJJKKKKKKKKKKLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOPPPPPQQQQQQQQRRRRRRRSSSSSTTTTTTTUUUUUUVVVVVVWWWWWXXXXXXYYYYYYYZZZZZ[[[\\\\\\\]]]]]]^^^^^____`````aaaaaabbbbcccccdddddeeeeefffggggghhhhhiiiiijjjjkkkkkllllmmmmmnnnnooooopppppqqrrrrrsssssttttuuuutttttsssssrrrrrqqpppppooooonnnmmmmmlllllkkkkkjjjiiiiihhhhhgggggffffeeeeedddddccccccbbbaaaaaa`````____^^^^^^]]]]]\\\\\\[[[[ZZZZZZYYYYYYYXXXXXXWWWWVVVVVVUUUUUUTTTTTTTTSSSSSRRRRRRQQQQQQQPPPPPPPOOOOOOONNNNNNNNNMMMMMMMMMLLLLLLKKKKKKKKKKKJJJJJJJJJJJIIIIIIIIIIIIIIHHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGGGGGGFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHIIIIIIIIIIIIIIJJJJJJJJJJJKKKKKKKKKKKKLLLLLLMMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPQQQQQQQQRRRRRRSSSSSTTTTTTTUUUUUUUVVVVVVWWWWXXXXXXYYYYYYZZZZZZ[[[[\\\\\\]]]]]^^^^^^^___`````aaaaaaabbccccccdddddeeeeeffffggggghhhhhiiiiijjjjkkkkklllllmmmmmnnooooopppppqqqrrrrrssssstttttuuuuutttttsssssrrrrqqqpppppooooonnnmmmmmlllllkkkkkjjjjiiiiihhhhhgggggfffeeeeedddddcccccccbbaaaaaa`````____^^^^^^]]]]]\\\\\\\[[[ZZZZZZZYYYYYYXXXXXXWWWWVVVVVVUUUUUUUUTTTTTTSSSSSRRRRRRRQQQQQQQQPPPPPOOOOOOOOONNNNNNNNMMMMMMMMMMLLLLLLLKKKKKKKKKKKJJJJJJJJJJJJIIIIIIIIIIIIIIHHHHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHIIIIIIIIIIIIIIJJJJJJJJJJJJJKKKKKKKKKKKLLLLLLMMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPQQQQQQQRRRRRRRRSSSSSTTTTTTUUUUUUUVVVVVVVWWWXXXXXXXYYYYYYZZZZZZ[[[[\\\\\\]]]]]^^^^^^____`````aaaaaabbbccccccdddddeeeeeffffggggghhhhhiiiiijjjjkkkkklllllmmmmmnnooooopppppqqqqrrrrssssstttttuuvuuuutttttssssrrrrrqqqqpppppooooonnmmmmmlllllkkkkkjjjjiiiiihhhhhgggggffffeeeeedddddccccccbbaaaaaaa`````___^^^^^^^]]]]]\\\\\\[[[[ZZZZZZYYYYYYXXXXXXWWWWWVVVVVVVUUUUUUTTTTTTTSSSSSRRRRRRRRQQQQQQQPPPPPOOOOOOOOONNNNNNNNNMMMMMMMMMMLLLLLLKKKKKKKKKKKKKJJJJJJJJJJJJIIIIIIIIIIIIIIIIHHHHHHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIJJJJJJJJJJJJJKKKKKKKKKKKKLLLLLLLMMMMMMMMMMNNNNNNNNOOOOOOOOOPPPPPQQQQQQQQRRRRRRRSSSSSTTTTTTTTUUUUUUVVVVVVWWWWWXXXXXXYYYYYYYZZZZZZ[[[[\\\\\\]]]]]^^^^^^____`````aaaaaabbbccccccdddddeeeeeffffggggghhhhhiiiiijjjkkkkklllllmmmmmnnnooooopppppqqqqrrrrrssstttttuuuuvvvuuuttttsssssrrrrrqqqqppppooooonnnmmmmmlllllkkkkkjjjjiiiiihhhhhgggggffffeeeeedddddccccccbbbbaaaaa`````____^^^^^^]]]]]]\\\\\[[[[[ZZZZZZYYYYYYYXXXXXXWWWWVVVVVVUUUUUUUTTTTTTTTSSSSSRRRRRRRQQQQQQQQPPPPPOOOOOOOOONNNNNNNNNNMMMMMMMMLLLLLLLLKKKKKKKKKKKKJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIHHHHHHHHHHHHHHHHHHGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJKKKKKKKKKKKKKLLLLLLLMMMMMMMMMNNNNNNNNNNOOOOOOOOOPPPPPQQQQQQQRRRRRRRRSSSSSTTTTTTTUUUUUUUUVVVVVVWWWWXXXXXXYYYYYYZZZZZZ[[[[[\\\\\]]]]]]]^^^^^^____`````aaaaabbbcccccccdddddeeeeefffggggghhhhhiiiiijjjjkkkkklllllmmmmmnnnnoooooppppqqqrrrrrsssssttttuuuuvvvvvuutttttsssssrrrrrqqqpppppooooonnnnmmmmmlllllkkkkkjjjiiiiihhhhhgggggffffeeeeedddddccccccbbbbaaaaa``````____^^^^^]]]]]]\\\\\\\[[[ZZZZZZZYYYYYYXXXXXXWWWWWVVVVVVUUUUUUUUTTTTTTSSSSSRRRRRRRRQQQQQQQQPPPPPOOOOOOOOONNNNNNNNNNMMMMMMMMMMLLLLLLLLKKKKKKKKKKKKJJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIIIIHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJKKKKKKKKKKKKKLLLLLLLMMMMMMMMMMNNNNNNNNNNOOOOOOOOOPPPPPQQQQQQQQQRRRRRRRSSSSSTTTTTTTUUUUUUUVVVVVVWWWWWXXXXXXXYYYYYYZZZZZZ[[[[\\\\\\]]]]]]^^^^^____``````aaaaabbbbccccccdddddeeeeeffffggggghhhhhiiiiijjjjkkkkklllllmmmmmnnnnooooopppppqqrrrrrssssstttttuuuvvvvvvvuuutttttsssssrrrrrqqpppppooooonnnnmmmmmlllllkkkkkjjiiiiiiihhhhhgggggfffeeeeedddddcccccccbbbaaaaa```````___^^^^^]]]]]]]\\\\\\[[[[ZZZZZZYYYYYYXXXXXXWWWWWVVVVVVVVUUUUUUTTTTTTTTSSSSSRRRRRRRQQQQQQQQQPPPPPOOOOOOOOOONNNNNNNNNMMMMMMMMMMMLLLLLLLKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIIIIIIIIHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKLLLLLLLLMMMMMMMMMMMNNNNNNNNNOOOOOOOOOOPPPPPQQQQQQQQRRRRRRRRSSSSSTTTTTTTUUUUUUUVVVVVVVWWWWWXXXXXXYYYYYYYZZZZZZ[[[[\\\\\\]]]]]]^^^^^____``````aaaaabbbbccccccdddddeeeeeffffggggghhhhhiiiiiijjjkkkkklllllmmmmmnnnooooopppppqqqrrrrrssssstttttuuvvvvvvvvvuuuutttttsssssrrrrqqqpppppooooonnnnmmmmmlllllkkkkkjjjiiiiiihhhhhgggggffffeeeeedddddccccccbbbbaaaaa``````____^^^^^^]]]]]\\\\\\[[[[[ZZZZZZYYYYYYYXXXXXXWWWWWVVVVVVUUUUUUUUTTTTTTTSSSSSRRRRRRRRQQQQQQQQPPPPPPPOOOOOOOONNNNNNNNNNMMMMMMMMMMMMLLLLLLLKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKLLLLLLLLMMMMMMMMMMMNNNNNNNNNNOOOOOOOOOPPPPPPQQQQQQQQQRRRRRRRSSSSSTTTTTTTTUUUUUUUVVVVVVVWWWWWXXXXXXYYYYYYZZZZZZ[[[[[\\\\\\\]]]]]^^^^^^____``````aaaaabbbbccccccdddddeeeeeffffggggghhhhhiiiiiijjkkkkklllllmmmmmnnnnooooopppppqqqqrrrrssssstttttuuuvvvvwvvvvvuuuutttttssssrrrrrqqqqpppppooooonnmmmmmllllllkkkkkjjjiiiiiihhhhhgggggffffeeeeedddddccccccbbbbaaaaa``````____^^^^^^]]]]]]\\\\\\\[[[ZZZZZZZYYYYYYXXXXXXWWWWWVVVVVVVVUUUUUUTTTTTTTSSSSSSSRRRRRRRQQQQQQQQQPPPPPPOOOOOOOOONNNNNNNNNNNMMMMMMMMMMMLLLLLLLLLKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKLLLLLLLLLMMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOPPPPPPPQQQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVVWWWWWXXXXXXXYYYYYYZZZZZZ[[[[\\\\\\]]]]]]^^^^^^^___```````aaaaabbbcccccccdddddeeeeefffggggghhhhhiiiiiiijjkkkkkllllllmmmmmnnnooooopppppqqqqrrrrrssstttttuuuuvvvvvwwwvvvvvuutttttsssssrrrrrqqqqpppppooooonnmmmmmlllllkkkkkkkjjiiiiihhhhhhgggggffffeeeeeddddddcccccbbbbaaaaaa`````____^^^^^^]]]]]]]\\\\\\[[[[ZZZZZZYYYYYYYXXXXXXXWWWWWVVVVVVUUUUUUUTTTTTTTTSSSSSSRRRRRRRRQQQQQQQQPPPPPPPOOOOOOOOOONNNNNNNNNNMMMMMMMMMMMMLLLLLLLLLKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJJJJJJIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKLLLLLLLLMMMMMMMMMMMMMNNNNNNNNNNOOOOOOOOOOPPPPPPQQQQQQQQQRRRRRRRSSSSSSSTTTTTTTUUUUUUUUVVVVVVWWWWWXXXXXXYYYYYYYYZZZZZZ[[[[\\\\\\]]]]]]^^^^^^____`````aaaaaabbbbcccccddddddeeeeeffffggggghhhhhhiiiiijjjkkkkkklllllmmmmmnnnooooopppppqqqrrrrrssssstttttuuuvvvvvwwwwwvvvvvuutttttsssssrrrrrqqqqpppppooooonnnmmmmmlllllkkkkkkjjiiiiihhhhhhhgggggfffeeeeedddddddcccccbbbaaaaaaa`````_____^^^^^]]]]]]\\\\\\[[[[[ZZZZZZYYYYYYYXXXXXXWWWWWVVVVVVVUUUUUUUUTTTTTTTSSSSSRRRRRRRRRQQQQQQQQQPPPPPPOOOOOOOOOONNNNNNNNNNNMMMMMMMMMMMMMLLLLLLLLLLKKKKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKLLLLLLLLLLMMMMMMMMMMMMNNNNNNNNNNNOOOOOOOOOOPPPPPPPQQQQQQQQRRRRRRRRRSSSSSTTTTTTTTUUUUUUUVVVVVVVVWWWWWXXXXXXYYYYYYZZZZZZ[[[[[\\\\\\\]]]]]]^^^^^_____`````aaaaaabbbbcccccddddddeeeeeffffggggghhhhhhiiiiijjjkkkkkklllllmmmmmnnooooopppppqqqqrrrrrssssstttttuuuvvvvvwwwwwwwvvvvvuuutttttsssssrrrrrqqpppppooooonnnnmmmmmlllllkkkkkjjjjiiiiihhhhhhgggggffffeeeeeddddddcccccbbbbaaaaaa``````____^^^^^^]]]]]]\\\\\\\[[[ZZZZZZZYYYYYYYXXXXXXWWWWWVVVVVVVVUUUUUUUTTTTTTTTSSSSSRRRRRRRRRQQQQQQQQQQPPPPPPOOOOOOOOOONNNNNNNNNNNMMMMMMMMMMMMMMLLLLLLLLLLKKKKKKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLMMMMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOOPPPPPPQQQQQQQQQQRRRRRRRRRSSSSSTTTTTTTUUUUUUUUVVVVVVVWWWWWXXXXXXYYYYYYYYZZZZZZ[[[[\\\\\\]]]]]]^^^^^^^___```````aaaaaabbbbcccccddddddeeeeeffffggggghhhhhhiiiiijjjjkkkkklllllmmmmmnnnooooopppppqqqrrrrrssssstttttuuvvvvvwwwwwwwwwvvvvvuuuutttttsssssrrrrrqqpppppooooonnnnmmmmmlllllkkkkkjjjjiiiiihhhhhhgggggffffeeeeeddddddcccccbbbbaaaaaa``````____^^^^^^]]]]]]]\\\\\\[[[[ZZZZZZZYYYYYYXXXXXXXXWWWWVVVVVVVUUUUUUUUUTTTTTTTSSSSSRRRRRRRRRQQQQQQQQQQPPPPPPOOOOOOOOOOOONNNNNNNNNNNNMMMMMMMMMMMMMMLLLLLLLLLLLKKKKKKKKKKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLMMMMMMMMMMMMMNNNNNNNNNNNNNOOOOOOOOOOOPPPPPPQQQQQQQQQQRRRRRRRRRSSSSSTTTTTTTTUUUUUUUUVVVVVVVVWWWWXXXXXXXYYYYYYZZZZZZZZ[[[[\\\\\\]]]]]]^^^^^^____``````aaaaaaabbbcccccdddddddeeeeefffggggghhhhhhhiiiiijjjkkkkklllllmmmmmnnnnooooopppppqqqrrrrrssssstttttuuuvvvvvwwwwxwwwwwvvvvvuuuutttttsssssrrrrrqqqpppppooooonnnmmmmmlllllkkkkkjjjjiiiiihhhhhhgggggffffeeeeeddddddcccccccbbbaaaaa```````___^^^^^^^]]]]]]\\\\\\[[[[[ZZZZZZYYYYYYYYXXXXXXWWWWWVVVVVVVVUUUUUUUTTTTTTTTTSSSSSRRRRRRRRRRQQQQQQQQQPPPPPPPOOOOOOOOOOONNNNNNNNNNNNNMMMMMMMMMMMMMMMLLLLLLLLLLLLKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLMMMMMMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOOOPPPPPPPPQQQQQQQQQRRRRRRRRRRSSSSSTTTTTTTTUUUUUUUUVVVVVVVWWWWWXXXXXXXYYYYYYYZZZZZZ[[[[[\\\\\\\]]]]]]^^^^^^____``````aaaaabbbbccccccddddddeeeeeffffggggghhhhhhiiiiijjjjkkkkklllllmmmmmnnnnooooopppppqqrrrrrssssstttttuuuuvvvvvwwwwwxxxwwwwwvvvvvuuuttttsssssrrrrrqqqqpppppooooonnnnmmmmmlllllkkkkkjjjiiiiihhhhhhhgggggfffeeeeeeedddddccccccbbbbaaaaaa`````_____^^^^^^]]]]]]\\\\\\\[[[ZZZZZZZZYYYYYYXXXXXXXXWWWWWVVVVVVVUUUUUUUUTTTTTTTTSSSSSSSRRRRRRRRQQQQQQQQQQPPPPPPPPOOOOOOOOOOONNNNNNNNNNNNNNMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNOOOOOOOOOOOOPPPPPPPQQQQQQQQQQRRRRRRRRRSSSSSSTTTTTTTTTUUUUUUUVVVVVVVVWWWWWXXXXXXXYYYYYYYZZZZZZZ[[[[\\\\\\]]]]]]^^^^^^^_____`````aaaaaabbbbccccccdddddeeeeeeffffggggghhhhhhiiiiijjjjkkkkklllllmmmmmnnnnooooopppppqqqrrrrrsssssttttuuuuvvvvvwwwwwxxxxxwwwwwvvvvvuutttttsssssrrrrrqqqqpppppooooonnnnmmmmmlllllkkkkkjjjjiiiiiihhhhhgggggffffeeeeeedddddccccccbbbbaaaaaa``````____^^^^^^]]]]]]]\\\\\\[[[[[ZZZZZZYYYYYYYYXXXXXXXWWWWWVVVVVVVVUUUUUUUTTTTTTTTTSSSSSSRRRRRRRRRQQQQQQQQQQPPPPPPPOOOOOOOOOOOOONNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNOOOOOOOOOOOOPPPPPPPPQQQQQQQQQQRRRRRRRRSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVWWWWWXXXXXXXXYYYYYYYZZZZZZZ[[[[[\\\\\\]]]]]]^^^^^^____``````aaaaaaabbbcccccccdddddeeeeeeffffggggghhhhhiiiiiijjjjkkkkklllllmmmmmnnnooooopppppqqqqrrrrrssssstttttuuuvvvvvwwwwwxxxxxxxwwwwwvvvvvuuutttttsssssrrrrrqqqpppppooooonnnnmmmmmlllllkkkkkjjjjiiiiiihhhhhgggggffffeeeeeedddddccccccbbbbaaaaaa```````___^^^^^^^]]]]]]\\\\\\\[[[[ZZZZZZZZYYYYYYXXXXXXXWWWWWVVVVVVVVVUUUUUUUUTTTTTTTTSSSSSSSRRRRRRRRRRQQQQQQQQQQPPPPPPPOOOOOOOOOOOOOONNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNOOOOOOOOOOOOOPPPPPPPPQQQQQQQQQQRRRRRRRRRRSSSSSSTTTTTTTTTUUUUUUUVVVVVVVVVWWWWWXXXXXXXXYYYYYYZZZZZZZ[[[[\\\\\\\\]]]]]]^^^^^^____``````aaaaaabbbbccccccdddddeeeeeeefffggggghhhhhiiiiiiijjjkkkkklllllmmmmmnnnnooooopppppqqqqrrrrrssssstttttuuvvvvvwwwwwxxxxxxxxxxwwwwwvvvvuuuutttttsssssrrrrrqqqqpppppooooonnnmmmmmlllllkkkkkjjjjiiiiiihhhhhgggggffffeeeeeedddddddcccccbbbaaaaaaa``````_____^^^^^^]]]]]]\\\\\\\[[[[[ZZZZZZYYYYYYYXXXXXXXXWWWWWVVVVVVVVVUUUUUUUTTTTTTTTTSSSSSSRRRRRRRRRRQQQQQQQQQQQPPPPPPPPOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOPPPPPPPQQQQQQQQQQQRRRRRRRRRRSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVVWWWWWXXXXXXXYYYYYYYYZZZZZZ[[[[[\\\\\\]]]]]]^^^^^^^_____``````aaaaaabbbbcccccddddddeeeeeeffffggggghhhhhiiiiiijjjjkkkkklllllmmmmmnnnnooooopppppqqqqrrrrrssssstttttuuuvvvvwwwwwxxxxxyyyxxxwwwwwvvvvvuuuutttttsssssrrrrrqqqqpppppooooonnnnmmmmmlllllkkkkkjjjiiiiiiihhhhhggggggffffeeeeeddddddccccccbbbbaaaaaa``````____^^^^^^]]]]]]]\\\\\\\[[[[ZZZZZZZYYYYYYYYXXXXXXXWWWWWVVVVVVVVVUUUUUUUUTTTTTTTTTTSSSSSSRRRRRRRRRRQQQQQQQQQQQPPPPPPPPPOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOPPPPPPPPQQQQQQQQQQQQRRRRRRRRRRSSSSSSTTTTTTTTTTUUUUUUUVVVVVVVVVWWWWWXXXXXXXXYYYYYYYZZZZZZZZ[[[\\\\\\\\]]]]]]^^^^^^____``````aaaaaaabbbcccccccddddddeeeeeffffgggggghhhhhiiiiiijjjjkkkkklllllmmmmmnnnnooooopppppqqqrrrrrssssstttttuuuuvvvvvwwwwwxxxxyyyyxxxxxwwwwwvvvvvuuutttttsssssrrrrrqqqqpppppooooonnnnmmmmmlllllkkkkkjjjjiiiiiihhhhhggggggffffeeeeeddddddccccccbbbbaaaaaa```````___^^^^^^^]]]]]]]\\\\\\[[[[[ZZZZZZZZYYYYYYYXXXXXXXXWWWWWVVVVVVVVVUUUUUUUTTTTTTTTTTSSSSSSRRRRRRRRRRRRQQQQQQQQQQQPPPPPPPPPOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOPPPPPPPPPQQQQQQQQQQQRRRRRRRRRRRSSSSSSTTTTTTTTTTUUUUUUUUVVVVVVVVVWWWWWXXXXXXXYYYYYYYYZZZZZZZ[[[[[\\\\\\]]]]]]]]^^^^^^____``````aaaaaabbbbccccccdddddddeeeeefffggggggghhhhhiiiiiijjjjkkkkklllllmmmmmnnnooooopppppqqqqrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrqqqpppppooooonnnnmmmmmlllllkkkkkkjjjiiiiiihhhhhggggggffffeeeeeedddddcccccccbbbaaaaaaa``````_____^^^^^^]]]]]]\\\\\\\\[[[[ZZZZZZZYYYYYYYYXXXXXXXXWWWWWVVVVVVVVVUUUUUUUUUTTTTTTTTTSSSSSSSRRRRRRRRRRRQQQQQQQQQQQQPPPPPPPPPPOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQQRRRRRRRRRRRSSSSSSSSTTTTTTTTTUUUUUUUUVVVVVVVVVWWWWWXXXXXXXXXYYYYYYYZZZZZZZZ[[[[\\\\\\\]]]]]]^^^^^^^_____``````aaaaaabbbbccccccdddddeeeeeeffffgggggghhhhhiiiiiiijjkkkkkklllllmmmmmnnnnooooopppppqqqqrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyzyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrqqqqpppppooooonnnmmmmmlllllkkkkkkkjjiiiiiihhhhhgggggggfffeeeeeeedddddccccccbbbbbaaaaaa``````____^^^^^^]]]]]]]]\\\\\\[[[[[ZZZZZZZZYYYYYYYXXXXXXXXWWWWWWVVVVVVVVVUUUUUUUUTTTTTTTTTTSSSSSSSRRRRRRRRRRRQQQQQQQQQQQQQQPPPPPPPPPPOOOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQQQQQRRRRRRRRRRRSSSSSSTTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWXXXXXXXYYYYYYYYZZZZZZZ[[[[[\\\\\\\]]]]]]]^^^^^^____``````aaaaaaabbbbbccccccdddddeeeeeeffffgggggghhhhhiiiiiijjjkkkkkklllllmmmmmnnnnooooopppppqqqqrrrrrssssstttttuuuvvvvvwwwwwxxxxxyyyyzzzyyyxxxxxwwwwwvvvvvuuuttttttsssssrrrrrqqqppppppooooonnnnmmmmmlllllkkkkkkjjjjiiiiihhhhhhgggggffffeeeeeeddddddccccccbbbbaaaaaa```````___^^^^^^^^]]]]]]\\\\\\\\[[[[[ZZZZZZZYYYYYYYYXXXXXXXWWWWWWVVVVVVVVVUUUUUUUUUTTTTTTTTTTSSSSSSSRRRRRRRRRRRRRQQQQQQQQQQQQQQPPPPPPPPPPOOOOOOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQQQQQRRRRRRRRRRRRSSSSSSSSTTTTTTTTTTUUUUUUUUVVVVVVVVVWWWWWWXXXXXXXXYYYYYYYZZZZZZZZ[[[[[\\\\\\\]]]]]]]^^^^^^^____``````aaaaaabbbbccccccdddddddeeeeeeffffggggghhhhhhiiiiijjjjkkkkkklllllmmmmmnnnnoooooppppppqqrrrrrssssstttttttuuvvvvvwwwwwxxxxxyyyyzzzzzyyyyxxxxxwwwwwvvvvvuutttttssssssrrrrrqqqppppppooooonnnnmmmmmlllllkkkkkkjjjjiiiiihhhhhhgggggffffeeeeeeddddddcccccccbbbaaaaaaa``````_____^^^^^^]]]]]]]]\\\\\\\[[[[ZZZZZZZYYYYYYYYYXXXXXXXXWWWWWWVVVVVVVVVUUUUUUUUUUTTTTTTTTTTSSSSSSSRRRRRRRRRRRRRQQQQQQQQQQQQQQQPPPPPPPPPPPOOOOOOOOOOOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPQQQQQQQQQQQQQQQRRRRRRRRRRRRSSSSSSSSTTTTTTTTTTUUUUUUUUUUVVVVVVVVVWWWWWWXXXXXXXYYYYYYYYYZZZZZZZZ[[[\\\\\\\\]]]]]]]^^^^^^^_____``````aaaaaabbbbccccccddddddeeeeeeefffggggghhhhhhhiiiiijjjkkkkkkklllllmmmmmnnnooooopppppppqqrrrrrsssssstttttuuuvvvvvwwwwwxxxxxyyyyzzzzzzzyyyyxxxxxwwwwwvvvvvuutttttsssssrrrrrrrqqppppppooooonnnnmmmmmlllllkkkkkkjjjjiiiiihhhhhhgggggfffffeeeeedddddddccccccbbbbbaaaaaa``````____^^^^^^^^]]]]]]\\\\\\\[[[[[ZZZZZZZZYYYYYYYYYXXXXXXXWWWWWWVVVVVVVVVUUUUUUUUUUTTTTTTTTTTTSSSSSSSSRRRRRRRRRRRRQQQQQQQQQQQQQQQQQPPPPPPPPPPPPPOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQRRRRRRRRRRRRRSSSSSSSTTTTTTTTTTTUUUUUUUUUUVVVVVVVVVWWWWWWXXXXXXXXYYYYYYYYYZZZZZZZ[[[[[\\\\\\\\]]]]]]^^^^^^^____``````aaaaaaabbbbbccccccddddddeeeeefffffggggghhhhhhiiiiijjjjkkkkkklllllmmmmmnnnnoooooppppppqqqrrrrrrssssstttttuuuvvvvvwwwwwxxxxxyyyzzzzzzzzzzyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqpppppppooooonnnmmmmmlllllkkkkkkkjjjiiiiihhhhhhhggggggffffeeeeeeddddddccccccbbbbaaaaaa```````_____^^^^^^]]]]]]]\\\\\\\\[[[[[ZZZZZZZYYYYYYYYYXXXXXXXXWWWWWWVVVVVVVVVVUUUUUUUUUUTTTTTTTTTTTSSSSSSSSRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQPPPPPPPPPPPPPPPOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRSSSSSSSTTTTTTTTTTTTUUUUUUUUUUVVVVVVVVVVWWWWWWXXXXXXXYYYYYYYYYZZZZZZZZ[[[[[\\\\\\\]]]]]]]]^^^^^^_____``````aaaaaabbbbccccccdddddddeeeeeeffffgggggghhhhhhiiiiijjjjkkkkkklllllmmmmmnnnnoooooppppppqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyzzzzz{{{zzzzzyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqppppppooooonnnnmmmmmllllllkkkkkjjjjiiiiiihhhhhggggggffffeeeeeeddddddcccccccbbbaaaaaaa```````____^^^^^^^]]]]]]]]\\\\\\\[[[[[ZZZZZZZZYYYYYYYYYXXXXXXXXWWWWWVVVVVVVVVVUUUUUUUUUUTTTTTTTTTTTTTSSSSSSSSSRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQPPPPPPPPPPPPPPPPPPPPOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRSSSSSSSSSTTTTTTTTTTTTUUUUUUUUUUVVVVVVVVVVWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZ[[[[[\\\\\\\\]]]]]]]^^^^^^^^___````````aaaaaabbbbccccccddddddeeeeeeefffggggggghhhhhiiiiiijjjjkkkkkllllllmmmmmnnnnoooooppppppqqrrrrrrrssssstttttuuuvvvvvwwwwwxxxxxyyyzzzzz{{{{{zzzzzyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqppppppooooonnnnmmmmmllllllkkkkkjjjjiiiiiihhhhhggggggffffeeeeeedddddddccccccbbbbbaaaaaa``````_____^^^^^^^^]]]]]]\\\\\\\\[[[[[[ZZZZZZZYYYYYYYYYXXXXXXXXXWWWWWWVVVVVVVVVVUUUUUUUUUUTTTTTTTTTTTTTSSSSSSSSRRRRRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRSSSSSSSSSTTTTTTTTTTTTUUUUUUUUUUVVVVVVVVVVWWWWWWWXXXXXXXXYYYYYYYYYZZZZZZZZ[[[[[[\\\\\\\]]]]]]]^^^^^^^_____``````aaaaaaabbbbbccccccddddddeeeeeeffffgggggghhhhhiiiiiiijjjkkkkklllllllmmmmmnnnooooopppppppqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyzzzzz{{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuutttttsssssrrrrrrrqqppppppooooonnnnmmmmmllllllkkkkkjjjjiiiiiihhhhhhhgggggfffffeeeeeeddddddccccccbbbbaaaaaa````````_____^^^^^^]]]]]]]]\\\\\\\[[[[[ZZZZZZZZZYYYYYYYYYXXXXXXXXWWWWWWWVVVVVVVVVVUUUUUUUUUUUTTTTTTTTTTTTSSSSSSSSSSRRRRRRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTTTTUUUUUUUUUUUVVVVVVVVVVWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZ[[[[[\\\\\\\\]]]]]]]^^^^^^^_____```````aaaaaabbbbccccccdddddddeeeeeefffffggggghhhhhhiiiiiijjjjkkkkkllllllmmmmmnnnnoooooppppppqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyyzzzzz{{{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqpppppppooooonnnmmmmmlllllllkkkkkjjjiiiiiiihhhhhhggggggffffeeeeeeddddddcccccccbbbbbaaaaaa``````_____^^^^^^^^]]]]]]]\\\\\\\\[[[[[ZZZZZZZZYYYYYYYYYXXXXXXXXXWWWWWWWVVVVVVVVVVUUUUUUUUUUUUTTTTTTTTTTTTTSSSSSSSSSSRRRRRRRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTTTTTUUUUUUUUUUUVVVVVVVVVVWWWWWWWWXXXXXXXXYYYYYYYYYZZZZZZZZZ[[[[[\\\\\\\]]]]]]]]^^^^^^^_____```````aaaaaabbbbbccccccddddddeeeeeeefffggggggghhhhhhiiiiiijjjjkkkkkllllllmmmmmnnnnoooooppppppqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyzzzzz{{{{{{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqppppppooooonnnnmmmmmllllllkkkkkkjjjjiiiiihhhhhhggggggffffeeeeeedddddddccccccbbbbbaaaaaa````````_____^^^^^^^]]]]]]]]\\\\\\\[[[[[ZZZZZZZZZYYYYYYYYYXXXXXXXXXXWWWWWWVVVVVVVVVVVUUUUUUUUUUUTTTTTTTTTTTTTTTSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTTTTTTUUUUUUUUUUUVVVVVVVVVVVVWWWWWWXXXXXXXXXXYYYYYYYYYZZZZZZZZ[[[[[\\\\\\\\]]]]]]]^^^^^^^^_____```````aaaaaaabbbbbccccccddddddeeeeeeffffgggggghhhhhhhiiiiijjjkkkkkkkllllllmmmmmnnnnoooooppppppqqrrrrrrrssssstttttuuuvvvvvwwwwwxxxxxyyyyzzzzz{{{{{|||{{{{{zzzzzyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqppppppooooonnnnmmmmmmlllllkkkkkkjjjjiiiiiihhhhhgggggggfffffeeeeeeddddddccccccbbbbaaaaaaaa```````____^^^^^^^]]]]]]]]\\\\\\\\\[[[[[ZZZZZZZZYYYYYYYYYXXXXXXXXXXWWWWWWWWVVVVVVVVVVVUUUUUUUUUUUUTTTTTTTTTTTTTTTSSSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSTTTTTTTTTTTTTTTUUUUUUUUUUUUUVVVVVVVVVVVWWWWWWWXXXXXXXXXXYYYYYYYYYZZZZZZZZZ[[[[[\\\\\\\\\]]]]]]]^^^^^^^^___````````aaaaaaabbbbccccccdddddddeeeeeefffffgggggghhhhhiiiiiijjjjkkkkkklllllmmmmmmmnnnooooopppppppqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyyzzzzz{{{{{|||||{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuutttttsssssrrrrrrrqqppppppooooonnnnmmmmmmlllllkkkkkkkjjjiiiiiiihhhhhhggggggffffeeeeeeddddddcccccccbbbbbaaaaaa```````_____^^^^^^^^]]]]]]]\\\\\\\\\[[[[[ZZZZZZZZZYYYYYYYYYYXXXXXXXXXXWWWWWWVVVVVVVVVVVVVUUUUUUUUUUUUTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTUUUUUUUUUUUUUVVVVVVVVVVVVWWWWWWWXXXXXXXXXXYYYYYYYYYYZZZZZZZZ[[[[[\\\\\\\\\]]]]]]]]^^^^^^^_____````````aaaaaabbbbbccccccddddddeeeeeeefffggggggghhhhhhiiiiiijjjjkkkkkklllllmmmmmmnnnnoooooppppppqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyyzzzzz{{{{{|||||||{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqqpppppooooonnnmmmmmmmlllllkkkkkkjjjjiiiiiihhhhhhggggggffffeeeeeeddddddddccccccbbbbaaaaaaa````````_____^^^^^^^]]]]]]]]\\\\\\\\\[[[[[ZZZZZZZZYYYYYYYYYYXXXXXXXXXXWWWWWWWWVVVVVVVVVVVVUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUVVVVVVVVVVVVVWWWWWWWXXXXXXXXXXYYYYYYYYYYZZZZZZZZZ[[[[[\\\\\\\\\]]]]]]]^^^^^^^^_____```````aaaaaaaabbbcccccccdddddddeeeeeeffffgggggghhhhhhhiiiiiijjjjkkkkkklllllmmmmmmnnnnooooopppppqqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxyyyzzzzz{{{{{||||||||||{{{{{zzzzzyyyyxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqqpppppooooonnnnmmmmmmllllllkkkkkjjjjiiiiiihhhhhhgggggggfffffeeeeeeddddddccccccbbbbbaaaaaaaa```````____^^^^^^^^^]]]]]]]\\\\\\\\\[[[[[ZZZZZZZZZZYYYYYYYYYYXXXXXXXXXXWWWWWWWWVVVVVVVVVVVVUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUVVVVVVVVVVVVVWWWWWWWXXXXXXXXXXYYYYYYYYYYZZZZZZZZZZ[[[[[\\\\\\\\\]]]]]]]]^^^^^^^^____````````aaaaaaabbbbbccccccdddddddeeeeeefffffgggggghhhhhhiiiiiiijjjkkkkklllllllmmmmmmnnnnooooopppppqqqrrrrrrrssssstttttuuuvvvvvwwwwwxxxxxyyyyzzzzz{{{{{|||||}}}|||||{{{{{zzzzzyyxxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqqpppppoooooonnnnmmmmmllllllkkkkkkkjjjiiiiiiihhhhhhggggggffffeeeeeeddddddccccccccbbbbbaaaaaa````````_____^^^^^^^^]]]]]]]]\\\\\\\\\[[[[[[ZZZZZZZZZYYYYYYYYYYXXXXXXXXXXXWWWWWWWVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVWWWWWWWWXXXXXXXXXXXYYYYYYYYYYZZZZZZZZZ[[[[[[\\\\\\\\\]]]]]]]^^^^^^^^^_____```````aaaaaaabbbbbcccccccddddddeeeeeeefffggggggghhhhhhiiiiiijjjjkkkkkkllllllmmmmmnnnnoooooopppppqqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxxyyyzzzzz{{{{{|||||}}}}||||||{{{{{zzzzzyyxxxxxxxwwwwwvvvvvuuutttttsssssrrrrrrrqqqpppppooooooonnnmmmmmlllllllkkkkkkjjjjiiiiiihhhhhhggggggffffeeeeeeeeddddddccccccbbbbbaaaaaaaa```````_____^^^^^^^^]]]]]]]]\\\\\\\\\[[[[[[ZZZZZZZZZZYYYYYYYYYYXXXXXXXXXXXXWWWWWWWWVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVWWWWWWWWWXXXXXXXXXXXYYYYYYYYYYZZZZZZZZZZ[[[[[[\\\\\\\\\]]]]]]]]]^^^^^^^_____````````aaaaaaabbbbbcccccccddddddeeeeeeeffffgggggghhhhhhhiiiiiijjjjkkkkkkllllllmmmmmnnnnoooooopppppqqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxxyyyzzzzz{{{{{||||||}}}}}|||||{{{{{zzzzzzyyyxxxxxxwwwwwvvvvvuuuutttttsssssrrrrrrqqqqpppppoooooonnnnmmmmmmlllllkkkkkkjjjjiiiiiihhhhhhgggggggfffffeeeeeeddddddccccccccbbbbbaaaaaaa````````_____^^^^^^^]]]]]]]]]\\\\\\\\\[[[[[[ZZZZZZZZZZYYYYYYYYYYYXXXXXXXXXXXWWWWWWWWWVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVWWWWWWWWWXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZ[[[[[[\\\\\\\\\]]]]]]]]^^^^^^^^_____```````aaaaaaaabbbbbcccccccdddddddeeeeeefffffgggggghhhhhhiiiiiiijjjkkkkkkklllllmmmmmmnnnnoooooopppppqqqqrrrrrrssssstttttuuuuvvvvvwwwwwxxxxxxyyzzzzzzz{{{{{|||||}}~~~}}|||||{{{{{zzzzzzyyyxxxxxwwwwwwvvvvvuuuutttttssssssrrrrrqqqqpppppoooooonnnnmmmmmmlllllkkkkkkjjjjjiiiiiiihhhhhhggggggffffeeeeeeedddddddcccccccbbbbaaaaaaa`````````_____^^^^^^^^]]]]]]]]\\\\\\\\\[[[[[[[[ZZZZZZZZZZYYYYYYYYYYXXXXXXXXXXXXWWWWWWWWWWVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVWWWWWWWWWWXXXXXXXXXXXXXYYYYYYYYYYZZZZZZZZZZ[[[[[[[\\\\\\\\\]]]]]]]]]^^^^^^^_____`````````aaaaaaaabbbccccccccddddddeeeeeeeefffggggggghhhhhhiiiiiijjjjjkkkkkklllllmmmmmmmnnnooooooopppppqqqrrrrrssssssstttttuuuvvvvvwwwwwwwxxxxxyyzzzzzz{{{{{|||||}}}~~~~}}}|||||{{{{{zzzzzzzyyxxxxxwwwwwwvvvvvuuuutttttssssssrrrrrqqqqppppppooooonnnnmmmmmmlllllllkkkkkkjjjjiiiiiihhhhhhggggggfffffeeeeeeedddddddccccccbbbbbaaaaaaaa```````_______^^^^^^^]]]]]]]]]\\\\\\\\\\[[[[[[ZZZZZZZZZZYYYYYYYYYYYXXXXXXXXXXXXXXWWWWWWWWWVVVVVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVWWWWWWWWXXXXXXXXXXXXXXYYYYYYYYYYYZZZZZZZZZZ[[[[[[[\\\\\\\\\\]]]]]]]]^^^^^^^^______````````aaaaaaabbbbbccccccddddddddeeeeeefffffgggggghhhhhhhiiiiiijjjjkkkkkkllllllmmmmmmnnnnoooooppppppqqqqrrrrrsssssstttttuuuuvvvvvwwwwwwxxxxxyyyzzzzzz{{{{{|||||}}}}~~~~~}}}}|||||{{{{{zzzzzyyyxxxxxwwwwwwwvvvvvuuutttttsssssssrrrrrqqqpppppppooooonnnmmmmmmmllllllkkkkkkjjjjiiiiiihhhhhhggggggggffffeeeeeeeddddddccccccccbbbbbaaaaaaa````````______^^^^^^^^]]]]]]]]]]\\\\\\\\[[[[[[[ZZZZZZZZZZZYYYYYYYYYYYYXXXXXXXXXXXXXWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWXXXXXXXXXXXXYYYYYYYYYYYYYZZZZZZZZZZZ[[[[[[\\\\\\\\\]]]]]]]]]]^^^^^^^_______```````aaaaaaaabbbbbcccccccddddddeeeeeeeeffffggggggghhhhhhiiiiiiijjjkkkkkkkllllllmmmmmmnnnnoooooppppppqqqqrrrrrsssssstttttuuuuvvvvvwwwwwwxxxxxyyyyzzzzz{{{{{|||||}}}}~~~~~~~}}}}|||||{{{{{zzzzzyyyyxxxxxwwwwwwvvvvvuuuutttttssssssrrrrrqqqqppppppoooooonnnnmmmmmllllllkkkkkkjjjjjiiiiiiihhhhhhggggggfffffeeeeeeddddddddcccccccbbbbbaaaaaaaa```````_______^^^^^^^^]]]]]]]]]\\\\\\\\\\[[[[[[ZZZZZZZZZZZZYYYYYYYYYYYYXXXXXXXXXXXXXXWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWXXXXXXXXXXXXXYYYYYYYYYYYYYZZZZZZZZZZZ[[[[[[\\\\\\\\\\]]]]]]]]]^^^^^^^^^______````````aaaaaaabbbbbccccccccdddddddeeeeeefffffggggggghhhhhhiiiiiijjjjjkkkkkklllllllmmmmmnnnoooooooppppppqqqqrrrrrsssssstttttuuuuvvvvvwwwwwwxxxxxyyyyzzzzz{{{{{|||||}}}~~~~~~~~~~}}}}|||||{{{{{zzzzzyyyyxxxxxwwwwwwvvvvvuuuutttttssssssrrrrrqqqqppppppoooooonnnnmmmmmmlllllllkkkkkkjjjjiiiiiihhhhhhggggggggfffeeeeeeeeddddddccccccccbbbbbaaaaaaaa````````______^^^^^^^^^]]]]]]]]]\\\\\\\\\\[[[[[[[ZZZZZZZZZZZYYYYYYYYYYYYYXXXXXXXXXXXXXXXWWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWXXXXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZZ[[[[[[[[\\\\\\\\\\]]]]]]]]]^^^^^^^^_______```````aaaaaaaaabbbbbcccccccdddddddeeeeeeeffffggggggghhhhhhhiiiiiijjjjkkkkkkllllllmmmmmmnnnnoooooopppppppqqqrrrrrssssssstttttuuuvvvvvwwwwwwwxxxxxyyyzzzzz{{{{{|||||}}}}~~~~~~~~~~}}}|||||{{{{{zzzzzyyyyxxxxxwwwwwwvvvvvuuuuttttttsssssrrrrrrrqqqpppppooooooonnnmmmmmmmllllllkkkkkkjjjjiiiiiihhhhhhhhggggggfffffeeeeeeddddddddcccccccbbbbbaaaaaaaaa```````_______^^^^^^^^]]]]]]]]]]\\\\\\\\\\[[[[[[[[ZZZZZZZZZZZYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYZZZZZZZZZZZZ[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^^______````````aaaaaaaabbbbbccccccccdddddddeeeeeeefffffgggggghhhhhhhiiiiiiijjjkkkkkkkllllllmmmmmmnnnnoooooopppppqqqqrrrrrrsssssttttttuuuuvvvvvwwwwwwxxxxxyyyyzzzzz{{{{{|||||}}}}~~~~~~~~~~}}}}|||||{{{{{zzzzzyyyxxxxxxxwwwwwvvvvvuuutttttttsssssrrrrrrqqqqpppppoooooonnnnmmmmmmllllllkkkkkkjjjjjiiiiiiihhhhhhgggggggffffeeeeeeeedddddddccccccccbbbbbaaaaaaa`````````______^^^^^^^^^]]]]]]]]]]\\\\\\\\\\[[[[[[[ZZZZZZZZZZZZZYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYZZZZZZZZZZZZ[[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^_______````````aaaaaaaabbbbbcccccccddddddddeeeeeeeffffgggggggghhhhhhiiiiiijjjjjkkkkkklllllllmmmmmmnnnnoooooopppppqqqqrrrrrrsssssttttttuuuuvvvvvwwwwwxxxxxxyyyyzzzzz{{{{{|||||}}}}~~~~~~~~~~}}}}|||||{{{{{zzzzzyyyyxxxxxxwwwwwvvvvvuuuuttttttsssssrrrrrrqqqqppppppooooonnnnnmmmmmmlllllllkkkkkkjjjjiiiiiihhhhhhhgggggggfffffeeeeeeeddddddddcccccccbbbbbaaaaaaaa````````_______^^^^^^^^^^]]]]]]]]]]\\\\\\\\\\[[[[[[[ZZZZZZZZZZZZZZYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYZZZZZZZZZZZZZ[[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^^^______`````````aaaaaaabbbbbccccccccdddddddeeeeeeeefffffgggggghhhhhhhhiiiiiijjjjkkkkkkllllllmmmmmmnnnnnooooopppppppqqqrrrrrrrsssssttttttuuuuvvvvvwwwwwxxxxxxyyyyzzzzz{{{{{|||||}}}~~~~~~~~~~}}}}|||||{{{{{zzzzzyyyyxxxxxxwwwwwvvvvvuuuuttttttsssssrrrrrrqqqqppppppooooooonnnmmmmmmmllllllkkkkkkjjjjiiiiiiihhhhhhhgggggggffffeeeeeeeddddddddcccccccccbbbbbaaaaaaa`````````______^^^^^^^^^^]]]]]]]]]]\\\\\\\\\\\[[[[[[[[[ZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZ[[[[[[[[[\\\\\\\\\\\]]]]]]]]]]^^^^^^^^^^_______````````aaaaaaaabbbbbcccccccccdddddddeeeeeeeefffgggggggghhhhhhiiiiiiiijjjkkkkkkkllllllmmmmmmnnnnooooooppppppqqqqrrrrrrssssstttttttuuuvvvvvwwwwwxxxxxxxyyyzzzzz{{{{{|||||}}}}~~~~~€€€~~~~~}}}|||||{{{{{zzzzzyyyyxxxxxxwwwwwvvvvvuuuuttttttsssssssrrrrrqqqpppppppoooooonnnnmmmmmmllllllkkkkkkjjjjjiiiiiiihhhhhhhggggggfffffeeeeeeeedddddddccccccccbbbbbbaaaaaaaa``````````______^^^^^^^^^]]]]]]]]]]]\\\\\\\\\\\[[[[[[[[[ZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZ[[[[[[[[\\\\\\\\\\\\]]]]]]]]]]]^^^^^^^^^______``````````aaaaaaabbbbbbbcccccccddddddddeeeeeeefffffgggggghhhhhhhhiiiiiijjjjjkkkkkklllllllmmmmmmnnnnooooooppppppqqqqrrrrrssssssttttttuuuuvvvvvwwwwwxxxxxxyyyyzzzzz{{{{{|||||}}}}~~~~~€€€€€~~~~~}}}}|||||{{{{{zzzzzyyyxxxxxxxwwwwwvvvvvvuuuutttttssssssrrrrrqqqqqpppppoooooonnnnnmmmmmmlllllllkkkkkkjjjjiiiiiiihhhhhhggggggggfffffeeeeeeeddddddddcccccccbbbbbbbaaaaaaaa`````````______^^^^^^^^^^]]]]]]]]]]]]\\\\\\\\\\\[[[[[[[[[ZZZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZ[[[[[[[[[\\\\\\\\\\\]]]]]]]]]]]^^^^^^^^^^______`````````aaaaaaaaabbbbbbccccccccdddddddeeeeeeeefffffggggggghhhhhhiiiiiiiijjjjkkkkkkllllllmmmmmmnnnnnooooooopppppqqqqqrrrrrsssssstttttuuuuvvvvvvwwwwwxxxxxxyyyyzzzzz{{{{{|||||}}}}~~~~~€€€€€€€~~~~~}}}}|||||{{{{{zzzzzzyyyxxxxxxwwwwwvvvvvvuuuutttttssssssrrrrrrqqqqppppppooooooonnnmmmmmmmllllllkkkkkkjjjjjiiiiiihhhhhhhhgggggggffffeeeeeeeeedddddddccccccccbbbbbbaaaaaaaaa`````````______^^^^^^^^^^^]]]]]]]]]]]\\\\\\\\\\\\\[[[[[[[[[ZZZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZ[[[[[[[[[\\\\\\\\\\\\]]]]]]]]]]]^^^^^^^^^^^^______`````````aaaaaaaabbbbbbbcccccccddddddddeeeeeeeeffffgggggggghhhhhhhiiiiiijjjjjkkkkkkkllllllmmmmmmnnnnooooooppppppqqqqrrrrrrssssssstttttuuuvvvvvvvwwwwwxxxxxxyyzzzzzzz{{{{{|||||}}}~~~~~€€€€€ \ No newline at end of file diff --git a/Graphic_Equalizer_Split/data/help.raw b/Graphic_Equalizer_Split/data/help.raw new file mode 100644 index 0000000..6585cb6 Binary files /dev/null and b/Graphic_Equalizer_Split/data/help.raw differ diff --git a/Graphic_Equalizer_Split/data/help_mask.raw b/Graphic_Equalizer_Split/data/help_mask.raw new file mode 100644 index 0000000..4c46ff7 Binary files /dev/null and b/Graphic_Equalizer_Split/data/help_mask.raw differ diff --git a/Graphic_Equalizer_Split/data/orig/graph_mask.bmp b/Graphic_Equalizer_Split/data/orig/graph_mask.bmp new file mode 100644 index 0000000..60a032c Binary files /dev/null and b/Graphic_Equalizer_Split/data/orig/graph_mask.bmp differ diff --git a/Graphic_Equalizer_Split/data/orig/help.bmp b/Graphic_Equalizer_Split/data/orig/help.bmp new file mode 100644 index 0000000..44d2814 Binary files /dev/null and b/Graphic_Equalizer_Split/data/orig/help.bmp differ diff --git a/Graphic_Equalizer_Split/data/orig/help_mask.bmp b/Graphic_Equalizer_Split/data/orig/help_mask.bmp new file mode 100644 index 0000000..cadee1d Binary files /dev/null and b/Graphic_Equalizer_Split/data/orig/help_mask.bmp differ diff --git a/Graphic_Equalizer_Split/data/orig/skin.bmp b/Graphic_Equalizer_Split/data/orig/skin.bmp new file mode 100644 index 0000000..f521f56 Binary files /dev/null and b/Graphic_Equalizer_Split/data/orig/skin.bmp differ diff --git a/Graphic_Equalizer_Split/data/orig/skin_mask.bmp b/Graphic_Equalizer_Split/data/orig/skin_mask.bmp new file mode 100644 index 0000000..989f000 Binary files /dev/null and b/Graphic_Equalizer_Split/data/orig/skin_mask.bmp differ diff --git a/Graphic_Equalizer_Split/data/preset_demo.bin b/Graphic_Equalizer_Split/data/preset_demo.bin new file mode 100644 index 0000000..bd1f7f4 Binary files /dev/null and b/Graphic_Equalizer_Split/data/preset_demo.bin differ diff --git a/Graphic_Equalizer_Split/data/preset_reset.bin b/Graphic_Equalizer_Split/data/preset_reset.bin new file mode 100644 index 0000000..8e4514d Binary files /dev/null and b/Graphic_Equalizer_Split/data/preset_reset.bin differ diff --git a/Graphic_Equalizer_Split/data/presets_hardcoded.txt b/Graphic_Equalizer_Split/data/presets_hardcoded.txt new file mode 100644 index 0000000..ef305c8 --- /dev/null +++ b/Graphic_Equalizer_Split/data/presets_hardcoded.txt @@ -0,0 +1,13 @@ +/* 0 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, +/* 1 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, +/* 2 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, +/* 3 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, +/* 4 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, +/* 5 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, +/* 0 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, +/* 1 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, +/* 2 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, +/* 3 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, +/* 4 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, +/* 5 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, +/* 0 */ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0x01, 0x23, 0x45, 0x67 diff --git a/Graphic_Equalizer_Split/data/skin.raw b/Graphic_Equalizer_Split/data/skin.raw new file mode 100644 index 0000000..f0acdd9 Binary files /dev/null and b/Graphic_Equalizer_Split/data/skin.raw differ diff --git a/Graphic_Equalizer_Split/data/skin_mask.raw b/Graphic_Equalizer_Split/data/skin_mask.raw new file mode 100644 index 0000000..6293a08 Binary files /dev/null and b/Graphic_Equalizer_Split/data/skin_mask.raw differ diff --git a/Graphic_Equalizer_Split/doc/html/annotated.html b/Graphic_Equalizer_Split/doc/html/annotated.html new file mode 100644 index 0000000..11bcfb0 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/annotated.html @@ -0,0 +1,19 @@ + + +Graphic Equalizer 2: Data Structures + + + + +

Graphic Equalizer 2 Data Structures

Here are the data structures with brief descriptions: + + + + + +
audiodata_t
events_t
mousedata_t
skindata_tThis struct contains all area- dimensions and color information for the skin
skindata_t::skin_info_tStructure containing the four boundry limits of an area and maximal two colors per area
+
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/audio_2main_8hcc-source.html b/Graphic_Equalizer_Split/doc/html/audio_2main_8hcc-source.html new file mode 100644 index 0000000..3167eee --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/audio_2main_8hcc-source.html @@ -0,0 +1,76 @@ + + +Graphic Equalizer: C:/Project Marcel & Oliver/Graphic_Equalizer/src/audio/main.hcc Source File + + + + + +

main.hcc

00001 
+00020 /*
+00021  * Set the Clock rate for this domain. 50.0 Mhz is minimally required while
+00022  * performing audio tasks.
+00023  */
+00024 #define PAL_TARGET_CLOCK_RATE 50000000
+00025 
+00026 /******** System Includes *************/
+00027 #include <stdlib.hch>
+00028 
+00029 #include "pal_master.hch"
+00030 
+00031 /******** Application Includes ********/
+00032 #include "audiodriver.hch"
+00033 
+00034 
+00035 /*
+00036  * Request Clockrate. Approximated ClockRate is compiler assigned.
+00037  */
+00038 static macro expr ClockRate = PAL_ACTUAL_CLOCK_RATE;
+00039 
+00040 
+00041 
+00050 void main(void) {
+00051         /* Setup Audio I/O Pointers */
+00052         macro expr AudioIn  = PalAudioInCT(0);
+00053         macro expr AudioOut = PalAudioOutCT(0);
+00054 
+00055         /*
+00056          * Check library versions and Request VideoOutput.
+00057          * We need at least Major Version 1 and minor version 2.
+00058          */
+00059         PalVersionRequire(1, 2);
+00060         PalAudioInRequire(1);
+00061         PalAudioOutRequire(1);
+00062 
+00063         /*
+00064          * Run The Following main tasks in parallel.
+00065          */
+00066         par {
+00067                 /*
+00068                  * Primary task is to 'Run' several hardware simultaniously.
+00069                  * Audio I/O needs to be in sync.
+00070                  */
+00071                 PalAudioInRun(AudioIn, ClockRate);
+00072                 PalAudioOutRun(AudioOut, ClockRate);
+00073                 
+00074                 /* Parallel to our Primary tasks we run the application. */
+00075                 seq {
+00076                         /* But first we need to enable and initialize the audio. */
+00077                         PalAudioInEnable(AudioIn);
+00078                         PalAudioOutEnable(AudioOut);
+00079                         audio_init(7, LINE_IN, SR_44100);
+00080                         par {
+00081                                 /*
+00082                                  * From here we run the main audio loop.
+00083                                  */
+00084                                 audio_main();
+00085                         }
+00086                 }
+00087         }
+00088 } /* --- main() --- */
+

Generated on Thu Nov 25 15:40:49 2004 for Graphic Equalizer by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/audio_8hcc-source.html b/Graphic_Equalizer_Split/doc/html/audio_8hcc-source.html new file mode 100644 index 0000000..a3c36b6 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/audio_8hcc-source.html @@ -0,0 +1,69 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/audio.hcc Source File + + + + + +

audio.hcc

Go to the documentation of this file.
00001 
+00019 /******** System Includes *************/
+00020 #include <stdlib.hch>
+00021 
+00022 #include "pal_master.hch"
+00023 
+00024 /******** Application Includes ********/
+00025 #include "configuration.hch"
+00026 #include "audio.hch"
+00027 
+00028 
+00029 
+00045 macro proc audio_init(gain_level, input_source, sample_rate, AUDIOIN, AUDIOOUT) {
+00046         /*
+00047          * We simply call the appropiate handlers and pass values along. We
+00048          * Don't set the mute on input gain. We have volume control to do this.
+00049          * Input and Output sampling rates are equal. We dont' need different
+00050          * rates.
+00051          */
+00052         RC200AudioInSetGain(FALSE, gain_level, gain_level);
+00053         RC200AudioInSetInput(input_source);
+00054         PalAudioInSetSampleRate(AUDIOIN, sample_rate);
+00055         PalAudioOutSetSampleRate(AUDIOOUT, sample_rate);
+00056 } /* --- audio_init() --- */
+00057 
+00058 
+00059 #if !USE_RUNFFT
+00060 //TODO: put runfft here!
+00076 macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT) {
+00077         /*
+00078          * Determin the data width for the current platform.
+00079          */
+00080         macro expr IW = PalAudioInGetMaxDataWidthCT();
+00081         macro expr OW = PalAudioOutGetMaxDataWidthCT();
+00082 
+00083         signed IW sample_left_in, sample_right_in;
+00084         signed OW sample_left_out, sample_right_out;
+00085 
+00086         while (TRUE) {
+00087                 PalAudioInRead(AUDIOIN, &sample_left_in, &sample_right_in);
+00088 
+00089 /*              par {
+00090                         sample_add(sample_left_in);
+00091                         sample_get(&sample_left_out);
+00092                         sample_right_out = sample_right_in;
+00093                 }
+00094                 if (rotate_samples()) {
+00095                         / *
+00096                          * 64 Samples have been processed, calculate.
+00097                          * /
+00098                 }
+00099 */              PalAudioOutWrite(AUDIOOUT, (signed OW)(sample_left_in @ 0), (signed OW)(sample_right_in @ 0));
+00100         }
+00101 } /* --- audio_main() --- */
+00102 #endif
+

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/audio_8hcc.html b/Graphic_Equalizer_Split/doc/html/audio_8hcc.html new file mode 100644 index 0000000..8503f32 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/audio_8hcc.html @@ -0,0 +1,190 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/audio.hcc File Reference + + + + + +

audio.hcc File Reference

#include <stdlib.hch>
+#include "pal_master.hch"
+#include "configuration.hch"
+#include "audio.hch"
+ +

+Include dependency graph for audio.hcc:

Include dependency graph
+ + + + + +

+Go to the source code of this file. + + + + + + + + +

Functions

macro proc audio_init (gain_level, input_source, sample_rate, AUDIOIN, AUDIOOUT)
 Set some inital values to the audio hardware.
macro proc audio_main (audiodata, AUDIOIN, AUDIOOUT)
 Main audiodriver. This function never returns! It calls the audiohandlers and stores samples into a global array. Once 64 Samples are collected it raises a signal AUDIO_READY to let other processes know it's ready. We use quadruple buffering for audio input and double buffering for audio output.
+


Detailed Description

+

+Graphic Equalizer API

+

+Project information.

+Project Graphic Equalizer
+
Author:
O.M. Schinagl
+
Date:
20041011
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041011:
+ Initial version +

+Definition in file audio.hcc.


Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
macro proc audio_init gain_level ,
input_source ,
sample_rate ,
AUDIOIN ,
AUDIOOUT 
+
+ + + + + +
+   + + +

+Set some inital values to the audio hardware. +

+

Parameters:
+ + + + +
gain_level Set the input amplifier to this amplification level.
input_source Choose between microphone input or linein input.
sample_rate Set the sample rate between 8000 and 48000
+
+
Returns:
void
+
Return values:
+ + +
void 
+
+ +

+Definition at line 45 of file audio.hcc. +

+Referenced by main().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
macro proc audio_main audiodata ,
AUDIOIN ,
AUDIOOUT 
+
+ + + + + +
+   + + +

+Main audiodriver. This function never returns! It calls the audiohandlers and stores samples into a global array. Once 64 Samples are collected it raises a signal AUDIO_READY to let other processes know it's ready. We use quadruple buffering for audio input and double buffering for audio output. +

+

Parameters:
+ + + + +
*audiodata pointer to audio information structure.
AUDIOIN Audio Input Handler
AUDIOOUT Audio Output Handler
+
+
Returns:
Never Returns.
+
Return values:
+ + +
void 
+
+ +

+Definition at line 76 of file audio.hcc. +

+Referenced by main().

+


Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/audio_8hcc__incl.map b/Graphic_Equalizer_Split/doc/html/audio_8hcc__incl.map new file mode 100644 index 0000000..94afea9 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/audio_8hcc__incl.map @@ -0,0 +1,3 @@ +base referer +rect $configuration_8hch.html 245,7 370,34 +rect $audio_8hch.html 394,7 474,34 diff --git a/Graphic_Equalizer_Split/doc/html/audio_8hcc__incl.md5 b/Graphic_Equalizer_Split/doc/html/audio_8hcc__incl.md5 new file mode 100644 index 0000000..a948416 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/audio_8hcc__incl.md5 @@ -0,0 +1 @@ +c40d88d881278afd1ef70a3d20ec91ee \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/audio_8hcc__incl.png b/Graphic_Equalizer_Split/doc/html/audio_8hcc__incl.png new file mode 100644 index 0000000..36bd511 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/audio_8hcc__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/audio_8hch-source.html b/Graphic_Equalizer_Split/doc/html/audio_8hch-source.html new file mode 100644 index 0000000..48b00aa --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/audio_8hch-source.html @@ -0,0 +1,84 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/audio.hch Source File + + + + + +

audio.hch

Go to the documentation of this file.
00001 
+00019 #ifndef _AUDIO_HCH
+00020 #define _AUDIO_HCH 1
+00021 
+00022 /*
+00023  * Type definition of the shared memory to be used in various processes
+00024  */
+00025 typedef struct {
+00026         mpram {
+00027                 ram unsigned 7 write[256];      
+00028                 rom unsigned 7 read[256];
+00029         } fft_info with { block = "BlockRAM"};
+00030         mpram {
+00031                 ram unsigned 6 write[256];      
+00032                 rom unsigned 6 read[256];
+00033         } ifft_info with { block = "BlockRAM"};
+00034         unsigned 4 *equalizer_levels_ptr;
+00035         unsigned 1 display_log;
+00036 } audiodata_t;
+00037 
+00038 
+00039 
+00040 
+00041 /*
+00042  * States used to indicate wether audio data is sampled.
+00043  */
+00044 #define AUDIO_NOT_READY 0
+00045 #define AUDIO_READY     1
+00046 
+00047 
+00048 
+00049 /*
+00050  * Line in or Mic in aliases for audio_init.
+00051  */
+00052 #define LINE_IN RC200AudioInLineIn
+00053 #define MIC_IN  RC200AudioInMicrophone
+00054 
+00055 
+00056 
+00057 /*
+00058  * Sample Rate Aliases for audio_init.
+00059  */
+00060 #define SR_8000         RC200AudioSampleRate8000
+00061 #define SR_11025        RC200AudioSampleRate11025
+00062 #define SR_16000        RC200AudioSampleRate16000
+00063 #define SR_22050        RC200AudioSampleRate22050
+00064 #define SR_44100        RC200AudioSampleRate44100
+00065 #define SR_48000        RC200AudioSampleRate48000
+00066 
+00067 
+00068 
+00069 /*
+00070  * Initialize the Audio sub-system. gain_level sets the internal amplifier to
+00071  * passed level, input_source chooses between line in or mic in. The
+00072  * sample_rate is set to supplied rate. Defines for these are mentioned above.
+00073  */
+00074 macro proc audio_init(gain_level, input_source, sample_rate, AUDIOIN, AUDIOOUT);
+00075 
+00076 
+00077 
+00078 /*
+00079  * Main audiodriver loop. This procedure never returns! It handles audio io and
+00080  * updates the shared memory. It needs Audio I/O handlers passed.
+00081  */
+00082 macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT);
+00083 
+00084 #else
+00085 #error "ERROR file audio.hch multiple times included"
+00086 #endif /* --- _AUDIO_HCH --- */
+00087 
+

Generated on Thu Dec 9 14:37:05 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/audio_8hch.html b/Graphic_Equalizer_Split/doc/html/audio_8hch.html new file mode 100644 index 0000000..bcc7245 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/audio_8hch.html @@ -0,0 +1,496 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/audio.hch File Reference + + + + + +

audio.hch File Reference

+

+This graph shows which files directly or indirectly include this file:

Included by dependency graph
+ + + + + + + + + +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  audiodata_t

Defines

#define _AUDIO_HCH   1
#define AUDIO_NOT_READY   0
#define AUDIO_READY   1
#define LINE_IN   RC200AudioInLineIn
#define MIC_IN   RC200AudioInMicrophone
#define SR_8000   RC200AudioSampleRate8000
#define SR_11025   RC200AudioSampleRate11025
#define SR_16000   RC200AudioSampleRate16000
#define SR_22050   RC200AudioSampleRate22050
#define SR_44100   RC200AudioSampleRate44100
#define SR_48000   RC200AudioSampleRate48000

Functions

macro proc audio_init (gain_level, input_source, sample_rate, AUDIOIN, AUDIOOUT)
 Set some inital values to the audio hardware.
macro proc audio_main (audiodata, AUDIOIN, AUDIOOUT)
 Main audiodriver. This function never returns! It calls the audiohandlers and stores samples into a global array. Once 64 Samples are collected it raises a signal AUDIO_READY to let other processes know it's ready. We use quadruple buffering for audio input and double buffering for audio output.
+


Detailed Description

+

+Graphic Equalizer API

+

+Project information.

+Project Graphic Equalizer
+
Author:
O.M. Schinagl
+
Date:
20041021
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041021: O.M. Schinagl
+ Initial version +

+Definition in file audio.hch.


Define Documentation

+

+ + + + +
+ + + + +
#define _AUDIO_HCH   1
+
+ + + + + +
+   + + +

+ +

+Definition at line 20 of file audio.hch.

+

+ + + + +
+ + + + +
#define AUDIO_NOT_READY   0
+
+ + + + + +
+   + + +

+ +

+Definition at line 44 of file audio.hch.

+

+ + + + +
+ + + + +
#define AUDIO_READY   1
+
+ + + + + +
+   + + +

+ +

+Definition at line 45 of file audio.hch.

+

+ + + + +
+ + + + +
#define LINE_IN   RC200AudioInLineIn
+
+ + + + + +
+   + + +

+ +

+Definition at line 52 of file audio.hch. +

+Referenced by main().

+

+ + + + +
+ + + + +
#define MIC_IN   RC200AudioInMicrophone
+
+ + + + + +
+   + + +

+ +

+Definition at line 53 of file audio.hch.

+

+ + + + +
+ + + + +
#define SR_8000   RC200AudioSampleRate8000
+
+ + + + + +
+   + + +

+ +

+Definition at line 60 of file audio.hch.

+

+ + + + +
+ + + + +
#define SR_11025   RC200AudioSampleRate11025
+
+ + + + + +
+   + + +

+ +

+Definition at line 61 of file audio.hch.

+

+ + + + +
+ + + + +
#define SR_16000   RC200AudioSampleRate16000
+
+ + + + + +
+   + + +

+ +

+Definition at line 62 of file audio.hch.

+

+ + + + +
+ + + + +
#define SR_22050   RC200AudioSampleRate22050
+
+ + + + + +
+   + + +

+ +

+Definition at line 63 of file audio.hch.

+

+ + + + +
+ + + + +
#define SR_44100   RC200AudioSampleRate44100
+
+ + + + + +
+   + + +

+ +

+Definition at line 64 of file audio.hch. +

+Referenced by main().

+

+ + + + +
+ + + + +
#define SR_48000   RC200AudioSampleRate48000
+
+ + + + + +
+   + + +

+ +

+Definition at line 65 of file audio.hch.

+


Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
macro proc audio_init gain_level ,
input_source ,
sample_rate ,
AUDIOIN ,
AUDIOOUT 
+
+ + + + + +
+   + + +

+Set some inital values to the audio hardware. +

+

Parameters:
+ + + + +
gain_level Set the input amplifier to this amplification level.
input_source Choose between microphone input or linein input.
sample_rate Set the sample rate between 8000 and 48000
+
+
Returns:
void
+
Return values:
+ + +
void 
+
+ +

+Definition at line 45 of file audio.hcc. +

+Referenced by main().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
macro proc audio_main audiodata ,
AUDIOIN ,
AUDIOOUT 
+
+ + + + + +
+   + + +

+Main audiodriver. This function never returns! It calls the audiohandlers and stores samples into a global array. Once 64 Samples are collected it raises a signal AUDIO_READY to let other processes know it's ready. We use quadruple buffering for audio input and double buffering for audio output. +

+

Parameters:
+ + + + +
*audiodata pointer to audio information structure.
AUDIOIN Audio Input Handler
AUDIOOUT Audio Output Handler
+
+
Returns:
Never Returns.
+
Return values:
+ + +
void 
+
+ +

+Definition at line 76 of file audio.hcc. +

+Referenced by main().

+


Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/audio_8hch__dep__incl.map b/Graphic_Equalizer_Split/doc/html/audio_8hch__dep__incl.map new file mode 100644 index 0000000..13b9d0b --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/audio_8hch__dep__incl.map @@ -0,0 +1,7 @@ +base referer +rect $audio_8hcc.html 7,7 87,34 +rect $display_8hcc.html 111,7 199,34 +rect $eventhandler_8hcc.html 223,7 346,34 +rect $fft_8hcc.html 370,7 429,34 +rect $main_8hcc.html 453,7 527,34 +rect $smartmedia_8hcc.html 551,7 669,34 diff --git a/Graphic_Equalizer_Split/doc/html/audio_8hch__dep__incl.md5 b/Graphic_Equalizer_Split/doc/html/audio_8hch__dep__incl.md5 new file mode 100644 index 0000000..b5bb099 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/audio_8hch__dep__incl.md5 @@ -0,0 +1 @@ +47b49974e1875473dca8902c4d0a51aa \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/audio_8hch__dep__incl.png b/Graphic_Equalizer_Split/doc/html/audio_8hch__dep__incl.png new file mode 100644 index 0000000..13e726a Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/audio_8hch__dep__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/configuration_8hch-source.html b/Graphic_Equalizer_Split/doc/html/configuration_8hch-source.html new file mode 100644 index 0000000..fa10daa --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/configuration_8hch-source.html @@ -0,0 +1,53 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/configuration.hch Source File + + + + + +

configuration.hch

Go to the documentation of this file.
00001 
+00019 #ifndef _CONFIGURATION_HCH
+00020 #define _CONFIGURATION_HCH 1
+00021 
+00022 
+00023 
+00024 /*
+00025  * To print debug information on the RS232 port set this define.
+00026  */
+00027 #define HAVE_DEBUG 0
+00028 
+00029 
+00030 
+00031 /*
+00032  * If we don't want to use the SmartMedia set this to 0. Data is then read from
+00033  * the ram, assuming it's there. Otherwise 1 will load the smartmedia
+00034  * routines.
+00035  */
+00036 #define HAVE_SMARTMEDIA 0
+00037 
+00038 
+00039 
+00040 /*
+00041  * FFT specific. TODO: Clean Up!
+00042  */
+00043 #define USE_RUNFFT      1
+00044 #define HARDWARE_MULTIPLY       1
+00045 #define PERFORM_FFT_CALCULATION 1
+00046 #define USE_UNSIGNED_AUDIO 0
+00047 
+00048 /*
+00049 FIXME:  DK doesn't override from commandline defines. We have to therefore
+00050         ignore this include guard until we can find around this.
+00051 #else
+00052 #error "ERROR file configuration.hch multiple times included"
+00053 */
+00054 #endif /* --- _CONFIGURATION_HCH --- */
+00055 
+00056 
+

Generated on Thu Dec 9 14:37:05 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/configuration_8hch.html b/Graphic_Equalizer_Split/doc/html/configuration_8hch.html new file mode 100644 index 0000000..93a8495 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/configuration_8hch.html @@ -0,0 +1,240 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/configuration.hch File Reference + + + + + +

configuration.hch File Reference

+

+This graph shows which files directly or indirectly include this file:

Included by dependency graph
+ + + + + + + + + + + + +

+Go to the source code of this file. + + + + + + + + + + + + + + + + +

Defines

#define _CONFIGURATION_HCH   1
#define HAVE_DEBUG   0
#define HAVE_SMARTMEDIA   0
#define USE_RUNFFT   1
#define HARDWARE_MULTIPLY   1
#define PERFORM_FFT_CALCULATION   1
#define USE_UNSIGNED_AUDIO   0
+


Detailed Description

+

+Graphic Equalizer API

+

+Project information.

+Project Graphic Equalizer
+
Author:
O.M. Schinagl
+
Date:
20041101
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041101: O.M. Schinagl
+ Initial version +

+Definition in file configuration.hch.


Define Documentation

+

+ + + + +
+ + + + +
#define _CONFIGURATION_HCH   1
+
+ + + + + +
+   + + +

+ +

+Definition at line 20 of file configuration.hch.

+

+ + + + +
+ + + + +
#define HAVE_DEBUG   0
+
+ + + + + +
+   + + +

+ +

+Definition at line 27 of file configuration.hch.

+

+ + + + +
+ + + + +
#define HAVE_SMARTMEDIA   0
+
+ + + + + +
+   + + +

+ +

+Definition at line 36 of file configuration.hch.

+

+ + + + +
+ + + + +
#define USE_RUNFFT   1
+
+ + + + + +
+   + + +

+ +

+Definition at line 43 of file configuration.hch.

+

+ + + + +
+ + + + +
#define HARDWARE_MULTIPLY   1
+
+ + + + + +
+   + + +

+ +

+Definition at line 44 of file configuration.hch.

+

+ + + + +
+ + + + +
#define PERFORM_FFT_CALCULATION   1
+
+ + + + + +
+   + + +

+ +

+Definition at line 45 of file configuration.hch.

+

+ + + + +
+ + + + +
#define USE_UNSIGNED_AUDIO   0
+
+ + + + + +
+   + + +

+ +

+Definition at line 46 of file configuration.hch.

+


Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/configuration_8hch__dep__incl.map b/Graphic_Equalizer_Split/doc/html/configuration_8hch__dep__incl.map new file mode 100644 index 0000000..0c90433 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/configuration_8hch__dep__incl.map @@ -0,0 +1,10 @@ +base referer +rect $audio_8hcc.html 7,7 87,34 +rect $display_8hcc.html 111,7 199,34 +rect $eventhandler_8hcc.html 223,7 346,34 +rect $events_8hcc.html 370,7 455,34 +rect $fft_8hcc.html 479,7 538,34 +rect $main_8hcc.html 562,7 637,34 +rect $mouse_8hcc.html 661,7 746,34 +rect $runfft_8hcc.html 770,7 847,34 +rect $smartmedia_8hcc.html 871,7 989,34 diff --git a/Graphic_Equalizer_Split/doc/html/configuration_8hch__dep__incl.md5 b/Graphic_Equalizer_Split/doc/html/configuration_8hch__dep__incl.md5 new file mode 100644 index 0000000..64cf2d9 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/configuration_8hch__dep__incl.md5 @@ -0,0 +1 @@ +0b1a3fcf1ab800e34bed7bf1922c4760 \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/configuration_8hch__dep__incl.png b/Graphic_Equalizer_Split/doc/html/configuration_8hch__dep__incl.png new file mode 100644 index 0000000..6581c6e Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/configuration_8hch__dep__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/dir_000000.html b/Graphic_Equalizer_Split/doc/html/dir_000000.html new file mode 100644 index 0000000..dbd5d83 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/dir_000000.html @@ -0,0 +1,20 @@ + + +Graphic Equalizer 2: C:/ Directory Reference + + + + + +

C: Directory Reference

+ + + + +

Directories

directory Project Marcel & Oliver
+
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/dir_000001.html b/Graphic_Equalizer_Split/doc/html/dir_000001.html new file mode 100644 index 0000000..61512ed --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/dir_000001.html @@ -0,0 +1,20 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/ Directory Reference + + + + + +

Project Marcel & Oliver Directory Reference

+ + + + +

Directories

directory Graphic_Equalizer
+
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/dir_000002.html b/Graphic_Equalizer_Split/doc/html/dir_000002.html new file mode 100644 index 0000000..2e70b5e --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/dir_000002.html @@ -0,0 +1,22 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/ Directory Reference + + + + + +

Graphic_Equalizer Directory Reference

+ + + + + + +

Directories

directory include
directory src
+
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/dir_000003.html b/Graphic_Equalizer_Split/doc/html/dir_000003.html new file mode 100644 index 0000000..466ed9f --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/dir_000003.html @@ -0,0 +1,49 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/ Directory Reference + + + + + +

include Directory Reference

+ + + + + + + + + + + + +

+

+ + + + + + + + + + + + + + + + + + + +

Files

file  audio.hch
file  configuration.hch
file  display.hch
file  display_shared.hch
 Datastructures and defines for usage when interacting with the display library.
file  eventhandler.hch
file  eventhandler_shared.hch
file  events.hch
file  fft.hch
file  mouse.hch
file  mouse_shared.hch
file  runfft.hch
file  smartmedia.hch
file  smartmedia_shared.hch
file  weights_256.hch
+
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/dir_000004.html b/Graphic_Equalizer_Split/doc/html/dir_000004.html new file mode 100644 index 0000000..bed344b --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/dir_000004.html @@ -0,0 +1,36 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/ Directory Reference + + + + + +

src Directory Reference

+ + + + + + + + + + + + + + + + + + + + +

Files

file  audio.hcc
file  display.hcc
file  eventhandler.hcc
file  events.hcc
file  fft.hcc
file  main.hcc
file  mouse.hcc
file  runfft.hcc
file  smartmedia.hcc
+
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/dirs.html b/Graphic_Equalizer_Split/doc/html/dirs.html new file mode 100644 index 0000000..8a34b30 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/dirs.html @@ -0,0 +1,25 @@ + + +Graphic Equalizer 2: Directory Hierarchy + + + + +

Graphic Equalizer 2 Directories

This directory hierarchy is sorted roughly, but not completely, alphabetically: +
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/display_8hcc-source.html b/Graphic_Equalizer_Split/doc/html/display_8hcc-source.html new file mode 100644 index 0000000..6160bc7 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/display_8hcc-source.html @@ -0,0 +1,310 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/display.hcc Source File + + + + + +

display.hcc

Go to the documentation of this file.
00001 
+00019 /*
+00020  * Set the Clock rate for this domain. 25.175 Mhz is required for the Video output.
+00021  */
+00022 #define PAL_TARGET_CLOCK_RATE 25175000
+00023 
+00024 /******** System Includes *************/
+00025 #include <stdlib.hch>
+00026 
+00027 #include "pal_master.hch"
+00028 
+00029 /******** Application Includes ********/
+00030 #include "configuration.hch"
+00031 #include "audio.hch"
+00032 #include "eventhandler_shared.hch"
+00033 #include "mouse_shared.hch"
+00034 #include "smartmedia_shared.hch"
+00035 #include "display_shared.hch"
+00036 #include "display.hch"
+00037 
+00038 #if HAVE_DEBUG
+00039         #include "debug.hch"
+00040 #endif
+00041 
+00042 
+00043 
+00044 /*
+00045  * Channel to notify others when new mousedata is available. If so
+00046  * Then mousedata struct is updated with shared data.
+00047  */
+00048 chan unsigned 1 maskupdate_notification;
+00049 
+00050 
+00051 
+00065 void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events, mousedata_t *mousedata) {
+00066         /*
+00067          * Setup macro's RAM/Video handles and to coordinate pixel writing.
+00068          */
+00069         macro expr CLOCKRATE = PAL_ACTUAL_CLOCK_RATE;
+00070         macro expr VIDEOOUT = PalVideoOutOptimalCT(CLOCKRATE);
+00071         macro expr RAM_BANK0 = PalPL2RAMCT(0);
+00072         macro expr DW = PalPL2RAMGetMaxDataWidthCT();
+00073         macro expr AW = PalPL2RAMGetMaxAddressWidthCT();
+00074         macro expr VISIBLEX = PalVideoOutGetVisibleX(VIDEOOUT, CLOCKRATE);
+00075         macro expr TOTALX = PalVideoOutGetTotalX(VIDEOOUT, CLOCKRATE);
+00076         macro expr TOTALY = PalVideoOutGetTotalY(VIDEOOUT);
+00077         macro expr SCANX = PalVideoOutGetX(VIDEOOUT);
+00078         macro expr SCANY = PalVideoOutGetY(VIDEOOUT);
+00079         
+00080         unsigned DW pixeldata;
+00081         unsigned 24 visual_graph_color;
+00082         unsigned AW address, address_offset;
+00083 
+00084 
+00085 
+00086         /*
+00087          * If the passed button_state tells us the button is active, then we
+00088          * the button is 'on' and we draw it inverted. Otherwise we draw the
+00089          * area of the button normally.
+00090          */
+00091         macro proc draw_button(button_state) {
+00092                 if (button_state == pixeldata[31:24]) {
+00093                         PalVideoOutWrite(VIDEOOUT, ~PIXEL);
+00094                 } else {
+00095                         PalVideoOutWrite(VIDEOOUT, PIXEL);
+00096                 }
+00097         }
+00098 
+00099         /*
+00100          * Prime Rendering Pipeline to start where the skin starts.
+00101          */
+00102         PalPL2RAMSetReadAddress(RAM_BANK0, ADDRESS_SKIN_START);
+00103 
+00104         /*
+00105          * Run the following tasks indefinatly and in parallel
+00106          */
+00107         while (TRUE) {
+00108                 par {
+00109                         /*
+00110                          * Before starting this loop we allready set the the
+00111                          * address. Therefor we can start reading the
+00112                          * previously set address and prepare the next address
+00113                          * for the next cycle.
+00114                          */
+00115                         PalPL2RAMRead(RAM_BANK0, &pixeldata);
+00116                         PalPL2RAMSetReadAddress(RAM_BANK0, address_offset +address);
+00117 
+00118                         /*
+00119                          */
+00120                         switch (events->mode) {
+00121                                 case MODE_HELP:
+00122                                         address_offset = ADDRESS_HELP_START;
+00123                                         break;
+00124                                 case MODE_GRAPH:
+00125                                         address_offset = ADDRESS_GRAPHMASK_START;
+00126                                         break;
+00127                                 default:
+00128                                         address_offset = ADDRESS_SKIN_START;
+00129                                         break;
+00130                         }
+00131 
+00132                         if (MODE_GRAPH == events->mode) {
+00133                                 par {
+00134                                         visual_graph_color = ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[31:24]]) << 1) @ ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[31:24]]) << -1) @ ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[31:24]]) << 0);
+00135                                         PalVideoOutWrite(VIDEOOUT, 0 @ visual_graph_color);
+00136                                 }
+00137                         } else {
+00138                                 /*
+00139                                  * Determin what to draw where here. Every case has an
+00140                                  * if else statement comparing wether to draw something
+00141                                  * special or the background. Every specific drawing
+00142                                  * obviously only happens in the masked area.
+00143                                  */
+00144                                 switch (pixeldata[31:24]) {
+00145                                         /*
+00146                                          */
+00147                                         case AREA_WAVEFORM:
+00148                                                 if (SCANY == 0 @ skindata->area_waveform_bottom -(0 @ (audiodata->ifft_info.read[((SCANX -(0 @ skindata->area_waveform_left)) <-8)]))) {
+00149                                                         PalVideoOutWrite(VIDEOOUT, skindata->color_area_waveform);
+00150                                                 } else {
+00151                                                         PalVideoOutWrite(VIDEOOUT, PIXEL);
+00152                                                 }
+00153                                                 break;
+00154 
+00155                                         /*
+00156                                          * Volume control over the Y-axis.
+00157                                          */
+00158                                         case AREA_VOLUME_YAXIS:
+00159                                                 /*
+00160                                                  * The volume_position stores the
+00161                                                  * highest point of our bar. Every
+00162                                                  * pixel after this point is drawn.
+00163                                                  */
+00164                                                 if (SCANY >= 0 @ events->volume_position) {
+00165                                                         PalVideoOutWrite(VIDEOOUT, skindata->color_area_volume);
+00166                                                 } else {
+00167                                                         PalVideoOutWrite(VIDEOOUT, PIXEL);
+00168                                                 }
+00169                                                 break;
+00170                         
+00171                                         /*
+00172                                          * Spectrum Analyzer
+00173                                          */
+00174                                         case AREA_SPECTRUM_ANALYZER:
+00175                                                 /*
+00176                                                  * We draw every pixel that is smaller TODO
+00177                                                  */
+00178                                                 if ((SCANY >= (0 @ skindata->area_spectrum_bottom) -(0 @ audiodata->fft_info.read[(SCANX -(0 @ skindata->area_spectrum_left))[9:2]])) && ((SCANX -(0 @ skindata->area_spectrum_left)) <- 2)) {
+00179                                                         PalVideoOutWrite(VIDEOOUT, PIXEL_SPECTRUM);
+00180                                                 } else {
+00181                                                         PalVideoOutWrite(VIDEOOUT, PIXEL);
+00182                                                 }
+00183                                                 break;
+00184 
+00185                                         /*
+00186                                          * Since all buttons are drawn equally, either
+00187                                          * we draw them normally or we inverse them, we
+00188                                          * can handle them almost equally.
+00189                                          */
+00190                                         case BUTTON_PRESET_1:   /* fall through */
+00191                                         case BUTTON_PRESET_2:   /* fall through */
+00192                                         case BUTTON_PRESET_3:   /* fall through */
+00193                                         case BUTTON_PRESET_4:   /* fall through */
+00194                                         case BUTTON_PRESET_5:   /* fall through */
+00195                                         case BUTTON_PRESET_6:
+00196                                                 /*
+00197                                                  * The active preset tells us what
+00198                                                  * button is currently enabled. We must
+00199                                                  * however not forget to add the preset
+00200                                                  * button offset to possibly match it
+00201                                                  * with the current mask.
+00202                                                  */
+00203                                                 draw_button((events->active_preset +BUTTON_PRESET_1) <- 8);
+00204                                                 break;
+00205 
+00206                                         case BUTTON_PRECISE:            /* fall through */
+00207                                         case BUTTON_CONCAVE_HALF:       /* fall through */
+00208                                         case BUTTON_CONVEX_HALF:        /* fall through */
+00209                                         case BUTTON_CONCAVE_FULL:       /* fall through */
+00210                                         case BUTTON_CONVEX_FULL: 
+00211                                                 /*
+00212                                                  * equalizer mode tells us what button
+00213                                                  * is currently enabled. By adding the
+00214                                                  * equalizer mode button offset we can
+00215                                                  * safley check wether it matches our
+00216                                                  * mask.
+00217                                                  */
+00218                                                 draw_button((0 @ events->equalizer_mode) +BUTTON_PRECISE);
+00219                                                 break;
+00220 
+00221                                         case BUTTON_LOG:
+00222                                                 /*
+00223                                                  * 
+00224                                                  */
+00225                                                 draw_button((0 @ audiodata->display_log) +BUTTON_LOG);
+00226                                                 break;
+00227 
+00228                                         /*
+00229                                          * The default case is split up into two parts
+00230                                          * actually. This is because we have 128 bands
+00231                                          * for the equalizer and thus as many mask
+00232                                          * entries. Since we don't want 128 identical
+00233                                          * cases we check wether the equalizer mask is
+00234                                          * currently active and if so draw it. If this
+00235                                          * is not the case we simply draw the
+00236                                          * background.
+00237                                          */
+00238                                         default:
+00239                                         /* (pixeldata[31:24] <= AREA_EQUALIZER_MAX) &&  */
+00240                                                 if ((AREA_EQUALIZER_MIN <= pixeldata[31:24]) && (!events->locked_display)) {
+00241                                                         if ((SCANY == 0 @ events->equalizer_display[(pixeldata[31:24] -AREA_EQUALIZER_MIN) <- 7]) || ((SCANY +1) == 0 @ events->equalizer_display[(pixeldata[31:24] -AREA_EQUALIZER_MIN) <- 7])) {
+00242                                                                 PalVideoOutWrite(VIDEOOUT, skindata->color_equalizer);
+00243                                                         } else {
+00244                                                                 PalVideoOutWrite(VIDEOOUT, PIXEL);
+00245                                                         }
+00246                                                 } else {
+00247                                                         PalVideoOutWrite(VIDEOOUT, PIXEL);
+00248                                                 }
+00249                                         break;
+00250                                 }
+00251                         }
+00252 
+00253                         /*
+00254                          * We compare our current X and Y scan positions of the
+00255                          * output to the x and y data of the mouse. When those
+00256                          * are equal we set the current mask to the mask stored
+00257                          * in memory at that location. We then know what mask
+00258                          * is to be used for events.
+00259                          */
+00260                         if (MOUSE_UPDATED == mousedata->status) {
+00261                                 if ((SCANX == 0 @ mousedata->x) && (SCANY == 0 @ mousedata->y)) {
+00262                                         par {
+00263                                                 events->mask = pixeldata[31:24];
+00264                                                 mousedata->status = MOUSE_NOT_UPDATED;
+00265                                                 maskupdate_notification ! MOUSE_UPDATED;
+00266                                         }
+00267                                 } else {
+00268                                         delay;
+00269                                 }
+00270                         } else {
+00271                                 delay;
+00272                         }
+00273 
+00274                         /*
+00275                          * The current position of the screen can lay in an
+00276                          * area called the blanking area. We don't have data
+00277                          * for this area as it is not drawn. We therefor have
+00278                          * to determin wether we are beyond the visible area of
+00279                          * the screen, but before the end of the total width of
+00280                          * the screen. Our pipeline consists of 5 total stages.
+00281                          * Therefor we have to substract 5 pixels.
+00282                          */
+00283                         if ((SCANX > (VISIBLEX - 5)) && (SCANX <= (TOTALX - 5))) {
+00284                                 /*
+00285                                  * We are in the blanking area of the screen.
+00286                                  * If we are on the last line, and thus last
+00287                                  * pixel we reset our address counter.
+00288                                  */
+00289                                 if (SCANY == (TOTALY -1)) {
+00290                                         /*
+00291                                          * Reset our draw address counter to 0.
+00292                                          */
+00293                                         address = 0;
+00294                                 } else {
+00295                                         /*
+00296                                          * We have reached the end of the
+00297                                          * visible line, but not the end of
+00298                                          * the screen. Therefore do nothing.
+00299                                          */
+00300                                         delay;
+00301                                 }
+00302                         } else {
+00303                                 /*
+00304                                  * Increase the memory counter for each pixel
+00305                                  * drawn thus keeping the memory location in
+00306                                  * sync with the current pixel position.
+00307                                  */
+00308                                 address++;
+00309                         }
+00310                 }
+00311         }
+00312 } /* --- display_main() --- */
+00313 
+00314 
+00315 
+00328 void reload_equalizer(events_t *events, unsigned 4 *equalizer_levels) {
+00329         unsigned 7 equalizer_band;
+00330 
+00331         events->locked_display = TRUE;
+00332         delay;
+00333         do {
+00334                 events->equalizer_display[equalizer_band] = equalizer_table_inv[equalizer_levels[equalizer_band]];
+00335                 equalizer_band++;
+00336         } while (equalizer_band);
+00337         events->locked_display = FALSE;
+00338 } /* --- reload_equalizer() --- */
+

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/display_8hcc.html b/Graphic_Equalizer_Split/doc/html/display_8hcc.html new file mode 100644 index 0000000..97893f6 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/display_8hcc.html @@ -0,0 +1,252 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/display.hcc File Reference + + + + + +

display.hcc File Reference

#include <stdlib.hch>
+#include "pal_master.hch"
+#include "configuration.hch"
+#include "audio.hch"
+#include "eventhandler_shared.hch"
+#include "mouse_shared.hch"
+#include "smartmedia_shared.hch"
+#include "display_shared.hch"
+#include "display.hch"
+ +

+Include dependency graph for display.hcc:

Include dependency graph
+ + + + + + + + + + +

+Go to the source code of this file. + + + + + + + + + + + + + + +

Defines

#define PAL_TARGET_CLOCK_RATE   25175000

Functions

void display_main (skindata_t *skindata, audiodata_t *audiodata, events_t *events, mousedata_t *mousedata)
 This routine handles all drawing of pixels. It never returns!
void reload_equalizer (events_t *events, unsigned 4 *equalizer_levels)
 This function copies the supplied equalizer values to the array used for displaying equalizer data.

Variables

chan unsigned maskupdate_notification
+


Detailed Description

+

+Graphic Equalizer API

+

+Project information.

+Project Graphic Equalizer
+
Author:
O.M. Schinagl
+
Date:
20041011
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041011: O.M. Schinagl
+ Initial version +

+Definition in file display.hcc.


Define Documentation

+

+ + + + +
+ + + + +
#define PAL_TARGET_CLOCK_RATE   25175000
+
+ + + + + +
+   + + +

+ +

+Definition at line 22 of file display.hcc.

+


Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void display_main skindata_t skindata,
audiodata_t audiodata,
events_t events,
mousedata_t mousedata
+
+ + + + + +
+   + + +

+This routine handles all drawing of pixels. It never returns! +

+

Parameters:
+ + + + + +
*skindata struct with all skin information.
*audiodata struct with (i)fft data to be drawn.
*events struct with all events.
*mousedata struct with coordinates to current. X en Y.
+
+
Returns:
Never Returns.
+
Return values:
+ + +
void 
+
+ +

+Definition at line 65 of file display.hcc. +

+References events_t::active_preset, ADDRESS_SKIN_START, AREA_EQUALIZER_MIN, AREA_SPECTRUM_ANALYZER, AREA_VOLUME_YAXIS, AREA_WAVEFORM, BUTTON_CONCAVE_FULL, BUTTON_CONCAVE_HALF, BUTTON_CONVEX_FULL, BUTTON_CONVEX_HALF, BUTTON_LOG, BUTTON_PRECISE, BUTTON_PRESET_1, BUTTON_PRESET_2, BUTTON_PRESET_3, BUTTON_PRESET_4, BUTTON_PRESET_5, BUTTON_PRESET_6, audiodata_t::display_log, events_t::equalizer_display, events_t::equalizer_mode, events_t::locked_display, events_t::mask, maskupdate_notification, events_t::mode, MODE_GRAPH, MODE_HELP, MOUSE_UPDATED, PIXEL, PIXEL_SPECTRUM, mousedata_t::status, events_t::volume_position, mousedata_t::x, and mousedata_t::y. +

+Referenced by main().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void reload_equalizer events_t events,
unsigned 4 *  equalizer_levels
+
+ + + + + +
+   + + +

+This function copies the supplied equalizer values to the array used for displaying equalizer data. +

+

Parameters:
+ + + +
*events events struct
*equalizer_levels pointer to 128 entries where equalizer is to be copied from.
+
+
Returns:
void
+
Return values:
+ + +
void 
+
+ +

+Definition at line 328 of file display.hcc. +

+References events_t::equalizer_display, equalizer_table_inv, and events_t::locked_display. +

+Referenced by eventhandler_main().

+


Variable Documentation

+

+ + + + +
+ + + + +
chan unsigned maskupdate_notification
+
+ + + + + +
+   + + +

+ +

+Definition at line 48 of file display.hcc. +

+Referenced by display_main(), and eventhandler_main().

+


Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/display_8hcc__incl.map b/Graphic_Equalizer_Split/doc/html/display_8hcc__incl.map new file mode 100644 index 0000000..81a6f64 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/display_8hcc__incl.map @@ -0,0 +1,8 @@ +base referer +rect $configuration_8hch.html 245,7 370,34 +rect $audio_8hch.html 394,7 474,34 +rect $eventhandler__shared_8hch.html 498,7 671,34 +rect $mouse__shared_8hch.html 695,7 831,34 +rect $smartmedia__shared_8hch.html 855,7 1021,34 +rect $display__shared_8hch.html 1045,7 1181,34 +rect $display_8hch.html 1205,7 1293,34 diff --git a/Graphic_Equalizer_Split/doc/html/display_8hcc__incl.md5 b/Graphic_Equalizer_Split/doc/html/display_8hcc__incl.md5 new file mode 100644 index 0000000..11ba440 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/display_8hcc__incl.md5 @@ -0,0 +1 @@ +5e133a2b43b5f61d89ce22cb97bd0bbb \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/display_8hcc__incl.png b/Graphic_Equalizer_Split/doc/html/display_8hcc__incl.png new file mode 100644 index 0000000..8341c12 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/display_8hcc__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/display_8hch-source.html b/Graphic_Equalizer_Split/doc/html/display_8hch-source.html new file mode 100644 index 0000000..d345da6 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/display_8hch-source.html @@ -0,0 +1,49 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/display.hch Source File + + + + + +

display.hch

Go to the documentation of this file.
00001 
+00019 #ifndef _DISPLAY_HCH
+00020 #define _DISPLAY_HCH 1
+00021 
+00022 
+00023 
+00024 /*
+00025  * Set the color for various items that will be drawn on screen.
+00026  */
+00027 #define PIXEL                   (pixeldata <- 24)
+00028 #define PIXEL_VOLUME            (0x2d74b5)
+00029 #define PIXEL_EQUALIZER         (0xc7541f)
+00030 #define PIXEL_SPECTRUM          ((((skindata->area_spectrum_bottom -(SCANY <- 10)) <<1) <- 8) @ 0x00 @ (((skindata->area_spectrum_bottom -(SCANY <- 10)) <<1) <- 8))
+00031 #define PIXEL_WAVEFORM          (0x2d74b5)
+00032 
+00033 
+00034 
+00035 /*
+00036  * Main display loop. This function never returns! It handles display output.
+00037  * It needs to respond to certain events set by the events pointer. Also it
+00038  * informs events what the current mask is. To optain the current mask we need
+00039  * the X and Y coordinates from our mousedata pointer.
+00040  */
+00041 void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events, mousedata_t *mousedata);
+00042 
+00043 
+00044 
+00045 /*
+00046  * reload equalizer bars into the display memory.
+00047  */
+00048 void reload_equalizer(events_t *events, unsigned 4 *equalizer_levels_ptr);
+00049 
+00050 #else
+00051 #error "ERROR file display.hch multiple times included"
+00052 #endif /* --- _DISPLAY_HCH --- */
+

Generated on Thu Dec 9 14:37:05 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/display_8hch.html b/Graphic_Equalizer_Split/doc/html/display_8hch.html new file mode 100644 index 0000000..6dc74ce --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/display_8hch.html @@ -0,0 +1,348 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/display.hch File Reference + + + + + +

display.hch File Reference

+

+This graph shows which files directly or indirectly include this file:

Included by dependency graph
+ + + + + + + +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + +

Defines

#define _DISPLAY_HCH   1
#define PIXEL   (pixeldata <- 24)
#define PIXEL_VOLUME   (0x2d74b5)
#define PIXEL_EQUALIZER   (0xc7541f)
#define PIXEL_SPECTRUM   ((((skindata->area_spectrum_bottom -(SCANY <- 10)) <<1) <- 8) @ 0x00 @ (((skindata->area_spectrum_bottom -(SCANY <- 10)) <<1) <- 8))
#define PIXEL_WAVEFORM   (0x2d74b5)

Functions

void display_main (skindata_t *skindata, audiodata_t *audiodata, events_t *events, mousedata_t *mousedata)
 This routine handles all drawing of pixels. It never returns!
void reload_equalizer (events_t *events, unsigned 4 *equalizer_levels_ptr)
 This function copies the supplied equalizer values to the array used for displaying equalizer data.
+


Detailed Description

+

+Graphic Equalizer API

+

+Project information.

+Project Graphic Equalizer
+
Author:
+
Date:
20041011
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041011:
+ Initial version +

+Definition in file display.hch.


Define Documentation

+

+ + + + +
+ + + + +
#define _DISPLAY_HCH   1
+
+ + + + + +
+   + + +

+ +

+Definition at line 20 of file display.hch.

+

+ + + + +
+ + + + +
#define PIXEL   (pixeldata <- 24)
+
+ + + + + +
+   + + +

+ +

+Definition at line 27 of file display.hch. +

+Referenced by display_main().

+

+ + + + +
+ + + + +
#define PIXEL_VOLUME   (0x2d74b5)
+
+ + + + + +
+   + + +

+ +

+Definition at line 28 of file display.hch.

+

+ + + + +
+ + + + +
#define PIXEL_EQUALIZER   (0xc7541f)
+
+ + + + + +
+   + + +

+ +

+Definition at line 29 of file display.hch.

+

+ + + + +
+ + + + +
#define PIXEL_SPECTRUM   ((((skindata->area_spectrum_bottom -(SCANY <- 10)) <<1) <- 8) @ 0x00 @ (((skindata->area_spectrum_bottom -(SCANY <- 10)) <<1) <- 8))
+
+ + + + + +
+   + + +

+ +

+Definition at line 30 of file display.hch. +

+Referenced by display_main().

+

+ + + + +
+ + + + +
#define PIXEL_WAVEFORM   (0x2d74b5)
+
+ + + + + +
+   + + +

+ +

+Definition at line 31 of file display.hch.

+


Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void display_main skindata_t skindata,
audiodata_t audiodata,
events_t events,
mousedata_t mousedata
+
+ + + + + +
+   + + +

+This routine handles all drawing of pixels. It never returns! +

+

Parameters:
+ + + + + +
*skindata struct with all skin information.
*audiodata struct with (i)fft data to be drawn.
*events struct with all events.
*mousedata struct with coordinates to current. X en Y.
+
+
Returns:
Never Returns.
+
Return values:
+ + +
void 
+
+ +

+Definition at line 65 of file display.hcc. +

+References events_t::active_preset, ADDRESS_SKIN_START, AREA_EQUALIZER_MIN, AREA_SPECTRUM_ANALYZER, AREA_VOLUME_YAXIS, AREA_WAVEFORM, BUTTON_CONCAVE_FULL, BUTTON_CONCAVE_HALF, BUTTON_CONVEX_FULL, BUTTON_CONVEX_HALF, BUTTON_LOG, BUTTON_PRECISE, BUTTON_PRESET_1, BUTTON_PRESET_2, BUTTON_PRESET_3, BUTTON_PRESET_4, BUTTON_PRESET_5, BUTTON_PRESET_6, audiodata_t::display_log, events_t::equalizer_display, events_t::equalizer_mode, events_t::locked_display, events_t::mask, maskupdate_notification, events_t::mode, MODE_GRAPH, MODE_HELP, MOUSE_UPDATED, PIXEL, PIXEL_SPECTRUM, mousedata_t::status, events_t::volume_position, mousedata_t::x, and mousedata_t::y. +

+Referenced by main().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void reload_equalizer events_t events,
unsigned 4 *  equalizer_levels
+
+ + + + + +
+   + + +

+This function copies the supplied equalizer values to the array used for displaying equalizer data. +

+

Parameters:
+ + + +
*events events struct
*equalizer_levels pointer to 128 entries where equalizer is to be copied from.
+
+
Returns:
void
+
Return values:
+ + +
void 
+
+ +

+Definition at line 328 of file display.hcc. +

+References events_t::equalizer_display, equalizer_table_inv, and events_t::locked_display. +

+Referenced by eventhandler_main().

+


Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/display_8hch__dep__incl.map b/Graphic_Equalizer_Split/doc/html/display_8hch__dep__incl.map new file mode 100644 index 0000000..30f5f5c --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/display_8hch__dep__incl.map @@ -0,0 +1,5 @@ +base referer +rect $display_8hcc.html 8,7 96,34 +rect $eventhandler_8hcc.html 120,7 242,34 +rect $main_8hcc.html 266,7 341,34 +rect $smartmedia_8hcc.html 365,7 482,34 diff --git a/Graphic_Equalizer_Split/doc/html/display_8hch__dep__incl.md5 b/Graphic_Equalizer_Split/doc/html/display_8hch__dep__incl.md5 new file mode 100644 index 0000000..4d52805 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/display_8hch__dep__incl.md5 @@ -0,0 +1 @@ +fbc7c2d77330776f0959b271562e7250 \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/display_8hch__dep__incl.png b/Graphic_Equalizer_Split/doc/html/display_8hch__dep__incl.png new file mode 100644 index 0000000..f842760 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/display_8hch__dep__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/display__shared_8hch-source.html b/Graphic_Equalizer_Split/doc/html/display__shared_8hch-source.html new file mode 100644 index 0000000..970054b --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/display__shared_8hch-source.html @@ -0,0 +1,62 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/display_shared.hch Source File + + + + + +

display_shared.hch

Go to the documentation of this file.
00001 
+00020 #ifndef _DISPLAY_SHARED_HCH
+00021 #define _DISPLAY_SHARED_HCH 1
+00022 
+00023 
+00024 
+00029 struct skindata_t {
+00034         struct skin_info_t {
+00035                 unsigned 10 area_bottom;        
+00036                 unsigned 10 area_top;           
+00037                 unsigned 10 area_left;          
+00038                 unsigned 10 area_right;         
+00039                 unsigned 24 color_primary;      
+00040                 unsigned 24 color_secondary;    
+00041         };
+00042         struct skin_info_t waveform;    
+00043         struct skin_info_t spectrum;    
+00044         struct skin_info_t volume;      
+00045         struct skin_info_t equalizer;   
+00046 };
+00047 
+00048 
+00049 
+00050 #define AREA_WAVEFORM           0x01    
+00051 #define AREA_VOLUME_YAXIS       0x02    
+00052 #define AREA_SPECTRUM_ANALYZER  0x03    
+00054 #define BUTTON_LOG              0x04    
+00055 #define BUTTON_DEMO             0x05    
+00056 #define BUTTON_RESET            0x06    
+00058 #define BUTTON_PRESET_1         0x07    
+00059 #define BUTTON_PRESET_2         0x08    
+00060 #define BUTTON_PRESET_3         0x09    
+00061 #define BUTTON_PRESET_4         0x0a    
+00062 #define BUTTON_PRESET_5         0x0b    
+00063 #define BUTTON_PRESET_6         0x0c    
+00065 #define BUTTON_CONVEX_FULL      0x0d    
+00066 #define BUTTON_CONVEX_HALF      0x0e    
+00067 #define BUTTON_PRECISE          0x0f    
+00068 #define BUTTON_CONCAVE_HALF     0x10    
+00069 #define BUTTON_CONCAVE_FULL     0x11    
+00071 #define BUTTON_HELP             0x12    
+00072 #define BUTTON_MODE             0x13    
+00074 #define AREA_EQUALIZER_MIN      0x80    
+00075 #define AREA_EQUALIZER_MAX      0xff    
+00077 #else
+00078 #error "ERROR file display_shared.hch multiple times included"
+00079 #endif /* --- _DISPLAY_SHARED_HCH --- */
+00080 
+

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/display__shared_8hch.html b/Graphic_Equalizer_Split/doc/html/display__shared_8hch.html new file mode 100644 index 0000000..7d51724 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/display__shared_8hch.html @@ -0,0 +1,691 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/display_shared.hch File Reference + + + + + +

display_shared.hch File Reference

Datastructures and defines for usage when interacting with the display library. More... +

+ +

+This graph shows which files directly or indirectly include this file:

Included by dependency graph
+ + + + + + + +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  skindata_t
 This struct contains all area- dimensions and color information for the skin. More...
struct  skindata_t::skin_info_t
 Structure containing the four boundry limits of an area and maximal two colors per area. More...

Defines

#define _DISPLAY_SHARED_HCH   1
#define AREA_WAVEFORM   0x01
#define AREA_VOLUME_YAXIS   0x02
#define AREA_SPECTRUM_ANALYZER   0x03
#define BUTTON_LOG   0x04
#define BUTTON_DEMO   0x05
#define BUTTON_RESET   0x06
#define BUTTON_PRESET_1   0x07
#define BUTTON_PRESET_2   0x08
#define BUTTON_PRESET_3   0x09
#define BUTTON_PRESET_4   0x0a
#define BUTTON_PRESET_5   0x0b
#define BUTTON_PRESET_6   0x0c
#define BUTTON_CONVEX_FULL   0x0d
#define BUTTON_CONVEX_HALF   0x0e
#define BUTTON_PRECISE   0x0f
#define BUTTON_CONCAVE_HALF   0x10
#define BUTTON_CONCAVE_FULL   0x11
#define BUTTON_HELP   0x12
#define BUTTON_MODE   0x13
#define AREA_EQUALIZER_MIN   0x80
#define AREA_EQUALIZER_MAX   0xff
+


Detailed Description

+Datastructures and defines for usage when interacting with the display library. +

+

+Project information.

+Graphic Equalizer 2
+
Author:
+
Date:
20041011
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041011:
+ Initial version +

+Definition in file display_shared.hch.


Define Documentation

+

+ + + + +
+ + + + +
#define _DISPLAY_SHARED_HCH   1
+
+ + + + + +
+   + + +

+ +

+Definition at line 21 of file display_shared.hch.

+

+ + + + +
+ + + + +
#define AREA_WAVEFORM   0x01
+
+ + + + + +
+   + + +

+Waveform area. +

+Definition at line 50 of file display_shared.hch. +

+Referenced by display_main().

+

+ + + + +
+ + + + +
#define AREA_VOLUME_YAXIS   0x02
+
+ + + + + +
+   + + +

+Volume control on the Y plane. +

+Definition at line 51 of file display_shared.hch. +

+Referenced by display_main(), and eventhandler_main().

+

+ + + + +
+ + + + +
#define AREA_SPECTRUM_ANALYZER   0x03
+
+ + + + + +
+   + + +

+Spectrum Analyzer area. +

+Definition at line 52 of file display_shared.hch. +

+Referenced by display_main().

+

+ + + + +
+ + + + +
#define BUTTON_LOG   0x04
+
+ + + + + +
+   + + +

+Logarithmic display button. +

+Definition at line 54 of file display_shared.hch. +

+Referenced by display_main(), and eventhandler_main().

+

+ + + + +
+ + + + +
#define BUTTON_DEMO   0x05
+
+ + + + + +
+   + + +

+Demo preset button. +

+Definition at line 55 of file display_shared.hch. +

+Referenced by eventhandler_main().

+

+ + + + +
+ + + + +
#define BUTTON_RESET   0x06
+
+ + + + + +
+   + + +

+Reset presets button. +

+Definition at line 56 of file display_shared.hch. +

+Referenced by eventhandler_main().

+

+ + + + +
+ + + + +
#define BUTTON_PRESET_1   0x07
+
+ + + + + +
+   + + +

+Button for switching to preset 1 +

+Definition at line 58 of file display_shared.hch. +

+Referenced by display_main(), and eventhandler_main().

+

+ + + + +
+ + + + +
#define BUTTON_PRESET_2   0x08
+
+ + + + + +
+   + + +

+Button for switching to preset 2 +

+Definition at line 59 of file display_shared.hch. +

+Referenced by display_main().

+

+ + + + +
+ + + + +
#define BUTTON_PRESET_3   0x09
+
+ + + + + +
+   + + +

+Button for switching to preset 3 +

+Definition at line 60 of file display_shared.hch. +

+Referenced by display_main().

+

+ + + + +
+ + + + +
#define BUTTON_PRESET_4   0x0a
+
+ + + + + +
+   + + +

+Button for switching to preset 4 +

+Definition at line 61 of file display_shared.hch. +

+Referenced by display_main().

+

+ + + + +
+ + + + +
#define BUTTON_PRESET_5   0x0b
+
+ + + + + +
+   + + +

+Button for switching to preset 5 +

+Definition at line 62 of file display_shared.hch. +

+Referenced by display_main().

+

+ + + + +
+ + + + +
#define BUTTON_PRESET_6   0x0c
+
+ + + + + +
+   + + +

+Button for switching to preset 6 +

+Definition at line 63 of file display_shared.hch. +

+Referenced by display_main().

+

+ + + + +
+ + + + +
#define BUTTON_CONVEX_FULL   0x0d
+
+ + + + + +
+   + + +

+/ - \ 'Convex' mode Button +

+Definition at line 65 of file display_shared.hch. +

+Referenced by display_main().

+

+ + + + +
+ + + + +
#define BUTTON_CONVEX_HALF   0x0e
+
+ + + + + +
+   + + +

+/\ 'Convex' mode Button +

+Definition at line 66 of file display_shared.hch. +

+Referenced by display_main().

+

+ + + + +
+ + + + +
#define BUTTON_PRECISE   0x0f
+
+ + + + + +
+   + + +

+| 'Precise' selection Button +

+Definition at line 67 of file display_shared.hch. +

+Referenced by display_main(), and eventhandler_main().

+

+ + + + +
+ + + + +
#define BUTTON_CONCAVE_HALF   0x10
+
+ + + + + +
+   + + +

+\/ 'Concave' mode Button +

+Definition at line 68 of file display_shared.hch. +

+Referenced by display_main().

+

+ + + + +
+ + + + +
#define BUTTON_CONCAVE_FULL   0x11
+
+ + + + + +
+   + + +

+\ _ / 'Concave' mode Button +

+Definition at line 69 of file display_shared.hch. +

+Referenced by display_main().

+

+ + + + +
+ + + + +
#define BUTTON_HELP   0x12
+
+ + + + + +
+   + + +

+Button to display help screen. +

+Definition at line 71 of file display_shared.hch. +

+Referenced by eventhandler_main().

+

+ + + + +
+ + + + +
#define BUTTON_MODE   0x13
+
+ + + + + +
+   + + +

+Button to change operation mode. +

+Definition at line 72 of file display_shared.hch. +

+Referenced by eventhandler_main().

+

+ + + + +
+ + + + +
#define AREA_EQUALIZER_MIN   0x80
+
+ + + + + +
+   + + +

+First bar of the Equalizer Area. +

+Definition at line 74 of file display_shared.hch. +

+Referenced by display_main(), and eventhandler_main().

+

+ + + + +
+ + + + +
#define AREA_EQUALIZER_MAX   0xff
+
+ + + + + +
+   + + +

+Last bar of the Equalizer Area. +

+Definition at line 75 of file display_shared.hch. +

+Referenced by eventhandler_main().

+


Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/display__shared_8hch__dep__incl.map b/Graphic_Equalizer_Split/doc/html/display__shared_8hch__dep__incl.map new file mode 100644 index 0000000..30f5f5c --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/display__shared_8hch__dep__incl.map @@ -0,0 +1,5 @@ +base referer +rect $display_8hcc.html 8,7 96,34 +rect $eventhandler_8hcc.html 120,7 242,34 +rect $main_8hcc.html 266,7 341,34 +rect $smartmedia_8hcc.html 365,7 482,34 diff --git a/Graphic_Equalizer_Split/doc/html/display__shared_8hch__dep__incl.md5 b/Graphic_Equalizer_Split/doc/html/display__shared_8hch__dep__incl.md5 new file mode 100644 index 0000000..2c831b5 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/display__shared_8hch__dep__incl.md5 @@ -0,0 +1 @@ +6ad6e26d3432e59b7a161de855d0e8bc \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/display__shared_8hch__dep__incl.png b/Graphic_Equalizer_Split/doc/html/display__shared_8hch__dep__incl.png new file mode 100644 index 0000000..7484dd7 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/display__shared_8hch__dep__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/doxygen.css b/Graphic_Equalizer_Split/doc/html/doxygen.css new file mode 100644 index 0000000..1d4d631 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/doxygen.css @@ -0,0 +1,271 @@ +BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { + font-family: Geneva, Arial, Helvetica, sans-serif; +} +H1 { + text-align: center; +} +CAPTION { font-weight: bold } +DIV.qindex { + width: 100%; + background-color: #eeeeff; + border: 1px solid #b0b0b0; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.nav { + width: 100%; + background-color: #eeeeff; + border: 1px solid #b0b0b0; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +A.qindex { + text-decoration: none; + font-weight: bold; + color: #1A419D; +} +A.qindex:visited { + text-decoration: none; + font-weight: bold; + color: #1A419D +} +A.qindex:hover { + text-decoration: none; + background-color: #ddddff; +} +A.qindexHL { + text-decoration: none; + font-weight: bold; + background-color: #6666cc; + color: #ffffff; + border: 1px double #9295C2; +} +A.qindexHL:hover { + text-decoration: none; + background-color: #6666cc; + color: #ffffff; +} +A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff } +A.el { text-decoration: none; font-weight: bold } +A.elRef { font-weight: bold } +A.code:link { text-decoration: none; font-weight: normal; color: #0000FF} +A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF} +A.codeRef:link { font-weight: normal; color: #0000FF} +A.codeRef:visited { font-weight: normal; color: #0000FF} +A:hover { text-decoration: none; background-color: #f2f2ff } +DL.el { margin-left: -1cm } +.fragment { + font-family: monospace +} +PRE.fragment { + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + margin-top: 4px; + margin-bottom: 4px; + margin-left: 2px; + margin-right: 8px; + padding-left: 6px; + padding-right: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } +TD.md { background-color: #F4F4FB; font-weight: bold; } +TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; } +TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; } +DIV.groupHeader { + margin-left: 16px; + margin-top: 12px; + margin-bottom: 6px; + font-weight: bold; +} +DIV.groupText { margin-left: 16px; font-style: italic; font-size: 14px } +BODY { + background: white; + color: black; + margin-right: 20px; + margin-left: 20px; +} +TD.indexkey { + background-color: #eeeeff; + font-weight: bold; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TD.indexvalue { + background-color: #eeeeff; + font-style: italic; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TR.memlist { + background-color: #f0f0f0; +} +P.formulaDsp { text-align: center; } +IMG.formulaDsp { } +IMG.formulaInl { vertical-align: middle; } +SPAN.keyword { color: #008000 } +SPAN.keywordtype { color: #604020 } +SPAN.keywordflow { color: #e08000 } +SPAN.comment { color: #800000 } +SPAN.preprocessor { color: #806020 } +SPAN.stringliteral { color: #002080 } +SPAN.charliteral { color: #008080 } +.mdTable { + border: 1px solid #868686; + background-color: #F4F4FB; +} +.mdRow { + padding: 8px 10px; +} +.mdescLeft { + padding: 0px 8px 4px 8px; + font-size: 12px; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.mdescRight { + padding: 0px 8px 4px 8px; + font-size: 12px; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.memItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 12px; +} +.memItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 13px; +} +.memTemplItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 12px; +} +.memTemplItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 13px; +} +.memTemplParams { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + color: #606060; + background-color: #FAFAFA; + font-size: 12px; +} +.search { color: #003399; + font-weight: bold; +} +FORM.search { + margin-bottom: 0px; + margin-top: 0px; +} +INPUT.search { font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #eeeeff; +} +TD.tiny { font-size: 75%; +} +a { + color: #252E78; +} +a:visited { + color: #3D2185; +} diff --git a/Graphic_Equalizer_Split/doc/html/doxygen.png b/Graphic_Equalizer_Split/doc/html/doxygen.png new file mode 100644 index 0000000..f0a274b Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/doxygen.png differ diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc-source.html b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc-source.html new file mode 100644 index 0000000..f6433b3 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc-source.html @@ -0,0 +1,299 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/eventhandler.hcc Source File + + + + + +

eventhandler.hcc

Go to the documentation of this file.
00001 
+00021 /******** System Includes *************/
+00022 #include <stdlib.hch>
+00023 
+00024 #include "pal_master.hch"
+00025 
+00026 /******** Application Includes ********/
+00027 #include "configuration.hch"
+00028 #include "audio.hch"
+00029 #include "mouse_shared.hch"
+00030 #include "eventhandler_shared.hch"
+00031 #include "eventhandler.hch"
+00032 #include "events.hch"
+00033 #include "display_shared.hch"
+00034 #include "display.hch"
+00035 
+00036 #if HAVE_DEBUG
+00037         #include "debug.hch"
+00038 #endif
+00039 
+00040 
+00041 
+00042 /*
+00043  */
+00044 extern chan unsigned 1 maskupdate_notification;
+00045 
+00046 
+00047 
+00059 void eventhandler_main(audiodata_t *audiodata, events_t *events, mousedata_t *mousedata) {
+00060         mpram {
+00061                 ram unsigned 4 write[768];      
+00062                 rom unsigned 4 read[768];       
+00063         } equalizer_levels with { block = "BlockRAM"};
+00064 
+00065         unsigned 10 preset_offset;
+00066         unsigned 10 reference_point, reference_point_right;
+00067         unsigned 5 volume_left;
+00068         unsigned 4 index_offset, index_end;
+00069         unsigned 4 equalizer_mode_local;
+00070         unsigned 1 newmaskupdate;
+00071 
+00072         load_preset(LOAD_PRESET_RESET, equalizer_levels.write);
+00073         reload_equalizer(events, &equalizer_levels.write[preset_offset]);
+00074 
+00075         while (TRUE) {
+00076                 maskupdate_notification ? newmaskupdate;
+00077 
+00078                 /*
+00079                  * First we determine what mousestate we currently have. Then
+00080                  * we check where we are to decide what to do.
+00081                  */
+00082                 switch (mousedata->state) {
+00083                         case MOUSE_STATE_ON_PRESS:
+00084                                 /*
+00085                                  * If we are displaying the graphic visual,
+00086                                  * any press returns to the application.
+00087                                  */
+00088                                 if (MODE_GRAPH == events->mode) {
+00089                                         events->mode = MODE_SKIN;
+00090                                         events->mask = 0;
+00091                                 } else {
+00092                                         delay;
+00093                                 }
+00094 
+00095                                 /*
+00096                                  */
+00097                                 if (BUTTON_MODE == events->mask) {
+00098                                         if (MODE_GRAPH == events->mode) {
+00099                                                 events->mode = MODE_SKIN;
+00100                                         } else {
+00101                                                 events->mode = MODE_GRAPH;
+00102                                         }
+00103                                 } else {
+00104                                         delay;
+00105                                 }
+00106 
+00107                                 /*
+00108                                  * If the current mask equals the help button
+00109                                  * we set display mode to help.
+00110                                  */
+00111                                 if (BUTTON_HELP == events->mask) {
+00112                                         /*
+00113                                          * Change the mode to help if it's
+00114                                          * currently not set, otherwise go back
+00115                                          * to skin mode.
+00116                                          */
+00117                                         if (MODE_HELP == events->mode) {
+00118                                                 events->mode = MODE_SKIN;
+00119                                         } else {
+00120                                                 events->mode = MODE_HELP;
+00121                                         }
+00122                                 } else {
+00123                                         delay;
+00124                                 }
+00125 
+00126                                 /*
+00127                                  * The Preset buttons span from 1 to 6 so if
+00128                                  * the mask one of those, we'll change the
+00129                                  * pointer to point to the current preset.
+00130                                  */
+00131                                 if ((BUTTON_PRESET_1 <= events->mask) && (events->mask <= BUTTON_PRESET_6)) {
+00132                                         /*
+00133                                          * The active preset is determined by
+00134                                          * the mask minus an offset. Hence
+00135                                          * ranging our active preset from 0 to
+00136                                          * 6.
+00137                                          */
+00138                                         events->active_preset = 0 @ (events->mask -BUTTON_PRESET_1);
+00139                                         /*
+00140                                          * Each equalizer is 128 bands wide,
+00141                                          * thus we need to add 128 * the preset
+00142                                          * for each different preset. This
+00143                                          * offset is calculated here.
+00144                                          */
+00145                                         preset_offset = events->active_preset << 7;
+00146                                         /*
+00147                                          * We set the pointer to the active
+00148                                          * part of the array by using the
+00149                                          * preset offset as our index. Hence
+00150                                          * depending on the selected preset
+00151                                          * we point to 0, 128, 256, 384, 512
+00152                                          * or 640.
+00153                                          */
+00154                                         audiodata->equalizer_levels_ptr = &equalizer_levels.read[preset_offset];
+00155                                         /*
+00156                                          * Finally update the equalizer bars
+00157                                          * that are drawn by the display.
+00158                                          */
+00159                                         reload_equalizer(events, &equalizer_levels.write[preset_offset]);
+00160                                 } else {
+00161                                         delay;
+00162                                 }
+00163 
+00164                                 if ((BUTTON_PRECISE <= events->mask) && (events->mask <= BUTTON_CONVEX_FULL)) {
+00165                                         events->equalizer_mode = (events->mask -BUTTON_PRECISE) <-4;
+00166                                 } else {
+00167                                         delay;
+00168                                 }
+00169 
+00170                                 /*
+00171                                  * If the demo button was pressed load the
+00172                                  * demo preset values into the presets.
+00173                                  */
+00174                                 if (BUTTON_DEMO == events->mask) {
+00175                                         load_preset(LOAD_PRESET_DEMO, equalizer_levels.write);
+00176                                         reload_equalizer(events, &equalizer_levels.write[preset_offset]);
+00177                                 }
+00178 
+00179                                 /*
+00180                                  * If the reset button was pressed load the
+00181                                  * reset values into the presets.
+00182                                  */
+00183                                 if (BUTTON_RESET == events->mask) {
+00184                                         load_preset(LOAD_PRESET_RESET, equalizer_levels.write);
+00185                                         reload_equalizer(events, &equalizer_levels.write[preset_offset]);
+00186                                 }
+00187 
+00188                                 /*
+00189                                  * If the current mask equals the log button,
+00190                                  * we flip the display_log bit.
+00191                                  */
+00192                                 if (BUTTON_LOG == events->mask) {
+00193                                         audiodata->display_log = !audiodata->display_log;
+00194                                 } else {
+00195                                         delay;
+00196                                 }
+00197 
+00198                                 break;
+00199 
+00200                         case MOUSE_STATE_DOWN:
+00201                                 /*
+00202                                  * If we are in the volume area we update the
+00203                                  * volume level for both channels.
+00204                                  */
+00205                                 if (AREA_VOLUME_YAXIS == events->mask) {
+00206                                         /*
+00207                                          * Copy the current Y cursor position
+00208                                          * to the events struct. This we then
+00209                                          * later use for drawing purposes.
+00210                                          */
+00211                                         events->volume_position = 0 @ mousedata->y;
+00212                                         /*
+00213                                          * Look the relative y-coordinate up in
+00214                                          * the volumecontrol lookup table. We
+00215                                          * make a local copy here because the
+00216                                          * RC200 call doesn't behave nicely
+00217                                          * when passing anything else.
+00218                                          */
+00219                                         volume_left = volumecontrol_table[((mousedata->y) -65) <- 6];
+00220                                         /*
+00221                                          * We feel that volume gets softer the
+00222                                          * closer it gets to the 0, and louder
+00223                                          * as it approaches 0x1f. The SetVolume
+00224                                          * RC200 call does this in an unnatural
+00225                                          * reverse way. Therefor we fix it.
+00226                                          */
+00227                                         RC200AudioOutSetVolume(!volume_left, 0x1f -volume_left, 0x1f -volume_left);
+00228                                 } else {
+00229                                         delay;
+00230                                 }
+00231 
+00232                                 if ((AREA_EQUALIZER_MIN <= events->mask) && (events->mask <= AREA_EQUALIZER_MAX)) {
+00233 
+00234                                         if (EQUALIZERMODE_PRECISE == events->equalizer_mode) {
+00235                                                 events->locked_display = TRUE;
+00236                                                 equalizer_levels.write[preset_offset +(0 @ events->mask) -AREA_EQUALIZER_MIN] = equalizer_table[mousedata->y -382];
+00237                                                 events->equalizer_display[(events->mask -AREA_EQUALIZER_MIN) <- 7] = mousedata->y;
+00238                                                 events->locked_display = FALSE;
+00239                                         } else {
+00240                                                 
+00241                                                 equalizer_mode_local = events->equalizer_mode +1;
+00242 
+00243                                                 events->locked_display = TRUE;
+00244                                                 index_offset = ((equalizer_mode_local << 1)); /* delay; */
+00245 
+00246                                                 if (events->mask < (AREA_EQUALIZER_MIN +(0 @ equalizer_mode_local))) {
+00247                                                         reference_point = events->equalizer_display[AREA_EQUALIZER_MIN -AREA_EQUALIZER_MIN];
+00248                                                         index_offset -= (((0 @ equalizer_mode_local) -(events->mask -AREA_EQUALIZER_MIN)) <- 4);
+00249                                                 } else {
+00250                                                         reference_point = events->equalizer_display[(events->mask - (0 @ equalizer_mode_local) -AREA_EQUALIZER_MIN) <- 7];
+00251                                                         index_offset -= 1;
+00252                                                 }
+00253 
+00254                                                 if (events->mask > (AREA_EQUALIZER_MAX -(0 @ equalizer_mode_local))) {
+00255                                                         reference_point_right = events->equalizer_display[AREA_EQUALIZER_MAX -AREA_EQUALIZER_MIN];
+00256                                                         index_end = (((0 @ equalizer_mode_local) -(AREA_EQUALIZER_MAX -events->mask)) <- 4) -1;
+00257                                                 } else {
+00258                                                         reference_point_right = events->equalizer_display[(events->mask + (0 @ equalizer_mode_local) -AREA_EQUALIZER_MIN) <- 7];
+00259                                                         index_end = 0;
+00260                                                 }
+00261                                                 events->locked_display = FALSE;
+00262 
+00263                                                 for (; index_offset != index_end; index_offset--) {
+00264                                                         unsigned 10 average_bar;
+00265                                                         unsigned 7 equalizer_index;
+00266                                                         unsigned 4 bar_index;
+00267                                                         
+00268                                                         if (index_offset == equalizer_mode_local) {
+00269                                                                 reference_point = reference_point_right;
+00270                                                         } else {
+00271                                                                 delay;
+00272                                                         }
+00273 
+00274                                                         if (index_offset > equalizer_mode_local) 
+00275                                                         {
+00276                                                                 bar_index = (index_offset -equalizer_mode_local);                       
+00277                                                                 equalizer_index = ((events->mask -(0 @ bar_index) -AREA_EQUALIZER_MIN) <- 7);
+00278                                                         } else 
+00279                                                         {
+00280                                                                 bar_index = (equalizer_mode_local -index_offset);
+00281                                                                 equalizer_index = ((events->mask +(0 @ bar_index) -AREA_EQUALIZER_MIN) <- 7);   
+00282                                                         }
+00283 
+00284                                                         if (reference_point > mousedata->y) {
+00285                                                                 average_bar = mousedata->y +((reference_point -mousedata->y) >> (equalizer_mode_local -bar_index));
+00286                                                         } else {
+00287                                                                 average_bar = mousedata->y -((mousedata->y -reference_point) >> (equalizer_mode_local -bar_index));
+00288                                                         }
+00289                                                                                                         
+00290                                                         events->locked_display = TRUE;
+00291                                                         equalizer_levels.write[preset_offset +(0 @ equalizer_index)] = equalizer_table[average_bar -382];
+00292                                                         events->equalizer_display[equalizer_index] = average_bar;
+00293                                                         events->locked_display = FALSE;                                         
+00294                                                 }
+00295                                         }
+00296                                 } else {
+00297                                         delay;
+00298                                 }
+00299 
+00300                                 break;
+00301 
+00302                         default:
+00303                                 break;
+00304                 }
+00305         }
+00306 } /* --- eventhandler_main() --- */
+00307 
+00308 
+00309 
+00310 /*
+00311  * Volume Control lookuptable.
+00312  * TODO: This table is now hardcoded. To ensure full skinability this table
+00313  * should be dynamically loaded.
+00314  */
+00315 rom unsigned 5 volumecontrol_table[46] = {31, 31, 30, 30, 29, 29, 28, 28, 27, 27, 26, 26, 25, 25, 24,  24, 23, 23, 22, 22, 21, 21, 20, 20, 19, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0};
+

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc.html b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc.html new file mode 100644 index 0000000..3d700ac --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc.html @@ -0,0 +1,191 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/eventhandler.hcc File Reference + + + + + +

eventhandler.hcc File Reference

#include <stdlib.hch>
+#include "pal_master.hch"
+#include "configuration.hch"
+#include "audio.hch"
+#include "mouse_shared.hch"
+#include "eventhandler_shared.hch"
+#include "eventhandler.hch"
+#include "events.hch"
+#include "display_shared.hch"
+#include "display.hch"
+ +

+Include dependency graph for eventhandler.hcc:

Include dependency graph
+ + + + + + + + + + + +

+Go to the source code of this file. + + + + + + + + + +

Functions

void eventhandler_main (audiodata_t *audiodata, events_t *events, mousedata_t *mousedata)

Variables

chan unsigned maskupdate_notification
rom unsigned volumecontrol_table [46] = {31, 31, 30, 30, 29, 29, 28, 28, 27, 27, 26, 26, 25, 25, 24, 24, 23, 23, 22, 22, 21, 21, 20, 20, 19, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0}
+


Detailed Description

+

+Graphic Equalizer API

+when the mousehandler registers a 'click' we coordinate the actions that follow that click.

+Project information.

+Project Graphic Equalizer
+
Author:
O.M. Schinagl
+
Date:
20041110
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041110: O.M. Schinagl
+ Initial version +

+Definition in file eventhandler.hcc.


Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void eventhandler_main audiodata_t audiodata,
events_t events,
mousedata_t mousedata
+
+ + + + + +
+   + + +

+

Parameters:
+ + + + +
*audiodata pointer to struct for setting equalizer levels.
*events pointer to struct with all events for display states.
*mousedata pointer to struct with mouse data for X and Y coordinates.
+
+
Returns:
Never Returns.
+
Return values:
+ + +
void 
+
+ +

+Definition at line 59 of file eventhandler.hcc. +

+References events_t::active_preset, AREA_EQUALIZER_MAX, AREA_EQUALIZER_MIN, AREA_VOLUME_YAXIS, BUTTON_DEMO, BUTTON_HELP, BUTTON_LOG, BUTTON_MODE, BUTTON_PRECISE, BUTTON_PRESET_1, BUTTON_RESET, audiodata_t::display_log, events_t::equalizer_display, audiodata_t::equalizer_levels_ptr, events_t::equalizer_mode, equalizer_table, EQUALIZERMODE_PRECISE, load_preset(), LOAD_PRESET_DEMO, LOAD_PRESET_RESET, events_t::locked_display, events_t::mask, maskupdate_notification, events_t::mode, MODE_GRAPH, MODE_HELP, MOUSE_STATE_DOWN, MOUSE_STATE_ON_PRESS, reload_equalizer(), mousedata_t::state, events_t::volume_position, volumecontrol_table, and mousedata_t::y. +

+Referenced by main().

+ +

+Here is the call graph for this function:

+ + + + +

Variable Documentation

+

+ + + + +
+ + + + +
chan unsigned maskupdate_notification
+
+ + + + + +
+   + + +

+ +

+Definition at line 48 of file display.hcc. +

+Referenced by display_main(), and eventhandler_main().

+

+ + + + +
+ + + + +
rom unsigned volumecontrol_table[46] = {31, 31, 30, 30, 29, 29, 28, 28, 27, 27, 26, 26, 25, 25, 24, 24, 23, 23, 22, 22, 21, 21, 20, 20, 19, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0}
+
+ + + + + +
+   + + +

+ +

+Definition at line 315 of file eventhandler.hcc. +

+Referenced by eventhandler_main().

+


Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc__incl.map b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc__incl.map new file mode 100644 index 0000000..8e10f06 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc__incl.map @@ -0,0 +1,9 @@ +base referer +rect $configuration_8hch.html 245,7 370,34 +rect $audio_8hch.html 394,7 474,34 +rect $mouse__shared_8hch.html 498,7 634,34 +rect $eventhandler__shared_8hch.html 658,7 832,34 +rect $eventhandler_8hch.html 856,7 981,34 +rect $events_8hch.html 1005,7 1090,34 +rect $display__shared_8hch.html 1114,7 1250,34 +rect $display_8hch.html 1274,7 1362,34 diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc__incl.md5 b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc__incl.md5 new file mode 100644 index 0000000..43b12ac --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc__incl.md5 @@ -0,0 +1 @@ +e8a7f337e9a3e5ae2e720dcb8252ef7e \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc__incl.png b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc__incl.png new file mode 100644 index 0000000..09c2a45 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a2_cgraph.map b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a2_cgraph.map new file mode 100644 index 0000000..def60cd --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a2_cgraph.map @@ -0,0 +1,3 @@ +base referer +rect $events_8hcc.html#a3 210,7 301,34 +rect $display_8hcc.html#a3 195,58 315,85 diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a2_cgraph.md5 b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a2_cgraph.md5 new file mode 100644 index 0000000..2dffa3a --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a2_cgraph.md5 @@ -0,0 +1 @@ +61d7348e8088689b8e9bef2cac7fb456 \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a2_cgraph.png b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a2_cgraph.png new file mode 100644 index 0000000..d07857b Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a2_cgraph.png differ diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a3_cgraph.map b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a3_cgraph.map new file mode 100644 index 0000000..e15c770 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a3_cgraph.map @@ -0,0 +1,3 @@ +base referer +rect $events_8hcc.html#a2 210,7 301,34 +rect $display_8hcc.html#a4 195,58 315,85 diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a3_cgraph.md5 b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a3_cgraph.md5 new file mode 100644 index 0000000..5572015 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a3_cgraph.md5 @@ -0,0 +1 @@ +4cc99ebc2d7ee85c7be875aa4524a42e \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a3_cgraph.png b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a3_cgraph.png new file mode 100644 index 0000000..d07857b Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/eventhandler_8hcc_a3_cgraph.png differ diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hch-source.html b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch-source.html new file mode 100644 index 0000000..a53a027 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch-source.html @@ -0,0 +1,36 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/eventhandler.hch Source File + + + + + +

eventhandler.hch

Go to the documentation of this file.
00001 
+00019 #ifndef _EVENTHANDLER_HCH
+00020 #define _EVENTHANDLER_HCH 1
+00021 
+00022 
+00023 
+00024 #define LOAD_PRESET_RESET       0x000
+00025 #define LOAD_PRESET_DEMO        0x180
+00026 
+00027 
+00028 
+00029 /*
+00030  * This is the main eventhandler loop. We require pointers to the event struct
+00031  * to store actions to be performed and a mousedata pointer so that we know on
+00032  * what mousestate to respond. We never returns!
+00033  */
+00034 void eventhandler_main(audiodata_t *audiodata, events_t *events, mousedata_t *mousedata);
+00035 
+00036 #else
+00037 #error "ERROR file eventhandler.hch multiple times included"
+00038 #endif /* --- _EVENTHANDLER_HCH --- */
+00039 
+

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hch.html b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch.html new file mode 100644 index 0000000..cbaba8d --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch.html @@ -0,0 +1,202 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/eventhandler.hch File Reference + + + + + +

eventhandler.hch File Reference

+

+This graph shows which files directly or indirectly include this file:

Included by dependency graph
+ + + + + +

+Go to the source code of this file. + + + + + + + + + + + +

Defines

#define _EVENTHANDLER_HCH   1
#define LOAD_PRESET_RESET   0x000
#define LOAD_PRESET_DEMO   0x180

Functions

void eventhandler_main (audiodata_t *audiodata, events_t *events, mousedata_t *mousedata)
+


Detailed Description

+

+Graphic Equalizer API

+

+Project information.

+Project Graphic Equalizer
+
Author:
O.M. Schinagl
+
Date:
20041110
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041110: O.M. Schinagl
+ Initial version +

+Definition in file eventhandler.hch.


Define Documentation

+

+ + + + +
+ + + + +
#define _EVENTHANDLER_HCH   1
+
+ + + + + +
+   + + +

+ +

+Definition at line 20 of file eventhandler.hch.

+

+ + + + +
+ + + + +
#define LOAD_PRESET_RESET   0x000
+
+ + + + + +
+   + + +

+ +

+Definition at line 24 of file eventhandler.hch. +

+Referenced by eventhandler_main().

+

+ + + + +
+ + + + +
#define LOAD_PRESET_DEMO   0x180
+
+ + + + + +
+   + + +

+ +

+Definition at line 25 of file eventhandler.hch. +

+Referenced by eventhandler_main().

+


Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void eventhandler_main audiodata_t audiodata,
events_t events,
mousedata_t mousedata
+
+ + + + + +
+   + + +

+

Parameters:
+ + + + +
*audiodata pointer to struct for setting equalizer levels.
*events pointer to struct with all events for display states.
*mousedata pointer to struct with mouse data for X and Y coordinates.
+
+
Returns:
Never Returns.
+
Return values:
+ + +
void 
+
+ +

+Definition at line 59 of file eventhandler.hcc. +

+References events_t::active_preset, AREA_EQUALIZER_MAX, AREA_EQUALIZER_MIN, AREA_VOLUME_YAXIS, BUTTON_DEMO, BUTTON_HELP, BUTTON_LOG, BUTTON_MODE, BUTTON_PRECISE, BUTTON_PRESET_1, BUTTON_RESET, audiodata_t::display_log, events_t::equalizer_display, audiodata_t::equalizer_levels_ptr, events_t::equalizer_mode, equalizer_table, EQUALIZERMODE_PRECISE, load_preset(), LOAD_PRESET_DEMO, LOAD_PRESET_RESET, events_t::locked_display, events_t::mask, maskupdate_notification, events_t::mode, MODE_GRAPH, MODE_HELP, MOUSE_STATE_DOWN, MOUSE_STATE_ON_PRESS, reload_equalizer(), mousedata_t::state, events_t::volume_position, volumecontrol_table, and mousedata_t::y. +

+Referenced by main().

+ +

+Here is the call graph for this function:

+ + + + +
Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hch__dep__incl.map b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch__dep__incl.map new file mode 100644 index 0000000..6d9ee70 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch__dep__incl.map @@ -0,0 +1,3 @@ +base referer +rect $eventhandler_8hcc.html 7,7 130,34 +rect $main_8hcc.html 154,7 229,34 diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hch__dep__incl.md5 b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch__dep__incl.md5 new file mode 100644 index 0000000..af0fe6f --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch__dep__incl.md5 @@ -0,0 +1 @@ +53efdfb40707cc5eba57fe4915bbbf35 \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hch__dep__incl.png b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch__dep__incl.png new file mode 100644 index 0000000..586b7d0 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch__dep__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a1_cgraph.map b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a1_cgraph.map new file mode 100644 index 0000000..e15c770 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a1_cgraph.map @@ -0,0 +1,3 @@ +base referer +rect $events_8hcc.html#a2 210,7 301,34 +rect $display_8hcc.html#a4 195,58 315,85 diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a1_cgraph.md5 b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a1_cgraph.md5 new file mode 100644 index 0000000..5572015 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a1_cgraph.md5 @@ -0,0 +1 @@ +4cc99ebc2d7ee85c7be875aa4524a42e \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a1_cgraph.png b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a1_cgraph.png new file mode 100644 index 0000000..d07857b Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a1_cgraph.png differ diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a3_cgraph.map b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a3_cgraph.map new file mode 100644 index 0000000..def60cd --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a3_cgraph.map @@ -0,0 +1,3 @@ +base referer +rect $events_8hcc.html#a3 210,7 301,34 +rect $display_8hcc.html#a3 195,58 315,85 diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a3_cgraph.md5 b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a3_cgraph.md5 new file mode 100644 index 0000000..2dffa3a --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a3_cgraph.md5 @@ -0,0 +1 @@ +61d7348e8088689b8e9bef2cac7fb456 \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a3_cgraph.png b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a3_cgraph.png new file mode 100644 index 0000000..d07857b Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/eventhandler_8hch_a3_cgraph.png differ diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler__shared_8hch-source.html b/Graphic_Equalizer_Split/doc/html/eventhandler__shared_8hch-source.html new file mode 100644 index 0000000..647d39b --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/eventhandler__shared_8hch-source.html @@ -0,0 +1,68 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/eventhandler_shared.hch Source File + + + + + +

eventhandler_shared.hch

Go to the documentation of this file.
00001 
+00019 #ifndef _EVENTHANDLER_SHARED_HCH
+00020 #define _EVENTHANDLER_SHARED_HCH 1
+00021 
+00022 
+00023 
+00024 /*** Data Types **********************/
+00025 
+00026 /*
+00027  * Type definition of the shared memory to be used in various processes
+00028  */
+00029 typedef struct {
+00030         ram unsigned 10 equalizer_display[128];
+00031         unsigned 10 active_preset;
+00032         unsigned 10 volume_position;
+00033         unsigned 8 mask;
+00034         unsigned 4 mode;
+00035         unsigned 4 equalizer_mode;
+00036         unsigned 1 locked_display;
+00037 } events_t;
+00038 
+00039 
+00040 #define MODE_SKIN       0x00
+00041 #define MODE_HELP       0x01
+00042 #define MODE_GRAPH      0x02
+00043 
+00044 
+00045 
+00046 #define EQUALIZERMODE_FULL      0x05
+00047 #define EQUALIZERMODE_HALF      0x03
+00048 #define EQUALIZERMODE_PRECISE   0x00
+00049 
+00050 
+00051 /*
+00052  * Volume Control lookuptable.
+00053  * TODO: This table is now hardcoded. To ensure full skinability this table
+00054  * should be dynamically loaded.
+00055  */
+00056 extern unsigned 5 volumecontrol_table[46];
+00057 
+00058 /*
+00059  * Equalizer lookup tables.
+00060  * TODO: This table is now hardcoded. To ensure full skinability this table
+00061  * should be dynamically loaded.
+00062  */
+00063 extern unsigned 4 equalizer_table[640];
+00064 extern unsigned 10 equalizer_table_inv[16];
+00065 
+00066 
+00067 
+00068 #else
+00069 #error "ERROR file eventhandler_shared.hch multiple times included"
+00070 #endif /* --- _EVENTHANDLER_SHARED_HCH --- */
+00071 
+

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler__shared_8hch.html b/Graphic_Equalizer_Split/doc/html/eventhandler__shared_8hch.html new file mode 100644 index 0000000..ce2041f --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/eventhandler__shared_8hch.html @@ -0,0 +1,334 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/eventhandler_shared.hch File Reference + + + + + +

eventhandler_shared.hch File Reference

+

+This graph shows which files directly or indirectly include this file:

Included by dependency graph
+ + + + + + + + +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  events_t

Defines

#define _EVENTHANDLER_SHARED_HCH   1
#define MODE_SKIN   0x00
#define MODE_HELP   0x01
#define MODE_GRAPH   0x02
#define EQUALIZERMODE_FULL   0x05
#define EQUALIZERMODE_HALF   0x03
#define EQUALIZERMODE_PRECISE   0x00

Variables

unsigned volumecontrol_table [46]
unsigned equalizer_table [640]
unsigned equalizer_table_inv [16]
+


Detailed Description

+

+Graphic Equalizer API

+

+Project information.

+Project Graphic Equalizer
+
Author:
O.M. Schinagl
+
Date:
20041110
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041110: O.M. Schinagl
+ Initial version +

+Definition in file eventhandler_shared.hch.


Define Documentation

+

+ + + + +
+ + + + +
#define _EVENTHANDLER_SHARED_HCH   1
+
+ + + + + +
+   + + +

+ +

+Definition at line 20 of file eventhandler_shared.hch.

+

+ + + + +
+ + + + +
#define MODE_SKIN   0x00
+
+ + + + + +
+   + + +

+ +

+Definition at line 40 of file eventhandler_shared.hch.

+

+ + + + +
+ + + + +
#define MODE_HELP   0x01
+
+ + + + + +
+   + + +

+ +

+Definition at line 41 of file eventhandler_shared.hch. +

+Referenced by display_main(), and eventhandler_main().

+

+ + + + +
+ + + + +
#define MODE_GRAPH   0x02
+
+ + + + + +
+   + + +

+ +

+Definition at line 42 of file eventhandler_shared.hch. +

+Referenced by display_main(), and eventhandler_main().

+

+ + + + +
+ + + + +
#define EQUALIZERMODE_FULL   0x05
+
+ + + + + +
+   + + +

+ +

+Definition at line 46 of file eventhandler_shared.hch.

+

+ + + + +
+ + + + +
#define EQUALIZERMODE_HALF   0x03
+
+ + + + + +
+   + + +

+ +

+Definition at line 47 of file eventhandler_shared.hch.

+

+ + + + +
+ + + + +
#define EQUALIZERMODE_PRECISE   0x00
+
+ + + + + +
+   + + +

+ +

+Definition at line 48 of file eventhandler_shared.hch. +

+Referenced by eventhandler_main().

+


Variable Documentation

+

+ + + + +
+ + + + +
unsigned volumecontrol_table[46]
+
+ + + + + +
+   + + +

+ +

+Definition at line 315 of file eventhandler.hcc. +

+Referenced by eventhandler_main().

+

+ + + + +
+ + + + +
unsigned equalizer_table[640]
+
+ + + + + +
+   + + +

+ +

+Definition at line 75 of file events.hcc. +

+Referenced by eventhandler_main().

+

+ + + + +
+ + + + +
unsigned equalizer_table_inv[16]
+
+ + + + + +
+   + + +

+ +

+Definition at line 76 of file events.hcc. +

+Referenced by reload_equalizer().

+


Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler__shared_8hch__dep__incl.map b/Graphic_Equalizer_Split/doc/html/eventhandler__shared_8hch__dep__incl.map new file mode 100644 index 0000000..e30c9f4 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/eventhandler__shared_8hch__dep__incl.map @@ -0,0 +1,6 @@ +base referer +rect $display_8hcc.html 8,7 96,34 +rect $eventhandler_8hcc.html 120,7 242,34 +rect $events_8hcc.html 266,7 352,34 +rect $main_8hcc.html 376,7 450,34 +rect $smartmedia_8hcc.html 474,7 592,34 diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler__shared_8hch__dep__incl.md5 b/Graphic_Equalizer_Split/doc/html/eventhandler__shared_8hch__dep__incl.md5 new file mode 100644 index 0000000..5231ffe --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/eventhandler__shared_8hch__dep__incl.md5 @@ -0,0 +1 @@ +27ad7843295f3466cc8c70cc8c0de797 \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/eventhandler__shared_8hch__dep__incl.png b/Graphic_Equalizer_Split/doc/html/eventhandler__shared_8hch__dep__incl.png new file mode 100644 index 0000000..838ca25 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/eventhandler__shared_8hch__dep__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/events_8hcc-source.html b/Graphic_Equalizer_Split/doc/html/events_8hcc-source.html new file mode 100644 index 0000000..d180b4a --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/events_8hcc-source.html @@ -0,0 +1,60 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/events.hcc Source File + + + + + +

events.hcc

Go to the documentation of this file.
00001 
+00022 /******** System Includes *************/
+00023 #include <stdlib.hch>
+00024 
+00025 #include "pal_master.hch"
+00026 
+00027 /******** Application Includes ********/
+00028 #include "configuration.hch"
+00029 #include "eventhandler_shared.hch"
+00030 #include "events.hch"
+00031 
+00032 #if HAVE_DEBUG
+00033         #include "debug.hch"
+00034 #endif
+00035 
+00036 
+00037 ram unsigned 8 presets_default_values[768] = {
+00038 #include "presets_hardcoded.txt"
+00039 };
+00040 
+00041 
+00042 
+00053 void load_preset(unsigned 10 preset, unsigned 4 *equalizer_levels_ptr) {
+00054         unsigned 10 equalizer_index;
+00055         unsigned 4 temp;
+00056 
+00057         equalizer_index = 0;
+00058         while (equalizer_index != 768) {
+00059                 temp = presets_default_values[preset +(0 @ (equalizer_index \\ 1))][7:4];
+00060                 equalizer_levels_ptr[equalizer_index] = temp;
+00061                 temp = presets_default_values[preset +(0 @ (equalizer_index \\ 1))][3:0];
+00062                 equalizer_levels_ptr[equalizer_index +1] = temp;
+00063 
+00064                 equalizer_index += 2;
+00065         }
+00066 } /* --- load_preset() --- */
+00067 
+00068 
+00069 
+00070 /*
+00071  * Equalizer lookuptabes.
+00072  * TODO: This table is now hardcoded. To ensure full skinability this table
+00073  * should be dynamically loaded.
+00074  */
+00075 ram unsigned 4 equalizer_table[640] = {15, 15, 15, 15, 15, 14, 14, 14, 14, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0};
+00076 ram unsigned 10 equalizer_table_inv[16] = {446, 444, 440, 436, 432, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 384};
+

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/events_8hcc.html b/Graphic_Equalizer_Split/doc/html/events_8hcc.html new file mode 100644 index 0000000..b6a4870 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/events_8hcc.html @@ -0,0 +1,202 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/events.hcc File Reference + + + + + +

events.hcc File Reference

#include <stdlib.hch>
+#include "pal_master.hch"
+#include "configuration.hch"
+#include "eventhandler_shared.hch"
+#include "events.hch"
+#include "presets_hardcoded.txt"
+ +

+Include dependency graph for events.hcc:

Include dependency graph
+ + + + + + +

+Go to the source code of this file. + + + + + + + + + + + + +

Functions

void load_preset (unsigned 10 preset, unsigned 4 *equalizer_levels_ptr)
 This function loads 768 4bits presets into the equalizer_levels array pointed to by equalizer_levels.

Variables

ram unsigned presets_default_values [768]
ram unsigned equalizer_table [640] = {15, 15, 15, 15, 15, 14, 14, 14, 14, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0}
ram unsigned equalizer_table_inv [16] = {446, 444, 440, 436, 432, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 384}
+


Detailed Description

+

+Graphic Equalizer API

+that need to be performed.

+Project information.

+Project Graphic Equalizer
+
Author:
O.M. Schinagl
+
Date:
20041710
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041710: O.M. Schinagl
+ Initial version +

+Definition in file events.hcc.


Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void load_preset unsigned 10  preset,
unsigned 4 *  equalizer_levels_ptr
+
+ + + + + +
+   + + +

+This function loads 768 4bits presets into the equalizer_levels array pointed to by equalizer_levels. +

+

Parameters:
+ + +
*equalizer_levels Location where to store presets loaded from blockram.
+
+
Returns:
void
+
Return values:
+ + +
void 
+
+ +

+Definition at line 53 of file events.hcc. +

+References presets_default_values. +

+Referenced by eventhandler_main().

+


Variable Documentation

+

+ + + + +
+ + + + +
ram unsigned presets_default_values[768]
+
+ + + + + +
+   + + +

+Initial value:

 {
+
+}
+
+

+Definition at line 37 of file events.hcc. +

+Referenced by load_preset(), and smartmedia_loaddata().

+

+ + + + +
+ + + + +
ram unsigned equalizer_table[640] = {15, 15, 15, 15, 15, 14, 14, 14, 14, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0}
+
+ + + + + +
+   + + +

+ +

+Definition at line 75 of file events.hcc. +

+Referenced by eventhandler_main().

+

+ + + + +
+ + + + +
ram unsigned equalizer_table_inv[16] = {446, 444, 440, 436, 432, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 384}
+
+ + + + + +
+   + + +

+ +

+Definition at line 76 of file events.hcc. +

+Referenced by reload_equalizer().

+


Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/events_8hcc__incl.map b/Graphic_Equalizer_Split/doc/html/events_8hcc__incl.map new file mode 100644 index 0000000..e45f3ce --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/events_8hcc__incl.map @@ -0,0 +1,4 @@ +base referer +rect $configuration_8hch.html 245,7 370,34 +rect $eventhandler__shared_8hch.html 394,7 568,34 +rect $events_8hch.html 592,7 677,34 diff --git a/Graphic_Equalizer_Split/doc/html/events_8hcc__incl.md5 b/Graphic_Equalizer_Split/doc/html/events_8hcc__incl.md5 new file mode 100644 index 0000000..4d585b8 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/events_8hcc__incl.md5 @@ -0,0 +1 @@ +02bd65e19ec52f3ed8fe65e35b542b88 \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/events_8hcc__incl.png b/Graphic_Equalizer_Split/doc/html/events_8hcc__incl.png new file mode 100644 index 0000000..6e1fc82 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/events_8hcc__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/events_8hch-source.html b/Graphic_Equalizer_Split/doc/html/events_8hch-source.html new file mode 100644 index 0000000..2845fe7 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/events_8hch-source.html @@ -0,0 +1,29 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/events.hch Source File + + + + + +

events.hch

Go to the documentation of this file.
00001 
+00020 #ifndef _EVENTS_HCH
+00021 #define _EVENTS_HCH 1
+00022 
+00023 
+00024 
+00025 /*
+00026  * This function loads 768 4bits presets into the equalizer_levels array
+00027  * pointed to by equalizer_levels.
+00028  */
+00029 void load_preset(unsigned 10 preset, unsigned 4 *equalizer_levels_ptr);
+00030 
+00031 #else
+00032 #error "ERROR file events.hch multiple times included"
+00033 #endif /* --- _EVENTS_HCH --- */
+

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/events_8hch.html b/Graphic_Equalizer_Split/doc/html/events_8hch.html new file mode 100644 index 0000000..b3a2c5c --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/events_8hch.html @@ -0,0 +1,132 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/events.hch File Reference + + + + + +

events.hch File Reference

+

+This graph shows which files directly or indirectly include this file:

Included by dependency graph
+ + + + + +

+Go to the source code of this file. + + + + + + + + +

Defines

#define _EVENTS_HCH   1

Functions

void load_preset (unsigned 10 preset, unsigned 4 *equalizer_levels_ptr)
 This function loads 768 4bits presets into the equalizer_levels array pointed to by equalizer_levels.
+


Detailed Description

+

+Graphic Equalizer API

+that need to be performed.

+Project information.

+Project Graphic Equalizer
+
Author:
O.M. Schinagl
+
Date:
20041710
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041710: O.M. Schinagl
+ Initial version +

+Definition in file events.hch.


Define Documentation

+

+ + + + +
+ + + + +
#define _EVENTS_HCH   1
+
+ + + + + +
+   + + +

+ +

+Definition at line 21 of file events.hch.

+


Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void load_preset unsigned 10  preset,
unsigned 4 *  equalizer_levels_ptr
+
+ + + + + +
+   + + +

+This function loads 768 4bits presets into the equalizer_levels array pointed to by equalizer_levels. +

+

Parameters:
+ + +
*equalizer_levels Location where to store presets loaded from blockram.
+
+
Returns:
void
+
Return values:
+ + +
void 
+
+ +

+Definition at line 53 of file events.hcc. +

+References presets_default_values. +

+Referenced by eventhandler_main().

+


Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/events_8hch__dep__incl.map b/Graphic_Equalizer_Split/doc/html/events_8hch__dep__incl.map new file mode 100644 index 0000000..e1a4795 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/events_8hch__dep__incl.map @@ -0,0 +1,3 @@ +base referer +rect $eventhandler_8hcc.html 8,7 130,34 +rect $events_8hcc.html 154,7 240,34 diff --git a/Graphic_Equalizer_Split/doc/html/events_8hch__dep__incl.md5 b/Graphic_Equalizer_Split/doc/html/events_8hch__dep__incl.md5 new file mode 100644 index 0000000..db0e635 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/events_8hch__dep__incl.md5 @@ -0,0 +1 @@ +9de3b703aa96c0fd466e7058f82e3b76 \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/events_8hch__dep__incl.png b/Graphic_Equalizer_Split/doc/html/events_8hch__dep__incl.png new file mode 100644 index 0000000..7b9cfa7 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/events_8hch__dep__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hcc-source.html b/Graphic_Equalizer_Split/doc/html/fft_8hcc-source.html new file mode 100644 index 0000000..d4cfdb6 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hcc-source.html @@ -0,0 +1,445 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/fft.hcc Source File + + + + + +

fft.hcc

Go to the documentation of this file.
00001 
+00020 #include <stdlib.hch>
+00021 #include "pal_master.hch"
+00022 
+00023 #include "audio.hch"
+00024 #include "weights_256.hch"
+00025 #include "configuration.hch"
+00026 #include "xilinxmult.hch"
+00027 #include "fft.hch"
+00028 
+00029 #if HAVE_DEBUG
+00030         #include "debug.hch"
+00031 #endif
+00032 
+00033 /* Define two multi-port RAMs for FFT calculation; one for real and one for imaginary values
+00034  * Extra block RAM settings are defined to make sure read and write actions can be performed
+00035  * within one clock-cycle.
+00036  * Left out extra settings on new board the clock changes TODO !!!!
+00037  */
+00038 #if HARDWARE_MULTIPLY
+00039 mpram
+00040 {
+00041   ram signed 18 rwrite[256];
+00042   rom signed 18 read[256];
+00043 } real with {block = "BlockRAM"/*, westart=2.5, welength=1, rclkpos={1.5}, wclkpos={3}, clkpulselen=0.5*/};
+00044 
+00045 mpram 
+00046 {
+00047   ram signed 18 rwrite[256];
+00048   rom signed 18 read[256];
+00049 } imaginary with {block = "BlockRAM"/*, westart=2.5, welength=1, rclkpos={1.5}, wclkpos={3}, clkpulselen=0.5*/};
+00050 #else
+00051 mpram
+00052 {
+00053   ram signed 24 rwrite[256];
+00054   rom signed 24 read[256];
+00055 } real with {block = "BlockRAM"/*, westart=2.5, welength=1, rclkpos={1.5}, wclkpos={3}, clkpulselen=0.5*/};
+00056 
+00057 mpram 
+00058 {
+00059   ram signed 24 rwrite[256];
+00060   rom signed 24 read[256];
+00061 } imaginary with {block = "BlockRAM"/*, westart=2.5, welength=1, rclkpos={1.5}, wclkpos={3}, clkpulselen=0.5*/};
+00062 #endif
+00063 // multiplication factors for equalizer function
+00064 ram signed 7 eq_settings[16] = {0,2,4,7,10,13,16,19,22,26,30,35,41,48,55,63};
+00065 
+00066 #if HARDWARE_MULTIPLY
+00067 #define DC_COMPONENT            0
+00068 #else
+00069 #define DC_COMPONENT            8470527
+00070 #endif
+00071 
+00082 macro proc multiply(result, op_a, op_b)
+00083 {
+00084 #if HARDWARE_MULTIPLY
+00085         xilinxmult(result, op_a, adjs(op_b,18));
+00086 #else
+00087         result = (adjs(op_a,38))*(adjs(op_a,38));
+00088 #endif  
+00089 }
+00090 
+00091 
+00092 
+00093 
+00104 void calculate_fft(unsigned 1 select_inverse)
+00105 {
+00106   unsigned 4 level;
+00107   unsigned 8 point1,point2,j,f,k;
+00108   unsigned 9 e,i;
+00109   signed 16 weight1,weight2;
+00110 #if HARDWARE_MULTIPLY
+00111   signed 18 p,q,r,t;
+00112 #else
+00113   signed 24 p,q,r,t;    
+00114 #endif
+00115   signed a,b;
+00116 
+00117 #if HARDWARE_MULTIPLY
+00118   // Macro to provide rescaling of 36-bit result of fixed point multiply
+00119   // down to an 18-bit result. The range of bits selected depends on the 
+00120   // number that represents the value of "1" in the trig function lookup
+00121   // tables. (Eg. for 16384 == 1, the lowest bit selected should be [14]).
+00122   macro expr rescale (x) = (x[35] @ x[30:14]);
+00123 #else
+00124   //Macro to rescale the multiply result down to a 24-bit value.
+00125   macro expr rescale (x) = ((x>>FRACBITS)<-24);
+00126 #endif
+00127 
+00128   for(level=1;level<=NUMBER_OF_COLUMNS;level++) // count all the columns
+00129   {
+00130         e=1<<(NUMBER_OF_COLUMNS-level+1); // number of points in each block in this column
+00131         f=(e>>1)<-8;                      // number of butterflies in each block in this column
+00132 
+00133         for(j=1;j<=f;j++)       // count all the butterflies in each block
+00134         {
+00135                 par
+00136                 {
+00137                         // Weight factors for real (the same for FFT and iFFT)
+00138                         weight1 = weight_re[((j-1)<<(level-1))<-7]; 
+00139 
+00140                         
+00141                         // Weight factors for imaginary (opposite for FFT and iFFT)
+00142                         weight2 = (!select_inverse) ? (weight_im[((j-1)<<(level-1))<-7]) : -(weight_im[((j-1)<<(level-1))<-7]); 
+00143 
+00144                         /* ORIGINAL CODE BELOW, MODIFIED BECAUSE OF MISMATCHING OUTPUT WITH BORLAND TESTAPP
+00145                         weight2 = (!select_inverse) ? -(weight_im[((j-1)<<(level-1))<-7]) : weight_im[((j-1)<<(level-1))<-7]; 
+00146                         */
+00147                         
+00148                         
+00149 
+00150                         for(i=0@j;i<=NUMBER_OF_POINTS;i+=e)   // count all the blocks in this column
+00151                         {       // Butterfly calculation
+00152                                 par
+00153                                 {
+00154                                         point1 = ((i<-8)-1);
+00155                                         point2 = (((i<-8)+f)-1);
+00156                                 }
+00157                                 
+00158                                 par
+00159                                 {
+00160                                         p = (real.read[point1] >> 1) + (real.rwrite[point2] >> 1);
+00161                                         q = (imaginary.read[point1] >> 1) + (imaginary.rwrite[point2] >> 1);
+00162                                 }
+00163                                 
+00164                                 par
+00165                                 {
+00166                                         r = (real.read[point1] >> 1) - (real.rwrite[point2] >> 1);
+00167                                         t = (imaginary.read[point1] >> 1) - (imaginary.rwrite[point2] >> 1);
+00168                                 }               
+00169 
+00170                                 multiply(a,r,weight1);
+00171                                 multiply(b,t,weight2);
+00172 
+00173                                 par
+00174                                 {
+00175                                         real.rwrite[point2] = (rescale(a-b));
+00176                                         imaginary.rwrite[point1] = q;
+00177                                 }
+00178 
+00179                                 multiply(a,t,weight1);
+00180                                 multiply(b,r,weight2);
+00181 
+00182                                 par
+00183                                 {       
+00184                                         real.rwrite[point1] = p;
+00185                                         imaginary.rwrite[point2] = (rescale(a+b));
+00186                                 }
+00187 
+00188                         }
+00189                 }
+00190         }
+00191   }
+00192 
+00193   j=1;
+00194   for(i=1;i<NUMBER_OF_POINTS;i++)
+00195   {
+00196         if(i<(0@j))
+00197         {
+00198                 par
+00199                 {
+00200                         point1=j-1;
+00201                         point2=(i-1)<-8;
+00202                 }
+00203                 /*
+00204                   COPYING ARRAY VALUES FROM ONE PLACE TO ANOTHER IN THE ARRAT MUST BE DONE IN 
+00205                   2 STEPS. FIRSTLY THE VALUES ARE COPIED TO SEPARATE VARIABLES AFTER THAT THEY
+00206                   ARE COPIED BACK TO THEIR NEW POSITION IN THE ARRAY. THIS MUST BE DONE TO 
+00207                   PREVENT TIMING ISSUES FROM OCCURING.
+00208                 */
+00209                 par
+00210                 {
+00211                         p = real.read[point1];
+00212                         q = imaginary.read[point1];
+00213                 }
+00214                 par
+00215                 {
+00216                         r = real.read[point2];
+00217                         t = imaginary.read[point2];
+00218                 }
+00219                 par
+00220                 {
+00221                         real.rwrite[point1] = r;        
+00222                         imaginary.rwrite[point1] = t;
+00223                 }
+00224                 par
+00225                 {
+00226                         real.rwrite[point2] = p;
+00227                         imaginary.rwrite[point2] = q;
+00228                 }
+00229         }
+00230 
+00231         k = NUMBER_OF_POINTS>>1;
+00232 
+00233 
+00234         while(k<j)
+00235         {
+00236                 j = j-k;
+00237                 k = k>>1;
+00238         }
+00239 
+00240         j+=k;
+00241   }
+00242 
+00243 }
+00244 
+00256 #if HARDWARE_MULTIPLY
+00257 void perform_fft(signed 18 *pcm_audio)
+00258 #else
+00259 void perform_fft(signed 16 *pcm_audio)
+00260 #endif
+00261 {
+00262         unsigned 8 k;
+00263 #if HARDWARE_MULTIPLY
+00264         signed 18 sample;
+00265         k=0;
+00266         sample = adjs(pcm_audio[k],18);
+00267 #else
+00268         signed 24 sample;
+00269         k=0;
+00270         sample = adjs(pcm_audio[k],24);
+00271 #endif
+00272         
+00273         //initialize variables for the copying pipeline
+00274 
+00275         
+00276         // copy audio data to real-array before starting FFT calculation
+00277         // and set imaginary values to zero
+00278         do
+00279         {
+00280                 //Copying the array values has been pipelined to prevent parallel access to the
+00281                 //pcm_audio array. This copying procedure must be finished before another 
+00282                 //sample is read from the audio input. The time available for this loop is 
+00283                 //determined by the sampling rate of 44,1 Khz
+00284                 par
+00285                 {
+00286                         //COPYING NEEDS TO BE DONE IN 2 STEPS, BECAUSE THE VALUE THAT NEEDS TO WRITTEN
+00287                         //TO THE REAL-RAM NEEDS TO BE AVAILABLE ON THE START OFF THE CLOCKCYCLE.
+00288 #if HARDWARE_MULTIPLY
+00289                         sample = adjs(pcm_audio[k+1],18);
+00290 #else
+00291                         sample = adjs(pcm_audio[k+1],24);
+00292 #endif
+00293                         real.rwrite[k] = sample;
+00294                         imaginary.rwrite[k] = 0;
+00295                         k++;
+00296                 }               
+00297         }  while (k);
+00298 
+00299         
+00300 
+00301 #if PERFORM_FFT_CALCULATION
+00302         calculate_fft(0);
+00303 #endif
+00304 
+00305 
+00306 }
+00307 
+00321 #if HARDWARE_MULTIPLY
+00322 void perform_ifft(signed 18 *modified_audio, unsigned 6 *ifft_info)
+00323 #else
+00324 void perform_ifft(signed 16 *modified_audio, unsigned 6 *ifft_info)
+00325 #endif
+00326 {
+00327         unsigned 6 k;
+00328 #if HARDWARE_MULTIPLY 
+00329         signed 18 p;
+00330 #else
+00331         signed 24 p;
+00332 #endif
+00333 #if PERFORM_FFT_CALCULATION     
+00334         calculate_fft(1);
+00335 #endif
+00336 
+00337         k=0;
+00338 //initialize variables for the copying pipeline
+00339 #if PERFORM_FFT_CALCULATION     
+00340         #if HARDWARE_MULTIPLY 
+00341                 p = (real.read[(0@k)+95] << NUMBER_OF_COLUMNS);
+00342         #else
+00343                 p = (real.read[(0@k)+95] >> NUMBER_OF_COLUMNS);
+00344         #endif
+00345 #else
+00346                 p = (real.read[(0@k)+95]);
+00347 #endif
+00348 
+00349         do
+00350         {
+00351                 //Copying the array values has been pipelined to prevent parallel access to the
+00352                 //pcm_audio array. This copying procedure must be finished before another 
+00353                 //sample is read from the audio input. The time available for this loop is 
+00354                 //determined by the sampling rate of 44,1 Khz
+00355                 par
+00356                 {
+00357                         /*
+00358                         *       Before copying the modified audio from the local real-array 
+00359                         *       to the output array of the audio I/O component, compensate
+00360                         *       for the FFT calculation by shifting the values. 
+00361                         *       95 is added to start the output from the middle of the sliding
+00362                         *       window, this is done to get a better sound quality.
+00363                         */
+00364 #if PERFORM_FFT_CALCULATION     
+00365         #if HARDWARE_MULTIPLY 
+00366                         p = (real.read[(0@k)+95] << NUMBER_OF_COLUMNS);
+00367         #else
+00368                         p = (real.read[(0@k)+95] >> NUMBER_OF_COLUMNS);
+00369         #endif
+00370 #else
+00371                         p = (real.read[(0@k)+95]);
+00372 #endif
+00373                         //Copy the modified audio from the local real array to the output array of the audio I/O component.
+00374 #if HARDWARE_MULTIPLY
+00375                         modified_audio[k] = p ;
+00376 #else
+00377                         modified_audio[k] = (p<-16);
+00378 #endif
+00379                         //Fill the array for displaying the waveform, only the 6 MSB are needed.
+00380                         ifft_info[k] = (unsigned 6)(32+(p[17:12]));             
+00381                         k++;
+00382                 }
+00383         } while(k);
+00384 }
+00385 
+00398 void equalize_audio(audiodata_t *audiodata)
+00399 {
+00400 #if HARDWARE_MULTIPLY
+00401   signed 18 p,q;
+00402 #else
+00403   signed 24 p,q;
+00404 #endif
+00405   signed 18 a;
+00406   unsigned 8 i, mirror_i, bit, m, n;
+00407   unsigned 7 old_value;
+00408   unsigned 9 tmp;
+00409   
+00410   //macro expr equalize_bar = multiply(q,a)[29:6];
+00411   
+00412   macro proc equalize_bar(retval)
+00413   {
+00414          signed result;
+00415          multiply(result, q,a);
+00416 #if HARDWARE_MULTIPLY
+00417          retval = result[23:6]; //drop last 6 bit to compensate the maximum multiplication with 64 from the eq_settings array
+00418 #else
+00419          retval = result[29:6]; //drop last 6 bit to compensate the maximum multiplication with 64 from the eq_settings array
+00420 #endif
+00421   } 
+00422 
+00423   p = real.read[0] - DC_COMPONENT; // remove DC component for calculations
+00424   real.rwrite[0] = p;
+00425   
+00426   for(i=0;i!=NUMBER_OF_FREQUENCIES;i++)   
+00427   {  
+00428         
+00429                 // set multiplication factor (0..64) for current frequency bar, The first frequency band must be equalized at 100% (63) since there is no DC-component taken into account.
+00430                 a = adjs(eq_settings[audiodata->equalizer_levels_ptr[i <- 7]],18);
+00431 
+00432 
+00433                 // multiply frequency with this factor and divide by 64 (drop 6 LSB's)
+00434                 q = real.read[i];
+00435         equalize_bar(p);
+00436         real.rwrite[i] = p;
+00437 
+00438         q = imaginary.read[i];
+00439         equalize_bar(p);
+00440         imaginary.rwrite[i] = p;
+00441 
+00442         // the upper part(128..255) of the spectrum is mirrored to the lower part; 
+00443         // these values need to be adjusted too
+00444         if ((i<-7)!=0) // if not in DC component bar
+00445         {
+00446                 mirror_i = (NUMBER_OF_POINTS-1)-i+1;
+00447                 q = real.read[mirror_i];
+00448                 equalize_bar(p);
+00449                 real.rwrite[mirror_i] = p;
+00450 
+00451                 q = imaginary.read[mirror_i];
+00452                 equalize_bar(p);
+00453                 imaginary.rwrite[mirror_i] = p;
+00454         }
+00455   }
+00456   
+00457   //write data to fft_info for display purposes
+00458   for(i=0;i<NUMBER_OF_FREQUENCIES;i++)
+00459   {
+00460                 p = real.read[i];
+00461                 q = imaginary.read[i];
+00462 #if HARDWARE_MULTIPLY
+00463                 if (p[17] == 1) p = -p; else delay;
+00464                 if (q[17] == 1) q = -q; else delay;
+00465 #else
+00466                 if (p[23] == 1) p = -p; else delay;
+00467                 if (q[23] == 1) q = -q; else delay;
+00468 #endif
+00469         p = (p<q) ? q : p; // This is done to get the best visual frequency result
+00470          
+00471         if (!audiodata->display_log)
+00472         {
+00473 
+00474                 bit=126;
+00475 #if HARDWARE_MULTIPLY
+00476                 while ((p[15] == 0) && (bit != 0))
+00477 #else
+00478                 while ((p[21] == 0) && (bit != 0))
+00479 #endif
+00480                         par
+00481                         {
+00482                                 p = p<<1;
+00483                                 bit = bit - 18;
+00484                         }
+00485                 old_value = audiodata->fft_info.write[0 @ (i <- 7)];
+00486                 tmp = ((0@old_value) + (0@bit))>>1;
+00487                 audiodata->fft_info.write[0 @ (i <- 7)] = (old_value <= (tmp<-7)) ? (tmp<-7) : old_value-1;
+00488         } 
+00489         else 
+00490         {
+00491                 old_value = audiodata->fft_info.write[0 @ (i <- 7)];
+00492 #if HARDWARE_MULTIPLY
+00493                 audiodata->fft_info.write[0 @ (i <- 7)] = (old_value<=(unsigned)(p[15:9])) ? (unsigned)(p[15:9]) : old_value-1;
+00494 #else
+00495                 audiodata->fft_info.write[0 @ (i <- 7)] = (old_value<=(unsigned)(p[21:15])) ? (unsigned)(p[21:15]) : old_value-1;
+00496 #endif
+00497         }
+00498   }
+00499 
+00500   // add DC component again before inverse FFT calculation is performed
+00501 
+00502   p = real.read[0] + DC_COMPONENT; 
+00503   real.rwrite[0] = p;
+00504 }
+00505 
+

Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hcc.html b/Graphic_Equalizer_Split/doc/html/fft_8hcc.html new file mode 100644 index 0000000..4440372 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hcc.html @@ -0,0 +1,380 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/fft.hcc File Reference + + + + + +

fft.hcc File Reference

#include <stdlib.hch>
+#include "pal_master.hch"
+#include "audio.hch"
+#include "weights_256.hch"
+#include "configuration.hch"
+#include "xilinxmult.hch"
+#include "fft.hch"
+ +

+Include dependency graph for fft.hcc:

Include dependency graph
+ + + + + + + +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + +

Defines

#define DC_COMPONENT   8470527

Functions

macro proc multiply (result, op_a, op_b)
 Procedure used for multiply-ing.
void calculate_fft (unsigned 1 select_inverse)
 This routine performs the Fast Fourier Transform for calculation of the frequency spectrum.
void perform_fft (signed 16 *pcm_audio)
void perform_ifft (signed 16 *modified_audio, unsigned 6 *ifft_info)
void equalize_audio (audiodata_t *audiodata)
 This routine equalizes the frequencies derived by the FFT calculation, according to the settings of the equalizer bars.

Variables

ram signed eq_settings [16] = {0,2,4,7,10,13,16,19,22,26,30,35,41,48,55,63}
+


Detailed Description

+

+Graphic Equalizer API

+on the samples. Besides the FFT this module also will equalize the audio signal according to the setting made by the user.

+Project information.

+Project Graphic Equalizer
+
Author:
M. Lauwerijssen
+
Date:
20041110
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041110: M. Lauwerijssen
+ Initial version +

+Definition in file fft.hcc.


Define Documentation

+

+ + + + +
+ + + + +
#define DC_COMPONENT   8470527
+
+ + + + + +
+   + + +

+ +

+Definition at line 69 of file fft.hcc.

+


Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
macro proc multiply result ,
op_a ,
op_b 
+
+ + + + + +
+   + + +

+Procedure used for multiply-ing. +

+

Parameters:
+ + + + +
result variable containing the result of the multiply procedure
op_a integer value to be multiplied.
op_b integer value to be multiplied.
+
+
Returns:
Procedure returns through variable.
+
Return values:
+ + +
signed 36
+
+ +

+Definition at line 82 of file fft.hcc. +

+Referenced by calculate_fft(), and equalize_audio().

+

+ + + + +
+ + + + + + + + + +
void calculate_fft unsigned 1  select_inverse  ) 
+
+ + + + + +
+   + + +

+This routine performs the Fast Fourier Transform for calculation of the frequency spectrum. +

+

Parameters:
+ + +
select_inverse determines if a FFT or iFFT has to be calculated
+
+
Returns:
nothing
+
Return values:
+ + +
void cost 12391 cycles
+
+ +

+Definition at line 104 of file fft.hcc. +

+References multiply(), NUMBER_OF_COLUMNS, NUMBER_OF_POINTS, weight_im, and weight_re. +

+Referenced by perform_fft(), and perform_ifft().

+ +

+Here is the call graph for this function:

+ + + +

+ + + + +
+ + + + + + + + + +
void perform_fft signed 16 *  pcm_audio  ) 
+
+ + + + + +
+   + + +

+ +

+Definition at line 259 of file fft.hcc. +

+References calculate_fft().

+ +

+Here is the call graph for this function:

+ + + + +

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void perform_ifft signed 16 *  modified_audio,
unsigned 6 *  ifft_info
+
+ + + + + +
+   + + +

+ +

+Definition at line 324 of file fft.hcc. +

+References calculate_fft().

+ +

+Here is the call graph for this function:

+ + + + +

+ + + + +
+ + + + + + + + + +
void equalize_audio audiodata_t audiodata  ) 
+
+ + + + + +
+   + + +

+This routine equalizes the frequencies derived by the FFT calculation, according to the settings of the equalizer bars. +

+

Note:
Cost: 3844 clock cycles (Maximum)
+
Parameters:
+ + +
*audiodata pointer to the audiodata struct, containing the eq_info, etc.
+
+
Returns:
void
+
Return values:
+ + +
void 
+
+ +

+Definition at line 398 of file fft.hcc. +

+References audiodata_t::display_log, eq_settings, audiodata_t::equalizer_levels_ptr, multiply(), and NUMBER_OF_POINTS.

+ +

+Here is the call graph for this function:

+ + + +

Variable Documentation

+

+ + + + +
+ + + + +
ram signed eq_settings[16] = {0,2,4,7,10,13,16,19,22,26,30,35,41,48,55,63}
+
+ + + + + +
+   + + +

+ +

+Definition at line 64 of file fft.hcc. +

+Referenced by equalize_audio().

+


Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hcc__incl.map b/Graphic_Equalizer_Split/doc/html/fft_8hcc__incl.map new file mode 100644 index 0000000..15797f7 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hcc__incl.map @@ -0,0 +1,5 @@ +base referer +rect $audio_8hch.html 245,7 325,34 +rect $weights__256_8hch.html 349,7 472,34 +rect $configuration_8hch.html 496,7 621,34 +rect $fft_8hch.html 773,7 832,34 diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hcc__incl.md5 b/Graphic_Equalizer_Split/doc/html/fft_8hcc__incl.md5 new file mode 100644 index 0000000..2c9dae2 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hcc__incl.md5 @@ -0,0 +1 @@ +13348b3a575ac6358b96e7a456338526 \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hcc__incl.png b/Graphic_Equalizer_Split/doc/html/fft_8hcc__incl.png new file mode 100644 index 0000000..b142ddb Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/fft_8hcc__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hcc_a2_cgraph.map b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a2_cgraph.map new file mode 100644 index 0000000..de7305e --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a2_cgraph.map @@ -0,0 +1,2 @@ +base referer +rect $fft_8hcc.html#a1 151,8 221,34 diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hcc_a2_cgraph.md5 b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a2_cgraph.md5 new file mode 100644 index 0000000..eea4b2a --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a2_cgraph.md5 @@ -0,0 +1 @@ +a664c98e0e50457202b8c3914d39308b \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hcc_a2_cgraph.png b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a2_cgraph.png new file mode 100644 index 0000000..2f3869f Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a2_cgraph.png differ diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hcc_a3_cgraph.map b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a3_cgraph.map new file mode 100644 index 0000000..c931a46 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a3_cgraph.map @@ -0,0 +1,2 @@ +base referer +rect $fft_8hcc.html#a2 151,8 221,34 diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hcc_a3_cgraph.md5 b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a3_cgraph.md5 new file mode 100644 index 0000000..91830d0 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a3_cgraph.md5 @@ -0,0 +1 @@ +60d0602022030d538bcc3068a25b97cf \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hcc_a3_cgraph.png b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a3_cgraph.png new file mode 100644 index 0000000..2f3869f Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a3_cgraph.png differ diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hcc_a4_cgraph.map b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a4_cgraph.map new file mode 100644 index 0000000..037531e --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a4_cgraph.map @@ -0,0 +1,3 @@ +base referer +rect $fft_8hcc.html#a3 145,8 238,34 +rect $fft_8hcc.html#a2 287,8 357,34 diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hcc_a4_cgraph.md5 b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a4_cgraph.md5 new file mode 100644 index 0000000..a4d85c7 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a4_cgraph.md5 @@ -0,0 +1 @@ +5f114e2457f864aa033edf5b807704fa \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hcc_a4_cgraph.png b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a4_cgraph.png new file mode 100644 index 0000000..b2d2b15 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a4_cgraph.png differ diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hcc_a5_cgraph.map b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a5_cgraph.map new file mode 100644 index 0000000..615e423 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a5_cgraph.map @@ -0,0 +1,3 @@ +base referer +rect $fft_8hcc.html#a3 150,8 244,34 +rect $fft_8hcc.html#a2 293,8 362,34 diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hcc_a5_cgraph.md5 b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a5_cgraph.md5 new file mode 100644 index 0000000..87668b8 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a5_cgraph.md5 @@ -0,0 +1 @@ +99e366a583ff5563d9b44801efa74ea1 \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hcc_a5_cgraph.png b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a5_cgraph.png new file mode 100644 index 0000000..fd17c70 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a5_cgraph.png differ diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hcc_a6_cgraph.map b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a6_cgraph.map new file mode 100644 index 0000000..ca8d210 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a6_cgraph.map @@ -0,0 +1,2 @@ +base referer +rect $fft_8hcc.html#a2 167,8 237,34 diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hcc_a6_cgraph.md5 b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a6_cgraph.md5 new file mode 100644 index 0000000..84ec6cb --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a6_cgraph.md5 @@ -0,0 +1 @@ +556d882357bf3e1a8c4e82d6a4d5308a \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hcc_a6_cgraph.png b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a6_cgraph.png new file mode 100644 index 0000000..29c7f08 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/fft_8hcc_a6_cgraph.png differ diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hch-source.html b/Graphic_Equalizer_Split/doc/html/fft_8hch-source.html new file mode 100644 index 0000000..c741973 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hch-source.html @@ -0,0 +1,48 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/fft.hch Source File + + + + + +

fft.hch

Go to the documentation of this file.
00001 #define NUMBER_OF_COLUMNS       8
+00002 #define NUMBER_OF_POINTS        (1<<NUMBER_OF_COLUMNS)
+00003 #define NUMBER_OF_FREQUENCIES   (NUMBER_OF_POINTS>>1)
+00004 
+00005 #if HARDWARE_MULTIPLY
+00006 /*
+00007  * This routine obtains the audio data from the audio I/O component and copies this  
+00008  * data to local arrays for calculating purposes, and calls the FFT algorithm.
+00009 */
+00010 void perform_fft(signed 18 *pcm_audio);
+00011 
+00012 /* This routine calls the ifft algorithm and after completing that it obtains the 
+00013  * modified audio data and copies that to the output arrays of the audio I/O component. 
+00014  * Besides that it also fills the array used by the display routine for displaying the waveform.
+00015 */
+00016 void perform_ifft(signed 18 *modified_audio ,unsigned 6 *ifft_info);
+00017 #else
+00018 /*
+00019  * This routine obtains the audio data from the audio I/O component and copies this  
+00020  * data to local arrays for calculating purposes, and calls the FFT algorithm.
+00021 */
+00022 void perform_fft(signed 16 *pcm_audio);
+00023 
+00024 /* This routine calls the ifft algorithm and after completing that it obtains the 
+00025  * modified audio data and copies that to the output arrays of the audio I/O component. 
+00026  * Besides that it also fills the array used by the display routine for displaying the waveform.
+00027 */
+00028 void perform_ifft(signed 16 *modified_audio ,unsigned 6 *ifft_info);
+00029 #endif
+00030 
+00031 /* This routine equalizes the frequencies derived by the FFT calculation, 
+00032  * according to the settings of the equalizer bars.
+00033 */
+00034 void equalize_audio(audiodata_t *audiodata);
+

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hch.html b/Graphic_Equalizer_Split/doc/html/fft_8hch.html new file mode 100644 index 0000000..850be00 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hch.html @@ -0,0 +1,261 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/fft.hch File Reference + + + + + +

fft.hch File Reference

+

+This graph shows which files directly or indirectly include this file:

Included by dependency graph
+ + + + + +

+Go to the source code of this file. + + + + + + + + + + + + + + + + +

Defines

#define NUMBER_OF_COLUMNS   8
#define NUMBER_OF_POINTS   (1<<NUMBER_OF_COLUMNS)
#define NUMBER_OF_FREQUENCIES   (NUMBER_OF_POINTS>>1)

Functions

void perform_fft (signed 16 *pcm_audio)
void perform_ifft (signed 16 *modified_audio, unsigned 6 *ifft_info)
void equalize_audio (audiodata_t *audiodata)
 This routine equalizes the frequencies derived by the FFT calculation, according to the settings of the equalizer bars.
+


Define Documentation

+

+ + + + +
+ + + + +
#define NUMBER_OF_COLUMNS   8
+
+ + + + + +
+   + + +

+ +

+Definition at line 1 of file fft.hch. +

+Referenced by calculate_fft().

+

+ + + + +
+ + + + +
#define NUMBER_OF_POINTS   (1<<NUMBER_OF_COLUMNS)
+
+ + + + + +
+   + + +

+ +

+Definition at line 2 of file fft.hch. +

+Referenced by calculate_fft(), and equalize_audio().

+

+ + + + +
+ + + + +
#define NUMBER_OF_FREQUENCIES   (NUMBER_OF_POINTS>>1)
+
+ + + + + +
+   + + +

+ +

+Definition at line 3 of file fft.hch.

+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void perform_fft signed 16 *  pcm_audio  ) 
+
+ + + + + +
+   + + +

+ +

+Definition at line 259 of file fft.hcc. +

+References calculate_fft().

+ +

+Here is the call graph for this function:

+ + + + +

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void perform_ifft signed 16 *  modified_audio,
unsigned 6 *  ifft_info
+
+ + + + + +
+   + + +

+ +

+Definition at line 324 of file fft.hcc. +

+References calculate_fft().

+ +

+Here is the call graph for this function:

+ + + + +

+ + + + +
+ + + + + + + + + +
void equalize_audio audiodata_t audiodata  ) 
+
+ + + + + +
+   + + +

+This routine equalizes the frequencies derived by the FFT calculation, according to the settings of the equalizer bars. +

+

Note:
Cost: 3844 clock cycles (Maximum)
+
Parameters:
+ + +
*audiodata pointer to the audiodata struct, containing the eq_info, etc.
+
+
Returns:
void
+
Return values:
+ + +
void 
+
+ +

+Definition at line 398 of file fft.hcc. +

+References audiodata_t::display_log, eq_settings, audiodata_t::equalizer_levels_ptr, multiply(), and NUMBER_OF_POINTS.

+ +

+Here is the call graph for this function:

+ + + +
Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hch__dep__incl.map b/Graphic_Equalizer_Split/doc/html/fft_8hch__dep__incl.map new file mode 100644 index 0000000..8e0f55e --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hch__dep__incl.map @@ -0,0 +1,3 @@ +base referer +rect $fft_8hcc.html 7,7 66,34 +rect $main_8hcc.html 90,7 165,34 diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hch__dep__incl.md5 b/Graphic_Equalizer_Split/doc/html/fft_8hch__dep__incl.md5 new file mode 100644 index 0000000..bdbfb74 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hch__dep__incl.md5 @@ -0,0 +1 @@ +6bb05a468f78b02050527b66e74f1b34 \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hch__dep__incl.png b/Graphic_Equalizer_Split/doc/html/fft_8hch__dep__incl.png new file mode 100644 index 0000000..9e82038 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/fft_8hch__dep__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hch_a3_cgraph.map b/Graphic_Equalizer_Split/doc/html/fft_8hch_a3_cgraph.map new file mode 100644 index 0000000..037531e --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hch_a3_cgraph.map @@ -0,0 +1,3 @@ +base referer +rect $fft_8hcc.html#a3 145,8 238,34 +rect $fft_8hcc.html#a2 287,8 357,34 diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hch_a3_cgraph.md5 b/Graphic_Equalizer_Split/doc/html/fft_8hch_a3_cgraph.md5 new file mode 100644 index 0000000..a4d85c7 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hch_a3_cgraph.md5 @@ -0,0 +1 @@ +5f114e2457f864aa033edf5b807704fa \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hch_a3_cgraph.png b/Graphic_Equalizer_Split/doc/html/fft_8hch_a3_cgraph.png new file mode 100644 index 0000000..b2d2b15 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/fft_8hch_a3_cgraph.png differ diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hch_a4_cgraph.map b/Graphic_Equalizer_Split/doc/html/fft_8hch_a4_cgraph.map new file mode 100644 index 0000000..615e423 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hch_a4_cgraph.map @@ -0,0 +1,3 @@ +base referer +rect $fft_8hcc.html#a3 150,8 244,34 +rect $fft_8hcc.html#a2 293,8 362,34 diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hch_a4_cgraph.md5 b/Graphic_Equalizer_Split/doc/html/fft_8hch_a4_cgraph.md5 new file mode 100644 index 0000000..87668b8 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hch_a4_cgraph.md5 @@ -0,0 +1 @@ +99e366a583ff5563d9b44801efa74ea1 \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hch_a4_cgraph.png b/Graphic_Equalizer_Split/doc/html/fft_8hch_a4_cgraph.png new file mode 100644 index 0000000..fd17c70 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/fft_8hch_a4_cgraph.png differ diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hch_a5_cgraph.map b/Graphic_Equalizer_Split/doc/html/fft_8hch_a5_cgraph.map new file mode 100644 index 0000000..ca8d210 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hch_a5_cgraph.map @@ -0,0 +1,2 @@ +base referer +rect $fft_8hcc.html#a2 167,8 237,34 diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hch_a5_cgraph.md5 b/Graphic_Equalizer_Split/doc/html/fft_8hch_a5_cgraph.md5 new file mode 100644 index 0000000..84ec6cb --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/fft_8hch_a5_cgraph.md5 @@ -0,0 +1 @@ +556d882357bf3e1a8c4e82d6a4d5308a \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/fft_8hch_a5_cgraph.png b/Graphic_Equalizer_Split/doc/html/fft_8hch_a5_cgraph.png new file mode 100644 index 0000000..29c7f08 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/fft_8hch_a5_cgraph.png differ diff --git a/Graphic_Equalizer_Split/doc/html/files.html b/Graphic_Equalizer_Split/doc/html/files.html new file mode 100644 index 0000000..d24e5c6 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/files.html @@ -0,0 +1,37 @@ + + +Graphic Equalizer 2: File Index + + + + +

Graphic Equalizer 2 File List

Here is a list of all files with brief descriptions: + + + + + + + + + + + + + + + + + + + + + + + +
C:/Project Marcel & Oliver/Graphic_Equalizer/include/audio.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/configuration.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/display.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/display_shared.hch [code]Datastructures and defines for usage when interacting with the display library
C:/Project Marcel & Oliver/Graphic_Equalizer/include/eventhandler.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/eventhandler_shared.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/events.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/fft.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/mouse.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/mouse_shared.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/runfft.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/smartmedia.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/smartmedia_shared.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/include/weights_256.hch [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/src/audio.hcc [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/src/display.hcc [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/src/eventhandler.hcc [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/src/events.hcc [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/src/fft.hcc [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/src/main.hcc [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/src/mouse.hcc [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/src/runfft.hcc [code]
C:/Project Marcel & Oliver/Graphic_Equalizer/src/smartmedia.hcc [code]
+
Generated on Thu Dec 9 14:37:05 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/ftv2blank.png b/Graphic_Equalizer_Split/doc/html/ftv2blank.png new file mode 100644 index 0000000..493c3c0 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/ftv2blank.png differ diff --git a/Graphic_Equalizer_Split/doc/html/ftv2doc.png b/Graphic_Equalizer_Split/doc/html/ftv2doc.png new file mode 100644 index 0000000..f72999f Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/ftv2doc.png differ diff --git a/Graphic_Equalizer_Split/doc/html/ftv2folderclosed.png b/Graphic_Equalizer_Split/doc/html/ftv2folderclosed.png new file mode 100644 index 0000000..d6d0634 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/ftv2folderclosed.png differ diff --git a/Graphic_Equalizer_Split/doc/html/ftv2folderopen.png b/Graphic_Equalizer_Split/doc/html/ftv2folderopen.png new file mode 100644 index 0000000..bbe2c91 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/ftv2folderopen.png differ diff --git a/Graphic_Equalizer_Split/doc/html/ftv2lastnode.png b/Graphic_Equalizer_Split/doc/html/ftv2lastnode.png new file mode 100644 index 0000000..e7b9ba9 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/ftv2lastnode.png differ diff --git a/Graphic_Equalizer_Split/doc/html/ftv2link.png b/Graphic_Equalizer_Split/doc/html/ftv2link.png new file mode 100644 index 0000000..14f3fed Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/ftv2link.png differ diff --git a/Graphic_Equalizer_Split/doc/html/ftv2mlastnode.png b/Graphic_Equalizer_Split/doc/html/ftv2mlastnode.png new file mode 100644 index 0000000..09ceb6a Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/ftv2mlastnode.png differ diff --git a/Graphic_Equalizer_Split/doc/html/ftv2mnode.png b/Graphic_Equalizer_Split/doc/html/ftv2mnode.png new file mode 100644 index 0000000..3254c05 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/ftv2mnode.png differ diff --git a/Graphic_Equalizer_Split/doc/html/ftv2node.png b/Graphic_Equalizer_Split/doc/html/ftv2node.png new file mode 100644 index 0000000..c9f06a5 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/ftv2node.png differ diff --git a/Graphic_Equalizer_Split/doc/html/ftv2plastnode.png b/Graphic_Equalizer_Split/doc/html/ftv2plastnode.png new file mode 100644 index 0000000..0b07e00 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/ftv2plastnode.png differ diff --git a/Graphic_Equalizer_Split/doc/html/ftv2pnode.png b/Graphic_Equalizer_Split/doc/html/ftv2pnode.png new file mode 100644 index 0000000..2001b79 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/ftv2pnode.png differ diff --git a/Graphic_Equalizer_Split/doc/html/ftv2vertline.png b/Graphic_Equalizer_Split/doc/html/ftv2vertline.png new file mode 100644 index 0000000..b330f3a Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/ftv2vertline.png differ diff --git a/Graphic_Equalizer_Split/doc/html/functions.html b/Graphic_Equalizer_Split/doc/html/functions.html new file mode 100644 index 0000000..2ba7edc --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/functions.html @@ -0,0 +1,40 @@ + + +Graphic Equalizer 2: Data Fields + + + + + + +

+Here is a list of all struct and union fields with links to the structures/unions they belong to:

+
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/functions_vars.html b/Graphic_Equalizer_Split/doc/html/functions_vars.html new file mode 100644 index 0000000..d23b45c --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/functions_vars.html @@ -0,0 +1,40 @@ + + +Graphic Equalizer 2: Data Fields - Variables + + + + + + +

+

+
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/globals.html b/Graphic_Equalizer_Split/doc/html/globals.html new file mode 100644 index 0000000..cec412d --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/globals.html @@ -0,0 +1,192 @@ + + +Graphic Equalizer 2: Globals + + + + + +
_ | a | b | c | d | e | f | h | i | l | m | n | p | r | s | u | v | w
+ +

+ +

+Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- _ -

+

- a -

+

- b -

+

- c -

+

- d -

+

- e -

+

- f -

+

- h -

+

- i -

+

- l -

+

- m -

+

- n -

+

- p -

+

- r -

+

- s -

+

- u -

+

- v -

+

- w -

+
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/globals_defs.html b/Graphic_Equalizer_Split/doc/html/globals_defs.html new file mode 100644 index 0000000..f1ce8e4 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/globals_defs.html @@ -0,0 +1,166 @@ + + +Graphic Equalizer 2: Globals - Defines + + + + + +
_ | a | b | c | d | e | f | h | i | l | m | n | p | r | s | u | w
+ +

+ +

+

- _ -

+

- a -

+

- b -

+

- c -

+

- d -

+

- e -

+

- f -

+

- h -

+

- i -

+

- l -

+

- m -

+

- n -

+

- p -

+

- r -

+

- s -

+

- u -

+

- w -

+
Generated on Thu Dec 9 14:37:10 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/globals_func.html b/Graphic_Equalizer_Split/doc/html/globals_func.html new file mode 100644 index 0000000..d8ce10b --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/globals_func.html @@ -0,0 +1,33 @@ + + +Graphic Equalizer 2: Globals - Functions + + + + + + +

+

+
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/globals_vars.html b/Graphic_Equalizer_Split/doc/html/globals_vars.html new file mode 100644 index 0000000..5cda06d --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/globals_vars.html @@ -0,0 +1,25 @@ + + +Graphic Equalizer 2: Globals - Variables + + + + + + +

+

+
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/graph_legend.dot b/Graphic_Equalizer_Split/doc/html/graph_legend.dot new file mode 100644 index 0000000..5420927 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/graph_legend.dot @@ -0,0 +1,22 @@ +digraph G +{ + edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; + node [fontname="Helvetica",fontsize=10,shape=record]; + Node9 [shape="box",label="Inherited",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",style="filled" fontcolor="white"]; + Node10 -> Node9 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="Helvetica"]; + Node10 [shape="box",label="PublicBase",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classPublicBase.html"]; + Node11 -> Node10 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="Helvetica"]; + Node11 [shape="box",label="Truncated",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="red",URL="$classTruncated.html"]; + Node13 -> Node9 [dir=back,color="darkgreen",fontsize=10,style="solid",fontname="Helvetica"]; + Node13 [shape="box",label="ProtectedBase",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classProtectedBase.html"]; + Node14 -> Node9 [dir=back,color="firebrick4",fontsize=10,style="solid",fontname="Helvetica"]; + Node14 [shape="box",label="PrivateBase",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classPrivateBase.html"]; + Node15 -> Node9 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="Helvetica"]; + Node15 [shape="box",label="Undocumented",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="grey75"]; + Node16 -> Node9 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="Helvetica"]; + Node16 [shape="box",label="Templ< int >",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classTempl.html"]; + Node17 -> Node16 [dir=back,color="orange",fontsize=10,style="dashed",label="< int >",fontname="Helvetica"]; + Node17 [shape="box",label="Templ< T >",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classTempl.html"]; + Node18 -> Node9 [dir=back,color="darkorchid3",fontsize=10,style="dashed",label="m_usedClass",fontname="Helvetica"]; + Node18 [shape="box",label="Used",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classUsed.html"]; +} diff --git a/Graphic_Equalizer_Split/doc/html/graph_legend.html b/Graphic_Equalizer_Split/doc/html/graph_legend.html new file mode 100644 index 0000000..b5e1c0d --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/graph_legend.html @@ -0,0 +1,74 @@ + + +Graphic Equalizer 2: Graph Legend + + + + +

Graph Legend

This page explains how to interpret the graphs that are generated by doxygen.

+Consider the following example:

/*! Invisible class because of truncation */
+class Invisible { };
+
+/*! Truncated class, inheritance relation is hidden */
+class Truncated : public Invisible { };
+
+/* Class not documented with doxygen comments */
+class Undocumented { };
+
+/*! Class that is inherited using public inheritance */
+class PublicBase : public Truncated { };
+
+/*! A template class */
+template<class T> class Templ { };
+
+/*! Class that is inherited using protected inheritance */
+class ProtectedBase { };
+
+/*! Class that is inherited using private inheritance */
+class PrivateBase { };
+
+/*! Class that is used by the Inherited class */
+class Used { };
+
+/*! Super class that inherits a number of other classes */
+class Inherited : public PublicBase,
+                  protected ProtectedBase,
+                  private PrivateBase,
+                  public Undocumented
+                  public Templ<int>
+{
+  private:
+    Used *m_usedClass;
+};
+
If the MAX_DOT_GRAPH_HEIGHT tag in the configuration file is set to 240 this will result in the following graph:

+

+graph_legend.png +
+

+The boxes in the above graph have the following meaning:

    +
  • +A filled black box represents the struct or class for which the graph is generated.
  • +
  • +A box with a black border denotes a documented struct or class.
  • +
  • +A box with a grey border denotes an undocumented struct or class.
  • +
  • +A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • +
+The arrows have the following meaning:
    +
  • +A dark blue arrow is used to visualize a public inheritance relation between two classes.
  • +
  • +A dark green arrow is used for protected inheritance.
  • +
  • +A dark red arrow is used for private inheritance.
  • +
  • +A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible.
  • +
  • +A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance.
  • +
+
Generated on Thu Dec 9 14:37:11 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/graph_legend.png b/Graphic_Equalizer_Split/doc/html/graph_legend.png new file mode 100644 index 0000000..b8cfe42 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/graph_legend.png differ diff --git a/Graphic_Equalizer_Split/doc/html/index.html b/Graphic_Equalizer_Split/doc/html/index.html new file mode 100644 index 0000000..bbefe91 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/index.html @@ -0,0 +1,8 @@ + + +Graphic Equalizer 2 + + + + + diff --git a/Graphic_Equalizer_Split/doc/html/main.html b/Graphic_Equalizer_Split/doc/html/main.html new file mode 100644 index 0000000..586bea1 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/main.html @@ -0,0 +1,14 @@ + + +Graphic Equalizer 2: Main Page + + + + +

Graphic Equalizer 2 Documentation

+

+

2.0.1


Generated on Thu Dec 9 14:37:05 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/main_8hcc-source.html b/Graphic_Equalizer_Split/doc/html/main_8hcc-source.html new file mode 100644 index 0000000..33c19e6 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/main_8hcc-source.html @@ -0,0 +1,153 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/main.hcc Source File + + + + + +

main.hcc

Go to the documentation of this file.
00001 
+00019 /*
+00020  * Set the Clock rate for this domain. 25.175 Mhz is required for the Video output.
+00021  */
+00022 #define PAL_TARGET_CLOCK_RATE 25175000
+00023 
+00024 /******** System Includes *************/
+00025 #include "pal_master.hch"
+00026 
+00027 /******** Application Includes ********/
+00028 #include "configuration.hch"
+00029 #include "audio.hch"
+00030 #include "mouse_shared.hch"
+00031 #include "mouse.hch"
+00032 #include "eventhandler_shared.hch"
+00033 #include "eventhandler.hch"
+00034 #include "display_shared.hch"
+00035 #include "display.hch"
+00036 #include "smartmedia.hch"
+00037 
+00038 #include "fft.hch"
+00039 #include "runfft.hch"
+00040 
+00041 #if HAVE_DEBUG
+00042         #include "debug.hch"
+00043 #endif
+00044 
+00051 void main(void) {
+00052         /*
+00053          * Set VideoOut, Audio I/O and Ram Handles and set clockrate.
+00054          */
+00055         macro expr ClockRate = PAL_ACTUAL_CLOCK_RATE;
+00056         macro expr VideoOut = PalVideoOutOptimalCT(ClockRate);
+00057         macro expr AudioIn  = PalAudioInCT(0);
+00058         macro expr AudioOut = PalAudioOutCT(0);
+00059         macro expr RAM_BANK0 = PalPL2RAMCT(0);
+00060 
+00061         mousedata_t mousedata;
+00062         events_t events;
+00063         audiodata_t audiodata;
+00064         skindata_t skindata;
+00065         unsigned 1 result;
+00066 
+00067         /*
+00068          * Check library versions and Request various hardware functionality.
+00069          * We need at least Major Version 1. For Audio purposes we need atleast
+00070          * minor version 2.
+00071          */
+00072         PalVersionRequire(1, 2);
+00073         PalVideoOutRequire(1);
+00074         PalAudioInRequire(1);
+00075         PalAudioOutRequire(1);
+00076 
+00077         /*
+00078          * We verify some datawidths here at compile time. This to ensure
+00079          * successfull operation.
+00080          */
+00081         assert (PalVideoOutGetColorWidthCT(VideoOut) == 24, 0, 
+00082                 "We need a 24-bit color Display.");
+00083         assert (PalPL2RAMGetDataWidthCT(RAM_BANK0) >= 32, 0, 
+00084                 "We can't work with anything less then 32 bits wide ram.");
+00085 
+00086         /*
+00087          * Run The Following main tasks in parallel.
+00088          */
+00089         par {
+00090                 /*
+00091                  * Primary task is to 'Run' several hardware simultaniously.
+00092                  */
+00093                 PalVideoOutRun(VideoOut, ClockRate);
+00094                 MouseRun(ClockRate);
+00095                 PalAudioInRun(AudioIn, ClockRate);
+00096                 PalAudioOutRun(AudioOut, ClockRate);
+00097                 PalPL2RAMRun(RAM_BANK0, ClockRate);
+00098 #if HAVE_SMARTMEDIA
+00099                 /*
+00100                  * The smartmedia device needs the CPLD to run also.
+00101                  */
+00102                 CPLDRun(ClockRate);
+00103                 SmartMediaRun(ClockRate);
+00104 #endif
+00105 #if HAVE_DEBUG
+00106                 RC200RS232Run(RC200RS232_115200Baud, RC200RS232ParityNone,
+00107                         RC200RS232FlowControlNone, ClockRate);
+00108 #endif
+00109                 
+00110                 /*
+00111                  * Parallel to our Primary tasks we run the application.
+00112                  */
+00113                 seq {
+00114                         /*
+00115                          * But first we need to initialize Video and Audio.
+00116                          * We also load the data from the SmartMedia card
+00117                          * into the ram.
+00118                          */
+00119 #if HAVE_DEBUG
+00120                         print_cls();
+00121                         print_string("Graphic Equalizer 2");
+00122                         print_eol();
+00123 #endif
+00124                         PalVideoOutEnable(VideoOut);
+00125                         PalAudioInEnable(AudioIn);
+00126                         PalAudioOutEnable(AudioOut);
+00127                         audio_init(6, LINE_IN, SR_44100, AudioIn, AudioOut);
+00128 #if HAVE_SMARTMEDIA
+00129                         /*
+00130                          * Once we properly setup the SmartMedia we load our
+00131                          * data folowed by our main program loop.
+00132                          */
+00133                         result = smartmedia_init();
+00134                         if (!result) {
+00135 #endif
+00136                                 smartmedia_loaddata(&skindata);
+00137 
+00138                                 /*
+00139                                  * Main application starts here!
+00140                                  */
+00141                                 par {
+00142                                         /*
+00143                                          * From here we run the mouse driver, audio
+00144                                          * and display in parallel. None of these
+00145                                          * should ever return.
+00146                                          */
+00147                                         mouse_main(&mousedata);
+00148                                         display_main(&skindata, &audiodata, &events, &mousedata);
+00149                                         eventhandler_main(&audiodata, &events, &mousedata);
+00150                                         audio_main(audiodata, AudioIn, AudioOut);
+00151                                 }
+00152 #if HAVE_SMARTMEDIA
+00153                         } else {
+00154 #if HAVE_DEBUG
+00155                                 print_string("Error Initializing SmartMedia");
+00156 #endif
+00157                         }
+00158 #endif
+00159                 }
+00160         }
+00161 
+00162 } /* --- main() --- */
+

Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/main_8hcc.html b/Graphic_Equalizer_Split/doc/html/main_8hcc.html new file mode 100644 index 0000000..91be25e --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/main_8hcc.html @@ -0,0 +1,151 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/main.hcc File Reference + + + + + +

main.hcc File Reference

#include "pal_master.hch"
+#include "configuration.hch"
+#include "audio.hch"
+#include "mouse_shared.hch"
+#include "mouse.hch"
+#include "eventhandler_shared.hch"
+#include "eventhandler.hch"
+#include "display_shared.hch"
+#include "display.hch"
+#include "smartmedia.hch"
+#include "fft.hch"
+#include "runfft.hch"
+ +

+Include dependency graph for main.hcc:

Include dependency graph
+ + + + + + + + + + + + + + +

+Go to the source code of this file. + + + + + + + + +

Defines

#define PAL_TARGET_CLOCK_RATE   25175000

Functions

void main (void)
 Main Application Loop.
+


Detailed Description

+

+Graphic Equalizer API

+

+Project information.

+Project Graphic Equalizer
+
Author:
O.M. Schinagl
+
Date:
20041011
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041011: O.M. Schinagl
+ Initial version +

+Definition in file main.hcc.


Define Documentation

+

+ + + + +
+ + + + +
#define PAL_TARGET_CLOCK_RATE   25175000
+
+ + + + + +
+   + + +

+ +

+Definition at line 22 of file main.hcc.

+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void main void   ) 
+
+ + + + + +
+   + + +

+Main Application Loop. +

+

Returns:
void
+
Return values:
+ + +
void 
+
+ +

+Definition at line 51 of file main.hcc. +

+References audio_init(), audio_main(), CPLDRun, display_main(), eventhandler_main(), LINE_IN, mouse_main(), MouseRun, smartmedia_init(), smartmedia_loaddata(), SmartMediaRun, and SR_44100.

+ +

+Here is the call graph for this function:

+ + + + + + + + + + + +
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/main_8hcc__incl.map b/Graphic_Equalizer_Split/doc/html/main_8hcc__incl.map new file mode 100644 index 0000000..93dc814 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/main_8hcc__incl.map @@ -0,0 +1,12 @@ +base referer +rect $configuration_8hch.html 143,7 269,34 +rect $audio_8hch.html 293,7 373,34 +rect $mouse__shared_8hch.html 397,7 533,34 +rect $mouse_8hch.html 557,7 645,34 +rect $eventhandler__shared_8hch.html 669,7 842,34 +rect $eventhandler_8hch.html 866,7 991,34 +rect $display__shared_8hch.html 1015,7 1151,34 +rect $display_8hch.html 1175,7 1263,34 +rect $smartmedia_8hch.html 1287,7 1405,34 +rect $fft_8hch.html 1429,7 1487,34 +rect $runfft_8hch.html 1511,7 1589,34 diff --git a/Graphic_Equalizer_Split/doc/html/main_8hcc__incl.md5 b/Graphic_Equalizer_Split/doc/html/main_8hcc__incl.md5 new file mode 100644 index 0000000..180884e --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/main_8hcc__incl.md5 @@ -0,0 +1 @@ +1419fd3b33c01dc6aea19227c10014a5 \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/main_8hcc__incl.png b/Graphic_Equalizer_Split/doc/html/main_8hcc__incl.png new file mode 100644 index 0000000..a519b5a Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/main_8hcc__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/main_8hcc_a1_cgraph.map b/Graphic_Equalizer_Split/doc/html/main_8hcc_a1_cgraph.map new file mode 100644 index 0000000..fc498f4 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/main_8hcc_a1_cgraph.map @@ -0,0 +1,10 @@ +base referer +rect $audio_8hcc.html#a0 145,8 225,34 +rect $audio_8hcc.html#a1 140,58 230,85 +rect $display_8hcc.html#a2 134,109 236,136 +rect $eventhandler_8hcc.html#a2 117,160 253,186 +rect $mouse_8hcc.html#a0 136,210 234,237 +rect $smartmedia_8hch.html#a9 126,261 244,288 +rect $smartmedia_8hcc.html#a1 109,312 261,338 +rect $events_8hcc.html#a3 325,134 416,161 +rect $display_8hcc.html#a3 310,185 430,212 diff --git a/Graphic_Equalizer_Split/doc/html/main_8hcc_a1_cgraph.md5 b/Graphic_Equalizer_Split/doc/html/main_8hcc_a1_cgraph.md5 new file mode 100644 index 0000000..095d857 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/main_8hcc_a1_cgraph.md5 @@ -0,0 +1 @@ +f9b3a03c002f36a20920f8e86e483e1a \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/main_8hcc_a1_cgraph.png b/Graphic_Equalizer_Split/doc/html/main_8hcc_a1_cgraph.png new file mode 100644 index 0000000..c55d7a3 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/main_8hcc_a1_cgraph.png differ diff --git a/Graphic_Equalizer_Split/doc/html/mouse_8hcc-source.html b/Graphic_Equalizer_Split/doc/html/mouse_8hcc-source.html new file mode 100644 index 0000000..dfb8298 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/mouse_8hcc-source.html @@ -0,0 +1,116 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/mouse.hcc Source File + + + + + +

mouse.hcc

Go to the documentation of this file.
00001 
+00021 /******** System Includes *************/
+00022 #include <stdlib.hch>
+00023 
+00024 #include "pal_master.hch"
+00025 #include "pal_mouse.hch"
+00026 
+00027 /******** Application Includes ********/
+00028 #include "configuration.hch"
+00029 #include "mouse_shared.hch"
+00030 #include "mouse.hch"
+00031 
+00032 #if HAVE_DEBUG
+00033         #include "debug.hch"
+00034 #endif
+00035 
+00036 
+00037 
+00048 void mouse_main(mousedata_t *mousedata) {
+00049         unsigned 18 touch_sampler;
+00050         unsigned 10 x, oldx;
+00051         unsigned 9 y, oldy;
+00052         unsigned 3 mousestate, oldmousestate;
+00053         unsigned 1 touch, touched, oldtouched;
+00054 
+00055         /*
+00056          * We only check for mouse states once every 2^18 time. This to
+00057          * overcome the sampling of the 'Touch' state of the RC200 libs. When
+00058          * using newer libs this might be overkill, e.g. smaller values may
+00059          * work or sampling all together will be redundant.
+00060          */
+00061         touch_sampler = 1;
+00062         while (TRUE) {
+00063                 if (!touch_sampler) {
+00064                         /*
+00065                          * We are here ready to set mouse states. We compare
+00066                          * current and previous states and thereby determine
+00067                          * the state to send to others
+00068                          */
+00069                         if (touched) {
+00070                                 if(oldtouched) {
+00071                                         mousestate = MOUSE_STATE_DOWN;
+00072                                 } else {
+00073                                         mousestate = MOUSE_STATE_ON_PRESS;
+00074                                 }
+00075                                 oldtouched = TRUE;
+00076                         } else {
+00077                                 if(oldtouched) {
+00078                                         mousestate = MOUSE_STATE_ON_RELEASE;
+00079                                 } else {
+00080                                         mousestate = MOUSE_STATE_UP;
+00081                                 }
+00082                                 oldtouched = FALSE;
+00083                         }
+00084                         /*
+00085                          * We have now processed our Touch. Reset it for the
+00086                          * next run.
+00087                          */
+00088                         touched = FALSE;
+00089 
+00090                         /*
+00091                          * In the rare occurance that we receive values
+00092                          * beyond our range, we set them to some sane
+00093                          * values here.
+00094                          */
+00095                          x = (x > 639) ? 0 : x;
+00096                          y = (y > 479) ? 0 : y;
+00097 
+00098                         /*
+00099                          * Compare Previous States and Coordinates to determine
+00100                          * wether they have changed. If so, Copy them into
+00101                          * shared memory, notify the listening processes and
+00102                          * Set the new as previous values for the next run. We
+00103                          * can only do this when the display has handled all
+00104                          * changes.
+00105                          */
+00106                         if (((oldmousestate != mousestate) || (oldx != x) || (oldy != y)) && (MOUSE_NOT_UPDATED == mousedata->status)) {
+00107                                 //par {
+00108                                         oldx = x;
+00109                                         oldy = y;
+00110                                         oldmousestate = mousestate;
+00111                                         mousedata->x = x;
+00112                                         mousedata->y = 0 @ y;
+00113                                         mousedata->state = mousestate;
+00114                                         mousedata->status = MOUSE_UPDATED;
+00115                                 //}
+00116                         }
+00117                 }
+00118 
+00119                 /*
+00120                  * Read the current X and Y of the 'cursor' and register wether
+00121                  * the display was touched. If touched store this in a local
+00122                  * store. This we do to catch the sampling of the RC200 lib.
+00123                  */
+00124                 RC200TouchScreenReadScaled(&x, &y, &touch);
+00125                 if (touch) {
+00126                         touched = TRUE;
+00127                 }
+00128 
+00129                 touch_sampler++;
+00130         }
+00131 } /* --- mouse_main() --- */
+

Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/mouse_8hcc.html b/Graphic_Equalizer_Split/doc/html/mouse_8hcc.html new file mode 100644 index 0000000..6dffc76 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/mouse_8hcc.html @@ -0,0 +1,101 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/mouse.hcc File Reference + + + + + +

mouse.hcc File Reference

#include <stdlib.hch>
+#include "pal_master.hch"
+#include "pal_mouse.hch"
+#include "configuration.hch"
+#include "mouse_shared.hch"
+#include "mouse.hch"
+ +

+Include dependency graph for mouse.hcc:

Include dependency graph
+ + + + + + +

+Go to the source code of this file. + + + + + +

Functions

void mouse_main (mousedata_t *mousedata)
 Main mousedriver. This function never returns! It calls the main mousehandler and returns the States and coordinates into a shared store.
+


Detailed Description

+

+Graphic Equalizer API

+input function itself is however performed by the touchscreen of the RC200.

+Project information.

+Project Graphic Equalizer
+
Author:
O.M. Schinagl
+
Date:
20041011
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041011: O.M. Schinagl
+ Initial version +

+Definition in file mouse.hcc.


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void mouse_main mousedata_t mousedata  ) 
+
+ + + + + +
+   + + +

+Main mousedriver. This function never returns! It calls the main mousehandler and returns the States and coordinates into a shared store. +

+

Parameters:
+ + +
*mousedata Storage for all mousedata and states.
+
+
Returns:
Never Returns.
+
Return values:
+ + +
void 
+
+ +

+Definition at line 48 of file mouse.hcc. +

+References MOUSE_NOT_UPDATED, mousedata_t::state, mousedata_t::status, mousedata_t::x, and mousedata_t::y. +

+Referenced by main().

+


Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/mouse_8hcc__incl.map b/Graphic_Equalizer_Split/doc/html/mouse_8hcc__incl.map new file mode 100644 index 0000000..ed301e8 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/mouse_8hcc__incl.map @@ -0,0 +1,4 @@ +base referer +rect $configuration_8hch.html 381,7 506,34 +rect $mouse__shared_8hch.html 530,7 666,34 +rect $mouse_8hch.html 690,7 778,34 diff --git a/Graphic_Equalizer_Split/doc/html/mouse_8hcc__incl.md5 b/Graphic_Equalizer_Split/doc/html/mouse_8hcc__incl.md5 new file mode 100644 index 0000000..8a79480 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/mouse_8hcc__incl.md5 @@ -0,0 +1 @@ +254026f7ee99dbe927548df7b2f1ac05 \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/mouse_8hcc__incl.png b/Graphic_Equalizer_Split/doc/html/mouse_8hcc__incl.png new file mode 100644 index 0000000..f87dd35 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/mouse_8hcc__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/mouse_8hch-source.html b/Graphic_Equalizer_Split/doc/html/mouse_8hch-source.html new file mode 100644 index 0000000..5c7b232 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/mouse_8hch-source.html @@ -0,0 +1,38 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/mouse.hch Source File + + + + + +

mouse.hch

Go to the documentation of this file.
00001 
+00019 #ifndef _MOUSEDRIVER_HCH
+00020 #define _MOUSEDRIVER_HCH 1
+00021 
+00022 
+00023 
+00024 /*
+00025  * Create a define to keep API generic
+00026  */
+00027 #define MouseRun(ClockRate) RC200TouchScreenRun(ClockRate)
+00028 
+00029 
+00030 
+00031 /*
+00032  * Main mousedriver loop. This procedure never returns! It handles mouse input,
+00033  * updates the shared memory and notifies listeners. It requires a pointer to
+00034  * a mousedata_t struct to store mouse information.
+00035  */
+00036 void mouse_main(mousedata_t *mousedata);
+00037 
+00038 #else
+00039 #error "ERROR file mousedriver.hch multiple times included"
+00040 #endif /* --- _MOUSEDRIVER_HCH --- */
+00041 
+

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/mouse_8hch.html b/Graphic_Equalizer_Split/doc/html/mouse_8hch.html new file mode 100644 index 0000000..557d23f --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/mouse_8hch.html @@ -0,0 +1,157 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/mouse.hch File Reference + + + + + +

mouse.hch File Reference

+

+This graph shows which files directly or indirectly include this file:

Included by dependency graph
+ + + + + +

+Go to the source code of this file. + + + + + + + + + + +

Defines

#define _MOUSEDRIVER_HCH   1
#define MouseRun(ClockRate)   RC200TouchScreenRun(ClockRate)

Functions

void mouse_main (mousedata_t *mousedata)
 Main mousedriver. This function never returns! It calls the main mousehandler and returns the States and coordinates into a shared store.
+


Detailed Description

+

+Graphic Equalizer API

+

+Project information.

+Project Graphic Equalizer
+
Author:
O.M. Schinagl
+
Date:
20041011
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041011: O.M. Schinagl
+ Initial version +

+Definition in file mouse.hch.


Define Documentation

+

+ + + + +
+ + + + +
#define _MOUSEDRIVER_HCH   1
+
+ + + + + +
+   + + +

+ +

+Definition at line 20 of file mouse.hch.

+

+ + + + +
+ + + + + + + + + +
#define MouseRun ClockRate   )    RC200TouchScreenRun(ClockRate)
+
+ + + + + +
+   + + +

+ +

+Definition at line 27 of file mouse.hch. +

+Referenced by main().

+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void mouse_main mousedata_t mousedata  ) 
+
+ + + + + +
+   + + +

+Main mousedriver. This function never returns! It calls the main mousehandler and returns the States and coordinates into a shared store. +

+

Parameters:
+ + +
*mousedata Storage for all mousedata and states.
+
+
Returns:
Never Returns.
+
Return values:
+ + +
void 
+
+ +

+Definition at line 48 of file mouse.hcc. +

+References MOUSE_NOT_UPDATED, mousedata_t::state, mousedata_t::status, mousedata_t::x, and mousedata_t::y. +

+Referenced by main().

+


Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/mouse_8hch__dep__incl.map b/Graphic_Equalizer_Split/doc/html/mouse_8hch__dep__incl.map new file mode 100644 index 0000000..c2ecffa --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/mouse_8hch__dep__incl.map @@ -0,0 +1,3 @@ +base referer +rect $main_8hcc.html 8,7 82,34 +rect $mouse_8hcc.html 106,7 192,34 diff --git a/Graphic_Equalizer_Split/doc/html/mouse_8hch__dep__incl.md5 b/Graphic_Equalizer_Split/doc/html/mouse_8hch__dep__incl.md5 new file mode 100644 index 0000000..30a98a4 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/mouse_8hch__dep__incl.md5 @@ -0,0 +1 @@ +13b256c6eed7f888f4f52496299b4b2d \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/mouse_8hch__dep__incl.png b/Graphic_Equalizer_Split/doc/html/mouse_8hch__dep__incl.png new file mode 100644 index 0000000..ac0c83c Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/mouse_8hch__dep__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/mouse__shared_8hch-source.html b/Graphic_Equalizer_Split/doc/html/mouse__shared_8hch-source.html new file mode 100644 index 0000000..1910665 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/mouse__shared_8hch-source.html @@ -0,0 +1,53 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/mouse_shared.hch Source File + + + + + +

mouse_shared.hch

Go to the documentation of this file.
00001 
+00019 #ifndef _MOUSEDRIVER_SHARED_HCH
+00020 #define _MOUSEDRIVER_SHARED_HCH 1
+00021 
+00022 /*** Data Types **********************/
+00023 
+00024 /*
+00025  * Type definition of the shared memory to be used in various processes
+00026  */
+00027 typedef struct {
+00028         unsigned 10 x, y;
+00029         unsigned 3 state;
+00030         unsigned 1 status;
+00031 } mousedata_t;
+00032 
+00033 
+00034 
+00035 /*
+00036  * States used to identify wether mouse data is updated
+00037  */
+00038 #define MOUSE_NOT_UPDATED       0
+00039 #define MOUSE_UPDATED           1
+00040 
+00041 
+00042 
+00043 /*
+00044  * Set of Mouse States defines
+00045  */
+00046 #define MOUSE_STATE_UP          0
+00047 #define MOUSE_STATE_ON_PRESS    1
+00048 #define MOUSE_STATE_DOWN        2
+00049 #define MOUSE_STATE_ON_RELEASE  3
+00050 
+00051 
+00052 
+00053 #else
+00054 #error "ERROR file mousedriver_shared.hch multiple times included"
+00055 #endif /* --- _MOUSEDRIVER_SHARED_HCH --- */
+00056 
+

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/mouse__shared_8hch.html b/Graphic_Equalizer_Split/doc/html/mouse__shared_8hch.html new file mode 100644 index 0000000..05df284 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/mouse__shared_8hch.html @@ -0,0 +1,247 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/mouse_shared.hch File Reference + + + + + +

mouse_shared.hch File Reference

+

+This graph shows which files directly or indirectly include this file:

Included by dependency graph
+ + + + + + + + +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  mousedata_t

Defines

#define _MOUSEDRIVER_SHARED_HCH   1
#define MOUSE_NOT_UPDATED   0
#define MOUSE_UPDATED   1
#define MOUSE_STATE_UP   0
#define MOUSE_STATE_ON_PRESS   1
#define MOUSE_STATE_DOWN   2
#define MOUSE_STATE_ON_RELEASE   3
+


Detailed Description

+

+Graphic Equalizer API

+

+Project information.

+Project Graphic Equalizer
+
Author:
O.M. Schinagl
+
Date:
20041011
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041011: O.M. Schinagl
+ Initial version +

+Definition in file mouse_shared.hch.


Define Documentation

+

+ + + + +
+ + + + +
#define _MOUSEDRIVER_SHARED_HCH   1
+
+ + + + + +
+   + + +

+ +

+Definition at line 20 of file mouse_shared.hch.

+

+ + + + +
+ + + + +
#define MOUSE_NOT_UPDATED   0
+
+ + + + + +
+   + + +

+ +

+Definition at line 38 of file mouse_shared.hch. +

+Referenced by mouse_main().

+

+ + + + +
+ + + + +
#define MOUSE_UPDATED   1
+
+ + + + + +
+   + + +

+ +

+Definition at line 39 of file mouse_shared.hch. +

+Referenced by display_main().

+

+ + + + +
+ + + + +
#define MOUSE_STATE_UP   0
+
+ + + + + +
+   + + +

+ +

+Definition at line 46 of file mouse_shared.hch.

+

+ + + + +
+ + + + +
#define MOUSE_STATE_ON_PRESS   1
+
+ + + + + +
+   + + +

+ +

+Definition at line 47 of file mouse_shared.hch. +

+Referenced by eventhandler_main().

+

+ + + + +
+ + + + +
#define MOUSE_STATE_DOWN   2
+
+ + + + + +
+   + + +

+ +

+Definition at line 48 of file mouse_shared.hch. +

+Referenced by eventhandler_main().

+

+ + + + +
+ + + + +
#define MOUSE_STATE_ON_RELEASE   3
+
+ + + + + +
+   + + +

+ +

+Definition at line 49 of file mouse_shared.hch.

+


Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/mouse__shared_8hch__dep__incl.map b/Graphic_Equalizer_Split/doc/html/mouse__shared_8hch__dep__incl.map new file mode 100644 index 0000000..199f162 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/mouse__shared_8hch__dep__incl.map @@ -0,0 +1,6 @@ +base referer +rect $display_8hcc.html 8,7 96,34 +rect $eventhandler_8hcc.html 120,7 242,34 +rect $main_8hcc.html 266,7 341,34 +rect $mouse_8hcc.html 365,7 450,34 +rect $smartmedia_8hcc.html 474,7 592,34 diff --git a/Graphic_Equalizer_Split/doc/html/mouse__shared_8hch__dep__incl.md5 b/Graphic_Equalizer_Split/doc/html/mouse__shared_8hch__dep__incl.md5 new file mode 100644 index 0000000..003654a --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/mouse__shared_8hch__dep__incl.md5 @@ -0,0 +1 @@ +0fb2c7882172821abee6da1bc34d0db2 \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/mouse__shared_8hch__dep__incl.png b/Graphic_Equalizer_Split/doc/html/mouse__shared_8hch__dep__incl.png new file mode 100644 index 0000000..01b165d Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/mouse__shared_8hch__dep__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/runfft_8hcc-source.html b/Graphic_Equalizer_Split/doc/html/runfft_8hcc-source.html new file mode 100644 index 0000000..28ce4b0 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/runfft_8hcc-source.html @@ -0,0 +1,168 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/runfft.hcc Source File + + + + + +

runfft.hcc

Go to the documentation of this file.
00001 
+00020 #include <stdlib.hch>
+00021 #include "pal_master.hch"
+00022 
+00023 #include "configuration.hch"
+00024 #if USE_RUNFFT
+00025 #include "audio.hch"
+00026 #include "fft.hch"
+00027 
+00028 #if HAVE_DEBUG
+00029         #include "debug.hch"
+00030 #endif
+00031 
+00032 /*
+00033  * Forward declarations
+00034  */
+00035 static macro expr ClockRate = PAL_ACTUAL_CLOCK_RATE;
+00036 #if HARDWARE_MULTIPLY
+00037 //input buffer
+00038 ram signed 18 audio_buffer_in[256] with { block = "BlockRAM"};
+00039 //output buffer
+00040 ram signed 18 audio_buffer_out[128] with { block = "BlockRAM"}; 
+00041 #else
+00042 //input buffer
+00043 ram signed 16 audio_buffer_in[256] with { block = "BlockRAM"};
+00044 //output buffer
+00045 ram signed 16 audio_buffer_out[128] with { block = "BlockRAM"}; 
+00046 #endif
+00047 //EQ settings for the FFT
+00048 ram unsigned 4 EQ_info[128] with { block = "BlockRAM"}; 
+00049 //EQ settings received from the display
+00050 
+00051 
+00052 #if HARDWARE_MULTIPLY
+00053 signed 18 *audioptr_in1,*audioptr_in2,*audioptr_in3,*audioptr_in4;
+00054 
+00055 signed 18 *audioptr_out1,*audioptr_out2;
+00056 
+00057 unsigned 6 *displayptr1,*displayptr2,*displayptr3,*displayptr4;
+00058 #else
+00059 signed 16 *audioptr_in1,*audioptr_in2,*audioptr_in3,*audioptr_in4;
+00060 
+00061 signed 16 *audioptr_out1,*audioptr_out2;
+00062 
+00063 unsigned 6 *displayptr1,*displayptr2,*displayptr3,*displayptr4;
+00064 #endif
+00065 
+00076 macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT)
+00077 {
+00078         signed 18 sample;
+00079         unsigned 6 sample_count;
+00080         unsigned 8 i,cycle;
+00081         unsigned 4 eqinfo;
+00082 
+00083         unsigned 1 FFT_Sync, first;
+00084         macro expr OW = PalAudioOutGetMaxDataWidthCT ();
+00085         macro expr IW = PalAudioInGetMaxDataWidthCT  ();
+00086         signed LeftNew, RightNew;
+00087         signed Output_sample;
+00088 
+00089         ram unsigned 6 input[64];
+00090 
+00091         //pointers for double and quadruple buffering:
+00092         audioptr_in1 = &audio_buffer_in[0];
+00093         audioptr_in2 = &audio_buffer_in[64];
+00094         audioptr_in3 = &audio_buffer_in[128];
+00095         audioptr_in4 = &audio_buffer_in[192];
+00096 
+00097         audioptr_out1 = &audio_buffer_out[0];
+00098         audioptr_out2 = &audio_buffer_out[64];
+00099 
+00100         displayptr1 = &audiodata.ifft_info.write[0];
+00101         displayptr2 = &audiodata.ifft_info.write[64];
+00102         displayptr3 = &audiodata.ifft_info.write[128];
+00103         displayptr4 = &audiodata.ifft_info.write[192];
+00104 
+00105         FFT_Sync=0;
+00106 par
+00107 {
+00108         for(;;)
+00109         {
+00110                 if (FFT_Sync)   //if 64 samples are read from ADC...
+00111                 {
+00112                         par
+00113                         {
+00114                                 // switch pointers 
+00115                                 audioptr_in1 = audioptr_in2;
+00116                                 audioptr_in2 = audioptr_in3;
+00117                                 audioptr_in3 = audioptr_in4;
+00118                                 audioptr_in4 = audioptr_in1;
+00119                                 
+00120                                 audioptr_out1 = audioptr_out2;
+00121                                 audioptr_out2 = audioptr_out1;
+00122 
+00123                                 displayptr1=displayptr2;
+00124                                 displayptr2=displayptr3;
+00125                                 displayptr3=displayptr4;
+00126                                 displayptr4=displayptr1;
+00127                                 
+00128                                 FFT_Sync = 0;
+00129                         }
+00130                 
+00131                         // FFT calculation
+00132                         perform_fft(audioptr_in1);
+00133                         
+00134 #if PERFORM_FFT_CALCULATION
+00135                         equalize_audio(&audiodata);
+00136 #endif
+00137                         // inverse FFT calculation
+00138                         perform_ifft(audioptr_out1,displayptr1);                
+00139                 }
+00140                 else
+00141                         delay;
+00142         }       
+00143 
+00144         for(sample_count=0;;)//store the samples in the inputbuffer
+00145         {
+00146                 if (!FFT_Sync)
+00147                 {
+00148                         par
+00149                         {
+00150                                 seq
+00151                                 {
+00152                                         PalAudioInRead(AUDIOIN, &LeftNew, &RightNew);
+00153 #if HARDWARE_MULTIPLY                                   
+00154                                         audioptr_in1[sample_count] = LeftNew;//drop 2 LSB's
+00155 #else
+00156                                         audioptr_in1[sample_count] = (LeftNew\\2);//drop 2 LSB's
+00157 #endif
+00158                                         sample_count++; 
+00159                                         if (!sample_count) 
+00160                                         {
+00161                                                 FFT_Sync = 1; 
+00162                                         }
+00163                                 }
+00164                                 seq
+00165                                 {
+00166                                         Output_sample = audioptr_out2[sample_count];
+00167                                 }
+00168                         }
+00169                 }
+00170                 else
+00171                 {
+00172                         delay;
+00173                 }
+00174         }
+00175         for(;;)
+00176         {
+00177                 PalAudioOutWrite(AUDIOOUT,(signed OW)(Output_sample @ 0),(signed OW)(Output_sample @ 0));
+00178         }
+00179 }//end par
+00180 }// end function
+00181 #endif
+00182 
+

Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/runfft_8hcc.html b/Graphic_Equalizer_Split/doc/html/runfft_8hcc.html new file mode 100644 index 0000000..8f3023f --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/runfft_8hcc.html @@ -0,0 +1,45 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/runfft.hcc File Reference + + + + + +

runfft.hcc File Reference

#include <stdlib.hch>
+#include "pal_master.hch"
+#include "configuration.hch"
+ +

+Include dependency graph for runfft.hcc:

Include dependency graph
+ + + + +

+Go to the source code of this file. + +
+


Detailed Description

+

+Graphic Equalizer API

+audiosamples are correctly buffered and fed correctly to the FFT.
+ This module will also handle the output of the modified audio samples.

+Project information.

+Project Graphic Equalizer
+
Author:
M. Lauwerijssen
+
Date:
20041110
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041110: M. Lauwerijssen
+ Initial version +

+Definition in file runfft.hcc.


Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/runfft_8hcc__incl.map b/Graphic_Equalizer_Split/doc/html/runfft_8hcc__incl.map new file mode 100644 index 0000000..d372980 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/runfft_8hcc__incl.map @@ -0,0 +1,2 @@ +base referer +rect $configuration_8hch.html 245,7 370,34 diff --git a/Graphic_Equalizer_Split/doc/html/runfft_8hcc__incl.md5 b/Graphic_Equalizer_Split/doc/html/runfft_8hcc__incl.md5 new file mode 100644 index 0000000..ff1d843 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/runfft_8hcc__incl.md5 @@ -0,0 +1 @@ +7129277ffd9cca9295345528e3048acb \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/runfft_8hcc__incl.png b/Graphic_Equalizer_Split/doc/html/runfft_8hcc__incl.png new file mode 100644 index 0000000..3a3f863 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/runfft_8hcc__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/runfft_8hch-source.html b/Graphic_Equalizer_Split/doc/html/runfft_8hch-source.html new file mode 100644 index 0000000..2e52e1b --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/runfft_8hch-source.html @@ -0,0 +1,15 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/runfft.hch Source File + + + + + +

runfft.hch

Go to the documentation of this file.
00001 extern macro proc RunFFT (AudioIn, AudioOut);
+

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/runfft_8hch.html b/Graphic_Equalizer_Split/doc/html/runfft_8hch.html new file mode 100644 index 0000000..c33f46c --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/runfft_8hch.html @@ -0,0 +1,66 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/runfft.hch File Reference + + + + + +

runfft.hch File Reference

+

+This graph shows which files directly or indirectly include this file:

Included by dependency graph
+ + + + +

+Go to the source code of this file. + + + + +

Functions

macro proc RunFFT (AudioIn, AudioOut)
+


Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
macro proc RunFFT AudioIn ,
AudioOut 
+
+ + + + + +
+   + + +

+

+


Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/runfft_8hch__dep__incl.map b/Graphic_Equalizer_Split/doc/html/runfft_8hch__dep__incl.map new file mode 100644 index 0000000..cf253aa --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/runfft_8hch__dep__incl.map @@ -0,0 +1,2 @@ +base referer +rect $main_8hcc.html 9,7 83,34 diff --git a/Graphic_Equalizer_Split/doc/html/runfft_8hch__dep__incl.md5 b/Graphic_Equalizer_Split/doc/html/runfft_8hch__dep__incl.md5 new file mode 100644 index 0000000..49eeeaa --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/runfft_8hch__dep__incl.md5 @@ -0,0 +1 @@ +209ac5ed7914b67b6e24a36a5cd34862 \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/runfft_8hch__dep__incl.png b/Graphic_Equalizer_Split/doc/html/runfft_8hch__dep__incl.png new file mode 100644 index 0000000..9d7198c Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/runfft_8hch__dep__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/sample_8hcc-source.html b/Graphic_Equalizer_Split/doc/html/sample_8hcc-source.html new file mode 100644 index 0000000..f7ee92e --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/sample_8hcc-source.html @@ -0,0 +1,78 @@ + + +Graphic Equalizer: C:/Project Marcel & Oliver/Graphic_Equalizer/src/sample.hcc Source File + + + + + +

sample.hcc

Go to the documentation of this file.
00001 
+00019 /******** System Includes *************/
+00020 
+00021 /******** Application Includes ********/
+00022 #include "sample.hch"
+00023 
+00024 
+00025 
+00026 /*
+00027  * Pointer that points towards the current 64 bits samples.
+00028  */
+00029 signed 16 *audio_in_ptr;
+00030 
+00031 /*
+00032  * 64 step counter to keep track of our samples. This is a private variable.
+00033  */
+00034 unsigned 8 sample_count;
+00035 
+00036 
+00037 
+00046 void sample_add(signed 16 in_sample) {
+00047         /*
+00048          * We only sample 64 bits in our buffer, hence we circulate around the
+00049          * last 6 bits.
+00050          */
+00051         audio_in_ptr[sample_count <-6] = in_sample;
+00052         sample_count++;
+00053 } /* --- sample_add() --- */
+00054 
+00055 
+00056 
+00065 void sample_get(signed 16 *out_sample) {
+00066         /*
+00067          * We circulate around a 64 bits buffer, therefor we only use the last
+00068          *  6 bits.
+00069          */
+00070         *out_sample = audio_out_ptr[sample_count <-6];
+00071 } /* --- sample_get() --- */
+00072 
+00073 
+00074 
+00084 unsigned 1 sample_rotate_buffers(void) {
+00085         unsigned 1 retval;      /* store for returnvalue */
+00086 
+00087         retval = 0;
+00088         /*
+00089          * We only want to read 64 samples, but calculations work nicer if we
+00090          * use 256 samples. Therefor we circulate our audio pointer around.
+00091          */
+00092         if (!(sample_count <- 6)) {
+00093                 /*
+00094                  * 64 Samples have passed. We are back at '0'. Use the full
+00095                  * sample count as index which is 0 64 128 or 192 and back to
+00096                  * 0. Our Output is only 128 big so we only look at the
+00097                  * 7 LSB. Also, notify the main application that 64 samples
+00098                  * have been processed.
+00099                  */
+00100                 par {
+00101                         audio_in_ptr = &pcm_audio_in[sample_count];
+00102                         audio_out_ptr = &pcm_audio_out[(sample_count <- 7)];
+00103                         retval = 1;
+00104                 }
+00105         }
+00106 } /* --- sample_rotate_buffers() --- */
+

Generated on Mon Nov 29 10:53:29 2004 for Graphic Equalizer by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/sample_8hcc.html b/Graphic_Equalizer_Split/doc/html/sample_8hcc.html new file mode 100644 index 0000000..bbe85aa --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/sample_8hcc.html @@ -0,0 +1,182 @@ + + +Graphic Equalizer: C:/Project Marcel & Oliver/Graphic_Equalizer/src/sample.hcc File Reference + + + + + +

sample.hcc File Reference

#include "sample.hch"
+ +

+Include dependency graph for sample.hcc:

Include dependency graph
+ + + + +

+Go to the source code of this file. + + + + + + + + + + + +

Functions

void sample_add (signed 16 in_sample)
 This procedure adds the supplied sample to the input buffer.
void sample_get (signed 16 *out_sample)
 This procedure gets the sample from the current output buffer.
unsigned sample_rotate_buffers (void)
 This procedure rotates our buffers around if 64 samples are read into our current buffer.
+


Detailed Description

+

+Audiodriver API

+

+Project information.

+Project Graphic Equalizer
+
Author:
O.M. Schinagl
+
Date:
20041021
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041021: O.M. Schinagl
+ Initial version +

+Definition in file sample.hcc.


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void sample_add signed 16  in_sample  ) 
+
+ + + + + +
+   + + +

+This procedure adds the supplied sample to the input buffer. +

+

Parameters:
+ + +
signed 16 in_sample 16 bits signed sample to be added.
+
+
Returns:
void
+
Return values:
+ + +
void 
+
+ +

+Definition at line 46 of file sample.hcc.

+

+ + + + +
+ + + + + + + + + +
void sample_get signed 16 *  out_sample  ) 
+
+ + + + + +
+   + + +

+This procedure gets the sample from the current output buffer. +

+

Parameters:
+ + +
* in_sample pointer to storage for sample.
+
+
Returns:
void
+
Return values:
+ + +
void 
+
+ +

+Definition at line 65 of file sample.hcc.

+

+ + + + +
+ + + + + + + + + +
unsigned sample_rotate_buffers void   ) 
+
+ + + + + +
+   + + +

+This procedure rotates our buffers around if 64 samples are read into our current buffer. +

+

Parameters:
+ + +
in_sample 16 bits signed sample to be added.
+
+
Returns:
1 when 64 samples have passed, 0 otherwise.
+
Return values:
+ + +
unsigned 1;
+
+ +

+Definition at line 84 of file sample.hcc.

+


Generated on Mon Nov 29 10:53:30 2004 for Graphic Equalizer by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/sample_8hcc__incl.map b/Graphic_Equalizer_Split/doc/html/sample_8hcc__incl.map new file mode 100644 index 0000000..3cc520a --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/sample_8hcc__incl.map @@ -0,0 +1,2 @@ +base referer +rect $sample_8hch.html 8,7 98,34 diff --git a/Graphic_Equalizer_Split/doc/html/sample_8hcc__incl.md5 b/Graphic_Equalizer_Split/doc/html/sample_8hcc__incl.md5 new file mode 100644 index 0000000..7c12b7e --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/sample_8hcc__incl.md5 @@ -0,0 +1 @@ +1fc36cd8ce3c69063c04bf4a24a0e84e \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/sample_8hcc__incl.png b/Graphic_Equalizer_Split/doc/html/sample_8hcc__incl.png new file mode 100644 index 0000000..55cd496 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/sample_8hcc__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/sample_8hch-source.html b/Graphic_Equalizer_Split/doc/html/sample_8hch-source.html new file mode 100644 index 0000000..5789f08 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/sample_8hch-source.html @@ -0,0 +1,37 @@ + + +Graphic Equalizer: C:/Project Marcel & Oliver/Graphic_Equalizer/include/sample.hch Source File + + + + + +

sample.hch

Go to the documentation of this file.
00001 
+00019 #ifndef _SAMPLE_HCH
+00020 #define _SAMPLE_HCH 1
+00021 
+00022 
+00023 
+00024 /*
+00025  * This procedure adds the supplied sample to the input buffer.
+00026  */
+00027 void sample_add(in_sample);
+00028 
+00029 
+00030 
+00031 /*
+00032  * This procedure rotates our buffers around if 64 samples are read into our
+00033  * current buffer. It returns 1 when 64 samples have passed, 0 otherwise.
+00034  */
+00035 unsigned 1 sample_rotate_buffers(void);
+00036 
+00037 #else
+00038 #error "ERROR file sample.hch multiple times included"
+00039 #endif /* --- _SAMPLE_HCH --- */
+00040 
+

Generated on Mon Nov 29 10:53:29 2004 for Graphic Equalizer by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/sample_8hch.html b/Graphic_Equalizer_Split/doc/html/sample_8hch.html new file mode 100644 index 0000000..8c96e57 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/sample_8hch.html @@ -0,0 +1,89 @@ + + +Graphic Equalizer: C:/Project Marcel & Oliver/Graphic_Equalizer/include/sample.hch File Reference + + + + + +

sample.hch File Reference

+

+This graph shows which files directly or indirectly include this file:

Included by dependency graph
+ + + + +

+Go to the source code of this file. + + + + + +

Functions

unsigned sample_rotate_buffers (void)
 This procedure rotates our buffers around if 64 samples are read into our current buffer.
+


Detailed Description

+

+Audiodriver API

+

+Project information.

+Project Graphic Equalizer
+
Author:
O.M. Schinagl
+
Date:
20041011
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041011: O.M. Schinagl
+ Initial version +

+Definition in file sample.hch.


Function Documentation

+

+ + + + +
+ + + + + + + + + +
unsigned sample_rotate_buffers void   ) 
+
+ + + + + +
+   + + +

+This procedure rotates our buffers around if 64 samples are read into our current buffer. +

+

Parameters:
+ + +
in_sample 16 bits signed sample to be added.
+
+
Returns:
1 when 64 samples have passed, 0 otherwise.
+
Return values:
+ + +
unsigned 1;
+
+ +

+Definition at line 84 of file sample.hcc.

+


Generated on Mon Nov 29 10:53:30 2004 for Graphic Equalizer by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/sample_8hch__dep__incl.map b/Graphic_Equalizer_Split/doc/html/sample_8hch__dep__incl.map new file mode 100644 index 0000000..6282c3e --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/sample_8hch__dep__incl.map @@ -0,0 +1,2 @@ +base referer +rect $sample_8hcc.html 8,7 98,34 diff --git a/Graphic_Equalizer_Split/doc/html/sample_8hch__dep__incl.md5 b/Graphic_Equalizer_Split/doc/html/sample_8hch__dep__incl.md5 new file mode 100644 index 0000000..2f59778 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/sample_8hch__dep__incl.md5 @@ -0,0 +1 @@ +9b1a683b9bef5e200828acd3ea8684fb \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/sample_8hch__dep__incl.png b/Graphic_Equalizer_Split/doc/html/sample_8hch__dep__incl.png new file mode 100644 index 0000000..edc203a Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/sample_8hch__dep__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/smartmedia_8hcc-source.html b/Graphic_Equalizer_Split/doc/html/smartmedia_8hcc-source.html new file mode 100644 index 0000000..f291834 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/smartmedia_8hcc-source.html @@ -0,0 +1,215 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/smartmedia.hcc Source File + + + + + +

smartmedia.hcc

Go to the documentation of this file.
00001 
+00019 /******** System Includes *************/
+00020 #include <stdlib.hch>
+00021 
+00022 #include "pal_master.hch"
+00023 
+00024 /******** Application Includes ********/
+00025 #include "configuration.hch"
+00026 #include "display_shared.hch"
+00027 #include "smartmedia_shared.hch"
+00028 #include "smartmedia.hch"
+00029 
+00030 #if HAVE_DEBUG
+00031         #include "debug.hch"
+00032 #endif
+00033 
+00034 #include "audio.hch"
+00035 #include "mouse_shared.hch"
+00036 #include "eventhandler_shared.hch"
+00037 #include "display.hch" /* FIXME: temporary include, needs to be moved to 'init' */
+00038 
+00046 unsigned 1 smartmedia_init(void) {
+00047         unsigned 1 retval;
+00048         /*
+00049          * Firstly we enable both the CPLD and the SmartMedia.
+00050          */
+00051         RC200CPLDEnable();
+00052         RC200SmartMediaInit(&retval);
+00053 
+00054         if (retval) {
+00055                 RC200SmartMediaReset(&retval);
+00056                 RC200SmartMediaInit(&retval);
+00057         }
+00058         
+00059         return retval;  
+00060 } /* --- smartmedia_init() --- */
+00061 
+00062 
+00063 
+00072 void smartmedia_loaddata(skindata_t *skindata) {
+00073         /*
+00074          * Setup RAM Handle, and determin maximum Data and Address widths
+00075          */
+00076         macro expr RAM_BANK0 = PalPL2RAMCT(0);
+00077         macro expr DW = PalPL2RAMGetMaxDataWidthCT();
+00078         macro expr AW = PalPL2RAMGetMaxAddressWidthCT();
+00079 
+00080         unsigned DW data;
+00081         unsigned 27 smartmedia_address, smartmedia_address_mask;
+00082         unsigned AW address;
+00083         unsigned 8 mask, r, g, b;
+00084         unsigned 3 stage;
+00085         unsigned 1 result;
+00086 
+00087         extern ram unsigned 8 presets_default_values[768];
+00088 
+00089 #if HAVE_DEBUG
+00090         /*
+00091          * Print some nice stats about data loading.
+00092          */
+00093         print_eol();
+00094         print_hex_value(0);
+00095 #endif
+00096         /*
+00097          * Before we enter our loop to fill our memory with valid data, we have
+00098          * to set the startup positions for the SmartMedia.
+00099          */
+00100         smartmedia_address = SMARTMEDIA_ADDRESS_SKIN_START;
+00101         smartmedia_address_mask = SMARTMEDIA_ADDRESS_SKINMASK_START;
+00102         stage = STAGE_LOAD_SKIN;
+00103         /*
+00104          * We start with the address of the skin, and do the loop until we have
+00105          * done the end of the help.
+00106          */
+00107         for (address = ADDRESS_SKIN_START; address != (ADDRESS_PRESET_RESET_END +1); address++) {
+00108                 /*
+00109                  * Once we are done with the loading of our skin, we need to
+00110                  * change the smartmedia start addresses.
+00111                  */
+00112                 switch (address) {
+00113                         case ADDRESS_HELP_START:
+00114                                 smartmedia_address = SMARTMEDIA_ADDRESS_HELP_START;
+00115                                 smartmedia_address_mask = SMARTMEDIA_ADDRESS_HELPMASK_START;
+00116                                 stage = STAGE_LOAD_HELP;
+00117                                 break;
+00118                         case ADDRESS_GRAPHMASK_START:
+00119                                 smartmedia_address_mask = SMARTMEDIA_ADDRESS_GRAPHMASK_START;
+00120                                 stage = STAGE_LOAD_GRAPH;
+00121                                 break;
+00122                         case ADDRESS_PRESET_DEMO_START:
+00123                                 smartmedia_address_mask = SMARTMEDIA_ADDRESS_PRESET_DEMO_START;
+00124                                 stage = STAGE_LOAD_PRESET;
+00125                                 break;
+00126                         case ADDRESS_PRESET_RESET_START:
+00127                                 smartmedia_address_mask = SMARTMEDIA_ADDRESS_PRESET_RESET_START;
+00128                                 stage = STAGE_LOAD_PRESET;
+00129                                 break;
+00130                         default:
+00131                                 break;
+00132                 }
+00133 
+00134                 /*
+00135                  * Before reading our data from the smartmedia we set our
+00136                  * address pointer to the address from our loop.
+00137                  */
+00138 #if HAVE_SMARTMEDIA
+00139                 PalPL2RAMSetWriteAddress(RAM_BANK0, address);
+00140 #else
+00141                 PalPL2RAMSetWriteAddress(RAM_BANK0, 0);
+00142 #endif
+00143 
+00144                 /*
+00145                  * SmartMedia data is read one byte per call. Because we want
+00146                  * to store the mask + the rgb values in one variable for later
+00147                  * useage we need to read those 4 bytes from the smartmedia
+00148                  * before storing it as one.
+00149                  */
+00150 #if HAVE_SMARTMEDIA
+00151                 /*
+00152                  * FIXME: Due to a bug in the DK2 smartmedia libraries we need
+00153                  * stop reading after each byte with OperationEnd call. This is
+00154                  * VERY slow and must be changed.
+00155                  */
+00156                 if ((STAGE_LOAD_SKIN == stage) || (STAGE_LOAD_HELP == stage)) {
+00157                         RC200SmartMediaSetAddress(READ, smartmedia_address);
+00158                         RC200SmartMediaRead(&r, TRUE);
+00159                         RC200SmartMediaOperationEnd(&result);
+00160                         RC200SmartMediaSetAddress(READ, (smartmedia_address +1));
+00161                         RC200SmartMediaRead(&g, TRUE);
+00162                         RC200SmartMediaOperationEnd(&result);
+00163                         RC200SmartMediaSetAddress(READ, (smartmedia_address +2));
+00164                         RC200SmartMediaRead(&b, TRUE);
+00165                         RC200SmartMediaOperationEnd(&result);
+00166                 }
+00167                 RC200SmartMediaSetAddress(READ, smartmedia_address_mask);
+00168                 RC200SmartMediaRead(&mask, TRUE);
+00169                 RC200SmartMediaOperationEnd(&result);
+00170 
+00171                 switch (stage) {
+00172                         case STAGE_LOAD_SKIN:
+00173                                 data = 0 @ mask @ r @ g @ b;
+00174                                 break;
+00175                         case STAGE_LOAD_HELP:
+00176                                 data = 0 @ mask @ r @ g @ b;
+00177                                 break;
+00178                         case STAGE_LOAD_GRAPH:
+00179                                 data = (unsigned DW)(0 @ mask) << 24;
+00180                                 break;
+00181                         case STAGE_LOAD_PRESET:
+00182                                 presets_default_values[(address -ADDRESS_PRESET_DEMO_START) <- 10] = mask;
+00183                 }
+00184                 
+00185 #else
+00186                 data = 0x0000ff00;
+00187 #endif
+00188                 /*
+00189                  * Now that we have gathered all pixel data, store it in ram.
+00190                  */
+00191                 PalPL2RAMWrite(RAM_BANK0, data);
+00192 
+00193 #if HAVE_DEBUG
+00194                 /*
+00195                  * Print some nice stats about data loading.
+00196                  */
+00197                 if (!(address <- 10)) {
+00198                         print_cr();
+00199                         print_hex_value(0 @ (address \\ 11));
+00200                         print_string(" / 000001C2 | data: ");
+00201                         print_hex_value(data <- 32);
+00202                 }
+00203 #endif
+00204 
+00205                 /*
+00206                  * Finally increase al our indexes approperiatly.
+00207                  */
+00208                 smartmedia_address += 3;
+00209                 smartmedia_address_mask++;
+00210         }
+00211 
+00212         /*
+00213          * This block needs to probably move up into the fore loop where we
+00214          * calculate these settings later.
+00215          */
+00216         skindata->area_spectrum_top = 200;
+00217         skindata->area_spectrum_bottom = 335;
+00218         skindata->area_spectrum_left = 77;
+00219         skindata->area_spectrum_right = 575;
+00220         skindata->area_waveform_top = 46;
+00221         skindata->area_waveform_bottom = 118;
+00222         skindata->area_waveform_left = 76;
+00223         skindata->area_waveform_right = 413;
+00224         skindata->area_volume_top = 112;
+00225         skindata->area_volume_bottom = 66;
+00226         skindata->area_volume_left = 439;
+00227         skindata->area_volume_right = 455;
+00228         skindata->color_area_volume = PIXEL_VOLUME;
+00229         skindata->color_area_waveform = PIXEL_WAVEFORM;
+00230 //      skindata->color_area_spectrum_top = PIXEL_SPECTRUM;
+00231 //      skindata->color_area_spectrum_bottom = PIXEL_SPECTRUM;
+00232         skindata->color_equalizer = PIXEL_EQUALIZER;
+00233 } /* --- smartmedia_loaddata() --- */
+

Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/smartmedia_8hcc.html b/Graphic_Equalizer_Split/doc/html/smartmedia_8hcc.html new file mode 100644 index 0000000..bd026c4 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/smartmedia_8hcc.html @@ -0,0 +1,153 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/src/smartmedia.hcc File Reference + + + + + +

smartmedia.hcc File Reference

#include <stdlib.hch>
+#include "pal_master.hch"
+#include "configuration.hch"
+#include "display_shared.hch"
+#include "smartmedia_shared.hch"
+#include "smartmedia.hch"
+#include "audio.hch"
+#include "mouse_shared.hch"
+#include "eventhandler_shared.hch"
+#include "display.hch"
+ +

+Include dependency graph for smartmedia.hcc:

Include dependency graph
+ + + + + + + + + + + +

+Go to the source code of this file. + + + + + + + + +

Functions

unsigned smartmedia_init (void)
 We here initialize the Smart Media card and verify wether the card is inserted and such.
void smartmedia_loaddata (skindata_t *skindata)
 We load our memory with skin and help data from the smartmedia.
+


Detailed Description

+

+Graphic Equalizer API

+

+Project information.

+Project Graphic Equalizer
+
Author:
O.M. Schinagl
+
Date:
20041110
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041110: O.M. Schinagl
+ Initial version +

+Definition in file smartmedia.hcc.


Function Documentation

+

+ + + + +
+ + + + + + + + + +
unsigned smartmedia_init void   ) 
+
+ + + + + +
+   + + +

+We here initialize the Smart Media card and verify wether the card is inserted and such. +

+

Returns:
We return 0 on success, 1 on error.
+
Return values:
+ + +
unsigned 1
+
+ +

+Definition at line 46 of file smartmedia.hcc. +

+Referenced by main().

+

+ + + + +
+ + + + + + + + + +
void smartmedia_loaddata skindata_t skindata  ) 
+
+ + + + + +
+   + + +

+We load our memory with skin and help data from the smartmedia. +

+

Parameters:
+ + +
*skindata skindata like boundries and colors of elements.
+
+
Returns:
void
+
Return values:
+ + +
void 
+
+ +

+Definition at line 72 of file smartmedia.hcc. +

+References ADDRESS_GRAPHMASK_START, ADDRESS_HELP_START, ADDRESS_PRESET_DEMO_START, ADDRESS_PRESET_RESET_END, ADDRESS_PRESET_RESET_START, presets_default_values, READ, STAGE_LOAD_GRAPH, STAGE_LOAD_HELP, STAGE_LOAD_PRESET, and STAGE_LOAD_SKIN. +

+Referenced by main().

+


Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/smartmedia_8hcc__incl.map b/Graphic_Equalizer_Split/doc/html/smartmedia_8hcc__incl.map new file mode 100644 index 0000000..f1c196f --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/smartmedia_8hcc__incl.map @@ -0,0 +1,9 @@ +base referer +rect $configuration_8hch.html 245,7 370,34 +rect $display__shared_8hch.html 394,7 530,34 +rect $smartmedia__shared_8hch.html 554,7 720,34 +rect $smartmedia_8hch.html 744,7 861,34 +rect $audio_8hch.html 885,7 965,34 +rect $mouse__shared_8hch.html 989,7 1125,34 +rect $eventhandler__shared_8hch.html 1149,7 1322,34 +rect $display_8hch.html 1346,7 1434,34 diff --git a/Graphic_Equalizer_Split/doc/html/smartmedia_8hcc__incl.md5 b/Graphic_Equalizer_Split/doc/html/smartmedia_8hcc__incl.md5 new file mode 100644 index 0000000..4d36ea5 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/smartmedia_8hcc__incl.md5 @@ -0,0 +1 @@ +86c9bdde69fa949899315e166183a539 \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/smartmedia_8hcc__incl.png b/Graphic_Equalizer_Split/doc/html/smartmedia_8hcc__incl.png new file mode 100644 index 0000000..a0e23b0 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/smartmedia_8hcc__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/smartmedia_8hch-source.html b/Graphic_Equalizer_Split/doc/html/smartmedia_8hch-source.html new file mode 100644 index 0000000..112cdc0 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/smartmedia_8hch-source.html @@ -0,0 +1,65 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/smartmedia.hch Source File + + + + + +

smartmedia.hch

Go to the documentation of this file.
00001 
+00019 #ifndef _SMARTMEDIA_HCH
+00020 #define _SMARTMEDIA_HCH 1
+00021 
+00022 
+00023 
+00024 /*
+00025  * SmartMedia functioncalls a bit to be set to either Read or Write. This
+00026  * define should make life easier identifying which one is what.
+00027  */
+00028 #define READ 0
+00029 #define WRITE 1
+00030 
+00031 
+00032 
+00033 /*
+00034  * The different stages the smart media loaders knows.
+00035  */
+00036 #define STAGE_LOAD_SKIN         0x00
+00037 #define STAGE_LOAD_HELP         0x01
+00038 #define STAGE_LOAD_GRAPH        0x02
+00039 #define STAGE_LOAD_PRESET       0x03
+00040 
+00041 
+00042 
+00043 /*
+00044  * Create a define to keep API generic
+00045  * FIXME: replace with PAL calls when avaiable.
+00046  */
+00047 #define CPLDRun(ClockRate) RC200CPLDRun(ClockRate)
+00048 #define SmartMediaRun(ClockRate) RC200SmartMediaRun(ClockRate)
+00049 
+00050 
+00051 
+00052 /*
+00053  * Initializes the smartmedia device.
+00054  */
+00055 
+00056 unsigned 1 smartmedia_init(void);
+00057 
+00058 
+00059 
+00060 /*
+00061  * This function loads the memory with data from the smartmedia card.
+00062  */
+00063 void smartmedia_loaddata(skindata_t *skindata);
+00064 
+00065 #else
+00066 #error "ERROR file smartmedia.hch multiple times included"
+00067 #endif /* --- _SMARTMEDIA_HCH --- */
+00068 
+

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/smartmedia_8hch.html b/Graphic_Equalizer_Split/doc/html/smartmedia_8hch.html new file mode 100644 index 0000000..3521eac --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/smartmedia_8hch.html @@ -0,0 +1,406 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/smartmedia.hch File Reference + + + + + +

smartmedia.hch File Reference

+

+This graph shows which files directly or indirectly include this file:

Included by dependency graph
+ + + + + +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

#define _SMARTMEDIA_HCH   1
#define READ   0
#define WRITE   1
#define STAGE_LOAD_SKIN   0x00
#define STAGE_LOAD_HELP   0x01
#define STAGE_LOAD_GRAPH   0x02
#define STAGE_LOAD_PRESET   0x03
#define CPLDRun(ClockRate)   RC200CPLDRun(ClockRate)
#define SmartMediaRun(ClockRate)   RC200SmartMediaRun(ClockRate)

Functions

unsigned smartmedia_init (void)
 We here initialize the Smart Media card and verify wether the card is inserted and such.
void smartmedia_loaddata (skindata_t *skindata)
 We load our memory with skin and help data from the smartmedia.
+


Detailed Description

+

+Graphic Equalizer API

+

+Project information.

+Project Graphic Equalizer
+
Author:
O.M. Schinagl
+
Date:
20041110
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041110: O.M. Schinagl
+ Initial version +

+Definition in file smartmedia.hch.


Define Documentation

+

+ + + + +
+ + + + +
#define _SMARTMEDIA_HCH   1
+
+ + + + + +
+   + + +

+ +

+Definition at line 20 of file smartmedia.hch.

+

+ + + + +
+ + + + +
#define READ   0
+
+ + + + + +
+   + + +

+ +

+Definition at line 28 of file smartmedia.hch. +

+Referenced by smartmedia_loaddata().

+

+ + + + +
+ + + + +
#define WRITE   1
+
+ + + + + +
+   + + +

+ +

+Definition at line 29 of file smartmedia.hch.

+

+ + + + +
+ + + + +
#define STAGE_LOAD_SKIN   0x00
+
+ + + + + +
+   + + +

+ +

+Definition at line 36 of file smartmedia.hch. +

+Referenced by smartmedia_loaddata().

+

+ + + + +
+ + + + +
#define STAGE_LOAD_HELP   0x01
+
+ + + + + +
+   + + +

+ +

+Definition at line 37 of file smartmedia.hch. +

+Referenced by smartmedia_loaddata().

+

+ + + + +
+ + + + +
#define STAGE_LOAD_GRAPH   0x02
+
+ + + + + +
+   + + +

+ +

+Definition at line 38 of file smartmedia.hch. +

+Referenced by smartmedia_loaddata().

+

+ + + + +
+ + + + +
#define STAGE_LOAD_PRESET   0x03
+
+ + + + + +
+   + + +

+ +

+Definition at line 39 of file smartmedia.hch. +

+Referenced by smartmedia_loaddata().

+

+ + + + +
+ + + + + + + + + +
#define CPLDRun ClockRate   )    RC200CPLDRun(ClockRate)
+
+ + + + + +
+   + + +

+ +

+Definition at line 47 of file smartmedia.hch. +

+Referenced by main().

+

+ + + + +
+ + + + + + + + + +
#define SmartMediaRun ClockRate   )    RC200SmartMediaRun(ClockRate)
+
+ + + + + +
+   + + +

+ +

+Definition at line 48 of file smartmedia.hch. +

+Referenced by main().

+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
unsigned smartmedia_init void   ) 
+
+ + + + + +
+   + + +

+We here initialize the Smart Media card and verify wether the card is inserted and such. +

+

Returns:
We return 0 on success, 1 on error.
+
Return values:
+ + +
unsigned 1
+
+ +

+Definition at line 46 of file smartmedia.hcc. +

+Referenced by main().

+

+ + + + +
+ + + + + + + + + +
void smartmedia_loaddata skindata_t skindata  ) 
+
+ + + + + +
+   + + +

+We load our memory with skin and help data from the smartmedia. +

+

Parameters:
+ + +
*skindata skindata like boundries and colors of elements.
+
+
Returns:
void
+
Return values:
+ + +
void 
+
+ +

+Definition at line 72 of file smartmedia.hcc. +

+References ADDRESS_GRAPHMASK_START, ADDRESS_HELP_START, ADDRESS_PRESET_DEMO_START, ADDRESS_PRESET_RESET_END, ADDRESS_PRESET_RESET_START, presets_default_values, READ, STAGE_LOAD_GRAPH, STAGE_LOAD_HELP, STAGE_LOAD_PRESET, and STAGE_LOAD_SKIN. +

+Referenced by main().

+


Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/smartmedia_8hch__dep__incl.map b/Graphic_Equalizer_Split/doc/html/smartmedia_8hch__dep__incl.map new file mode 100644 index 0000000..46f0913 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/smartmedia_8hch__dep__incl.map @@ -0,0 +1,3 @@ +base referer +rect $main_8hcc.html 8,7 82,34 +rect $smartmedia_8hcc.html 106,7 224,34 diff --git a/Graphic_Equalizer_Split/doc/html/smartmedia_8hch__dep__incl.md5 b/Graphic_Equalizer_Split/doc/html/smartmedia_8hch__dep__incl.md5 new file mode 100644 index 0000000..0f51fe8 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/smartmedia_8hch__dep__incl.md5 @@ -0,0 +1 @@ +a6514b61ed04d96f1fee892121b51cd5 \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/smartmedia_8hch__dep__incl.png b/Graphic_Equalizer_Split/doc/html/smartmedia_8hch__dep__incl.png new file mode 100644 index 0000000..dc6420a Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/smartmedia_8hch__dep__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/smartmedia__shared_8hch-source.html b/Graphic_Equalizer_Split/doc/html/smartmedia__shared_8hch-source.html new file mode 100644 index 0000000..f21af8d --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/smartmedia__shared_8hch-source.html @@ -0,0 +1,77 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/smartmedia_shared.hch Source File + + + + + +

smartmedia_shared.hch

Go to the documentation of this file.
00001 
+00019 #ifndef _SMARTMEDIA_SHARED_HCH
+00020 #define _SMARTMEDIA_SHARED_HCH 1
+00021 
+00022 
+00023 
+00024 /*
+00025  * Here we set the various sizes of the data in use. Do not round this values
+00026  * in anyway! For example, 640 pixels times 480 pixels is 307200 (4b000) pixels
+00027  * total.
+00028  */
+00029 #define SIZE_SKIN       0x04afff
+00030 #define SIZE_HELP       0x04afff
+00031 #define SIZE_GRAPH      0x04afff
+00032 #define SIZE_SKINMASK   0x018fff
+00033 #define SIZE_HELPMASK   0x018fff
+00034 #define SIZE_GRAPHMASK  0x018fff
+00035 
+00036 #define SIZE_PRESET     0x0001c0
+00037 
+00038 /*
+00039  * Here we setup the start and end address for the various components.
+00040  */
+00041 
+00042 #define SMARTMEDIA_ADDRESS_SKIN_START           0x084000 /* Block:  33 */
+00043 #define SMARTMEDIA_ADDRESS_SKINMASK_START       0x168000 /* Block:  90 */
+00044 #define SMARTMEDIA_ADDRESS_HELP_START           0x1b4000 /* Block: 109 */
+00045 #define SMARTMEDIA_ADDRESS_HELPMASK_START       0x298000 /* Block: 166 */
+00046 #define SMARTMEDIA_ADDRESS_GRAPHMASK_START      0x2e4000 /* Block: 185 */
+00047 
+00048 #define SMARTMEDIA_ADDRESS_PRESET_DEMO_START    0x330000 /* Block: 204 */
+00049 #define SMARTMEDIA_ADDRESS_PRESET_RESET_START   0x334000 /* Block: 205 */
+00050 
+00051 #define SMARTMEDIA_ADDRESS_SKIN_END             (SMARTMEDIA_ADDRESS_SKIN_START +(SIZE_SKIN *3))
+00052 #define SMARTMEDIA_ADDRESS_SKINMASK_END         (SMARTMEDIA_ADDRESS_SKINMASK_START +(SIZE_SKINMASK *3))
+00053 #define SMARTMEDIA_ADDRESS_HELP_END             (SMARTMEDIA_ADDRESS_HELP_START +(SIZE_HELP *3))
+00054 #define SMARTMEDIA_ADDRESS_HELPMASK_END         (SMARTMEDIA_ADDRESS_HELPMASK_START +(SIZE_HELPMASK *3))
+00055 #define SMARTMEDIA_ADDRESS_GRAPHMASK_END        (SMARTMEDIA_ADDRESS_GRAPHMASK_START +(SIZE_GRAPHMASK *3))
+00056 
+00057 #define SMARTMEDIA_ADDRESS_PRESET_DEMO_END      (SMARTMEDIA_ADDRESS_PRESET_DEMO_START +(SIZE_PRESET))
+00058 #define SMARTMEDIA_ADDRESS_PRESET_RESET_END     (SMARTMEDIA_ADDRESS_PRESET_RESET_START +(SIZE_PRESET))
+00059 
+00060 #define ADDRESS_SKIN_START              0x000000
+00061 #define ADDRESS_SKIN_END                (ADDRESS_SKIN_START +SIZE_SKIN)
+00062 
+00063 #define ADDRESS_HELP_START              0x04b000
+00064 #define ADDRESS_HELP_END                (ADDRESS_HELP_START +SIZE_HELP)
+00065 
+00066 #define ADDRESS_GRAPHMASK_START         0x096000
+00067 #define ADDRESS_GRAPHMASK_END           (ADDRESS_GRAPHMASK_START +SIZE_GRAPH)
+00068 
+00069 #define ADDRESS_PRESET_DEMO_START       0x0e1000
+00070 #define ADDRESS_PRESET_DEMO_END         (ADDRESS_PRESET_DEMO_START +SIZE_PRESET)
+00071 
+00072 #define ADDRESS_PRESET_RESET_START      0x0e11c0
+00073 #define ADDRESS_PRESET_RESET_END        (ADDRESS_PRESET_RESET_START +SIZE_PRESET)
+00074 
+00075 
+00076 
+00077 #else
+00078 #error "ERROR file smartmedia_shared.hch multiple times included"
+00079 #endif /* --- _SMARTMEDIA_SHARED_HCH --- */
+00080 
+

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/smartmedia__shared_8hch.html b/Graphic_Equalizer_Split/doc/html/smartmedia__shared_8hch.html new file mode 100644 index 0000000..6226246 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/smartmedia__shared_8hch.html @@ -0,0 +1,920 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/smartmedia_shared.hch File Reference + + + + + +

smartmedia_shared.hch File Reference

+

+This graph shows which files directly or indirectly include this file:

Included by dependency graph
+ + + + + +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

#define _SMARTMEDIA_SHARED_HCH   1
#define SIZE_SKIN   0x04afff
#define SIZE_HELP   0x04afff
#define SIZE_GRAPH   0x04afff
#define SIZE_SKINMASK   0x018fff
#define SIZE_HELPMASK   0x018fff
#define SIZE_GRAPHMASK   0x018fff
#define SIZE_PRESET   0x0001c0
#define SMARTMEDIA_ADDRESS_SKIN_START   0x084000
#define SMARTMEDIA_ADDRESS_SKINMASK_START   0x168000
#define SMARTMEDIA_ADDRESS_HELP_START   0x1b4000
#define SMARTMEDIA_ADDRESS_HELPMASK_START   0x298000
#define SMARTMEDIA_ADDRESS_GRAPHMASK_START   0x2e4000
#define SMARTMEDIA_ADDRESS_PRESET_DEMO_START   0x330000
#define SMARTMEDIA_ADDRESS_PRESET_RESET_START   0x334000
#define SMARTMEDIA_ADDRESS_SKIN_END   (SMARTMEDIA_ADDRESS_SKIN_START +(SIZE_SKIN *3))
#define SMARTMEDIA_ADDRESS_SKINMASK_END   (SMARTMEDIA_ADDRESS_SKINMASK_START +(SIZE_SKINMASK *3))
#define SMARTMEDIA_ADDRESS_HELP_END   (SMARTMEDIA_ADDRESS_HELP_START +(SIZE_HELP *3))
#define SMARTMEDIA_ADDRESS_HELPMASK_END   (SMARTMEDIA_ADDRESS_HELPMASK_START +(SIZE_HELPMASK *3))
#define SMARTMEDIA_ADDRESS_GRAPHMASK_END   (SMARTMEDIA_ADDRESS_GRAPHMASK_START +(SIZE_GRAPHMASK *3))
#define SMARTMEDIA_ADDRESS_PRESET_DEMO_END   (SMARTMEDIA_ADDRESS_PRESET_DEMO_START +(SIZE_PRESET))
#define SMARTMEDIA_ADDRESS_PRESET_RESET_END   (SMARTMEDIA_ADDRESS_PRESET_RESET_START +(SIZE_PRESET))
#define ADDRESS_SKIN_START   0x000000
#define ADDRESS_SKIN_END   (ADDRESS_SKIN_START +SIZE_SKIN)
#define ADDRESS_HELP_START   0x04b000
#define ADDRESS_HELP_END   (ADDRESS_HELP_START +SIZE_HELP)
#define ADDRESS_GRAPHMASK_START   0x096000
#define ADDRESS_GRAPHMASK_END   (ADDRESS_GRAPHMASK_START +SIZE_GRAPH)
#define ADDRESS_PRESET_DEMO_START   0x0e1000
#define ADDRESS_PRESET_DEMO_END   (ADDRESS_PRESET_DEMO_START +SIZE_PRESET)
#define ADDRESS_PRESET_RESET_START   0x0e11c0
#define ADDRESS_PRESET_RESET_END   (ADDRESS_PRESET_RESET_START +SIZE_PRESET)
+


Detailed Description

+

+Graphic Equalizer API

+

+Project information.

+Project Graphic Equalizer
+
Author:
O.M. Schinagl
+
Date:
20041202
+
Version:
0.1
+

+Copyright

+Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved

+Change history

+20041202: O.M. Schinagl
+ Initial version +

+Definition in file smartmedia_shared.hch.


Define Documentation

+

+ + + + +
+ + + + +
#define _SMARTMEDIA_SHARED_HCH   1
+
+ + + + + +
+   + + +

+ +

+Definition at line 20 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define SIZE_SKIN   0x04afff
+
+ + + + + +
+   + + +

+ +

+Definition at line 29 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define SIZE_HELP   0x04afff
+
+ + + + + +
+   + + +

+ +

+Definition at line 30 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define SIZE_GRAPH   0x04afff
+
+ + + + + +
+   + + +

+ +

+Definition at line 31 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define SIZE_SKINMASK   0x018fff
+
+ + + + + +
+   + + +

+ +

+Definition at line 32 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define SIZE_HELPMASK   0x018fff
+
+ + + + + +
+   + + +

+ +

+Definition at line 33 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define SIZE_GRAPHMASK   0x018fff
+
+ + + + + +
+   + + +

+ +

+Definition at line 34 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define SIZE_PRESET   0x0001c0
+
+ + + + + +
+   + + +

+ +

+Definition at line 36 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define SMARTMEDIA_ADDRESS_SKIN_START   0x084000
+
+ + + + + +
+   + + +

+ +

+Definition at line 42 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define SMARTMEDIA_ADDRESS_SKINMASK_START   0x168000
+
+ + + + + +
+   + + +

+ +

+Definition at line 43 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define SMARTMEDIA_ADDRESS_HELP_START   0x1b4000
+
+ + + + + +
+   + + +

+ +

+Definition at line 44 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define SMARTMEDIA_ADDRESS_HELPMASK_START   0x298000
+
+ + + + + +
+   + + +

+ +

+Definition at line 45 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define SMARTMEDIA_ADDRESS_GRAPHMASK_START   0x2e4000
+
+ + + + + +
+   + + +

+ +

+Definition at line 46 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define SMARTMEDIA_ADDRESS_PRESET_DEMO_START   0x330000
+
+ + + + + +
+   + + +

+ +

+Definition at line 48 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define SMARTMEDIA_ADDRESS_PRESET_RESET_START   0x334000
+
+ + + + + +
+   + + +

+ +

+Definition at line 49 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define SMARTMEDIA_ADDRESS_SKIN_END   (SMARTMEDIA_ADDRESS_SKIN_START +(SIZE_SKIN *3))
+
+ + + + + +
+   + + +

+ +

+Definition at line 51 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define SMARTMEDIA_ADDRESS_SKINMASK_END   (SMARTMEDIA_ADDRESS_SKINMASK_START +(SIZE_SKINMASK *3))
+
+ + + + + +
+   + + +

+ +

+Definition at line 52 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define SMARTMEDIA_ADDRESS_HELP_END   (SMARTMEDIA_ADDRESS_HELP_START +(SIZE_HELP *3))
+
+ + + + + +
+   + + +

+ +

+Definition at line 53 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define SMARTMEDIA_ADDRESS_HELPMASK_END   (SMARTMEDIA_ADDRESS_HELPMASK_START +(SIZE_HELPMASK *3))
+
+ + + + + +
+   + + +

+ +

+Definition at line 54 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define SMARTMEDIA_ADDRESS_GRAPHMASK_END   (SMARTMEDIA_ADDRESS_GRAPHMASK_START +(SIZE_GRAPHMASK *3))
+
+ + + + + +
+   + + +

+ +

+Definition at line 55 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define SMARTMEDIA_ADDRESS_PRESET_DEMO_END   (SMARTMEDIA_ADDRESS_PRESET_DEMO_START +(SIZE_PRESET))
+
+ + + + + +
+   + + +

+ +

+Definition at line 57 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define SMARTMEDIA_ADDRESS_PRESET_RESET_END   (SMARTMEDIA_ADDRESS_PRESET_RESET_START +(SIZE_PRESET))
+
+ + + + + +
+   + + +

+ +

+Definition at line 58 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define ADDRESS_SKIN_START   0x000000
+
+ + + + + +
+   + + +

+ +

+Definition at line 60 of file smartmedia_shared.hch. +

+Referenced by display_main().

+

+ + + + +
+ + + + +
#define ADDRESS_SKIN_END   (ADDRESS_SKIN_START +SIZE_SKIN)
+
+ + + + + +
+   + + +

+ +

+Definition at line 61 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define ADDRESS_HELP_START   0x04b000
+
+ + + + + +
+   + + +

+ +

+Definition at line 63 of file smartmedia_shared.hch. +

+Referenced by smartmedia_loaddata().

+

+ + + + +
+ + + + +
#define ADDRESS_HELP_END   (ADDRESS_HELP_START +SIZE_HELP)
+
+ + + + + +
+   + + +

+ +

+Definition at line 64 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define ADDRESS_GRAPHMASK_START   0x096000
+
+ + + + + +
+   + + +

+ +

+Definition at line 66 of file smartmedia_shared.hch. +

+Referenced by smartmedia_loaddata().

+

+ + + + +
+ + + + +
#define ADDRESS_GRAPHMASK_END   (ADDRESS_GRAPHMASK_START +SIZE_GRAPH)
+
+ + + + + +
+   + + +

+ +

+Definition at line 67 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define ADDRESS_PRESET_DEMO_START   0x0e1000
+
+ + + + + +
+   + + +

+ +

+Definition at line 69 of file smartmedia_shared.hch. +

+Referenced by smartmedia_loaddata().

+

+ + + + +
+ + + + +
#define ADDRESS_PRESET_DEMO_END   (ADDRESS_PRESET_DEMO_START +SIZE_PRESET)
+
+ + + + + +
+   + + +

+ +

+Definition at line 70 of file smartmedia_shared.hch.

+

+ + + + +
+ + + + +
#define ADDRESS_PRESET_RESET_START   0x0e11c0
+
+ + + + + +
+   + + +

+ +

+Definition at line 72 of file smartmedia_shared.hch. +

+Referenced by smartmedia_loaddata().

+

+ + + + +
+ + + + +
#define ADDRESS_PRESET_RESET_END   (ADDRESS_PRESET_RESET_START +SIZE_PRESET)
+
+ + + + + +
+   + + +

+ +

+Definition at line 73 of file smartmedia_shared.hch. +

+Referenced by smartmedia_loaddata().

+


Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/smartmedia__shared_8hch__dep__incl.map b/Graphic_Equalizer_Split/doc/html/smartmedia__shared_8hch__dep__incl.map new file mode 100644 index 0000000..010c863 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/smartmedia__shared_8hch__dep__incl.map @@ -0,0 +1,3 @@ +base referer +rect $display_8hcc.html 7,7 95,34 +rect $smartmedia_8hcc.html 119,7 237,34 diff --git a/Graphic_Equalizer_Split/doc/html/smartmedia__shared_8hch__dep__incl.md5 b/Graphic_Equalizer_Split/doc/html/smartmedia__shared_8hch__dep__incl.md5 new file mode 100644 index 0000000..b1d0df9 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/smartmedia__shared_8hch__dep__incl.md5 @@ -0,0 +1 @@ +cc243b4bbcc02c0ce51bf569d27b4250 \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/smartmedia__shared_8hch__dep__incl.png b/Graphic_Equalizer_Split/doc/html/smartmedia__shared_8hch__dep__incl.png new file mode 100644 index 0000000..ddc355c Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/smartmedia__shared_8hch__dep__incl.png differ diff --git a/Graphic_Equalizer_Split/doc/html/structaudiodata__t.html b/Graphic_Equalizer_Split/doc/html/structaudiodata__t.html new file mode 100644 index 0000000..5c3b5fd --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/structaudiodata__t.html @@ -0,0 +1,77 @@ + + +Graphic Equalizer 2: audiodata_t Struct Reference + + + + +

audiodata_t Struct Reference

+ + + + + + +

Data Fields

unsigned * equalizer_levels_ptr
unsigned display_log
+

Field Documentation

+

+ + + + +
+ + + + +
unsigned* audiodata_t::equalizer_levels_ptr
+
+ + + + + +
+   + + +

+ +

+Definition at line 34 of file audio.hch. +

+Referenced by equalize_audio(), and eventhandler_main().

+

+ + + + +
+ + + + +
unsigned audiodata_t::display_log
+
+ + + + + +
+   + + +

+ +

+Definition at line 35 of file audio.hch. +

+Referenced by display_main(), equalize_audio(), and eventhandler_main().

+


The documentation for this struct was generated from the following file:
    +
  • C:/Project Marcel & Oliver/Graphic_Equalizer/include/audio.hch
+
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/structevents__t.html b/Graphic_Equalizer_Split/doc/html/structevents__t.html new file mode 100644 index 0000000..6f88ff4 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/structevents__t.html @@ -0,0 +1,222 @@ + + +Graphic Equalizer 2: events_t Struct Reference + + + + +

events_t Struct Reference

+ + + + + + + + + + + + + + + + +

Data Fields

ram unsigned equalizer_display [128]
unsigned active_preset
unsigned volume_position
unsigned mask
unsigned mode
unsigned equalizer_mode
unsigned locked_display
+

Field Documentation

+

+ + + + +
+ + + + +
ram unsigned events_t::equalizer_display[128]
+
+ + + + + +
+   + + +

+ +

+Definition at line 30 of file eventhandler_shared.hch. +

+Referenced by display_main(), eventhandler_main(), and reload_equalizer().

+

+ + + + +
+ + + + +
unsigned events_t::active_preset
+
+ + + + + +
+   + + +

+ +

+Definition at line 31 of file eventhandler_shared.hch. +

+Referenced by display_main(), and eventhandler_main().

+

+ + + + +
+ + + + +
unsigned events_t::volume_position
+
+ + + + + +
+   + + +

+ +

+Definition at line 32 of file eventhandler_shared.hch. +

+Referenced by display_main(), and eventhandler_main().

+

+ + + + +
+ + + + +
unsigned events_t::mask
+
+ + + + + +
+   + + +

+ +

+Definition at line 33 of file eventhandler_shared.hch. +

+Referenced by display_main(), and eventhandler_main().

+

+ + + + +
+ + + + +
unsigned events_t::mode
+
+ + + + + +
+   + + +

+ +

+Definition at line 34 of file eventhandler_shared.hch. +

+Referenced by display_main(), and eventhandler_main().

+

+ + + + +
+ + + + +
unsigned events_t::equalizer_mode
+
+ + + + + +
+   + + +

+ +

+Definition at line 35 of file eventhandler_shared.hch. +

+Referenced by display_main(), and eventhandler_main().

+

+ + + + +
+ + + + +
unsigned events_t::locked_display
+
+ + + + + +
+   + + +

+ +

+Definition at line 36 of file eventhandler_shared.hch. +

+Referenced by display_main(), eventhandler_main(), and reload_equalizer().

+


The documentation for this struct was generated from the following file: +
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/structmousedata__t.html b/Graphic_Equalizer_Split/doc/html/structmousedata__t.html new file mode 100644 index 0000000..675c18a --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/structmousedata__t.html @@ -0,0 +1,135 @@ + + +Graphic Equalizer 2: mousedata_t Struct Reference + + + + +

mousedata_t Struct Reference

+ + + + + + + + + + +

Data Fields

unsigned x
unsigned y
unsigned state
unsigned status
+

Field Documentation

+

+ + + + +
+ + + + +
unsigned mousedata_t::x
+
+ + + + + +
+   + + +

+ +

+Definition at line 28 of file mouse_shared.hch. +

+Referenced by display_main(), and mouse_main().

+

+ + + + +
+ + + + +
unsigned mousedata_t::y
+
+ + + + + +
+   + + +

+ +

+Definition at line 28 of file mouse_shared.hch. +

+Referenced by display_main(), eventhandler_main(), and mouse_main().

+

+ + + + +
+ + + + +
unsigned mousedata_t::state
+
+ + + + + +
+   + + +

+ +

+Definition at line 29 of file mouse_shared.hch. +

+Referenced by eventhandler_main(), and mouse_main().

+

+ + + + +
+ + + + +
unsigned mousedata_t::status
+
+ + + + + +
+   + + +

+ +

+Definition at line 30 of file mouse_shared.hch. +

+Referenced by display_main(), and mouse_main().

+


The documentation for this struct was generated from the following file: +
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/structskindata__t.html b/Graphic_Equalizer_Split/doc/html/structskindata__t.html new file mode 100644 index 0000000..2ae74df --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/structskindata__t.html @@ -0,0 +1,139 @@ + + +Graphic Equalizer 2: skindata_t Struct Reference + + + + +

skindata_t Struct Reference

This struct contains all area- dimensions and color information for the skin. +More... +

+Collaboration diagram for skindata_t:

Collaboration graph
+ + + +
[legend]
+ + + + + + + + + + +

Data Fields

skin_info_t waveform
skin_info_t spectrum
skin_info_t volume
skin_info_t equalizer
+

Detailed Description

+This struct contains all area- dimensions and color information for the skin. +

+ +

+Definition at line 29 of file display_shared.hch.


Field Documentation

+

+ + + + +
+ + + + +
struct skin_info_t skindata_t::waveform
+
+ + + + + +
+   + + +

+We store all information about the waveform area here. +

+Definition at line 42 of file display_shared.hch.

+

+ + + + +
+ + + + +
struct skin_info_t skindata_t::spectrum
+
+ + + + + +
+   + + +

+We store all information about the spectrum analyzer area here. +

+Definition at line 43 of file display_shared.hch.

+

+ + + + +
+ + + + +
struct skin_info_t skindata_t::volume
+
+ + + + + +
+   + + +

+We store all information about the volume control area here. +

+Definition at line 44 of file display_shared.hch.

+

+ + + + +
+ + + + +
struct skin_info_t skindata_t::equalizer
+
+ + + + + +
+   + + +

+We store all information about the equalizerbars here. +

+Definition at line 45 of file display_shared.hch.

+


The documentation for this struct was generated from the following file: +
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/structskindata__t_1_1skin__info__t.html b/Graphic_Equalizer_Split/doc/html/structskindata__t_1_1skin__info__t.html new file mode 100644 index 0000000..42de9e3 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/structskindata__t_1_1skin__info__t.html @@ -0,0 +1,189 @@ + + +Graphic Equalizer 2: skindata_t::skin_info_t Struct Reference + + + + +

skindata_t::skin_info_t Struct Reference

Structure containing the four boundry limits of an area and maximal two colors per area. +More... +

+ + + + + + + + + + + + + + + +

Data Fields

unsigned area_bottom
unsigned area_top
unsigned area_left
unsigned area_right
unsigned color_primary
unsigned color_secondary
+


Detailed Description

+Structure containing the four boundry limits of an area and maximal two colors per area. +

+ +

+Definition at line 34 of file display_shared.hch.


Field Documentation

+

+ + + + +
+ + + + +
unsigned skindata_t::skin_info_t::area_bottom
+
+ + + + + +
+   + + +

+lowest point registerd in the area +

+Definition at line 35 of file display_shared.hch.

+

+ + + + +
+ + + + +
unsigned skindata_t::skin_info_t::area_top
+
+ + + + + +
+   + + +

+highest point registerd in the area +

+Definition at line 36 of file display_shared.hch.

+

+ + + + +
+ + + + +
unsigned skindata_t::skin_info_t::area_left
+
+ + + + + +
+   + + +

+leftmost point registerd in the area +

+Definition at line 37 of file display_shared.hch.

+

+ + + + +
+ + + + +
unsigned skindata_t::skin_info_t::area_right
+
+ + + + + +
+   + + +

+rightmost point registerd in the area +

+Definition at line 38 of file display_shared.hch.

+

+ + + + +
+ + + + +
unsigned skindata_t::skin_info_t::color_primary
+
+ + + + + +
+   + + +

+primary color for this area +

+Definition at line 39 of file display_shared.hch.

+

+ + + + +
+ + + + +
unsigned skindata_t::skin_info_t::color_secondary
+
+ + + + + +
+   + + +

+optionally an area can have a second color +

+Definition at line 40 of file display_shared.hch.

+


The documentation for this struct was generated from the following file: +
Generated on Thu Dec 9 14:37:09 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/structskindata__t__coll__graph.map b/Graphic_Equalizer_Split/doc/html/structskindata__t__coll__graph.map new file mode 100644 index 0000000..c8bb9b0 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/structskindata__t__coll__graph.map @@ -0,0 +1,2 @@ +base referer +rect $structskindata__t_1_1skin__info__t.html 8,8 162,168 diff --git a/Graphic_Equalizer_Split/doc/html/structskindata__t__coll__graph.md5 b/Graphic_Equalizer_Split/doc/html/structskindata__t__coll__graph.md5 new file mode 100644 index 0000000..87c2419 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/structskindata__t__coll__graph.md5 @@ -0,0 +1 @@ +577445d3608b8ce3a5b31a17d5e2c760 \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/structskindata__t__coll__graph.png b/Graphic_Equalizer_Split/doc/html/structskindata__t__coll__graph.png new file mode 100644 index 0000000..d949888 Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/structskindata__t__coll__graph.png differ diff --git a/Graphic_Equalizer_Split/doc/html/tree.html b/Graphic_Equalizer_Split/doc/html/tree.html new file mode 100644 index 0000000..60c70e1 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/tree.html @@ -0,0 +1,200 @@ + + + + + + + TreeView + + + + + +
+

Graphic Equalizer 2

+
+

o*Main Page

+

o+File List

+
+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/audio.hch

+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/configuration.hch

+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/display.hch

+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/display_shared.hch

+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/eventhandler.hch

+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/eventhandler_shared.hch

+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/events.hch

+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/fft.hch

+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/mouse.hch

+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/mouse_shared.hch

+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/runfft.hch

+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/smartmedia.hch

+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/smartmedia_shared.hch

+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/include/weights_256.hch

+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/src/audio.hcc

+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/src/display.hcc

+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/src/eventhandler.hcc

+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/src/events.hcc

+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/src/fft.hcc

+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/src/main.hcc

+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/src/mouse.hcc

+

|o*C:/Project Marcel & Oliver/Graphic_Equalizer/src/runfft.hcc

+

|\*C:/Project Marcel & Oliver/Graphic_Equalizer/src/smartmedia.hcc

+
+

o+Data Structures

+ +

o*Data Fields

+

o+Directories

+ +

\*Globals

+
+
+ + diff --git a/Graphic_Equalizer_Split/doc/html/weights__256_8hch-source.html b/Graphic_Equalizer_Split/doc/html/weights__256_8hch-source.html new file mode 100644 index 0000000..e282ad2 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/weights__256_8hch-source.html @@ -0,0 +1,278 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/weights_256.hch Source File + + + + + +

weights_256.hch

Go to the documentation of this file.
00001 #define INTBITS 1
+00002 #define FRACBITS 14
+00003 
+00004 rom signed 16 weight_re[128] = {
+00005         16384,
+00006         16379,
+00007         16364,
+00008         16340,
+00009         16305,
+00010         16261,
+00011         16207,
+00012         16143,
+00013         16069,
+00014         15986,
+00015         15893,
+00016         15791,
+00017         15679,
+00018         15557,
+00019         15426,
+00020         15286,
+00021         15137,
+00022         14978,
+00023         14811,
+00024         14635,
+00025         14449,
+00026         14256,
+00027         14053,
+00028         13842,
+00029         13623,
+00030         13395,
+00031         13160,
+00032         12916,
+00033         12665,
+00034         12406,
+00035         12140,
+00036         11866,
+00037         11585,
+00038         11297,
+00039         11003,
+00040         10702,
+00041         10394,
+00042         10080,
+00043         9760,
+00044         9434,
+00045         9102,
+00046         8765,
+00047         8423,
+00048         8076,
+00049         7723,
+00050         7366,
+00051         7005,
+00052         6639,
+00053         6270,
+00054         5897,
+00055         5520,
+00056         5139,
+00057         4756,
+00058         4370,
+00059         3981,
+00060         3590,
+00061         3196,
+00062         2801,
+00063         2404,
+00064         2006,
+00065         1606,
+00066         1205,
+00067         804,
+00068         402,
+00069         0,
+00070         -402,
+00071         -804,
+00072         -1205,
+00073         -1606,
+00074         -2006,
+00075         -2404,
+00076         -2801,
+00077         -3196,
+00078         -3590,
+00079         -3981,
+00080         -4370,
+00081         -4756,
+00082         -5139,
+00083         -5520,
+00084         -5897,
+00085         -6270,
+00086         -6639,
+00087         -7005,
+00088         -7366,
+00089         -7723,
+00090         -8076,
+00091         -8423,
+00092         -8765,
+00093         -9102,
+00094         -9434,
+00095         -9760,
+00096         -10080,
+00097         -10394,
+00098         -10702,
+00099         -11003,
+00100         -11297,
+00101         -11585,
+00102         -11866,
+00103         -12140,
+00104         -12406,
+00105         -12665,
+00106         -12916,
+00107         -13160,
+00108         -13395,
+00109         -13623,
+00110         -13842,
+00111         -14053,
+00112         -14256,
+00113         -14449,
+00114         -14635,
+00115         -14811,
+00116         -14978,
+00117         -15137,
+00118         -15286,
+00119         -15426,
+00120         -15557,
+00121         -15679,
+00122         -15791,
+00123         -15893,
+00124         -15986,
+00125         -16069,
+00126         -16143,
+00127         -16207,
+00128         -16261,
+00129         -16305,
+00130         -16340,
+00131         -16364,
+00132         -16379
+00133 } with {block = "BlockRAM"};
+00134 
+00135 rom signed 16 weight_im[128] = {
+00136         0,
+00137         -402,
+00138         -804,
+00139         -1205,
+00140         -1606,
+00141         -2006,
+00142         -2404,
+00143         -2801,
+00144         -3196,
+00145         -3590,
+00146         -3981,
+00147         -4370,
+00148         -4756,
+00149         -5139,
+00150         -5520,
+00151         -5897,
+00152         -6270,
+00153         -6639,
+00154         -7005,
+00155         -7366,
+00156         -7723,
+00157         -8076,
+00158         -8423,
+00159         -8765,
+00160         -9102,
+00161         -9434,
+00162         -9760,
+00163         -10080,
+00164         -10394,
+00165         -10702,
+00166         -11003,
+00167         -11297,
+00168         -11585,
+00169         -11866,
+00170         -12140,
+00171         -12406,
+00172         -12665,
+00173         -12916,
+00174         -13160,
+00175         -13395,
+00176         -13623,
+00177         -13842,
+00178         -14053,
+00179         -14256,
+00180         -14449,
+00181         -14635,
+00182         -14811,
+00183         -14978,
+00184         -15137,
+00185         -15286,
+00186         -15426,
+00187         -15557,
+00188         -15679,
+00189         -15791,
+00190         -15893,
+00191         -15986,
+00192         -16069,
+00193         -16143,
+00194         -16207,
+00195         -16261,
+00196         -16305,
+00197         -16340,
+00198         -16364,
+00199         -16379,
+00200         -16384,
+00201         -16379,
+00202         -16364,
+00203         -16340,
+00204         -16305,
+00205         -16261,
+00206         -16207,
+00207         -16143,
+00208         -16069,
+00209         -15986,
+00210         -15893,
+00211         -15791,
+00212         -15679,
+00213         -15557,
+00214         -15426,
+00215         -15286,
+00216         -15137,
+00217         -14978,
+00218         -14811,
+00219         -14635,
+00220         -14449,
+00221         -14256,
+00222         -14053,
+00223         -13842,
+00224         -13623,
+00225         -13395,
+00226         -13160,
+00227         -12916,
+00228         -12665,
+00229         -12406,
+00230         -12140,
+00231         -11866,
+00232         -11585,
+00233         -11297,
+00234         -11003,
+00235         -10702,
+00236         -10394,
+00237         -10080,
+00238         -9760,
+00239         -9434,
+00240         -9102,
+00241         -8765,
+00242         -8423,
+00243         -8076,
+00244         -7723,
+00245         -7366,
+00246         -7005,
+00247         -6639,
+00248         -6270,
+00249         -5897,
+00250         -5520,
+00251         -5139,
+00252         -4756,
+00253         -4370,
+00254         -3981,
+00255         -3590,
+00256         -3196,
+00257         -2801,
+00258         -2404,
+00259         -2006,
+00260         -1606,
+00261         -1205,
+00262         -804,
+00263         -402,
+00264 } with {block = "BlockRAM"};
+

Generated on Thu Dec 9 14:37:06 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/weights__256_8hch.html b/Graphic_Equalizer_Split/doc/html/weights__256_8hch.html new file mode 100644 index 0000000..f4f534e --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/weights__256_8hch.html @@ -0,0 +1,141 @@ + + +Graphic Equalizer 2: C:/Project Marcel & Oliver/Graphic_Equalizer/include/weights_256.hch File Reference + + + + + +

weights_256.hch File Reference

+

+This graph shows which files directly or indirectly include this file:

Included by dependency graph
+ + + + +

+Go to the source code of this file. + + + + + + + + + + + +

Defines

#define INTBITS   1
#define FRACBITS   14

Variables

rom signed weight_re [128]
rom signed weight_im [128]
+


Define Documentation

+

+ + + + +
+ + + + +
#define INTBITS   1
+
+ + + + + +
+   + + +

+ +

+Definition at line 1 of file weights_256.hch.

+

+ + + + +
+ + + + +
#define FRACBITS   14
+
+ + + + + +
+   + + +

+ +

+Definition at line 2 of file weights_256.hch.

+


Variable Documentation

+

+ + + + +
+ + + + +
rom signed weight_re[128]
+
+ + + + + +
+   + + +

+ +

+Definition at line 4 of file weights_256.hch. +

+Referenced by calculate_fft().

+

+ + + + +
+ + + + +
rom signed weight_im[128]
+
+ + + + + +
+   + + +

+ +

+Definition at line 135 of file weights_256.hch. +

+Referenced by calculate_fft().

+


Generated on Thu Dec 9 14:37:08 2004 for Graphic Equalizer 2 by  + +doxygen 1.3.9.1
+ + diff --git a/Graphic_Equalizer_Split/doc/html/weights__256_8hch__dep__incl.map b/Graphic_Equalizer_Split/doc/html/weights__256_8hch__dep__incl.map new file mode 100644 index 0000000..d753c47 --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/weights__256_8hch__dep__incl.map @@ -0,0 +1,2 @@ +base referer +rect $fft_8hcc.html 40,7 98,34 diff --git a/Graphic_Equalizer_Split/doc/html/weights__256_8hch__dep__incl.md5 b/Graphic_Equalizer_Split/doc/html/weights__256_8hch__dep__incl.md5 new file mode 100644 index 0000000..a2121ab --- /dev/null +++ b/Graphic_Equalizer_Split/doc/html/weights__256_8hch__dep__incl.md5 @@ -0,0 +1 @@ +109f72098a9f38fff30825084869cdf5 \ No newline at end of file diff --git a/Graphic_Equalizer_Split/doc/html/weights__256_8hch__dep__incl.png b/Graphic_Equalizer_Split/doc/html/weights__256_8hch__dep__incl.png new file mode 100644 index 0000000..223c4ed Binary files /dev/null and b/Graphic_Equalizer_Split/doc/html/weights__256_8hch__dep__incl.png differ diff --git a/Graphic_Equalizer_Split/include/audio.hch b/Graphic_Equalizer_Split/include/audio.hch new file mode 100644 index 0000000..988ef59 --- /dev/null +++ b/Graphic_Equalizer_Split/include/audio.hch @@ -0,0 +1,87 @@ +/*! \file audio.hch + * + * \section generic Graphic Equalizer API + * + * \section project Project information. + * Project Graphic Equalizer\n + * \author O.M. Schinagl + * \date 20041021 + * \version 0.1 + * + * \section copyright Copyright + * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved + * + * \section history Change history + * 20041021: O.M. Schinagl\n Initial version + * + ********************************************************************/ + +#ifndef _AUDIO_HCH +#define _AUDIO_HCH 1 + +/* + * Type definition of the shared memory to be used in various processes + */ +typedef struct { + mpram { + ram unsigned 7 write[256]; + rom unsigned 7 read[256]; + } fft_info with { block = "BlockRAM"}; + mpram { + ram unsigned 6 write[256]; + rom unsigned 6 read[256]; + } ifft_info with { block = "BlockRAM"}; + unsigned 4 *equalizer_levels_ptr; + unsigned 1 display_log; +} audiodata_t; + + + + +/* + * States used to indicate wether audio data is sampled. + */ +#define AUDIO_NOT_READY 0 +#define AUDIO_READY 1 + + + +/* + * Line in or Mic in aliases for audio_init. + */ +#define LINE_IN RC200AudioInLineIn +#define MIC_IN RC200AudioInMicrophone + + + +/* + * Sample Rate Aliases for audio_init. + */ +#define SR_8000 RC200AudioSampleRate8000 +#define SR_11025 RC200AudioSampleRate11025 +#define SR_16000 RC200AudioSampleRate16000 +#define SR_22050 RC200AudioSampleRate22050 +#define SR_44100 RC200AudioSampleRate44100 +#define SR_48000 RC200AudioSampleRate48000 + + + +/* + * Initialize the Audio sub-system. gain_level sets the internal amplifier to + * passed level, input_source chooses between line in or mic in. The + * sample_rate is set to supplied rate. Defines for these are mentioned above. + */ +macro proc audio_init(gain_level, input_source, sample_rate, AUDIOIN, AUDIOOUT); + + + +/* + * Main audiodriver loop. This procedure never returns! It handles audio io and + * updates the shared memory. It needs Audio I/O handlers passed. + */ +macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT); + +#else +#error "ERROR file audio.hch multiple times included" +#endif /* --- _AUDIO_HCH --- */ + diff --git a/Graphic_Equalizer_Split/include/configuration.hch b/Graphic_Equalizer_Split/include/configuration.hch new file mode 100644 index 0000000..17c1b3f --- /dev/null +++ b/Graphic_Equalizer_Split/include/configuration.hch @@ -0,0 +1,56 @@ +/*! \file configuration.hch + * + * \section generic Configuration for the entire application + * + * \section project Project information. + * Project Graphic Equalizer\n + * \author O.M. Schinagl + * \date 20041101 + * \version 0.1 + * + * \section copyright Copyright + * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved + * + * \section history Change history + * 20041101: O.M. Schinagl\n Initial version + * + ********************************************************************/ + +#ifndef _CONFIGURATION_HCH +#define _CONFIGURATION_HCH 1 + + + +/* + * To print debug information on the RS232 port set this define. + */ +#define HAVE_DEBUG 0 + + + +/* + * If we don't want to use the SmartMedia set this to 0. Data is then read from + * the ram, assuming it's there. Otherwise 1 will load the smartmedia + * routines. + */ +#define HAVE_SMARTMEDIA 0 + + + +/* + * FFT specific. TODO: Clean Up! + */ +#define USE_RUNFFT 1 +#define HARDWARE_MULTIPLY 1 +#define PERFORM_FFT_CALCULATION 1 +#define USE_UNSIGNED_AUDIO 0 + +/* +FIXME: DK doesn't override from commandline defines. We have to therefore + ignore this include guard until we can find around this. +#else +#error "ERROR file configuration.hch multiple times included" +*/ +#endif /* --- _CONFIGURATION_HCH --- */ + + diff --git a/Graphic_Equalizer_Split/include/display.hch b/Graphic_Equalizer_Split/include/display.hch new file mode 100644 index 0000000..af29b4f --- /dev/null +++ b/Graphic_Equalizer_Split/include/display.hch @@ -0,0 +1,52 @@ +/*! \file display.hch + * + * \section generic Display API + * + * \section project Project information. + * Project Graphic Equalizer\n + * \author + * \date 20041011 + * \version 0.1 + * + * \section copyright Copyright + * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved + * + * \section history Change history + * 20041011: \n Initial version + * + ********************************************************************/ + +#ifndef _DISPLAY_HCH +#define _DISPLAY_HCH 1 + + + +/* + * Set the color for various items that will be drawn on screen. + */ +#define PIXEL (pixeldata <- 24) +#define PIXEL_VOLUME (0x2d74b5) +#define PIXEL_EQUALIZER (0xc7541f) +#define PIXEL_SPECTRUM ((((skindata->area_spectrum_bottom -(SCANY <- 10)) <<1) <- 8) @ 0x00 @ (((skindata->area_spectrum_bottom -(SCANY <- 10)) <<1) <- 8)) +#define PIXEL_WAVEFORM (0x2d74b5) + + + +/* + * Main display loop. This function never returns! It handles display output. + * It needs to respond to certain events set by the events pointer. Also it + * informs events what the current mask is. To optain the current mask we need + * the X and Y coordinates from our mousedata pointer. + */ +void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events, mousedata_t *mousedata); + + + +/* + * reload equalizer bars into the display memory. + */ +void reload_equalizer(events_t *events, unsigned 4 *equalizer_levels_ptr); + +#else +#error "ERROR file display.hch multiple times included" +#endif /* --- _DISPLAY_HCH --- */ diff --git a/Graphic_Equalizer_Split/include/display_shared.hch b/Graphic_Equalizer_Split/include/display_shared.hch new file mode 100644 index 0000000..11d6edc --- /dev/null +++ b/Graphic_Equalizer_Split/include/display_shared.hch @@ -0,0 +1,80 @@ +/*! \file display_shared.hch + * + * \brief Datastructures and defines for usage when interacting with the + * display library. + * + * \section project Project information. + * Graphic Equalizer 2\n + * \author + * \date 20041011 + * \version 0.1 + * + * \section copyright Copyright + * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved + * + * \section history Change history + * 20041011: \n Initial version + * + ********************************************************************/ + +#ifndef _DISPLAY_SHARED_HCH +#define _DISPLAY_SHARED_HCH 1 + + + +/*! \struct skindata_t + * \brief This struct contains all area- dimensions and color information + * for the skin. + */ +struct skindata_t { + /*! \struct skin_info_t + * \brief Structure containing the four boundry limits of an area and + * maximal two colors per area. + */ + struct skin_info_t { + unsigned 10 area_bottom; /*!< lowest point registerd in the area */ + unsigned 10 area_top; /*!< highest point registerd in the area */ + unsigned 10 area_left; /*!< leftmost point registerd in the area */ + unsigned 10 area_right; /*!< rightmost point registerd in the area */ + unsigned 24 color_primary; /*!< primary color for this area */ + unsigned 24 color_secondary; /*!< optionally an area can have a second color */ + }; + struct skin_info_t waveform; /*!< We store all information about the waveform area here. */ + struct skin_info_t spectrum; /*!< We store all information about the spectrum analyzer area here. */ + struct skin_info_t volume; /*!< We store all information about the volume control area here. */ + struct skin_info_t equalizer; /*!< We store all information about the equalizerbars here. */ +}; + + + +#define AREA_WAVEFORM 0x01 /*!< Waveform area. */ +#define AREA_VOLUME_YAXIS 0x02 /*!< Volume control on the Y plane. */ +#define AREA_SPECTRUM_ANALYZER 0x03 /*!< Spectrum Analyzer area. */ + +#define BUTTON_LOG 0x04 /*!< Logarithmic display button. */ +#define BUTTON_DEMO 0x05 /*!< Demo preset button. */ +#define BUTTON_RESET 0x06 /*!< Reset presets button. */ + +#define BUTTON_PRESET_1 0x07 /*!< Button for switching to preset 1 */ +#define BUTTON_PRESET_2 0x08 /*!< Button for switching to preset 2 */ +#define BUTTON_PRESET_3 0x09 /*!< Button for switching to preset 3 */ +#define BUTTON_PRESET_4 0x0a /*!< Button for switching to preset 4 */ +#define BUTTON_PRESET_5 0x0b /*!< Button for switching to preset 5 */ +#define BUTTON_PRESET_6 0x0c /*!< Button for switching to preset 6 */ + +#define BUTTON_CONVEX_FULL 0x0d /*!< / - \ 'Convex' mode Button*/ +#define BUTTON_CONVEX_HALF 0x0e /*!< /\ 'Convex' mode Button */ +#define BUTTON_PRECISE 0x0f /*!< | 'Precise' selection Button */ +#define BUTTON_CONCAVE_HALF 0x10 /*!< \/ 'Concave' mode Button */ +#define BUTTON_CONCAVE_FULL 0x11 /*!< \ _ / 'Concave' mode Button */ + +#define BUTTON_HELP 0x12 /*!< Button to display help screen. */ +#define BUTTON_MODE 0x13 /*!< Button to change operation mode. */ + +#define AREA_EQUALIZER_MIN 0x80 /*!< First bar of the Equalizer Area. */ +#define AREA_EQUALIZER_MAX 0xff /*!< Last bar of the Equalizer Area. */ + +#else +#error "ERROR file display_shared.hch multiple times included" +#endif /* --- _DISPLAY_SHARED_HCH --- */ + diff --git a/Graphic_Equalizer_Split/include/eventhandler.hch b/Graphic_Equalizer_Split/include/eventhandler.hch new file mode 100644 index 0000000..0f3eca9 --- /dev/null +++ b/Graphic_Equalizer_Split/include/eventhandler.hch @@ -0,0 +1,39 @@ +/*! \file eventhandler.hch + * + * \section generic SmartMedia API + * + * \section project Project information. + * Project Graphic Equalizer\n + * \author O.M. Schinagl + * \date 20041110 + * \version 0.1 + * + * \section copyright Copyright + * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved + * + * \section history Change history + * 20041110: O.M. Schinagl\n Initial version + * + ********************************************************************/ + +#ifndef _EVENTHANDLER_HCH +#define _EVENTHANDLER_HCH 1 + + + +#define LOAD_PRESET_RESET 0x000 +#define LOAD_PRESET_DEMO 0x180 + + + +/* + * This is the main eventhandler loop. We require pointers to the event struct + * to store actions to be performed and a mousedata pointer so that we know on + * what mousestate to respond. We never returns! + */ +void eventhandler_main(audiodata_t *audiodata, events_t *events, mousedata_t *mousedata); + +#else +#error "ERROR file eventhandler.hch multiple times included" +#endif /* --- _EVENTHANDLER_HCH --- */ + diff --git a/Graphic_Equalizer_Split/include/eventhandler_shared.hch b/Graphic_Equalizer_Split/include/eventhandler_shared.hch new file mode 100644 index 0000000..d21cff4 --- /dev/null +++ b/Graphic_Equalizer_Split/include/eventhandler_shared.hch @@ -0,0 +1,71 @@ +/*! \file eventhandler_shared.hch + * + * \section generic Shared definitions etc. for eveents. + * + * \section project Project information. + * Project Graphic Equalizer\n + * \author O.M. Schinagl + * \date 20041110 + * \version 0.1 + * + * \section copyright Copyright + * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved + * + * \section history Change history + * 20041110: O.M. Schinagl\n Initial version + * + *****************************************************************************/ + +#ifndef _EVENTHANDLER_SHARED_HCH +#define _EVENTHANDLER_SHARED_HCH 1 + + + +/*** Data Types **********************/ + +/* + * Type definition of the shared memory to be used in various processes + */ +typedef struct { + ram unsigned 10 equalizer_display[128]; + unsigned 10 active_preset; + unsigned 10 volume_position; + unsigned 8 mask; + unsigned 4 mode; + unsigned 4 equalizer_mode; + unsigned 1 locked_display; +} events_t; + + +#define MODE_SKIN 0x00 +#define MODE_HELP 0x01 +#define MODE_GRAPH 0x02 + + + +#define EQUALIZERMODE_FULL 0x05 +#define EQUALIZERMODE_HALF 0x03 +#define EQUALIZERMODE_PRECISE 0x00 + + +/* + * Volume Control lookuptable. + * TODO: This table is now hardcoded. To ensure full skinability this table + * should be dynamically loaded. + */ +extern unsigned 5 volumecontrol_table[46]; + +/* + * Equalizer lookup tables. + * TODO: This table is now hardcoded. To ensure full skinability this table + * should be dynamically loaded. + */ +extern unsigned 4 equalizer_table[640]; +extern unsigned 10 equalizer_table_inv[16]; + + + +#else +#error "ERROR file eventhandler_shared.hch multiple times included" +#endif /* --- _EVENTHANDLER_SHARED_HCH --- */ + diff --git a/Graphic_Equalizer_Split/include/events.hch b/Graphic_Equalizer_Split/include/events.hch new file mode 100644 index 0000000..885e89f --- /dev/null +++ b/Graphic_Equalizer_Split/include/events.hch @@ -0,0 +1,33 @@ +/*! \file events.hch + * + * \section generic This module contains the various actions and events + * that need to be performed. + * + * \section project Project information. + * Project Graphic Equalizer\n + * \author O.M. Schinagl + * \date 20041710 + * \version 0.1 + * + * \section copyright Copyright + * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved + * + * \section history Change history + * 20041710: O.M. Schinagl\n Initial version + * + ******************************************************************************/ + +#ifndef _EVENTS_HCH +#define _EVENTS_HCH 1 + + + +/* + * This function loads 768 4bits presets into the equalizer_levels array + * pointed to by equalizer_levels. + */ +void load_preset(unsigned 10 preset, unsigned 4 *equalizer_levels_ptr); + +#else +#error "ERROR file events.hch multiple times included" +#endif /* --- _EVENTS_HCH --- */ diff --git a/Graphic_Equalizer_Split/include/fft.hch b/Graphic_Equalizer_Split/include/fft.hch new file mode 100644 index 0000000..635ea7b --- /dev/null +++ b/Graphic_Equalizer_Split/include/fft.hch @@ -0,0 +1,34 @@ +#define NUMBER_OF_COLUMNS 8 +#define NUMBER_OF_POINTS (1<>1) + +#if HARDWARE_MULTIPLY +/* + * This routine obtains the audio data from the audio I/O component and copies this + * data to local arrays for calculating purposes, and calls the FFT algorithm. +*/ +void perform_fft(signed 18 *pcm_audio); + +/* This routine calls the ifft algorithm and after completing that it obtains the + * modified audio data and copies that to the output arrays of the audio I/O component. + * Besides that it also fills the array used by the display routine for displaying the waveform. +*/ +void perform_ifft(signed 18 *modified_audio ,unsigned 6 *ifft_info); +#else +/* + * This routine obtains the audio data from the audio I/O component and copies this + * data to local arrays for calculating purposes, and calls the FFT algorithm. +*/ +void perform_fft(signed 16 *pcm_audio); + +/* This routine calls the ifft algorithm and after completing that it obtains the + * modified audio data and copies that to the output arrays of the audio I/O component. + * Besides that it also fills the array used by the display routine for displaying the waveform. +*/ +void perform_ifft(signed 16 *modified_audio ,unsigned 6 *ifft_info); +#endif + +/* This routine equalizes the frequencies derived by the FFT calculation, + * according to the settings of the equalizer bars. +*/ +void equalize_audio(audiodata_t *audiodata); diff --git a/Graphic_Equalizer_Split/include/mouse.hch b/Graphic_Equalizer_Split/include/mouse.hch new file mode 100644 index 0000000..ac26bbf --- /dev/null +++ b/Graphic_Equalizer_Split/include/mouse.hch @@ -0,0 +1,41 @@ +/*! \file mouse.hch + * + * \section generic Mousedriver API + * + * \section project Project information. + * Project Graphic Equalizer\n + * \author O.M. Schinagl + * \date 20041011 + * \version 0.1 + * + * \section copyright Copyright + * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved + * + * \section history Change history + * 20041011: O.M. Schinagl\n Initial version + * + ********************************************************************/ + +#ifndef _MOUSEDRIVER_HCH +#define _MOUSEDRIVER_HCH 1 + + + +/* + * Create a define to keep API generic + */ +#define MouseRun(ClockRate) RC200TouchScreenRun(ClockRate) + + + +/* + * Main mousedriver loop. This procedure never returns! It handles mouse input, + * updates the shared memory and notifies listeners. It requires a pointer to + * a mousedata_t struct to store mouse information. + */ +void mouse_main(mousedata_t *mousedata); + +#else +#error "ERROR file mousedriver.hch multiple times included" +#endif /* --- _MOUSEDRIVER_HCH --- */ + diff --git a/Graphic_Equalizer_Split/include/mouse_shared.hch b/Graphic_Equalizer_Split/include/mouse_shared.hch new file mode 100644 index 0000000..09c5021 --- /dev/null +++ b/Graphic_Equalizer_Split/include/mouse_shared.hch @@ -0,0 +1,56 @@ +/*! \file mouse_shared.hch + * + * \section generic Shared definitions etc. + * + * \section project Project information. + * Project Graphic Equalizer\n + * \author O.M. Schinagl + * \date 20041011 + * \version 0.1 + * + * \section copyright Copyright + * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved + * + * \section history Change history + * 20041011: O.M. Schinagl\n Initial version + * + *****************************************************************************/ + +#ifndef _MOUSEDRIVER_SHARED_HCH +#define _MOUSEDRIVER_SHARED_HCH 1 + +/*** Data Types **********************/ + +/* + * Type definition of the shared memory to be used in various processes + */ +typedef struct { + unsigned 10 x, y; + unsigned 3 state; + unsigned 1 status; +} mousedata_t; + + + +/* + * States used to identify wether mouse data is updated + */ +#define MOUSE_NOT_UPDATED 0 +#define MOUSE_UPDATED 1 + + + +/* + * Set of Mouse States defines + */ +#define MOUSE_STATE_UP 0 +#define MOUSE_STATE_ON_PRESS 1 +#define MOUSE_STATE_DOWN 2 +#define MOUSE_STATE_ON_RELEASE 3 + + + +#else +#error "ERROR file mousedriver_shared.hch multiple times included" +#endif /* --- _MOUSEDRIVER_SHARED_HCH --- */ + diff --git a/Graphic_Equalizer_Split/include/runfft.hch b/Graphic_Equalizer_Split/include/runfft.hch new file mode 100644 index 0000000..d6f6ce0 --- /dev/null +++ b/Graphic_Equalizer_Split/include/runfft.hch @@ -0,0 +1 @@ +extern macro proc RunFFT (AudioIn, AudioOut); diff --git a/Graphic_Equalizer_Split/include/smartmedia.hch b/Graphic_Equalizer_Split/include/smartmedia.hch new file mode 100644 index 0000000..8cd87c0 --- /dev/null +++ b/Graphic_Equalizer_Split/include/smartmedia.hch @@ -0,0 +1,68 @@ +/*! \file smartmedia.hch + * + * \section generic SmartMedia API + * + * \section project Project information. + * Project Graphic Equalizer\n + * \author O.M. Schinagl + * \date 20041110 + * \version 0.1 + * + * \section copyright Copyright + * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved + * + * \section history Change history + * 20041110: O.M. Schinagl\n Initial version + * + ********************************************************************/ + +#ifndef _SMARTMEDIA_HCH +#define _SMARTMEDIA_HCH 1 + + + +/* + * SmartMedia functioncalls a bit to be set to either Read or Write. This + * define should make life easier identifying which one is what. + */ +#define READ 0 +#define WRITE 1 + + + +/* + * The different stages the smart media loaders knows. + */ +#define STAGE_LOAD_SKIN 0x00 +#define STAGE_LOAD_HELP 0x01 +#define STAGE_LOAD_GRAPH 0x02 +#define STAGE_LOAD_PRESET 0x03 + + + +/* + * Create a define to keep API generic + * FIXME: replace with PAL calls when avaiable. + */ +#define CPLDRun(ClockRate) RC200CPLDRun(ClockRate) +#define SmartMediaRun(ClockRate) RC200SmartMediaRun(ClockRate) + + + +/* + * Initializes the smartmedia device. + */ + +unsigned 1 smartmedia_init(void); + + + +/* + * This function loads the memory with data from the smartmedia card. + */ +void smartmedia_loaddata(skindata_t *skindata); + +#else +#error "ERROR file smartmedia.hch multiple times included" +#endif /* --- _SMARTMEDIA_HCH --- */ + diff --git a/Graphic_Equalizer_Split/include/smartmedia_shared.hch b/Graphic_Equalizer_Split/include/smartmedia_shared.hch new file mode 100644 index 0000000..33fdb0a --- /dev/null +++ b/Graphic_Equalizer_Split/include/smartmedia_shared.hch @@ -0,0 +1,80 @@ +/*! \file smartmedia_shared.hch + * + * \section generic SmartMedia Shared + * + * \section project Project information. + * Project Graphic Equalizer\n + * \author O.M. Schinagl + * \date 20041202 + * \version 0.1 + * + * \section copyright Copyright + * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved + * + * \section history Change history + * 20041202: O.M. Schinagl\n Initial version + * + ********************************************************************/ + +#ifndef _SMARTMEDIA_SHARED_HCH +#define _SMARTMEDIA_SHARED_HCH 1 + + + +/* + * Here we set the various sizes of the data in use. Do not round this values + * in anyway! For example, 640 pixels times 480 pixels is 307200 (4b000) pixels + * total. + */ +#define SIZE_SKIN 0x04afff +#define SIZE_HELP 0x04afff +#define SIZE_GRAPH 0x04afff +#define SIZE_SKINMASK 0x018fff +#define SIZE_HELPMASK 0x018fff +#define SIZE_GRAPHMASK 0x018fff + +#define SIZE_PRESET 0x0001c0 + +/* + * Here we setup the start and end address for the various components. + */ + +#define SMARTMEDIA_ADDRESS_SKIN_START 0x084000 /* Block: 33 */ +#define SMARTMEDIA_ADDRESS_SKINMASK_START 0x168000 /* Block: 90 */ +#define SMARTMEDIA_ADDRESS_HELP_START 0x1b4000 /* Block: 109 */ +#define SMARTMEDIA_ADDRESS_HELPMASK_START 0x298000 /* Block: 166 */ +#define SMARTMEDIA_ADDRESS_GRAPHMASK_START 0x2e4000 /* Block: 185 */ + +#define SMARTMEDIA_ADDRESS_PRESET_DEMO_START 0x330000 /* Block: 204 */ +#define SMARTMEDIA_ADDRESS_PRESET_RESET_START 0x334000 /* Block: 205 */ + +#define SMARTMEDIA_ADDRESS_SKIN_END (SMARTMEDIA_ADDRESS_SKIN_START +(SIZE_SKIN *3)) +#define SMARTMEDIA_ADDRESS_SKINMASK_END (SMARTMEDIA_ADDRESS_SKINMASK_START +(SIZE_SKINMASK *3)) +#define SMARTMEDIA_ADDRESS_HELP_END (SMARTMEDIA_ADDRESS_HELP_START +(SIZE_HELP *3)) +#define SMARTMEDIA_ADDRESS_HELPMASK_END (SMARTMEDIA_ADDRESS_HELPMASK_START +(SIZE_HELPMASK *3)) +#define SMARTMEDIA_ADDRESS_GRAPHMASK_END (SMARTMEDIA_ADDRESS_GRAPHMASK_START +(SIZE_GRAPHMASK *3)) + +#define SMARTMEDIA_ADDRESS_PRESET_DEMO_END (SMARTMEDIA_ADDRESS_PRESET_DEMO_START +(SIZE_PRESET)) +#define SMARTMEDIA_ADDRESS_PRESET_RESET_END (SMARTMEDIA_ADDRESS_PRESET_RESET_START +(SIZE_PRESET)) + +#define ADDRESS_SKIN_START 0x000000 +#define ADDRESS_SKIN_END (ADDRESS_SKIN_START +SIZE_SKIN) + +#define ADDRESS_HELP_START 0x04b000 +#define ADDRESS_HELP_END (ADDRESS_HELP_START +SIZE_HELP) + +#define ADDRESS_GRAPHMASK_START 0x096000 +#define ADDRESS_GRAPHMASK_END (ADDRESS_GRAPHMASK_START +SIZE_GRAPH) + +#define ADDRESS_PRESET_DEMO_START 0x0e1000 +#define ADDRESS_PRESET_DEMO_END (ADDRESS_PRESET_DEMO_START +SIZE_PRESET) + +#define ADDRESS_PRESET_RESET_START 0x0e11c0 +#define ADDRESS_PRESET_RESET_END (ADDRESS_PRESET_RESET_START +SIZE_PRESET) + + + +#else +#error "ERROR file smartmedia_shared.hch multiple times included" +#endif /* --- _SMARTMEDIA_SHARED_HCH --- */ + diff --git a/Graphic_Equalizer_Split/include/weights_256.hch b/Graphic_Equalizer_Split/include/weights_256.hch new file mode 100644 index 0000000..f2f71ff --- /dev/null +++ b/Graphic_Equalizer_Split/include/weights_256.hch @@ -0,0 +1,264 @@ +#define INTBITS 1 +#define FRACBITS 14 + +rom signed 16 weight_re[128] = { + 16384, + 16379, + 16364, + 16340, + 16305, + 16261, + 16207, + 16143, + 16069, + 15986, + 15893, + 15791, + 15679, + 15557, + 15426, + 15286, + 15137, + 14978, + 14811, + 14635, + 14449, + 14256, + 14053, + 13842, + 13623, + 13395, + 13160, + 12916, + 12665, + 12406, + 12140, + 11866, + 11585, + 11297, + 11003, + 10702, + 10394, + 10080, + 9760, + 9434, + 9102, + 8765, + 8423, + 8076, + 7723, + 7366, + 7005, + 6639, + 6270, + 5897, + 5520, + 5139, + 4756, + 4370, + 3981, + 3590, + 3196, + 2801, + 2404, + 2006, + 1606, + 1205, + 804, + 402, + 0, + -402, + -804, + -1205, + -1606, + -2006, + -2404, + -2801, + -3196, + -3590, + -3981, + -4370, + -4756, + -5139, + -5520, + -5897, + -6270, + -6639, + -7005, + -7366, + -7723, + -8076, + -8423, + -8765, + -9102, + -9434, + -9760, + -10080, + -10394, + -10702, + -11003, + -11297, + -11585, + -11866, + -12140, + -12406, + -12665, + -12916, + -13160, + -13395, + -13623, + -13842, + -14053, + -14256, + -14449, + -14635, + -14811, + -14978, + -15137, + -15286, + -15426, + -15557, + -15679, + -15791, + -15893, + -15986, + -16069, + -16143, + -16207, + -16261, + -16305, + -16340, + -16364, + -16379 +} with {block = "BlockRAM"}; + +rom signed 16 weight_im[128] = { + 0, + -402, + -804, + -1205, + -1606, + -2006, + -2404, + -2801, + -3196, + -3590, + -3981, + -4370, + -4756, + -5139, + -5520, + -5897, + -6270, + -6639, + -7005, + -7366, + -7723, + -8076, + -8423, + -8765, + -9102, + -9434, + -9760, + -10080, + -10394, + -10702, + -11003, + -11297, + -11585, + -11866, + -12140, + -12406, + -12665, + -12916, + -13160, + -13395, + -13623, + -13842, + -14053, + -14256, + -14449, + -14635, + -14811, + -14978, + -15137, + -15286, + -15426, + -15557, + -15679, + -15791, + -15893, + -15986, + -16069, + -16143, + -16207, + -16261, + -16305, + -16340, + -16364, + -16379, + -16384, + -16379, + -16364, + -16340, + -16305, + -16261, + -16207, + -16143, + -16069, + -15986, + -15893, + -15791, + -15679, + -15557, + -15426, + -15286, + -15137, + -14978, + -14811, + -14635, + -14449, + -14256, + -14053, + -13842, + -13623, + -13395, + -13160, + -12916, + -12665, + -12406, + -12140, + -11866, + -11585, + -11297, + -11003, + -10702, + -10394, + -10080, + -9760, + -9434, + -9102, + -8765, + -8423, + -8076, + -7723, + -7366, + -7005, + -6639, + -6270, + -5897, + -5520, + -5139, + -4756, + -4370, + -3981, + -3590, + -3196, + -2801, + -2404, + -2006, + -1606, + -1205, + -804, + -402, +} with {block = "BlockRAM"}; diff --git a/Graphic_Equalizer_Split/src/audio.hcc b/Graphic_Equalizer_Split/src/audio.hcc new file mode 100644 index 0000000..91901e1 --- /dev/null +++ b/Graphic_Equalizer_Split/src/audio.hcc @@ -0,0 +1,102 @@ +/*! @file audio.hcc + * + * @section generic Audio init and main loop + * + * @section project Project information. + * Project Graphic Equalizer\n + * @author O.M. Schinagl + * @date 20041011 + * @version 0.1 + * + * @section copyright Copyright + * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved + * + * @section history Change history + * 20041011: \n Initial version + * + ********************************************************************/ + +/******** System Includes *************/ +#include + +#include "pal_master.hch" + +/******** Application Includes ********/ +#include "configuration.hch" +#include "audio.hch" + + + +/*! \fn macro proc audio_init(gain_level, input_source, sample_rate, AUDIOIN, AUDIOOUT) + * + * \brief Set some inital values to the audio hardware. + * + * \param gain_level Set the input amplifier to this amplification + * level. + * \param input_source Choose between microphone input or linein + * input. + * \param sample_rate Set the sample rate between 8000 + * and 48000 + * + * \return void + * \retval void + * + */ +macro proc audio_init(gain_level, input_source, sample_rate, AUDIOIN, AUDIOOUT) { + /* + * We simply call the appropiate handlers and pass values along. We + * Don't set the mute on input gain. We have volume control to do this. + * Input and Output sampling rates are equal. We dont' need different + * rates. + */ + RC200AudioInSetGain(FALSE, gain_level, gain_level); + RC200AudioInSetInput(input_source); + PalAudioInSetSampleRate(AUDIOIN, sample_rate); + PalAudioOutSetSampleRate(AUDIOOUT, sample_rate); +} /* --- audio_init() --- */ + + +#if !USE_RUNFFT +//TODO: put runfft here! +/*! @fn macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT); + * + * @brief Main audiodriver. This function never returns! It calls the + * audiohandlers and stores samples into a global array. Once 64 + * Samples are collected it raises a signal AUDIO_READY to let + * other processes know it's ready. We use quadruple buffering for + * audio input and double buffering for audio output. + * + * @param *audiodata pointer to audio information structure. + * @param AUDIOIN Audio Input Handler + * @param AUDIOOUT Audio Output Handler + * + * @return Never Returns. + * @retval void + */ +macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT) { + /* + * Determin the data width for the current platform. + */ + macro expr IW = PalAudioInGetMaxDataWidthCT(); + macro expr OW = PalAudioOutGetMaxDataWidthCT(); + + signed IW sample_left_in, sample_right_in; + signed OW sample_left_out, sample_right_out; + + while (TRUE) { + PalAudioInRead(AUDIOIN, &sample_left_in, &sample_right_in); + +/* par { + sample_add(sample_left_in); + sample_get(&sample_left_out); + sample_right_out = sample_right_in; + } + if (rotate_samples()) { + / * + * 64 Samples have been processed, calculate. + * / + } +*/ PalAudioOutWrite(AUDIOOUT, (signed OW)(sample_left_in @ 0), (signed OW)(sample_right_in @ 0)); + } +} /* --- audio_main() --- */ +#endif diff --git a/Graphic_Equalizer_Split/src/display.hcc b/Graphic_Equalizer_Split/src/display.hcc new file mode 100644 index 0000000..1aeb9d9 --- /dev/null +++ b/Graphic_Equalizer_Split/src/display.hcc @@ -0,0 +1,338 @@ +/*! \file display.hcc + * + * \section generic Message build up information and more + * + * \section project Project information. + * Project Graphic Equalizer\n + * \author O.M. Schinagl + * \date 20041011 + * \version 0.1 + * + * \section copyright Copyright + * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved + * + * \section history Change history + * 20041011: O.M. Schinagl\n Initial version + * + ********************************************************************/ + +/* + * Set the Clock rate for this domain. 25.175 Mhz is required for the Video output. + */ +#define PAL_TARGET_CLOCK_RATE 25175000 + +/******** System Includes *************/ +#include + +#include "pal_master.hch" + +/******** Application Includes ********/ +#include "configuration.hch" +#include "audio.hch" +#include "eventhandler_shared.hch" +#include "mouse_shared.hch" +#include "smartmedia_shared.hch" +#include "display_shared.hch" +#include "display.hch" + +#if HAVE_DEBUG + #include "debug.hch" +#endif + + + +/* + * Channel to notify others when new mousedata is available. If so + * Then mousedata struct is updated with shared data. + */ +chan unsigned 1 maskupdate_notification; + + + +/*! \fn void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events, mousedata_t *mousedata) + * + * \brief This routine handles all drawing of pixels. It never returns! + * + * \param *skindata struct with all skin information. + * \param *audiodata struct with (i)fft data to be drawn. + * \param *events struct with all events. + * \param *mousedata struct with coordinates to current. + * X en Y. + * + * \return Never Returns. + * \retval void + */ +void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events, mousedata_t *mousedata) { + /* + * Setup macro's RAM/Video handles and to coordinate pixel writing. + */ + macro expr CLOCKRATE = PAL_ACTUAL_CLOCK_RATE; + macro expr VIDEOOUT = PalVideoOutOptimalCT(CLOCKRATE); + macro expr RAM_BANK0 = PalPL2RAMCT(0); + macro expr DW = PalPL2RAMGetMaxDataWidthCT(); + macro expr AW = PalPL2RAMGetMaxAddressWidthCT(); + macro expr VISIBLEX = PalVideoOutGetVisibleX(VIDEOOUT, CLOCKRATE); + macro expr TOTALX = PalVideoOutGetTotalX(VIDEOOUT, CLOCKRATE); + macro expr TOTALY = PalVideoOutGetTotalY(VIDEOOUT); + macro expr SCANX = PalVideoOutGetX(VIDEOOUT); + macro expr SCANY = PalVideoOutGetY(VIDEOOUT); + + unsigned DW pixeldata; + unsigned 24 visual_graph_color; + unsigned AW address, address_offset; + + + + /* + * If the passed button_state tells us the button is active, then we + * the button is 'on' and we draw it inverted. Otherwise we draw the + * area of the button normally. + */ + macro proc draw_button(button_state) { + if (button_state == pixeldata[31:24]) { + PalVideoOutWrite(VIDEOOUT, ~PIXEL); + } else { + PalVideoOutWrite(VIDEOOUT, PIXEL); + } + } + + /* + * Prime Rendering Pipeline to start where the skin starts. + */ + PalPL2RAMSetReadAddress(RAM_BANK0, ADDRESS_SKIN_START); + + /* + * Run the following tasks indefinatly and in parallel + */ + while (TRUE) { + par { + /* + * Before starting this loop we allready set the the + * address. Therefor we can start reading the + * previously set address and prepare the next address + * for the next cycle. + */ + PalPL2RAMRead(RAM_BANK0, &pixeldata); + PalPL2RAMSetReadAddress(RAM_BANK0, address_offset +address); + + /* + */ + switch (events->mode) { + case MODE_HELP: + address_offset = ADDRESS_HELP_START; + break; + case MODE_GRAPH: + address_offset = ADDRESS_GRAPHMASK_START; + break; + default: + address_offset = ADDRESS_SKIN_START; + break; + } + + if (MODE_GRAPH == events->mode) { + par { + visual_graph_color = ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[31:24]]) << 1) @ ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[31:24]]) << -1) @ ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[31:24]]) << 0); + PalVideoOutWrite(VIDEOOUT, 0 @ visual_graph_color); + } + } else { + /* + * Determin what to draw where here. Every case has an + * if else statement comparing wether to draw something + * special or the background. Every specific drawing + * obviously only happens in the masked area. + */ + switch (pixeldata[31:24]) { + /* + */ + case AREA_WAVEFORM: + if (SCANY == 0 @ skindata->area_waveform_bottom -(0 @ (audiodata->ifft_info.read[((SCANX -(0 @ skindata->area_waveform_left)) <-8)]))) { + PalVideoOutWrite(VIDEOOUT, skindata->color_area_waveform); + } else { + PalVideoOutWrite(VIDEOOUT, PIXEL); + } + break; + + /* + * Volume control over the Y-axis. + */ + case AREA_VOLUME_YAXIS: + /* + * The volume_position stores the + * highest point of our bar. Every + * pixel after this point is drawn. + */ + if (SCANY >= 0 @ events->volume_position) { + PalVideoOutWrite(VIDEOOUT, skindata->color_area_volume); + } else { + PalVideoOutWrite(VIDEOOUT, PIXEL); + } + break; + + /* + * Spectrum Analyzer + */ + case AREA_SPECTRUM_ANALYZER: + /* + * We draw every pixel that is smaller TODO + */ + if ((SCANY >= (0 @ skindata->area_spectrum_bottom) -(0 @ audiodata->fft_info.read[(SCANX -(0 @ skindata->area_spectrum_left))[9:2]])) && ((SCANX -(0 @ skindata->area_spectrum_left)) <- 2)) { + PalVideoOutWrite(VIDEOOUT, PIXEL_SPECTRUM); + } else { + PalVideoOutWrite(VIDEOOUT, PIXEL); + } + break; + + /* + * Since all buttons are drawn equally, either + * we draw them normally or we inverse them, we + * can handle them almost equally. + */ + case BUTTON_PRESET_1: /* fall through */ + case BUTTON_PRESET_2: /* fall through */ + case BUTTON_PRESET_3: /* fall through */ + case BUTTON_PRESET_4: /* fall through */ + case BUTTON_PRESET_5: /* fall through */ + case BUTTON_PRESET_6: + /* + * The active preset tells us what + * button is currently enabled. We must + * however not forget to add the preset + * button offset to possibly match it + * with the current mask. + */ + draw_button((events->active_preset +BUTTON_PRESET_1) <- 8); + break; + + case BUTTON_PRECISE: /* fall through */ + case BUTTON_CONCAVE_HALF: /* fall through */ + case BUTTON_CONVEX_HALF: /* fall through */ + case BUTTON_CONCAVE_FULL: /* fall through */ + case BUTTON_CONVEX_FULL: + /* + * equalizer mode tells us what button + * is currently enabled. By adding the + * equalizer mode button offset we can + * safley check wether it matches our + * mask. + */ + draw_button((0 @ events->equalizer_mode) +BUTTON_PRECISE); + break; + + case BUTTON_LOG: + /* + * + */ + draw_button((0 @ audiodata->display_log) +BUTTON_LOG); + break; + + /* + * The default case is split up into two parts + * actually. This is because we have 128 bands + * for the equalizer and thus as many mask + * entries. Since we don't want 128 identical + * cases we check wether the equalizer mask is + * currently active and if so draw it. If this + * is not the case we simply draw the + * background. + */ + default: + /* (pixeldata[31:24] <= AREA_EQUALIZER_MAX) && */ + if ((AREA_EQUALIZER_MIN <= pixeldata[31:24]) && (!events->locked_display)) { + if ((SCANY == 0 @ events->equalizer_display[(pixeldata[31:24] -AREA_EQUALIZER_MIN) <- 7]) || ((SCANY +1) == 0 @ events->equalizer_display[(pixeldata[31:24] -AREA_EQUALIZER_MIN) <- 7])) { + PalVideoOutWrite(VIDEOOUT, skindata->color_equalizer); + } else { + PalVideoOutWrite(VIDEOOUT, PIXEL); + } + } else { + PalVideoOutWrite(VIDEOOUT, PIXEL); + } + break; + } + } + + /* + * We compare our current X and Y scan positions of the + * output to the x and y data of the mouse. When those + * are equal we set the current mask to the mask stored + * in memory at that location. We then know what mask + * is to be used for events. + */ + if (MOUSE_UPDATED == mousedata->status) { + if ((SCANX == 0 @ mousedata->x) && (SCANY == 0 @ mousedata->y)) { + par { + events->mask = pixeldata[31:24]; + mousedata->status = MOUSE_NOT_UPDATED; + maskupdate_notification ! MOUSE_UPDATED; + } + } else { + delay; + } + } else { + delay; + } + + /* + * The current position of the screen can lay in an + * area called the blanking area. We don't have data + * for this area as it is not drawn. We therefor have + * to determin wether we are beyond the visible area of + * the screen, but before the end of the total width of + * the screen. Our pipeline consists of 5 total stages. + * Therefor we have to substract 5 pixels. + */ + if ((SCANX > (VISIBLEX - 5)) && (SCANX <= (TOTALX - 5))) { + /* + * We are in the blanking area of the screen. + * If we are on the last line, and thus last + * pixel we reset our address counter. + */ + if (SCANY == (TOTALY -1)) { + /* + * Reset our draw address counter to 0. + */ + address = 0; + } else { + /* + * We have reached the end of the + * visible line, but not the end of + * the screen. Therefore do nothing. + */ + delay; + } + } else { + /* + * Increase the memory counter for each pixel + * drawn thus keeping the memory location in + * sync with the current pixel position. + */ + address++; + } + } + } +} /* --- display_main() --- */ + + + +/*! \fn void reload_equalizer(events_t *events, unsigned 4 *equalizer_levels) + + * \brief This function copies the supplied equalizer values to the array + * used for displaying equalizer data. + * + * \param *events events struct + * \param *equalizer_levels pointer to 128 entries where equalizer + * is to be copied from. + * + * \return void + * \retval void + */ +void reload_equalizer(events_t *events, unsigned 4 *equalizer_levels) { + unsigned 7 equalizer_band; + + events->locked_display = TRUE; + delay; + do { + events->equalizer_display[equalizer_band] = equalizer_table_inv[equalizer_levels[equalizer_band]]; + equalizer_band++; + } while (equalizer_band); + events->locked_display = FALSE; +} /* --- reload_equalizer() --- */ diff --git a/Graphic_Equalizer_Split/src/eventhandler.hcc b/Graphic_Equalizer_Split/src/eventhandler.hcc new file mode 100644 index 0000000..e1f90ae --- /dev/null +++ b/Graphic_Equalizer_Split/src/eventhandler.hcc @@ -0,0 +1,315 @@ +/*! \file eventhandler.hcc + * + * \section generic This modules coordinates all events. Thus for example + * when the mousehandler registers a 'click' we coordinate + * the actions that follow that click. + * + * \section project Project information. + * Project Graphic Equalizer\n + * \author O.M. Schinagl + * \date 20041110 + * \version 0.1 + * + * \section copyright Copyright + * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved + * + * \section history Change history + * 20041110: O.M. Schinagl\n Initial version + * + ********************************************************************/ + +/******** System Includes *************/ +#include + +#include "pal_master.hch" + +/******** Application Includes ********/ +#include "configuration.hch" +#include "audio.hch" +#include "mouse_shared.hch" +#include "eventhandler_shared.hch" +#include "eventhandler.hch" +#include "events.hch" +#include "display_shared.hch" +#include "display.hch" + +#if HAVE_DEBUG + #include "debug.hch" +#endif + + + +/* + */ +extern chan unsigned 1 maskupdate_notification; + + + +/*! \fn void eventhandler_main(audiodata_t *audiodata, events_t *events, mousedata_t *mousedata); + * \brief + * + * \param *audiodata pointer to struct for setting equalizer levels. + * \param *events pointer to struct with all events for display states. + * \param *mousedata pointer to struct with mouse data for X and Y + * coordinates. + * + * \return Never Returns. + * \retval void + */ +void eventhandler_main(audiodata_t *audiodata, events_t *events, mousedata_t *mousedata) { + mpram { + ram unsigned 4 write[768]; + rom unsigned 4 read[768]; + } equalizer_levels with { block = "BlockRAM"}; + + unsigned 10 preset_offset; + unsigned 10 reference_point, reference_point_right; + unsigned 5 volume_left; + unsigned 4 index_offset, index_end; + unsigned 4 equalizer_mode_local; + unsigned 1 newmaskupdate; + + load_preset(LOAD_PRESET_RESET, equalizer_levels.write); + reload_equalizer(events, &equalizer_levels.write[preset_offset]); + + while (TRUE) { + maskupdate_notification ? newmaskupdate; + + /* + * First we determine what mousestate we currently have. Then + * we check where we are to decide what to do. + */ + switch (mousedata->state) { + case MOUSE_STATE_ON_PRESS: + /* + * If we are displaying the graphic visual, + * any press returns to the application. + */ + if (MODE_GRAPH == events->mode) { + events->mode = MODE_SKIN; + events->mask = 0; + } else { + delay; + } + + /* + */ + if (BUTTON_MODE == events->mask) { + if (MODE_GRAPH == events->mode) { + events->mode = MODE_SKIN; + } else { + events->mode = MODE_GRAPH; + } + } else { + delay; + } + + /* + * If the current mask equals the help button + * we set display mode to help. + */ + if (BUTTON_HELP == events->mask) { + /* + * Change the mode to help if it's + * currently not set, otherwise go back + * to skin mode. + */ + if (MODE_HELP == events->mode) { + events->mode = MODE_SKIN; + } else { + events->mode = MODE_HELP; + } + } else { + delay; + } + + /* + * The Preset buttons span from 1 to 6 so if + * the mask one of those, we'll change the + * pointer to point to the current preset. + */ + if ((BUTTON_PRESET_1 <= events->mask) && (events->mask <= BUTTON_PRESET_6)) { + /* + * The active preset is determined by + * the mask minus an offset. Hence + * ranging our active preset from 0 to + * 6. + */ + events->active_preset = 0 @ (events->mask -BUTTON_PRESET_1); + /* + * Each equalizer is 128 bands wide, + * thus we need to add 128 * the preset + * for each different preset. This + * offset is calculated here. + */ + preset_offset = events->active_preset << 7; + /* + * We set the pointer to the active + * part of the array by using the + * preset offset as our index. Hence + * depending on the selected preset + * we point to 0, 128, 256, 384, 512 + * or 640. + */ + audiodata->equalizer_levels_ptr = &equalizer_levels.read[preset_offset]; + /* + * Finally update the equalizer bars + * that are drawn by the display. + */ + reload_equalizer(events, &equalizer_levels.write[preset_offset]); + } else { + delay; + } + + if ((BUTTON_PRECISE <= events->mask) && (events->mask <= BUTTON_CONVEX_FULL)) { + events->equalizer_mode = (events->mask -BUTTON_PRECISE) <-4; + } else { + delay; + } + + /* + * If the demo button was pressed load the + * demo preset values into the presets. + */ + if (BUTTON_DEMO == events->mask) { + load_preset(LOAD_PRESET_DEMO, equalizer_levels.write); + reload_equalizer(events, &equalizer_levels.write[preset_offset]); + } + + /* + * If the reset button was pressed load the + * reset values into the presets. + */ + if (BUTTON_RESET == events->mask) { + load_preset(LOAD_PRESET_RESET, equalizer_levels.write); + reload_equalizer(events, &equalizer_levels.write[preset_offset]); + } + + /* + * If the current mask equals the log button, + * we flip the display_log bit. + */ + if (BUTTON_LOG == events->mask) { + audiodata->display_log = !audiodata->display_log; + } else { + delay; + } + + break; + + case MOUSE_STATE_DOWN: + /* + * If we are in the volume area we update the + * volume level for both channels. + */ + if (AREA_VOLUME_YAXIS == events->mask) { + /* + * Copy the current Y cursor position + * to the events struct. This we then + * later use for drawing purposes. + */ + events->volume_position = 0 @ mousedata->y; + /* + * Look the relative y-coordinate up in + * the volumecontrol lookup table. We + * make a local copy here because the + * RC200 call doesn't behave nicely + * when passing anything else. + */ + volume_left = volumecontrol_table[((mousedata->y) -65) <- 6]; + /* + * We feel that volume gets softer the + * closer it gets to the 0, and louder + * as it approaches 0x1f. The SetVolume + * RC200 call does this in an unnatural + * reverse way. Therefor we fix it. + */ + RC200AudioOutSetVolume(!volume_left, 0x1f -volume_left, 0x1f -volume_left); + } else { + delay; + } + + if ((AREA_EQUALIZER_MIN <= events->mask) && (events->mask <= AREA_EQUALIZER_MAX)) { + + if (EQUALIZERMODE_PRECISE == events->equalizer_mode) { + events->locked_display = TRUE; + equalizer_levels.write[preset_offset +(0 @ events->mask) -AREA_EQUALIZER_MIN] = equalizer_table[mousedata->y -382]; + events->equalizer_display[(events->mask -AREA_EQUALIZER_MIN) <- 7] = mousedata->y; + events->locked_display = FALSE; + } else { + + equalizer_mode_local = events->equalizer_mode +1; + + events->locked_display = TRUE; + index_offset = ((equalizer_mode_local << 1)); /* delay; */ + + if (events->mask < (AREA_EQUALIZER_MIN +(0 @ equalizer_mode_local))) { + reference_point = events->equalizer_display[AREA_EQUALIZER_MIN -AREA_EQUALIZER_MIN]; + index_offset -= (((0 @ equalizer_mode_local) -(events->mask -AREA_EQUALIZER_MIN)) <- 4); + } else { + reference_point = events->equalizer_display[(events->mask - (0 @ equalizer_mode_local) -AREA_EQUALIZER_MIN) <- 7]; + index_offset -= 1; + } + + if (events->mask > (AREA_EQUALIZER_MAX -(0 @ equalizer_mode_local))) { + reference_point_right = events->equalizer_display[AREA_EQUALIZER_MAX -AREA_EQUALIZER_MIN]; + index_end = (((0 @ equalizer_mode_local) -(AREA_EQUALIZER_MAX -events->mask)) <- 4) -1; + } else { + reference_point_right = events->equalizer_display[(events->mask + (0 @ equalizer_mode_local) -AREA_EQUALIZER_MIN) <- 7]; + index_end = 0; + } + events->locked_display = FALSE; + + for (; index_offset != index_end; index_offset--) { + unsigned 10 average_bar; + unsigned 7 equalizer_index; + unsigned 4 bar_index; + + if (index_offset == equalizer_mode_local) { + reference_point = reference_point_right; + } else { + delay; + } + + if (index_offset > equalizer_mode_local) + { + bar_index = (index_offset -equalizer_mode_local); + equalizer_index = ((events->mask -(0 @ bar_index) -AREA_EQUALIZER_MIN) <- 7); + } else + { + bar_index = (equalizer_mode_local -index_offset); + equalizer_index = ((events->mask +(0 @ bar_index) -AREA_EQUALIZER_MIN) <- 7); + } + + if (reference_point > mousedata->y) { + average_bar = mousedata->y +((reference_point -mousedata->y) >> (equalizer_mode_local -bar_index)); + } else { + average_bar = mousedata->y -((mousedata->y -reference_point) >> (equalizer_mode_local -bar_index)); + } + + events->locked_display = TRUE; + equalizer_levels.write[preset_offset +(0 @ equalizer_index)] = equalizer_table[average_bar -382]; + events->equalizer_display[equalizer_index] = average_bar; + events->locked_display = FALSE; + } + } + } else { + delay; + } + + break; + + default: + break; + } + } +} /* --- eventhandler_main() --- */ + + + +/* + * Volume Control lookuptable. + * TODO: This table is now hardcoded. To ensure full skinability this table + * should be dynamically loaded. + */ +rom unsigned 5 volumecontrol_table[46] = {31, 31, 30, 30, 29, 29, 28, 28, 27, 27, 26, 26, 25, 25, 24, 24, 23, 23, 22, 22, 21, 21, 20, 20, 19, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0}; diff --git a/Graphic_Equalizer_Split/src/events.hcc b/Graphic_Equalizer_Split/src/events.hcc new file mode 100644 index 0000000..2e8c272 --- /dev/null +++ b/Graphic_Equalizer_Split/src/events.hcc @@ -0,0 +1,76 @@ +/*! \file events.hcc + * + * \section generic This module contains the various actions and events + * that need to be performed. + * + * \section project Project information. + * Project Graphic Equalizer\n + * \author O.M. Schinagl + * \date 20041710 + * \version 0.1 + * + * \section copyright Copyright + * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved + * + * \section history Change history + * 20041710: O.M. Schinagl\n Initial version + * + *****************************************************************************/ + + + +/******** System Includes *************/ +#include + +#include "pal_master.hch" + +/******** Application Includes ********/ +#include "configuration.hch" +#include "eventhandler_shared.hch" +#include "events.hch" + +#if HAVE_DEBUG + #include "debug.hch" +#endif + + +ram unsigned 8 presets_default_values[768] = { +#include "presets_hardcoded.txt" +}; + + + +/*! \fn void load_preset(unsigned 10 preset, unsigned 4 *equalizer_levels_ptr); + * \brief This function loads 768 4bits presets into the equalizer_levels + * array pointed to by equalizer_levels. + * + * \param *equalizer_levels Location where to store presets loaded + * from blockram. + * + * \return void + * \retval void + */ +void load_preset(unsigned 10 preset, unsigned 4 *equalizer_levels_ptr) { + unsigned 10 equalizer_index; + unsigned 4 temp; + + equalizer_index = 0; + while (equalizer_index != 768) { + temp = presets_default_values[preset +(0 @ (equalizer_index \\ 1))][7:4]; + equalizer_levels_ptr[equalizer_index] = temp; + temp = presets_default_values[preset +(0 @ (equalizer_index \\ 1))][3:0]; + equalizer_levels_ptr[equalizer_index +1] = temp; + + equalizer_index += 2; + } +} /* --- load_preset() --- */ + + + +/* + * Equalizer lookuptabes. + * TODO: This table is now hardcoded. To ensure full skinability this table + * should be dynamically loaded. + */ +ram unsigned 4 equalizer_table[640] = {15, 15, 15, 15, 15, 14, 14, 14, 14, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0}; +ram unsigned 10 equalizer_table_inv[16] = {446, 444, 440, 436, 432, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 384}; diff --git a/Graphic_Equalizer_Split/src/fft.hcc b/Graphic_Equalizer_Split/src/fft.hcc new file mode 100644 index 0000000..0be69fe --- /dev/null +++ b/Graphic_Equalizer_Split/src/fft.hcc @@ -0,0 +1,505 @@ +/*! \file fft.hcc + * + * \section generic This modules will take care of the actual FFT calculation + * on the samples. Besides the FFT this module also will + * equalize the audio signal according to the setting made by the user. + * + * \section project Project information. + * Project Graphic Equalizer\n + * \author M. Lauwerijssen + * \date 20041110 + * \version 0.1 + * + * \section copyright Copyright + * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved + * + * \section history Change history + * 20041110: M. Lauwerijssen\n Initial version + * + ********************************************************************/ +#include +#include "pal_master.hch" + +#include "audio.hch" +#include "weights_256.hch" +#include "configuration.hch" +#include "xilinxmult.hch" +#include "fft.hch" + +#if HAVE_DEBUG + #include "debug.hch" +#endif + +/* Define two multi-port RAMs for FFT calculation; one for real and one for imaginary values + * Extra block RAM settings are defined to make sure read and write actions can be performed + * within one clock-cycle. + * Left out extra settings on new board the clock changes TODO !!!! + */ +#if HARDWARE_MULTIPLY +mpram +{ + ram signed 18 rwrite[256]; + rom signed 18 read[256]; +} real with {block = "BlockRAM"/*, westart=2.5, welength=1, rclkpos={1.5}, wclkpos={3}, clkpulselen=0.5*/}; + +mpram +{ + ram signed 18 rwrite[256]; + rom signed 18 read[256]; +} imaginary with {block = "BlockRAM"/*, westart=2.5, welength=1, rclkpos={1.5}, wclkpos={3}, clkpulselen=0.5*/}; +#else +mpram +{ + ram signed 24 rwrite[256]; + rom signed 24 read[256]; +} real with {block = "BlockRAM"/*, westart=2.5, welength=1, rclkpos={1.5}, wclkpos={3}, clkpulselen=0.5*/}; + +mpram +{ + ram signed 24 rwrite[256]; + rom signed 24 read[256]; +} imaginary with {block = "BlockRAM"/*, westart=2.5, welength=1, rclkpos={1.5}, wclkpos={3}, clkpulselen=0.5*/}; +#endif +// multiplication factors for equalizer function +ram signed 7 eq_settings[16] = {0,2,4,7,10,13,16,19,22,26,30,35,41,48,55,63}; + +#if HARDWARE_MULTIPLY +#define DC_COMPONENT 0 +#else +#define DC_COMPONENT 8470527 +#endif + +/*! \fn macro proc multiply(result, op_a, op_b); + * \brief Procedure used for multiply-ing + * + * \param result variable containing the result of the multiply procedure + * \param op_a integer value to be multiplied. + * \param op_b integer value to be multiplied. + * + * \return Procedure returns through variable. + * \retval signed 36 + */ +macro proc multiply(result, op_a, op_b) +{ +#if HARDWARE_MULTIPLY + xilinxmult(result, op_a, adjs(op_b,18)); +#else + result = (adjs(op_a,38))*(adjs(op_a,38)); +#endif +} + + + + +/*! \fn void calculate_fft(unsigned 1 select_inverse) + * \brief This routine performs the Fast Fourier Transform for calculation of the frequency spectrum + * + * \param select_inverse determines if a FFT or iFFT has to be calculated + * + * \return nothing + * \retval void + * + * cost 12391 cycles + */ +void calculate_fft(unsigned 1 select_inverse) +{ + unsigned 4 level; + unsigned 8 point1,point2,j,f,k; + unsigned 9 e,i; + signed 16 weight1,weight2; +#if HARDWARE_MULTIPLY + signed 18 p,q,r,t; +#else + signed 24 p,q,r,t; +#endif + signed a,b; + +#if HARDWARE_MULTIPLY + // Macro to provide rescaling of 36-bit result of fixed point multiply + // down to an 18-bit result. The range of bits selected depends on the + // number that represents the value of "1" in the trig function lookup + // tables. (Eg. for 16384 == 1, the lowest bit selected should be [14]). + macro expr rescale (x) = (x[35] @ x[30:14]); +#else + //Macro to rescale the multiply result down to a 24-bit value. + macro expr rescale (x) = ((x>>FRACBITS)<-24); +#endif + + for(level=1;level<=NUMBER_OF_COLUMNS;level++) // count all the columns + { + e=1<<(NUMBER_OF_COLUMNS-level+1); // number of points in each block in this column + f=(e>>1)<-8; // number of butterflies in each block in this column + + for(j=1;j<=f;j++) // count all the butterflies in each block + { + par + { + // Weight factors for real (the same for FFT and iFFT) + weight1 = weight_re[((j-1)<<(level-1))<-7]; + + + // Weight factors for imaginary (opposite for FFT and iFFT) + weight2 = (!select_inverse) ? (weight_im[((j-1)<<(level-1))<-7]) : -(weight_im[((j-1)<<(level-1))<-7]); + + /* ORIGINAL CODE BELOW, MODIFIED BECAUSE OF MISMATCHING OUTPUT WITH BORLAND TESTAPP + weight2 = (!select_inverse) ? -(weight_im[((j-1)<<(level-1))<-7]) : weight_im[((j-1)<<(level-1))<-7]; + */ + + + + for(i=0@j;i<=NUMBER_OF_POINTS;i+=e) // count all the blocks in this column + { // Butterfly calculation + par + { + point1 = ((i<-8)-1); + point2 = (((i<-8)+f)-1); + } + + par + { + p = (real.read[point1] >> 1) + (real.rwrite[point2] >> 1); + q = (imaginary.read[point1] >> 1) + (imaginary.rwrite[point2] >> 1); + } + + par + { + r = (real.read[point1] >> 1) - (real.rwrite[point2] >> 1); + t = (imaginary.read[point1] >> 1) - (imaginary.rwrite[point2] >> 1); + } + + multiply(a,r,weight1); + multiply(b,t,weight2); + + par + { + real.rwrite[point2] = (rescale(a-b)); + imaginary.rwrite[point1] = q; + } + + multiply(a,t,weight1); + multiply(b,r,weight2); + + par + { + real.rwrite[point1] = p; + imaginary.rwrite[point2] = (rescale(a+b)); + } + + } + } + } + } + + j=1; + for(i=1;i>1; + + + while(k>1; + } + + j+=k; + } + +} + +/*! \fn void perform_fft(signed 18 *pcm_audio) + * \brief This routine obtains the audio data from the audio I/O component and copies this + * data to local arrays for calculating purposes, and calls the FFT algorithm. + * + * \param *pcm_audio pointer to array containg the audio data + * + * \return nothing + * \retval void + * + * cost 258 cycles (excl. the calculate FFT function) + */ +#if HARDWARE_MULTIPLY +void perform_fft(signed 18 *pcm_audio) +#else +void perform_fft(signed 16 *pcm_audio) +#endif +{ + unsigned 8 k; +#if HARDWARE_MULTIPLY + signed 18 sample; + k=0; + sample = adjs(pcm_audio[k],18); +#else + signed 24 sample; + k=0; + sample = adjs(pcm_audio[k],24); +#endif + + //initialize variables for the copying pipeline + + + // copy audio data to real-array before starting FFT calculation + // and set imaginary values to zero + do + { + //Copying the array values has been pipelined to prevent parallel access to the + //pcm_audio array. This copying procedure must be finished before another + //sample is read from the audio input. The time available for this loop is + //determined by the sampling rate of 44,1 Khz + par + { + //COPYING NEEDS TO BE DONE IN 2 STEPS, BECAUSE THE VALUE THAT NEEDS TO WRITTEN + //TO THE REAL-RAM NEEDS TO BE AVAILABLE ON THE START OFF THE CLOCKCYCLE. +#if HARDWARE_MULTIPLY + sample = adjs(pcm_audio[k+1],18); +#else + sample = adjs(pcm_audio[k+1],24); +#endif + real.rwrite[k] = sample; + imaginary.rwrite[k] = 0; + k++; + } + } while (k); + + + +#if PERFORM_FFT_CALCULATION + calculate_fft(0); +#endif + + +} + +/*! \fn void perform_ifft(signed 18 *modified_audio, unsigned 6 *ifft_info) + * \brief This routine calls the ifft algorithm and after completing that it obtains the + * modified audio data and copies that to the output arrays of the audio I/O component. + * Besides that it also fills the array used by the display routine for displaying the waveform. + * + * \param *modified_audio pointer to array containg the audio data + * \param *ifft_info Pointer to the ifft_info array containing the modified waveform data for display purposes + * + * \return nothing + * \retval void + * + * cost 258 cycles (excl. the calculate iFFT function) + */ +#if HARDWARE_MULTIPLY +void perform_ifft(signed 18 *modified_audio, unsigned 6 *ifft_info) +#else +void perform_ifft(signed 16 *modified_audio, unsigned 6 *ifft_info) +#endif +{ + unsigned 6 k; +#if HARDWARE_MULTIPLY + signed 18 p; +#else + signed 24 p; +#endif +#if PERFORM_FFT_CALCULATION + calculate_fft(1); +#endif + + k=0; +//initialize variables for the copying pipeline +#if PERFORM_FFT_CALCULATION + #if HARDWARE_MULTIPLY + p = (real.read[(0@k)+95] << NUMBER_OF_COLUMNS); + #else + p = (real.read[(0@k)+95] >> NUMBER_OF_COLUMNS); + #endif +#else + p = (real.read[(0@k)+95]); +#endif + + do + { + //Copying the array values has been pipelined to prevent parallel access to the + //pcm_audio array. This copying procedure must be finished before another + //sample is read from the audio input. The time available for this loop is + //determined by the sampling rate of 44,1 Khz + par + { + /* + * Before copying the modified audio from the local real-array + * to the output array of the audio I/O component, compensate + * for the FFT calculation by shifting the values. + * 95 is added to start the output from the middle of the sliding + * window, this is done to get a better sound quality. + */ +#if PERFORM_FFT_CALCULATION + #if HARDWARE_MULTIPLY + p = (real.read[(0@k)+95] << NUMBER_OF_COLUMNS); + #else + p = (real.read[(0@k)+95] >> NUMBER_OF_COLUMNS); + #endif +#else + p = (real.read[(0@k)+95]); +#endif + //Copy the modified audio from the local real array to the output array of the audio I/O component. +#if HARDWARE_MULTIPLY + modified_audio[k] = p ; +#else + modified_audio[k] = (p<-16); +#endif + //Fill the array for displaying the waveform, only the 6 MSB are needed. + ifft_info[k] = (unsigned 6)(32+(p[17:12])); + k++; + } + } while(k); +} + +/*! \fn void equalize_audio(audiodata_t *audiodata) + * \brief This routine equalizes the frequencies derived by the FFT calculation, + * according to the settings of the equalizer bars. + * + * \note Cost: 3844 clock cycles (Maximum) + * + * \param *audiodata pointer to the audiodata struct, containing the eq_info, etc. + * + * \return void + * \retval void + * + */ +void equalize_audio(audiodata_t *audiodata) +{ +#if HARDWARE_MULTIPLY + signed 18 p,q; +#else + signed 24 p,q; +#endif + signed 18 a; + unsigned 8 i, mirror_i, bit, m, n; + unsigned 7 old_value; + unsigned 9 tmp; + + //macro expr equalize_bar = multiply(q,a)[29:6]; + + macro proc equalize_bar(retval) + { + signed result; + multiply(result, q,a); +#if HARDWARE_MULTIPLY + retval = result[23:6]; //drop last 6 bit to compensate the maximum multiplication with 64 from the eq_settings array +#else + retval = result[29:6]; //drop last 6 bit to compensate the maximum multiplication with 64 from the eq_settings array +#endif + } + + p = real.read[0] - DC_COMPONENT; // remove DC component for calculations + real.rwrite[0] = p; + + for(i=0;i!=NUMBER_OF_FREQUENCIES;i++) + { + + // set multiplication factor (0..64) for current frequency bar, The first frequency band must be equalized at 100% (63) since there is no DC-component taken into account. + a = adjs(eq_settings[audiodata->equalizer_levels_ptr[i <- 7]],18); + + + // multiply frequency with this factor and divide by 64 (drop 6 LSB's) + q = real.read[i]; + equalize_bar(p); + real.rwrite[i] = p; + + q = imaginary.read[i]; + equalize_bar(p); + imaginary.rwrite[i] = p; + + // the upper part(128..255) of the spectrum is mirrored to the lower part; + // these values need to be adjusted too + if ((i<-7)!=0) // if not in DC component bar + { + mirror_i = (NUMBER_OF_POINTS-1)-i+1; + q = real.read[mirror_i]; + equalize_bar(p); + real.rwrite[mirror_i] = p; + + q = imaginary.read[mirror_i]; + equalize_bar(p); + imaginary.rwrite[mirror_i] = p; + } + } + + //write data to fft_info for display purposes + for(i=0;idisplay_log) + { + + bit=126; +#if HARDWARE_MULTIPLY + while ((p[15] == 0) && (bit != 0)) +#else + while ((p[21] == 0) && (bit != 0)) +#endif + par + { + p = p<<1; + bit = bit - 18; + } + old_value = audiodata->fft_info.write[0 @ (i <- 7)]; + tmp = ((0@old_value) + (0@bit))>>1; + audiodata->fft_info.write[0 @ (i <- 7)] = (old_value <= (tmp<-7)) ? (tmp<-7) : old_value-1; + } + else + { + old_value = audiodata->fft_info.write[0 @ (i <- 7)]; +#if HARDWARE_MULTIPLY + audiodata->fft_info.write[0 @ (i <- 7)] = (old_value<=(unsigned)(p[15:9])) ? (unsigned)(p[15:9]) : old_value-1; +#else + audiodata->fft_info.write[0 @ (i <- 7)] = (old_value<=(unsigned)(p[21:15])) ? (unsigned)(p[21:15]) : old_value-1; +#endif + } + } + + // add DC component again before inverse FFT calculation is performed + + p = real.read[0] + DC_COMPONENT; + real.rwrite[0] = p; +} + diff --git a/Graphic_Equalizer_Split/src/main.hcc b/Graphic_Equalizer_Split/src/main.hcc new file mode 100644 index 0000000..78918b8 --- /dev/null +++ b/Graphic_Equalizer_Split/src/main.hcc @@ -0,0 +1,162 @@ +/*! \file main.hcc + * + * \section generic Message build up information and more + * + * \section project Project information. + * Project Graphic Equalizer\n + * \author O.M. Schinagl + * \date 20041011 + * \version 0.1 + * + * \section copyright Copyright + * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved + * + * \section history Change history + * 20041011: O.M. Schinagl\n Initial version + * + *****************************************************************************/ + +/* + * Set the Clock rate for this domain. 25.175 Mhz is required for the Video output. + */ +#define PAL_TARGET_CLOCK_RATE 25175000 + +/******** System Includes *************/ +#include "pal_master.hch" + +/******** Application Includes ********/ +#include "configuration.hch" +#include "audio.hch" +#include "mouse_shared.hch" +#include "mouse.hch" +#include "eventhandler_shared.hch" +#include "eventhandler.hch" +#include "display_shared.hch" +#include "display.hch" +#include "smartmedia.hch" + +#include "fft.hch" +#include "runfft.hch" + +#if HAVE_DEBUG + #include "debug.hch" +#endif + +/*! \fn void main(void); + * \brief Main Application Loop. + * + * \return void + * \retval void + */ +void main(void) { + /* + * Set VideoOut, Audio I/O and Ram Handles and set clockrate. + */ + macro expr ClockRate = PAL_ACTUAL_CLOCK_RATE; + macro expr VideoOut = PalVideoOutOptimalCT(ClockRate); + macro expr AudioIn = PalAudioInCT(0); + macro expr AudioOut = PalAudioOutCT(0); + macro expr RAM_BANK0 = PalPL2RAMCT(0); + + mousedata_t mousedata; + events_t events; + audiodata_t audiodata; + skindata_t skindata; + unsigned 1 result; + + /* + * Check library versions and Request various hardware functionality. + * We need at least Major Version 1. For Audio purposes we need atleast + * minor version 2. + */ + PalVersionRequire(1, 2); + PalVideoOutRequire(1); + PalAudioInRequire(1); + PalAudioOutRequire(1); + + /* + * We verify some datawidths here at compile time. This to ensure + * successfull operation. + */ + assert (PalVideoOutGetColorWidthCT(VideoOut) == 24, 0, + "We need a 24-bit color Display."); + assert (PalPL2RAMGetDataWidthCT(RAM_BANK0) >= 32, 0, + "We can't work with anything less then 32 bits wide ram."); + + /* + * Run The Following main tasks in parallel. + */ + par { + /* + * Primary task is to 'Run' several hardware simultaniously. + */ + PalVideoOutRun(VideoOut, ClockRate); + MouseRun(ClockRate); + PalAudioInRun(AudioIn, ClockRate); + PalAudioOutRun(AudioOut, ClockRate); + PalPL2RAMRun(RAM_BANK0, ClockRate); +#if HAVE_SMARTMEDIA + /* + * The smartmedia device needs the CPLD to run also. + */ + CPLDRun(ClockRate); + SmartMediaRun(ClockRate); +#endif +#if HAVE_DEBUG + RC200RS232Run(RC200RS232_115200Baud, RC200RS232ParityNone, + RC200RS232FlowControlNone, ClockRate); +#endif + + /* + * Parallel to our Primary tasks we run the application. + */ + seq { + /* + * But first we need to initialize Video and Audio. + * We also load the data from the SmartMedia card + * into the ram. + */ +#if HAVE_DEBUG + print_cls(); + print_string("Graphic Equalizer 2"); + print_eol(); +#endif + PalVideoOutEnable(VideoOut); + PalAudioInEnable(AudioIn); + PalAudioOutEnable(AudioOut); + audio_init(6, LINE_IN, SR_44100, AudioIn, AudioOut); +#if HAVE_SMARTMEDIA + /* + * Once we properly setup the SmartMedia we load our + * data folowed by our main program loop. + */ + result = smartmedia_init(); + if (!result) { +#endif + smartmedia_loaddata(&skindata); + + /* + * Main application starts here! + */ + par { + /* + * From here we run the mouse driver, audio + * and display in parallel. None of these + * should ever return. + */ + mouse_main(&mousedata); + display_main(&skindata, &audiodata, &events, &mousedata); + eventhandler_main(&audiodata, &events, &mousedata); + audio_main(audiodata, AudioIn, AudioOut); + } +#if HAVE_SMARTMEDIA + } else { +#if HAVE_DEBUG + print_string("Error Initializing SmartMedia"); +#endif + } +#endif + } + } + +} /* --- main() --- */ diff --git a/Graphic_Equalizer_Split/src/mouse.hcc b/Graphic_Equalizer_Split/src/mouse.hcc new file mode 100644 index 0000000..61ce619 --- /dev/null +++ b/Graphic_Equalizer_Split/src/mouse.hcc @@ -0,0 +1,131 @@ +/*! \file mouse.hcc + * + * \section generic This module takes care of mouse input. The mouse + * input function itself is however performed by the + * touchscreen of the RC200. + * + * \section project Project information. + * Project Graphic Equalizer\n + * \author O.M. Schinagl + * \date 20041011 + * \version 0.1 + * + * \section copyright Copyright + * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved + * + * \section history Change history + * 20041011: O.M. Schinagl\n Initial version + * + ********************************************************************/ + +/******** System Includes *************/ +#include + +#include "pal_master.hch" +#include "pal_mouse.hch" + +/******** Application Includes ********/ +#include "configuration.hch" +#include "mouse_shared.hch" +#include "mouse.hch" + +#if HAVE_DEBUG + #include "debug.hch" +#endif + + + +/*! \fn void mouse_main(mousedata_t *mousedata); + * \brief Main mousedriver. This function never returns! It calls the + * main mousehandler and returns the States and coordinates + * into a shared store. + * + * \param *mousedata Storage for all mousedata and states. + * + * \return Never Returns. + * \retval void + */ +void mouse_main(mousedata_t *mousedata) { + unsigned 18 touch_sampler; + unsigned 10 x, oldx; + unsigned 9 y, oldy; + unsigned 3 mousestate, oldmousestate; + unsigned 1 touch, touched, oldtouched; + + /* + * We only check for mouse states once every 2^18 time. This to + * overcome the sampling of the 'Touch' state of the RC200 libs. When + * using newer libs this might be overkill, e.g. smaller values may + * work or sampling all together will be redundant. + */ + touch_sampler = 1; + while (TRUE) { + if (!touch_sampler) { + /* + * We are here ready to set mouse states. We compare + * current and previous states and thereby determine + * the state to send to others + */ + if (touched) { + if(oldtouched) { + mousestate = MOUSE_STATE_DOWN; + } else { + mousestate = MOUSE_STATE_ON_PRESS; + } + oldtouched = TRUE; + } else { + if(oldtouched) { + mousestate = MOUSE_STATE_ON_RELEASE; + } else { + mousestate = MOUSE_STATE_UP; + } + oldtouched = FALSE; + } + /* + * We have now processed our Touch. Reset it for the + * next run. + */ + touched = FALSE; + + /* + * In the rare occurance that we receive values + * beyond our range, we set them to some sane + * values here. + */ + x = (x > 639) ? 0 : x; + y = (y > 479) ? 0 : y; + + /* + * Compare Previous States and Coordinates to determine + * wether they have changed. If so, Copy them into + * shared memory, notify the listening processes and + * Set the new as previous values for the next run. We + * can only do this when the display has handled all + * changes. + */ + if (((oldmousestate != mousestate) || (oldx != x) || (oldy != y)) && (MOUSE_NOT_UPDATED == mousedata->status)) { + //par { + oldx = x; + oldy = y; + oldmousestate = mousestate; + mousedata->x = x; + mousedata->y = 0 @ y; + mousedata->state = mousestate; + mousedata->status = MOUSE_UPDATED; + //} + } + } + + /* + * Read the current X and Y of the 'cursor' and register wether + * the display was touched. If touched store this in a local + * store. This we do to catch the sampling of the RC200 lib. + */ + RC200TouchScreenReadScaled(&x, &y, &touch); + if (touch) { + touched = TRUE; + } + + touch_sampler++; + } +} /* --- mouse_main() --- */ diff --git a/Graphic_Equalizer_Split/src/runfft.hcc b/Graphic_Equalizer_Split/src/runfft.hcc new file mode 100644 index 0000000..55d4b05 --- /dev/null +++ b/Graphic_Equalizer_Split/src/runfft.hcc @@ -0,0 +1,182 @@ +/*! \file runfft.hcc + * + * \section generic This module will handle the audio I/O. It will ensure the + * audiosamples are correctly buffered and fed correctly to the FFT.\n + * This module will also handle the output of the modified audio samples. + * + * \section project Project information. + * Project Graphic Equalizer\n + * \author M. Lauwerijssen + * \date 20041110 + * \version 0.1 + * + * \section copyright Copyright + * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved + * + * \section history Change history + * 20041110: M. Lauwerijssen\n Initial version + * + ********************************************************************/ +#include +#include "pal_master.hch" + +#include "configuration.hch" +#if USE_RUNFFT +#include "audio.hch" +#include "fft.hch" + +#if HAVE_DEBUG + #include "debug.hch" +#endif + +/* + * Forward declarations + */ +static macro expr ClockRate = PAL_ACTUAL_CLOCK_RATE; +#if HARDWARE_MULTIPLY +//input buffer +ram signed 18 audio_buffer_in[256] with { block = "BlockRAM"}; +//output buffer +ram signed 18 audio_buffer_out[128] with { block = "BlockRAM"}; +#else +//input buffer +ram signed 16 audio_buffer_in[256] with { block = "BlockRAM"}; +//output buffer +ram signed 16 audio_buffer_out[128] with { block = "BlockRAM"}; +#endif +//EQ settings for the FFT +ram unsigned 4 EQ_info[128] with { block = "BlockRAM"}; +//EQ settings received from the display + + +#if HARDWARE_MULTIPLY +signed 18 *audioptr_in1,*audioptr_in2,*audioptr_in3,*audioptr_in4; + +signed 18 *audioptr_out1,*audioptr_out2; + +unsigned 6 *displayptr1,*displayptr2,*displayptr3,*displayptr4; +#else +signed 16 *audioptr_in1,*audioptr_in2,*audioptr_in3,*audioptr_in4; + +signed 16 *audioptr_out1,*audioptr_out2; + +unsigned 6 *displayptr1,*displayptr2,*displayptr3,*displayptr4; +#endif + +/*! \fn macro proc audio_main(AUDIOIN, AUDIOOUT); + * \brief Audio I/O component main. + * + * \param audiodata Pointer to audiodata struct + * \param AUDIOIN Handle to audio-input + * \param AUDIOOUT Handle to audio-output + * + * \return Never Returns. + * \retval void + */ +macro proc audio_main(audiodata, AUDIOIN, AUDIOOUT) +{ + signed 18 sample; + unsigned 6 sample_count; + unsigned 8 i,cycle; + unsigned 4 eqinfo; + + unsigned 1 FFT_Sync, first; + macro expr OW = PalAudioOutGetMaxDataWidthCT (); + macro expr IW = PalAudioInGetMaxDataWidthCT (); + signed LeftNew, RightNew; + signed Output_sample; + + ram unsigned 6 input[64]; + + //pointers for double and quadruple buffering: + audioptr_in1 = &audio_buffer_in[0]; + audioptr_in2 = &audio_buffer_in[64]; + audioptr_in3 = &audio_buffer_in[128]; + audioptr_in4 = &audio_buffer_in[192]; + + audioptr_out1 = &audio_buffer_out[0]; + audioptr_out2 = &audio_buffer_out[64]; + + displayptr1 = &audiodata.ifft_info.write[0]; + displayptr2 = &audiodata.ifft_info.write[64]; + displayptr3 = &audiodata.ifft_info.write[128]; + displayptr4 = &audiodata.ifft_info.write[192]; + + FFT_Sync=0; +par +{ + for(;;) + { + if (FFT_Sync) //if 64 samples are read from ADC... + { + par + { + // switch pointers + audioptr_in1 = audioptr_in2; + audioptr_in2 = audioptr_in3; + audioptr_in3 = audioptr_in4; + audioptr_in4 = audioptr_in1; + + audioptr_out1 = audioptr_out2; + audioptr_out2 = audioptr_out1; + + displayptr1=displayptr2; + displayptr2=displayptr3; + displayptr3=displayptr4; + displayptr4=displayptr1; + + FFT_Sync = 0; + } + + // FFT calculation + perform_fft(audioptr_in1); + +#if PERFORM_FFT_CALCULATION + equalize_audio(&audiodata); +#endif + // inverse FFT calculation + perform_ifft(audioptr_out1,displayptr1); + } + else + delay; + } + + for(sample_count=0;;)//store the samples in the inputbuffer + { + if (!FFT_Sync) + { + par + { + seq + { + PalAudioInRead(AUDIOIN, &LeftNew, &RightNew); +#if HARDWARE_MULTIPLY + audioptr_in1[sample_count] = LeftNew;//drop 2 LSB's +#else + audioptr_in1[sample_count] = (LeftNew\\2);//drop 2 LSB's +#endif + sample_count++; + if (!sample_count) + { + FFT_Sync = 1; + } + } + seq + { + Output_sample = audioptr_out2[sample_count]; + } + } + } + else + { + delay; + } + } + for(;;) + { + PalAudioOutWrite(AUDIOOUT,(signed OW)(Output_sample @ 0),(signed OW)(Output_sample @ 0)); + } +}//end par +}// end function +#endif + diff --git a/Graphic_Equalizer_Split/src/smartmedia.hcc b/Graphic_Equalizer_Split/src/smartmedia.hcc new file mode 100644 index 0000000..ff405c1 --- /dev/null +++ b/Graphic_Equalizer_Split/src/smartmedia.hcc @@ -0,0 +1,233 @@ +/*! \file smartmedia.hcc + * + * \section generic Here we interface with the SmartMedia card. + * + * \section project Project information. + * Project Graphic Equalizer\n + * \author O.M. Schinagl + * \date 20041110 + * \version 0.1 + * + * \section copyright Copyright + * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved + * + * \section history Change history + * 20041110: O.M. Schinagl\n Initial version + * + ********************************************************************/ + +/******** System Includes *************/ +#include + +#include "pal_master.hch" + +/******** Application Includes ********/ +#include "configuration.hch" +#include "display_shared.hch" +#include "smartmedia_shared.hch" +#include "smartmedia.hch" + +#if HAVE_DEBUG + #include "debug.hch" +#endif + +#include "audio.hch" +#include "mouse_shared.hch" +#include "eventhandler_shared.hch" +#include "display.hch" /* FIXME: temporary include, needs to be moved to 'init' */ + +/*! \fn unsigned 1 smartmedia_init(void); + * \brief We here initialize the Smart Media card and verify wether the + * card is inserted and such. + * + * \return We return 0 on success, 1 on error. + * \retval unsigned 1 + */ +unsigned 1 smartmedia_init(void) { + unsigned 1 retval; + /* + * Firstly we enable both the CPLD and the SmartMedia. + */ + RC200CPLDEnable(); + RC200SmartMediaInit(&retval); + + if (retval) { + RC200SmartMediaReset(&retval); + RC200SmartMediaInit(&retval); + } + + return retval; +} /* --- smartmedia_init() --- */ + + + +/*! \fn void smartmedia_loaddata(skindata_t *skindata); + * \brief We load our memory with skin and help data from the smartmedia. + * + * \param *skindata skindata like boundries and colors of elements. + * + * \return void + * \retval void + */ +void smartmedia_loaddata(skindata_t *skindata) { + /* + * Setup RAM Handle, and determin maximum Data and Address widths + */ + macro expr RAM_BANK0 = PalPL2RAMCT(0); + macro expr DW = PalPL2RAMGetMaxDataWidthCT(); + macro expr AW = PalPL2RAMGetMaxAddressWidthCT(); + + unsigned DW data; + unsigned 27 smartmedia_address, smartmedia_address_mask; + unsigned AW address; + unsigned 8 mask, r, g, b; + unsigned 3 stage; + unsigned 1 result; + + extern ram unsigned 8 presets_default_values[768]; + +#if HAVE_DEBUG + /* + * Print some nice stats about data loading. + */ + print_eol(); + print_hex_value(0); +#endif + /* + * Before we enter our loop to fill our memory with valid data, we have + * to set the startup positions for the SmartMedia. + */ + smartmedia_address = SMARTMEDIA_ADDRESS_SKIN_START; + smartmedia_address_mask = SMARTMEDIA_ADDRESS_SKINMASK_START; + stage = STAGE_LOAD_SKIN; + /* + * We start with the address of the skin, and do the loop until we have + * done the end of the help. + */ + for (address = ADDRESS_SKIN_START; address != (ADDRESS_PRESET_RESET_END +1); address++) { + /* + * Once we are done with the loading of our skin, we need to + * change the smartmedia start addresses. + */ + switch (address) { + case ADDRESS_HELP_START: + smartmedia_address = SMARTMEDIA_ADDRESS_HELP_START; + smartmedia_address_mask = SMARTMEDIA_ADDRESS_HELPMASK_START; + stage = STAGE_LOAD_HELP; + break; + case ADDRESS_GRAPHMASK_START: + smartmedia_address_mask = SMARTMEDIA_ADDRESS_GRAPHMASK_START; + stage = STAGE_LOAD_GRAPH; + break; + case ADDRESS_PRESET_DEMO_START: + smartmedia_address_mask = SMARTMEDIA_ADDRESS_PRESET_DEMO_START; + stage = STAGE_LOAD_PRESET; + break; + case ADDRESS_PRESET_RESET_START: + smartmedia_address_mask = SMARTMEDIA_ADDRESS_PRESET_RESET_START; + stage = STAGE_LOAD_PRESET; + break; + default: + break; + } + + /* + * Before reading our data from the smartmedia we set our + * address pointer to the address from our loop. + */ +#if HAVE_SMARTMEDIA + PalPL2RAMSetWriteAddress(RAM_BANK0, address); +#else + PalPL2RAMSetWriteAddress(RAM_BANK0, 0); +#endif + + /* + * SmartMedia data is read one byte per call. Because we want + * to store the mask + the rgb values in one variable for later + * useage we need to read those 4 bytes from the smartmedia + * before storing it as one. + */ +#if HAVE_SMARTMEDIA + /* + * FIXME: Due to a bug in the DK2 smartmedia libraries we need + * stop reading after each byte with OperationEnd call. This is + * VERY slow and must be changed. + */ + if ((STAGE_LOAD_SKIN == stage) || (STAGE_LOAD_HELP == stage)) { + RC200SmartMediaSetAddress(READ, smartmedia_address); + RC200SmartMediaRead(&r, TRUE); + RC200SmartMediaOperationEnd(&result); + RC200SmartMediaSetAddress(READ, (smartmedia_address +1)); + RC200SmartMediaRead(&g, TRUE); + RC200SmartMediaOperationEnd(&result); + RC200SmartMediaSetAddress(READ, (smartmedia_address +2)); + RC200SmartMediaRead(&b, TRUE); + RC200SmartMediaOperationEnd(&result); + } + RC200SmartMediaSetAddress(READ, smartmedia_address_mask); + RC200SmartMediaRead(&mask, TRUE); + RC200SmartMediaOperationEnd(&result); + + switch (stage) { + case STAGE_LOAD_SKIN: + data = 0 @ mask @ r @ g @ b; + break; + case STAGE_LOAD_HELP: + data = 0 @ mask @ r @ g @ b; + break; + case STAGE_LOAD_GRAPH: + data = (unsigned DW)(0 @ mask) << 24; + break; + case STAGE_LOAD_PRESET: + presets_default_values[(address -ADDRESS_PRESET_DEMO_START) <- 10] = mask; + } + +#else + data = 0x0000ff00; +#endif + /* + * Now that we have gathered all pixel data, store it in ram. + */ + PalPL2RAMWrite(RAM_BANK0, data); + +#if HAVE_DEBUG + /* + * Print some nice stats about data loading. + */ + if (!(address <- 10)) { + print_cr(); + print_hex_value(0 @ (address \\ 11)); + print_string(" / 000001C2 | data: "); + print_hex_value(data <- 32); + } +#endif + + /* + * Finally increase al our indexes approperiatly. + */ + smartmedia_address += 3; + smartmedia_address_mask++; + } + + /* + * This block needs to probably move up into the fore loop where we + * calculate these settings later. + */ + skindata->area_spectrum_top = 200; + skindata->area_spectrum_bottom = 335; + skindata->area_spectrum_left = 77; + skindata->area_spectrum_right = 575; + skindata->area_waveform_top = 46; + skindata->area_waveform_bottom = 118; + skindata->area_waveform_left = 76; + skindata->area_waveform_right = 413; + skindata->area_volume_top = 112; + skindata->area_volume_bottom = 66; + skindata->area_volume_left = 439; + skindata->area_volume_right = 455; + skindata->color_area_volume = PIXEL_VOLUME; + skindata->color_area_waveform = PIXEL_WAVEFORM; +// skindata->color_area_spectrum_top = PIXEL_SPECTRUM; +// skindata->color_area_spectrum_bottom = PIXEL_SPECTRUM; + skindata->color_equalizer = PIXEL_EQUALIZER; +} /* --- smartmedia_loaddata() --- */ -- cgit v0.12