From dec4137e8f6b9d92c9112684e9f0f6cbcdd7dc08 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Mon, 18 Jan 2010 15:37:41 +0100 Subject: [PATCH 001/166] add hwmixvolume Add a tool to control the volume of individual streams on sound cards that use hardware mixing. Signed-off-by: Clemens Ladisch --- .gitignore | 2 + Makefile | 3 +- hwmixvolume/Makefile.am | 11 ++ hwmixvolume/README | 17 +++ hwmixvolume/configure.ac | 6 + hwmixvolume/gitcompile | 10 ++ hwmixvolume/hwmixvolume | 310 +++++++++++++++++++++++++++++++++++++++ 7 files changed, 358 insertions(+), 1 deletion(-) create mode 100644 hwmixvolume/Makefile.am create mode 100644 hwmixvolume/README create mode 100644 hwmixvolume/configure.ac create mode 100644 hwmixvolume/gitcompile create mode 100644 hwmixvolume/hwmixvolume diff --git a/.gitignore b/.gitignore index 98a34f3..cdaa897 100644 --- a/.gitignore +++ b/.gitignore @@ -53,6 +53,8 @@ hdspmixer/src/hdspmixer hdspmixer/configure hdsploader/Makefile hdsploader/configure +hwmixvolume/Makefile +hwmixvolume/configure ld10k1/Makefile ld10k1/compile ld10k1/ld10k1d diff --git a/Makefile b/Makefile index 3668cd4..f237653 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,8 @@ VERSION = 1.0.22 TOP = . SUBDIRS = ac3dec as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ - us428control usx2yloader vxloader echomixer ld10k1 qlo10k1 + us428control usx2yloader vxloader echomixer ld10k1 qlo10k1 \ + hwmixvolume all: @for i in $(SUBDIRS); do \ diff --git a/hwmixvolume/Makefile.am b/hwmixvolume/Makefile.am new file mode 100644 index 0000000..abc7996 --- /dev/null +++ b/hwmixvolume/Makefile.am @@ -0,0 +1,11 @@ +# # Process this file with automake to procude Makefile.in. +bin_SCRIPTS = hwmixvolume +#man_MANS = +EXTRA_DIST = gitcompile +AUTOMAKE_OPTIONS = foreign + +alsa-dist: distdir + @rm -rf ../distdir/hwmixvolume + @mkdir -p ../distdir/hwmixvolume + @cp -RLpv $(distdir)/* ../distdir/hwmixvolume + @rm -rf $(distdir) diff --git a/hwmixvolume/README b/hwmixvolume/README new file mode 100644 index 0000000..96bb0b4 --- /dev/null +++ b/hwmixvolume/README @@ -0,0 +1,17 @@ +hwmixvolume +=========== + +This tool allows you to control the volume of individual streams on sound cards +that use hardware mixing, i.e., those based on the following chips: +* Creative Emu10k1 (SoundBlaster Live!) (driver: snd-emu10k1) +* VIA VT823x southbridge (driver: snd-via82xx) +* Yamaha DS-1 (YMF-724/740/744/754) (driver: snd-ymfpci) + + +This tool requires Python, pygtk, and alsa-pyton 1.0.22 or later. + +It is recommended to use at least Linux kernel 2.6.32 or alsa-driver 1.0.22; +otherwise, the name of the program that is using a stream cannot be shown. + + +Author: Clemens Ladisch diff --git a/hwmixvolume/configure.ac b/hwmixvolume/configure.ac new file mode 100644 index 0000000..ad318ad --- /dev/null +++ b/hwmixvolume/configure.ac @@ -0,0 +1,6 @@ +dnl Process this file with autoconf to produce a configure script. +AC_INIT([hwmixvolume], [0.9]) +AM_INIT_AUTOMAKE +AC_CONFIG_SRCDIR([hwmixvolume]) +AC_PROG_INSTALL +AC_OUTPUT([Makefile]) diff --git a/hwmixvolume/gitcompile b/hwmixvolume/gitcompile new file mode 100644 index 0000000..46977b7 --- /dev/null +++ b/hwmixvolume/gitcompile @@ -0,0 +1,10 @@ +#!/bin/bash + +aclocal $ACLOCAL_FLAGS || exit 1 +automake --foreign --add-missing || exit 1 +autoconf || exit 1 +echo "./configure $@" +./configure $@ || exit 1 +if [ -z "$GITCOMPILE_NO_MAKE" ]; then + make || exit 1 +fi diff --git a/hwmixvolume/hwmixvolume b/hwmixvolume/hwmixvolume new file mode 100644 index 0000000..f25062b --- /dev/null +++ b/hwmixvolume/hwmixvolume @@ -0,0 +1,310 @@ +#!/usr/bin/env python + +# hwmixvolume - ALSA hardware mixer volume control applet +# Copyright (c) 2009-2010 Clemens Ladisch +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +import gobject, gtk +from pyalsa import alsacard, alsahcontrol + +INTF_PCM = alsahcontrol.interface_id['PCM'] +INTF_MIXER = alsahcontrol.interface_id['MIXER'] +TYPE_INTEGER = alsahcontrol.element_type['INTEGER'] +EVENT_VALUE = alsahcontrol.event_mask['VALUE'] +EVENT_INFO = alsahcontrol.event_mask['INFO'] +EVENT_REMOVE = alsahcontrol.event_mask_remove + +class Stream: + def __init__(self, element, parent): + self.element = element + self.element.set_callback(self) + self.parent = parent + self.label = None + self.scales = [] + self.adjustments = [] + self.callback(self.element, EVENT_INFO) + + def destroy(self): + self.deactivate() + + def callback(self, e, mask): + if mask == EVENT_REMOVE: + self.deactivate() + elif (mask & EVENT_INFO) != 0: + info = alsahcontrol.Info(self.element) + if info.is_inactive: + self.deactivate() + else: + self.activate() + elif (mask & EVENT_VALUE) != 0: + self.update_scales_from_ctl() + + def activate(self): + if self.label: + return + info = alsahcontrol.Info(self.element) + value = alsahcontrol.Value(self.element) + value.read() + values = value.get_tuple(TYPE_INTEGER, info.count) + self.label = gtk.Label(self.get_label(info)) + self.label.set_single_line_mode(True) + self.parent.scales_vbox.pack_start(self.label, expand=False) + for i in range(info.count): + adj = gtk.Adjustment(value=values[i], + lower=info.min, upper=info.max, + step_incr=1, + page_incr=(info.max-info.min+1)/8) + adj.connect('value-changed', self.update_ctl_from_scale, i) + scale = gtk.HScale(adj) + scale.set_draw_value(False) + self.parent.scales_vbox.pack_start(scale, expand=False) + self.scales.append(scale) + self.adjustments.append(adj) + self.parent.scales_vbox.show_all() + self.parent.update_msg_label() + + def deactivate(self): + if not self.label: + return + self.label.destroy() + for s in self.scales: + s.destroy() + self.label = None + self.scales = [] + self.adjustments = [] + self.parent.update_msg_label() + + def update_scales_from_ctl(self): + if not self.label: + return + count = len(self.adjustments) + value = alsahcontrol.Value(self.element) + value.read() + values = value.get_tuple(TYPE_INTEGER, count) + for i in range(count): + self.adjustments[i].set_value(values[i]) + + def update_ctl_from_scale(self, adj, index): + scale_value = adj.get_value() + value_to_set = int(round(adj.get_value())) + count = len(self.adjustments) + value = alsahcontrol.Value(self.element) + if self.parent.lock_check.get_active(): + values = [value_to_set for i in range(count)] + else: + value.read() + values = value.get_array(TYPE_INTEGER, count) + values[index] = value_to_set + value.set_array(TYPE_INTEGER, values) + value.write() + if value_to_set != scale_value: + adj.set_value(value_to_set) + + def get_label(self, info): + pid = self.get_pid(info) + if pid: + cmdline = self.get_pid_cmdline(pid) + if cmdline: + return cmdline + else: + return "PID %d" % pid + else: + name = info.name + if name[-7:] == " Volume": + name = name[:-7] + if name[-9:] == " Playback": + name = name[:-9] + return name + + def get_pid(self, info): + card = self.parent.current_card + device = info.device + subdevice = info.subdevice + if subdevice == 0: + subdevice = info.index + filename = "/proc/asound/card%d/pcm%dp/sub%d/status" % (card, device, subdevice) + try: + f = open(filename, "r") + except IOError: + return None + try: + for line in f.readlines(): + if line[:9] == "owner_pid": + return int(line.split(':')[1].strip()) + finally: + f.close() + return None + + def get_pid_cmdline(self, pid): + try: + f = open("/proc/%d/cmdline" % pid, "r") + except IOError: + return None + try: + cmdline = f.read() + finally: + f.close() + return cmdline.replace('\x00', ' ').strip() + +class MixerWindow(gtk.Window): + card_numbers = alsacard.card_list() + current_card = -1 + hcontrol = None + scales_vbox = None + msg_label = None + streams = [] + hctl_sources = [] + + def __init__(self): + gtk.Window.__init__(self) + self.connect('destroy', lambda w: gtk.main_quit()) + self.set_title("Hardware Mixer Volumes") + + vbox = gtk.VBox() + self.add(vbox) + + hbox = gtk.HBox() + vbox.pack_start(hbox, expand=False) + + label = gtk.Label("_Sound Card: ") + label.set_use_underline(True) + hbox.pack_start(label, expand=False) + + combo = gtk.combo_box_new_text() + for i in self.card_numbers: + str = "%d: %s" % (i, alsacard.card_get_name(i)) + combo.append_text(str) + if len(self.card_numbers) > 0: + combo.set_active(0) + combo.connect('changed', lambda c: self.change_card(self.card_numbers[combo.get_active()])) + hbox.pack_start(combo) + label.set_mnemonic_widget(combo) + + self.lock_check = gtk.CheckButton(label="_Lock Channels") + self.lock_check.set_active(True) + vbox.pack_start(self.lock_check, expand=False) + + scrollwin = gtk.ScrolledWindow() + scrollwin.set_policy(hscrollbar_policy=gtk.POLICY_NEVER, vscrollbar_policy=gtk.POLICY_AUTOMATIC) + scrollwin.set_shadow_type(gtk.SHADOW_NONE) + vbox.pack_start(scrollwin) + + self.scales_vbox = gtk.VBox() + scrollwin.add_with_viewport(self.scales_vbox) + + label = gtk.Label() + label.set_single_line_mode(True) + line_height = label.size_request()[1] + label.destroy() + scale = gtk.HScale() + scale.set_draw_value(False) + line_height += scale.size_request()[1] + scale.destroy() + # always have space for at least four sliders + scrollwin.set_size_request(width=-1, height=line_height*4+4) + + # TODO: select the default card or the first card with stream controls + if len(self.card_numbers) > 0: + self.change_card(self.card_numbers[0]) + self.update_msg_label() + + self.show_all() + + def change_card(self, cardnum): + for s in self.hctl_sources: + gobject.source_remove(s) + self.hctl_sources = [] + + self.hcontrol = self.open_hcontrol_for_card(cardnum) + + for s in self.streams: + s.destroy() + self.streams = [] + + self.current_card = cardnum + + if not self.hcontrol: + self.update_msg_label() + return + + for id in self.hcontrol.list(): + if not self.is_stream_elem(id): + continue + elem = alsahcontrol.Element(self.hcontrol, id[0]) + info = alsahcontrol.Info(elem) + if not self.is_stream_info(info): + continue + stream = Stream(elem, self) + self.streams.append(stream) + + for fd,condition in self.hcontrol.poll_fds: + self.hctl_sources.append(gobject.io_add_watch(fd, condition, self.hctl_io_callback)) + + self.update_msg_label() + + self.scales_vbox.show_all() + + def update_msg_label(self): + needs_msg = len(self.scales_vbox.get_children()) < 2 + has_msg = self.msg_label + if has_msg and not needs_msg: + self.msg_label.destroy() + self.msg_label = None + elif needs_msg: + if len(self.streams) > 0: + msg = "There are no open streams." + else: + msg = "This card does not have stream controls." + if not has_msg: + self.msg_label = gtk.Label(msg) + self.scales_vbox.pack_start(self.msg_label) + self.scales_vbox.show_all() + elif self.msg_label.get_text() != msg: + self.msg_label.set_text(msg) + + def open_hcontrol_for_card(self, cardnum): + devname = "hw:CARD=" + str(cardnum) + try: + hc = alsahcontrol.HControl(name=devname, + mode=alsahcontrol.open_mode['NONBLOCK']) + except: + # TODO: alsa error msg + dlg = gtk.MessageDialog(self, + gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, + gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, + "Cannot open sound card control device.") + dlg.run() + dlg.destroy() + return None + return hc + + def is_stream_elem(self, id): + return ((id[1] == INTF_PCM and + id[4] in ("PCM Playback Volume", "EMU10K1 PCM Volume")) or + (id[1] == INTF_MIXER and + id[4] == "VIA DXS Playback Volume")) + + def is_stream_info(self, info): + return info.is_readable and info.is_writable and info.type == TYPE_INTEGER + + def hctl_io_callback(self, source, condition): + self.hcontrol.handle_events() + return True + +def main(): + MixerWindow() + gtk.main() + +main() + From b62f88e176d5fc6a3bf1d6a6ddeae62b3770146d Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Mon, 18 Jan 2010 15:53:35 +0100 Subject: [PATCH 002/166] hwmixvolume: make scripts executable The gitcompile script is easier to use if it's executable. Signed-off-by: Clemens Ladisch --- hwmixvolume/gitcompile | 0 hwmixvolume/hwmixvolume | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 hwmixvolume/gitcompile mode change 100644 => 100755 hwmixvolume/hwmixvolume diff --git a/hwmixvolume/gitcompile b/hwmixvolume/gitcompile old mode 100644 new mode 100755 diff --git a/hwmixvolume/hwmixvolume b/hwmixvolume/hwmixvolume old mode 100644 new mode 100755 From 32527a59307640fc5251becc726eb0da7d34f9c8 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Wed, 7 Apr 2010 09:30:00 +0200 Subject: [PATCH 003/166] Fix hwmixvolume gitcompile script (missing files) Signed-off-by: Jaroslav Kysela --- hwmixvolume/gitcompile | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/hwmixvolume/gitcompile b/hwmixvolume/gitcompile index 46977b7..a4d38f4 100755 --- a/hwmixvolume/gitcompile +++ b/hwmixvolume/gitcompile @@ -1,5 +1,21 @@ #!/bin/bash +if test -z "$AUTOMAKE_DIR" ; then + if test -d /usr/local/share/automake; then + AUTOMAKE_DIR=/usr/local/share/automake + fi + if test -d /usr/share/automake; then + AUTOMAKE_DIR="/usr/share/automake" + fi + if test -z "$AUTOMAKE_DIR" ; then + AUTOMAKE_DIR=/usr/share/`ls /usr/share | grep automake | tail -n 1` + fi +fi + +for f in install-sh mkinstalldirs missing; do + cp -av $AUTOMAKE_DIR/$f . || exit 1 +done + aclocal $ACLOCAL_FLAGS || exit 1 automake --foreign --add-missing || exit 1 autoconf || exit 1 From 2561d2fd2de251bd5f9ef77d22b3dfa0971d5942 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Wed, 7 Apr 2010 13:53:41 +0200 Subject: [PATCH 004/166] hwmixvolume: add hwmixvolume to EXTRA_DIST Signed-off-by: Jaroslav Kysela --- hwmixvolume/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hwmixvolume/Makefile.am b/hwmixvolume/Makefile.am index abc7996..38690eb 100644 --- a/hwmixvolume/Makefile.am +++ b/hwmixvolume/Makefile.am @@ -1,7 +1,7 @@ # # Process this file with automake to procude Makefile.in. bin_SCRIPTS = hwmixvolume #man_MANS = -EXTRA_DIST = gitcompile +EXTRA_DIST = gitcompile hwmixvolume AUTOMAKE_OPTIONS = foreign alsa-dist: distdir From 0de8b19562a28824bc61add0fd06892416e6d33b Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Fri, 16 Apr 2010 13:11:09 +0200 Subject: [PATCH 005/166] Release v1.0.23 Signed-off-by: Jaroslav Kysela --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index f237653..546a47b 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION = 1.0.22 +VERSION = 1.0.23 TOP = . SUBDIRS = ac3dec as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ From 6af304794723756865caee73593f13bd11a63450 Mon Sep 17 00:00:00 2001 From: Georg Rudolph Date: Sat, 15 May 2010 09:37:34 +0200 Subject: [PATCH 006/166] hdspmixer: Fix buffer overflow A one off string buffer overflow fixed by handling it properly with string stream. Signed-off-by: Georg Rudolph Signed-off-by: Jaroslav Kysela --- hdspmixer/src/HDSPMixerIOMixer.cxx | 6 +++--- hdspmixer/src/HDSPMixerIOMixer.h | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/hdspmixer/src/HDSPMixerIOMixer.cxx b/hdspmixer/src/HDSPMixerIOMixer.cxx index a431de5..a81f4a2 100644 --- a/hdspmixer/src/HDSPMixerIOMixer.cxx +++ b/hdspmixer/src/HDSPMixerIOMixer.cxx @@ -25,9 +25,9 @@ HDSPMixerIOMixer::HDSPMixerIOMixer(int x, int y, int w, int h, int ch, int type) { mixer_type = type; if (type) { - sprintf(channel_name, "Out %d", ch); + channel_name << "Out " << ch; } else { - sprintf(channel_name, "In %d", ch); + channel_name << "In " << ch; } channel_num = ch; if (channel_num%2) { @@ -73,7 +73,7 @@ void HDSPMixerIOMixer::draw() draw_background(); fl_color(FL_BLACK); fl_font(FL_HELVETICA, 8); - fl_draw(channel_name, x()+4, y()+225, 27, 9, FL_ALIGN_CENTER); + fl_draw(channel_name.str().c_str(), x()+4, y()+225, 27, 9, FL_ALIGN_CENTER); for (int i=children(); i--;) { Fl_Widget& o = **a++; draw_child(o); diff --git a/hdspmixer/src/HDSPMixerIOMixer.h b/hdspmixer/src/HDSPMixerIOMixer.h index 6286daf..a9a35de 100644 --- a/hdspmixer/src/HDSPMixerIOMixer.h +++ b/hdspmixer/src/HDSPMixerIOMixer.h @@ -36,6 +36,7 @@ #include "HDSPMixerStripData.h" #include "HDSPMixerMeter.h" #include "pixmaps.h" +#include class HDSPMixerWindow; class HDSPMixerSelector; @@ -52,7 +53,7 @@ class HDSPMixerIOMixer:public Fl_Group private: char **p_iomixer_xpm; int channel_num, relative_num, mixer_type; - char channel_name[6]; + std::stringstream channel_name; void update_child(Fl_Widget &widget); public: HDSPMixerStripData *data[3][3][8]; /* data[card][mode(ss/ds/qs)][preset number] */ From e24e56795ea57e3dd7da45063ab71f04e231192d Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Sun, 9 Jan 2011 19:42:59 +0100 Subject: [PATCH 007/166] Add support for RME MADI, RayDAT and AIO Merged the work by Florian Faber that's distributed separately as hdspmixer64. Code taken from http://wiki.linuxproaudio.org/index.php/App:hdspmixer_64 Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerAboutText.cxx | 2 +- hdspmixer/src/HDSPMixerCard.cxx | 266 ++++++++++++++++++++------- hdspmixer/src/HDSPMixerCard.h | 12 +- hdspmixer/src/HDSPMixerFader.cxx | 2 +- hdspmixer/src/HDSPMixerFader.h | 2 +- hdspmixer/src/HDSPMixerInputs.h | 2 +- hdspmixer/src/HDSPMixerMaster.cxx | 8 +- hdspmixer/src/HDSPMixerMuteSolo.cxx | 5 +- hdspmixer/src/HDSPMixerOutput.cxx | 163 +++++++++++++++- hdspmixer/src/HDSPMixerOutput.h | 2 +- hdspmixer/src/HDSPMixerOutputs.h | 2 +- hdspmixer/src/HDSPMixerPan.cxx | 2 +- hdspmixer/src/HDSPMixerPan.h | 3 +- hdspmixer/src/HDSPMixerPlaybacks.h | 2 +- hdspmixer/src/HDSPMixerPresets.cxx | 13 +- hdspmixer/src/HDSPMixerSelector.cxx | 126 ++++++++++++- hdspmixer/src/HDSPMixerStripData.h | 6 +- hdspmixer/src/HDSPMixerWindow.cxx | 182 +++++++++++------- hdspmixer/src/defines.h | 8 +- hdspmixer/src/hdspmixer.cxx | 30 +-- 20 files changed, 651 insertions(+), 187 deletions(-) diff --git a/hdspmixer/src/HDSPMixerAboutText.cxx b/hdspmixer/src/HDSPMixerAboutText.cxx index e0168ed..d628d00 100644 --- a/hdspmixer/src/HDSPMixerAboutText.cxx +++ b/hdspmixer/src/HDSPMixerAboutText.cxx @@ -23,7 +23,7 @@ HDSPMixerAboutText::HDSPMixerAboutText(int x, int y, int w, int h):Fl_Widget(x, y, w, h, "About Text") { - text = "HDSPMixer " VERSION " (C) 2003 Thomas Charbonnel \n\n" + text = "HDSPMixer " VERSION " (C) 2003 Thomas Charbonnel \n (C) 2009 Florian Faber \n (C) 2011 Adrian Knoth \n\n" "Bitmaps by Ralf Brunner\n" "Many thanks to Martin Björnsen, Matthias Carstens and Paul Davis\n\n" "This Program is free software; you can redistribute it and/or modify\n" diff --git a/hdspmixer/src/HDSPMixerCard.cxx b/hdspmixer/src/HDSPMixerCard.cxx index 38548f1..5f923ac 100644 --- a/hdspmixer/src/HDSPMixerCard.cxx +++ b/hdspmixer/src/HDSPMixerCard.cxx @@ -45,6 +45,66 @@ static char channel_map_ds[26] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; +static char dest_map_madi_ss[32] = { + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, + 48, 50, 52, 54, 56, 58, 60, 62 +}; + + +static char dest_map_raydat_ss[18] = { + 4, 6, 8, 10, + 12, 14, 16, 18, + 20, 22, 24, 26, + 28, 30, 32, 34, + 0, 2 +}; + +static char dest_map_raydat_ds[10] = { + 4, 6, + 8, 10, + 12, 14, + 16, 18, + 0, 2 +}; + +static char dest_map_raydat_qs[6] = { + 4, + 6, + 8, + 10, + 0, 2 +}; + + + +static char dest_map_aio_ss[8] = { + 0, // Analogue + 8, // AES + 10, // SPDIF + 12, 14, 16, 18, // ADAT + 6 // Phones +}; + + +static char dest_map_aio_ds[6] = { + 0, // Analogue + 8, // AES + 10, // SPDIF + 12, 16, // ADAT + 6 // Phones +}; + +static char dest_map_aio_qs[5] = { + 0, // Analogue + 8, // AES + 10, // SPDIF + 12, // ADAT + 6 // Phone +}; + + static char dest_map_mf_ss[10] = { 0, 2, 4, 6, 16, 18, 20, 22, 24, 26 }; @@ -181,8 +241,10 @@ int HDSPMixerCard::getSpeed() snd_ctl_elem_value_t *elemval; snd_ctl_elem_id_t * elemid; snd_ctl_t *handle; + snd_ctl_elem_value_alloca(&elemval); snd_ctl_elem_id_alloca(&elemid); + if ((err = snd_ctl_open(&handle, name, SND_CTL_NONBLOCK)) < 0) { fprintf(stderr, "Error accessing ctl interface on card %s\n.", name); return -1; @@ -198,6 +260,7 @@ int HDSPMixerCard::getSpeed() } val = snd_ctl_elem_value_get_enumerated(elemval, 0); snd_ctl_close(handle); + switch (val) { case 0: /* Autosync mode : We need to determine sample rate */ @@ -225,7 +288,7 @@ int HDSPMixerCard::getSpeed() return 0; } -HDSPMixerCard::HDSPMixerCard(HDSP_IO_Type cardtype, int id) +HDSPMixerCard::HDSPMixerCard(int cardtype, int id) { type = cardtype; card_id = id; @@ -238,6 +301,7 @@ HDSPMixerCard::HDSPMixerCard(HDSP_IO_Type cardtype, int id) } else { playbacks_offset = 26; } + speed_mode = getSpeed(); if (speed_mode < 0) { fprintf(stderr, "Error trying to determine speed mode for card %s, exiting.\n", name); @@ -271,18 +335,18 @@ void HDSPMixerCard::adjustSettings() { if (type == Multiface) { switch (speed_mode) { case 0: - channels = 18; - channel_map = channel_map_mf_ss; + channels_input = 18; + channels_playback = 20; + channel_map_input = channel_map_playback = channel_map_mf_ss; dest_map = dest_map_mf_ss; - meter_map = channel_map_mf_ss; - lineouts = 2; + meter_map_input = meter_map_playback = channel_map_mf_ss; break; case 1: - channels = 14; - channel_map = meter_map_ds; + channels_input = 14; + channels_playback = 16; + channel_map_input = channel_map_playback = meter_map_ds; dest_map = dest_map_ds; - meter_map = meter_map_ds; - lineouts = 2; + meter_map_input = meter_map_playback = meter_map_ds; break; case 2: /* should never happen */ @@ -291,18 +355,16 @@ void HDSPMixerCard::adjustSettings() { } else if (type == Digiface) { switch (speed_mode) { case 0: - channels = 26; - channel_map = channel_map_df_ss; + channels_input = channels_playback = 26; + channel_map_input = channel_map_playback = channel_map_df_ss; dest_map = dest_map_df_ss; - meter_map = channel_map_df_ss; - lineouts = 2; + meter_map_input = meter_map_playback = channel_map_df_ss; break; case 1: - channels = 14; - channel_map = meter_map_ds; + channels_input = channels_playback = 14; + channel_map_input = channel_map_playback = meter_map_ds; dest_map = dest_map_ds; - meter_map = meter_map_ds; - lineouts = 2; + meter_map_input = meter_map_playback = meter_map_ds; break; case 2: /* should never happen */ @@ -311,18 +373,16 @@ void HDSPMixerCard::adjustSettings() { } else if (type == H9652) { switch (speed_mode) { case 0: - channels = 26; - channel_map = channel_map_df_ss; + channels_input = channels_playback = 26; + channel_map_input = channel_map_playback = channel_map_df_ss; dest_map = dest_map_h9652_ss; - meter_map = channel_map_df_ss; - lineouts = 0; + meter_map_input = meter_map_playback = channel_map_df_ss; break; case 1: - channels = 14; - channel_map = channel_map_ds; + channels_input = channels_playback = 14; + channel_map_input = channel_map_playback = channel_map_ds; dest_map = dest_map_h9652_ds; - meter_map = meter_map_ds; - lineouts = 0; + meter_map_input = meter_map_playback = meter_map_ds; break; case 2: /* should never happen */ @@ -331,29 +391,111 @@ void HDSPMixerCard::adjustSettings() { } else if (type == H9632) { switch (speed_mode) { case 0: - channels = 12 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); - channel_map = channel_map_h9632_ss; + channels_input = channels_playback = 12 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); + channel_map_input = channel_map_playback = channel_map_h9632_ss; dest_map = dest_map_h9632_ss; - meter_map = channel_map_h9632_ss; - lineouts = 0; + meter_map_input = meter_map_playback = channel_map_h9632_ss; break; case 1: - channels = 8 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); - channel_map = channel_map_h9632_ds; + channels_input = channels_playback = 8 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); + channel_map_input = channel_map_playback = channel_map_h9632_ds; dest_map = dest_map_h9632_ds; - meter_map = channel_map_h9632_ds; - lineouts = 0; + meter_map_input = meter_map_playback = channel_map_h9632_ds; break; case 2: - channels = 4 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); - channel_map = channel_map_h9632_qs; + channels_input = channels_playback = 4 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); + channel_map_input = channel_map_playback = channel_map_h9632_qs; dest_map = dest_map_h9632_qs; - meter_map = channel_map_h9632_qs; - lineouts = 0; + meter_map_input = meter_map_playback = channel_map_h9632_qs; break; } + } else if (HDSPeMADI == type) { + playbacks_offset = 64; + + switch (speed_mode) { + case 0: // SS + channels_input = channels_playback = 64; + channel_map_input = channel_map_playback = channel_map_unity_ss; + dest_map = dest_map_madi_ss; + meter_map_input = meter_map_playback = channel_map_unity_ss; + break; + case 1: // DS + channels_input = channels_playback = 32; + channel_map_input = channel_map_playback = channel_map_unity_ss; + dest_map = dest_map_madi_ss; + meter_map_input = meter_map_playback = channel_map_unity_ss; + break; + case 2: // QS + channels_input = channels_playback = 16; + channel_map_input = channel_map_playback = channel_map_unity_ss; + dest_map = dest_map_madi_ss; + meter_map_input = meter_map_playback = channel_map_unity_ss; + break; + } + + } else if (HDSPeAIO == type) { + playbacks_offset = 64; + + switch (speed_mode) { + case 0: // SS + channels_input = 14; + channels_playback = 16; + channel_map_input = channel_map_aio_in_ss; + channel_map_playback = channel_map_aio_out_ss; + dest_map = dest_map_aio_ss; + meter_map_input = channel_map_aio_in_ss; + meter_map_playback = channel_map_aio_out_ss; + break; + case 1: // DS + channels_input = 10; + channels_playback = 12; + channel_map_input = channel_map_aio_in_ds; + channel_map_playback = channel_map_aio_out_ds; + dest_map = dest_map_aio_ds; + meter_map_input = channel_map_aio_in_ds; + meter_map_playback = channel_map_aio_out_ds; + break; + case 2: // QS + channels_input = 8; + channels_playback =10; + channel_map_input = channel_map_aio_in_qs; + channel_map_playback = channel_map_aio_out_qs; + dest_map = dest_map_aio_qs; + meter_map_input = channel_map_aio_in_qs; + meter_map_playback = channel_map_aio_out_qs; + break; + } + + } else if (HDSPeRayDAT == type) { + playbacks_offset = 64; + + switch (speed_mode) { + case 0: // SS + channels_input = 36; + channels_playback = 36; + channel_map_input = channel_map_playback = channel_map_raydat_ss; + dest_map = dest_map_raydat_ss; + meter_map_input = meter_map_playback = channel_map_raydat_ss; + break; + case 1: // DS + channels_input = 20; + channels_playback = 20; + channel_map_input = channel_map_playback = channel_map_raydat_ds; + dest_map = dest_map_raydat_ds; + meter_map_input = meter_map_playback = channel_map_raydat_ds; + break; + case 2: // QS + channels_input = 12; + channels_playback =12; + channel_map_input = channel_map_playback = channel_map_raydat_qs; + dest_map = dest_map_raydat_qs; + meter_map_input = meter_map_playback = channel_map_raydat_qs; + break; + } + } - window_width = (channels+2)*STRIP_WIDTH; + + window_width = (channels_playback+2)*STRIP_WIDTH; window_height = FULLSTRIP_HEIGHT*2+SMALLSTRIP_HEIGHT+MENU_HEIGHT; } @@ -363,28 +505,28 @@ void HDSPMixerCard::setMode(int mode) adjustSettings(); actualizeStrips(); - for (int i = 0; i < channels; ++i) { - basew->inputs->strips[i]->targets->setLabels(); - basew->playbacks->strips[i]->targets->setLabels(); - basew->outputs->strips[i]->setLabels(); + for (int i = 0; i < channels_input; ++i) { + basew->inputs->strips[i]->targets->setLabels(); } - for (int i = channels; i < channels+lineouts; ++i) { - basew->outputs->strips[i]->setLabels(); + for (int i = 0; i < channels_playback; ++i) { + basew->playbacks->strips[i]->targets->setLabels(); + basew->outputs->strips[i]->setLabels(); } + if (h9632_aeb.aebo && !h9632_aeb.aebi) { - basew->inputs->empty_aebi[0]->position(STRIP_WIDTH*(channels-4), basew->inputs->empty_aebi[0]->y()); - basew->inputs->empty_aebi[1]->position(STRIP_WIDTH*(channels-2), basew->inputs->empty_aebi[1]->y()); + basew->inputs->empty_aebi[0]->position(STRIP_WIDTH*(channels_input-4), basew->inputs->empty_aebi[0]->y()); + basew->inputs->empty_aebi[1]->position(STRIP_WIDTH*(channels_input-2), basew->inputs->empty_aebi[1]->y()); } else if (h9632_aeb.aebi && !h9632_aeb.aebo) { - basew->playbacks->empty_aebo[0]->position(STRIP_WIDTH*(channels-4), basew->playbacks->empty_aebo[0]->y()); - basew->playbacks->empty_aebo[1]->position(STRIP_WIDTH*(channels-2), basew->playbacks->empty_aebo[1]->y()); - basew->outputs->empty_aebo[0]->position(STRIP_WIDTH*(channels-4), basew->outputs->empty_aebo[0]->y()); - basew->outputs->empty_aebo[1]->position(STRIP_WIDTH*(channels-2), basew->outputs->empty_aebo[1]->y()); + basew->playbacks->empty_aebo[0]->position(STRIP_WIDTH*(channels_playback-4), basew->playbacks->empty_aebo[0]->y()); + basew->playbacks->empty_aebo[1]->position(STRIP_WIDTH*(channels_playback-2), basew->playbacks->empty_aebo[1]->y()); + basew->outputs->empty_aebo[0]->position(STRIP_WIDTH*(channels_playback-4), basew->outputs->empty_aebo[0]->y()); + basew->outputs->empty_aebo[1]->position(STRIP_WIDTH*(channels_playback-2), basew->outputs->empty_aebo[1]->y()); } - basew->inputs->buttons->position(STRIP_WIDTH*channels, basew->inputs->buttons->y()); + basew->inputs->buttons->position(STRIP_WIDTH*channels_input, basew->inputs->buttons->y()); basew->inputs->init_sizes(); - basew->playbacks->empty->position(STRIP_WIDTH*channels, basew->playbacks->empty->y()); + basew->playbacks->empty->position(STRIP_WIDTH*channels_playback, basew->playbacks->empty->y()); basew->playbacks->init_sizes(); - basew->outputs->empty->position(STRIP_WIDTH*(channels+lineouts), basew->outputs->empty->y()); + basew->outputs->empty->position(STRIP_WIDTH*(channels_playback), basew->outputs->empty->y()); basew->outputs->init_sizes(); basew->inputs->size(window_width, basew->inputs->h()); basew->playbacks->size(window_width, basew->playbacks->h()); @@ -401,30 +543,26 @@ void HDSPMixerCard::setMode(int mode) void HDSPMixerCard::actualizeStrips() { for (int i = 0; i < HDSP_MAX_CHANNELS; ++i) { - if (i < channels) { + if (i < channels_input) { basew->inputs->strips[i]->show(); + } else { + basew->inputs->strips[i]->hide(); + } + if (i < channels_playback) { basew->playbacks->strips[i]->show(); basew->outputs->strips[i]->show(); } else { - basew->inputs->strips[i]->hide(); basew->playbacks->strips[i]->hide(); basew->outputs->strips[i]->hide(); } } - for (int i = channels; i < channels+2; ++i) { - if (i < channels+lineouts) { - basew->outputs->strips[i]->show(); - } else { - basew->outputs->strips[i]->hide(); - } - } if (h9632_aeb.aebi && !h9632_aeb.aebo) { for (int i = 0; i < 2; ++i) { basew->inputs->empty_aebi[i]->hide(); basew->playbacks->empty_aebo[i]->show(); basew->outputs->empty_aebo[i]->show(); } - for (int i = channels-4; i < channels; ++i) { + for (int i = channels_playback-4; i < channels_playback; ++i) { basew->playbacks->strips[i]->hide(); basew->outputs->strips[i]->hide(); } @@ -434,7 +572,7 @@ void HDSPMixerCard::actualizeStrips() basew->playbacks->empty_aebo[i]->hide(); basew->outputs->empty_aebo[i]->hide(); } - for (int i = channels-4; i < channels; ++i) { + for (int i = channels_input-4; i < channels_input; ++i) { basew->inputs->strips[i]->hide(); } } else { diff --git a/hdspmixer/src/HDSPMixerCard.h b/hdspmixer/src/HDSPMixerCard.h index a8ce108..9303d21 100644 --- a/hdspmixer/src/HDSPMixerCard.h +++ b/hdspmixer/src/HDSPMixerCard.h @@ -26,6 +26,7 @@ #include #include #include +#include #include "defines.h" #include "HDSPMixerWindow.h" @@ -36,15 +37,16 @@ class HDSPMixerCard private: snd_ctl_t *cb_handle; snd_async_handler_t *cb_handler; + public: HDSPMixerWindow *basew; char name[6]; - HDSPMixerCard(HDSP_IO_Type cardtype, int id); - int channels, lineouts, window_width, window_height, card_id; - HDSP_IO_Type type; - char *channel_map; + HDSPMixerCard(int cardtype, int id); + int channels_input, channels_playback, window_width, window_height, card_id; + int type; + char *channel_map_input, *channel_map_playback; char *dest_map; - char *meter_map; + char *meter_map_input, *meter_map_playback; int speed_mode; int playbacks_offset; void setMode(int mode); diff --git a/hdspmixer/src/HDSPMixerFader.cxx b/hdspmixer/src/HDSPMixerFader.cxx index 0441c51..a7f5015 100644 --- a/hdspmixer/src/HDSPMixerFader.cxx +++ b/hdspmixer/src/HDSPMixerFader.cxx @@ -31,7 +31,7 @@ HDSPMixerFader::HDSPMixerFader(int x, int y, double r, int id, int src):Fl_Widge ref = r; basew = (HDSPMixerWindow *)window(); anchor = lastpos = lasty = drag = shift_orig = y_orig = 0; - for (int i = 0; i < 14; i++) { + for (int i = 0; i < HDSP_MAX_DEST; i++) { pos[i] = 0; } } diff --git a/hdspmixer/src/HDSPMixerFader.h b/hdspmixer/src/HDSPMixerFader.h index 3090dfa..9a99d14 100644 --- a/hdspmixer/src/HDSPMixerFader.h +++ b/hdspmixer/src/HDSPMixerFader.h @@ -49,7 +49,7 @@ public: int posToInt(int p); int non_submix_dest; int dest; - int pos[14]; + int pos[HDSP_MAX_DEST]; HDSPMixerWindow *basew; HDSPMixerFader *relative; HDSPMixerGain *gain; diff --git a/hdspmixer/src/HDSPMixerInputs.h b/hdspmixer/src/HDSPMixerInputs.h index 361b1da..a6c1740 100644 --- a/hdspmixer/src/HDSPMixerInputs.h +++ b/hdspmixer/src/HDSPMixerInputs.h @@ -35,7 +35,7 @@ class HDSPMixerInputs:public Fl_Group { public: HDSPMixerButtons *buttons; - HDSPMixerIOMixer *strips[26]; + HDSPMixerIOMixer *strips[HDSP_MAX_CHANNELS]; HDSPMixerInputs(int x, int y, int w, int h, int nchannels); HDSPMixerEmpty *empty_aebi[2]; }; diff --git a/hdspmixer/src/HDSPMixerMaster.cxx b/hdspmixer/src/HDSPMixerMaster.cxx index 9018856..77c4a28 100644 --- a/hdspmixer/src/HDSPMixerMaster.cxx +++ b/hdspmixer/src/HDSPMixerMaster.cxx @@ -61,8 +61,10 @@ int HDSPMixerMaster::handle(int e) } else { mute = 1; } - for (int i = 0; i < basew->cards[basew->current_card]->channels; i++) { + for (int i = 0; i < basew->cards[basew->current_card]->channels_input; i++) { basew->inputs->strips[i]->mutesolo->redraw(); + } + for (int i = 0; i < basew->cards[basew->current_card]->channels_playback; i++) { basew->playbacks->strips[i]->mutesolo->redraw(); } basew->refreshMixer(); @@ -76,8 +78,10 @@ int HDSPMixerMaster::handle(int e) } else { solo = 1; } - for (int i = 0; i < basew->cards[basew->current_card]->channels; i++) { + for (int i = 0; i < basew->cards[basew->current_card]->channels_input; i++) { basew->inputs->strips[i]->mutesolo->redraw(); + } + for (int i = 0; i < basew->cards[basew->current_card]->channels_playback; i++) { basew->playbacks->strips[i]->mutesolo->redraw(); } basew->refreshMixer(); diff --git a/hdspmixer/src/HDSPMixerMuteSolo.cxx b/hdspmixer/src/HDSPMixerMuteSolo.cxx index 3e738ca..3dcd1e6 100644 --- a/hdspmixer/src/HDSPMixerMuteSolo.cxx +++ b/hdspmixer/src/HDSPMixerMuteSolo.cxx @@ -129,8 +129,11 @@ int HDSPMixerMuteSolo::handle(int e) void HDSPMixerMuteSolo::redraw_all() { - for (int i = 0; i < (basew->cards[basew->current_card]->channels); ++i) { + for (int i = 0; i < (basew->cards[basew->current_card]->channels_input); ++i) { basew->inputs->strips[i]->mutesolo->redraw(); + } + + for (int i = 0; i < (basew->cards[basew->current_card]->channels_playback); ++i) { basew->playbacks->strips[i]->mutesolo->redraw(); } } diff --git a/hdspmixer/src/HDSPMixerOutput.cxx b/hdspmixer/src/HDSPMixerOutput.cxx index 0f70eca..9dc5457 100644 --- a/hdspmixer/src/HDSPMixerOutput.cxx +++ b/hdspmixer/src/HDSPMixerOutput.cxx @@ -21,6 +21,106 @@ #pragma implementation #include "HDSPMixerOutput.h" +static char *labels_madi_ss[64] = { + "1", "2", "3", "4", "5", "6", "7", "8", + "9", "10", "11", "12", "13", "14", "15", "16", + "17", "18", "19", "20", "21", "22", "23", "24", + "25", "26", "27", "28", "29", "30", "31", "32", + "33", "34", "35", "36", "37", "38", "39", "40", + "41", "42", "43", "44", "45", "46", "47", "48", + "49", "50", "51", "52", "53", "54", "55", "56", + "57", "58", "59", "60", "61", "62", "63", "64" +}; + +static char *labels_madi_ds[64] = { + "1", "2", "3", "4", "5", "6", "7", "8", + "9", "10", "11", "12", "13", "14", "15", "16", + "17", "18", "19", "20", "21", "22", "23", "24", + "25", "26", "27", "28", "29", "30", "31", "32", +}; + +static char *labels_madi_qs[16] = { + "1", "2", "3", "4", "5", "6", "7", "8", + "9", "10", "11", "12", "13", "14", "15", "16", +}; + + +static char *labels_raydat_ss[36] = { + "A1.1", "A1.2", "A1.3", "A1.4", "A1.5", "A1.6", "A1.7", "A1.8", + "A2.1", "A2.2", "A2.3", "A2.4", "A2.5", "A2.6", "A2.7", "A2.8", + "A3.1", "A3.2", "A3.3", "A3.4", "A3.5", "A3.6", "A3.7", "A3.8", + "A4.1", "A4.2", "A4.3", "A4.4", "A4.5", "A4.6", "A4.7", "A4.8", + "AES.L", "AES.R", + "SP.L", "SP.R" +}; + +static char *labels_raydat_ds[20] = { + "A1.1", "A1.2", "A1.3", "A1.4", + "A2.1", "A2.2", "A2.3", "A2.4", + "A3.1", "A3.2", "A3.3", "A3.4", + "A4.1", "A4.2", "A4.3", "A4.4", + "AES.L", "AES.R", + "SP.L", "SP.R" +}; + +static char *labels_raydat_qs[12] = { + "A1.1", "A1.2", + "A2.1", "A2.2", + "A3.1", "A3.2", + "A4.1", "A4.2", + "AES.L", "AES.R", + "SP.L", "SP.R" +}; + + +static char *labels_aio_ss_input[14] = { + "AN 1", "AN 2", + "SP.L", "SP.R", + "AES.L", "AES.R", + "A 1", "A 2", "A 3", "A 4", + "A 5", "A 6", "A 7", "A 8" +}; + +static char *labels_aio_ss_playback[16] = { + "AN 1", "AN 2", + "SP.L", "SP.R", + "AES.L", "AES.R", + "A 1", "A 2", "A 3", "A 4", + "A 5", "A 6", "A 7", "A 8", + "PH.L", "PH.R" +}; + +static char *labels_aio_ds_input[10] = { + "AN 1", "AN 2", + "SP.L", "SP.R", + "AES.L", "AES.R", + "A 1", "A 2", "A 3", "A 4" +}; + +static char *labels_aio_ds_playback[12] = { + "AN 1", "AN 2", + "SP.L", "SP.R", + "AES.L", "AES.R", + "A 1", "A 2", "A 3", "A 4", + "PH.L", "PH.R" + }; + +static char *labels_aio_qs_input[8] = { + "AN 1", "AN 2", + "SP.L", "SP.R", + "AES.L", "AES.R", + "A 1", "A 2" +}; + +static char *labels_aio_qs_playback[10] = { + "AN 1", "AN 2", + "SP.L", "SP.R", + "AES.L", "AES.R", + "A 1", "A 2", + "PH.L", "PH.R", +}; + + static char *labels_mf_ss[20] = { "AN 1", "AN 2", "AN 3", "AN 4", "AN 5", "AN 6", "AN 7", "AN 8", "A 1", "A 2", "A 3", "A 4", "A 5", "A 6", "A 7", "A 8", @@ -33,6 +133,7 @@ static char *labels_mf_ds[16] = { "SP.L", "SP.R", "AN.L", "AN.R" }; + static char *labels_df_ss[28] = { "A1 1", "A1 2", "A1 3", "A1 4", "A1 5", "A1 6", "A1 7", "A1 8", "A2 1", "A2 2", "A2 3", "A2 4", "A2 5", "A2 6", "A2 7", "A2 8", @@ -88,30 +189,72 @@ HDSPMixerOutput::HDSPMixerOutput(int x, int y, int w, int h, int num):Fl_Group(x void HDSPMixerOutput::setLabels() { - HDSP_IO_Type type = basew->cards[basew->current_card]->type; + int type = basew->cards[basew->current_card]->type; int sm = basew->cards[basew->current_card]->speed_mode; + if (type == H9632) { switch (sm) { case 0: - labels = labels_9632_ss; + labels_input = labels_playback = labels_9632_ss; break; case 1: - labels = labels_9632_ds; + labels_input = labels_playback = labels_9632_ds; break; case 2: - labels = labels_9632_qs; + labels_input = labels_playback = labels_9632_qs; break; } } else if (type == Multiface) { if (sm) - labels = labels_mf_ds; + labels_input = labels_playback = labels_mf_ds; else - labels = labels_mf_ss; - } else { + labels_input = labels_playback = labels_mf_ss; + } else if (type == Digiface) { if (sm) - labels = labels_df_ds; + labels_input = labels_playback = labels_df_ds; else - labels = labels_df_ss; + labels_input = labels_playback = labels_df_ss; + } else if (HDSPeMADI == type) { + switch (sm) { + case 0: + labels_input = labels_playback = labels_madi_ss; + break; + case 1: + labels_input = labels_playback = labels_madi_ds; + break; + case 2: + labels_input = labels_playback = labels_madi_qs; + break; + } + } else if (HDSPeAIO == type) { + switch (sm) { + case 0: + labels_input = labels_aio_ss_input; + labels_playback = labels_aio_ss_playback; + break; + case 1: + labels_input = labels_aio_ds_input; + labels_playback = labels_aio_ds_playback; + break; + case 2: + labels_input = labels_aio_qs_input; + labels_playback = labels_aio_ds_playback; + break; + } + } else if (HDSPeRayDAT == type) { + switch (sm) { + case 0: + labels_input = labels_playback = labels_raydat_ss; + break; + case 1: + labels_input = labels_playback = labels_raydat_ds; + break; + case 2: + labels_input = labels_playback = labels_raydat_qs; + break; + } + } else { + fprintf(stderr, "Unknown card type for output labels\n"); } } @@ -134,7 +277,7 @@ void HDSPMixerOutput::draw() draw_background(); fl_color(FL_BLACK); fl_font(FL_HELVETICA, 8); - fl_draw(labels[out_num], x()+4, y()+193, 27, 9, FL_ALIGN_CENTER); + fl_draw(labels_playback[out_num], x()+4, y()+193, 27, 9, FL_ALIGN_CENTER); for (int i=children(); i--;) { Fl_Widget& o = **a++; draw_child(o); diff --git a/hdspmixer/src/HDSPMixerOutput.h b/hdspmixer/src/HDSPMixerOutput.h index 88c3583..2e7fb09 100644 --- a/hdspmixer/src/HDSPMixerOutput.h +++ b/hdspmixer/src/HDSPMixerOutput.h @@ -46,7 +46,7 @@ class HDSPMixerOutput:public Fl_Group { private: int out_num; - char **labels; + char **labels_input, **labels_playback; char **p_output_xpm; HDSPMixerPeak *peak; HDSPMixerWindow *basew; diff --git a/hdspmixer/src/HDSPMixerOutputs.h b/hdspmixer/src/HDSPMixerOutputs.h index d073a2f..e7527d0 100644 --- a/hdspmixer/src/HDSPMixerOutputs.h +++ b/hdspmixer/src/HDSPMixerOutputs.h @@ -35,7 +35,7 @@ class HDSPMixerOutputs:public Fl_Group public: HDSPMixerEmpty *empty_aebo[2]; HDSPMixerEmpty *empty; - HDSPMixerOutput *strips[28]; + HDSPMixerOutput *strips[HDSP_MAX_CHANNELS+2]; HDSPMixerOutputs(int x, int y, int w, int h, int nchannels); }; diff --git a/hdspmixer/src/HDSPMixerPan.cxx b/hdspmixer/src/HDSPMixerPan.cxx index 5396614..c9feea4 100644 --- a/hdspmixer/src/HDSPMixerPan.cxx +++ b/hdspmixer/src/HDSPMixerPan.cxx @@ -27,7 +27,7 @@ HDSPMixerPan::HDSPMixerPan(int x, int y, int id, int src):Fl_Widget(x, y, 30, 13 index = id; basew = (HDSPMixerWindow *)window(); dest = x_orig = shift_orig = lastpos = lastx = drag = 0; - for (int i = 0; i < 14; i++) { + for (int i = 0; i < HDSP_MAX_DEST; i++) { pos[i] = 0; } } diff --git a/hdspmixer/src/HDSPMixerPan.h b/hdspmixer/src/HDSPMixerPan.h index 9a95acb..94f8ef2 100644 --- a/hdspmixer/src/HDSPMixerPan.h +++ b/hdspmixer/src/HDSPMixerPan.h @@ -28,6 +28,7 @@ #include "HDSPMixerIOMixer.h" #include "HDSPMixerWindow.h" #include "pixmaps.h" +#include "defines.h" class HDSPMixerIOMixer; class HDSPMixerWindow; @@ -39,7 +40,7 @@ private: void sendText(); void panToText(char *s); public: - int pos[14]; + int pos[HDSP_MAX_DEST]; int dest; int index; int source; diff --git a/hdspmixer/src/HDSPMixerPlaybacks.h b/hdspmixer/src/HDSPMixerPlaybacks.h index af776d0..1ef7768 100644 --- a/hdspmixer/src/HDSPMixerPlaybacks.h +++ b/hdspmixer/src/HDSPMixerPlaybacks.h @@ -34,7 +34,7 @@ class HDSPMixerPlaybacks:public Fl_Group public: HDSPMixerEmpty *empty_aebo[2]; HDSPMixerEmpty *empty; - HDSPMixerIOMixer *strips[26]; + HDSPMixerIOMixer *strips[HDSP_MAX_CHANNELS]; HDSPMixerPlaybacks(int x, int y, int w, int h, int nchannels); }; diff --git a/hdspmixer/src/HDSPMixerPresets.cxx b/hdspmixer/src/HDSPMixerPresets.cxx index a403179..aeeb9c9 100644 --- a/hdspmixer/src/HDSPMixerPresets.cxx +++ b/hdspmixer/src/HDSPMixerPresets.cxx @@ -193,18 +193,21 @@ void HDSPMixerPresets::restore_preset(int prst) { basew->outputs->strips[HDSP_MAX_CHANNELS]->fader->pos[0] = basew->outputs->strips[HDSP_MAX_CHANNELS+1]->data[card][speed][p]->fader_pos; basew->outputs->strips[HDSP_MAX_CHANNELS+1]->fader->pos[0] = basew->outputs->strips[HDSP_MAX_CHANNELS+1]->data[card][speed][p]->fader_pos; - for (int i = 0; i < basew->cards[card]->channels; ++i) { + for (int i = 0; i < basew->cards[card]->channels_input; ++i) { basew->inputs->strips[i]->fader->sendGain(); basew->inputs->strips[i]->redraw(); + } + + for (int i = 0; i < basew->cards[card]->channels_playback; ++i) { basew->playbacks->strips[i]->fader->sendGain(); basew->playbacks->strips[i]->redraw(); basew->outputs->strips[i]->fader->sendGain(); basew->outputs->strips[i]->redraw(); } - basew->outputs->strips[basew->cards[card]->channels]->fader->sendGain(); - basew->outputs->strips[basew->cards[card]->channels]->redraw(); - basew->outputs->strips[basew->cards[card]->channels+1]->fader->sendGain(); - basew->outputs->strips[basew->cards[card]->channels+1]->redraw(); + basew->outputs->strips[basew->cards[card]->channels_playback]->fader->sendGain(); + basew->outputs->strips[basew->cards[card]->channels_playback]->redraw(); + basew->outputs->strips[basew->cards[card]->channels_playback+1]->fader->sendGain(); + basew->outputs->strips[basew->cards[card]->channels_playback+1]->redraw(); /* Global settings */ basew->inputs->buttons->view->input = basew->data[card][speed][p]->input; diff --git a/hdspmixer/src/HDSPMixerSelector.cxx b/hdspmixer/src/HDSPMixerSelector.cxx index bf11db0..8ac0ad3 100644 --- a/hdspmixer/src/HDSPMixerSelector.cxx +++ b/hdspmixer/src/HDSPMixerSelector.cxx @@ -21,6 +21,83 @@ #pragma implementation #include "HDSPMixerSelector.h" +static char *destinations_madi_ss[32] = { + "1+2", "3+4", "5+6", "7+8", + "9+10", "11+12", "13+14", "15+16", + "17+18", "19+20", "21+22", "23+24", + "25+26", "27+28", "29+30", "31+32", + "33+34", "35+36", "37+38", "39+40", + "41+42", "43+44", "45+46", "47+48", + "49+50", "51+52", "53+54", "55+56", + "57+58", "59+60", "61+62", "63+64" +}; + +static char *destinations_madi_ds[16] = { + "1+2", "3+4", "5+6", "7+8", + "9+10", "11+12", "13+14", "15+16", + "17+18", "19+20", "21+22", "23+24", + "25+26", "27+28", "29+30", "31+32", +}; + +static char *destinations_madi_qs[8] = { + "1+2", "3+4", "5+6", "7+8", + "9+10", "11+12", "13+14", "15+16", +}; + + +static char *destinations_raydat_ss[18] = { + + "A1 1+2", "A1 3+4", "A1 5+6", "A1 7+8", + "A2 1+2", "A2 3+4", "A2 5+6", "A2 7+8", + "A3 1+2", "A3 3+4", "A3 5+6", "A3 7+8", + "A4 1+2", "A4 3+4", "A4 5+6", "A4 7+8", + "AES", + "SPDIF" +}; + +static char *destinations_raydat_ds[10] = { + "A1 1+2", "A1 3+4", + "A2 1+2", "A2 3+4", + "A3 1+2", "A3 3+4", + "A4 1+2", "A4 3+4", + "AES", + "SPDIF" +}; + +static char *destinations_raydat_qs[6] = { + "A1 1+2", + "A2 1+2", + "A3 1+2", + "A4 1+2", + "AES", + "SPDIF" +}; + + +static char *destinations_aio_ss[8] = { + "AN 1+2", + "AES", + "SPDIF", + "A 1+2", "A 3+4", "A 5+6", "A 7+8", + "Phones", +}; + +static char *destinations_aio_ds[6] = { + "AN 1+2", + "AES", + "SPDIF", + "A 1+2", "A 3+4" + "Phones", +}; + +static char *destinations_aio_qs[5] = { + "AN 1+2", + "AES", + "SPDIF", + "A 1+2" + "Phones", +}; + static char *destinations_mf_ss[10] = { "AN 1+2", "AN 3+4", "AN 5+6", "AN 7+8", "A 1+2", "A 3+4", "A 5+6", "A 7+8", @@ -135,7 +212,7 @@ int HDSPMixerSelector::handle(int e) { void HDSPMixerSelector::setLabels() { - HDSP_IO_Type type; + int type; hdsp_9632_aeb_t *aeb; int sm; clear(); @@ -199,7 +276,54 @@ void HDSPMixerSelector::setLabels() destinations = destinations_h9632_qs; break; } + } else if (HDSPeMADI == type) { + switch (sm) { + case 0: + max_dest = 32; + destinations = destinations_madi_ss; + break; + case 1: + max_dest = 16; + destinations = destinations_madi_ds; + break; + case 2: + max_dest = 8; + destinations = destinations_madi_qs; + break; + } + } else if (HDSPeAIO == type) { + switch (sm) { + case 0: + max_dest = 8; + destinations = destinations_aio_ss; + break; + case 1: + max_dest = 6; + destinations = destinations_aio_ds; + break; + case 2: + max_dest = 5; + destinations = destinations_aio_qs; + break; + } + } else if (HDSPeRayDAT == type) { + switch (sm) { + case 0: + max_dest = 18; + destinations = destinations_raydat_ss; + break; + case 1: + max_dest = 10; + destinations = destinations_raydat_ds; + break; + case 2: + max_dest = 6; + destinations = destinations_raydat_qs; + break; + } + } + for (int i = 0; i < max_dest; ++i) { add(destinations[i], 0, 0, 0, FL_MENU_TOGGLE); diff --git a/hdspmixer/src/HDSPMixerStripData.h b/hdspmixer/src/HDSPMixerStripData.h index 3d6cdb8..c74114c 100644 --- a/hdspmixer/src/HDSPMixerStripData.h +++ b/hdspmixer/src/HDSPMixerStripData.h @@ -22,14 +22,16 @@ #ifndef HDSPMixerStripData_H #define HDSPMixerStripData_H +#include "defines.h" + class HDSPMixerStripData { public: int mute; int solo; - int pan_pos[14]; - int fader_pos[14]; + int pan_pos[HDSP_MAX_DEST]; + int fader_pos[HDSP_MAX_DEST]; int dest; HDSPMixerStripData(); }; diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index fb90130..e7d4e85 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -16,6 +16,10 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * @version 04-12-2009 [FF] + * - updated deprecated fl_ask calls + * */ #pragma implementation @@ -25,7 +29,8 @@ static void readregisters_cb(void *arg) { int err; snd_hwdep_t *hw; - hdsp_peak_rms_t peak_rms; + hdsp_peak_rms_t hdsp_peak_rms; + struct hdspm_peak_rms hdspm_peak_rms; HDSPMixerWindow *w = (HDSPMixerWindow *)arg; @@ -39,49 +44,52 @@ static void readregisters_cb(void *arg) return; } - if ((err = snd_hwdep_ioctl(hw, SNDRV_HDSP_IOCTL_GET_PEAK_RMS, (void *)&peak_rms)) < 0) { + if ((HDSPeMADI == w->cards[w->current_card]->type) || + (HDSPeAIO == w->cards[w->current_card]->type) || + (HDSPeRayDAT == w->cards[w->current_card]->type)) { + if ((err = snd_hwdep_ioctl(hw, SNDRV_HDSPM_IOCTL_GET_PEAK_RMS, (void *)&hdspm_peak_rms)) < 0) { fprintf(stderr, "HwDep ioctl failed. Metering stopped\n"); snd_hwdep_close(hw); return; + } + } else { + if ((err = snd_hwdep_ioctl(hw, SNDRV_HDSP_IOCTL_GET_PEAK_RMS, (void *)&hdsp_peak_rms)) < 0) { + fprintf(stderr, "HwDep ioctl failed. Metering stopped\n"); + snd_hwdep_close(hw); + return; + } + } + snd_hwdep_close(hw); + + // check for speed change + if (hdspm_peak_rms.speed != w->cards[w->current_card]->speed_mode) { + w->cards[w->current_card]->setMode(hdspm_peak_rms.speed); } - snd_hwdep_close(hw); - if (w->inputs->buttons->input) { - for (int i = 0; i < w->cards[w->current_card]->channels; ++i) { - w->inputs->strips[i]->meter->update(peak_rms.input_peaks[(w->cards[w->current_card]->meter_map[i])] & 0xffffff00, - peak_rms.input_peaks[(w->cards[w->current_card]->meter_map[i])] & 0xf, - peak_rms.input_rms[(w->cards[w->current_card]->meter_map[i])]); - } + for (int i = 0; i < w->cards[w->current_card]->channels_input; ++i) { + w->inputs->strips[i]->meter->update(hdspm_peak_rms.input_peaks[(w->cards[w->current_card]->meter_map_input[i])] & 0xffffff00, + hdspm_peak_rms.input_peaks[(w->cards[w->current_card]->meter_map_input[i])] & 0xf, + hdspm_peak_rms.input_rms[(w->cards[w->current_card]->meter_map_input[i])]); + } } + if (w->inputs->buttons->playback) { - for (int i = 0; i < w->cards[w->current_card]->channels; ++i) { - w->playbacks->strips[i]->meter->update(peak_rms.playback_peaks[(w->cards[w->current_card]->meter_map[i])] & 0xffffff00, - peak_rms.playback_peaks[(w->cards[w->current_card]->meter_map[i])] & 0xf, - peak_rms.playback_rms[(w->cards[w->current_card]->meter_map[i])]); - } + for (int i = 0; i < w->cards[w->current_card]->channels_playback; ++i) { + w->playbacks->strips[i]->meter->update(hdspm_peak_rms.playback_peaks[(w->cards[w->current_card]->meter_map_playback[i])] & 0xffffff00, + hdspm_peak_rms.playback_peaks[(w->cards[w->current_card]->meter_map_playback[i])] & 0xf, + hdspm_peak_rms.playback_rms[(w->cards[w->current_card]->meter_map_playback[i])]); + } } + if (w->inputs->buttons->output) { - if (w->cards[w->current_card]->type != H9652) { - for (int i = 0; i < w->cards[w->current_card]->channels; ++i) { - w->outputs->strips[i]->meter->update(peak_rms.output_peaks[(w->cards[w->current_card]->meter_map[i])] & 0xffffff00, - peak_rms.output_peaks[(w->cards[w->current_card]->meter_map[i])] & 0xf, - 0 ); - } - for (int i = 0; i < w->cards[w->current_card]->lineouts; ++i) { - w->outputs->strips[w->cards[w->current_card]->channels+i]->meter->update(peak_rms.output_peaks[26+i] & 0xffffff00, - peak_rms.output_peaks[26+i] & 0xf, - 0 ); - } - } else { - for (int i = 0; i < w->cards[w->current_card]->channels; ++i) { - w->outputs->strips[i]->meter->update(peak_rms.output_peaks[(w->cards[w->current_card]->meter_map[i])] & 0xffffff00, - peak_rms.output_peaks[(w->cards[w->current_card]->meter_map[i])] & 0xf, - peak_rms.output_rms[(w->cards[w->current_card]->meter_map[i])] ); - } - } + for (int i = 0; i < w->cards[w->current_card]->channels_playback; ++i) { + w->outputs->strips[i]->meter->update(hdspm_peak_rms.output_peaks[(w->cards[w->current_card]->meter_map_playback[i])] & 0xffffff00, + hdspm_peak_rms.output_peaks[(w->cards[w->current_card]->meter_map_playback[i])] & 0xf, + hdspm_peak_rms.output_rms[(w->cards[w->current_card]->meter_map_playback[i])]); + } } - + Fl::add_timeout(0.03, readregisters_cb, w); } @@ -90,7 +98,7 @@ static void exit_cb(Fl_Widget *widget, void *arg) { HDSPMixerWindow *w = (HDSPMixerWindow *)arg; if (w->dirty) { - if (!fl_ask("There are unsaved changes, quit anyway ?")) return; + if (!fl_choice("There are unsaved changes, quit anyway ?", "Return", "Quit", NULL)) return; } exit(EXIT_SUCCESS); } @@ -202,7 +210,7 @@ static void restore_defaults_cb(Fl_Widget *widget, void *arg) HDSPMixerWindow *w = (HDSPMixerWindow *)arg; int i = 0; if (w->dirty) { - if (!fl_ask("There are unsaved changes, restore factory settings anyway ?")) return; + if (!fl_choice("There are unsaved changes, restore factory settings anyway ?", "Don't restore", "Restore them", NULL)) return; } w->prefs->deleteEntry("default_file"); w->prefs->flush(); @@ -228,7 +236,7 @@ static void atclose_cb(Fl_Window *w, void *arg) { if (strncmp("HDSPMixer", w->label(), 9) == 0) { if (((HDSPMixerWindow *)w)->dirty) { - if (!fl_ask("There are unsaved changes, quit anyway ?")) return; + if (!fl_choice("There are unsaved changes, quit anyway ?", "Don't quit", "Quit", NULL)) return; } exit(EXIT_SUCCESS); } @@ -254,7 +262,7 @@ static int handler_cb(int event) case FL_SHORTCUT: if (key == FL_Escape) { if (w->dirty) { - if (!fl_ask("There are unsaved changes, quit anyway ?")) return 1; + if (!fl_choice("There are unsaved changes, quit anyway ?", "Don't quit", "Quit", NULL)) return 1; } exit(EXIT_SUCCESS); } @@ -495,7 +503,6 @@ load_error: void HDSPMixerWindow::restoreDefaults(int card) { - int phones; int chnls[3]; int maxdest[3]; int h9632_spdif_submix[3]; @@ -508,21 +515,18 @@ void HDSPMixerWindow::restoreDefaults(int card) chnls[1] = 14; maxdest[0] = 10; maxdest[1] = 8; - phones = 1; break; case Digiface: chnls[0] = 26; chnls[1] = 14; maxdest[0] = 14; maxdest[1] = 8; - phones = 1; break; case H9652: chnls[0] = 26; chnls[1] = 14; maxdest[0] = 13; maxdest[1] = 7; - phones = 0; break; case H9632: chnls[0] = 16; @@ -538,8 +542,35 @@ void HDSPMixerWindow::restoreDefaults(int card) h9632_an12_submix[1] = 3; h9632_an12_submix[2] = 1; num_modes = 3; - phones = 0; break; + case HDSPeMADI: + chnls[0] = 64; + chnls[1] = 32; + chnls[2] = 16; + maxdest[0] = 32; + maxdest[1] = 16; + maxdest[2] = 8; + num_modes = 3; + break; + case HDSPeAIO: + chnls[0] = 14; + chnls[1] = 10; + chnls[2] = 8; + maxdest[0] = 8; + maxdest[1] = 6; + maxdest[2] = 5; + num_modes = 3; + break; + case HDSPeRayDAT: + chnls[0] = 36; + chnls[1] = 20; + chnls[2] = 12; + maxdest[0] = 18; + maxdest[1] = 10; + maxdest[2] = 6; + num_modes = 3; + break; + default: /* should never happen */ return; @@ -560,13 +591,13 @@ void HDSPMixerWindow::restoreDefaults(int card) ((preset == 1 && z == h9632_an12_submix[speed]) || i == z*2 || (preset == 5 && z == h9632_spdif_submix[speed])) ? ndb : 0; } else { inputs->strips[i]->data[card][speed][preset]->fader_pos[z] = - ((preset == 6 && z == (maxdest[speed]-phones-1)) || (i == z*2 && (preset > 1 && preset < 4)) || (((preset > 0 && preset < 4) || preset == 7) && phones && (z == maxdest[speed]-1))) ? ndb : 0; + ((preset == 6 && z == (maxdest[speed]-1)) || (i == z*2 && (preset > 1 && preset < 4)) || (((preset > 0 && preset < 4) || preset == 7) && (z == maxdest[speed]-1))) ? ndb : 0; inputs->strips[i+1]->data[card][speed][preset]->fader_pos[z] = - ((preset == 6 && z == (maxdest[speed]-phones-1)) || (i == z*2 && (preset > 1 && preset < 4)) || (((preset > 0 && preset < 4) || preset == 7) && phones && (z == maxdest[speed]-1))) ? ndb : 0; + ((preset == 6 && z == (maxdest[speed]-1)) || (i == z*2 && (preset > 1 && preset < 4)) || (((preset > 0 && preset < 4) || preset == 7) && (z == maxdest[speed]-1))) ? ndb : 0; playbacks->strips[i]->data[card][speed][preset]->fader_pos[z] = - ((preset > 4 && preset < 7 && z == (maxdest[speed]-phones-1)) || i == z*2 || (phones && (z == maxdest[speed]-1))) ? ndb : 0; + ((preset > 4 && preset < 7 && z == (maxdest[speed]-1)) || i == z*2 || ((z == maxdest[speed]-1))) ? ndb : 0; playbacks->strips[i+1]->data[card][speed][preset]->fader_pos[z] = - ((preset > 4 && preset < 7 && z == (maxdest[speed]-phones-1)) || i == z*2 || (phones && (z == maxdest[speed]-1))) ? ndb : 0; + ((preset > 4 && preset < 7 && z == (maxdest[speed]-1)) || i == z*2 || ((z == maxdest[speed]-1))) ? ndb : 0; } /* Pan setup */ inputs->strips[i]->data[card][speed][preset]->pan_pos[z] = 0; @@ -604,7 +635,7 @@ void HDSPMixerWindow::restoreDefaults(int card) data[card][speed][preset]->submix = 0; } } else if (preset > 4 && preset < 7) { - data[card][speed][preset]->submix_value = maxdest[speed]-phones-1; + data[card][speed][preset]->submix_value = maxdest[speed]-1; if (preset == 5) { outputs->strips[chnls[speed]-2]->data[card][speed][preset]->fader_pos = ndb; outputs->strips[chnls[speed]-1]->data[card][speed][preset]->fader_pos = ndb; @@ -615,10 +646,6 @@ void HDSPMixerWindow::restoreDefaults(int card) if (preset == 3 || preset == 7) { data[card][speed][preset]->mute = 1; } - if (phones) { - outputs->strips[chnls[speed]]->data[card][speed][preset]->fader_pos = (preset != 4) ? ndb : 0; - outputs->strips[chnls[speed]+1]->data[card][speed][preset]->fader_pos = (preset != 4) ? ndb : 0; - } } } } @@ -669,13 +696,13 @@ HDSPMixerWindow::HDSPMixerWindow(int x, int y, int w, int h, const char *label, menubar->add("&View/Submix", 's', (Fl_Callback *)submix_cb, (void *)this, FL_MENU_TOGGLE|FL_MENU_VALUE); menubar->add("&Options/Level Meter Setup", 'm', (Fl_Callback *)setup_cb, (void *)this); menubar->add("&?/About", 0, (Fl_Callback *)about_cb, (void *)this); - inputs = new HDSPMixerInputs(0, MENU_HEIGHT, w, FULLSTRIP_HEIGHT, cards[0]->channels); + inputs = new HDSPMixerInputs(0, MENU_HEIGHT, w, FULLSTRIP_HEIGHT, cards[0]->channels_input); inputs->buttons->input = 1; inputs->buttons->output = 1; inputs->buttons->submix = 1; inputs->buttons->playback = 1; - playbacks = new HDSPMixerPlaybacks(0, MENU_HEIGHT+FULLSTRIP_HEIGHT, w, FULLSTRIP_HEIGHT, cards[0]->channels); - outputs = new HDSPMixerOutputs(0, MENU_HEIGHT+FULLSTRIP_HEIGHT*2, w, SMALLSTRIP_HEIGHT, cards[0]->channels); + playbacks = new HDSPMixerPlaybacks(0, MENU_HEIGHT+FULLSTRIP_HEIGHT, w, FULLSTRIP_HEIGHT, cards[0]->channels_playback); + outputs = new HDSPMixerOutputs(0, MENU_HEIGHT+FULLSTRIP_HEIGHT*2, w, SMALLSTRIP_HEIGHT, cards[0]->channels_playback); scroll->end(); end(); setup = new HDSPMixerSetup(400, 260, "Level Meters Setup", this); @@ -791,11 +818,7 @@ void HDSPMixerWindow::checkState() if (outputs->strips[i]->data[current_card][speed][p]->fader_pos != outputs->strips[i]->fader->pos[0]) corrupt++; } - /* Line outs */ - if (outputs->strips[HDSP_MAX_CHANNELS]->data[current_card][speed][p]->fader_pos != outputs->strips[HDSP_MAX_CHANNELS]->fader->pos[0]) - corrupt++; - if (outputs->strips[HDSP_MAX_CHANNELS+1]->data[current_card][speed][p]->fader_pos != outputs->strips[HDSP_MAX_CHANNELS+1]->fader->pos[0]) - corrupt++; + /* Global settings */ if (data[current_card][speed][p]->mute != inputs->buttons->master->mute) corrupt++; @@ -839,7 +862,7 @@ void HDSPMixerWindow::checkState() void HDSPMixerWindow::setSubmix(int submix_value) { - for (int i = 0; i < cards[current_card]->channels; i++) { + for (int i = 0; i < cards[current_card]->channels_playback; i++) { inputs->strips[i]->targets->value(submix_value); inputs->strips[i]->targets->redraw(); inputs->strips[i]->fader->dest = submix_value; @@ -859,7 +882,7 @@ void HDSPMixerWindow::setSubmix(int submix_value) void HDSPMixerWindow::unsetSubmix() { - for (int i = 0; i < cards[current_card]->channels; i++) { + for (int i = 0; i < cards[current_card]->channels_input; i++) { inputs->strips[i]->targets->value(inputs->strips[i]->targets->selected); inputs->strips[i]->targets->redraw(); inputs->strips[i]->fader->dest = inputs->strips[i]->targets->selected; @@ -881,7 +904,7 @@ void HDSPMixerWindow::unsetSubmix() void HDSPMixerWindow::refreshMixer() { int i, j; - for (i = 1; i <= cards[current_card]->channels; ++i) { + for (i = 1; i <= cards[current_card]->channels_input; ++i) { for (j = 0; j < inputs->strips[0]->targets->max_dest; ++j) { setMixer(i, 0, j); setMixer(i, 1, j); @@ -901,7 +924,7 @@ void HDSPMixerWindow::resetMixer() { int i, j; for (i = 0; i < (cards[current_card]->playbacks_offset*2) ; ++i) { - for (j = 0; j < (cards[current_card]->playbacks_offset+cards[current_card]->lineouts); ++j) { + for (j = 0; j < (cards[current_card]->playbacks_offset); ++j) { setGain(i, j, 0); } } @@ -917,6 +940,8 @@ void HDSPMixerWindow::setGain(int in, int out, int value) snd_ctl_elem_id_t *id; snd_ctl_elem_value_t *ctl; snd_ctl_t *handle; + + //printf("setGain(%d, %d, %d)\n", in, out, value); snd_ctl_elem_value_alloca(&ctl); snd_ctl_elem_id_alloca(&id); @@ -927,7 +952,7 @@ void HDSPMixerWindow::setGain(int in, int out, int value) snd_ctl_elem_value_set_id(ctl, id); if ((err = snd_ctl_open(&handle, cards[current_card]->name, SND_CTL_NONBLOCK)) < 0) { - fprintf(stderr, "Alsa error: %s\n", snd_strerror(err)); + fprintf(stderr, "Alsa error 1: %s\n", snd_strerror(err)); return; } @@ -935,7 +960,7 @@ void HDSPMixerWindow::setGain(int in, int out, int value) snd_ctl_elem_value_set_integer(ctl, 1, out); snd_ctl_elem_value_set_integer(ctl, 2, value); if ((err = snd_ctl_elem_write(handle, ctl)) < 0) { - fprintf(stderr, "Alsa error: %s\n", snd_strerror(err)); + fprintf(stderr, "Alsa error 2: %s\n", snd_strerror(err)); snd_ctl_close(handle); return; } @@ -955,6 +980,17 @@ void HDSPMixerWindow::setMixer(int idx, int src, int dst) snd_ctl_elem_value_t *ctl; snd_ctl_t *handle; + char *channel_map; + + switch (src) { + case 0: + channel_map = cards[current_card]->channel_map_input; + break; + case 1: + case 2: + channel_map = cards[current_card]->channel_map_playback; + } + gsolo_active = inputs->buttons->master->solo_active; gmute_active = inputs->buttons->master->mute_active; gsolo = inputs->buttons->master->solo; @@ -973,7 +1009,7 @@ void HDSPMixerWindow::setMixer(int idx, int src, int dst) snd_ctl_elem_value_set_id(ctl, id); if ((err = snd_ctl_open(&handle, cards[current_card]->name, SND_CTL_NONBLOCK)) < 0) { - fprintf(stderr, "Alsa error: %s\n", snd_strerror(err)); + fprintf(stderr, "Alsa error 3: %s\n", snd_strerror(err)); return; } @@ -1003,19 +1039,20 @@ void HDSPMixerWindow::setMixer(int idx, int src, int dst) right_val = attenuation_r* vol * pan; muted: - snd_ctl_elem_value_set_integer(ctl, 0, src*cards[current_card]->playbacks_offset+cards[current_card]->channel_map[idx-1]); + snd_ctl_elem_value_set_integer(ctl, 0, src*cards[current_card]->playbacks_offset+channel_map[idx-1]); snd_ctl_elem_value_set_integer(ctl, 1, cards[current_card]->dest_map[dst]); snd_ctl_elem_value_set_integer(ctl, 2, (int)left_val); if ((err = snd_ctl_elem_write(handle, ctl)) < 0) { - fprintf(stderr, "Alsa error: %s\n", snd_strerror(err)); + fprintf(stderr, "Alsa error 4: %s\n", snd_strerror(err)); snd_ctl_close(handle); return; } - snd_ctl_elem_value_set_integer(ctl, 0, src*cards[current_card]->playbacks_offset+cards[current_card]->channel_map[idx-1]); + + snd_ctl_elem_value_set_integer(ctl, 0, src*cards[current_card]->playbacks_offset+channel_map[idx-1]); snd_ctl_elem_value_set_integer(ctl, 1, cards[current_card]->dest_map[dst]+1); snd_ctl_elem_value_set_integer(ctl, 2, (int)right_val); if ((err = snd_ctl_elem_write(handle, ctl)) < 0) { - fprintf(stderr, "Alsa error: %s\n", snd_strerror(err)); + fprintf(stderr, "Alsa error 5: %s\n", snd_strerror(err)); snd_ctl_close(handle); return; } @@ -1026,10 +1063,13 @@ muted: dest = (int)floor((idx-1)/2); - for (i = 0; i < cards[current_card]->channels; ++i) { + for (i = 0; i < cards[current_card]->channels_input; ++i) { if ((vol = inputs->strips[i]->fader->posToInt(inputs->strips[i]->fader->pos[dest])) != 0) { setMixer(i+1, 0, dest); } + } + + for (i = 0; i < cards[current_card]->channels_playback; ++i) { if ((vol = playbacks->strips[i]->fader->posToInt(playbacks->strips[i]->fader->pos[dest])) != 0) { setMixer(i+1, 1, dest); } diff --git a/hdspmixer/src/defines.h b/hdspmixer/src/defines.h index 1aefb7a..33559ab 100644 --- a/hdspmixer/src/defines.h +++ b/hdspmixer/src/defines.h @@ -24,8 +24,12 @@ /* Uncomment this to make the setup window non-modal */ //#define NON_MODAL_SETUP 1 -#define HDSP_MAX_CHANNELS 26 -#define HDSP_MAX_DEST 14 +#define HDSPeMADI 10 +#define HDSPeRayDAT 11 +#define HDSPeAIO 12 + +#define HDSP_MAX_CHANNELS 64 +#define HDSP_MAX_DEST 32 #define STRIP_WIDTH 36 #define FULLSTRIP_HEIGHT 253 diff --git a/hdspmixer/src/hdspmixer.cxx b/hdspmixer/src/hdspmixer.cxx index dfb13ea..7fd50e9 100644 --- a/hdspmixer/src/hdspmixer.cxx +++ b/hdspmixer/src/hdspmixer.cxx @@ -44,28 +44,28 @@ int main(int argc, char **argv) printf("\nHDSPMixer %s - Copyright (C) 2003 Thomas Charbonnel \n", VERSION); printf("This program comes with ABSOLUTELY NO WARRANTY\n"); printf("HDSPMixer is free software, see the file COPYING for details\n\n"); - printf("Looking for HDSP cards :\n"); + printf("Looking for RME cards :\n"); while (snd_card_next(&card) >= 0) { if (card < 0) { break; } else { snd_card_get_longname(card, &name); printf("Card %d : %s\n", card, name); - if (!strncmp(name, "RME Hammerfall DSP + Multiface", 30)) { - printf("Multiface found !\n"); - hdsp_cards[cards] = new HDSPMixerCard(Multiface, card); + if (!strncmp(name, "RME MADIface", 12)) { + printf("RME MADIface found !\n"); + hdsp_cards[cards] = new HDSPMixerCard(HDSPeMADI, card); cards++; - } else if (!strncmp(name, "RME Hammerfall DSP + Digiface", 29)) { - printf("Digiface found !\n"); - hdsp_cards[cards] = new HDSPMixerCard(Digiface, card); + } else if (!strncmp(name, "RME MADI", 8)) { + printf("RME MADI found !\n"); + hdsp_cards[cards] = new HDSPMixerCard(HDSPeMADI, card); cards++; - } else if (!strncmp(name, "RME Hammerfall HDSP 9652", 24)) { - printf("HDSP 9652 found !\n"); - hdsp_cards[cards] = new HDSPMixerCard(H9652, card); + } else if (!strncmp(name, "RME RayDAT", 10)) { + printf("RME RayDAT found !\n"); + hdsp_cards[cards] = new HDSPMixerCard(HDSPeRayDAT, card); cards++; - } else if (!strncmp(name, "RME Hammerfall HDSP 9632", 24)) { - printf("HDSP 9632 found !\n"); - hdsp_cards[cards] = new HDSPMixerCard(H9632, card); + } else if (!strncmp(name, "RME AIO", 7)) { + printf("RME AIO found !\n"); + hdsp_cards[cards] = new HDSPMixerCard(HDSPeAIO, card); cards++; } else if (!strncmp(name, "RME Hammerfall DSP", 18)) { printf("Uninitialized HDSP card found.\nUse hdsploader to upload configuration data to the card.\n"); @@ -74,13 +74,13 @@ int main(int argc, char **argv) } free(name); if (!cards) { - printf("No Hammerfall DSP card found.\n"); + printf("No RME cards found.\n"); exit(EXIT_FAILURE); } for (int i = cards; i < 3; ++i) { hdsp_cards[i] = NULL; } - printf("%d Hammerfall DSP %s found.\n", cards, (cards > 1) ? "cards" : "card"); + printf("%d RME cards %s found.\n", cards, (cards > 1) ? "cards" : "card"); window = new HDSPMixerWindow(0, 0, hdsp_cards[0]->window_width, hdsp_cards[0]->window_height, "HDSPMixer", hdsp_cards[0], hdsp_cards[1], hdsp_cards[2]); Fl::visual(FL_DOUBLE|FL_INDEX); window->show(argc, argv); From fda8bb066fbb9d33e219bb3f390efd5abc4b4d90 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Thu, 27 Jan 2011 11:41:47 +0100 Subject: [PATCH 008/166] hdspmixer: Don't use channelmap from hdspm.h The channel mapping has been moved to hdspm.c, so it's no longer available to userspace tools. For now, let's simply copy (duplicate) the data and wait for a way to query this information from the driver. Signed-off-by: Adrian Knoth Signed-off-by: Jaroslav Kysela --- hdspmixer/src/HDSPMixerCard.h | 1 + hdspmixer/src/channelmap.h | 167 ++++++++++++++++++++++++++++++++++ 2 files changed, 168 insertions(+) create mode 100644 hdspmixer/src/channelmap.h diff --git a/hdspmixer/src/HDSPMixerCard.h b/hdspmixer/src/HDSPMixerCard.h index 9303d21..cfb2402 100644 --- a/hdspmixer/src/HDSPMixerCard.h +++ b/hdspmixer/src/HDSPMixerCard.h @@ -28,6 +28,7 @@ #include #include #include "defines.h" +#include "channelmap.h" #include "HDSPMixerWindow.h" class HDSPMixerWindow; diff --git a/hdspmixer/src/channelmap.h b/hdspmixer/src/channelmap.h new file mode 100644 index 0000000..de89140 --- /dev/null +++ b/hdspmixer/src/channelmap.h @@ -0,0 +1,167 @@ +#ifndef channelmap_H +#define channelmap_H + +static char channel_map_unity_ss[HDSPM_MAX_CHANNELS] = { + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63 +}; + +static char channel_map_unity_ds[HDSPM_MAX_CHANNELS] = { + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, + 48, 50, 52, 54, 56, 58, 60, 62, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, +}; + +static char channel_map_unity_qs[HDSPM_MAX_CHANNELS] = { + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, +}; + +static char channel_map_raydat_ss[HDSPM_MAX_CHANNELS] = { + 4, 5, 6, 7, 8, 9, 10, 11, /* ADAT 1 */ + 12, 13, 14, 15, 16, 17, 18, 19, /* ADAT 2 */ + 20, 21, 22, 23, 24, 25, 26, 27, /* ADAT 3 */ + 28, 29, 30, 31, 32, 33, 34, 35, /* ADAT 4 */ + 0, 1, /* AES */ + 2, 3, /* SPDIF */ + -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, +}; + +static char channel_map_raydat_ds[HDSPM_MAX_CHANNELS] = { + 4, 5, 6, 7, /* ADAT 1 */ + 8, 9, 10, 11, /* ADAT 2 */ + 12, 13, 14, 15, /* ADAT 3 */ + 16, 17, 18, 19, /* ADAT 4 */ + 0, 1, /* AES */ + 2, 3, /* SPDIF */ + -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, +}; + +static char channel_map_raydat_qs[HDSPM_MAX_CHANNELS] = { + 4, 5, /* ADAT 1 */ + 6, 7, /* ADAT 2 */ + 8, 9, /* ADAT 3 */ + 10, 11, /* ADAT 4 */ + 0, 1, /* AES */ + 2, 3, /* SPDIF */ + -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, +}; + +static char channel_map_aio_in_ss[HDSPM_MAX_CHANNELS] = { + 0, 1, /* line in */ + 8, 9, /* aes in, */ + 10, 11, /* spdif in */ + 12, 13, 14, 15, 16, 17, 18, 19, /* ADAT in */ + -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, +}; + +static char channel_map_aio_out_ss[HDSPM_MAX_CHANNELS] = { + 0, 1, /* line out */ + 8, 9, /* aes out */ + 10, 11, /* spdif out */ + 12, 13, 14, 15, 16, 17, 18, 19, /* ADAT out */ + 6, 7, /* phone out */ + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, +}; + +static char channel_map_aio_in_ds[HDSPM_MAX_CHANNELS] = { + 0, 1, /* line in */ + 8, 9, /* aes in */ + 10, 11, /* spdif in */ + 12, 14, 16, 18, /* adat in */ + -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 +}; + +static char channel_map_aio_out_ds[HDSPM_MAX_CHANNELS] = { + 0, 1, /* line out */ + 8, 9, /* aes out */ + 10, 11, /* spdif out */ + 12, 14, 16, 18, /* adat out */ + 6, 7, /* phone out */ + -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 +}; + +static char channel_map_aio_in_qs[HDSPM_MAX_CHANNELS] = { + 0, 1, /* line in */ + 8, 9, /* aes in */ + 10, 11, /* spdif in */ + 12, 16, /* adat in */ + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 +}; + +static char channel_map_aio_out_qs[HDSPM_MAX_CHANNELS] = { + 0, 1, /* line out */ + 8, 9, /* aes out */ + 10, 11, /* spdif out */ + 12, 16, /* adat out */ + 6, 7, /* phone out */ + -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 +}; + +#endif /* channelmap_H */ From 0265798c127637f63bcc408fa413d5d2bb6ae4d4 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 27 Jan 2011 12:05:46 +0100 Subject: [PATCH 009/166] Release v1.0.24 Signed-off-by: Jaroslav Kysela --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 546a47b..1099e86 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION = 1.0.23 +VERSION = 1.0.24 TOP = . SUBDIRS = ac3dec as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ From 1dddbbf3f54304434a3d462bfc62cd554d65db77 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Fri, 28 Jan 2011 16:12:05 +0100 Subject: [PATCH 010/166] hdspmixer: add missing channelmap.h to Makefile.am Signed-off-by: Jaroslav Kysela --- hdspmixer/src/Makefile.am | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hdspmixer/src/Makefile.am b/hdspmixer/src/Makefile.am index 9bb83af..b097898 100644 --- a/hdspmixer/src/Makefile.am +++ b/hdspmixer/src/Makefile.am @@ -55,4 +55,6 @@ hdspmixer_SOURCES = \ HDSPMixerMeter.h \ pixmaps.cxx \ pixmaps.h \ - defines.h + defines.h \ + channelmap.h + From 12931e959523c9b487be953da097dc820c29f6d3 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Fri, 28 Jan 2011 16:13:36 +0100 Subject: [PATCH 011/166] Release v1.0.24.1 Signed-off-by: Jaroslav Kysela --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 1099e86..9ed3d65 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION = 1.0.24 +VERSION = 1.0.24.1 TOP = . SUBDIRS = ac3dec as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ From f2bb47662d65ecb358f51b66dfd64eed1f38dde1 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Thu, 3 Feb 2011 22:08:04 +0100 Subject: [PATCH 012/166] hdspmixer: Fix detection for non-MADIface RME cards MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When adding RayDAT support, detection for cards like the 9652 was accidently lost. This patch re-adds the missing bits. Signed-off-by: Jörn Nettingsmeier Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/hdspmixer.cxx | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/hdspmixer/src/hdspmixer.cxx b/hdspmixer/src/hdspmixer.cxx index 7fd50e9..2a7c5c9 100644 --- a/hdspmixer/src/hdspmixer.cxx +++ b/hdspmixer/src/hdspmixer.cxx @@ -51,7 +51,23 @@ int main(int argc, char **argv) } else { snd_card_get_longname(card, &name); printf("Card %d : %s\n", card, name); - if (!strncmp(name, "RME MADIface", 12)) { + if (!strncmp(name, "RME Hammerfall DSP + Multiface", 30)) { + printf("Multiface found !\n"); + hdsp_cards[cards] = new HDSPMixerCard(Multiface, card); + cards++; + } else if (!strncmp(name, "RME Hammerfall DSP + Digiface", 29)) { + printf("Digiface found !\n"); + hdsp_cards[cards] = new HDSPMixerCard(Digiface, card); + cards++; + } else if (!strncmp(name, "RME Hammerfall HDSP 9652", 24)) { + printf("HDSP 9652 found !\n"); + hdsp_cards[cards] = new HDSPMixerCard(H9652, card); + cards++; + } else if (!strncmp(name, "RME Hammerfall HDSP 9632", 24)) { + printf("HDSP 9632 found !\n"); + hdsp_cards[cards] = new HDSPMixerCard(H9632, card); + cards++; + } else if (!strncmp(name, "RME MADIface", 12)) { printf("RME MADIface found !\n"); hdsp_cards[cards] = new HDSPMixerCard(HDSPeMADI, card); cards++; From d0d9470deeb06d1cc5405e37695229db68cde3bd Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Thu, 3 Feb 2011 22:43:34 +0100 Subject: [PATCH 013/166] hdspmixer: retab and reindent code. Something seriously was wrong, probably different patches with different tabwidth levels. I switched to spaces to avoid ambiguity and let vim reindent everything. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/hdspmixer.cxx | 58 ++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/hdspmixer/src/hdspmixer.cxx b/hdspmixer/src/hdspmixer.cxx index 2a7c5c9..49a9985 100644 --- a/hdspmixer/src/hdspmixer.cxx +++ b/hdspmixer/src/hdspmixer.cxx @@ -39,18 +39,18 @@ int main(int argc, char **argv) char *name; int card; int cards = 0; - + card = -1; printf("\nHDSPMixer %s - Copyright (C) 2003 Thomas Charbonnel \n", VERSION); printf("This program comes with ABSOLUTELY NO WARRANTY\n"); printf("HDSPMixer is free software, see the file COPYING for details\n\n"); printf("Looking for RME cards :\n"); while (snd_card_next(&card) >= 0) { - if (card < 0) { - break; - } else { - snd_card_get_longname(card, &name); - printf("Card %d : %s\n", card, name); + if (card < 0) { + break; + } else { + snd_card_get_longname(card, &name); + printf("Card %d : %s\n", card, name); if (!strncmp(name, "RME Hammerfall DSP + Multiface", 30)) { printf("Multiface found !\n"); hdsp_cards[cards] = new HDSPMixerCard(Multiface, card); @@ -67,34 +67,34 @@ int main(int argc, char **argv) printf("HDSP 9632 found !\n"); hdsp_cards[cards] = new HDSPMixerCard(H9632, card); cards++; - } else if (!strncmp(name, "RME MADIface", 12)) { - printf("RME MADIface found !\n"); - hdsp_cards[cards] = new HDSPMixerCard(HDSPeMADI, card); - cards++; - } else if (!strncmp(name, "RME MADI", 8)) { - printf("RME MADI found !\n"); - hdsp_cards[cards] = new HDSPMixerCard(HDSPeMADI, card); - cards++; - } else if (!strncmp(name, "RME RayDAT", 10)) { - printf("RME RayDAT found !\n"); - hdsp_cards[cards] = new HDSPMixerCard(HDSPeRayDAT, card); - cards++; - } else if (!strncmp(name, "RME AIO", 7)) { - printf("RME AIO found !\n"); - hdsp_cards[cards] = new HDSPMixerCard(HDSPeAIO, card); - cards++; - } else if (!strncmp(name, "RME Hammerfall DSP", 18)) { - printf("Uninitialized HDSP card found.\nUse hdsploader to upload configuration data to the card.\n"); - } - } + } else if (!strncmp(name, "RME MADIface", 12)) { + printf("RME MADIface found !\n"); + hdsp_cards[cards] = new HDSPMixerCard(HDSPeMADI, card); + cards++; + } else if (!strncmp(name, "RME MADI", 8)) { + printf("RME MADI found !\n"); + hdsp_cards[cards] = new HDSPMixerCard(HDSPeMADI, card); + cards++; + } else if (!strncmp(name, "RME RayDAT", 10)) { + printf("RME RayDAT found !\n"); + hdsp_cards[cards] = new HDSPMixerCard(HDSPeRayDAT, card); + cards++; + } else if (!strncmp(name, "RME AIO", 7)) { + printf("RME AIO found !\n"); + hdsp_cards[cards] = new HDSPMixerCard(HDSPeAIO, card); + cards++; + } else if (!strncmp(name, "RME Hammerfall DSP", 18)) { + printf("Uninitialized HDSP card found.\nUse hdsploader to upload configuration data to the card.\n"); + } + } } free(name); if (!cards) { - printf("No RME cards found.\n"); - exit(EXIT_FAILURE); + printf("No RME cards found.\n"); + exit(EXIT_FAILURE); } for (int i = cards; i < 3; ++i) { - hdsp_cards[i] = NULL; + hdsp_cards[i] = NULL; } printf("%d RME cards %s found.\n", cards, (cards > 1) ? "cards" : "card"); window = new HDSPMixerWindow(0, 0, hdsp_cards[0]->window_width, hdsp_cards[0]->window_height, "HDSPMixer", hdsp_cards[0], hdsp_cards[1], hdsp_cards[2]); From 4c63a6b7beec6d9402b5e3fd8a5a075e436f6055 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Thu, 3 Feb 2011 22:43:35 +0100 Subject: [PATCH 014/166] hdspmixer: Improve readability. Group the statements into logical blocks. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/hdspmixer.cxx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hdspmixer/src/hdspmixer.cxx b/hdspmixer/src/hdspmixer.cxx index 49a9985..7e83c23 100644 --- a/hdspmixer/src/hdspmixer.cxx +++ b/hdspmixer/src/hdspmixer.cxx @@ -45,6 +45,7 @@ int main(int argc, char **argv) printf("This program comes with ABSOLUTELY NO WARRANTY\n"); printf("HDSPMixer is free software, see the file COPYING for details\n\n"); printf("Looking for RME cards :\n"); + while (snd_card_next(&card) >= 0) { if (card < 0) { break; @@ -88,17 +89,21 @@ int main(int argc, char **argv) } } } + free(name); if (!cards) { printf("No RME cards found.\n"); exit(EXIT_FAILURE); } + for (int i = cards; i < 3; ++i) { hdsp_cards[i] = NULL; } + printf("%d RME cards %s found.\n", cards, (cards > 1) ? "cards" : "card"); window = new HDSPMixerWindow(0, 0, hdsp_cards[0]->window_width, hdsp_cards[0]->window_height, "HDSPMixer", hdsp_cards[0], hdsp_cards[1], hdsp_cards[2]); Fl::visual(FL_DOUBLE|FL_INDEX); window->show(argc, argv); + return Fl::run(); } From 5d4bcc44ce054cedaa6f998bcb6a7c0746d19f69 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Thu, 3 Feb 2011 22:43:36 +0100 Subject: [PATCH 015/166] hdspmixer: Beautification; Lower nesting depth Exit the loop if card < 0. No need to nest the actual code in the else branch. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/hdspmixer.cxx | 76 ++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/hdspmixer/src/hdspmixer.cxx b/hdspmixer/src/hdspmixer.cxx index 7e83c23..6d85062 100644 --- a/hdspmixer/src/hdspmixer.cxx +++ b/hdspmixer/src/hdspmixer.cxx @@ -49,45 +49,45 @@ int main(int argc, char **argv) while (snd_card_next(&card) >= 0) { if (card < 0) { break; - } else { - snd_card_get_longname(card, &name); - printf("Card %d : %s\n", card, name); - if (!strncmp(name, "RME Hammerfall DSP + Multiface", 30)) { - printf("Multiface found !\n"); - hdsp_cards[cards] = new HDSPMixerCard(Multiface, card); - cards++; - } else if (!strncmp(name, "RME Hammerfall DSP + Digiface", 29)) { - printf("Digiface found !\n"); - hdsp_cards[cards] = new HDSPMixerCard(Digiface, card); - cards++; - } else if (!strncmp(name, "RME Hammerfall HDSP 9652", 24)) { - printf("HDSP 9652 found !\n"); - hdsp_cards[cards] = new HDSPMixerCard(H9652, card); - cards++; - } else if (!strncmp(name, "RME Hammerfall HDSP 9632", 24)) { - printf("HDSP 9632 found !\n"); - hdsp_cards[cards] = new HDSPMixerCard(H9632, card); - cards++; - } else if (!strncmp(name, "RME MADIface", 12)) { - printf("RME MADIface found !\n"); - hdsp_cards[cards] = new HDSPMixerCard(HDSPeMADI, card); - cards++; - } else if (!strncmp(name, "RME MADI", 8)) { - printf("RME MADI found !\n"); - hdsp_cards[cards] = new HDSPMixerCard(HDSPeMADI, card); - cards++; - } else if (!strncmp(name, "RME RayDAT", 10)) { - printf("RME RayDAT found !\n"); - hdsp_cards[cards] = new HDSPMixerCard(HDSPeRayDAT, card); - cards++; - } else if (!strncmp(name, "RME AIO", 7)) { - printf("RME AIO found !\n"); - hdsp_cards[cards] = new HDSPMixerCard(HDSPeAIO, card); - cards++; - } else if (!strncmp(name, "RME Hammerfall DSP", 18)) { - printf("Uninitialized HDSP card found.\nUse hdsploader to upload configuration data to the card.\n"); - } } + + snd_card_get_longname(card, &name); + printf("Card %d : %s\n", card, name); + if (!strncmp(name, "RME Hammerfall DSP + Multiface", 30)) { + printf("Multiface found !\n"); + hdsp_cards[cards] = new HDSPMixerCard(Multiface, card); + cards++; + } else if (!strncmp(name, "RME Hammerfall DSP + Digiface", 29)) { + printf("Digiface found !\n"); + hdsp_cards[cards] = new HDSPMixerCard(Digiface, card); + cards++; + } else if (!strncmp(name, "RME Hammerfall HDSP 9652", 24)) { + printf("HDSP 9652 found !\n"); + hdsp_cards[cards] = new HDSPMixerCard(H9652, card); + cards++; + } else if (!strncmp(name, "RME Hammerfall HDSP 9632", 24)) { + printf("HDSP 9632 found !\n"); + hdsp_cards[cards] = new HDSPMixerCard(H9632, card); + cards++; + } else if (!strncmp(name, "RME MADIface", 12)) { + printf("RME MADIface found !\n"); + hdsp_cards[cards] = new HDSPMixerCard(HDSPeMADI, card); + cards++; + } else if (!strncmp(name, "RME MADI", 8)) { + printf("RME MADI found !\n"); + hdsp_cards[cards] = new HDSPMixerCard(HDSPeMADI, card); + cards++; + } else if (!strncmp(name, "RME RayDAT", 10)) { + printf("RME RayDAT found !\n"); + hdsp_cards[cards] = new HDSPMixerCard(HDSPeRayDAT, card); + cards++; + } else if (!strncmp(name, "RME AIO", 7)) { + printf("RME AIO found !\n"); + hdsp_cards[cards] = new HDSPMixerCard(HDSPeAIO, card); + cards++; + } else if (!strncmp(name, "RME Hammerfall DSP", 18)) { + printf("Uninitialized HDSP card found.\nUse hdsploader to upload configuration data to the card.\n"); + } } free(name); From cef20c040c962e3183e20093478d30f2ffc1ee46 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Thu, 3 Feb 2011 22:43:37 +0100 Subject: [PATCH 016/166] hdspmixer: Break overlong line and don't plenken. Pure code beautification, just in case somebody ever needs to touch this again. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/hdspmixer.cxx | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/hdspmixer/src/hdspmixer.cxx b/hdspmixer/src/hdspmixer.cxx index 6d85062..866afda 100644 --- a/hdspmixer/src/hdspmixer.cxx +++ b/hdspmixer/src/hdspmixer.cxx @@ -44,7 +44,7 @@ int main(int argc, char **argv) printf("\nHDSPMixer %s - Copyright (C) 2003 Thomas Charbonnel \n", VERSION); printf("This program comes with ABSOLUTELY NO WARRANTY\n"); printf("HDSPMixer is free software, see the file COPYING for details\n\n"); - printf("Looking for RME cards :\n"); + printf("Looking for RME cards:\n"); while (snd_card_next(&card) >= 0) { if (card < 0) { @@ -52,37 +52,37 @@ int main(int argc, char **argv) } snd_card_get_longname(card, &name); - printf("Card %d : %s\n", card, name); + printf("Card %d: %s\n", card, name); if (!strncmp(name, "RME Hammerfall DSP + Multiface", 30)) { - printf("Multiface found !\n"); + printf("Multiface found!\n"); hdsp_cards[cards] = new HDSPMixerCard(Multiface, card); cards++; } else if (!strncmp(name, "RME Hammerfall DSP + Digiface", 29)) { - printf("Digiface found !\n"); + printf("Digiface found!\n"); hdsp_cards[cards] = new HDSPMixerCard(Digiface, card); cards++; } else if (!strncmp(name, "RME Hammerfall HDSP 9652", 24)) { - printf("HDSP 9652 found !\n"); + printf("HDSP 9652 found!\n"); hdsp_cards[cards] = new HDSPMixerCard(H9652, card); cards++; } else if (!strncmp(name, "RME Hammerfall HDSP 9632", 24)) { - printf("HDSP 9632 found !\n"); + printf("HDSP 9632 found!\n"); hdsp_cards[cards] = new HDSPMixerCard(H9632, card); cards++; } else if (!strncmp(name, "RME MADIface", 12)) { - printf("RME MADIface found !\n"); + printf("RME MADIface found!\n"); hdsp_cards[cards] = new HDSPMixerCard(HDSPeMADI, card); cards++; } else if (!strncmp(name, "RME MADI", 8)) { - printf("RME MADI found !\n"); + printf("RME MADI found!\n"); hdsp_cards[cards] = new HDSPMixerCard(HDSPeMADI, card); cards++; } else if (!strncmp(name, "RME RayDAT", 10)) { - printf("RME RayDAT found !\n"); + printf("RME RayDAT found!\n"); hdsp_cards[cards] = new HDSPMixerCard(HDSPeRayDAT, card); cards++; } else if (!strncmp(name, "RME AIO", 7)) { - printf("RME AIO found !\n"); + printf("RME AIO found!\n"); hdsp_cards[cards] = new HDSPMixerCard(HDSPeAIO, card); cards++; } else if (!strncmp(name, "RME Hammerfall DSP", 18)) { @@ -101,7 +101,9 @@ int main(int argc, char **argv) } printf("%d RME cards %s found.\n", cards, (cards > 1) ? "cards" : "card"); - window = new HDSPMixerWindow(0, 0, hdsp_cards[0]->window_width, hdsp_cards[0]->window_height, "HDSPMixer", hdsp_cards[0], hdsp_cards[1], hdsp_cards[2]); + window = new HDSPMixerWindow(0, 0, hdsp_cards[0]->window_width, + hdsp_cards[0]->window_height, "HDSPMixer", hdsp_cards[0], + hdsp_cards[1], hdsp_cards[2]); Fl::visual(FL_DOUBLE|FL_INDEX); window->show(argc, argv); From 69991756aa544021bff485eae64c02ee674c3e30 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Mon, 7 Feb 2011 18:55:25 +0100 Subject: [PATCH 017/166] hdspmixer: Add RME HDSPe AES and AES32 support. Code provided by Fredrik Lingvall It seems the PCIe (AES) and PCI (AES32) versions behave the same, so we can kill two birds with one stone. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerCard.cxx | 22 ++++++++++++++++++++++ hdspmixer/src/HDSPMixerOutput.cxx | 7 +++++++ hdspmixer/src/HDSPMixerSelector.cxx | 8 ++++++++ hdspmixer/src/HDSPMixerWindow.cxx | 10 ++++++++++ hdspmixer/src/defines.h | 1 + hdspmixer/src/hdspmixer.cxx | 4 ++++ 6 files changed, 52 insertions(+) diff --git a/hdspmixer/src/HDSPMixerCard.cxx b/hdspmixer/src/HDSPMixerCard.cxx index 5f923ac..c0d38b8 100644 --- a/hdspmixer/src/HDSPMixerCard.cxx +++ b/hdspmixer/src/HDSPMixerCard.cxx @@ -52,6 +52,16 @@ static char dest_map_madi_ss[32] = { 48, 50, 52, 54, 56, 58, 60, 62 }; +static char channel_map_aes[16] = { + 0, 1, 2, 3, 4, 5, 6, 7, + 9, 10, 11, 12, 13, 14, 15 +}; + + +static char dest_map_aes[8] = { + 0, 2, 4, 6, 8, 10, 12, 14 +}; + static char dest_map_raydat_ss[18] = { 4, 6, 8, 10, @@ -466,6 +476,18 @@ void HDSPMixerCard::adjustSettings() { break; } + } else if (HDSP_AES == type) { + playbacks_offset = 64; /* FL not sure about this one? */ + + /* 16 channels for all modes */ + channels_input = 16; + channels_playback = 16; + channel_map_input = channel_map_aes; + channel_map_playback = channel_map_aes; + dest_map = dest_map_aes; + meter_map_input = channel_map_aes; + meter_map_playback = channel_map_aes; + } else if (HDSPeRayDAT == type) { playbacks_offset = 64; diff --git a/hdspmixer/src/HDSPMixerOutput.cxx b/hdspmixer/src/HDSPMixerOutput.cxx index 9dc5457..cd9122f 100644 --- a/hdspmixer/src/HDSPMixerOutput.cxx +++ b/hdspmixer/src/HDSPMixerOutput.cxx @@ -45,6 +45,11 @@ static char *labels_madi_qs[16] = { }; +static char *labels_aes[16] = { + "AES 1", "AES 2", "AES 3", "AES 4", "AES 5", "AES 6", "AES 7", "AES 8", + "AES 9", "AES 10", "AES 11", "AES 12", "AES 13", "AES 14", "AES 15", "AES 16" +}; + static char *labels_raydat_ss[36] = { "A1.1", "A1.2", "A1.3", "A1.4", "A1.5", "A1.6", "A1.7", "A1.8", "A2.1", "A2.2", "A2.3", "A2.4", "A2.5", "A2.6", "A2.7", "A2.8", @@ -226,6 +231,8 @@ void HDSPMixerOutput::setLabels() labels_input = labels_playback = labels_madi_qs; break; } + } else if (HDSP_AES == type) { + labels_input = labels_playback = labels_aes; } else if (HDSPeAIO == type) { switch (sm) { case 0: diff --git a/hdspmixer/src/HDSPMixerSelector.cxx b/hdspmixer/src/HDSPMixerSelector.cxx index 8ac0ad3..23cb744 100644 --- a/hdspmixer/src/HDSPMixerSelector.cxx +++ b/hdspmixer/src/HDSPMixerSelector.cxx @@ -45,6 +45,11 @@ static char *destinations_madi_qs[8] = { }; +static char *destinations_aes[8] = { + "AES 1+2", "AES 3+4", "AES 5+6", "AES 7+8", + "AES 9+10", "AES 11+12", "AES 13+14", "AES 15+16", +}; + static char *destinations_raydat_ss[18] = { "A1 1+2", "A1 3+4", "A1 5+6", "A1 7+8", @@ -291,6 +296,9 @@ void HDSPMixerSelector::setLabels() destinations = destinations_madi_qs; break; } + } else if (HDSP_AES == type) { + max_dest = 8; + destinations = destinations_aes; } else if (HDSPeAIO == type) { switch (sm) { case 0: diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index e7d4e85..5ac3794 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -46,6 +46,7 @@ static void readregisters_cb(void *arg) if ((HDSPeMADI == w->cards[w->current_card]->type) || (HDSPeAIO == w->cards[w->current_card]->type) || + (HDSP_AES == w->cards[w->current_card]->type) || (HDSPeRayDAT == w->cards[w->current_card]->type)) { if ((err = snd_hwdep_ioctl(hw, SNDRV_HDSPM_IOCTL_GET_PEAK_RMS, (void *)&hdspm_peak_rms)) < 0) { fprintf(stderr, "HwDep ioctl failed. Metering stopped\n"); @@ -552,6 +553,15 @@ void HDSPMixerWindow::restoreDefaults(int card) maxdest[2] = 8; num_modes = 3; break; + case HDSP_AES: /* these cards support full channel count at all modes */ + chnls[0] = 16; + chnls[1] = 16; + chnls[2] = 16; + maxdest[0] = 16; + maxdest[1] = 16; + maxdest[2] = 16; + num_modes = 3; + break; case HDSPeAIO: chnls[0] = 14; chnls[1] = 10; diff --git a/hdspmixer/src/defines.h b/hdspmixer/src/defines.h index 33559ab..7fcb4d3 100644 --- a/hdspmixer/src/defines.h +++ b/hdspmixer/src/defines.h @@ -27,6 +27,7 @@ #define HDSPeMADI 10 #define HDSPeRayDAT 11 #define HDSPeAIO 12 +#define HDSP_AES 13 /* both AES32 and HDSPeAES? */ #define HDSP_MAX_CHANNELS 64 #define HDSP_MAX_DEST 32 diff --git a/hdspmixer/src/hdspmixer.cxx b/hdspmixer/src/hdspmixer.cxx index 866afda..a020b93 100644 --- a/hdspmixer/src/hdspmixer.cxx +++ b/hdspmixer/src/hdspmixer.cxx @@ -77,6 +77,10 @@ int main(int argc, char **argv) printf("RME MADI found!\n"); hdsp_cards[cards] = new HDSPMixerCard(HDSPeMADI, card); cards++; + } else if (!strncmp(name, "RME AES32", 8)) { + printf("RME AES32 or HDSPe AES found!\n"); + hdsp_cards[cards] = new HDSPMixerCard(HDSP_AES, card); + cards++; } else if (!strncmp(name, "RME RayDAT", 10)) { printf("RME RayDAT found!\n"); hdsp_cards[cards] = new HDSPMixerCard(HDSPeRayDAT, card); From 0201fd1778fb536b2b1f2f5305e64a162667769c Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Mon, 7 Feb 2011 18:55:26 +0100 Subject: [PATCH 018/166] hdspmixer: Style and purity fixes for name arrays. Contribution by Fredrik Lingvall Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerSelector.cxx | 118 +++++++++++++++------------- 1 file changed, 62 insertions(+), 56 deletions(-) diff --git a/hdspmixer/src/HDSPMixerSelector.cxx b/hdspmixer/src/HDSPMixerSelector.cxx index 23cb744..bc18f60 100644 --- a/hdspmixer/src/HDSPMixerSelector.cxx +++ b/hdspmixer/src/HDSPMixerSelector.cxx @@ -36,15 +36,14 @@ static char *destinations_madi_ds[16] = { "1+2", "3+4", "5+6", "7+8", "9+10", "11+12", "13+14", "15+16", "17+18", "19+20", "21+22", "23+24", - "25+26", "27+28", "29+30", "31+32", + "25+26", "27+28", "29+30", "31+32" }; static char *destinations_madi_qs[8] = { "1+2", "3+4", "5+6", "7+8", - "9+10", "11+12", "13+14", "15+16", + "9+10", "11+12", "13+14", "15+16" }; - static char *destinations_aes[8] = { "AES 1+2", "AES 3+4", "AES 5+6", "AES 7+8", "AES 9+10", "AES 11+12", "AES 13+14", "AES 15+16", @@ -82,73 +81,80 @@ static char *destinations_raydat_qs[6] = { static char *destinations_aio_ss[8] = { "AN 1+2", "AES", - "SPDIF", + "SPDIF", "A 1+2", "A 3+4", "A 5+6", "A 7+8", - "Phones", + "Phones" }; static char *destinations_aio_ds[6] = { "AN 1+2", "AES", - "SPDIF", - "A 1+2", "A 3+4" - "Phones", + "SPDIF", + "A 1+2", "A 3+4", + "Phones" }; static char *destinations_aio_qs[5] = { "AN 1+2", "AES", - "SPDIF", - "A 1+2" - "Phones", + "SPDIF", + "A 1+2", + "Phones" }; - static char *destinations_mf_ss[10] = { - "AN 1+2", "AN 3+4", "AN 5+6", "AN 7+8", - "A 1+2", "A 3+4", "A 5+6", "A 7+8", - "SPDIF", "Analog" - }; - static char *destinations_mf_ds[8] = { - "AN 1+2", "AN 3+4", "AN 5+6", "AN 7+8", - "A 1+2", "A 3+4", - "SPDIF", "Analog" - }; - static char *destinations_df_ss[14] = { - "A1 1+2", "A1 3+4", "A1 5+6", "A1 7+8", - "A2 1+2", "A2 3+4", "A2 5+6", "A2 7+8", - "A3 1+2", "A3 3+4", "A3 5+6", "A3 7+8", - "SPDIF", "Analog" - }; - static char *destinations_df_ds[8] = { - "A1 1+2", "A1 3+4", - "A2 1+2", "A2 3+4", - "A3 1+2", "A3 3+4", - "SPDIF", "Analog" - }; - static char *destinations_h9652_ss[13] = { - "A1 1+2", "A1 3+4", "A1 5+6", "A1 7+8", - "A2 1+2", "A2 3+4", "A2 5+6", "A2 7+8", - "A3 1+2", "A3 3+4", "A3 5+6", "A3 7+8", - "SPDIF" - }; +static char *destinations_mf_ss[10] = { + "AN 1+2", "AN 3+4", "AN 5+6", "AN 7+8", + "A 1+2", "A 3+4", "A 5+6", "A 7+8", + "SPDIF", "Analog" +}; - static char *destinations_h9652_ds[7] = { - "A1 1+2", "A1 3+4", - "A2 1+2", "A2 3+4", - "A3 1+2", "A3 3+4", - "SPDIF" - }; - static char *destinations_h9632_ss[8] = { - "A 1+2", "A 3+4", "A 5+6", "A 7+8", - "SPDIF", "AN 1+2", "AN 3+4", "AN 5+6" - }; - static char *destinations_h9632_ds[6] = { - "A 1+2", "A 3+4", - "SPDIF", "AN 1+2", "AN 3+4", "AN 5+6" - }; - static char *destinations_h9632_qs[4] = { - "SPDIF", "AN 1+2", "AN 3+4", "AN 5+6" - }; +static char *destinations_mf_ds[8] = { + "AN 1+2", "AN 3+4", "AN 5+6", "AN 7+8", + "A 1+2", "A 3+4", + "SPDIF", "Analog" +}; + +static char *destinations_df_ss[14] = { + "A1 1+2", "A1 3+4", "A1 5+6", "A1 7+8", + "A2 1+2", "A2 3+4", "A2 5+6", "A2 7+8", + "A3 1+2", "A3 3+4", "A3 5+6", "A3 7+8", + "SPDIF", "Analog" +}; + +static char *destinations_df_ds[8] = { + "A1 1+2", "A1 3+4", + "A2 1+2", "A2 3+4", + "A3 1+2", "A3 3+4", + "SPDIF", "Analog" +}; + +static char *destinations_h9652_ss[13] = { + "A1 1+2", "A1 3+4", "A1 5+6", "A1 7+8", + "A2 1+2", "A2 3+4", "A2 5+6", "A2 7+8", + "A3 1+2", "A3 3+4", "A3 5+6", "A3 7+8", + "SPDIF" +}; + +static char *destinations_h9652_ds[7] = { + "A1 1+2", "A1 3+4", + "A2 1+2", "A2 3+4", + "A3 1+2", "A3 3+4", + "SPDIF" +}; + +static char *destinations_h9632_ss[8] = { + "A 1+2", "A 3+4", "A 5+6", "A 7+8", + "SPDIF", "AN 1+2", "AN 3+4", "AN 5+6" +}; + +static char *destinations_h9632_ds[6] = { + "A 1+2", "A 3+4", + "SPDIF", "AN 1+2", "AN 3+4", "AN 5+6" +}; + +static char *destinations_h9632_qs[4] = { + "SPDIF", "AN 1+2", "AN 3+4", "AN 5+6" +}; HDSPMixerSelector::HDSPMixerSelector(int x, int y, int w, int h):Fl_Menu_(x, y, w, h) { From 9ea2fb1f880667388435f4983f6d727d6b55875a Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Thu, 24 Feb 2011 21:33:26 +0100 Subject: [PATCH 019/166] hdspmixer: Improve code coherency Move channelmappings into one place (channelmap.h). Also, use "aes32" when referring to the card itself to avoid confusion and to be coherent with the remaining naming scheme. This work has mainly been done by Fredrik Lingvall. Signed-off-by: Fredrik Lingvall Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerAboutText.cxx | 8 +- hdspmixer/src/HDSPMixerCard.cxx | 163 ++----------------- hdspmixer/src/HDSPMixerOutput.cxx | 4 +- hdspmixer/src/HDSPMixerSelector.cxx | 7 +- hdspmixer/src/channelmap.h | 234 +++++++++++++++++++++++++-- hdspmixer/src/defines.h | 2 +- hdspmixer/src/hdspmixer.cxx | 3 + hdspmixer/src/mappings.h | 93 ----------- 8 files changed, 250 insertions(+), 264 deletions(-) delete mode 100644 hdspmixer/src/mappings.h diff --git a/hdspmixer/src/HDSPMixerAboutText.cxx b/hdspmixer/src/HDSPMixerAboutText.cxx index d628d00..40bd862 100644 --- a/hdspmixer/src/HDSPMixerAboutText.cxx +++ b/hdspmixer/src/HDSPMixerAboutText.cxx @@ -2,6 +2,9 @@ * HDSPMixer * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) + * + * Copyright (C) 2011 Adrian Knoth (adi@drcomp.erfurt.thur.de) + * Fredrik Lingvall (fredrik.lingvall@gmail.com) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,7 +26,10 @@ HDSPMixerAboutText::HDSPMixerAboutText(int x, int y, int w, int h):Fl_Widget(x, y, w, h, "About Text") { - text = "HDSPMixer " VERSION " (C) 2003 Thomas Charbonnel \n (C) 2009 Florian Faber \n (C) 2011 Adrian Knoth \n\n" + text = "HDSPMixer " VERSION " (C) 2003 Thomas Charbonnel \n" + "(C) 2009 Florian Faber \n" + "(C) 2011 Adrian Knoth \n" + "(C) 2011 Fredrik lingvall \n\n" "Bitmaps by Ralf Brunner\n" "Many thanks to Martin Björnsen, Matthias Carstens and Paul Davis\n\n" "This Program is free software; you can redistribute it and/or modify\n" diff --git a/hdspmixer/src/HDSPMixerCard.cxx b/hdspmixer/src/HDSPMixerCard.cxx index c0d38b8..eb51155 100644 --- a/hdspmixer/src/HDSPMixerCard.cxx +++ b/hdspmixer/src/HDSPMixerCard.cxx @@ -2,6 +2,9 @@ * HDSPMixer * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) + * + * Copyright (C) 2011 Adrian Knoth (adi@drcomp.erfurt.thur.de) + * Fredrik Lingvall (fredrik.lingvall@gmail.com) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,144 +24,6 @@ #pragma implementation #include "HDSPMixerCard.h" -static char channel_map_df_ss[26] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25 -}; - -static char channel_map_mf_ss[26] = { - 0, 1, 2, 3, 4, 5, 6, 7, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, - -1, -1, -1, -1, -1, -1, -1, -1 -}; - -static char meter_map_ds[26] = { - 0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, - 24, 25, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 -}; - -static char channel_map_ds[26] = { - 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, - 24, 25, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 -}; - -static char dest_map_madi_ss[32] = { - 0, 2, 4, 6, 8, 10, 12, 14, - 16, 18, 20, 22, 24, 26, 28, 30, - 32, 34, 36, 38, 40, 42, 44, 46, - 48, 50, 52, 54, 56, 58, 60, 62 -}; - -static char channel_map_aes[16] = { - 0, 1, 2, 3, 4, 5, 6, 7, - 9, 10, 11, 12, 13, 14, 15 -}; - - -static char dest_map_aes[8] = { - 0, 2, 4, 6, 8, 10, 12, 14 -}; - - -static char dest_map_raydat_ss[18] = { - 4, 6, 8, 10, - 12, 14, 16, 18, - 20, 22, 24, 26, - 28, 30, 32, 34, - 0, 2 -}; - -static char dest_map_raydat_ds[10] = { - 4, 6, - 8, 10, - 12, 14, - 16, 18, - 0, 2 -}; - -static char dest_map_raydat_qs[6] = { - 4, - 6, - 8, - 10, - 0, 2 -}; - - - -static char dest_map_aio_ss[8] = { - 0, // Analogue - 8, // AES - 10, // SPDIF - 12, 14, 16, 18, // ADAT - 6 // Phones -}; - - -static char dest_map_aio_ds[6] = { - 0, // Analogue - 8, // AES - 10, // SPDIF - 12, 16, // ADAT - 6 // Phones -}; - -static char dest_map_aio_qs[5] = { - 0, // Analogue - 8, // AES - 10, // SPDIF - 12, // ADAT - 6 // Phone -}; - - -static char dest_map_mf_ss[10] = { - 0, 2, 4, 6, 16, 18, 20, 22, 24, 26 -}; - -static char dest_map_ds[8] = { - 0, 2, 8, 10, 16, 18, 24, 26 -}; - -static char dest_map_df_ss[14] = { - 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26 -}; - -static char dest_map_h9652_ss[13] = { - 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24 -}; - -static char dest_map_h9652_ds[7] = { - 0, 2, 8, 10, 16, 18, 24 -}; - -static char dest_map_h9632_ss[8] = { - 0, 2, 4, 6, 8, 10, 12, 14 -}; - -static char dest_map_h9632_ds[6] = { - 0, 2, 8, 10, 12, 14 -}; - -static char dest_map_h9632_qs[4] = { - 8, 10, 12, 14 -}; - -static char channel_map_h9632_ss[16] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 -}; - -static char channel_map_h9632_ds[12] = { - 0, 1, 2, 3, 8, 9, 10, 11, 12, 13, 14, 15 -}; - -static char channel_map_h9632_qs[8] = { - 8, 9, 10, 11, 12, 13, 14, 15 -}; - static void alsactl_cb(snd_async_handler_t *handler) { int err, clock_value; @@ -426,19 +291,19 @@ void HDSPMixerCard::adjustSettings() { case 0: // SS channels_input = channels_playback = 64; channel_map_input = channel_map_playback = channel_map_unity_ss; - dest_map = dest_map_madi_ss; + dest_map = dest_map_unity; meter_map_input = meter_map_playback = channel_map_unity_ss; break; case 1: // DS channels_input = channels_playback = 32; channel_map_input = channel_map_playback = channel_map_unity_ss; - dest_map = dest_map_madi_ss; + dest_map = dest_map_unity; meter_map_input = meter_map_playback = channel_map_unity_ss; break; case 2: // QS channels_input = channels_playback = 16; channel_map_input = channel_map_playback = channel_map_unity_ss; - dest_map = dest_map_madi_ss; + dest_map = dest_map_unity; meter_map_input = meter_map_playback = channel_map_unity_ss; break; } @@ -467,7 +332,7 @@ void HDSPMixerCard::adjustSettings() { break; case 2: // QS channels_input = 8; - channels_playback =10; + channels_playback = 10; channel_map_input = channel_map_aio_in_qs; channel_map_playback = channel_map_aio_out_qs; dest_map = dest_map_aio_qs; @@ -477,16 +342,16 @@ void HDSPMixerCard::adjustSettings() { } } else if (HDSP_AES == type) { - playbacks_offset = 64; /* FL not sure about this one? */ + playbacks_offset = 64; /* not sure about this one? */ /* 16 channels for all modes */ channels_input = 16; channels_playback = 16; - channel_map_input = channel_map_aes; - channel_map_playback = channel_map_aes; - dest_map = dest_map_aes; - meter_map_input = channel_map_aes; - meter_map_playback = channel_map_aes; + channel_map_input = channel_map_aes32; + channel_map_playback = channel_map_aes32; + dest_map = dest_map_aes32; + meter_map_input = channel_map_aes32; + meter_map_playback = channel_map_aes32; } else if (HDSPeRayDAT == type) { playbacks_offset = 64; @@ -508,7 +373,7 @@ void HDSPMixerCard::adjustSettings() { break; case 2: // QS channels_input = 12; - channels_playback =12; + channels_playback = 12; channel_map_input = channel_map_playback = channel_map_raydat_qs; dest_map = dest_map_raydat_qs; meter_map_input = meter_map_playback = channel_map_raydat_qs; diff --git a/hdspmixer/src/HDSPMixerOutput.cxx b/hdspmixer/src/HDSPMixerOutput.cxx index cd9122f..dd0c9f8 100644 --- a/hdspmixer/src/HDSPMixerOutput.cxx +++ b/hdspmixer/src/HDSPMixerOutput.cxx @@ -45,7 +45,7 @@ static char *labels_madi_qs[16] = { }; -static char *labels_aes[16] = { +static char *labels_aes32[16] = { "AES 1", "AES 2", "AES 3", "AES 4", "AES 5", "AES 6", "AES 7", "AES 8", "AES 9", "AES 10", "AES 11", "AES 12", "AES 13", "AES 14", "AES 15", "AES 16" }; @@ -232,7 +232,7 @@ void HDSPMixerOutput::setLabels() break; } } else if (HDSP_AES == type) { - labels_input = labels_playback = labels_aes; + labels_input = labels_playback = labels_aes32; } else if (HDSPeAIO == type) { switch (sm) { case 0: diff --git a/hdspmixer/src/HDSPMixerSelector.cxx b/hdspmixer/src/HDSPMixerSelector.cxx index bc18f60..a4156b0 100644 --- a/hdspmixer/src/HDSPMixerSelector.cxx +++ b/hdspmixer/src/HDSPMixerSelector.cxx @@ -3,6 +3,9 @@ * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) * + * Copyright (C) 2011 Adrian Knoth (adi@drcomp.erfurt.thur.de) + * Fredrik Lingvall (fredrik.lingvall@gmail.com) + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -44,7 +47,7 @@ static char *destinations_madi_qs[8] = { "9+10", "11+12", "13+14", "15+16" }; -static char *destinations_aes[8] = { +static char *destinations_aes32[8] = { "AES 1+2", "AES 3+4", "AES 5+6", "AES 7+8", "AES 9+10", "AES 11+12", "AES 13+14", "AES 15+16", }; @@ -304,7 +307,7 @@ void HDSPMixerSelector::setLabels() } } else if (HDSP_AES == type) { max_dest = 8; - destinations = destinations_aes; + destinations = destinations_aes32; } else if (HDSPeAIO == type) { switch (sm) { case 0: diff --git a/hdspmixer/src/channelmap.h b/hdspmixer/src/channelmap.h index de89140..8939b78 100644 --- a/hdspmixer/src/channelmap.h +++ b/hdspmixer/src/channelmap.h @@ -1,6 +1,132 @@ +/* + * HDSPMixer + * + * Copyright (C) 2011 Adrian Knoth (adi@drcomp.erfurt.thur.de) + * Fredrik Lingvall (fredrik.lingvall@gmail.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * + */ + + #ifndef channelmap_H #define channelmap_H +/*** + * + * hdsp cards + * + ***/ + +// Digiface + +static char dest_map_df_ss[14] = { + 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26 +}; + +static char channel_map_df_ss[26] = { + 0, 1, 2, 3, 4, 5, 6, 7, /* ADAT 1 */ + 8, 9, 10, 11, 12, 13, 14, 15, /* ADAT 2 */ + 16, 17, 18, 19, 20, 21, 22, 23, /* ADAT 3 */ + 24, 25 /* SPDIF */ +}; + +// Multiface + +static char dest_map_mf_ss[10] = { + 0, 2, 4, 6, 16, 18, 20, 22, 24, 26 +}; + +static char channel_map_mf_ss[26] = { + 0, 1, 2, 3, 4, 5, 6, 7, /* Line in */ + 16, 17, 18, 19, 20, 21, 22, 23, /* ADAT */ + 24, 25, /* SPDIF */ + -1, -1, -1, -1, -1, -1, -1, -1 +}; + +// Digiface/Multiface + +static char meter_map_ds[26] = { + 0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, + 24, 25, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 +}; + +static char channel_map_ds[26] = { + 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, + 24, 25, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 +}; + +static char dest_map_ds[8] = { + 0, 2, 8, 10, 16, 18, 24, 26 +}; + +// HDSP 9652 + +static char dest_map_h9652_ss[13] = { + 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24 +}; + +static char dest_map_h9652_ds[7] = { + 0, 2, 8, 10, 16, 18, 24 +}; + +// HDSP 9632 + +static char dest_map_h9632_ss[8] = { + 0, 2, 4, 6, 8, 10, 12, 14 +}; + +static char dest_map_h9632_ds[6] = { + 0, 2, 8, 10, 12, 14 +}; + +static char dest_map_h9632_qs[4] = { + 8, 10, 12, 14 +}; + +static char channel_map_h9632_ss[16] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 +}; + +static char channel_map_h9632_ds[12] = { + 0, 1, 2, 3, 8, 9, 10, 11, 12, 13, 14, 15 +}; + +static char channel_map_h9632_qs[8] = { + 8, 9, 10, 11, 12, 13, 14, 15 +}; + + +/*** + * + * hdspm cards + * + ***/ + +// HDSPe MADI and MADIface + +static char dest_map_unity[32] = { + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, + 48, 50, 52, 54, 56, 58, 60, 62 +}; + static char channel_map_unity_ss[HDSPM_MAX_CHANNELS] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, @@ -34,6 +160,32 @@ static char channel_map_unity_qs[HDSPM_MAX_CHANNELS] = { -1, -1, -1, -1, -1, -1, -1, -1, }; +// HDSPe RayDAT + +static char dest_map_raydat_ss[18] = { + 4, 6, 8, 10, + 12, 14, 16, 18, + 20, 22, 24, 26, + 28, 30, 32, 34, + 0, 2 +}; + +static char dest_map_raydat_ds[10] = { + 4, 6, + 8, 10, + 12, 14, + 16, 18, + 0, 2 +}; + +static char dest_map_raydat_qs[6] = { + 4, + 6, + 8, + 10, + 0, 2 +}; + static char channel_map_raydat_ss[HDSPM_MAX_CHANNELS] = { 4, 5, 6, 7, 8, 9, 10, 11, /* ADAT 1 */ 12, 13, 14, 15, 16, 17, 18, 19, /* ADAT 2 */ @@ -78,10 +230,37 @@ static char channel_map_raydat_qs[HDSPM_MAX_CHANNELS] = { -1, -1, -1, -1, -1, -1, -1, -1, }; +// HDSPe AIO + +static char dest_map_aio_ss[8] = { + 0, // Analogue + 8, // AES + 10, // SPDIF + 12, 14, 16, 18, // ADAT + 6 // Phones +}; + + +static char dest_map_aio_ds[6] = { + 0, // Analogue + 8, // AES + 10, // SPDIF + 12, 16, // ADAT + 6 // Phones +}; + +static char dest_map_aio_qs[5] = { + 0, // Analogue + 8, // AES + 10, // SPDIF + 12, // ADAT + 6 // Phone +}; + static char channel_map_aio_in_ss[HDSPM_MAX_CHANNELS] = { 0, 1, /* line in */ - 8, 9, /* aes in, */ - 10, 11, /* spdif in */ + 8, 9, /* AES in, */ + 10, 11, /* SPDIF in */ 12, 13, 14, 15, 16, 17, 18, 19, /* ADAT in */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -94,8 +273,8 @@ static char channel_map_aio_in_ss[HDSPM_MAX_CHANNELS] = { static char channel_map_aio_out_ss[HDSPM_MAX_CHANNELS] = { 0, 1, /* line out */ - 8, 9, /* aes out */ - 10, 11, /* spdif out */ + 8, 9, /* AES out */ + 10, 11, /* SPDIF out */ 12, 13, 14, 15, 16, 17, 18, 19, /* ADAT out */ 6, 7, /* phone out */ -1, -1, -1, -1, -1, -1, -1, -1, @@ -108,9 +287,9 @@ static char channel_map_aio_out_ss[HDSPM_MAX_CHANNELS] = { static char channel_map_aio_in_ds[HDSPM_MAX_CHANNELS] = { 0, 1, /* line in */ - 8, 9, /* aes in */ - 10, 11, /* spdif in */ - 12, 14, 16, 18, /* adat in */ + 8, 9, /* AES in */ + 10, 11, /* SPDIF in */ + 12, 14, 16, 18, /* ADAT in */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -122,9 +301,9 @@ static char channel_map_aio_in_ds[HDSPM_MAX_CHANNELS] = { static char channel_map_aio_out_ds[HDSPM_MAX_CHANNELS] = { 0, 1, /* line out */ - 8, 9, /* aes out */ - 10, 11, /* spdif out */ - 12, 14, 16, 18, /* adat out */ + 8, 9, /* AES out */ + 10, 11, /* SPDIF out */ + 12, 14, 16, 18, /* ADAT out */ 6, 7, /* phone out */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -137,9 +316,9 @@ static char channel_map_aio_out_ds[HDSPM_MAX_CHANNELS] = { static char channel_map_aio_in_qs[HDSPM_MAX_CHANNELS] = { 0, 1, /* line in */ - 8, 9, /* aes in */ - 10, 11, /* spdif in */ - 12, 16, /* adat in */ + 8, 9, /* AES in */ + 10, 11, /* SPDIF in */ + 12, 16, /* ADAT in */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -151,9 +330,9 @@ static char channel_map_aio_in_qs[HDSPM_MAX_CHANNELS] = { static char channel_map_aio_out_qs[HDSPM_MAX_CHANNELS] = { 0, 1, /* line out */ - 8, 9, /* aes out */ - 10, 11, /* spdif out */ - 12, 16, /* adat out */ + 8, 9, /* AES out */ + 10, 11, /* SPDIF out */ + 12, 16, /* ADAT out */ 6, 7, /* phone out */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -164,4 +343,27 @@ static char channel_map_aio_out_qs[HDSPM_MAX_CHANNELS] = { -1, -1, -1, -1, -1, -1, -1, -1 }; +// HDSP AES32 and HDSPe AES + +static char dest_map_aes32[8] = { + 0, 2, 4, 6, 8, 10, 12, 14 +}; + +static char channel_map_aes32[HDSPM_MAX_CHANNELS] = { + 0, 1, /* AES 1 */ + 2, 3, /* AES 2 */ + 4, 5, /* AES 3 */ + 6, 7, /* AES 4 */ + 8, 9, /* AES 5 */ + 10, 11, /* AES 6 */ + 12, 13, /* AES 7 */ + 14, 15, /* AES 8 */ + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 +}; + #endif /* channelmap_H */ diff --git a/hdspmixer/src/defines.h b/hdspmixer/src/defines.h index 7fcb4d3..2065620 100644 --- a/hdspmixer/src/defines.h +++ b/hdspmixer/src/defines.h @@ -27,7 +27,7 @@ #define HDSPeMADI 10 #define HDSPeRayDAT 11 #define HDSPeAIO 12 -#define HDSP_AES 13 /* both AES32 and HDSPeAES? */ +#define HDSP_AES 13 /* both HDSP AES32 and HDSPe AES */ #define HDSP_MAX_CHANNELS 64 #define HDSP_MAX_DEST 32 diff --git a/hdspmixer/src/hdspmixer.cxx b/hdspmixer/src/hdspmixer.cxx index a020b93..d57fe4c 100644 --- a/hdspmixer/src/hdspmixer.cxx +++ b/hdspmixer/src/hdspmixer.cxx @@ -3,6 +3,9 @@ * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) * + * Copyright (C) 2011 Adrian Knoth (adi@drcomp.erfurt.thur.de) + * Fredrik Lingvall (fredrik.lingvall@gmail.com) + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or diff --git a/hdspmixer/src/mappings.h b/hdspmixer/src/mappings.h deleted file mode 100644 index 9589a22..0000000 --- a/hdspmixer/src/mappings.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * HDSPMixer - * - * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef mappings_H -#define mappings_H - -static char channel_map_df_ss[26] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25 -}; - -static char channel_map_mf_ss[26] = { - 0, 1, 2, 3, 4, 5, 6, 7, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, - -1, -1, -1, -1, -1, -1, -1, -1 -}; - -static char meter_map_ds[26] = { - 0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, - 24, 25, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 -}; - -static char channel_map_ds[26] = { - 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, - 24, 25, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 -}; - -static char dest_map_mf_ss[10] = { - 0, 2, 4, 6, 16, 18, 20, 22, 24, 26 -}; - -static char dest_map_ds[8] = { - 0, 2, 8, 10, 16, 18, 24, 26 -}; - -static char dest_map_df_ss[14] = { - 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26 -}; - -static char dest_map_h9652_ss[13] = { - 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24 -}; - -static char dest_map_h9652_ds[7] = { - 0, 2, 8, 10, 16, 18, 24 -}; - -static char dest_map_h9632_ss[8] = { - 0, 2, 4, 6, 8, 10, 12, 14 -}; - -static char dest_map_h9632_ds[6] = { - 0, 2, 8, 10, 12, 14 -}; - -static char dest_map_h9632_qs[4] = { - 8, 10, 12, 14 -}; - -static char channel_map_h9632_ss[16] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 -}; - -static char channel_map_h9632_ds[12] = { - 0, 1, 2, 3, 8, 9, 10, 11, 12, 13, 14, 15 -}; - -static char channel_map_h9632_qs[8] = { - 8, 9, 10, 11, 12, 13, 14, 15 -}; - -#endif - From 073fad25cb1e05c6fa00d9d2f3fb3781156e6988 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Thu, 24 Feb 2011 21:33:27 +0100 Subject: [PATCH 020/166] hdspmixer: Update FSF address. The FSF has moved, so reflect this change in the about dialogue. See also http://www.fsf.org/about/contact/ Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerAboutText.cxx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hdspmixer/src/HDSPMixerAboutText.cxx b/hdspmixer/src/HDSPMixerAboutText.cxx index 40bd862..c8c9b1a 100644 --- a/hdspmixer/src/HDSPMixerAboutText.cxx +++ b/hdspmixer/src/HDSPMixerAboutText.cxx @@ -41,8 +41,9 @@ HDSPMixerAboutText::HDSPMixerAboutText(int x, int y, int w, int h):Fl_Widget(x, "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" "See the GNU General Public License for more details.\n\n" "You should have received a copy of the GNU General Public License\n" - "along with this program; if not, write to the Free Software\n" - "Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n"; + "along with this program; if not, write to the\n" + "Free Software Foundation, Inc., 51 Franklin Street, Suite 500,\n" + "Boston, MA 02110-1335, USA.\n"; } void HDSPMixerAboutText::draw() From 3f34b2c0f2aba38b819d4b05a25b2ff2f090f512 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Thu, 24 Feb 2011 21:33:28 +0100 Subject: [PATCH 021/166] hdspmixer: Increase height of about window. The copyright list got longer, so we need more vertical space. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerWindow.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index 5ac3794..38e7b61 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -716,7 +716,7 @@ HDSPMixerWindow::HDSPMixerWindow(int x, int y, int w, int h, const char *label, scroll->end(); end(); setup = new HDSPMixerSetup(400, 260, "Level Meters Setup", this); - about = new HDSPMixerAbout(360, 260, "About HDSPMixer", this); + about = new HDSPMixerAbout(360, 300, "About HDSPMixer", this); i = 0; while (cards[i] != NULL) { cards[i++]->initializeCard(this); From 3506d3d9a7d13c40f8080bf36e2c745a73310da9 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Thu, 24 Feb 2011 21:33:29 +0100 Subject: [PATCH 022/166] hdspmixer: Bump version number to 1.10 Florian Faber's last hdspmixer64 version was 1.9, so let's make this the successor (contains everything that was in 1.9 and also Fredrik's work on AES(32) support) Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hdspmixer/configure.in b/hdspmixer/configure.in index 8f2c498..1b43bc9 100644 --- a/hdspmixer/configure.in +++ b/hdspmixer/configure.in @@ -1,5 +1,5 @@ AC_INIT(src/hdspmixer.cxx) -AM_INIT_AUTOMAKE(hdspmixer, 1.6) +AM_INIT_AUTOMAKE(hdspmixer, 1.10) AC_PROG_CXX AC_PROG_MAKE_SET From 97e96addffef14f71739bdf1e51030cce854904b Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Thu, 24 Feb 2011 21:33:30 +0100 Subject: [PATCH 023/166] hdspmixer: Fix ALSA snd_ctl_open error when running with three cards. If three (or more) RME cards are installed in one box, hdspmixer will try to open a non-existing 4th card, causing an error in snd_ctl_open and finally terminates itself. cards[] is a static array, and one must not read beyond the last element. The solution is far from elegant, however, it's a rather unintrusive change. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerWindow.cxx | 10 +++++----- hdspmixer/src/HDSPMixerWindow.h | 4 ++-- hdspmixer/src/defines.h | 2 ++ 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index 38e7b61..a2e3db8 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -219,7 +219,7 @@ static void restore_defaults_cb(Fl_Widget *widget, void *arg) snprintf(w->window_title, FL_PATH_MAX, "HDSPMixer"); w->label(w->window_title); w->resetMixer(); - while (w->cards[i] != NULL) { + while (i < MAX_CARDS && w->cards[i] != NULL) { w->restoreDefaults(i++); } w->inputs->buttons->presets->preset_change(1); @@ -408,7 +408,7 @@ void HDSPMixerWindow::load() if ((file = fopen(file_name, "r")) == NULL) { int i = 0; fl_alert("Error opening file %s for reading", file_name); - while (cards[i] != NULL) { + while (i < MAX_CARDS && cards[i] != NULL) { restoreDefaults(i++); } inputs->buttons->presets->preset_change(1); @@ -718,7 +718,7 @@ HDSPMixerWindow::HDSPMixerWindow(int x, int y, int w, int h, const char *label, setup = new HDSPMixerSetup(400, 260, "Level Meters Setup", this); about = new HDSPMixerAbout(360, 300, "About HDSPMixer", this); i = 0; - while (cards[i] != NULL) { + while (i < MAX_CARDS && cards[i] != NULL) { cards[i++]->initializeCard(this); } size_range(MIN_WIDTH, MIN_HEIGHT, cards[current_card]->window_width, cards[current_card]->window_height); @@ -729,7 +729,7 @@ HDSPMixerWindow::HDSPMixerWindow(int x, int y, int w, int h, const char *label, } else { printf("Initializing default presets\n"); i = 0; - while (cards[i] != NULL) { + while (i < MAX_CARDS && cards[i] != NULL) { restoreDefaults(i++); } inputs->buttons->presets->preset_change(1); @@ -738,7 +738,7 @@ HDSPMixerWindow::HDSPMixerWindow(int x, int y, int w, int h, const char *label, Fl::add_handler(handler_cb); Fl::add_timeout(0.030, readregisters_cb, this); i = 0; - while (cards[i] != NULL) + while (i < MAX_CARDS && cards[i] != NULL) inputs->buttons->cardselector->ActivateCard (i++); } diff --git a/hdspmixer/src/HDSPMixerWindow.h b/hdspmixer/src/HDSPMixerWindow.h index f10b729..0eb6f1a 100644 --- a/hdspmixer/src/HDSPMixerWindow.h +++ b/hdspmixer/src/HDSPMixerWindow.h @@ -73,8 +73,8 @@ public: Fl_Scroll *scroll; HDSPMixerSetup *setup; HDSPMixerAbout *about; - HDSPMixerPresetData *data[3][3][8]; /* data[card number][mode(ss/ds/qs)][preset number] */ - HDSPMixerCard *cards[3]; + HDSPMixerPresetData *data[MAX_CARDS][3][8]; /* data[card number][mode(ss/ds/qs)][preset number] */ + HDSPMixerCard *cards[MAX_CARDS]; HDSPMixerInputs *inputs; HDSPMixerPlaybacks *playbacks; HDSPMixerOutputs *outputs; diff --git a/hdspmixer/src/defines.h b/hdspmixer/src/defines.h index 2065620..d29c37c 100644 --- a/hdspmixer/src/defines.h +++ b/hdspmixer/src/defines.h @@ -47,6 +47,8 @@ #define PAN_WIDTH 28 +#define MAX_CARDS 3 + typedef unsigned long long int int64; #endif From 646eacb626355a7010aab901dbe4dcfa66ede70f Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Thu, 24 Feb 2011 21:33:31 +0100 Subject: [PATCH 024/166] hdspmixer: Fix metering for non-MADI cards Currently, hdsp and hdspm use different ioctls. Consequently, the metering is wrong. To avoid code duplication, use pointers to the corresponding struct members. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerWindow.cxx | 63 +++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 19 deletions(-) diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index a2e3db8..27003a0 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -31,6 +31,9 @@ static void readregisters_cb(void *arg) snd_hwdep_t *hw; hdsp_peak_rms_t hdsp_peak_rms; struct hdspm_peak_rms hdspm_peak_rms; + bool isMADI = false; + uint32_t *input_peaks, *playback_peaks, *output_peaks; + uint64_t *input_rms, *playback_rms, *output_rms; HDSPMixerWindow *w = (HDSPMixerWindow *)arg; @@ -48,6 +51,7 @@ static void readregisters_cb(void *arg) (HDSPeAIO == w->cards[w->current_card]->type) || (HDSP_AES == w->cards[w->current_card]->type) || (HDSPeRayDAT == w->cards[w->current_card]->type)) { + isMADI = true; if ((err = snd_hwdep_ioctl(hw, SNDRV_HDSPM_IOCTL_GET_PEAK_RMS, (void *)&hdspm_peak_rms)) < 0) { fprintf(stderr, "HwDep ioctl failed. Metering stopped\n"); snd_hwdep_close(hw); @@ -62,33 +66,54 @@ static void readregisters_cb(void *arg) } snd_hwdep_close(hw); - // check for speed change - if (hdspm_peak_rms.speed != w->cards[w->current_card]->speed_mode) { - w->cards[w->current_card]->setMode(hdspm_peak_rms.speed); + if (isMADI) { + // check for speed change + if (hdspm_peak_rms.speed != w->cards[w->current_card]->speed_mode) { + w->cards[w->current_card]->setMode(hdspm_peak_rms.speed); + } + input_peaks = hdspm_peak_rms.input_peaks; + playback_peaks = hdspm_peak_rms.playback_peaks; + output_peaks = hdspm_peak_rms.output_peaks; + + input_rms = hdspm_peak_rms.input_rms; + playback_rms = hdspm_peak_rms.playback_rms; + output_rms = hdspm_peak_rms.output_rms; + } else { + /* speed changes on non-MADI are already handled via alsactl_cb and + * getSpeed(), but the metering structs differ. + */ + input_peaks = hdsp_peak_rms.input_peaks; + playback_peaks = hdsp_peak_rms.playback_peaks; + output_peaks = hdsp_peak_rms.output_peaks; + + input_rms = hdsp_peak_rms.input_rms; + playback_rms = hdsp_peak_rms.playback_rms; + output_rms = hdsp_peak_rms.output_rms; } + /* update the meter */ if (w->inputs->buttons->input) { - for (int i = 0; i < w->cards[w->current_card]->channels_input; ++i) { - w->inputs->strips[i]->meter->update(hdspm_peak_rms.input_peaks[(w->cards[w->current_card]->meter_map_input[i])] & 0xffffff00, - hdspm_peak_rms.input_peaks[(w->cards[w->current_card]->meter_map_input[i])] & 0xf, - hdspm_peak_rms.input_rms[(w->cards[w->current_card]->meter_map_input[i])]); - } + for (int i = 0; i < w->cards[w->current_card]->channels_input; ++i) { + w->inputs->strips[i]->meter->update(input_peaks[(w->cards[w->current_card]->meter_map_input[i])] & 0xffffff00, + input_peaks[(w->cards[w->current_card]->meter_map_input[i])] & 0xf, + input_rms[(w->cards[w->current_card]->meter_map_input[i])]); + } } - + if (w->inputs->buttons->playback) { - for (int i = 0; i < w->cards[w->current_card]->channels_playback; ++i) { - w->playbacks->strips[i]->meter->update(hdspm_peak_rms.playback_peaks[(w->cards[w->current_card]->meter_map_playback[i])] & 0xffffff00, - hdspm_peak_rms.playback_peaks[(w->cards[w->current_card]->meter_map_playback[i])] & 0xf, - hdspm_peak_rms.playback_rms[(w->cards[w->current_card]->meter_map_playback[i])]); - } + for (int i = 0; i < w->cards[w->current_card]->channels_playback; ++i) { + w->playbacks->strips[i]->meter->update(playback_peaks[(w->cards[w->current_card]->meter_map_playback[i])] & 0xffffff00, + playback_peaks[(w->cards[w->current_card]->meter_map_playback[i])] & 0xf, + playback_rms[(w->cards[w->current_card]->meter_map_playback[i])]); + } } if (w->inputs->buttons->output) { - for (int i = 0; i < w->cards[w->current_card]->channels_playback; ++i) { - w->outputs->strips[i]->meter->update(hdspm_peak_rms.output_peaks[(w->cards[w->current_card]->meter_map_playback[i])] & 0xffffff00, - hdspm_peak_rms.output_peaks[(w->cards[w->current_card]->meter_map_playback[i])] & 0xf, - hdspm_peak_rms.output_rms[(w->cards[w->current_card]->meter_map_playback[i])]); - } + for (int i = 0; i < w->cards[w->current_card]->channels_playback; ++i) { + w->outputs->strips[i]->meter->update(output_peaks[(w->cards[w->current_card]->meter_map_playback[i])] & 0xffffff00, + output_peaks[(w->cards[w->current_card]->meter_map_playback[i])] & 0xf, + output_rms[(w->cards[w->current_card]->meter_map_playback[i])]); + } } Fl::add_timeout(0.03, readregisters_cb, w); From c3349a84eab57d02eb4604dc4a868e866e2e1913 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Mon, 28 Feb 2011 14:56:07 +0100 Subject: [PATCH 025/166] hdspmixer: Fix compiler warnings. All compiler warnings were caused by a conversion from "foo" to a char pointer. Given that the string itself really is constant, simply add the keyword to make g++ happy. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/pixmaps/Slider1.xpm | 2 +- hdspmixer/pixmaps/Slider2.xpm | 2 +- hdspmixer/pixmaps/Zlmloop2.xpm | 2 +- hdspmixer/pixmaps/Zlmloopm2.xpm | 2 +- hdspmixer/pixmaps/b_blank.xpm | 2 +- hdspmixer/pixmaps/b_card1.xpm | 2 +- hdspmixer/pixmaps/b_card2.xpm | 2 +- hdspmixer/pixmaps/b_card3.xpm | 2 +- hdspmixer/pixmaps/b_mute.xpm | 2 +- hdspmixer/pixmaps/b_pre1.xpm | 2 +- hdspmixer/pixmaps/b_pre2.xpm | 2 +- hdspmixer/pixmaps/b_pre3.xpm | 2 +- hdspmixer/pixmaps/b_pre4.xpm | 2 +- hdspmixer/pixmaps/b_pre5.xpm | 2 +- hdspmixer/pixmaps/b_pre6.xpm | 2 +- hdspmixer/pixmaps/b_pre7.xpm | 2 +- hdspmixer/pixmaps/b_pre8.xpm | 2 +- hdspmixer/pixmaps/b_save.xpm | 2 +- hdspmixer/pixmaps/b_solo.xpm | 2 +- hdspmixer/pixmaps/b_zlm.xpm | 2 +- hdspmixer/pixmaps/buttons.xpm | 2 +- hdspmixer/pixmaps/empty.xpm | 2 +- hdspmixer/pixmaps/empty_2.xpm | 2 +- hdspmixer/pixmaps/empty_linux.xpm | 2 +- hdspmixer/pixmaps/iomixer.xpm | 2 +- hdspmixer/pixmaps/iomixer_r.xpm | 2 +- hdspmixer/pixmaps/level.xpm | 2 +- hdspmixer/pixmaps/matrix_black.xpm | 2 +- hdspmixer/pixmaps/matrix_grey.xpm | 2 +- hdspmixer/pixmaps/matrix_grey_l.xpm | 2 +- hdspmixer/pixmaps/matrix_grey_o.xpm | 2 +- hdspmixer/pixmaps/matrix_grey_ol.xpm | 2 +- hdspmixer/pixmaps/matrix_mute.xpm | 2 +- hdspmixer/pixmaps/matrix_white.xpm | 2 +- hdspmixer/pixmaps/matrix_yellow.xpm | 2 +- hdspmixer/pixmaps/monitor.xpm | 2 +- hdspmixer/pixmaps/mute.xpm | 2 +- hdspmixer/pixmaps/output.xpm | 2 +- hdspmixer/pixmaps/output_r.xpm | 2 +- hdspmixer/pixmaps/over.xpm | 2 +- hdspmixer/pixmaps/peak.xpm | 2 +- hdspmixer/pixmaps/solo.xpm | 2 +- hdspmixer/src/HDSPMixerAbout.cxx | 2 +- hdspmixer/src/HDSPMixerAbout.h | 2 +- hdspmixer/src/HDSPMixerAboutText.h | 2 +- hdspmixer/src/HDSPMixerGain.cxx | 2 +- hdspmixer/src/HDSPMixerGain.h | 2 +- hdspmixer/src/HDSPMixerIOMixer.h | 2 +- hdspmixer/src/HDSPMixerOutput.cxx | 40 +++++++-------- hdspmixer/src/HDSPMixerOutput.h | 4 +- hdspmixer/src/HDSPMixerSelector.cxx | 38 +++++++------- hdspmixer/src/HDSPMixerSelector.h | 2 +- hdspmixer/src/HDSPMixerSetup.cxx | 2 +- hdspmixer/src/HDSPMixerSetup.h | 2 +- hdspmixer/src/pixmaps.h | 76 ++++++++++++++-------------- 55 files changed, 130 insertions(+), 130 deletions(-) diff --git a/hdspmixer/pixmaps/Slider1.xpm b/hdspmixer/pixmaps/Slider1.xpm index 017f4d2..7c24161 100644 --- a/hdspmixer/pixmaps/Slider1.xpm +++ b/hdspmixer/pixmaps/Slider1.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * Slider1_xpm[] = { +char const * Slider1_xpm[] = { "13 12 257 2", " c None", ". c #000000", diff --git a/hdspmixer/pixmaps/Slider2.xpm b/hdspmixer/pixmaps/Slider2.xpm index f7d76b1..743b5cf 100644 --- a/hdspmixer/pixmaps/Slider2.xpm +++ b/hdspmixer/pixmaps/Slider2.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * Slider2_xpm[] = { +char const * Slider2_xpm[] = { "2 13 257 2", " c None", ". c #7DF846", diff --git a/hdspmixer/pixmaps/Zlmloop2.xpm b/hdspmixer/pixmaps/Zlmloop2.xpm index 42377c9..f27f075 100644 --- a/hdspmixer/pixmaps/Zlmloop2.xpm +++ b/hdspmixer/pixmaps/Zlmloop2.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * Zlmloop2_xpm[] = { +char const * Zlmloop2_xpm[] = { "76 253 257 2", " c None", ". c #D1E0E5", diff --git a/hdspmixer/pixmaps/Zlmloopm2.xpm b/hdspmixer/pixmaps/Zlmloopm2.xpm index 55b121f..77d7dab 100644 --- a/hdspmixer/pixmaps/Zlmloopm2.xpm +++ b/hdspmixer/pixmaps/Zlmloopm2.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * Zlmloopm2_xpm[] = { +char const * Zlmloopm2_xpm[] = { "76 253 257 2", " c None", ". c #D1E0E5", diff --git a/hdspmixer/pixmaps/b_blank.xpm b/hdspmixer/pixmaps/b_blank.xpm index c0374d2..bafadd7 100644 --- a/hdspmixer/pixmaps/b_blank.xpm +++ b/hdspmixer/pixmaps/b_blank.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * b_blank_xpm[] = { +char const * b_blank_xpm[] = { "13 13 13 1", " c None", ". c #1AA00D", diff --git a/hdspmixer/pixmaps/b_card1.xpm b/hdspmixer/pixmaps/b_card1.xpm index c832a10..d818674 100644 --- a/hdspmixer/pixmaps/b_card1.xpm +++ b/hdspmixer/pixmaps/b_card1.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * b_card1_xpm[] = { +char const * b_card1_xpm[] = { "13 13 14 1", " c None", ". c #8D8F0F", diff --git a/hdspmixer/pixmaps/b_card2.xpm b/hdspmixer/pixmaps/b_card2.xpm index 5dd8da8..9a27ce6 100644 --- a/hdspmixer/pixmaps/b_card2.xpm +++ b/hdspmixer/pixmaps/b_card2.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * b_card2_xpm[] = { +char const * b_card2_xpm[] = { "13 13 14 1", " c None", ". c #8D8F0F", diff --git a/hdspmixer/pixmaps/b_card3.xpm b/hdspmixer/pixmaps/b_card3.xpm index 10e9e30..05961a0 100644 --- a/hdspmixer/pixmaps/b_card3.xpm +++ b/hdspmixer/pixmaps/b_card3.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * b_card3_xpm[] = { +char const * b_card3_xpm[] = { "13 13 14 1", " c None", ". c #8D8F0F", diff --git a/hdspmixer/pixmaps/b_mute.xpm b/hdspmixer/pixmaps/b_mute.xpm index dcdc8cd..86bec57 100644 --- a/hdspmixer/pixmaps/b_mute.xpm +++ b/hdspmixer/pixmaps/b_mute.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * b_mute_xpm[] = { +char const * b_mute_xpm[] = { "30 22 52 1", " c None", ". c #DE8C00", diff --git a/hdspmixer/pixmaps/b_pre1.xpm b/hdspmixer/pixmaps/b_pre1.xpm index b81f85a..62b8874 100644 --- a/hdspmixer/pixmaps/b_pre1.xpm +++ b/hdspmixer/pixmaps/b_pre1.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * b_pre1_xpm[] = { +char const * b_pre1_xpm[] = { "13 13 14 1", " c None", ". c #1AA00D", diff --git a/hdspmixer/pixmaps/b_pre2.xpm b/hdspmixer/pixmaps/b_pre2.xpm index 731c030..4c33101 100644 --- a/hdspmixer/pixmaps/b_pre2.xpm +++ b/hdspmixer/pixmaps/b_pre2.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * b_pre2_xpm[] = { +char const * b_pre2_xpm[] = { "13 13 14 1", " c None", ". c #1AA00D", diff --git a/hdspmixer/pixmaps/b_pre3.xpm b/hdspmixer/pixmaps/b_pre3.xpm index 77162c2..0b14cb2 100644 --- a/hdspmixer/pixmaps/b_pre3.xpm +++ b/hdspmixer/pixmaps/b_pre3.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * b_pre3_xpm[] = { +char const * b_pre3_xpm[] = { "13 13 14 1", " c None", ". c #1AA00D", diff --git a/hdspmixer/pixmaps/b_pre4.xpm b/hdspmixer/pixmaps/b_pre4.xpm index 30ab560..c22909b 100644 --- a/hdspmixer/pixmaps/b_pre4.xpm +++ b/hdspmixer/pixmaps/b_pre4.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * b_pre4_xpm[] = { +char const * b_pre4_xpm[] = { "13 13 14 1", " c None", ". c #1AA00D", diff --git a/hdspmixer/pixmaps/b_pre5.xpm b/hdspmixer/pixmaps/b_pre5.xpm index f563537..bfc2784 100644 --- a/hdspmixer/pixmaps/b_pre5.xpm +++ b/hdspmixer/pixmaps/b_pre5.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * b_pre5_xpm[] = { +char const * b_pre5_xpm[] = { "13 13 14 1", " c None", ". c #1AA00D", diff --git a/hdspmixer/pixmaps/b_pre6.xpm b/hdspmixer/pixmaps/b_pre6.xpm index 2d47537..b5ab0f5 100644 --- a/hdspmixer/pixmaps/b_pre6.xpm +++ b/hdspmixer/pixmaps/b_pre6.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * b_pre6_xpm[] = { +char const * b_pre6_xpm[] = { "13 13 14 1", " c None", ". c #1AA00D", diff --git a/hdspmixer/pixmaps/b_pre7.xpm b/hdspmixer/pixmaps/b_pre7.xpm index 8de4470..4690875 100644 --- a/hdspmixer/pixmaps/b_pre7.xpm +++ b/hdspmixer/pixmaps/b_pre7.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * b_pre7_xpm[] = { +char const * b_pre7_xpm[] = { "13 13 14 1", " c None", ". c #1AA00D", diff --git a/hdspmixer/pixmaps/b_pre8.xpm b/hdspmixer/pixmaps/b_pre8.xpm index 895263f..aa4073a 100644 --- a/hdspmixer/pixmaps/b_pre8.xpm +++ b/hdspmixer/pixmaps/b_pre8.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * b_pre8_xpm[] = { +char const * b_pre8_xpm[] = { "13 13 14 1", " c None", ". c #1AA00D", diff --git a/hdspmixer/pixmaps/b_save.xpm b/hdspmixer/pixmaps/b_save.xpm index a984e28..c39529b 100644 --- a/hdspmixer/pixmaps/b_save.xpm +++ b/hdspmixer/pixmaps/b_save.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * b_save_xpm[] = { +char const * b_save_xpm[] = { "13 13 14 1", " c None", ". c #5C7B1B", diff --git a/hdspmixer/pixmaps/b_solo.xpm b/hdspmixer/pixmaps/b_solo.xpm index f678b19..ad6c9f5 100644 --- a/hdspmixer/pixmaps/b_solo.xpm +++ b/hdspmixer/pixmaps/b_solo.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * b_solo_xpm[] = { +char const * b_solo_xpm[] = { "30 22 53 1", " c None", ". c #7C2000", diff --git a/hdspmixer/pixmaps/b_zlm.xpm b/hdspmixer/pixmaps/b_zlm.xpm index c44e75b..6e9c6e9 100644 --- a/hdspmixer/pixmaps/b_zlm.xpm +++ b/hdspmixer/pixmaps/b_zlm.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * b_zlm_xpm[] = { +char const * b_zlm_xpm[] = { "13 13 11 1", " c None", ". c #000D00", diff --git a/hdspmixer/pixmaps/buttons.xpm b/hdspmixer/pixmaps/buttons.xpm index 7cbe5f1..3e3f44f 100644 --- a/hdspmixer/pixmaps/buttons.xpm +++ b/hdspmixer/pixmaps/buttons.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * buttons_xpm[] = { +char const * buttons_xpm[] = { "76 253 257 2", " c None", ". c #C08480", diff --git a/hdspmixer/pixmaps/empty.xpm b/hdspmixer/pixmaps/empty.xpm index 284abc1..c86fe46 100644 --- a/hdspmixer/pixmaps/empty.xpm +++ b/hdspmixer/pixmaps/empty.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * empty_xpm[] = { +char const * empty_xpm[] = { "76 253 402 2", " c None", ". c #404840", diff --git a/hdspmixer/pixmaps/empty_2.xpm b/hdspmixer/pixmaps/empty_2.xpm index 31ff7b2..fb40d88 100644 --- a/hdspmixer/pixmaps/empty_2.xpm +++ b/hdspmixer/pixmaps/empty_2.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * empty_2_xpm[] = { +char const * empty_2_xpm[] = { "76 253 257 2", " c None", ". c #D1E0E5", diff --git a/hdspmixer/pixmaps/empty_linux.xpm b/hdspmixer/pixmaps/empty_linux.xpm index e74ff51..10088d6 100644 --- a/hdspmixer/pixmaps/empty_linux.xpm +++ b/hdspmixer/pixmaps/empty_linux.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * empty_linux_xpm[] = { +char const * empty_linux_xpm[] = { "76 253 1535 2", " c None", ". c #404840", diff --git a/hdspmixer/pixmaps/iomixer.xpm b/hdspmixer/pixmaps/iomixer.xpm index 31a4b16..15b7536 100644 --- a/hdspmixer/pixmaps/iomixer.xpm +++ b/hdspmixer/pixmaps/iomixer.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * iomixer_xpm[] = { +char const * iomixer_xpm[] = { "36 253 257 2", " c None", ". c #000000", diff --git a/hdspmixer/pixmaps/iomixer_r.xpm b/hdspmixer/pixmaps/iomixer_r.xpm index 6428cd4..cac66c9 100644 --- a/hdspmixer/pixmaps/iomixer_r.xpm +++ b/hdspmixer/pixmaps/iomixer_r.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * iomixer_r_xpm[] = { +char const * iomixer_r_xpm[] = { "36 253 257 2", " c None", ". c #000000", diff --git a/hdspmixer/pixmaps/level.xpm b/hdspmixer/pixmaps/level.xpm index a92fe26..3b776a5 100644 --- a/hdspmixer/pixmaps/level.xpm +++ b/hdspmixer/pixmaps/level.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * level_xpm[] = { +char const * level_xpm[] = { "8 139 257 2", " c None", ". c #149003", diff --git a/hdspmixer/pixmaps/matrix_black.xpm b/hdspmixer/pixmaps/matrix_black.xpm index e96c3cf..69e1e50 100644 --- a/hdspmixer/pixmaps/matrix_black.xpm +++ b/hdspmixer/pixmaps/matrix_black.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * matrix_black_xpm[] = { +char const * matrix_black_xpm[] = { "32 12 257 2", " c None", ". c #000000", diff --git a/hdspmixer/pixmaps/matrix_grey.xpm b/hdspmixer/pixmaps/matrix_grey.xpm index 40d0a34..ad5b369 100644 --- a/hdspmixer/pixmaps/matrix_grey.xpm +++ b/hdspmixer/pixmaps/matrix_grey.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * matrix_grey_xpm[] = { +char const * matrix_grey_xpm[] = { "32 12 22 1", " c None", ". c #A0A0A0", diff --git a/hdspmixer/pixmaps/matrix_grey_l.xpm b/hdspmixer/pixmaps/matrix_grey_l.xpm index b1a434e..5eeedbe 100644 --- a/hdspmixer/pixmaps/matrix_grey_l.xpm +++ b/hdspmixer/pixmaps/matrix_grey_l.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * matrix_grey_l_xpm[] = { +char const * matrix_grey_l_xpm[] = { "32 12 22 1", " c None", ". c #6F776F", diff --git a/hdspmixer/pixmaps/matrix_grey_o.xpm b/hdspmixer/pixmaps/matrix_grey_o.xpm index 8dce291..033e00b 100644 --- a/hdspmixer/pixmaps/matrix_grey_o.xpm +++ b/hdspmixer/pixmaps/matrix_grey_o.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * matrix_grey_o_xpm[] = { +char const * matrix_grey_o_xpm[] = { "32 12 22 1", " c None", ". c #6F776F", diff --git a/hdspmixer/pixmaps/matrix_grey_ol.xpm b/hdspmixer/pixmaps/matrix_grey_ol.xpm index 64c6c40..4ced7f4 100644 --- a/hdspmixer/pixmaps/matrix_grey_ol.xpm +++ b/hdspmixer/pixmaps/matrix_grey_ol.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * matrix_grey_ol_xpm[] = { +char const * matrix_grey_ol_xpm[] = { "32 12 22 1", " c None", ". c #6F776F", diff --git a/hdspmixer/pixmaps/matrix_mute.xpm b/hdspmixer/pixmaps/matrix_mute.xpm index 3c917d8..fcc30b2 100644 --- a/hdspmixer/pixmaps/matrix_mute.xpm +++ b/hdspmixer/pixmaps/matrix_mute.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * matrix_mute_xpm[] = { +char const * matrix_mute_xpm[] = { "32 12 25 1", " c None", ". c #C5C5BD", diff --git a/hdspmixer/pixmaps/matrix_white.xpm b/hdspmixer/pixmaps/matrix_white.xpm index c741b5b..ab5808a 100644 --- a/hdspmixer/pixmaps/matrix_white.xpm +++ b/hdspmixer/pixmaps/matrix_white.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * matrix_white_xpm[] = { +char const * matrix_white_xpm[] = { "32 12 257 2", " c None", ". c #000000", diff --git a/hdspmixer/pixmaps/matrix_yellow.xpm b/hdspmixer/pixmaps/matrix_yellow.xpm index c4ab7f7..6a6565c 100644 --- a/hdspmixer/pixmaps/matrix_yellow.xpm +++ b/hdspmixer/pixmaps/matrix_yellow.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * matrix_yellow_xpm[] = { +char const * matrix_yellow_xpm[] = { "32 12 257 2", " c None", ". c #000000", diff --git a/hdspmixer/pixmaps/monitor.xpm b/hdspmixer/pixmaps/monitor.xpm index 4d84ef6..8c29898 100644 --- a/hdspmixer/pixmaps/monitor.xpm +++ b/hdspmixer/pixmaps/monitor.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * monitor_xpm[] = { +char const * monitor_xpm[] = { "76 253 257 2", " c None", ". c #D1E0E5", diff --git a/hdspmixer/pixmaps/mute.xpm b/hdspmixer/pixmaps/mute.xpm index 83c71e4..fbc4707 100644 --- a/hdspmixer/pixmaps/mute.xpm +++ b/hdspmixer/pixmaps/mute.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * mute_xpm[] = { +char const * mute_xpm[] = { "13 26 30 1", " c None", ". c #1B7B1B", diff --git a/hdspmixer/pixmaps/output.xpm b/hdspmixer/pixmaps/output.xpm index 3fc334f..a9ccb80 100644 --- a/hdspmixer/pixmaps/output.xpm +++ b/hdspmixer/pixmaps/output.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * output_xpm[] = { +char const * output_xpm[] = { "36 208 257 2", " c None", ". c #000000", diff --git a/hdspmixer/pixmaps/output_r.xpm b/hdspmixer/pixmaps/output_r.xpm index 78fc61b..2e73c7f 100644 --- a/hdspmixer/pixmaps/output_r.xpm +++ b/hdspmixer/pixmaps/output_r.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * output_r_xpm[] = { +char const * output_r_xpm[] = { "36 208 257 2", " c None", ". c #000000", diff --git a/hdspmixer/pixmaps/over.xpm b/hdspmixer/pixmaps/over.xpm index 6b0e7e3..5918170 100644 --- a/hdspmixer/pixmaps/over.xpm +++ b/hdspmixer/pixmaps/over.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * over_xpm[] = { +char const * over_xpm[] = { "30 13 257 2", " c None", ". c #000000", diff --git a/hdspmixer/pixmaps/peak.xpm b/hdspmixer/pixmaps/peak.xpm index 88b20e3..19d46be 100644 --- a/hdspmixer/pixmaps/peak.xpm +++ b/hdspmixer/pixmaps/peak.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * peak_xpm[] = { +char const * peak_xpm[] = { "8 5 257 2", " c None", ". c #61FF48", diff --git a/hdspmixer/pixmaps/solo.xpm b/hdspmixer/pixmaps/solo.xpm index 1bfb438..42f3aca 100644 --- a/hdspmixer/pixmaps/solo.xpm +++ b/hdspmixer/pixmaps/solo.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * solo_xpm[] = { +char const * solo_xpm[] = { "13 26 28 1", " c None", ". c #3C3E2D", diff --git a/hdspmixer/src/HDSPMixerAbout.cxx b/hdspmixer/src/HDSPMixerAbout.cxx index 709529a..39587d0 100644 --- a/hdspmixer/src/HDSPMixerAbout.cxx +++ b/hdspmixer/src/HDSPMixerAbout.cxx @@ -22,7 +22,7 @@ #include "HDSPMixerAbout.h" -HDSPMixerAbout::HDSPMixerAbout(int w, int h, char *label, HDSPMixerWindow *win):Fl_Double_Window(w, h, label) +HDSPMixerAbout::HDSPMixerAbout(int w, int h, char const *label, HDSPMixerWindow *win):Fl_Double_Window(w, h, label) { basew = win; text = new HDSPMixerAboutText(10,10,w-20,h-20); diff --git a/hdspmixer/src/HDSPMixerAbout.h b/hdspmixer/src/HDSPMixerAbout.h index f59b256..e539935 100644 --- a/hdspmixer/src/HDSPMixerAbout.h +++ b/hdspmixer/src/HDSPMixerAbout.h @@ -36,7 +36,7 @@ private: HDSPMixerAboutText *text; HDSPMixerWindow *basew; public: - HDSPMixerAbout(int w, int h, char *label, HDSPMixerWindow *win); + HDSPMixerAbout(int w, int h, char const *label, HDSPMixerWindow *win); int handle(int e); }; diff --git a/hdspmixer/src/HDSPMixerAboutText.h b/hdspmixer/src/HDSPMixerAboutText.h index 75b96ce..7ccac25 100644 --- a/hdspmixer/src/HDSPMixerAboutText.h +++ b/hdspmixer/src/HDSPMixerAboutText.h @@ -32,7 +32,7 @@ public: HDSPMixerAboutText(int x, int y, int w, int h); void draw(); private: - char *text; + char const *text; }; #endif diff --git a/hdspmixer/src/HDSPMixerGain.cxx b/hdspmixer/src/HDSPMixerGain.cxx index 9d43a73..fd6339e 100644 --- a/hdspmixer/src/HDSPMixerGain.cxx +++ b/hdspmixer/src/HDSPMixerGain.cxx @@ -33,7 +33,7 @@ void HDSPMixerGain::draw() fl_draw(text, x(), y(), w(), h(), FL_ALIGN_CENTER); } -void HDSPMixerGain::setText(char *txt) +void HDSPMixerGain::setText(char const *txt) { strncpy(text, txt, 10); redraw(); diff --git a/hdspmixer/src/HDSPMixerGain.h b/hdspmixer/src/HDSPMixerGain.h index 9f70778..a5ab55a 100644 --- a/hdspmixer/src/HDSPMixerGain.h +++ b/hdspmixer/src/HDSPMixerGain.h @@ -39,7 +39,7 @@ public: char text[10]; HDSPMixerGain(int x, int y, int parenttype); void draw(); - void setText(char *txt); + void setText(char const *txt); }; #endif diff --git a/hdspmixer/src/HDSPMixerIOMixer.h b/hdspmixer/src/HDSPMixerIOMixer.h index a9a35de..b440007 100644 --- a/hdspmixer/src/HDSPMixerIOMixer.h +++ b/hdspmixer/src/HDSPMixerIOMixer.h @@ -51,7 +51,7 @@ class HDSPMixerMeter; class HDSPMixerIOMixer:public Fl_Group { private: - char **p_iomixer_xpm; + char const **p_iomixer_xpm; int channel_num, relative_num, mixer_type; std::stringstream channel_name; void update_child(Fl_Widget &widget); diff --git a/hdspmixer/src/HDSPMixerOutput.cxx b/hdspmixer/src/HDSPMixerOutput.cxx index dd0c9f8..05a126c 100644 --- a/hdspmixer/src/HDSPMixerOutput.cxx +++ b/hdspmixer/src/HDSPMixerOutput.cxx @@ -21,7 +21,7 @@ #pragma implementation #include "HDSPMixerOutput.h" -static char *labels_madi_ss[64] = { +static char const *labels_madi_ss[64] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", @@ -32,25 +32,25 @@ static char *labels_madi_ss[64] = { "57", "58", "59", "60", "61", "62", "63", "64" }; -static char *labels_madi_ds[64] = { +static char const *labels_madi_ds[64] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", }; -static char *labels_madi_qs[16] = { +static char const *labels_madi_qs[16] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", }; -static char *labels_aes32[16] = { +static char const *labels_aes32[16] = { "AES 1", "AES 2", "AES 3", "AES 4", "AES 5", "AES 6", "AES 7", "AES 8", "AES 9", "AES 10", "AES 11", "AES 12", "AES 13", "AES 14", "AES 15", "AES 16" }; -static char *labels_raydat_ss[36] = { +static char const *labels_raydat_ss[36] = { "A1.1", "A1.2", "A1.3", "A1.4", "A1.5", "A1.6", "A1.7", "A1.8", "A2.1", "A2.2", "A2.3", "A2.4", "A2.5", "A2.6", "A2.7", "A2.8", "A3.1", "A3.2", "A3.3", "A3.4", "A3.5", "A3.6", "A3.7", "A3.8", @@ -59,7 +59,7 @@ static char *labels_raydat_ss[36] = { "SP.L", "SP.R" }; -static char *labels_raydat_ds[20] = { +static char const *labels_raydat_ds[20] = { "A1.1", "A1.2", "A1.3", "A1.4", "A2.1", "A2.2", "A2.3", "A2.4", "A3.1", "A3.2", "A3.3", "A3.4", @@ -68,7 +68,7 @@ static char *labels_raydat_ds[20] = { "SP.L", "SP.R" }; -static char *labels_raydat_qs[12] = { +static char const *labels_raydat_qs[12] = { "A1.1", "A1.2", "A2.1", "A2.2", "A3.1", "A3.2", @@ -78,7 +78,7 @@ static char *labels_raydat_qs[12] = { }; -static char *labels_aio_ss_input[14] = { +static char const *labels_aio_ss_input[14] = { "AN 1", "AN 2", "SP.L", "SP.R", "AES.L", "AES.R", @@ -86,7 +86,7 @@ static char *labels_aio_ss_input[14] = { "A 5", "A 6", "A 7", "A 8" }; -static char *labels_aio_ss_playback[16] = { +static char const *labels_aio_ss_playback[16] = { "AN 1", "AN 2", "SP.L", "SP.R", "AES.L", "AES.R", @@ -95,14 +95,14 @@ static char *labels_aio_ss_playback[16] = { "PH.L", "PH.R" }; -static char *labels_aio_ds_input[10] = { +static char const *labels_aio_ds_input[10] = { "AN 1", "AN 2", "SP.L", "SP.R", "AES.L", "AES.R", "A 1", "A 2", "A 3", "A 4" }; -static char *labels_aio_ds_playback[12] = { +static char const *labels_aio_ds_playback[12] = { "AN 1", "AN 2", "SP.L", "SP.R", "AES.L", "AES.R", @@ -110,14 +110,14 @@ static char *labels_aio_ds_playback[12] = { "PH.L", "PH.R" }; -static char *labels_aio_qs_input[8] = { +static char const *labels_aio_qs_input[8] = { "AN 1", "AN 2", "SP.L", "SP.R", "AES.L", "AES.R", "A 1", "A 2" }; -static char *labels_aio_qs_playback[10] = { +static char const *labels_aio_qs_playback[10] = { "AN 1", "AN 2", "SP.L", "SP.R", "AES.L", "AES.R", @@ -126,44 +126,44 @@ static char *labels_aio_qs_playback[10] = { }; -static char *labels_mf_ss[20] = { +static char const *labels_mf_ss[20] = { "AN 1", "AN 2", "AN 3", "AN 4", "AN 5", "AN 6", "AN 7", "AN 8", "A 1", "A 2", "A 3", "A 4", "A 5", "A 6", "A 7", "A 8", "SP.L", "SP.R", "AN.L", "AN.R" }; -static char *labels_mf_ds[16] = { +static char const *labels_mf_ds[16] = { "AN 1", "AN 2", "AN 3", "AN 4", "AN 5", "AN 6", "AN 7", "AN 8", "A 1", "A 2", "A 3", "A 4", "SP.L", "SP.R", "AN.L", "AN.R" }; -static char *labels_df_ss[28] = { +static char const *labels_df_ss[28] = { "A1 1", "A1 2", "A1 3", "A1 4", "A1 5", "A1 6", "A1 7", "A1 8", "A2 1", "A2 2", "A2 3", "A2 4", "A2 5", "A2 6", "A2 7", "A2 8", "A3 1", "A3 2", "A3 3", "A3 4", "A3 5", "A3 6", "A3 7", "A3 8", "SP.L", "SP.R", "AN.L", "AN.R" }; -static char *labels_df_ds[16] = { +static char const *labels_df_ds[16] = { "A1 1", "A1 2", "A1 3", "A1 4", "A2 1", "A2 2", "A2 3", "A2 4", "A3 1", "A3 2", "A3 3", "A3 4", "SP.L", "SP.R", "AN.L", "AN.R" }; -static char *labels_9632_ss[16] = { +static char const *labels_9632_ss[16] = { "A 1", "A 2", "A 3", "A 4", "A 5", "A 6", "A 7", "A 8", "SP.L", "SP.R", "AN 1", "AN 2", "AN 3", "AN 4", "AN 5", "AN 6" }; -static char *labels_9632_ds[12] = { +static char const *labels_9632_ds[12] = { "A 1", "A 2", "A 3", "A 4", "SP.L", "SP.R", "AN 1", "AN 2", "AN 3", "AN 4", "AN 5", "AN 6" }; -static char *labels_9632_qs[8] = { +static char const *labels_9632_qs[8] = { "SP.L", "SP.R", "AN 1", "AN 2", "AN 3", "AN 4", "AN 5", "AN 6" }; diff --git a/hdspmixer/src/HDSPMixerOutput.h b/hdspmixer/src/HDSPMixerOutput.h index 2e7fb09..f38d263 100644 --- a/hdspmixer/src/HDSPMixerOutput.h +++ b/hdspmixer/src/HDSPMixerOutput.h @@ -46,8 +46,8 @@ class HDSPMixerOutput:public Fl_Group { private: int out_num; - char **labels_input, **labels_playback; - char **p_output_xpm; + char const **labels_input, **labels_playback; + char const **p_output_xpm; HDSPMixerPeak *peak; HDSPMixerWindow *basew; void update_child(Fl_Widget& widget); diff --git a/hdspmixer/src/HDSPMixerSelector.cxx b/hdspmixer/src/HDSPMixerSelector.cxx index a4156b0..098658f 100644 --- a/hdspmixer/src/HDSPMixerSelector.cxx +++ b/hdspmixer/src/HDSPMixerSelector.cxx @@ -24,7 +24,7 @@ #pragma implementation #include "HDSPMixerSelector.h" -static char *destinations_madi_ss[32] = { +static char const *destinations_madi_ss[32] = { "1+2", "3+4", "5+6", "7+8", "9+10", "11+12", "13+14", "15+16", "17+18", "19+20", "21+22", "23+24", @@ -35,24 +35,24 @@ static char *destinations_madi_ss[32] = { "57+58", "59+60", "61+62", "63+64" }; -static char *destinations_madi_ds[16] = { +static char const *destinations_madi_ds[16] = { "1+2", "3+4", "5+6", "7+8", "9+10", "11+12", "13+14", "15+16", "17+18", "19+20", "21+22", "23+24", "25+26", "27+28", "29+30", "31+32" }; -static char *destinations_madi_qs[8] = { +static char const *destinations_madi_qs[8] = { "1+2", "3+4", "5+6", "7+8", "9+10", "11+12", "13+14", "15+16" }; -static char *destinations_aes32[8] = { +static char const *destinations_aes32[8] = { "AES 1+2", "AES 3+4", "AES 5+6", "AES 7+8", "AES 9+10", "AES 11+12", "AES 13+14", "AES 15+16", }; -static char *destinations_raydat_ss[18] = { +static char const *destinations_raydat_ss[18] = { "A1 1+2", "A1 3+4", "A1 5+6", "A1 7+8", "A2 1+2", "A2 3+4", "A2 5+6", "A2 7+8", @@ -62,7 +62,7 @@ static char *destinations_raydat_ss[18] = { "SPDIF" }; -static char *destinations_raydat_ds[10] = { +static char const *destinations_raydat_ds[10] = { "A1 1+2", "A1 3+4", "A2 1+2", "A2 3+4", "A3 1+2", "A3 3+4", @@ -71,7 +71,7 @@ static char *destinations_raydat_ds[10] = { "SPDIF" }; -static char *destinations_raydat_qs[6] = { +static char const *destinations_raydat_qs[6] = { "A1 1+2", "A2 1+2", "A3 1+2", @@ -81,7 +81,7 @@ static char *destinations_raydat_qs[6] = { }; -static char *destinations_aio_ss[8] = { +static char const *destinations_aio_ss[8] = { "AN 1+2", "AES", "SPDIF", @@ -89,7 +89,7 @@ static char *destinations_aio_ss[8] = { "Phones" }; -static char *destinations_aio_ds[6] = { +static char const *destinations_aio_ds[6] = { "AN 1+2", "AES", "SPDIF", @@ -97,7 +97,7 @@ static char *destinations_aio_ds[6] = { "Phones" }; -static char *destinations_aio_qs[5] = { +static char const *destinations_aio_qs[5] = { "AN 1+2", "AES", "SPDIF", @@ -105,57 +105,57 @@ static char *destinations_aio_qs[5] = { "Phones" }; -static char *destinations_mf_ss[10] = { +static char const *destinations_mf_ss[10] = { "AN 1+2", "AN 3+4", "AN 5+6", "AN 7+8", "A 1+2", "A 3+4", "A 5+6", "A 7+8", "SPDIF", "Analog" }; -static char *destinations_mf_ds[8] = { +static char const *destinations_mf_ds[8] = { "AN 1+2", "AN 3+4", "AN 5+6", "AN 7+8", "A 1+2", "A 3+4", "SPDIF", "Analog" }; -static char *destinations_df_ss[14] = { +static char const *destinations_df_ss[14] = { "A1 1+2", "A1 3+4", "A1 5+6", "A1 7+8", "A2 1+2", "A2 3+4", "A2 5+6", "A2 7+8", "A3 1+2", "A3 3+4", "A3 5+6", "A3 7+8", "SPDIF", "Analog" }; -static char *destinations_df_ds[8] = { +static char const *destinations_df_ds[8] = { "A1 1+2", "A1 3+4", "A2 1+2", "A2 3+4", "A3 1+2", "A3 3+4", "SPDIF", "Analog" }; -static char *destinations_h9652_ss[13] = { +static char const *destinations_h9652_ss[13] = { "A1 1+2", "A1 3+4", "A1 5+6", "A1 7+8", "A2 1+2", "A2 3+4", "A2 5+6", "A2 7+8", "A3 1+2", "A3 3+4", "A3 5+6", "A3 7+8", "SPDIF" }; -static char *destinations_h9652_ds[7] = { +static char const *destinations_h9652_ds[7] = { "A1 1+2", "A1 3+4", "A2 1+2", "A2 3+4", "A3 1+2", "A3 3+4", "SPDIF" }; -static char *destinations_h9632_ss[8] = { +static char const *destinations_h9632_ss[8] = { "A 1+2", "A 3+4", "A 5+6", "A 7+8", "SPDIF", "AN 1+2", "AN 3+4", "AN 5+6" }; -static char *destinations_h9632_ds[6] = { +static char const *destinations_h9632_ds[6] = { "A 1+2", "A 3+4", "SPDIF", "AN 1+2", "AN 3+4", "AN 5+6" }; -static char *destinations_h9632_qs[4] = { +static char const *destinations_h9632_qs[4] = { "SPDIF", "AN 1+2", "AN 3+4", "AN 5+6" }; diff --git a/hdspmixer/src/HDSPMixerSelector.h b/hdspmixer/src/HDSPMixerSelector.h index 6f232cf..7994305 100644 --- a/hdspmixer/src/HDSPMixerSelector.h +++ b/hdspmixer/src/HDSPMixerSelector.h @@ -39,7 +39,7 @@ class HDSPMixerIOMixer; class HDSPMixerSelector:public Fl_Menu_ { private: - char **destinations; + char const **destinations; HDSPMixerWindow *basew; public: int max_dest; diff --git a/hdspmixer/src/HDSPMixerSetup.cxx b/hdspmixer/src/HDSPMixerSetup.cxx index 6fa3551..593ee70 100644 --- a/hdspmixer/src/HDSPMixerSetup.cxx +++ b/hdspmixer/src/HDSPMixerSetup.cxx @@ -91,7 +91,7 @@ static void rmsplus3_cb(Fl_Widget *widget, void *arg) } -HDSPMixerSetup::HDSPMixerSetup(int w, int h, char *label, HDSPMixerWindow *win):Fl_Double_Window(w, h, label) +HDSPMixerSetup::HDSPMixerSetup(int w, int h, char const *label, HDSPMixerWindow *win):Fl_Double_Window(w, h, label) { basew = win; plm = new Fl_Group(10, 25, 380, 60, "Peak Level Meters"); diff --git a/hdspmixer/src/HDSPMixerSetup.h b/hdspmixer/src/HDSPMixerSetup.h index 21ffbb2..ba95951 100644 --- a/hdspmixer/src/HDSPMixerSetup.h +++ b/hdspmixer/src/HDSPMixerSetup.h @@ -54,7 +54,7 @@ public: int level_val; int numbers_val; int rmsplus3_val; - HDSPMixerSetup(int w, int h, char *label, HDSPMixerWindow *win); + HDSPMixerSetup(int w, int h, char const *label, HDSPMixerWindow *win); HDSPMixerWindow *basew; void updateValues(); }; diff --git a/hdspmixer/src/pixmaps.h b/hdspmixer/src/pixmaps.h index 624bd28..b980a62 100644 --- a/hdspmixer/src/pixmaps.h +++ b/hdspmixer/src/pixmaps.h @@ -21,44 +21,44 @@ #ifndef pixmaps_H #define pixmaps_H -extern char * Slider1_xpm[]; -extern char * Slider2_xpm[]; -extern char * b_blank_xpm[]; -extern char * b_card1_xpm[]; -extern char * b_card2_xpm[]; -extern char * b_card3_xpm[]; -extern char * b_mute_xpm[]; -extern char * b_pre1_xpm[]; -extern char * b_pre2_xpm[]; -extern char * b_pre3_xpm[]; -extern char * b_pre4_xpm[]; -extern char * b_pre5_xpm[]; -extern char * b_pre6_xpm[]; -extern char * b_pre7_xpm[]; -extern char * b_pre8_xpm[]; -extern char * b_save_xpm[]; -extern char * b_solo_xpm[]; -extern char * buttons_xpm[]; -extern char * empty_xpm[]; -extern char * empty_linux_xpm[]; -extern char * iomixer_xpm[]; -extern char * level_xpm[]; -extern char * monitor_xpm[]; -extern char * mute_xpm[]; -extern char * output_xpm[]; -extern char * over_xpm[]; -extern char * peak_xpm[]; -extern char * solo_xpm[]; -extern char * iomixer_r_xpm[]; -extern char * output_r_xpm[]; -extern char * matrix_white_xpm[]; -extern char * matrix_black_xpm[]; -extern char * matrix_yellow_xpm[]; -extern char * matrix_mute_xpm[]; -extern char * matrix_grey_xpm[]; -extern char * matrix_grey_l_xpm[]; -extern char * matrix_grey_ol_xpm[]; -extern char * matrix_grey_o_xpm[]; +extern char const * Slider1_xpm[]; +extern char const * Slider2_xpm[]; +extern char const * b_blank_xpm[]; +extern char const * b_card1_xpm[]; +extern char const * b_card2_xpm[]; +extern char const * b_card3_xpm[]; +extern char const * b_mute_xpm[]; +extern char const * b_pre1_xpm[]; +extern char const * b_pre2_xpm[]; +extern char const * b_pre3_xpm[]; +extern char const * b_pre4_xpm[]; +extern char const * b_pre5_xpm[]; +extern char const * b_pre6_xpm[]; +extern char const * b_pre7_xpm[]; +extern char const * b_pre8_xpm[]; +extern char const * b_save_xpm[]; +extern char const * b_solo_xpm[]; +extern char const * buttons_xpm[]; +extern char const * empty_xpm[]; +extern char const * empty_linux_xpm[]; +extern char const * iomixer_xpm[]; +extern char const * level_xpm[]; +extern char const * monitor_xpm[]; +extern char const * mute_xpm[]; +extern char const * output_xpm[]; +extern char const * over_xpm[]; +extern char const * peak_xpm[]; +extern char const * solo_xpm[]; +extern char const * iomixer_r_xpm[]; +extern char const * output_r_xpm[]; +extern char const * matrix_white_xpm[]; +extern char const * matrix_black_xpm[]; +extern char const * matrix_yellow_xpm[]; +extern char const * matrix_mute_xpm[]; +extern char const * matrix_grey_xpm[]; +extern char const * matrix_grey_l_xpm[]; +extern char const * matrix_grey_ol_xpm[]; +extern char const * matrix_grey_o_xpm[]; #endif From e728f0d073255abe2201ae44500ee66b9a33c57d Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Mon, 28 Feb 2011 14:56:08 +0100 Subject: [PATCH 026/166] hdspmixer: Don't use hardcoded number of cards. We have introduced MAX_CARDS before to make the code more safe and extendable, so it's just sane to use it all over the place. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerIOMixer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hdspmixer/src/HDSPMixerIOMixer.h b/hdspmixer/src/HDSPMixerIOMixer.h index b440007..2ec7f05 100644 --- a/hdspmixer/src/HDSPMixerIOMixer.h +++ b/hdspmixer/src/HDSPMixerIOMixer.h @@ -56,7 +56,7 @@ private: std::stringstream channel_name; void update_child(Fl_Widget &widget); public: - HDSPMixerStripData *data[3][3][8]; /* data[card][mode(ss/ds/qs)][preset number] */ + HDSPMixerStripData *data[MAX_CARDS][3][8]; /* data[card][mode(ss/ds/qs)][preset number] */ HDSPMixerPan *pan; HDSPMixerFader *fader; HDSPMixerPeak *peak; From 042363a42925990eeeff3dd07a5919f5e66f8d14 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Tue, 1 Mar 2011 10:42:25 +0100 Subject: [PATCH 027/166] hdspmixer: Make static destination maps extern To prevent multiple inclusion, make the destmaps global and only reference them via extern. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/Makefile.am | 1 + hdspmixer/src/channelmap.cxx | 368 +++++++++++++++++++++++++++++++++++ hdspmixer/src/channelmap.h | 312 ++++------------------------- 3 files changed, 408 insertions(+), 273 deletions(-) create mode 100644 hdspmixer/src/channelmap.cxx diff --git a/hdspmixer/src/Makefile.am b/hdspmixer/src/Makefile.am index b097898..e80a8ac 100644 --- a/hdspmixer/src/Makefile.am +++ b/hdspmixer/src/Makefile.am @@ -56,5 +56,6 @@ hdspmixer_SOURCES = \ pixmaps.cxx \ pixmaps.h \ defines.h \ + channelmap.cxx \ channelmap.h diff --git a/hdspmixer/src/channelmap.cxx b/hdspmixer/src/channelmap.cxx new file mode 100644 index 0000000..f2f0585 --- /dev/null +++ b/hdspmixer/src/channelmap.cxx @@ -0,0 +1,368 @@ +/* + * HDSPMixer + * + * Copyright (C) 2011 Adrian Knoth (adi@drcomp.erfurt.thur.de) + * Fredrik Lingvall (fredrik.lingvall@gmail.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * + */ + +#include "channelmap.h" + + +/*** + * + * hdsp cards + * + ***/ + +// Digiface + + +char dest_map_df_ss[14] = { + 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26 +}; + +char channel_map_df_ss[26] = { + 0, 1, 2, 3, 4, 5, 6, 7, /* ADAT 1 */ + 8, 9, 10, 11, 12, 13, 14, 15, /* ADAT 2 */ + 16, 17, 18, 19, 20, 21, 22, 23, /* ADAT 3 */ + 24, 25 /* SPDIF */ +}; + +// Multiface + +char dest_map_mf_ss[10] = { + 0, 2, 4, 6, 16, 18, 20, 22, 24, 26 +}; + +char channel_map_mf_ss[26] = { + 0, 1, 2, 3, 4, 5, 6, 7, /* Line in */ + 16, 17, 18, 19, 20, 21, 22, 23, /* ADAT */ + 24, 25, /* SPDIF */ + -1, -1, -1, -1, -1, -1, -1, -1 +}; + +// Digiface/Multiface + +char meter_map_ds[26] = { + 0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, + 24, 25, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 +}; + +char channel_map_ds[26] = { + 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, + 24, 25, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 +}; + +char dest_map_ds[8] = { + 0, 2, 8, 10, 16, 18, 24, 26 +}; + +// HDSP 9652 + +char dest_map_h9652_ss[13] = { + 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24 +}; + +char dest_map_h9652_ds[7] = { + 0, 2, 8, 10, 16, 18, 24 +}; + +// HDSP 9632 + +char dest_map_h9632_ss[8] = { + 0, 2, 4, 6, 8, 10, 12, 14 +}; + +char dest_map_h9632_ds[6] = { + 0, 2, 8, 10, 12, 14 +}; + +char dest_map_h9632_qs[4] = { + 8, 10, 12, 14 +}; + +char channel_map_h9632_ss[16] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 +}; + +char channel_map_h9632_ds[12] = { + 0, 1, 2, 3, 8, 9, 10, 11, 12, 13, 14, 15 +}; + +char channel_map_h9632_qs[8] = { + 8, 9, 10, 11, 12, 13, 14, 15 +}; + + +/*** + * + * hdspm cards + * + ***/ + +// HDSPe MADI and MADIface + +char dest_map_unity[32] = { + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, + 48, 50, 52, 54, 56, 58, 60, 62 +}; + +char channel_map_unity_ss[HDSPM_MAX_CHANNELS] = { + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63 +}; + +char channel_map_unity_ds[HDSPM_MAX_CHANNELS] = { + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, + 48, 50, 52, 54, 56, 58, 60, 62, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, +}; + +char channel_map_unity_qs[HDSPM_MAX_CHANNELS] = { + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, +}; + +// HDSPe RayDAT + +char dest_map_raydat_ss[18] = { + 4, 6, 8, 10, + 12, 14, 16, 18, + 20, 22, 24, 26, + 28, 30, 32, 34, + 0, 2 +}; + +char dest_map_raydat_ds[10] = { + 4, 6, + 8, 10, + 12, 14, + 16, 18, + 0, 2 +}; + +char dest_map_raydat_qs[6] = { + 4, + 6, + 8, + 10, + 0, 2 +}; + +char channel_map_raydat_ss[HDSPM_MAX_CHANNELS] = { + 4, 5, 6, 7, 8, 9, 10, 11, /* ADAT 1 */ + 12, 13, 14, 15, 16, 17, 18, 19, /* ADAT 2 */ + 20, 21, 22, 23, 24, 25, 26, 27, /* ADAT 3 */ + 28, 29, 30, 31, 32, 33, 34, 35, /* ADAT 4 */ + 0, 1, /* AES */ + 2, 3, /* SPDIF */ + -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, +}; + +char channel_map_raydat_ds[HDSPM_MAX_CHANNELS] = { + 4, 5, 6, 7, /* ADAT 1 */ + 8, 9, 10, 11, /* ADAT 2 */ + 12, 13, 14, 15, /* ADAT 3 */ + 16, 17, 18, 19, /* ADAT 4 */ + 0, 1, /* AES */ + 2, 3, /* SPDIF */ + -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, +}; + +char channel_map_raydat_qs[HDSPM_MAX_CHANNELS] = { + 4, 5, /* ADAT 1 */ + 6, 7, /* ADAT 2 */ + 8, 9, /* ADAT 3 */ + 10, 11, /* ADAT 4 */ + 0, 1, /* AES */ + 2, 3, /* SPDIF */ + -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, +}; + +// HDSPe AIO + +char dest_map_aio_ss[8] = { + 0, // Analogue + 8, // AES + 10, // SPDIF + 12, 14, 16, 18, // ADAT + 6 // Phones +}; + + +char dest_map_aio_ds[6] = { + 0, // Analogue + 8, // AES + 10, // SPDIF + 12, 16, // ADAT + 6 // Phones +}; + +char dest_map_aio_qs[5] = { + 0, // Analogue + 8, // AES + 10, // SPDIF + 12, // ADAT + 6 // Phone +}; + +char channel_map_aio_in_ss[HDSPM_MAX_CHANNELS] = { + 0, 1, /* line in */ + 8, 9, /* AES in, */ + 10, 11, /* SPDIF in */ + 12, 13, 14, 15, 16, 17, 18, 19, /* ADAT in */ + -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, +}; + +char channel_map_aio_out_ss[HDSPM_MAX_CHANNELS] = { + 0, 1, /* line out */ + 8, 9, /* AES out */ + 10, 11, /* SPDIF out */ + 12, 13, 14, 15, 16, 17, 18, 19, /* ADAT out */ + 6, 7, /* phone out */ + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, +}; + +char channel_map_aio_in_ds[HDSPM_MAX_CHANNELS] = { + 0, 1, /* line in */ + 8, 9, /* AES in */ + 10, 11, /* SPDIF in */ + 12, 14, 16, 18, /* ADAT in */ + -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 +}; + +char channel_map_aio_out_ds[HDSPM_MAX_CHANNELS] = { + 0, 1, /* line out */ + 8, 9, /* AES out */ + 10, 11, /* SPDIF out */ + 12, 14, 16, 18, /* ADAT out */ + 6, 7, /* phone out */ + -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 +}; + +char channel_map_aio_in_qs[HDSPM_MAX_CHANNELS] = { + 0, 1, /* line in */ + 8, 9, /* AES in */ + 10, 11, /* SPDIF in */ + 12, 16, /* ADAT in */ + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 +}; + +char channel_map_aio_out_qs[HDSPM_MAX_CHANNELS] = { + 0, 1, /* line out */ + 8, 9, /* AES out */ + 10, 11, /* SPDIF out */ + 12, 16, /* ADAT out */ + 6, 7, /* phone out */ + -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 +}; + +// HDSP AES32 and HDSPe AES + +char dest_map_aes32[8] = { + 0, 2, 4, 6, 8, 10, 12, 14 +}; + +char channel_map_aes32[HDSPM_MAX_CHANNELS] = { + 0, 1, /* AES 1 */ + 2, 3, /* AES 2 */ + 4, 5, /* AES 3 */ + 6, 7, /* AES 4 */ + 8, 9, /* AES 5 */ + 10, 11, /* AES 6 */ + 12, 13, /* AES 7 */ + 14, 15, /* AES 8 */ + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 +}; + diff --git a/hdspmixer/src/channelmap.h b/hdspmixer/src/channelmap.h index 8939b78..6b151a0 100644 --- a/hdspmixer/src/channelmap.h +++ b/hdspmixer/src/channelmap.h @@ -25,6 +25,9 @@ #ifndef channelmap_H #define channelmap_H +#include +#include + /*** * * hdsp cards @@ -33,83 +36,43 @@ // Digiface -static char dest_map_df_ss[14] = { - 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26 -}; +extern char dest_map_df_ss[14]; -static char channel_map_df_ss[26] = { - 0, 1, 2, 3, 4, 5, 6, 7, /* ADAT 1 */ - 8, 9, 10, 11, 12, 13, 14, 15, /* ADAT 2 */ - 16, 17, 18, 19, 20, 21, 22, 23, /* ADAT 3 */ - 24, 25 /* SPDIF */ -}; +extern char channel_map_df_ss[26]; // Multiface -static char dest_map_mf_ss[10] = { - 0, 2, 4, 6, 16, 18, 20, 22, 24, 26 -}; +extern char dest_map_mf_ss[10]; -static char channel_map_mf_ss[26] = { - 0, 1, 2, 3, 4, 5, 6, 7, /* Line in */ - 16, 17, 18, 19, 20, 21, 22, 23, /* ADAT */ - 24, 25, /* SPDIF */ - -1, -1, -1, -1, -1, -1, -1, -1 -}; +extern char channel_map_mf_ss[26]; // Digiface/Multiface -static char meter_map_ds[26] = { - 0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, - 24, 25, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 -}; +extern char meter_map_ds[26]; -static char channel_map_ds[26] = { - 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, - 24, 25, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 -}; +extern char channel_map_ds[26]; -static char dest_map_ds[8] = { - 0, 2, 8, 10, 16, 18, 24, 26 -}; +extern char dest_map_ds[8]; // HDSP 9652 -static char dest_map_h9652_ss[13] = { - 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24 -}; +extern char dest_map_h9652_ss[13]; -static char dest_map_h9652_ds[7] = { - 0, 2, 8, 10, 16, 18, 24 -}; +extern char dest_map_h9652_ds[7]; // HDSP 9632 -static char dest_map_h9632_ss[8] = { - 0, 2, 4, 6, 8, 10, 12, 14 -}; +extern char dest_map_h9632_ss[8]; -static char dest_map_h9632_ds[6] = { - 0, 2, 8, 10, 12, 14 -}; +extern char dest_map_h9632_ds[6]; -static char dest_map_h9632_qs[4] = { - 8, 10, 12, 14 -}; +extern char dest_map_h9632_qs[4]; -static char channel_map_h9632_ss[16] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 -}; +extern char channel_map_h9632_ss[16]; -static char channel_map_h9632_ds[12] = { - 0, 1, 2, 3, 8, 9, 10, 11, 12, 13, 14, 15 -}; +extern char channel_map_h9632_ds[12]; -static char channel_map_h9632_qs[8] = { - 8, 9, 10, 11, 12, 13, 14, 15 -}; +extern char channel_map_h9632_qs[8]; /*** @@ -120,250 +83,53 @@ static char channel_map_h9632_qs[8] = { // HDSPe MADI and MADIface -static char dest_map_unity[32] = { - 0, 2, 4, 6, 8, 10, 12, 14, - 16, 18, 20, 22, 24, 26, 28, 30, - 32, 34, 36, 38, 40, 42, 44, 46, - 48, 50, 52, 54, 56, 58, 60, 62 -}; +extern char dest_map_unity[32]; -static char channel_map_unity_ss[HDSPM_MAX_CHANNELS] = { - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63 -}; +extern char channel_map_unity_ss[HDSPM_MAX_CHANNELS]; -static char channel_map_unity_ds[HDSPM_MAX_CHANNELS] = { - 0, 2, 4, 6, 8, 10, 12, 14, - 16, 18, 20, 22, 24, 26, 28, 30, - 32, 34, 36, 38, 40, 42, 44, 46, - 48, 50, 52, 54, 56, 58, 60, 62, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -}; +extern char channel_map_unity_ds[HDSPM_MAX_CHANNELS]; -static char channel_map_unity_qs[HDSPM_MAX_CHANNELS] = { - 0, 4, 8, 12, 16, 20, 24, 28, - 32, 36, 40, 44, 48, 52, 56, 60, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -}; +extern char channel_map_unity_qs[HDSPM_MAX_CHANNELS]; // HDSPe RayDAT -static char dest_map_raydat_ss[18] = { - 4, 6, 8, 10, - 12, 14, 16, 18, - 20, 22, 24, 26, - 28, 30, 32, 34, - 0, 2 -}; +extern char dest_map_raydat_ss[18]; -static char dest_map_raydat_ds[10] = { - 4, 6, - 8, 10, - 12, 14, - 16, 18, - 0, 2 -}; +extern char dest_map_raydat_ds[10]; -static char dest_map_raydat_qs[6] = { - 4, - 6, - 8, - 10, - 0, 2 -}; +extern char dest_map_raydat_qs[6]; -static char channel_map_raydat_ss[HDSPM_MAX_CHANNELS] = { - 4, 5, 6, 7, 8, 9, 10, 11, /* ADAT 1 */ - 12, 13, 14, 15, 16, 17, 18, 19, /* ADAT 2 */ - 20, 21, 22, 23, 24, 25, 26, 27, /* ADAT 3 */ - 28, 29, 30, 31, 32, 33, 34, 35, /* ADAT 4 */ - 0, 1, /* AES */ - 2, 3, /* SPDIF */ - -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -}; +extern char channel_map_raydat_ss[HDSPM_MAX_CHANNELS]; -static char channel_map_raydat_ds[HDSPM_MAX_CHANNELS] = { - 4, 5, 6, 7, /* ADAT 1 */ - 8, 9, 10, 11, /* ADAT 2 */ - 12, 13, 14, 15, /* ADAT 3 */ - 16, 17, 18, 19, /* ADAT 4 */ - 0, 1, /* AES */ - 2, 3, /* SPDIF */ - -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -}; +extern char channel_map_raydat_ds[HDSPM_MAX_CHANNELS]; -static char channel_map_raydat_qs[HDSPM_MAX_CHANNELS] = { - 4, 5, /* ADAT 1 */ - 6, 7, /* ADAT 2 */ - 8, 9, /* ADAT 3 */ - 10, 11, /* ADAT 4 */ - 0, 1, /* AES */ - 2, 3, /* SPDIF */ - -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -}; +extern char channel_map_raydat_qs[HDSPM_MAX_CHANNELS]; // HDSPe AIO -static char dest_map_aio_ss[8] = { - 0, // Analogue - 8, // AES - 10, // SPDIF - 12, 14, 16, 18, // ADAT - 6 // Phones -}; +extern char dest_map_aio_ss[8]; -static char dest_map_aio_ds[6] = { - 0, // Analogue - 8, // AES - 10, // SPDIF - 12, 16, // ADAT - 6 // Phones -}; +extern char dest_map_aio_ds[6]; -static char dest_map_aio_qs[5] = { - 0, // Analogue - 8, // AES - 10, // SPDIF - 12, // ADAT - 6 // Phone -}; +extern char dest_map_aio_qs[5]; -static char channel_map_aio_in_ss[HDSPM_MAX_CHANNELS] = { - 0, 1, /* line in */ - 8, 9, /* AES in, */ - 10, 11, /* SPDIF in */ - 12, 13, 14, 15, 16, 17, 18, 19, /* ADAT in */ - -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -}; +extern char channel_map_aio_in_ss[HDSPM_MAX_CHANNELS]; -static char channel_map_aio_out_ss[HDSPM_MAX_CHANNELS] = { - 0, 1, /* line out */ - 8, 9, /* AES out */ - 10, 11, /* SPDIF out */ - 12, 13, 14, 15, 16, 17, 18, 19, /* ADAT out */ - 6, 7, /* phone out */ - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -}; +extern char channel_map_aio_out_ss[HDSPM_MAX_CHANNELS]; -static char channel_map_aio_in_ds[HDSPM_MAX_CHANNELS] = { - 0, 1, /* line in */ - 8, 9, /* AES in */ - 10, 11, /* SPDIF in */ - 12, 14, 16, 18, /* ADAT in */ - -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1 -}; +extern char channel_map_aio_in_ds[HDSPM_MAX_CHANNELS]; -static char channel_map_aio_out_ds[HDSPM_MAX_CHANNELS] = { - 0, 1, /* line out */ - 8, 9, /* AES out */ - 10, 11, /* SPDIF out */ - 12, 14, 16, 18, /* ADAT out */ - 6, 7, /* phone out */ - -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1 -}; +extern char channel_map_aio_out_ds[HDSPM_MAX_CHANNELS]; -static char channel_map_aio_in_qs[HDSPM_MAX_CHANNELS] = { - 0, 1, /* line in */ - 8, 9, /* AES in */ - 10, 11, /* SPDIF in */ - 12, 16, /* ADAT in */ - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1 -}; +extern char channel_map_aio_in_qs[HDSPM_MAX_CHANNELS]; -static char channel_map_aio_out_qs[HDSPM_MAX_CHANNELS] = { - 0, 1, /* line out */ - 8, 9, /* AES out */ - 10, 11, /* SPDIF out */ - 12, 16, /* ADAT out */ - 6, 7, /* phone out */ - -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1 -}; +extern char channel_map_aio_out_qs[HDSPM_MAX_CHANNELS]; // HDSP AES32 and HDSPe AES -static char dest_map_aes32[8] = { - 0, 2, 4, 6, 8, 10, 12, 14 -}; +extern char dest_map_aes32[8]; -static char channel_map_aes32[HDSPM_MAX_CHANNELS] = { - 0, 1, /* AES 1 */ - 2, 3, /* AES 2 */ - 4, 5, /* AES 3 */ - 6, 7, /* AES 4 */ - 8, 9, /* AES 5 */ - 10, 11, /* AES 6 */ - 12, 13, /* AES 7 */ - 14, 15, /* AES 8 */ - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1 -}; +extern char channel_map_aes32[HDSPM_MAX_CHANNELS]; #endif /* channelmap_H */ From 05d6bc9728071b0b805fe551603ebeb4d7e7bd28 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Tue, 1 Mar 2011 10:42:26 +0100 Subject: [PATCH 028/166] hdspmixer: Lower nesting depth in label assignment This fix is mostly cosmetic, the long if-then-else-if-chain was rather confusing. To improve code readability, use simple if-then statements and leave the function as soon as a match is found. Clear code would probably use a two-dimensional map, but it seems rather overengineered. Last but not least, the non-matching case was augmented by assigning a generic "1", "2", "3" .. channel naming schema to prevent hdspmixer from crashing. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerOutput.cxx | 149 +++++++++++++++++------------- 1 file changed, 85 insertions(+), 64 deletions(-) diff --git a/hdspmixer/src/HDSPMixerOutput.cxx b/hdspmixer/src/HDSPMixerOutput.cxx index 05a126c..b0064c2 100644 --- a/hdspmixer/src/HDSPMixerOutput.cxx +++ b/hdspmixer/src/HDSPMixerOutput.cxx @@ -198,71 +198,92 @@ void HDSPMixerOutput::setLabels() int sm = basew->cards[basew->current_card]->speed_mode; if (type == H9632) { - switch (sm) { - case 0: - labels_input = labels_playback = labels_9632_ss; - break; - case 1: - labels_input = labels_playback = labels_9632_ds; - break; - case 2: - labels_input = labels_playback = labels_9632_qs; - break; - } - } else if (type == Multiface) { - if (sm) - labels_input = labels_playback = labels_mf_ds; - else - labels_input = labels_playback = labels_mf_ss; - } else if (type == Digiface) { - if (sm) - labels_input = labels_playback = labels_df_ds; - else - labels_input = labels_playback = labels_df_ss; - } else if (HDSPeMADI == type) { - switch (sm) { - case 0: - labels_input = labels_playback = labels_madi_ss; - break; - case 1: - labels_input = labels_playback = labels_madi_ds; - break; - case 2: - labels_input = labels_playback = labels_madi_qs; - break; - } - } else if (HDSP_AES == type) { - labels_input = labels_playback = labels_aes32; - } else if (HDSPeAIO == type) { - switch (sm) { - case 0: - labels_input = labels_aio_ss_input; - labels_playback = labels_aio_ss_playback; - break; - case 1: - labels_input = labels_aio_ds_input; - labels_playback = labels_aio_ds_playback; - break; - case 2: - labels_input = labels_aio_qs_input; - labels_playback = labels_aio_ds_playback; - break; - } - } else if (HDSPeRayDAT == type) { - switch (sm) { - case 0: - labels_input = labels_playback = labels_raydat_ss; - break; - case 1: - labels_input = labels_playback = labels_raydat_ds; - break; - case 2: - labels_input = labels_playback = labels_raydat_qs; - break; - } - } else { - fprintf(stderr, "Unknown card type for output labels\n"); + switch (sm) { + case 0: + labels_input = labels_playback = labels_9632_ss; + break; + case 1: + labels_input = labels_playback = labels_9632_ds; + break; + case 2: + labels_input = labels_playback = labels_9632_qs; + break; + } + return; } + + if (type == Multiface) { + if (sm) + labels_input = labels_playback = labels_mf_ds; + else + labels_input = labels_playback = labels_mf_ss; + return; + }; + + if (type == Digiface) { + if (sm) + labels_input = labels_playback = labels_df_ds; + else + labels_input = labels_playback = labels_df_ss; + return; + } + + + if (HDSPeMADI == type) { + switch (sm) { + case 0: + labels_input = labels_playback = labels_madi_ss; + break; + case 1: + labels_input = labels_playback = labels_madi_ds; + break; + case 2: + labels_input = labels_playback = labels_madi_qs; + break; + } + return; + } + + if (HDSP_AES == type) { + labels_input = labels_playback = labels_aes32; + return; + } + + if (HDSPeAIO == type) { + switch (sm) { + case 0: + labels_input = labels_aio_ss_input; + labels_playback = labels_aio_ss_playback; + break; + case 1: + labels_input = labels_aio_ds_input; + labels_playback = labels_aio_ds_playback; + break; + case 2: + labels_input = labels_aio_qs_input; + labels_playback = labels_aio_ds_playback; + break; + } + return; + } + + if (HDSPeRayDAT == type) { + switch (sm) { + case 0: + labels_input = labels_playback = labels_raydat_ss; + break; + case 1: + labels_input = labels_playback = labels_raydat_ds; + break; + case 2: + labels_input = labels_playback = labels_raydat_qs; + break; + } + return; + } + + fprintf(stderr, "Unknown card type for output labels, assigning defaults\n"); + labels_input = labels_playback = labels_madi_ss; } void HDSPMixerOutput::draw_background() From 863c47cebe7c341d4034669d5793ce92a875ad13 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Tue, 1 Mar 2011 10:42:27 +0100 Subject: [PATCH 029/166] hdspmixer: Fix labels on H9652 The H9652 uses the same layout as the Digiface, except Digiface features an additional headphones out. That's why the channel mappings are the same, but Digiface has mexdest=14 while H9652 has maxdest=13 (12 ADAT pairs, another pair for S/PDIF and headphone-L/R on Digiface) Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerOutput.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hdspmixer/src/HDSPMixerOutput.cxx b/hdspmixer/src/HDSPMixerOutput.cxx index b0064c2..5047825 100644 --- a/hdspmixer/src/HDSPMixerOutput.cxx +++ b/hdspmixer/src/HDSPMixerOutput.cxx @@ -220,7 +220,7 @@ void HDSPMixerOutput::setLabels() return; }; - if (type == Digiface) { + if (type == Digiface || type == H9652) { if (sm) labels_input = labels_playback = labels_df_ds; else From 92e0a21b894fc06e7ca3fa6561e4a2250af6b4f4 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Mon, 7 Mar 2011 19:03:02 +0100 Subject: [PATCH 030/166] hdspmixer: Replace hardcoded 3 by MAX_CARDS We have a define for the number of cards. Use it. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerIOMixer.cxx | 2 +- hdspmixer/src/HDSPMixerWindow.cxx | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/hdspmixer/src/HDSPMixerIOMixer.cxx b/hdspmixer/src/HDSPMixerIOMixer.cxx index a81f4a2..987be41 100644 --- a/hdspmixer/src/HDSPMixerIOMixer.cxx +++ b/hdspmixer/src/HDSPMixerIOMixer.cxx @@ -37,7 +37,7 @@ HDSPMixerIOMixer::HDSPMixerIOMixer(int x, int y, int w, int h, int ch, int type) relative_num = channel_num-1; p_iomixer_xpm = iomixer_r_xpm; } - for (int j = 0; j < 3; ++j) { + for (int j = 0; j < MAX_CARDS; ++j) { for (int i = 0; i < 8; ++i) { data[j][0][i] = new HDSPMixerStripData(); data[j][1][i] = new HDSPMixerStripData(); diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index 27003a0..f52470f 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -344,7 +344,7 @@ void HDSPMixerWindow::save() inputs->buttons->presets->save_preset(current_preset+1); } for (int speed = 0; speed < 3; ++speed) { - for (int card = 0; card < 3; ++card) { + for (int card = 0; card < MAX_CARDS; ++card) { for (int preset = 0; preset < 8; ++preset) { for (int channel = 0; channel < HDSP_MAX_CHANNELS; ++channel) { /* inputs pans and volumes */ @@ -440,7 +440,7 @@ void HDSPMixerWindow::load() return; } for (int speed = 0; speed < 3; ++speed) { - for (int card = 0; card < 3; ++card) { + for (int card = 0; card < MAX_CARDS; ++card) { for (int preset = 0; preset < 8; ++preset) { for (int channel = 0; channel < HDSP_MAX_CHANNELS; ++channel) { /* inputs pans and volumes */ @@ -705,7 +705,7 @@ HDSPMixerWindow::HDSPMixerWindow(int x, int y, int w, int h, const char *label, prefs->flush(); } } - for (int j = 0; j < 3; ++j) { + for (int j = 0; j < MAX_CARDS; j++) { for (int i = 0; i < 8; ++i) { data[j][0][i] = new HDSPMixerPresetData(); data[j][1][i] = new HDSPMixerPresetData(); From 2b10cb8be85c6ce31ff8a217be446178daeb8359 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Mon, 7 Mar 2011 19:03:03 +0100 Subject: [PATCH 031/166] hdspmixer: Fix preset activation segfault on AES(32) When selecting preset 6 or 7 on AES(32), hdspmixer has caused a segfault due to indirect out of bound access on the destination label array. The amount of destinations is the number of physical stereo pairs, so it's usually half the channel count, in some cases one more if there are additional headphone jacks. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerWindow.cxx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index f52470f..8c057e0 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -582,9 +582,9 @@ void HDSPMixerWindow::restoreDefaults(int card) chnls[0] = 16; chnls[1] = 16; chnls[2] = 16; - maxdest[0] = 16; - maxdest[1] = 16; - maxdest[2] = 16; + maxdest[0] = 8; + maxdest[1] = 8; + maxdest[2] = 8; num_modes = 3; break; case HDSPeAIO: @@ -610,6 +610,7 @@ void HDSPMixerWindow::restoreDefaults(int card) /* should never happen */ return; } + for (int preset = 0; preset < 8; ++preset) { for (int speed = 0; speed < num_modes; ++speed) { for (int i = 0; i < chnls[speed]; i+=2) { From 53e4a1a44e1e0a66658803dfb402808e5b302749 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Mon, 7 Mar 2011 19:03:04 +0100 Subject: [PATCH 032/166] hdspmixer: Adjust playback channel count on Multiface. The multiface has 18/14 (SS/DS) playback channels, matching the native 18/14 I/O ports. Headphones don't count (only for #destinations). Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerCard.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hdspmixer/src/HDSPMixerCard.cxx b/hdspmixer/src/HDSPMixerCard.cxx index eb51155..cd6a922 100644 --- a/hdspmixer/src/HDSPMixerCard.cxx +++ b/hdspmixer/src/HDSPMixerCard.cxx @@ -211,14 +211,14 @@ void HDSPMixerCard::adjustSettings() { switch (speed_mode) { case 0: channels_input = 18; - channels_playback = 20; + channels_playback = 18; channel_map_input = channel_map_playback = channel_map_mf_ss; dest_map = dest_map_mf_ss; meter_map_input = meter_map_playback = channel_map_mf_ss; break; case 1: channels_input = 14; - channels_playback = 16; + channels_playback = 14; channel_map_input = channel_map_playback = meter_map_ds; dest_map = dest_map_ds; meter_map_input = meter_map_playback = meter_map_ds; From 455a06756f8e8b785115531121b525f1e492ddad Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Mon, 7 Mar 2011 19:03:05 +0100 Subject: [PATCH 033/166] hdspmixer: Introduce output channel count for all cards. Some cards (like multiface) have more physical output ports than playback ports, mostly because of additional headphones out. For those cards, the old abstraction model of channels_input and channels_output doesn't fit, so let's introduce channels_output. Of course, channels_output is always 2*max_dest at the given speed_mode (SS/DS/QS), so one could extend this idea, store all destination settings in channels_output[3] (one for each speed mode) and rip off the massive code duplication for setting maxdest or max_dest respectively. Note that dest_map_whatever_speed_mode's array size indirectly defines the right value for channels_output (read: even more unwanted redundancy) Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerCard.cxx | 32 ++++++++++++++++++++++++++++--- hdspmixer/src/HDSPMixerCard.h | 1 + hdspmixer/src/HDSPMixerWindow.cxx | 4 ++-- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/hdspmixer/src/HDSPMixerCard.cxx b/hdspmixer/src/HDSPMixerCard.cxx index cd6a922..3ddbf62 100644 --- a/hdspmixer/src/HDSPMixerCard.cxx +++ b/hdspmixer/src/HDSPMixerCard.cxx @@ -212,6 +212,7 @@ void HDSPMixerCard::adjustSettings() { case 0: channels_input = 18; channels_playback = 18; + channels_output = 20; /* SS 8xAnalog+8xADAT+2xSPDIF+2xHeadphone */ channel_map_input = channel_map_playback = channel_map_mf_ss; dest_map = dest_map_mf_ss; meter_map_input = meter_map_playback = channel_map_mf_ss; @@ -219,6 +220,7 @@ void HDSPMixerCard::adjustSettings() { case 1: channels_input = 14; channels_playback = 14; + channels_output = 16; /* DS 8xAnalog+4xADAT(SMUX)+2xSPDIF+2xHeadphone */ channel_map_input = channel_map_playback = meter_map_ds; dest_map = dest_map_ds; meter_map_input = meter_map_playback = meter_map_ds; @@ -231,12 +233,14 @@ void HDSPMixerCard::adjustSettings() { switch (speed_mode) { case 0: channels_input = channels_playback = 26; + channels_output = 28; /* SS 3x8xADAT+2xSPDIF+2xHeadphone */ channel_map_input = channel_map_playback = channel_map_df_ss; dest_map = dest_map_df_ss; meter_map_input = meter_map_playback = channel_map_df_ss; break; case 1: channels_input = channels_playback = 14; + channels_output = 16; /* DS 3x4xADAT(SMUX)+2xSPDIF+2xHeadphone */ channel_map_input = channel_map_playback = meter_map_ds; dest_map = dest_map_ds; meter_map_input = meter_map_playback = meter_map_ds; @@ -249,12 +253,14 @@ void HDSPMixerCard::adjustSettings() { switch (speed_mode) { case 0: channels_input = channels_playback = 26; + channels_output = 26; /* SS like Digiface, but no Headphones */ channel_map_input = channel_map_playback = channel_map_df_ss; dest_map = dest_map_h9652_ss; meter_map_input = meter_map_playback = channel_map_df_ss; break; case 1: channels_input = channels_playback = 14; + channels_output = 14; /* DS like Digiface, but no Headphones */ channel_map_input = channel_map_playback = channel_map_ds; dest_map = dest_map_h9652_ds; meter_map_input = meter_map_playback = meter_map_ds; @@ -267,18 +273,21 @@ void HDSPMixerCard::adjustSettings() { switch (speed_mode) { case 0: channels_input = channels_playback = 12 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); + channels_output = channels_playback; /* untested, no idea about this card */ channel_map_input = channel_map_playback = channel_map_h9632_ss; dest_map = dest_map_h9632_ss; meter_map_input = meter_map_playback = channel_map_h9632_ss; break; case 1: channels_input = channels_playback = 8 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); + channels_output = channels_playback; /* untested, no idea about this card */ channel_map_input = channel_map_playback = channel_map_h9632_ds; dest_map = dest_map_h9632_ds; meter_map_input = meter_map_playback = channel_map_h9632_ds; break; case 2: channels_input = channels_playback = 4 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); + channels_output = channels_playback; /* untested, no idea about this card */ channel_map_input = channel_map_playback = channel_map_h9632_qs; dest_map = dest_map_h9632_qs; meter_map_input = meter_map_playback = channel_map_h9632_qs; @@ -290,18 +299,21 @@ void HDSPMixerCard::adjustSettings() { switch (speed_mode) { case 0: // SS channels_input = channels_playback = 64; + channels_output = channels_input; /* SS headphones missing, at least HDSPe MADI has some, MADIface hasn't */ channel_map_input = channel_map_playback = channel_map_unity_ss; dest_map = dest_map_unity; meter_map_input = meter_map_playback = channel_map_unity_ss; break; case 1: // DS channels_input = channels_playback = 32; + channels_output = channels_input; /* DS headphones missing, at least HDSPe MADI has some, MADIface hasn't */ channel_map_input = channel_map_playback = channel_map_unity_ss; dest_map = dest_map_unity; meter_map_input = meter_map_playback = channel_map_unity_ss; break; case 2: // QS channels_input = channels_playback = 16; + channels_output = channels_input; /* QS headphones missing, at least HDSPe MADI has some, MADIface hasn't */ channel_map_input = channel_map_playback = channel_map_unity_ss; dest_map = dest_map_unity; meter_map_input = meter_map_playback = channel_map_unity_ss; @@ -315,6 +327,7 @@ void HDSPMixerCard::adjustSettings() { case 0: // SS channels_input = 14; channels_playback = 16; + channels_output = 16; /* SS 2xAnalog+2xAES+2xSPDIF+4xADAT+2xHeadphones */ channel_map_input = channel_map_aio_in_ss; channel_map_playback = channel_map_aio_out_ss; dest_map = dest_map_aio_ss; @@ -324,6 +337,7 @@ void HDSPMixerCard::adjustSettings() { case 1: // DS channels_input = 10; channels_playback = 12; + channels_output = 12; /* DS 2xAnalog+2xAES+2xSPDIF+4xADAT(SMUX)+2xHeadphones */ channel_map_input = channel_map_aio_in_ds; channel_map_playback = channel_map_aio_out_ds; dest_map = dest_map_aio_ds; @@ -333,6 +347,7 @@ void HDSPMixerCard::adjustSettings() { case 2: // QS channels_input = 8; channels_playback = 10; + channels_output = 10; /* QS 2xAnalog+2xAES+2xSPDIF+2xADAT(SMUX)+2xHeadphones */ channel_map_input = channel_map_aio_in_qs; channel_map_playback = channel_map_aio_out_qs; dest_map = dest_map_aio_qs; @@ -347,6 +362,7 @@ void HDSPMixerCard::adjustSettings() { /* 16 channels for all modes */ channels_input = 16; channels_playback = 16; + channels_output = 16; channel_map_input = channel_map_aes32; channel_map_playback = channel_map_aes32; dest_map = dest_map_aes32; @@ -360,13 +376,15 @@ void HDSPMixerCard::adjustSettings() { case 0: // SS channels_input = 36; channels_playback = 36; + channels_output = 36; /* SS 4x8xADAT+2xAES/EBU+2xSPDIF */ channel_map_input = channel_map_playback = channel_map_raydat_ss; dest_map = dest_map_raydat_ss; meter_map_input = meter_map_playback = channel_map_raydat_ss; break; case 1: // DS channels_input = 20; - channels_playback = 20; + channels_playback = 20; + channels_output = 20; /* DS 4x4xADAT(SMUX)+2xAES/EBU+2xSPDIF */ channel_map_input = channel_map_playback = channel_map_raydat_ds; dest_map = dest_map_raydat_ds; meter_map_input = meter_map_playback = channel_map_raydat_ds; @@ -374,6 +392,7 @@ void HDSPMixerCard::adjustSettings() { case 2: // QS channels_input = 12; channels_playback = 12; + channels_output = 12; /* QS 4x2xADAT(SMUX)+2xAES/EBU+2xSPDIF */ channel_map_input = channel_map_playback = channel_map_raydat_qs; dest_map = dest_map_raydat_qs; meter_map_input = meter_map_playback = channel_map_raydat_qs; @@ -397,7 +416,9 @@ void HDSPMixerCard::setMode(int mode) } for (int i = 0; i < channels_playback; ++i) { basew->playbacks->strips[i]->targets->setLabels(); - basew->outputs->strips[i]->setLabels(); + } + for (int i = 0; i < channels_output; ++i) { + basew->outputs->strips[i]->setLabels(); } if (h9632_aeb.aebo && !h9632_aeb.aebi) { @@ -435,11 +456,16 @@ void HDSPMixerCard::actualizeStrips() } else { basew->inputs->strips[i]->hide(); } + if (i < channels_playback) { basew->playbacks->strips[i]->show(); - basew->outputs->strips[i]->show(); } else { basew->playbacks->strips[i]->hide(); + } + + if (i < channels_output) { + basew->outputs->strips[i]->show(); + } else { basew->outputs->strips[i]->hide(); } } diff --git a/hdspmixer/src/HDSPMixerCard.h b/hdspmixer/src/HDSPMixerCard.h index cfb2402..b721bd9 100644 --- a/hdspmixer/src/HDSPMixerCard.h +++ b/hdspmixer/src/HDSPMixerCard.h @@ -44,6 +44,7 @@ public: char name[6]; HDSPMixerCard(int cardtype, int id); int channels_input, channels_playback, window_width, window_height, card_id; + int channels_output; int type; char *channel_map_input, *channel_map_playback; char *dest_map; diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index 8c057e0..8f44c99 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -109,7 +109,7 @@ static void readregisters_cb(void *arg) } if (w->inputs->buttons->output) { - for (int i = 0; i < w->cards[w->current_card]->channels_playback; ++i) { + for (int i = 0; i < w->cards[w->current_card]->channels_output; ++i) { w->outputs->strips[i]->meter->update(output_peaks[(w->cards[w->current_card]->meter_map_playback[i])] & 0xffffff00, output_peaks[(w->cards[w->current_card]->meter_map_playback[i])] & 0xf, output_rms[(w->cards[w->current_card]->meter_map_playback[i])]); @@ -738,7 +738,7 @@ HDSPMixerWindow::HDSPMixerWindow(int x, int y, int w, int h, const char *label, inputs->buttons->submix = 1; inputs->buttons->playback = 1; playbacks = new HDSPMixerPlaybacks(0, MENU_HEIGHT+FULLSTRIP_HEIGHT, w, FULLSTRIP_HEIGHT, cards[0]->channels_playback); - outputs = new HDSPMixerOutputs(0, MENU_HEIGHT+FULLSTRIP_HEIGHT*2, w, SMALLSTRIP_HEIGHT, cards[0]->channels_playback); + outputs = new HDSPMixerOutputs(0, MENU_HEIGHT+FULLSTRIP_HEIGHT*2, w, SMALLSTRIP_HEIGHT, cards[0]->channels_output); scroll->end(); end(); setup = new HDSPMixerSetup(400, 260, "Level Meters Setup", this); From 24832bf340f3437d4b80d9e81af59a2b0624172e Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Mon, 7 Mar 2011 19:03:06 +0100 Subject: [PATCH 034/166] hdspmixer: Provide headphones out on Multiface/Digiface Both, Multiface and Digiface feature a separate headphone submix, so reflect this additional pair of channels in the corresponding maps. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/channelmap.cxx | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/hdspmixer/src/channelmap.cxx b/hdspmixer/src/channelmap.cxx index f2f0585..598be56 100644 --- a/hdspmixer/src/channelmap.cxx +++ b/hdspmixer/src/channelmap.cxx @@ -54,15 +54,18 @@ char channel_map_mf_ss[26] = { 0, 1, 2, 3, 4, 5, 6, 7, /* Line in */ 16, 17, 18, 19, 20, 21, 22, 23, /* ADAT */ 24, 25, /* SPDIF */ - -1, -1, -1, -1, -1, -1, -1, -1 + 26, 27, /* Phones L+R, only a destination channel */ + -1, -1, -1, -1, -1, -1 }; // Digiface/Multiface char meter_map_ds[26] = { - 0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, - 24, 25, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + 0, 1, 2, 3, 8, 9, 10, 11, /* analog 1-8 on Multiface, ADAT1+2 on Digiface*/ + 16, 17, 18, 19, /* ADAT on Multiface, ADAT3 on Digiface */ + 24, 25, /* SPDIF */ + 26, 27, /* Headphones */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; char channel_map_ds[26] = { From 27f5bbfd9e72180d9a3ba1c4d3c3c44cfebde11f Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Mon, 7 Mar 2011 19:03:07 +0100 Subject: [PATCH 035/166] hdspmixer: Fix code indentation Only cosmetics, no changed semantics. Indent the whole function to get rid of a mixture of tabs and spaces. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerCard.cxx | 354 ++++++++++++++++---------------- 1 file changed, 177 insertions(+), 177 deletions(-) diff --git a/hdspmixer/src/HDSPMixerCard.cxx b/hdspmixer/src/HDSPMixerCard.cxx index 3ddbf62..bf7009f 100644 --- a/hdspmixer/src/HDSPMixerCard.cxx +++ b/hdspmixer/src/HDSPMixerCard.cxx @@ -208,202 +208,202 @@ void HDSPMixerCard::getAeb() { void HDSPMixerCard::adjustSettings() { if (type == Multiface) { - switch (speed_mode) { - case 0: - channels_input = 18; - channels_playback = 18; - channels_output = 20; /* SS 8xAnalog+8xADAT+2xSPDIF+2xHeadphone */ - channel_map_input = channel_map_playback = channel_map_mf_ss; - dest_map = dest_map_mf_ss; - meter_map_input = meter_map_playback = channel_map_mf_ss; - break; - case 1: - channels_input = 14; - channels_playback = 14; - channels_output = 16; /* DS 8xAnalog+4xADAT(SMUX)+2xSPDIF+2xHeadphone */ - channel_map_input = channel_map_playback = meter_map_ds; - dest_map = dest_map_ds; - meter_map_input = meter_map_playback = meter_map_ds; - break; - case 2: - /* should never happen */ - break; - } + switch (speed_mode) { + case 0: + channels_input = 18; + channels_playback = 18; + channels_output = 20; /* SS 8xAnalog+8xADAT+2xSPDIF+2xHeadphone */ + channel_map_input = channel_map_playback = channel_map_mf_ss; + dest_map = dest_map_mf_ss; + meter_map_input = meter_map_playback = channel_map_mf_ss; + break; + case 1: + channels_input = 14; + channels_playback = 14; + channels_output = 16; /* DS 8xAnalog+4xADAT(SMUX)+2xSPDIF+2xHeadphone */ + channel_map_input = channel_map_playback = meter_map_ds; + dest_map = dest_map_ds; + meter_map_input = meter_map_playback = meter_map_ds; + break; + case 2: + /* should never happen */ + break; + } } else if (type == Digiface) { - switch (speed_mode) { - case 0: - channels_input = channels_playback = 26; - channels_output = 28; /* SS 3x8xADAT+2xSPDIF+2xHeadphone */ - channel_map_input = channel_map_playback = channel_map_df_ss; - dest_map = dest_map_df_ss; - meter_map_input = meter_map_playback = channel_map_df_ss; - break; - case 1: - channels_input = channels_playback = 14; - channels_output = 16; /* DS 3x4xADAT(SMUX)+2xSPDIF+2xHeadphone */ - channel_map_input = channel_map_playback = meter_map_ds; - dest_map = dest_map_ds; - meter_map_input = meter_map_playback = meter_map_ds; - break; - case 2: - /* should never happen */ - break; - } + switch (speed_mode) { + case 0: + channels_input = channels_playback = 26; + channels_output = 28; /* SS 3x8xADAT+2xSPDIF+2xHeadphone */ + channel_map_input = channel_map_playback = channel_map_df_ss; + dest_map = dest_map_df_ss; + meter_map_input = meter_map_playback = channel_map_df_ss; + break; + case 1: + channels_input = channels_playback = 14; + channels_output = 16; /* DS 3x4xADAT(SMUX)+2xSPDIF+2xHeadphone */ + channel_map_input = channel_map_playback = meter_map_ds; + dest_map = dest_map_ds; + meter_map_input = meter_map_playback = meter_map_ds; + break; + case 2: + /* should never happen */ + break; + } } else if (type == H9652) { - switch (speed_mode) { - case 0: - channels_input = channels_playback = 26; - channels_output = 26; /* SS like Digiface, but no Headphones */ - channel_map_input = channel_map_playback = channel_map_df_ss; - dest_map = dest_map_h9652_ss; - meter_map_input = meter_map_playback = channel_map_df_ss; - break; - case 1: - channels_input = channels_playback = 14; - channels_output = 14; /* DS like Digiface, but no Headphones */ - channel_map_input = channel_map_playback = channel_map_ds; - dest_map = dest_map_h9652_ds; - meter_map_input = meter_map_playback = meter_map_ds; - break; - case 2: - /* should never happen */ - break; - } + switch (speed_mode) { + case 0: + channels_input = channels_playback = 26; + channels_output = 26; /* SS like Digiface, but no Headphones */ + channel_map_input = channel_map_playback = channel_map_df_ss; + dest_map = dest_map_h9652_ss; + meter_map_input = meter_map_playback = channel_map_df_ss; + break; + case 1: + channels_input = channels_playback = 14; + channels_output = 14; /* DS like Digiface, but no Headphones */ + channel_map_input = channel_map_playback = channel_map_ds; + dest_map = dest_map_h9652_ds; + meter_map_input = meter_map_playback = meter_map_ds; + break; + case 2: + /* should never happen */ + break; + } } else if (type == H9632) { - switch (speed_mode) { - case 0: - channels_input = channels_playback = 12 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); - channels_output = channels_playback; /* untested, no idea about this card */ - channel_map_input = channel_map_playback = channel_map_h9632_ss; - dest_map = dest_map_h9632_ss; - meter_map_input = meter_map_playback = channel_map_h9632_ss; - break; - case 1: - channels_input = channels_playback = 8 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); - channels_output = channels_playback; /* untested, no idea about this card */ - channel_map_input = channel_map_playback = channel_map_h9632_ds; - dest_map = dest_map_h9632_ds; - meter_map_input = meter_map_playback = channel_map_h9632_ds; - break; - case 2: - channels_input = channels_playback = 4 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); - channels_output = channels_playback; /* untested, no idea about this card */ - channel_map_input = channel_map_playback = channel_map_h9632_qs; - dest_map = dest_map_h9632_qs; - meter_map_input = meter_map_playback = channel_map_h9632_qs; - break; - } + switch (speed_mode) { + case 0: + channels_input = channels_playback = 12 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); + channels_output = channels_playback; /* untested, no idea about this card */ + channel_map_input = channel_map_playback = channel_map_h9632_ss; + dest_map = dest_map_h9632_ss; + meter_map_input = meter_map_playback = channel_map_h9632_ss; + break; + case 1: + channels_input = channels_playback = 8 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); + channels_output = channels_playback; /* untested, no idea about this card */ + channel_map_input = channel_map_playback = channel_map_h9632_ds; + dest_map = dest_map_h9632_ds; + meter_map_input = meter_map_playback = channel_map_h9632_ds; + break; + case 2: + channels_input = channels_playback = 4 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); + channels_output = channels_playback; /* untested, no idea about this card */ + channel_map_input = channel_map_playback = channel_map_h9632_qs; + dest_map = dest_map_h9632_qs; + meter_map_input = meter_map_playback = channel_map_h9632_qs; + break; + } } else if (HDSPeMADI == type) { - playbacks_offset = 64; + playbacks_offset = 64; - switch (speed_mode) { - case 0: // SS - channels_input = channels_playback = 64; - channels_output = channels_input; /* SS headphones missing, at least HDSPe MADI has some, MADIface hasn't */ - channel_map_input = channel_map_playback = channel_map_unity_ss; - dest_map = dest_map_unity; - meter_map_input = meter_map_playback = channel_map_unity_ss; - break; - case 1: // DS - channels_input = channels_playback = 32; - channels_output = channels_input; /* DS headphones missing, at least HDSPe MADI has some, MADIface hasn't */ - channel_map_input = channel_map_playback = channel_map_unity_ss; - dest_map = dest_map_unity; - meter_map_input = meter_map_playback = channel_map_unity_ss; - break; - case 2: // QS - channels_input = channels_playback = 16; - channels_output = channels_input; /* QS headphones missing, at least HDSPe MADI has some, MADIface hasn't */ - channel_map_input = channel_map_playback = channel_map_unity_ss; - dest_map = dest_map_unity; - meter_map_input = meter_map_playback = channel_map_unity_ss; - break; - } + switch (speed_mode) { + case 0: // SS + channels_input = channels_playback = 64; + channels_output = channels_input; /* SS headphones missing, at least HDSPe MADI has some, MADIface hasn't */ + channel_map_input = channel_map_playback = channel_map_unity_ss; + dest_map = dest_map_unity; + meter_map_input = meter_map_playback = channel_map_unity_ss; + break; + case 1: // DS + channels_input = channels_playback = 32; + channels_output = channels_input; /* DS headphones missing, at least HDSPe MADI has some, MADIface hasn't */ + channel_map_input = channel_map_playback = channel_map_unity_ss; + dest_map = dest_map_unity; + meter_map_input = meter_map_playback = channel_map_unity_ss; + break; + case 2: // QS + channels_input = channels_playback = 16; + channels_output = channels_input; /* QS headphones missing, at least HDSPe MADI has some, MADIface hasn't */ + channel_map_input = channel_map_playback = channel_map_unity_ss; + dest_map = dest_map_unity; + meter_map_input = meter_map_playback = channel_map_unity_ss; + break; + } } else if (HDSPeAIO == type) { - playbacks_offset = 64; + playbacks_offset = 64; - switch (speed_mode) { - case 0: // SS - channels_input = 14; - channels_playback = 16; - channels_output = 16; /* SS 2xAnalog+2xAES+2xSPDIF+4xADAT+2xHeadphones */ - channel_map_input = channel_map_aio_in_ss; - channel_map_playback = channel_map_aio_out_ss; - dest_map = dest_map_aio_ss; - meter_map_input = channel_map_aio_in_ss; - meter_map_playback = channel_map_aio_out_ss; - break; - case 1: // DS - channels_input = 10; - channels_playback = 12; - channels_output = 12; /* DS 2xAnalog+2xAES+2xSPDIF+4xADAT(SMUX)+2xHeadphones */ - channel_map_input = channel_map_aio_in_ds; - channel_map_playback = channel_map_aio_out_ds; - dest_map = dest_map_aio_ds; - meter_map_input = channel_map_aio_in_ds; - meter_map_playback = channel_map_aio_out_ds; - break; - case 2: // QS - channels_input = 8; - channels_playback = 10; - channels_output = 10; /* QS 2xAnalog+2xAES+2xSPDIF+2xADAT(SMUX)+2xHeadphones */ - channel_map_input = channel_map_aio_in_qs; - channel_map_playback = channel_map_aio_out_qs; - dest_map = dest_map_aio_qs; - meter_map_input = channel_map_aio_in_qs; - meter_map_playback = channel_map_aio_out_qs; - break; - } + switch (speed_mode) { + case 0: // SS + channels_input = 14; + channels_playback = 16; + channels_output = 16; /* SS 2xAnalog+2xAES+2xSPDIF+4xADAT+2xHeadphones */ + channel_map_input = channel_map_aio_in_ss; + channel_map_playback = channel_map_aio_out_ss; + dest_map = dest_map_aio_ss; + meter_map_input = channel_map_aio_in_ss; + meter_map_playback = channel_map_aio_out_ss; + break; + case 1: // DS + channels_input = 10; + channels_playback = 12; + channels_output = 12; /* DS 2xAnalog+2xAES+2xSPDIF+4xADAT(SMUX)+2xHeadphones */ + channel_map_input = channel_map_aio_in_ds; + channel_map_playback = channel_map_aio_out_ds; + dest_map = dest_map_aio_ds; + meter_map_input = channel_map_aio_in_ds; + meter_map_playback = channel_map_aio_out_ds; + break; + case 2: // QS + channels_input = 8; + channels_playback = 10; + channels_output = 10; /* QS 2xAnalog+2xAES+2xSPDIF+2xADAT(SMUX)+2xHeadphones */ + channel_map_input = channel_map_aio_in_qs; + channel_map_playback = channel_map_aio_out_qs; + dest_map = dest_map_aio_qs; + meter_map_input = channel_map_aio_in_qs; + meter_map_playback = channel_map_aio_out_qs; + break; + } } else if (HDSP_AES == type) { - playbacks_offset = 64; /* not sure about this one? */ + playbacks_offset = 64; /* not sure about this one? */ - /* 16 channels for all modes */ - channels_input = 16; - channels_playback = 16; - channels_output = 16; - channel_map_input = channel_map_aes32; - channel_map_playback = channel_map_aes32; - dest_map = dest_map_aes32; - meter_map_input = channel_map_aes32; - meter_map_playback = channel_map_aes32; + /* 16 channels for all modes */ + channels_input = 16; + channels_playback = 16; + channels_output = 16; + channel_map_input = channel_map_aes32; + channel_map_playback = channel_map_aes32; + dest_map = dest_map_aes32; + meter_map_input = channel_map_aes32; + meter_map_playback = channel_map_aes32; } else if (HDSPeRayDAT == type) { - playbacks_offset = 64; + playbacks_offset = 64; - switch (speed_mode) { - case 0: // SS - channels_input = 36; - channels_playback = 36; - channels_output = 36; /* SS 4x8xADAT+2xAES/EBU+2xSPDIF */ - channel_map_input = channel_map_playback = channel_map_raydat_ss; - dest_map = dest_map_raydat_ss; - meter_map_input = meter_map_playback = channel_map_raydat_ss; - break; - case 1: // DS - channels_input = 20; - channels_playback = 20; - channels_output = 20; /* DS 4x4xADAT(SMUX)+2xAES/EBU+2xSPDIF */ - channel_map_input = channel_map_playback = channel_map_raydat_ds; - dest_map = dest_map_raydat_ds; - meter_map_input = meter_map_playback = channel_map_raydat_ds; - break; - case 2: // QS - channels_input = 12; - channels_playback = 12; - channels_output = 12; /* QS 4x2xADAT(SMUX)+2xAES/EBU+2xSPDIF */ - channel_map_input = channel_map_playback = channel_map_raydat_qs; - dest_map = dest_map_raydat_qs; - meter_map_input = meter_map_playback = channel_map_raydat_qs; - break; - } + switch (speed_mode) { + case 0: // SS + channels_input = 36; + channels_playback = 36; + channels_output = 36; /* SS 4x8xADAT+2xAES/EBU+2xSPDIF */ + channel_map_input = channel_map_playback = channel_map_raydat_ss; + dest_map = dest_map_raydat_ss; + meter_map_input = meter_map_playback = channel_map_raydat_ss; + break; + case 1: // DS + channels_input = 20; + channels_playback = 20; + channels_output = 20; /* DS 4x4xADAT(SMUX)+2xAES/EBU+2xSPDIF */ + channel_map_input = channel_map_playback = channel_map_raydat_ds; + dest_map = dest_map_raydat_ds; + meter_map_input = meter_map_playback = channel_map_raydat_ds; + break; + case 2: // QS + channels_input = 12; + channels_playback = 12; + channels_output = 12; /* QS 4x2xADAT(SMUX)+2xAES/EBU+2xSPDIF */ + channel_map_input = channel_map_playback = channel_map_raydat_qs; + dest_map = dest_map_raydat_qs; + meter_map_input = meter_map_playback = channel_map_raydat_qs; + break; + } } window_width = (channels_playback+2)*STRIP_WIDTH; window_height = FULLSTRIP_HEIGHT*2+SMALLSTRIP_HEIGHT+MENU_HEIGHT; -} +} void HDSPMixerCard::setMode(int mode) { From 1669acbe34410afef5d57c8b8f3bfecf878cce88 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Mon, 7 Mar 2011 19:03:08 +0100 Subject: [PATCH 036/166] hdspmixer: [cosmetics] Break code into logic blocks Convert the if-then-else-if chain into standalone if-then blocks to improve readability. A switch-case statement would also do the trick, but it's less readable. No (intended) semantic change. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerCard.cxx | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/hdspmixer/src/HDSPMixerCard.cxx b/hdspmixer/src/HDSPMixerCard.cxx index bf7009f..b754b20 100644 --- a/hdspmixer/src/HDSPMixerCard.cxx +++ b/hdspmixer/src/HDSPMixerCard.cxx @@ -229,7 +229,9 @@ void HDSPMixerCard::adjustSettings() { /* should never happen */ break; } - } else if (type == Digiface) { + } + + if (type == Digiface) { switch (speed_mode) { case 0: channels_input = channels_playback = 26; @@ -249,7 +251,9 @@ void HDSPMixerCard::adjustSettings() { /* should never happen */ break; } - } else if (type == H9652) { + } + + if (type == H9652) { switch (speed_mode) { case 0: channels_input = channels_playback = 26; @@ -269,7 +273,9 @@ void HDSPMixerCard::adjustSettings() { /* should never happen */ break; } - } else if (type == H9632) { + } + + if (type == H9632) { switch (speed_mode) { case 0: channels_input = channels_playback = 12 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); @@ -293,7 +299,9 @@ void HDSPMixerCard::adjustSettings() { meter_map_input = meter_map_playback = channel_map_h9632_qs; break; } - } else if (HDSPeMADI == type) { + } + + if (HDSPeMADI == type) { playbacks_offset = 64; switch (speed_mode) { @@ -320,7 +328,9 @@ void HDSPMixerCard::adjustSettings() { break; } - } else if (HDSPeAIO == type) { + } + + if (HDSPeAIO == type) { playbacks_offset = 64; switch (speed_mode) { @@ -356,7 +366,9 @@ void HDSPMixerCard::adjustSettings() { break; } - } else if (HDSP_AES == type) { + } + + if (HDSP_AES == type) { playbacks_offset = 64; /* not sure about this one? */ /* 16 channels for all modes */ @@ -369,7 +381,9 @@ void HDSPMixerCard::adjustSettings() { meter_map_input = channel_map_aes32; meter_map_playback = channel_map_aes32; - } else if (HDSPeRayDAT == type) { + } + + if (HDSPeRayDAT == type) { playbacks_offset = 64; switch (speed_mode) { From 7416c3a83ccea3462b5f934991e2f86a9615a817 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Mon, 7 Mar 2011 19:03:09 +0100 Subject: [PATCH 037/166] hdspmixer: Show cardname in window title When running with more than one card, it isn't obvious which card is shown. Store the ALSA cardname in the corresponding class and show it in the window title upon switching cards. Also, don't show "(null)" but "(unsaved)" in case the user hasn't selected a preset file. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerCard.cxx | 3 +- hdspmixer/src/HDSPMixerCard.h | 4 ++- hdspmixer/src/HDSPMixerCardSelector.cxx | 1 + hdspmixer/src/HDSPMixerWindow.cxx | 48 +++++++++++++++++-------- hdspmixer/src/HDSPMixerWindow.h | 2 ++ hdspmixer/src/hdspmixer.cxx | 21 +++++------ 6 files changed, 52 insertions(+), 27 deletions(-) diff --git a/hdspmixer/src/HDSPMixerCard.cxx b/hdspmixer/src/HDSPMixerCard.cxx index b754b20..f3205b9 100644 --- a/hdspmixer/src/HDSPMixerCard.cxx +++ b/hdspmixer/src/HDSPMixerCard.cxx @@ -163,11 +163,12 @@ int HDSPMixerCard::getSpeed() return 0; } -HDSPMixerCard::HDSPMixerCard(int cardtype, int id) +HDSPMixerCard::HDSPMixerCard(int cardtype, int id, char *shortname) { type = cardtype; card_id = id; snprintf(name, 6, "hw:%i", card_id); + cardname = shortname; h9632_aeb.aebi = 0; h9632_aeb.aebo = 0; if (type == H9632) { diff --git a/hdspmixer/src/HDSPMixerCard.h b/hdspmixer/src/HDSPMixerCard.h index b721bd9..032c61f 100644 --- a/hdspmixer/src/HDSPMixerCard.h +++ b/hdspmixer/src/HDSPMixerCard.h @@ -24,6 +24,7 @@ #include #include +#include #include #include #include @@ -42,7 +43,8 @@ private: public: HDSPMixerWindow *basew; char name[6]; - HDSPMixerCard(int cardtype, int id); + std::string cardname; + HDSPMixerCard(int cardtype, int id, char *shortname); int channels_input, channels_playback, window_width, window_height, card_id; int channels_output; int type; diff --git a/hdspmixer/src/HDSPMixerCardSelector.cxx b/hdspmixer/src/HDSPMixerCardSelector.cxx index 0e31847..d83c4c9 100644 --- a/hdspmixer/src/HDSPMixerCardSelector.cxx +++ b/hdspmixer/src/HDSPMixerCardSelector.cxx @@ -50,6 +50,7 @@ void HDSPMixerCardSelector::ActivateCard (int i) card = i + 1; basew->current_card = i; basew->cards[i]->setMode (basew->cards[i]->getSpeed ()); + basew->setTitleWithFilename(); redraw (); } diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index 8f44c99..364d727 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -216,8 +216,7 @@ static void save_cb(Fl_Widget *widget, void *arg) if (!(w->file_name = fl_file_chooser("Choose a file to save presets to :", "HDSPMixer preset file (*.mix)", NULL, 0))) return; } w->save(); - snprintf(w->window_title, FL_PATH_MAX, "HDSPMixer - %s", fl_filename_name(w->file_name)); - w->label(w->window_title); + w->setTitleWithFilename(); } static void make_default_cb(Fl_Widget *widget, void *arg) @@ -241,8 +240,7 @@ static void restore_defaults_cb(Fl_Widget *widget, void *arg) w->prefs->deleteEntry("default_file"); w->prefs->flush(); w->file_name = NULL; - snprintf(w->window_title, FL_PATH_MAX, "HDSPMixer"); - w->label(w->window_title); + w->setTitleWithFilename(); w->resetMixer(); while (i < MAX_CARDS && w->cards[i] != NULL) { w->restoreDefaults(i++); @@ -516,8 +514,7 @@ void HDSPMixerWindow::load() } } fclose(file); - snprintf(window_title, FL_PATH_MAX, "HDSPMixer - %s", fl_filename_name(file_name)); - label(window_title); + setTitleWithFilename(); resetMixer(); inputs->buttons->presets->preset_change(1); return; @@ -527,6 +524,29 @@ load_error: return; } +void HDSPMixerWindow::setTitle(std::string suffix) +{ + std::string title = "HDSPMixer ("; + + title = title + cards[current_card]->cardname + ") "; /*cardname */ + title = title + suffix; + snprintf(window_title, FL_PATH_MAX, "%s", title.c_str()); + label(window_title); +} + +void HDSPMixerWindow::setTitleWithFilename(void) +{ + const char *filename = fl_filename_name(file_name); + + if (NULL == file_name) { + filename = "(unsaved)"; + } + + setTitle(filename); +} + + + void HDSPMixerWindow::restoreDefaults(int card) { int chnls[3]; @@ -883,16 +903,14 @@ void HDSPMixerWindow::checkState() corrupt++; if (corrupt) { - if (!dirty) { - dirty = 1; - snprintf(window_title, FL_PATH_MAX, "HDSPMixer - %s *", fl_filename_name(file_name)); - label(window_title); - Fl::add_timeout(0.3, dirty_cb, (void *)this); - } + if (!dirty) { + dirty = 1; + setTitleWithFilename(); + Fl::add_timeout(0.3, dirty_cb, (void *)this); + } } else { - snprintf(window_title, FL_PATH_MAX, "HDSPMixer - %s", fl_filename_name(file_name)); - label(window_title); - dirty = 0; + setTitleWithFilename(); + dirty = 0; } } diff --git a/hdspmixer/src/HDSPMixerWindow.h b/hdspmixer/src/HDSPMixerWindow.h index 0eb6f1a..dfc7d59 100644 --- a/hdspmixer/src/HDSPMixerWindow.h +++ b/hdspmixer/src/HDSPMixerWindow.h @@ -93,6 +93,8 @@ public: void refreshMixerStrip(int idx, int src); void save(); void load(); + void setTitle(std::string suffix); + void setTitleWithFilename(); }; #endif diff --git a/hdspmixer/src/hdspmixer.cxx b/hdspmixer/src/hdspmixer.cxx index d57fe4c..4929863 100644 --- a/hdspmixer/src/hdspmixer.cxx +++ b/hdspmixer/src/hdspmixer.cxx @@ -39,7 +39,7 @@ int main(int argc, char **argv) { HDSPMixerWindow *window; HDSPMixerCard *hdsp_cards[3]; - char *name; + char *name, *shortname; int card; int cards = 0; @@ -55,42 +55,43 @@ int main(int argc, char **argv) } snd_card_get_longname(card, &name); + snd_card_get_name(card, &shortname); printf("Card %d: %s\n", card, name); if (!strncmp(name, "RME Hammerfall DSP + Multiface", 30)) { printf("Multiface found!\n"); - hdsp_cards[cards] = new HDSPMixerCard(Multiface, card); + hdsp_cards[cards] = new HDSPMixerCard(Multiface, card, shortname); cards++; } else if (!strncmp(name, "RME Hammerfall DSP + Digiface", 29)) { printf("Digiface found!\n"); - hdsp_cards[cards] = new HDSPMixerCard(Digiface, card); + hdsp_cards[cards] = new HDSPMixerCard(Digiface, card, shortname); cards++; } else if (!strncmp(name, "RME Hammerfall HDSP 9652", 24)) { printf("HDSP 9652 found!\n"); - hdsp_cards[cards] = new HDSPMixerCard(H9652, card); + hdsp_cards[cards] = new HDSPMixerCard(H9652, card, shortname); cards++; } else if (!strncmp(name, "RME Hammerfall HDSP 9632", 24)) { printf("HDSP 9632 found!\n"); - hdsp_cards[cards] = new HDSPMixerCard(H9632, card); + hdsp_cards[cards] = new HDSPMixerCard(H9632, card, shortname); cards++; } else if (!strncmp(name, "RME MADIface", 12)) { printf("RME MADIface found!\n"); - hdsp_cards[cards] = new HDSPMixerCard(HDSPeMADI, card); + hdsp_cards[cards] = new HDSPMixerCard(HDSPeMADI, card, shortname); cards++; } else if (!strncmp(name, "RME MADI", 8)) { printf("RME MADI found!\n"); - hdsp_cards[cards] = new HDSPMixerCard(HDSPeMADI, card); + hdsp_cards[cards] = new HDSPMixerCard(HDSPeMADI, card, shortname); cards++; } else if (!strncmp(name, "RME AES32", 8)) { printf("RME AES32 or HDSPe AES found!\n"); - hdsp_cards[cards] = new HDSPMixerCard(HDSP_AES, card); + hdsp_cards[cards] = new HDSPMixerCard(HDSP_AES, card, shortname); cards++; } else if (!strncmp(name, "RME RayDAT", 10)) { printf("RME RayDAT found!\n"); - hdsp_cards[cards] = new HDSPMixerCard(HDSPeRayDAT, card); + hdsp_cards[cards] = new HDSPMixerCard(HDSPeRayDAT, card, shortname); cards++; } else if (!strncmp(name, "RME AIO", 7)) { printf("RME AIO found!\n"); - hdsp_cards[cards] = new HDSPMixerCard(HDSPeAIO, card); + hdsp_cards[cards] = new HDSPMixerCard(HDSPeAIO, card, shortname); cards++; } else if (!strncmp(name, "RME Hammerfall DSP", 18)) { printf("Uninitialized HDSP card found.\nUse hdsploader to upload configuration data to the card.\n"); From 3771b825c89711ac556fc8525743620750920dd5 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Sun, 13 Mar 2011 19:53:36 +0100 Subject: [PATCH 038/166] hdspmixer: New pixmaps Reuben Martin has provided me with an updated pixmap set to replace RME's 1998 style no longer in use by the corresponding Win32 tools. The Linux pixmaps are based on ardour2. Likewise hdspmixer, ardour2 is GPLv2. Signed-off-by: Adrian Knoth Signed-off-by: Jaroslav Kysela --- hdspmixer/pixmaps/Slider1.xpm | 312 +--- hdspmixer/pixmaps/Zlmloop2.xpm | 949 ++++++------ hdspmixer/pixmaps/Zlmloopm2.xpm | 941 ++++++------ hdspmixer/pixmaps/b_blank.xpm | 84 +- hdspmixer/pixmaps/b_card1.xpm | 75 +- hdspmixer/pixmaps/b_card2.xpm | 85 +- hdspmixer/pixmaps/b_card3.xpm | 92 +- hdspmixer/pixmaps/b_mute.xpm | 220 ++- hdspmixer/pixmaps/b_pre1.xpm | 75 +- hdspmixer/pixmaps/b_pre2.xpm | 85 +- hdspmixer/pixmaps/b_pre3.xpm | 92 +- hdspmixer/pixmaps/b_pre4.xpm | 80 +- hdspmixer/pixmaps/b_pre5.xpm | 85 +- hdspmixer/pixmaps/b_pre6.xpm | 98 +- hdspmixer/pixmaps/b_pre7.xpm | 83 +- hdspmixer/pixmaps/b_pre8.xpm | 95 +- hdspmixer/pixmaps/b_save.xpm | 64 +- hdspmixer/pixmaps/b_solo.xpm | 243 ++- hdspmixer/pixmaps/b_zlm.xpm | 61 +- hdspmixer/pixmaps/buttons.xpm | 1105 +++++++------- hdspmixer/pixmaps/empty.xpm | 912 ++++-------- hdspmixer/pixmaps/empty_2.xpm | 913 +++++------- hdspmixer/pixmaps/empty_linux.xpm | 2065 ++++---------------------- hdspmixer/pixmaps/iomixer.xpm | 843 +++++------ hdspmixer/pixmaps/iomixer_r.xpm | 843 +++++------ hdspmixer/pixmaps/level.xpm | 1057 ++++++++----- hdspmixer/pixmaps/matrix_black.xpm | 285 +--- hdspmixer/pixmaps/matrix_grey.xpm | 48 +- hdspmixer/pixmaps/matrix_grey_l.xpm | 48 +- hdspmixer/pixmaps/matrix_grey_o.xpm | 46 +- hdspmixer/pixmaps/matrix_grey_ol.xpm | 46 +- hdspmixer/pixmaps/matrix_mute.xpm | 51 +- hdspmixer/pixmaps/matrix_white.xpm | 285 +--- hdspmixer/pixmaps/matrix_yellow.xpm | 285 +--- hdspmixer/pixmaps/monitor.xpm | 913 +++++------- hdspmixer/pixmaps/mute.xpm | 192 ++- hdspmixer/pixmaps/output.xpm | 681 +++------ hdspmixer/pixmaps/output_r.xpm | 681 +++------ hdspmixer/pixmaps/over.xpm | 287 +--- hdspmixer/pixmaps/peak.xpm | 274 +--- hdspmixer/pixmaps/solo.xpm | 186 ++- 41 files changed, 6082 insertions(+), 9783 deletions(-) diff --git a/hdspmixer/pixmaps/Slider1.xpm b/hdspmixer/pixmaps/Slider1.xpm index 7c24161..fac74ff 100644 --- a/hdspmixer/pixmaps/Slider1.xpm +++ b/hdspmixer/pixmaps/Slider1.xpm @@ -1,272 +1,44 @@ /* XPM */ char const * Slider1_xpm[] = { -"13 12 257 2", -" c None", -". c #000000", -"+ c #101010", -"@ c #181010", -"# c #202018", -"$ c #202020", -"% c #202920", -"& c #292920", -"* c #292929", -"= c #313129", -"- c #313131", -"; c #393939", -"> c #4A4A41", -", c #4A4A4A", -"' c #4A524A", -") c #5A524A", -"! c #626A62", -"~ c #6A6A62", -"{ c #7B736A", -"] c #7B7B73", -"^ c #7B8373", -"/ c #83837B", -"( c #8B8B83", -"_ c #94948B", -": c #9C9C9C", -"< c #A4A49C", -"[ c #ACACA4", -"} c #B4B4AC", -"| c #BDBDB4", -"1 c #C5C5BD", -"2 c #D5D5CD", -"3 c #DEDED5", -"4 c #EEEEEE", -"5 c #F6F6F6", -"6 c #00FF99", -"7 c #00FFCC", -"8 c #00FFFF", -"9 c #330000", -"0 c #330033", -"a c #330066", -"b c #330099", -"c c #3300CC", -"d c #3300FF", -"e c #333300", -"f c #333333", -"g c #333366", -"h c #333399", -"i c #3333CC", -"j c #3333FF", -"k c #336600", -"l c #336633", -"m c #336666", -"n c #336699", -"o c #3366CC", -"p c #3366FF", -"q c #339900", -"r c #339933", -"s c #339966", -"t c #339999", -"u c #3399CC", -"v c #3399FF", -"w c #33CC00", -"x c #33CC33", -"y c #33CC66", -"z c #33CC99", -"A c #33CCCC", -"B c #33CCFF", -"C c #33FF00", -"D c #33FF33", -"E c #33FF66", -"F c #33FF99", -"G c #33FFCC", -"H c #33FFFF", -"I c #660000", -"J c #660033", -"K c #660066", -"L c #660099", -"M c #6600CC", -"N c #6600FF", -"O c #663300", -"P c #663333", -"Q c #663366", -"R c #663399", -"S c #6633CC", -"T c #6633FF", -"U c #666600", -"V c #666633", -"W c #666666", -"X c #666699", -"Y c #6666CC", -"Z c #6666FF", -"` c #669900", -" . c #669933", -".. c #669966", -"+. c #669999", -"@. c #6699CC", -"#. c #6699FF", -"$. c #66CC00", -"%. c #66CC33", -"&. c #66CC66", -"*. c #66CC99", -"=. c #66CCCC", -"-. c #66CCFF", -";. c #66FF00", -">. c #66FF33", -",. c #66FF66", -"'. c #66FF99", -"). c #66FFCC", -"!. c #66FFFF", -"~. c #990000", -"{. c #990033", -"]. c #990066", -"^. c #990099", -"/. c #9900CC", -"(. c #9900FF", -"_. c #993300", -":. c #993333", -"<. c #993366", -"[. c #993399", -"}. c #9933CC", -"|. c #9933FF", -"1. c #996600", -"2. c #996633", -"3. c #996666", -"4. c #996699", -"5. c #9966CC", -"6. c #9966FF", -"7. c #999900", -"8. c #999933", -"9. c #999966", -"0. c #999999", -"a. c #9999CC", -"b. c #9999FF", -"c. c #99CC00", -"d. c #99CC33", -"e. c #99CC66", -"f. c #99CC99", -"g. c #99CCCC", -"h. c #99CCFF", -"i. c #99FF00", -"j. c #99FF33", -"k. c #99FF66", -"l. c #99FF99", -"m. c #99FFCC", -"n. c #99FFFF", -"o. c #CC0000", -"p. c #CC0033", -"q. c #CC0066", -"r. c #CC0099", -"s. c #CC00CC", -"t. c #CC00FF", -"u. c #CC3300", -"v. c #CC3333", -"w. c #CC3366", -"x. c #CC3399", -"y. c #CC33CC", -"z. c #CC33FF", -"A. c #CC6600", -"B. c #CC6633", -"C. c #CC6666", -"D. c #CC6699", -"E. c #CC66CC", -"F. c #CC66FF", -"G. c #CC9900", -"H. c #CC9933", -"I. c #CC9966", -"J. c #CC9999", -"K. c #CC99CC", -"L. c #CC99FF", -"M. c #CCCC00", -"N. c #CCCC33", -"O. c #CCCC66", -"P. c #CCCC99", -"Q. c #CCCCCC", -"R. c #CCCCFF", -"S. c #CCFF00", -"T. c #CCFF33", -"U. c #CCFF66", -"V. c #CCFF99", -"W. c #CCFFCC", -"X. c #CCFFFF", -"Y. c #FF0000", -"Z. c #FF0033", -"`. c #FF0066", -" + c #FF0099", -".+ c #FF00CC", -"++ c #FF00FF", -"@+ c #FF3300", -"#+ c #FF3333", -"$+ c #FF3366", -"%+ c #FF3399", -"&+ c #FF33CC", -"*+ c #FF33FF", -"=+ c #FF6600", -"-+ c #FF6633", -";+ c #FF6666", -">+ c #FF6699", -",+ c #FF66CC", -"'+ c #FF66FF", -")+ c #FF9900", -"!+ c #FF9933", -"~+ c #FF9966", -"{+ c #FF9999", -"]+ c #FF99CC", -"^+ c #FF99FF", -"/+ c #FFCC00", -"(+ c #FFCC33", -"_+ c #FFCC66", -":+ c #FFCC99", -"<+ c #FFCCCC", -"[+ c #FFCCFF", -"}+ c #FFFF00", -"|+ c #FFFF33", -"1+ c #FFFF66", -"2+ c #FFFF99", -"3+ c #FFFFCC", -"4+ c #FFFFFF", -"5+ c #000000", -"6+ c #0D0D0D", -"7+ c #1A1A1A", -"8+ c #282828", -"9+ c #353535", -"0+ c #434343", -"a+ c #505050", -"b+ c #5D5D5D", -"c+ c #6B6B6B", -"d+ c #787878", -"e+ c #868686", -"f+ c #939393", -"g+ c #A1A1A1", -"h+ c #AEAEAE", -"i+ c #BBBBBB", -"j+ c #C9C9C9", -"k+ c #D6D6D6", -"l+ c #E4E4E4", -"m+ c #F1F1F1", -"n+ c #FFFFFF", -"o+ c #0E4C00", -"p+ c #0A0080", -"q+ c #000403", -"r+ c #BE0F17", -"s+ c #0F3404", -"t+ c #7B04BC", -"u+ c #04BD0A", -"v+ c #05050A", -"w+ c #17F700", -"x+ c #A0035A", -"y+ c #019A14", -"z+ c #64176E", -"A+ c #186604", -"B+ c #57019D", -"C+ c #035917", -"D+ c #01030B", -"E+ c #0CF000", -"F+ c #5C0072", -"G+ c #00710C", -"H+ c #B2006C", -"| / / / / / / / / / / / ' ", -"| 2 5 5 5 5 5 5 5 4 | ] / ", -"[ } 2 2 2 2 2 2 2 2 ( ) ; ", -"[ [ / / / / / / / ^ { , - ", -": { - ; - ; - ; - - = $ & ", -"~ # - - - - - - - - - - # ", -"< [ _ _ _ _ _ _ _ _ ( ! & ", -"^ [ 3 3 3 3 3 3 3 2 / @ . ", -"~ ] < 2 2 2 2 2 2 < = ; . ", -"! ] < < < < < < < < - ; . ", -"' ~ * * * * * * * % + ; . ", -"' ; ; ; ; ; ; ; ; . ; . ; "}; +"13 12 29 1", +" c #484858", +". c #565668", +"+ c #B4B4C4", +"@ c #8F8F9F", +"# c #3A3A48", +"$ c #C8C8D8", +"% c #A3A3B3", +"& c #7E7E8E", +"* c #BFBFCF", +"= c #9A9AAA", +"- c #747484", +"; c #B1B1C1", +"> c #8C8C9C", +", c #676777", +"' c #9B9BAB", +") c #767686", +"! c #515161", +"~ c #CBCBDB", +"{ c #B6B6C6", +"] c #9191A1", +"^ c #C5C5D5", +"/ c #A0A0B0", +"( c #7B7B8B", +"_ c #B0B0C0", +": c #8B8B9B", +"< c #666676", +"[ c #565666", +"} c #707080", +"| c #4C4C5C", +" ........... ", +".++++++++++@#", +".$%%%%%%%%%&#", +".*=========-#", +".;>>>>>>>>>,#", +".')))))))))!#", +".~{{{{{{{{{]#", +".^/////////(#", +"._:::::::::<#", +"./((((((((([#", +".}||||||||||#", +" ########### "}; diff --git a/hdspmixer/pixmaps/Zlmloop2.xpm b/hdspmixer/pixmaps/Zlmloop2.xpm index f27f075..76b3ecb 100644 --- a/hdspmixer/pixmaps/Zlmloop2.xpm +++ b/hdspmixer/pixmaps/Zlmloop2.xpm @@ -1,513 +1,442 @@ /* XPM */ char const * Zlmloop2_xpm[] = { -"76 253 257 2", -" c None", -". c #D1E0E5", -"+ c #E7F6F9", -"@ c #F2FFFF", -"# c #FBFFFF", +"76 253 186 2", +" c #595966", +". c #51515B", +"+ c #3D3D42", +"@ c #717187", +"# c #53535E", "$ c #FFFFFF", -"% c #C4CACB", -"& c #C7D5D9", -"* c #BECDD2", -"= c #B8C5C9", -"- c #AEBDC1", -"; c #B2BDC2", -"> c #A0A09F", -", c #B5B6B6", -"' c #A9B5B9", -") c #A2ADB2", -"! c #A1ACAE", -"~ c #AAAAAA", -"{ c #A6A6A6", -"] c #A0A0A0", -"^ c #9CA5A9", -"/ c #9F9FA0", -"( c #939DA1", -"_ c #9FA09F", -": c #A09F9F", -"< c #90928F", -"[ c #949A9B", -"} c #9B9C9B", -"| c #9D9E9D", -"1 c #999A99", -"2 c #969896", -"3 c #919391", -"4 c #959795", -"5 c #929592", -"6 c #899497", -"7 c #8C969A", -"8 c #8A9395", -"9 c #848E91", -"0 c #8C918C", -"a c #8D918D", -"b c #888C87", -"c c #8B8E8B", -"d c #898D89", -"e c #8A8E8A", -"f c #828B8D", -"g c #868C86", -"h c #858A85", -"i c #828982", -"j c #818587", -"k c #818681", -"l c #7C8789", -"m c #7D8689", -"n c #7B8385", -"o c #D170D1", -"p c #C54CC5", -"q c #A837A8", -"r c #902F90", -"s c #7070D1", -"t c #4C4CC5", -"u c #757E81", -"v c #3737A8", -"w c #2F2F90", -"x c #80857F", -"y c #7F887F", -"z c #7E847E", -"A c #7E817E", -"B c #7A807A", -"C c #708070", -"D c #6E716E", -"E c #737877", -"F c #787F78", -"G c #737B7C", -"H c #747C73", -"I c #767D76", -"J c #747C74", -"K c #757B75", -"L c #747B74", -"M c #737B74", -"N c #747B73", -"O c #727972", -"P c #737B73", -"Q c #717971", -"R c #707870", -"S c #6D7679", -"T c #6C7274", -"U c #686E71", -"V c #70786F", -"W c #707060", -"X c #616669", -"Y c #696C6A", -"Z c #6D6E6D", -"` c #6F6F6F", -" . c #646B6D", -".. c #666966", -"+. c #626563", -"@. c #616561", -"#. c #5C6365", -"$. c #595F61", -"%. c #5F685F", -"&. c #5B605B", -"*. c #5E615E", -"=. c #506050", -"-. c #494F51", -";. c #545A5C", -">. c #5A5D5A", -",. c #5A5E5A", -"'. c #595C59", -"). c #545954", -"!. c #565956", -"~. c #575A56", -"{. c #555855", -"]. c #535654", -"^. c #545554", -"/. c #545754", -"(. c #515651", -"_. c #535653", -":. c #525552", -"<. c #515451", -"[. c #515551", -"}. c #505450", -"|. c #515251", -"1. c #515351", -"2. c #505350", -"3. c #4D5254", -"4. c #50584F", -"5. c #50544F", -"6. c #4F584F", -"7. c #4C504B", -"8. c #4F544F", -"9. c #4E524D", -"0. c #4E534E", -"a. c #4F534F", -"b. c #4F524F", -"c. c #4E524E", -"d. c #4F514F", -"e. c #4F504F", -"f. c #4E514E", -"g. c #4D524D", -"h. c #4C514C", -"i. c #4D514D", -"j. c #4D504D", -"k. c #4C504C", -"l. c #4B504B", -"m. c #405040", -"n. c #45494B", -"o. c #4A4E4E", -"p. c #4D4E4D", -"q. c #4C4E4C", -"r. c #4C4F4C", -"s. c #494E49", -"t. c #4A4F4A", -"u. c #4B4F4B", -"v. c #4B4E4B", -"w. c #4A4E4A", -"x. c #4B4C4B", -"y. c #4A4D4A", -"z. c #484D48", -"A. c #494D49", -"B. c #494C49", -"C. c #484C48", -"D. c #494A49", -"E. c #484A48", -"F. c #484B48", -"G. c #484C47", -"H. c #444843", -"I. c #474C47", -"J. c #464A45", -"K. c #464B46", -"L. c #474B47", -"M. c #474A47", -"N. c #464A46", -"O. c #464946", -"P. c #454A45", -"Q. c #444944", -"R. c #454945", -"S. c #454845", -"T. c #444844", -"U. c #404840", -"V. c #434843", -"W. c #434644", -"X. c #454645", -"Y. c #454645", -"Z. c #444744", -"`. c #424641", -" + c #434643", -".+ c #434743", -"++ c #424642", -"@+ c #424542", -"#+ c #414641", -"$+ c #404440", -"%+ c #414541", -"&+ c #414242", -"*+ c #404340", -"=+ c #3E4142", -"-+ c #6B236B", -";+ c #531B53", -">+ c #4D194D", -",+ c #471747", -"'+ c #23236B", -")+ c #3C3E40", -"!+ c #1B1B53", -"~+ c #19194D", -"{+ c #171747", -"]+ c #40433F", -"^+ c #40483F", -"/+ c #3B403B", -"(+ c #3F443F", -"_+ c #3D423D", -":+ c #3F423F", -"<+ c #3E413E", -"[+ c #3D403D", -"}+ c #1F2420", -"|+ c #2D3030", -"1+ c #363A39", -"2+ c #3B3F3D", -"3+ c #3E3E3E", -"4+ c #3C3F3C", -"5+ c #3A3D3A", -"6+ c #3B3F3B", -"7+ c #393D39", -"8+ c #383B39", -"9+ c #373C37", -"0+ c #363A36", -"a+ c #303F30", -"b+ c #333534", -"c+ c #323532", -"d+ c #303730", -"e+ c #242728", -"f+ c #2A2C2D", -"g+ c #2F2F2F", -"h+ c #212E2E", -"i+ c #222425", -"j+ c #202720", -"k+ c #3B143B", -"l+ c #1D1F20", -"m+ c #14143B", -"n+ c #0F100F", -"o+ c #1C1C18", -"p+ c #121212", -"q+ c #0F1510", -"r+ c #170817", -"s+ c #0E0F10", -"t+ c #080817", -"u+ c #100F0F", -"v+ c #07090A", -"w+ c #0A0A0A", -"x+ c #0D0D0D", -"y+ c #0E0E0E", -"z+ c #0F0F0F", -"A+ c #0B040B", -"B+ c #02050D", -"C+ c #040404", -"D+ c #050606", -"E+ c #070707", -"F+ c #060606", -"G+ c #030303", -"H+ c #000000", -"^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+}+", -"V W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W g+", -"> > > > > > > > > > > > > > : : : : : : > > > > : : : : : : : : : : : : : : : : : > > > : : : : : : : : : : : / / / / / / _ _ _ _ _ _ _ _ > > : ] : ` C+", -"> / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / : ] : ` F+", -"> / y e.g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+%./ : ] : ` C+", -"> / y e.6.6.e.e.U.6.m.e.6.(+e.e.e.m.U.6.m.e.6.(+e.e.e.m.U.6.m.j.6.U.e.e.e.m.U.6.m.e.6.U.p.e.4.m.e.6.U.e.e.e.m.U.U.m.m.m.m.m.6.m.U.j.m.e.U.U.] ] ] : ` F+", -"> / y e.D ..D @.|.'.@.,.]...&.+.*.'.*.*.*.&.1...>.+.*...{.&.....*.@.D ..*.*.&.'.......@...*.,...&.@.*.*.D *.+...*.@.@.:.....*.@.@.>.Z [.j. +] ] ] : ` C+", -"> / y e.u.~.l.:.h./.].k.h.B.{._.b.c.z.).T.2.f.S.v.A.F.N.0.0.t.'.<.P.M.!.r.{.g.N.h.].2.r.y.{.!.<.z.K.k./.}.M.%+}.K.h.W.c.y.0.).N.z.!.k._.&+0+: ] : : ` F+", -"/ / y e.*.z.2+.+$+<.W.<+(+(+j.t.y.h.z.P.++_.y.c.$+N.v.Q.h.7+_+q.b.W.S.c.j.!.V.(.s.N.$+S._+K.b.S.y.W.<+<.N.S.N.:.C.s.@+f.s.t.0.(.(.6+ +$+E.b+: ] ] : ` C+", -"_ / y f.~.F.B.@+Q.[+_+0.).%+0+$ $ $ %+*+k.$ $ $ [.r./.++h.:.h. +(.(.b.y.C.<.(.(.$ $ N._.K.$ K.).v./.++h.:.h. +[.2.T.c.M.b.I.g.[.5+<.j.S. +@+/ ] | / ` F+", -"_ _ y e.*.).b.b.).b.~./+P.h._.$ $ $ ]+@+L.$ $ $ g.++%+c.<+6+:.F.(.(.c.v.c.8+K.++0.7+N.M.$ $ K.I.%+%+c.<+6+:.F.k.S.s.T.r.y.K._+z.P._+S.s.X.4+] ] / / ` C+", -": / y e.@.f.[.:+++r.c.y.g.5+*.$ $ $ $ F.$ $ $ $ #+:+$ $ $ $ }.b.$ $ $ $ 0.2.K.I.$ $ 0+$ $ $ $ .+*+$ $ $ $ }.b.$ $ $ $ q.v.I.#+s.!.C..+W.%+&+: | / : ` F+", -": / y e.&.F.B._.0.b.0+K.8.}.0+$ $ $ $ r.$ $ $ $ 6+$ $ ]+T.$ $ v.$ $ $ $ $ $ _.0.$ $ _.W.$ $ *.8.$ $ ]+T.$ $ v.$ $ t.B.M.$+H.#+_+I.Q.F.S.O.c+: : : | ` F+", -"/ | y e.{. +).W.c.W.z.t.K.K.c.$ $ (.$ %+$ %+$ $ z.$ $ k.(+$ $ {.$ $ b.y.$ $ (.(.$ $ N._.$ $ I.).$ $ k.(+$ $ {.$ $ ++).y.y.G.I.6+#+.+t.F.O.X.: / | / ` F+", -"_ : y e.*.$+O.2.[.B.v.'.I.5+%+$ $ #+$ $ $ (.$ $ [.$ $ V.h.$ $ k.$ $ c.v.$ $ K.++$ $ 0+M.$ $ *.h.$ $ V.h.$ $ k.$ $ t.M.7+`.P.s._+8.N._.j.[+8+/ : | / Z F+", -"/ | y e.b.t.y.b.'.F.z.(.++0..+$ $ #+$ $ $ w.$ $ ~.$ $ z.I.$ $ y.$ $ *.v.$ $ K.I.$ $ N.$+$ $ I.++$ $ z.I.$ $ y.$ $ }.(+7._.).P.}._+++c.~.5+5+: | / / ` F+", -": | x j.r.y.$+).W.b. +y.c._._+$ $ .+Q.$ 2+t.$ $ $+k.$ $ $ $ t.6+$ $ h.v.$ $ _.0.$ $ *.W.b.$ $ K.k.$ $ $ $ t.6+$ $ z..+f.z.t.K.I.5+%+W.y.@+<+: | | / ` F+", -"/ | A e.@.}.).K.K.C.$+C.Q.C.$+Z._+_+2.).$+c..+<+S._.N.c.C.T.t..+c._.f.].).(.t.++!..+z.<.K.K.F.F.].).a.i.5+_.j.f.*+++t.}.b.`.g.++0..+O.9.@+<+| : : | ` F+", -"| / A p.<.[.Q.u.N.M.,.V.c.0.y.k.y.6+(.g.K.w.k.Z.~.<+r.F.K.l.f.].h.2.O.t.S.}.z.I.9+%+K.r.<+2.M.:.f..+C.*+/+r.).(+#+%+$+8.z.I./+c.c._+(+J.d.f+| | / / Z F+", -"| / y 6.[.N.7+].&.h.z.I.0.K.b.O.y.z._+9+(.h.i. +4+W.<+(+t.s.@+(+%+<.B.y.].K.P.Q.T..+s.y.<.E.:+M.A.g.w.W.S.F.Q.K.5+k.z.I.8+I.S.O.z._+8.7.<+&+| / | | ` F+", -"| | y 6.[.K.'.c.C.N.l.z.++++F.S.@+h.P.l.C.0.t.].Z.c._.h.#+++Q..+I.u.O.v.j.K.K.}.T.h.[.F.[+*+ +:.H.8.,.F.r.<.s.t.$+K.$+Q.0.t.k.(+<+/+J.J.]+&+: | / | ` F+", -"| / y 6.<.0.;+>+,+,+,+,+,+,+,+,+,+>+q }.N.s.t.<.&.2+.+h.I.++0.s.2+F.2.0.K.Q.t.0.M.v.'.O.v.y.J.2.K.H.T.5+:+v.h.V.8.Q.z.T.K.8.c.c.8.P.8.5.:+X.| / | | ` F+", -"| | y e.f.k.r r r r r r r r r r r r ,+P.$+/+.+F._+*+.+s.t._+z.N.2.j.<+<.++P.P.0.t.).y.B.W.i.2.<.h.,.s._+E.[+C.5+V.0.z.}.[.l.h.N.t.s..+A.X.<+| | / | ` C+", -"| | y 6.d.:.-+r o p p p p p p p p k+r+}.'.k.Q.f. +:.Z.).V.0+C.5+N.r.$+@+v.M.6+}.N.T.<.&. +4+y.j.[.Q.6+O.M.f.t.#+$+K.t._.}.I.N.!.T./+0.`.S.g+/ | | } ` F+", -"| | y e.&.v.-+r r r r r r r r r r k+r+#+C.$+Q._.y.$ $ $ $ $ w.}.$ N.C.].c.B.$ }.++T.h.r.$ y.*+M.$+g.P.M.!.r.}.8.c.y..+h.k.`.c.N.Q.#+P.[+v.5+| | : | ` C+", -"| | y 6.)..+-+r r r r r r r r r r k+r+#+Q.F.O.K.<+<.$+,.c.$ w.w.$ z.7+B.5+j.$ $ $+@+v.$ $ i./+b.F.Q.W.S.c.j.t.g.z._+f.].t.#+K.[.c.T./+7.:+E.: | | } ` F+", -"| | y e.].K.-+r r r r r r r r r r ,+r+t.K.O.f.W.<.5+$+Q.$ <.(+N.$ ~.K.W.$+B.$ $ C.].5+$ $ 7+y.S.:+`.b.y.C.<.c.(+_.t._.:+N.).t.8.8.).'.7.S.8+| | : } ` F+", -"| } y e.k.c.-+r p r r r r r r r r ,+r+#+z.F.W..+ +c.2.$ $ 5+t.2+$ <+C.].c.B.$ z.$ F.$ j.$ 8+9.'.).C.c.v.c.8+K.++0.7+M.j.].l.P.).c.b.O.t.|.5+| | | | ` F+", -"| | y e.:.).-+r r r r r r r r r r k+r+t.}.[+<+S.O.<.M.$ I.<.c.M.$ z.7+B.5+j.$ ].$ W.$ B.$ J.7.<+7.z.h.y.0.2.K.I.).s.$+F.K.#+h.I./+).<. +X.<+| | | } ` F+", -"| } y e.>.z.-+-+r r r r r r r r r ,+r+s.C.:. +C.B.5+$ c.l.5+++v.$ ~.K.W.$+@+$ *+$ C.$ (+$ K.F.*+j.0+h.v.c. +_.0.s.c.W.b.f.g.).Q.h.P.$+r.0+5+| | } | ` F+", -"} | x f.2.}.-+r p r r r r r r r r k+r+P.t.B.<.v._.$ $ $ $ $ h.@+$ $ $ $ <+!.$ f.s.$ l.z.$ 4+]+@+:..+0.,.C.r.}.z.t.*+F.@+%+$+}.P.#+<+f.A.5+D.} : } } ` F+", -"| } y e.].O.-+r -+r r r r r r r -+,+r+(+Q.F.2.K.f.z.[+N.I.V.s.B.r.c.*+_.S.k.++}.{.].O.z.4+9. +M.S.j.Z.<.O.v.c.I.5+(+F.].S.8.l.l._+_+_+N.@+8+| } | } ` F+", -"| } y e.&.v.-+k+r+r+A+A+A+A+A+A+r+A+r+Q.Q.$+:.<.@+0.5+0.V.h.%+5+'.F._.h.2._+h.++(+@+<.M.q./.H. +b.<+%+@+S.S.T.l.K..+B.W.t./+Q.7+~.(+{.++:+4+} | | } ` F+", -"} } y e.'.h.r+H+H+H+H+H+H+H+H+H+H+H+H+#+z.N.M.++_.R.Q.$+P.#+k.h.j./+A.5+0.Q.z.++_.k.2.(.@+6+]+6+<.%+f.y.b.B.k.5./+K._.S.W.0._+_+_.!..+R.]+&+} } } } ` F+", -"} } y e.!.:.s.N.k.b.W.C.z.++{.M.(.N.0.F._+$+t.2.r.5+h.Q._.(.$+%+}.<+F.8+P.C.c.C.(._+C._.2+<.`.b.).F.%+S.v.]+K.z.0.J.9.B.c.(.7+g./+_.B.'.D.<+| } | } ` F+", -"} } y f.).u.K.1.h.@+0.#+L.0+M.K.B.6+Q._+t.!.s.F.<.t.<+c.K.8.$+v.@+:.:+K.y.0.z.h.%+.+t.O.<.k.a.<+R.k.~.r.j.b.S.).s.8+!.c.4+Q.I.V.t.F.v.j.5+W.} } } } ` F+", -"} } y e.!.K.9+r.(+).t.6.(+i.M.B.:.0+U..+t._.z.v.B.B.!.h.}._+z.z.(+E.<.5+:.t.P.7+C.C.5+N.Z.M.F. +:.}.++2.5+2.S.h.#+7+~.K.s._+A.]+K.8.(.s.*+3+} } } } ` C+", -"} } y e.*.*+.+ +%+}.z.I.5+c.b.$+@+C._.0+ +y.[.j. +*+O.++P.7+c.s.k.2.y.j.B.%+P.Q.C.K.v.2+@+2.S.2.T.H.H.B.W. +y.s.`.h.5+ +<.7.5._+0.`.(+`.x.5+} } } } ` F+", -"} } y p.@.@+j.B.j.T.).I.h.:.@+r.j.%+}.8.(+$+%+O.y.B.B.K.7+K.C.T.z.F.S.~.@+$+g.#+6+_+0.F.0+:+<+<.5+`..+]+W.<+@+/+(+8+_+J.@+9+{.*.h.z.I.9.`.&+} } } } ` C+", -"} } x e.&.r.F.%+%+s.(.(.#+%+ +$+v.N.0.l.0.c.K. +r.W.B.s.z.).}.N.k.r.<.v.B.k./+}./+s.N.{.B.q.B.4+2.l.5.B.f.>.S.z.z..+i.N.T.h.a.R.Q.g.9+9.&+0+} } } } ` F+", -"} } y e.).%+++w.P.K.#+(.V.P.$+N..+g.l.l.6+z.6+<.O.y.S.).l.0.[.++/+@+4+:. +0.s.0.C.s.}.:+B.{.O.2._.5+b.[+{.v.,.g.h.~.u.C..+H.7+$+s.t.V.5.@+3+} } } } ` C+", -"} } y e...(+;+>+,+,+,+,+,+,+,+,+,+>+q t./+0.T.F.C.}.j.0.(.z.K.l./+/.<+F._.t.Q._+v.M.S.S.B.2. +`.H.s.7+@+B.E.h./+9.9.K.T.4+).u.:.}.~.(.z.5+8+} } } } ` F+", -"} } y e.@.'.r r r r r r r r r r r r ,+(+:+*+$+y.F.*.6+.+h.I.++0.s.2+L.2.0.K.Q.s.[.(+{.j.[+B.r.4+t.g.&.9.E.`.7.I.7.%+5+H.0.t.6+_+~.I.6+`.p.c+} 1 } } ` F+", -"} 1 y f.!.(.-+r o p p p p p p p p k+r+/+_+F.C.z.y._+*+.+s.t.(+z.N.2.j.:+[.++P._+{.S..+_.f.`.F.f.4+u.B.F.G.5+_.H.H.[+`.v.h.7.w.i.u.Q.G.`.S.b+} 1 } 1 ` F+", -"} 1 y e.}.O.-+r r r r r r r r r r k+r+#+_.r.2.(. +$ v.0.z.Q.~.$ M.$ {.:.F.5+s.z.Q.:.5+b.2+).A.,.a.i.'.v.B.<+!.s.8.0.~._.y.H.G.(.`.c.i..+[+5+1 } } 1 ` F+", -"1 1 x e.@.L.-+r r r r r r r r r r k+r+Q.T.@+B.*+<+$ $ /+8.$+$ $ b.z.v.2.[+B.(..+h.v.$+y.y.:.[.W.$+<+F.y.(.j.s.V.V.!.S.O.B._+P.V.H.~.b.C.]+[+} 1 1 1 ` F+", -"} 1 y e.&.v.-+r r r r r r r r r r ,+r+)._.y.y.y.S.$ $ _+%+z.$ $ j.$ v.c.$ M.k.$ 5+:.*+*+'.@+y.O.:.F.%+1.A.y.Q.t.V.Q.B.B.H.G.7.K.P.Q.w.i.b+@+1 } 1 1 ` F+", -"1 1 y e.>.#+-+r p r r r r r r r r ,+r+s.7+y.j.&.j.$ @+$ t.$ f.$ y.$ r.z.S.$ $ ).).F.@+S.:.B.v.*+>.9+}.j.j.Z.v.P.V.s.!.M.(.V.t.P.0+}.2.B.4+8+1 1 1 1 ` F+", -"1 1 x e.>.(.-+r r r r r r r r r r k+r+(.). +O.N.r.$ $+$ K.$ $+$ Z.$ f.s.q.$ $ C.%+E.8+Z.y.S._.M.S.A.L. +r.M.*+l.I. +@+B.1.`.P.h.l.N.A.:+*+b+1 1 1 1 ` F+", -"1 1 z e.e.W.-+-+r r r r r r r r r ,+r+P.K.:+2.j.@+$ *+$ C.$ (+$ O.$ v._+1.$ $ K.5+@+ +q.j.*+*+2..+i.i.@+f.%+++J.V.s.J.&+9.#+$+V.t.9+$+K.*+[+1 1 1 1 ` F+", -"1 1 A p.@.r.-+r p r r r r r r r r k+r+h.b+z.b.2.!.$ f.s.$ l.z.$ B.$ M.k.$ ).K.$ }.7.[+9.]+`.9.b.G.s.A.4+9.h.t.8._+_.K.`.Z.(.J.5.l.`..+[+B.8+1 1 1 1 ` F+", -"1 1 A e.&.#+-+r -+r r r r r r r -+,+r+/.t.<.(+v.y.<+N.}.5+}.s.N.6+y.B.5+Q.T.K.P.$+<.<.@+9.8+9.H.9. +5+~.O._.h.5./+g..+$+!.l.7+H.s.(.E.B.]+8+1 1 1 1 ` F+", -"1 1 A p.*.W.-+k+r+r+A+A+A+A+A+A+r+A+r+U._+<+$+c.v.y.j.s.K.++(.B.0.++O.v.S.c.5+_+u.9.$+%+<+:+!.S.6+l.`.S.<+b.Q.s.`./+<.M. +8.P.t.(.`.`.r.8+b+1 1 2 1 ` F+", -"2 1 A e.1.s.r+H+H+H+H+H+H+H+H+H+H+H+H+'.6+++v.N.S.@+_.N.P._+T.++f.h.r./+s.6+8.V.K..+{.7.d.:. +5+$+5+b.*+9.y.2.z.s.9.[+F.S.H.(.I.z.0.t.%+O.3+1 1 1 2 ` F+", -"1 1 A e.>.C.t.}.O.v.B.C.!.v.M.b.<+<. +@+c.<.r.:.d.5+j. +r. +t.:+ +r.<.$+ +$+ +O._+v.q.q.<+<+j.<+4+1.J.1.E.4+d.7.r.B.1.4+_.V.g.(.5+9.[+:. +v.2 1 1 1 Z F+", -"2 1 A p.:.6+S.F.s.S.B.t.K.K.[.N.b.[.P.5+_+$+:..+d.&.F.k.0.z.s.$+B.%+S.[.r.k./+_+/+M.E.H.9.y.:.~._.7.`.4+j.!.S.8./+j.`.B.F.$+++u.F.5+d.^.c+&+1 2 1 2 ` F+", -"1 2 A e.<.z.%+M.C.2.K.c.z./+O.z.S.k.z.t.h.*+_.O.r.T.:.~._.Q.C.[+f. +M.Q.f.Q.(.Q.z.j.B.4+$+z.).q._+H.7+!.%+{. +Q.A.y.O._.B.0+(.(+K.$+_.u.y.5+1 2 1 2 ` C+", -"2 1 A e./.c.M.].h.@+r.Q.t.I.}..+v.Q.I.(+k. +2.%+y.s._..+I.z.k.j.*+_. +0. +t._+(.K.[+F.$+/.T.b. +y.v.J.M.%+j.9+7.s.7.@+_.B.z.Q.%+#+w.C.7.O.g+1 2 1 2 ` F+", -"2 2 A p.].w.w.<.c.v.k.0+,.V. +[.f.5+g.z.k.r.y. +y.k.v.K.#+++N.r.f.j.].O.<+*+P.J.K. +O.1.j.@+5.H.B.0+J.O.z.5+Q._+l.!.F.M.b.s.8.Q.0.%+@+2.&+b+2 2 1 2 ` C+", -"1 2 A e.{.P.*+!.7+r.y._.h.$+%+0.f..+9+s.k.O.y.z.:.++r.K.P._+N.r.2.y.&.Q.Z._+Q.g.8+`.:+S.`.s.0.<.~.$+9.E.S.F.K.(+u.6+B._.2.s._+c.K.5.$+r.5+X.2 1 2 2 ` F+", -"2 1 A p.e.{.5+B.*+/.:+r.).v.y.M.5+W.K.s.C.W.r.2.S.[.r.C.K.8.N. + +i.w.K.F.c.(.g./+$+/.v.S. +b.y.M.Q.h.H.~.~..+J.L. +[+d.:.k.(.t.0.Q.1.`.E.5+1 2 1 2 ` F+", -"2 2 A e.*.O.;+>+,+,+,+,+,+,+,+,+,+>+q _+Q.*+O.z.N.}.k.a.(.z.K.l./+/.<+F._.t.V.}.j.0.(.z.J.l._+_.<+<.r.b.(.z.J.l._+].:+E.S.J.0.w.0.K.:+9.@+g+2 2 2 2 ` F+", -"2 2 A e.].~.r r r r r r r r r r r r ,+%+t.M.O.F.M.*.6+.+i.K.++c.s.2+L.2.0.K.Q.*.6+.+h.I.#+g.w.4+E.&.4+ +h.I.#+g.y.4+E.2._.t.H.H.H.c.S.<+8+c+2 2 2 4 ` C+", -"2 4 A p...2.-+r o p p p p p p p p k+r+$+K.T.*+%+.+_+:+++A.s.(+C.N.2.j.:+[.++P.<+]+ +y.s.]+G.J.b.r.<+]+ +y.s.]+G.J.2.j.<+0.J.H.V.0..+z.t.&+5+2 2 2 4 ` F+", -"2 2 A e.j.!.-+r r r r r r r r r r k+r+M.Q.T.N.f.u.$ $ $ $ Q.(+B.5+C.2.7+:.c.).K.R.C.@+$ Z.F.%+S._+_+b./.`.9. +_+H.(.J.f.<.`.P.`.i.:.d._.d.@+4 2 2 2 ` F+", -"4 2 A e.r.<+-+r r r r r r r r r r k+r+++++++K.O.C.$ g.y.(+$ (.N.!.v.b.b.{.~.k.w.P.w.++$ d.].]+!._.b.1.:. +/.:+9.%+z.s.<+J.t.H.P._+b.7.y.E.@+4 4 2 4 ` F+", -"4 4 A p.q.w.-+r r r r r r r r r r ,+r+s.B.S.6+S.C.$ 5+I.~.$ Q.C.$ $ r.s.6+$ $ $ ++0+i.$ _.$ $ $ $ 7+M. +$ $ F.7.J.$ $ K.5+_.(.T.s.7.J.j.]+X.4 4 2 2 ` C+", -"4 4 A e.'.v.-+r p r r r r r r r r ,+r+N.(+[.k.:.A.$ $ $ $ 0..+$ k.B.$ :.F.$ $+l.$ Q.F.$ /.b.<+@+$ s.S.$ b.7.$ H.$ `.).$ %+J.z.J._+g.H.J.B.3+4 4 4 4 ` F+", -"4 4 A p.>.S.-+r r r r r r r r r r k+r+_+h.c.T.j.:.$ 2+*.$ t.s.$ $ $ $ f.@+$ 6+]+$ <+H.$ B.r.$ $ $ _+J.$ Z.<.h.#+$ $ $ $ h.%+]+#+0.9.#+H.S.b+4 4 4 4 ` F+", -"4 4 A e.<.>.-+-+r r r r r r r r r ,+r+.+k.N.C.$+<.$ S.}.++$ .+$ 8.A.c.<.4+$ 7.H.$ 9.`.$ b.$ ]+1.$ Q.:.$ /.,.$ #+$ Q.Q.`.(.Q.N.%+J.#+7.7.D.g+4 4 4 4 ` F+", -"4 4 A p.!.2.-+r p r r r r r r r r k+r+%+t.F.!.j.:.$ r.K.P.$ N.r.$ $ $ Q.Z.$ $ $ 9+@+<+$ `.$ $ $ $ $+9.E.$ $ K.(+l.$ $ $ (.7.(.t.0.Q.1.`.X.5+4 4 5 4 Z F+", -"4 5 A m.j.r.-+r -+r r r r r r r -+,+r+(..+_.(+b. +[.r.C.K.8.N. +++i.v.K.E.$ (.g.4+$+/.v.S..+0.v.J.Q.j.H.~.~..+K.I..+4+d.S.J.9.s.0.K.:+9.]+c+5 4 4 4 ` F+", -"4 4 A e.+.'.-+k+r+r+A+A+A+A+A+A+r+A+r+0.C.0.C.W.2.Q.B.s.5+h.%+B.j.,.}.`.v.$ h.[.H.$+B._+S.2. +q.0+<.j.F._. +H.K.I.<+7._.0.t.z.H.H.9.S.<+9+c+4 5 4 4 Z F+", -"5 4 A p.*.$+r+H+H+H+H+H+H+H+H+H+H+H+H+9+k..+9+b.'.%+6+%+~.Q._+C.8+N.d.8+<.j.).R.H.M.*+M. +G.]+H._+4+9.:.$+h. +/+V.[.Q.j.M.]+).V.9. +G.v.]+4+5 5 4 5 ` F+", -"4 5 A m.^.w.C.2.2.~.(.P.V.G.v.M.y.h.0.0.++N.k.y.b.5+f._+g.(+%+h.}.C.7.y.<+y.B.}.S.$+'.L.[.$+]+d.<+B.7+M.F.j.z.(._+E._.[+(.#+9.:.O.*+S.y.]+G.4 5 4 4 Z C+", -"4 5 A e.&.8+{.f._+{.5.$+).Q.!.B.[+h.z.(+c.[.%+r.O.y.Z.O.&.K.<+v.k.a.:.F.`.7. +9+]+H.]+]+8+E.H.S.F.y._.&+@+$+M.j. +A._+w.&+*+]+%+J.4+@+]+7+4+5 4 4 5 ` F+", -"5 4 A m.*.y.}.r.b.:.z.K.l.[+_.<+F._.t.Q.}.N.z.:.5+v.0+8+C.Q._+$+}.w.B.:.b.%+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+d+a+a+a+d+a+d+a+|+d+3+g+a+3+d+g+o+5 5 3 4 ` F+", -"4 5 C m.&.R.*.4+ +i.I.++9.y.2+E.2.0.K.Q.6+C.}.r.M.f.*+9+0.Q.s.N.0.a.F.F.Z.<.d+q+q+q+z+z+z+z+z+u+z+z+z+z+z+z+u+z+z+y+B+z+y+B+z+z+z+u+z+z+y+z+5 4 4 5 ` F+", -"5 5 C e.*.z.<+*+ +w.t.(+I.R.2.r.:+[.++P.N.5+z.8+O.r.O._.P.V.C.N.T.k.E.*+f.B.m.d c e e e e e e e e e e e e e e e e e e e e e e e e e e e d e 5 5 5 5 ` D+", -"5 5 C m.{.0.b.j.<+}._+Q.8.'.].,.<+.+s.P.Q.$+).M.M.$+M..+h.h.t.6+t.6+1.J.B.H.m.d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d 5 5 5 5 ` D+", -"5 5 C m.2.h.<.j.b.:.z.K.l._+].:+F._.t.Q.0.T.%+M.j.{.~.K.8._+%+h.'.$+y.:.d.j.d+d+d+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+%.3 5 5 3 ` D+", -"5 3 C m._.<.&.4+ +j.I.++0.w.4+F.2.0.K.Q.C.O.N.T._.a.@+C.h.5+t.F.z.C.5+_.S.J.4.4.m.e.6.^+e.e.6.m.e.6.^+e.e.e.m.^+^+m.m.m.m.m.6.m.^+e.m.e.^+#+5 5 5 5 ` D+", -"5 3 C m.!.k.h.Q.).S.b.!.(.y.*+O.Z.R.~.g.K.S.h.s.W.@+O.W.$+l.Q.r.s.<.y._.`.g.(.l.%+ +K.S.E.y.S.y.7.K.F.:.J.d.[.J.6+_+$+:.@+0.,.I.l.a.B.y.4+4+3 5 5 3 ` D+", -"5 3 C m.<.k._+_.++A.s.(+I.R.b.r.<+}.#+Q.++v.N.T.:.Z.).:+l.$+.+s.B.<.J.$+'.G.(.$+$+b.<+F.7+K.F.j.z.(._+F._.[+:.#+9.(.M.&+S.t.$+L.z.a.M.9.y.]+3 3 3 3 ` D+", -"3 3 C m.~.k.;+>+,+,+,+,+,+,+,+,+,+>+q 6+Q.f.~.K.:.[.k.0.(.z.K.l./+/.:+F._.t.V.}.k.a.(.z.J.l._+_.:+F._.t.V.}.k.0.(.z.J.l._+].:+F._.t.H.J. +X.3 5 5 3 ` D+", -"3 3 C m.'.a.r r r r r r r r r r r r ,+V.C._.5+.+:+&.2+.+h.I.++0.s.2+L.2.0.J.V.*.4+.+h.I.#+9.s.4+F.2.0.J.V.*.4+.+h.I.`.9.s.4+F.2.a.K.H.+.F.4+3 5 3 3 ` D+", -"3 3 A e.*.Z.-+r o p p p p p p p p k+r+_+k.y.C.Q.b._+*+.+s.t.(+z.N.2.j.<+[.`.P.<+*+.+w.s.]+G.J.2.j.:+<.`.Q.<+]+.+s.t.(+z.J.2.k.<+}.#+Q.0+%+W.3 3 3 3 ` D+", -"3 3 A m.*.2+-+r r r r r r r r r r k+r+0.$+f.s.h.y.$ +s.g.8.).$+0.z.S.G.M.%+l./+C.:._.i.$ v.b.S.<.`.j.$ $ $ $ #+z.u.r.{.<+z.$+,.R.$ J.2.F.3+3 3 3 3 ` D+", -"3 < A e.{.%+-+r r r r r r r r r r k+r+T. +W.5+0.S.$ d.@+0.t.5+$+F.s.F.>.M._.}.z._.L.C.a.$ 9.B.]+v.G.B.$ +B. +$ H.Q.*+*+B./+]+(+$ V.K.7.<+[+< < 3 < ` D+", -"3 3 A p.@.B.-+r r r r r r r r r r ,+r+%+(+ +t.!.r.$ W.).z.g.*+$ $ Q.j.$ $ $ $ (+(+4+$ $ $ 6+7.@+S.<+2.$ y.H._+$ Q..+$ $ M.G.8.$ $ $ s.t.b.|+< 3 3 < ` D+", -"< < A m.*.w.-+r p r r r r r r r r ,+r+K.z.>.v.9+*+$ +6+~.K.$ q.}.$ b.H.$+V.$ Q.s.$ .+.+$ ]+`.@+S.H.H.$ F.S.s.$ V.$ _+[+$ ).T.N.$ l.[+:+*+8+< 3 3 < ` D+", -"< 3 A p.).c.-+r r r r r r r r r r k+r+s.h.*+b.5+f.$ +K.I.T.$ <+_.$ S.K.$ $ $ z.2+$ @+L.$ G./.`..+s.F.$ j.4+0.$ V.$ $ $ $ s.0.s.$ g._.J.5+g+< < < < Z F+", -"< < A m.{.!.-+-+r r r r r r r r r ,+r+.+M.B._.Q.v.$ M.h./+0.$ E.S.$ v.$ 2+~.$ /+@+$ <+Q.$ _+z.j.(.t.b.$ B.B.5.$ `.$ +5+z.(+).(+$ ).q.y.S.c+< a < < ` C+", -"< a C m.2.z.-+r p r r r r r r r r k+r+(+z.y. +!.F.$ $ $ $ }. +$ $ ].B.$ $ $ $ }._+*+$ $ $ _+.+B.B.v.]+$ $ $ $ 7.7.P.$ $ $ s.9+c.$ K.y.$ @+8+< < < < ` F+", -"< < C p.@.F.-+r -+r r r r r r r -+,+r+%+++O.j.C.S.h.b.~.).(.(+:+>.$+F.N.[.z.$+}.L.B.S.t.Z.K.s.B._.H.y.Z.9+1.5.z.#+V.$+_..+(.8.0./+<+H.v.d.5+< a < < Z C+", -"a < C m.*. +-+k+r+r+A+A+A+A+A+A+r+A+r+/+ +Q.@+F.r.r.t.W.l.$+.+y.F.<.J.%+'.C.Q.(+K.s.O.v.4+v.B.j.y.9.b.J.B.{.7.#+K.h.c.!.T.h.Q.(+7._+O.b.:+0+< a < < ` F+", -"< a C m._.y.r+H+H+H+H+H+H+H+H+H+H+H+H+_+%+N.T.<.@+/.O.9+y.6+P.t.(+*+f.S.N.5.h.).z.C..+k.9.d.7.>.s._+O.5+O.5+Q.[.s.8.[.B.S.(.V./+8.%+B.5+3+f+a < a < ` C+", -"< a C m.>.v.<+{.v.<.b.~.:.y.:+O.Z.Q.~.g.K.Z.j.y.W.@+O.T.$+l.Q.r.s.[.v._. +9.(.t.%+ +K.Q.F.v.S.A.l.P.E.<.J.b.[.J.5+<+*+:.++g.,.K.l.0.B.y.4+5+a < < a ` F+", -"a a C m.'.W._+M.W.E.2+y.*+j.@+!.r.4+C.5+[+[+@+@+j.S.%+!.N.~.$+v.O.Z.S.S.:.j.$+t.Z.y.E.b.*+B. +M.]+u.@+j.$+B.B.[.$+J.F.j.k._+(.#+j.*+B.[+q.7+a a c < ` C+", -"< a C m.r. +S. +1+E.v.:+j.W.E.O.j.|.S.W.*+W.2+W.O.v.7+e.v.O.M.q.<+j.1+X.5+W. +1+<+W.:+*+1+E.W.X.M.x.:.&+&+&+O.p.W.y.2+x.&+*+&+&+O.5+X.3+5+4+< a < a ` F+", -"a a C m.m.m.d+d+a+|+g+c+d+3+a+c+d+a+a+a+d+a+d+a+a+c+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+d+a+a+a+d+a+d+a+g+d+3+g+a+3+d+g+o+c a a a ` C+", -"a c C m.c+q+s+B+q+B+y+s+y+y+y+y+y+u+s+y+y+B+y+y+y+y+y+u+s+y+s+B+s+y+y+y+y+u+s+y+y+B+y+y+y+u+y+u+u+y+y+s+u+y+u+u+s+s+B+y+s+B+y+y+y+u+u+s+y+y+< a a a ` F+", -"a a a a a a c a a a a a < a a a a a a a a a a a a a a a a a a a a < 0 a a a a < a a a a a a a a a < a a a a a c a a < a a a a a a a a a a c a a a a ` F+", -"a a c a c 0 0 c 0 0 c c c c c 0 c c c 0 c 0 c 0 c c 0 c c 0 c c c c 0 c c a c c c c c c 0 c c c c c c a c c c a c c c c c 0 c c 0 c c c c a c a a a ` F+", -"a c a ^+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+%.k c a c ` D+", -"a c 0 j.6.6.e.e.(+4.m.e.6.U.e.e.e.m.U.4.m.p.6.^+p.e.e.m.U.6.m.e.6.#+e.e.p.m.#+6.m.j.6.^+p.e.6.m.e.6.U.e.e.e.m.U.U.m.m.m.m.m.6.m.^+f.m.e.U.U.k 0 0 c ` D+", -"0 0 c 6.Y *.&.D ..*.&.+.@.>.'.*.&.'.@.&.@.@...@.Y >.+...@.'.,.&.&.*.+.&.@.+.&.*...&.....*.^.'.'...,...D *.+...*.@.'.*.'.&...@.@.!.{.{.>.y.*+e c c 0 ` D+", -"0 c c 6.'.<. +/.C./.}.:.Q.j.M.'.F.K.8.[.k.{.f.F.<+}.f.t.*.z.[.j.].{.a.G.M.C.Q.i.t.<+F.@+^.J._.^.{.h.{.<._.2.'.8.!.Q.'.<.`.7.[.%+5.:.@.f.@+8+3 0 c c ` D+", -"c 0 c 6.)._+y.w.t.M.f.++8.).@+(.M.c.P.#+y.S.W.z.8+Q._.c.z./+K.:+{.h.8+#+Z.$+++I.$+y.C.++++V..+M.S.C.s.5+C.~.w.P.z.K.C.u.z.7+z.7+g.V.8+h.:.s.5 c c c ` D+", -"c c c 6.@.K.$ $ 7+b./+_.s.,.b.c.'.h.I./+).y.<.<.~._.y.$+Q.++.+!.b.B.O.h.B.$ $ $ %+*+k.$ $ $ }.v._.++h.:.h. +W.Q.V.P.$ $ B.t.J.C.(.Q.c.2.*+c+5 c c c ` D+", -"c c c 6.,.i.$ $ 7+i.<.N.l.s.z.'.j.s.}._+}. +W.}.:.h.:.:.6+c.@+q.Z.h.*+T.r.$ $ $ ]+@+L.$ $ $ h.%+$+c.<+6+:.F.).z./+c.$ $ u.[./+s.++V.f.y.0+M.5 c c c ` D+", -"c c e 6.[.(.$ $ k.W.:.[+P.).$ $ $ $ #+g.t.$ $ $ $ %+d.$ $ $ $ $ r.W.B.T.O.$ $ $ $ F.$ $ $ $ #+:+$ $ $ $ }.b.K.$ $ $ $ $ F.).$ $ $ $ c.C.@+@+5 c c c ` D+", -"c c c 6.>.c.$ $ P.S.v.!.K.$ $ N.j.$ $ z.$ $ *+h.$ $ {.$ $ 8.f.$ $ j.r..+O.$ $ $ $ r.$ $ $ $ 6+$ $ ]+T.$ $ v.$ $ P.K.$ $ L.$ $ P.z.$ $ w.M./+5 e c c ` D+", -"e c d 6.*.t.$ $ ++!._+t.I.$ $ }.!.$ $ Q.$ $ 2.B.$ $ +$ $ /+f.$ $ j. +C.:+$ $ (.$ %+$ %+$ $ z.$ $ k.(+$ $ {.$ $ t.0.$ $ [+$ $ $ $ $ $ w.E.<+3 d c d ` F+", -"e d d 6.+.c.$ $ }./. +6+P.$ $ %+@+$ $ ++$ $ v.N.$ $ f.$ $ s.B.$ $ r.B.(.:+$ $ #+$ $ $ (.$ $ }.$ $ V.h.$ $ k.$ $ V.$+$ $ $+$ $ h.$+]+b.(+0+F.5 d d c ` F+", -"d c d 6.<.(.$ $ }.N.h.P.#+$ $ T.y.$ $ (.$ $ [+B.$ $ f.$ $ .+(+$ $ +v.z.W.$ $ #+$ $ $ w.$ $ ~.$ $ z.I.$ $ y.$ $ 9+k.$ $ j.$ $ C.g.$ $ 7+&+5+3 d c d ` F+", -"d d c 6.].s.$ $ $ $ $ $ N.C.$ $ $ $ g.I.%+$ $ $ $ N.c.$ $ $ $ $ F.k.f.[.B.$ $ .+Q.$ 2+t.$ $ $+k.$ $ $ $ t.6+(.$ $ $ $ $ T.h.$ $ $ $ '.<+O.F.3 d d d ` C+", -"d d b 6.!.c.%+w.Q.y.b.k.t.}.W.M.C.h.k.y.C.$+[.b.:.8+.+$ $ z.K.C.N.$+r.y.F.(+z.Q./+Q.t.v.y.W.*+C.++++2+F.!.C.z.N.[.(.Q.M.F.++z.l..+_+w.y.X.[+3 d d b ` F+", -"d d d 6.!.++%+y.a.h.5+l.V._._.++@+}._+I.9+S.C.b.B._.<+$ $ /+}.%+}.{.F.%+O.k.$+P.M.h.F.2.B._+O.B.Q.k.s.r.0.$+_.P.t.++}.!._.Q.s._+c.#+Q..+O.4+< d d d ` F+", -"d d b 6.y.T.W.7.G.h.(.V.(+K.@+N.w.I.V.I.C.5+c.W.v.j.&.(.$+s._+h._.M. +y.*+K.0.#+z.0+(.c.w.].W.Z.F.C.$+f.{.<.k.I.V..+h.W._+/+]+s.C.I.I._.S.X.< d d b ` F+", -"b d d 6.<.!.P.S.:+J.#+7.h.i.<+r.2+8.V.I.++_.h.<.].S.[+%+5+8.$+h.u.<.v.j.<._+I.(..+h._.2+a.<+{.v.&.c.c.>.f.y._+).s.0.0.~.[.z.$+L.T.V.~.g.W.4+< b d b ` C+", -"d b b 6.+.k.N.4+B.F.(+t.#+V.A.:.O._._.0./+++$+O.W.~.b.[.I._.k./+).:. +!.O.!.K.5+v.F.%+<.].@+b.O.z.V.N.*.y.$+h.t.g.0.N.$+s.t.a.a.c.K.8.H.@+@+< d b b ` F+", -"b b b e.<.k.h.j.).:+z.(+'.P.]+F.:.a.}.V.N.6+k.!.$+ +r.F.(.).++[.6+2+L.:.y.[.P.#+(+}.s..+v.M.$+[+s.++.+'.k.[._.8.(..+~.t.%+l.N.u.C.(.t.2.5+8+< g f b ` F+", -"b b b 6.*.4+_.j.{.F.Q.K.$+B.O.B.@+O./+/+c._.++2.W.:+O.).P.h.N..+l.S.b.].2.{.).}.z.$+'.S.y.:.y.y.).).0.i.2+{.c.g._+h.c..+s.8.}.R.}.++0.H.@+W.< b b b ` F+", -"b d h e.).:.O.S.S.4+:.`.y.@+D.|.B. +.+(.!./+h.*+<.*+O.:.!.(.~.2+++r.F.F.W.).T.Q._+W..+b.b.f.<+r.6+8.Q.y.S.!.h.0.(.++5+$+5+8.++}.k.Q.5.J.S.x.< b b b ` C+", -"b h b #+*.S.!+~+{+{+{+{+{+{+{+{+{+~+v (+A.h.++v.j.S.b._+++++9+].&.f.v.y.<.K.h..+M.M.(+5+{.2.f. +6+++_+*+j.r.T.(+(+c.N.C.[.P.K.K.t.9.G.w.y.b+a b b h ` F+", -"g b b e.>.A.w w w w w w w w w w w w {+%+L.%+T.F.O.B.[+c.s.I.9+K.Q.O.y.*+:.c.#+h._+y..+v.S.y.v.$+h.Q._+2._.:..+_+z.N.0.k.Q.s.c.!.P.V.G.G.B.4+< h b b ` F+", -"b h h 6.!.y.'+w s t t t t t t t t m+t+l.G.%+/.i.$+c.O.r.K.8.@+B.Z.F.:+c.W.}.$+z.F.<.@+C.B.c.c.*+]. +f.@+t.:+].I./+N.*+{..+g.V.s.h.g.z.H.*+e.a b b h ` F+", -"h b h 6.~.:+'+w w w w w w w w w w m+t+.+Q.S.j.B.:. +W.$ K._+t.:.$ $ $ $ S.0._+2+[+$ E.F.s.$ $ $ $ $ '.s.O.[+$ 8+}.N.8+v.B.P.P..+l.P.F.]+O.g+< h b h ` C+", -"b h b 6.>.&.'+w w w w w w w w w w m+t+s.0+<.:._+O._.$ O.$ N.C.].$ z.b+7+$ N.#+f.$ E.$ r.%+).j.$ <+).r.N./.$ $ !.P.s.!.M.0.l.P.t.(.g.%+M.M.c+a b h h ` F+", -"h h h 4.*.H.'+w w w w w w w w w w {+t+R.t.2+Q.:+W.r.$ {.$ 6+z.r.$ E.b.v.$ l.z.C.$ <.$ *+:+y.v.$ h.s.O.O.'.O.$ v..+F.v.O.T.Q.u.0.#+0.v._.*+c+a h h h ` F+", -"h h h 6.).0.'+w t w w w w w w w w {+t+_+/+N.++2.S.$ d._+z.$ _+[+$ Z.<.F.$ !.'.$ v.F.O.$ E.{.b.$ g.K.k.A.[. +$ (+V.M.(+h.++9.#+l.6+h.V.7.0+4+a h h h ` F+", -"h h h 8.b.L.'+w w w w w w w w w w m+t+N./+s.T.y.:.$ $ $ $ $ t.7+$ d.b.*+$ }.s.$ $ $ $ $ 1.O.F.$ z.c.:.2+:.c.$ $+I.c.$+s.i.7.]+}.s.(.#+K.X.@+a h h h Z F+", -"h h h 6.r.L.'+'+w w w w w w w w w {+t+z.%+!.}.:+y.$ O.0.(.$ h.5+$ x.&.b.$ '.K.$ ).t.:.$ '.].v.$ P.T.O.'.2.z.$ ++l.C.++%+Q.`.%+g.]+H.5.~.7.e.0 h h h ` F+", -"h h h 6._.t.'+w t w w w w w w w w m+t+g.C.s.N.v.$ 2.S.h.$+h.$ (+$ $ $ $ <.T.$ Q.N.T.O.r.$ ].M.$ l./+*+r.[+K.$ 9+8.C.9+N.%+]+(.b.K.l.G.5.S.E.0 h h h Z F+", -"h i h 6.*.~.'+w '+w w w w w w w '+{+t+++K.++k.B.{.!.S._.7+7+Q.0.z.:.F.W.@+_.z.#+C.T.$+[+v.W.W.>.k.}._.:.{.O.'.t.#+t.T.A.J.:.7.:.Q.t.z.G.Z.5+c h j h ` F+", -"h i h 8.@.%+'+m+t+t+B+B+D+B+B+D+t+B+t+(._+*+2.$+<+_.B.).s./+c.t.0.j.].<+q.W.V.g.z.6+[.~.8+_.y.2.~.0.9+].v.!.0.$+V.7+t.s.K.s.&.2.:+%+l.9.O.X.0 h h h Z F+", -"h h h 6.>.K.t+H+H+H+H+H+H+H+H+H+H+H+H+l.*+(+y.++ +K.S.z.5+h.z.F.5+C.W.R.F.(+8.h.%+j.:+t.@+s.T.B.y.:+k.W._+b.(.8.%+[+F.E.5.l.J.w.6+k.w.H.4+0+c h k h ` F+", -"i k h 6.b.(.F.B.(.M.O.Q.P.W.A.B.2.K./+Q.K.j.y.++ +K.Z.F.5+h.B.F.5+C.W.Q.F.:+8.h.%+j.:+t.@+s.T.B.s.(+r.W.<+b.(.8.#+_+B.E.5.t.J.t.g.).r.9.X.4+0 i h k ` F+", -"h j h 6.<.<.0.F.k.F.$+5+}.S.*+&.b.y.6+I.z.<.{.$+*+C.B.(+).z._+].M.B.y.T.E._+P./+0.@+S.B. +++z.S.$+%+T.@+_+@+'.P.(+C.8+F.b.7+(.9.).K.J.F.4+<+e h i h ` F+", -"k h k 4.!.@+}.j.%+~.h.z.t.h.7.d.y._+Q.t.t.:.B.:.].W.W.k.l._+_+c..+b.b. +b.%+$+K..+s.K.@+M.].F.:.k.++T.<+<.O.z.}.t.%+0.7+<+J.h.[.$+V.(.J.5+b+0 i h k ` F+", -"h k h 6.&.Q.c.:+u..+z.++I.s.&+j.O._+g.}.0.$+(+v.B.:.f.K.s.h._.t.0.r.O.M.>.T.P.8.}.Q.%+v.r. +_.y._+s.~.:+f.<+K.(.h.$+z.N._+t.5+H.h.z.).7.x.4+c i j k ` F+", -"i k i 6.'.%+T.W.z.R.K.V.V.8.9+b.M._+$+l.K.6+z.2.{.:+<.!.V.8.k.7+s.y.<.!.@+++0.$+K.T.}.y.O.2.2.$+$+P.$+2.S.r.(.).I.++$+K.T.s..+z.t.l.7.]+$+5+c i i i ` D+", -"k i j e.r.c.%+v.w.:.8.`._+]+y.v._.h.z.V..+!.N.F.O.v.f.K.Q.Q.z.k.5+b.O.b.[+N.++).T.k.}.8+W.y.<.j.%+t.[.<+b.].j.%+K.W.C.c.s.`.s.t.[.(+Q.9.4+4+0 k i k ` D+", -"i k i 6.>.B.F.1.W.j.9..+8+_+&+<.X.b.'.P.s.c.s.j. +y. +N.8.t.s./+(+<+B.B.O.0.z.}.!.[.h.W.<+f.!.O.[._+0.W.y.v.9+(._+O.<+(.s.5.B.]+6+&.K.t.O.5+0 k i k ` D+", -"k i i e.:.k.!+{+{+{+{+{+{+{+{+{+{+{+v 4+k.r.$+:.f.!.v.k.P.8.z.%+%+ +y.W.S.%+t.V.Q.K.C.B.$+M.{.B.K._.T.j.y.f.Q._+s._+%+ +F.H.F.J.J.g.0+g.%+b+c k j k ` D+", -"k k k 6.d._.w w w w w w w w w w w w {+_+%+t.).@+:.}.v.}.V.h.*+*+<.N.$+$+f.t._+~.8.f.S._.f.C.z.B.N.%+%+f.C.:.h.(.I.$+b.S.{.9.9+).y._.g.$+]+c+0 k i k ` D+", -"k k k e.@.A.'+w s t t t t t t t t m+t+0+k.v.f._._.++@+}./+K.9+S.E.j.F._.<+I.(./+8.%+a.].F.%+N.r.%+N.C.2.C.b.z./+Q.K. +7.B.7.s.l.z.C.5+%+<+++e k k k ` D+", -"k k k e.&.M.'+w w w w w w w w w w m+t+s.5+j.S.k.B.c.W.$ z.h.}.:+$ $ $ $ 1.%+(+++M.$ K.O.6+$ $ $ $ $ +~.$ $ h.P.#+6+<+b.J.t.9.%+(.R.t..+v.v.e k k k ` D+", -"k k k f.'.7.'+w w w w w w w w w w m+t+I.Q.j.y.@+B.c.$ k.$ t.$+W.$ F.:.K.$ '.++(+$ w.$ r._+r.B.$ z.c.2.$ B.).$ I.$+O.j.d.{.c+_+_+5.7+ +++8+5+d k k k ` F+", -"k k k e.@._.'+w w w w w w w w w w {+t+6+/+W.O.$+j.f.$ 5+$ k.S.F.$ :.$+k.$ K.K.t.$ w.$ W.Q._+O.$ 7+++<+N.++s.$ {.8.).%+d.G.H.g.K.$+7.[+N.y.2+e k k k Z D+", -"k x k f.*._.'+w t w w w w w w w w {+t+z.(.r.*+0+O.$ F.5+.+$ t.!.$ O.1.t.$ c.0.$ u.%+[.$ K.s.b.$ h.++S.u.T.$ s.:.g./+W.u.!.V.I.K.$+7.4+z.r.z.d k k x ` F+", -"k k x e.{.0.'+w w w w w w w w w w m+t+]+g. +B.(.4+$ $ $ $ $ 5+2.$ 9+1.z.$ ~.0+$ $ $ $ $ Q.6+j.$ C.s.>.0.5+$ s.W.Q.$+*+[.H.t.h.5.H.).y.5+}.X.d y k k Z D+", -"x k x e.!.@+'+'+w w w w w w w w w {+t+9.t.f.q.@+2+$ b.c.z.$ z.S.$ +y.++$ (.s.$ '.8+<.$ h.Q.v.$ T.t.!.K.$ H.H._+l.y.S.B.<+z.5+_.z.t.:.F.%+C.d k k z ` D+", -"x k z e.@.k.'+w t w w w w w w w w m+t+_+w.F.f._+$ Z.).r.0.0.$ z.$ $ $ $ z.0.$ s./+@+K.B.$ '.K.$ (.s.{.$ $ # $ C.h.K.(+y.C.Q.(+h.Q.Q.).y.C.S.d x x x ` D+", -"z k z e.b.`.'+w '+w w w w w w w '+{+t+l.$+0.v.f._.f.(.s.t.c.9+_.Q.r.M.F..+$+$+Q.K.N./+<+S.b.:.k.5+c.:+y.<+++*.~.t.s.c.:._.K.t.#+A.`.2.S.*+5+g x k z ` F+", -"x x z e.{.9.'+m+t+t+B+D+B+B+D+B+t+B+t+6+t.M.y.M.<+++j.z./+I.h.(._+<.!.Q.<.f.5+z.K.c.).@+@+}.++B.N.}.z.S.0.b.$+(+Q._+h..+A.++6+V.z.[.*+]+<+c+b x x x Z F+", -"x z x e.@.J.t+H+H+H+H+H+H+H+H+H+H+H+H+T.h.0+0.:.y.:.F..+(+(.C.%+s.M.$+[+v. +U.~.s.0._.:.{.O.>.j..+h.N.v.B.{.k.8._+%+t.a.A.}.!.A.T.$+K.H.X.8+d z z x ` F+", -"x x x e.*.[.(.S.K._+s.)._+`.j.F.{.!.U.[.9+7+K.:.y.:.F..+(+(.C.%+s.M.$+[+v..+#+~.s.b._.<.{.O.>.j..+h.N.v.B.{.k.8._+%+t.a.z.7.6+h.).H.9.G. +4+b x z z ` F+", -"z z z e.~.7..+F.$+Q.s.G.s. +*+F.M.5+8.,.k..+h. +,.~.].Q.t.l.[.h.0.$+b.O.S./+}.K.T.b.&. +[+y.j.:.N.5+Q.M.f.r..+$+I.u.:.h.%+7.Q.J..+P./+5.Z.O.b A x z ` F+", -"z z z j.r.]+2./.$+d.`._+Q._.O.9.E.Q.t.++k.:.b.{.!.(.v..+!.++K.2.B.B.{.).b.h.7+(.k.f.*+b.2.T.k.<.}..+0.W.}.S.K.0.I.l.a.5+<.7.P.z.8.%+s.9.J.0+g z z z ` F+", -"z z z e.@.[.M.7.0+Q.#+5.J.B.7.F.j.0.V.I.C.%+!.B.].M.2.C._+(+z.c.h.[+b.O.]._.$+$+c./+z.5+F.B.b.y._._+C.].<+:.++9.(.J.]+Q.s.$+L.w.8.P.h.G.8+5+b z z z ` F+", -"z z A j.b./.S.B.Q.z.g.9.(.&.<+y.B./+l._+z.z.(.[+j.W.v.k.g.Q.K.:.}.2.0+y.<.[.).(.Q..+C.v.M.y.f.<.}.V.C.j.v.b.7+t./+h.:+`.i.0.C.u.A./+h.7.S.S.b z z z Z F+", -"z A z e.'.9.M.F.<.O.h.8.P./+$+ +_.W.c.'.N.s.}.v.j. +y.++Q.8.s.s._+*+:+B.B.Q.g.z.}.!._.f.W.<+f.!.Q.}._+2.Z.y.s.0+(._+N.$+[.t.[.A.(+7+*.G.O.&+g z z z ` F+", -"z z B e.&.v.B.&+J.:+@+B.F.B.&+<+O.S.9+8.'.j.S.j.@+,.!.].V.t.t.:.b.b.*+c.S.T.5+}.N.S.<.,.@+/+z.r.[.Q.5+T.J.k.t.#+$+K.r./.j.`.h.Q.V.++N.<+y.<+g z B z Z F+", -"z A z e.b.%+!+~+{+{+{+{+{+{+{+{+{+~+v l.*+0.v.f._.f.(.s.t.c.9+_.Q.r.M.F..+$+$+Q.K.N./+<+S.b.:.k.5+c.<+y.<+`.*.~.t.s.c.:._.K.t.#+A.++2.Z.*+8+g z z z ` F+", -"z z B e.{.i.w w w w w w w w w w w w {+6+t.N.A.M.<+++j.z./+I.h.(._+<.!.Q.<.c.5+z.K.c.).@+@+}.++B.N.}.z.S.0.b.$+(+H.<+i..+A.++6+V.z.[.*+]+<+c+g B z B ` F+", -"z B z e.@.S.'+w s t t t t t t t t m+t+V.h.0+0.:.y.:.F..+(+(.C.%+s.M.$+4+w..+#+~.s.b._.:.{.S.'.r. +k.R.v.B.{.7.8._+%+u.a.A.}.!.A.T.$+J.H.X.5+h z z A ` F+", -"z B z f.*.}.'+w w w w w w w w w w m+t+5.7+7+K. +,.~.].$ t.l.[.h.$ $ $ $ T./+K.W.0.$ @+4+y.$ $ $ $ $ O.j.$ $ $+G.K.t.(.i.%+h.6+i.{.Q.9.z. +4+h B z B ` F+", -"A z B e.~.v.'+w w w w w w w w w w m+t+'.k..+h.{.!.(.$ .+$ ++K.2.$ B.{.).$ i.(.r.$ :+$ b.T.k.1.$ +b.H.$ S.K.$ <.I.k.b.5+<.h.R.N..+P./+2. +S.g z B A ` F+", -"B z B d.j.]+'+w w w w w w w w w w {+t+%+k.:.b.B.].M.$ C.$ (+z.c.$ [+b.R.$ (.$+c.$ B.$ M.F.b.B.$ _+C./.<+_..+$ h.(.N.(+S.s.h.P.A.8.%+s.9.O.0+h B z B ` F+", -"B z B e.@.}.'+w t w w w w w w w w {+t+K.L.%+!.[+j.$ v.k.g.$ K.[.$ 2.0+A.$ [.(.$ +L.y.$ B.f.1.$ .+G.r.y.d.$ l.[./+j.:+++h.(+K.s.8.P.h.G.9+5+h z B B ` F+", -"B z B d.2._.'+w w w w w w w w w w m+t+_+C.z.(.y.r.$ $ $ $ $ s.s.$ ]+:+C.$ Q.C.$ $ $ $ $ [+i.!.$ }._+2.H.B.s.$ h.(._+O.$+[.0.C.u.A./+h.7.S.X.g B z B ` F+", -"B z B e.~.j.'+'+w w w w w w w w w {+t+'.P.s.}.r.@+$ !._.V.$ t.[.$ c.]+g.$ W.}.$ S.<.>.$ 2+B.q.$ Q.7+S.$ j.t.$ }.(+K.r.].j.t.[.A.(+7+*.F.O.@+h B z B ` F+", -"B B A j.&.v.'+w t w w w w w w w w m+t+8.'.k.S.C.$ &.d.6+h.t.$ $+$ $ $ $ 5+).$ <.F.F.[.[+$ @+y.$ [+%+M.B.$ $ ).(+_+#+M.f.h.#+g.Q.H.`.J.[+B.<+g B B B ` F+", -"B z B e.7._.'+w '+w w w w w w w '+{+t+V.7+r.v.].f..+f.Q.V.#+T.4+<.C.:.%+:.Q.I.Q.K.f.2.:.&._+z.E._+u.(+v.t.:./+t.#+C.v.b.S.K./+P.%+B.9+j.`.]+i z B B ` F+", -"B B B e.{.C.'+m+t+t+B+B+D+B+B+D+t+B+t+$+$+F.j.++O..+}..+).P.0+C.2+P.v.<+$+0.P.P.c.k.!.z.F.++r.f.2.r.>.F.4+J./+I.5+.+2.y.}.I.(.8.g.0+M.b.B.q.h B B B ` F+", -"B B B e.f.++t+H+H+H+H+H+H+H+H+H+H+H+H+_+Q.%+<+b.j.*+[.h.!.z.s.J.}.v.@+*+%+z..+.+(+t.Q.N.F.M.O.(+O.).F.J._.++k.z.k..+(+r.<+}.I.V.)..+[+5.4+$+h B B B ` F+", -"B B B e.,.R.t..+t.j.2.G.,.$+2+u./+z.s._.0.}.]+z.*+8+M.[.K.P.P.4+{.Q.j. +B.[.s.++T._.'._+2.:.M.F.}.!.W.4+O.2._+l._+Q.[+:+f.++++z.V.P. + +D.c+i B B B ` C+", -"B B B e.<.0.F.4+/.:.@+z.i.F.b.O.].++K._+0+M._.A.*+8+M.[.K.P.P.2+).Q.j. +B.[.s.++T._.~.<+b.:.M.F.}.!.W.4+O.2._+l._+Q.[+:+f.Q.0.Q.0.%+:.H.8+@+i B B B ` F+", -"B B B e.f.f.<+K.*+7.8+h.F.{.Z.T.t.C.V.g.s.4+O.T.W.y.{.k.5+#+S.C.O.K.<+:.$+R.K.8.:+:.y._+5+%+N..+C._.$+@+y.M.2+l.5+h.K.O.T.Q.h.l.s.g.B.<+E.s.h B F B ` F+", -"B B F e.'.&.r.r.~.q.M.[+].B.j.f.!.:.B.<+W.@+Z.~.q.O.W.q.D.@+:+Z.@+:+B.W.y.F.b.B.2.%+j.<.y.:+*+S.W.M.B.@+M.y.S.M.b. +r.b.S.8+[+:+0.&+e.~.*+`.h F B B ` F+", -"F B F e.:.E.B.@+|.D.F.Z.<._.e.<.E.S.:+[+:.y.S.@+y.O.:.5+O.].q.q.[+q.[+E.W.[+D.F.S.<+S.].S.*+@+X.y.!.5+f.W.:+|.S.<+0+[+|.<+E.@+d.b+*+E.6+X.S.h B F B ` F+", -"F B F e.r.O.:.<+S.Z.4+F.h.[.t.2.B.C.z.0.K. +2..+5+s.$+)._+t.).v.v.N.5+T.F.k.z.V.s.b.S.}.v.C.C.<.C..+++j.t.O.F.h.(.h.[+@+_.s.Q.++c.y.S.Q.M.4+i F F F ` F+", -"F B F e.<.<.S.o.Z.S.'. +k.r.E.y.x.5+}.h.M.v.r. +!._+r.C.K.l.c.{.j.b.S.v.Z.}.I.I.9+@+M.y.[+2.K._.c.++M.:+2+u.)._+#+%+$+<.y.I./+c.g.(+]+N.d.g+h F B B Z F+", -"F F F e.~.<.!+{+{+{+{+{+{+{+{+{+{+{+v (+t.[+M.<.O.T.v.h./+).z.$+v.S.Z.(+M.k.s.++Q.5+F.j.(+'.t.f.0.C.]+M./+v.t.t.P.h.@+2.].#+(.K.g.N.#+v.*+4+i F F F ` F+", -"F F F e.>.<.w w w w w w w w w w w w {+N.C.T.r.T.S.@+_+C.N.K.Q.k.$+[+@+v.l.G.Q.N._+h.k.j.B. +*+).[.B.2+B.(.K.g.N.N._+0.r.t.K.l._.s.T.S.E.@+0+h F F F ` C+", -"F F F e.r.2.'+w s t t t t t t t t m+t+M.z.S.K.@+j.s.!.h.}.V.N.$+8.c.!.s.O.2+z.N.:+v.T.S.B.[.Q._.{.a._+ +t._.s.T.h.0.M.F.8+(+0.I./+%+:.%+d.p.i F F F ` F+", -"F F F e.'..+'+w w w w w w w w w w m+t+Q._+y.5+W.:+_.$ $ Q.(.K.$ $ $ $ }.B.$ $ $ $ b.E.O.$ 7+_+s.$ $ $ $ g.I./+%+V.[.t.).r./+).(.++).V.].@+b+i F F F ` F+", -"I F F e.*.f.'+w w w w w w w w w w m+t+z.c.C.C.j. +$ <+%+$ (+#+$ k.c.$ _.<+$ f.h.W.$ 2.f.$ 0.#+<+$ b.<..+(.K.g.N.z.:+v.k..+s.t.N.t.z.t.:+@+X.i F F F ` F+", -"F I F e.O.).'+w w w w w w w w w w {+t+$+!.'.k.b.O.$ _.T.(.8.g.$ .+u.$ L. +$ y.].F.$ W._+$ k.K.r.$ w.T.P.l._.s.T.K._+<..+K.++I.%+C.(+$+C.j.p.i F F F Z F+", -"I F F e.~..+'+w t w w w w w w w w {+t+0+0.b.y. +B.O.$ $ s.Q.s.$ $ $ $ 2.2.$ y.++F.$ 2.!.$ c.N.$+$ $ $ }.g.K./+%+++z.t.F.~.V.~.[.I.N.v.%+d.b+i I F I ` F+", -"I F I m.*.$+'+w w w w w w w w w w m+t+N.}.Q.++>.W.v.j.t.$ #+#+$ b.b.{.M.:+$ M.S.F.$ d.@+$ T.z.9+$ E.y.6+(.P.g.N._+t.!._+].s.@+r.S.V._+R.O.&+h I F I ` C+", -"F I F e.f.C.'+'+w w w w w w w w w {+t+h.C.k.h.v.j.$ 5+t.$ P.I.$ %+v.K.O.*+$ B.&.W.$ _+K.$ 5+++_+$ .+A.0.l._.s.T.).$+f.z.Q.8.v.(+c.P.8.$+M.5+i I I F ` F+", -"I I I e.*.N.'+w t w w w w w w w w m+t+[.v.:+@+c.@+z.$ $ ++V.P.$ <+}.K. +).$ $ $ $ y.Q._.$ T.s._+$ C.<+8+g.I./+%+Q.z.O.B.T.K.K.$+h./+y.:.r.S.i F I I ` F+", -"I F I m.&.w.'+w '+w w w w w w w '+{+t+Q.(+v.r.B.M.z.*+h.(.0.s.F.S.V.f.Q.:+_+_+I.N.F.y._.y.0.s.M.,.z.R.2+{.<.C.9+s.C.O.b.2.t.).k.K.M.y.F.f.3+i I I I ` F+", -"I I I e.}.h.'+m+t+t+B+B+D+B+B+D+t+B+t+l.C.:. +.+S.!.W.Q.s.K.t.y.:+L.y.t.<.K.&.5+++r.B.W.2.s.6+M.0.c.K.O._+B.[.h.Q.t.:+O.++(.0.#+K.j.4+r. +]+i I I I ` F+", -"I I I m.[..+t+H+H+H+H+H+H+H+H+H+H+H+H+s./+<.@+b.B.[.$+N.0.$+V.S.F.z. +~.O.7+(.l.Q.b.f..+j.C.t.S.!./+K.:+C.<.s.g.5+0.@+0+b.Q.t.I.9.9.O.M.[+O.i I I I ` F+", -"I I I m.K.Q.B.2.t.%+B.5./+h.(.i. +C.Q.C.j.y. +z.F.<.*+N.0.$+V.S.F.B.@+~.R.7+(.l.Q.b.f..+j.C.t.S.!./+K.<+C.<.s.g.5+0.@+W.h.K._+K.t.Q.9.7.]+[+i I K I ` F+", -"I I I e.@.[.++S.5+r.y.G.t.,.b.6+f.k.Q.$+(+<.S.y.5+).B.k.(.I.P.<.<+*+@+v.v.<+#+I.K.v.$+!.:+T.C.f.f.N.2+M.++v.8+k.K.N.y.w.]+H.P.,.z.z.F./.8+<+i K I I ` F+", -"I I I m.~.t.k.%+v.H.B.j.<.G.'.*+4+h./+I.C._.<.[.<+c.h.%+(.l._.z.q.J.2.y.`.$+#+I.%+ +*+v.W.N.C.K.C.(+S._.L.N.)..+t.K.k.S.]+s._+`..+B.Z.J.:+4+i K I I ` F+", -"K I I m.,.].++).S.q.v.8+z.[+d.[+0+k.$+_.l.[.%+f.S.M.}.0+Q.T.7.).B.B.M.O.).h.(._+s.y.(+M.b.8+2.s.K.6+y.B.5+Q.T.P.P.(+[.1.*+g.9+g..+7.@+5+1.<+i I I I ` F+", -"K I J m.*.(+d.W.%+Z.2.J.t./.H. +d.]+#+$+.+W.T.h.F.T.A.V.Q.0./+[+).~.H.S.M.h._+_+`.B.k.%+y.O.b.r._+}.Z.O.F.[+z.7+V.C.W.:.J..+s.I.V.t.J.]+O.&+i I K I ` F+", -"K J K m.c.s.]+R.E.d.O.h.F.6+Z.L..+u.z.A.l.<+:.V.A.#+(.!._.V.N.2+k.%+S..+7.H.[..+I.k.F.5+:+L.:.y.[+.+0+).]+_.++Q.C.C.J.:.F.I.`._+(+z.E.y.H.b+i J I J ` F+", -"K I L m.t.c+Q.$+%+ + +7+:+<+}.$+@+@+i.0+(+F.7+5+c+4+b+s.<+8+0+ +8+:+8+<+1+&+ +1+<+f.A.]+0+$+4+%+0+T.6+R.6+2.N.0+@+0+9+9+6+6+K.]+6+f.*+5.0+^+b J K J ` F+", -"J J J m.m.m.d+d+a+|+g+d+d+3+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+d+a+a+a+d+a+d+a+|+d+3+g+a+3+d+g+o+0 J J J ` F+", -"I J K m.d+q+z+B+q+B+s+y+s+y+s+y+s+u+z+z+z+B+s+y+s+y+z+u+z+z+z+B+s+s+y+y+z+u+z+z+z+B+s+z+z+z+z+u+z+z+z+z+z+s+z+s+z+z+B+s+z+B+s+y+z+u+z+z+z+y+g J J N ` F+", -"J K J K K H J J K K K M K L K J J J J K N L M K K J K J H J N K L M K L L H J J J J H K J J N K K J J J J J J J M L K N L L K L K L L K K L K L N K ` F+", -"M M J K K N K N K N K L M M L L K L N N L K N K L L J K L K N L M K K M L E N K M K N K N K N K K N L L N H J K M L L N K L K K K K N K L M K L K N ` F+", -"K L L N K N E L M L M K K N N L M L E L L K L N L N N L L K M K K N N M K L N L N K M M M M L M L M M L K M K J L K K N K L L N N L L L M K N K N L ` F+", -"L L K N L L L K M L L L L L K N K K M L K N K N L K N L L L L L L L K N L L L K N L L K M L K M L L K M L L L K M L L L L L L L K N L L L K M L L K ` F+", -"L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ` F+", -"N L N N L M L M L N N N L M L L M M L M L M L L M N N L N L N L L M L L L L L L L N N N L L L L L P M N L N P M M L L L N L N L N L L L L L L L L L ` F+", -"L L O L M L L O O O K M L L M P N L N N N N P N N P O P L O L N L N M N P M N M L O N H O M O M N N L M N L M M P M N M M N M L L N O L M L L M L L ` F+", -"N N N N P N N M L O O N N N O L P O P L P N N O P N N O O L M M N O M P N M P M M N N N N M M O P P P P O M M O P M P P P P M L N O M M P N N L M O ` D+", -"P P N P L N N P O L N N P L P N P N O N N N N O N N N N P L N L P L M P M O L P L L M O E M O M M P N P M P O M M M O N N P P L P P N L M M P P P M ` D+", -"N P P O O O O O N O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O Q Q O Q O O O O O O O O O O O O M ` D+", -"O O x e.g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+|+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+%.} P O O ` D+", -"P O y 6.4.6.e.e.U.4.m.e.6.U.e.e.e.m.^+4.m.p.5.^+e.e.p.m.^+4.m.e.6.#+e.p.e.m.U.4.m.e.6.U.e.e.6.m.e.6.#+p.e.e.m.U.^+m.m.m.m.m.6.m.U.e.m.e.^+^+} O P O ` D+", -"P P y 6.O *.,.+.+.~.~...&.+.+.>.+.'.'.*.,.@.*.'.*.Y *...@.'.>.]...&.*.Y +.>...<.!.*.+...!.*.Y *.!.].:...*.+.>...+.*.Y @.!.@.*.@.@...~...&+ +{ P P O ` D+", -"O O y 6.].0.s.v.&.].f.u.:.2.y.F.j.y.P.[.v.<.5.{.5.~.B./.).[.M.B.j.v.f.<.v.8.8.t.k.{.u./.!.i.++O.C.!.z.{.@.j.<.).f.}.O.i.M.s.).:.<. +W.:+W.&+~ O O O ` D+", -"O O y 6.M.r.F.Z.'.S.q.M.i.a.A.@+%+@+_+F.H.8+`.5+j.]+7.9.9.J.9.B.r.z.:.t.:.$+).s.6+M.o.5+B.g.&.k.K.$+t.M.i.@+_+W.j.q.D.o.y.W.z.#+B.%+Z.<. +@+~ O O O ` D+", -"O O y 6.&.:.T.q.v+s+u+z+x+n+u+u+u+u+y+s+y+u+p+y+x+u+y+u+p+z+x+u+x+y+y+s+s+n+w+y+x+x+x+x+y+x+x+s+x+x+x+x+s+v+s+w+y+x+w+x+x+x+x+s+s+v+]+6+B.5+~ O Q O ` D+", -"O O y 6.).Q.f.o.f+( ^ ' = % % % % % % % % = ; ; - - ) ( [ ^ ^ ^ ( ( ( [ [ 7 8 9 f f f m l G T S u u u u G G G E S S S S S S S .S -.y..+4+<+~ O Q O ` D+", -"O O y 6.!.K.b.f.b+- * . % % % % % % % % % % * = ; - = * * ' ! ^ ^ ( ^ ( 7 ( 6 9 f l f l n l n n u u G u S G S S S T T T T T U U T n.)+5.H.c+~ O Q Q ` D+", -"O Q y 6.'.N.O.2+|+^ * U x+v+v+v+v+D+v+v+v+v+v+F+E+E+e+; ) l+w+v+v+v+v+v+s+p+x+w+E+v+v+v+s+e+7 W.p+w+v+x+x+w+x+s+x+x+w+x+x+x+x+n.n n.~.z.&+$+~ Q O O ` D+", -"O O y 6.*.V..+$+f+( = |+H+g+X.)+[+)+)+8+8+2+)+2+=+E+C+- ( H+p+&+1+1+8+W.q+H+}+3+1+1+1+)+w+E+^ e+H+c+8+b+b+b+b+b+b+b+1+b+b+|+b+E u n.W.t.%+x.~ Q O Q ` D+", -"O O y 6.'.].2+i.f+! & =+w+; # @ @ @ + + + . & . + n.G+; ^ H+#.. ' ' ' * ;.E+f - ( 7 ( ) f+F+( e+H+6 6 ( 7 7 6 6 6 8 9 9 8 9 9 u n 3.:+z.S.4+~ R O R ` D+", -"O R y 6.,.{.b.{.o+X l |+x+- ) f f 9 f f ' . = ; n i+G+' ^ H+$.; ^ ( 7 ) =+D+G ^ l l n 6 i+v+^ f+H+f G ;.$.;.;.$.;.$.;.;.;.;.3.;.#.)+@+:.]+3+~ Q R Q ` D+", -"Q R y 6.b._+t.%+H+H+H+H+p+- o+H+H+H+H+H+p+U = & H+H+p+; ( H+;.; ( 7 7 ) 2+H+S ^ l l f 7 e+D+^ f+H+9 ;.H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+8+]+0+Z.~ R R Q ` D+", -"Q R y 6.:.w.T.T.l+T f |+v+) ' 9 9 8 8 j p+H+o+T ' ' ! ; 6 H+;.; ( ( 7 ( 6 I 7 8 l m m 7 e+v+^ f+H+l n T T U T T U U U U U U U U G n.@+W.W.2+~ R O R ` D+", -"R R y 6.u.z.#+x.h+6 ) Q.v+7 * = * * * & & T w+G+l+6 = = 7 H+;.' 7 7 6 6 [ ( 9 f l m f 7 e+v+^ |+H+6 9 9 6 9 9 9 9 f f l l f m u l 3.Q.$+1.3+~ O R R ` D+", -"R Q y 6.'.g.K.B.i+u 7 b+C+9 - ) ) ) ' ' - & = ;.p+H+l+6 ( H+;.' ( 7 7 8 9 9 9 9 l l l 7 i+D+( f+H+o.;.-.3.-.3.3.-.o.-.o.o.-.n. .l -.P.8. +8+~ R R R ` D+", -"R R y 6.*.t.,.$+i+S 9 )+H+l ' ! ) ) ) ) ) ) ' & ' ^.G+#.( G+-.' ( 7 6 8 9 f 9 f l n m 7 l+H+^ 1+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+#.6 -./+$+M.:+~ R R R ` D+", -"R R y e.).v.}.}.i+S S 9 G 7 ( ( ^ ) ! ! ^ ! ^ ^ - = 6 ^ ^ u 6 ( 7 7 6 8 9 9 9 l n l u l u S 7 n T S S T T T U T T T T U U U .f n -.l.7+j.3+~ R R R ` D+", -"R R y 6.*.k.2+B.}+S T n 9 6 7 ^ ) ) ) ! ) ! ) ) ) ) ; ) ! ' ) ( ( 7 [ 7 6 6 7 6 6 9 f l f 6 l 9 9 6 9 9 f f 9 9 9 l l l l l l S u 3.$+g.3+0+{ R R R ` F+", -"R R y e.).:._+o.i+S S ;. .u X X S U T ^ 7 ! 9 S E u U S n 9 X ;.f 6 $. .l [ X #.T T $.X f X $. .#.$.u S u .-.3.X #.;.$.U #.-.;.l 3.c.9.@+ +~ V R R Z F+", -"R R y 6.@.t.++}.i+G .x+i+h+n.b+|+x+i+U n.S 1+p+s+v+p+|+f+1+=+)+8 #.n+p+b+ .v+n.i+p+1+|+u 1+x+s+-.s+-.n.3.2+)+1+e+e+c+w+|+}+p+p+l 3.K..+]+O.{ R R R ` F+", -"R R y e.u.[.T.*+e+u S ;.T X f f m .G .X .f u T T S G ( u ( ( ) 9 l f .#.X X U U $. .6 U $.#.#.$.;.$.-.#.n u U ;.;. .S ;.;.].9 ;._+l..+2+~ V R R Z F+", -"R R y e.}.k.L.R.l+ . .U S S G G l f 9 9 8 9 6 6 6 6 9 f 9 9 l l n l f 9 m n l n m l G G G G u n S u G G S S S S G G S u G S S S u o.]+S.<+3+{ V R R ` F+", -"R R y e.@.C.W.F.w+x+x+x+x+x+w+x+x+z+y+x+y+x+y+x+x+s+n+x+x+x+w+x+x+x+x+x+y+x+x+n+x+w+y+y+x+x+y+x+x+x+x+x+x+x+x+x+x+y+x+w+x+x+s+x+x+w+:+j.S.X.~ V R R Z D+", -"R R y e.[.f.@+S.y.B.1.J.$+'.E.S.*+B.t.H.s.4+k.y.j.B.b.}.K.K.).v.++C.b.b.!.Q.g.Q.(+r.<+M.1.O.W.v.j._+!.v.@+v.R.Q._+T.y.x. +P.6+L.h.]+~.B.E.X.{ V R R ` F+", -"R R y e.>.j.F.<+B.S.3+S.y.y.v.Z.%+C.$+#+5+G.~.E.E.Z.<._.Q.Q.M. +B.r. +_+u.k.w.T.$+@+q.B.S.2.M.S.1.<.<+O. +B.<.g.z.w.0+>.Z.%+0.7.8+d.y.7.O.$+~ V R R Z D+", -"R R y e.{.x.e.O.~.3+5+D.5+X.E.|.e.e.3+p.x.)+e.x.^.E.D.X.e.E.&+3+:+S.&+&+3+D.&+X.O.X.X.3+W.|.X.X.|.&+D.X.x.&+3+D.3+&+&+O.&+X.&+X.p.b+p.&+8+]+~ R R R ` F+", -"R R z d.m.m.d+d+a+|+g+d+d+3+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+d+a+a+a+d+a+d+a+g+d+3+g+a+3+d+g+o+~ R R R Z D+", -"R R y e.d+q+y+B+q+B+y+y+y+x+x+y+y+y+y+y+x+B+y+y+x+x+y+y+y+x+x+B+y+y+x+x+y+y+y+x+x+B+x+x+x+x+x+y+x+x+x+x+x+x+y+x+x+x+B+x+x+B+x+x+x+y+x+x+y+y+~ R R R ` F+", -"R R / { ~ , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ~ R R R Z D+", -"R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R ` F+", -"R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R Z C+", -"R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R Z H+", -"R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R ..H+", -"%.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.>.H+", -"g+h+j+j+j+j+j+j+h+j+j+h+j+j+j+j+j+j+h+j+j+h+j+j+j+j+j+j+h+j+j+h+h+h+h+h+h+h+h+h+h+h+h+h+j+j+j+j+j+j+h+j+j+h+j+j+h+j+j+h+j+j+j+j+h+j+j+h+j+j+j+j+j+h+j+}+"}; +"% c #B9B9BF", +"& c #E0E0E3", +"* c #ACACB3", +"= c #9D9DA4", +"- c #F3F3F4", +"; c #5D5D6A", +"> c #5E5E6A", +", c #92929B", +"' c #878791", +") c #5C5C69", +"! c #EDEDEE", +"~ c #FCFCFC", +"{ c #909098", +"] c #909099", +"^ c #62626E", +"/ c #A5A5AC", +"( c #E2E2E4", +"_ c #E5E5E7", +": c #BDBDC2", +"< c #CCCCD0", +"[ c #70707C", +"} c #C4C4C9", +"| c #FAFAFA", +"1 c #CECED2", +"2 c #CFCFD3", +"3 c #CBCBCF", +"4 c #BFBFC4", +"5 c #C6C6CB", +"6 c #B3B3B9", +"7 c #B2B2B8", +"8 c #EBEBEC", +"9 c #CACACE", +"0 c #A0A0A7", +"a c #8D8D96", +"b c #FDFDFD", +"c c #8C8C95", +"d c #5A5A67", +"e c #F4F4F5", +"f c #E1E1E3", +"g c #F7F7F7", +"h c #5C5C68", +"i c #DBDBDE", +"j c #F8F8F9", +"k c #F2F2F3", +"l c #F1F1F2", +"m c #BCBCC1", +"n c #EAEAEC", +"o c #8F8F98", +"p c #E2E2E5", +"q c #A6A6AD", +"r c #A3A3AA", +"s c #F0F0F1", +"t c #333339", +"u c #34343A", +"v c #1C1F22", +"w c #1A1E20", +"x c #D1D1D5", +"y c #FBFBFB", +"z c #F5F5F6", +"A c #CDCDD1", +"B c #CECED1", +"C c #5B5B68", +"D c #D7D7DA", +"E c #A2A2A9", +"F c #666672", +"G c #676773", +"H c #ADADB3", +"I c #A8A8AF", +"J c #9F9FA7", +"K c #82828C", +"L c #EBEBED", +"M c #656571", +"N c #6D6D78", +"O c #DBDBDD", +"P c #6C6C77", +"Q c #D5D5D9", +"R c #D5D5D8", +"S c #9999A1", +"T c #9898A0", +"U c #A7A7AE", +"V c #61616E", +"W c #6A6A76", +"X c #EDEDEF", +"Y c #A1A1A8", +"Z c #D8D8DB", +"` c #7C7C86", +" . c #E0E0E2", +".. c #63636F", +"+. c #E6E6E8", +"@. c #B0B0B6", +"#. c #C0C0C5", +"$. c #D6D6D9", +"%. c #6B6B76", +"&. c #E9E9EB", +"*. c #C7C7CB", +"=. c #F9F9FA", +"-. c #C3C3C8", +";. c #74747F", +">. c #96969E", +",. c #C2C2C7", +"'. c #EEEEEF", +"). c #636370", +"!. c #C6C6CA", +"~. c #72727D", +"{. c #AEAEB4", +"]. c #BEBEC3", +"^. c #686874", +"/. c #DDDDE0", +"(. c #646470", +"_. c #DFDFE2", +":. c #7D7D87", +"<. c #D2D2D6", +"[. c #A9A9B0", +"}. c #8E8E97", +"|. c #C1C1C6", +"1. c #84848E", +"2. c #70707B", +"3. c #E4E4E6", +"4. c #696975", +"5. c #C8C8CD", +"6. c #6F6F7A", +"7. c #696974", +"8. c #DEDEE1", +"9. c #7D7D88", +"0. c #B4B4BA", +"a. c #777782", +"b. c #757580", +"c. c #9797A0", +"d. c #ABABB2", +"e. c #AEAEB5", +"f. c #8A8A93", +"g. c #E7E7E9", +"h. c #8B8B94", +"i. c #ECECEE", +"j. c #5F5F6B", +"k. c #B7B7BC", +"l. c #B6B6BC", +"m. c #C9C9CD", +"n. c #FEFEFE", +"o. c #94949D", +"p. c #EFEFF0", +"q. c #AAAAB0", +"r. c #898992", +"s. c #B7B7BD", +"t. c #C1C1C5", +"u. c #AFAFB5", +"v. c #60606C", +"w. c #61616D", +"x. c #DCDCDF", +"y. c #ACACB2", +"z. c #B8B8BE", +"A. c #C8C8CC", +"B. c #E8E8E9", +"C. c #85858F", +"D. c #878790", +"E. c #9D9DA5", +"F. c #9B9BA3", +"G. c #9F9FA6", +"H. c #D3D3D7", +"I. c #71717C", +"J. c #D1D1D4", +"K. c #BABABF", +"L. c #767680", +"M. c #AAAAB1", +"N. c #7A7A84", +"O. c #797983", +"P. c #F8F8F8", +"Q. c #DADADD", +"R. c #8A8A94", +"S. c #D3D3D6", +"T. c #E8E8EA", +"U. c #B9B9BE", +"V. c #B5B5BB", +"W. c #767681", +"X. c #9A9AA2", +"Y. c #73737E", +"Z. c #86868F", +"`. c #9E9EA6", +" + c #6B6B77", +".+ c #C5C5CA", +" ", +" ", +" ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ $ $ % % $ $ $ & * = # + ", +" + @ $ $ - ; > - $ $ , ' $ & ) # + ", +" + @ $ ! ~ { ] ~ ! $ ^ / & ( / ^ $ _ : - < [ $ & $ $ $ $ ^ / & ( / ^ $ _ } | # + ", +" + @ $ & < 1 2 3 & $ / $ : 4 $ / $ $ 5 6 $ 7 $ & , $ 8 , / $ : 4 $ / $ $ 9 0 # + ", +" + @ $ & a b b c & $ ( - d d e f $ g h ; $ i $ & $ & ( - d d e f $ j ; # + ", +" + @ $ & ) k l ) & $ ( - d d e f $ & $ & $ & $ & ( - d d e f $ f # + ", +" + @ $ & c c & $ / $ m : $ / $ & $ & $ & n - o / $ m : $ / $ & # + ", +" + @ $ & & $ ^ / f p q ^ $ & $ & $ & r - s ^ / f p q ^ $ & # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u x & & & 8 y z | A B | # + ", +" + @ t v w w w w w w w w w w u C D E z z f F G f z # + ", +" + @ t v w w w w w w w w w w u H B z z I J 0 I z # + ", +" + @ t v w w w w w w w w w w u K L M z z N O i P z # + ", +" + @ t v w w w w w w w w w w u F L K z z Q c R z # + ", +" + @ t v w w w w w w w w w w u B * z z S - T z # + ", +" + @ t v w w w w w w w w w w u r D C z z ^ U V z # + ", +" + @ t v w w w w w w w w w w u y 8 & & & & W | X X X Y z z # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u | A B | Z # + ", +" + @ t v w w w w w w w w w w u z f F G f z # + ", +" + @ t v w w w w w w w w w w u z I J 0 I z z ` .; ..+.[ # + ", +" + @ t v w w w w w w w w w w u z N O i P z z @.@.#.0 # + ", +" + @ t v w w w w w w w w w w u z Q c R z z ; p $.d # + ", +" + @ t v w w w w w w w w w w u z S - T z z %.&. .; # + ", +" + @ t v w w w w w w w w w w u z ^ U V z z 2 { @.@. # + ", +" + @ t v w w w w w w w w w w u z z z S *. ; .` # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u =.& & -.;. z # + ", +" + @ t v w w w w w w w w w w u z >.,. z # + ", +" + @ t v w w w w w w w w w w u z ..'. ).* O !.~. z {.+.].^. z >./. .,.~. (.* _.& :.).* O !.~. # + ", +" + @ t v w w w w w w w w w w u z h E <. [.}. K |. | [.d [.7 z M 1.m [.7 ; C ^ [.}. K |. # + ", +" + @ t v w w w w w w w w w w u =.& k | 2. /.& & & 3. | 4. 4.( z ;.: p & X _.P /.& & & 3. # + ", +" + @ t v w w w w w w w w w w u z ; : 5. & 6. | 7. 7.( z B ] ) 4.=. 8.P & 6. # + ", +" + @ t v w w w w w w w w w w u z > L 9. I 0.> d a. | U d U 7 z & b.) 7 | I 7 ; C ^ I 0.> d a. # + ", +" + @ t v w w w w w w w w w w u z c.B ).d._.3.{. z e.+.4 7. z f.8.f r z ).* f .` ).d._.3.{. # + ", +" + @ t v w w w w w w w w w w u z # + ", +" + @ t v w w w w w w w w w w u z # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u z z =. .g.i ] E 8.6 # + ", +" + @ t v w w w w w w w w w w u z z z ) h.p }. i.j. # + ", +" + @ t v w w w w w w w w w w u z 7.k.( l.^. >./. .,.~. ^.: +.* z z = D ).* O !.~.m.n.& o. # + ", +" + @ t v w w w w w w w w w w u z 7 [.d [.@. M 1.m 6 I C d.| z P p. [.}. K |. z # + ", +" + @ t v w w w w w w w w w w u z ( 4. 4.f ;.: p & X p 4. W | z N '. /.& & & 3. z # + ", +" + @ t v w w w w w w w w w w u z ( 7. 7.f B ] ) 4.=. p 7. W | z = D & 6. z # + ", +" + @ t v w w w w w w w w w w u z 7 U d U @. & b.) 7 | 6 U d q.| z h r.f c I 0.> d a. z # + ", +" + @ t v w w w w w w w w w w u | X X X Y 7.s.( k.^. f.8.f r z ^.: +.H z =.& g.i { ).d._.3.{. z Z # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ $ & $ $ % % $ $ $ & # + ", +" + @ $ & $ $ - ; > - $ $ $ & # + ", +" + @ $ & ^ / & ( / ^ ^ / & ( / ^ $ 3.t.l u.v. $ ! ~ { ] ~ ! $ ^ / & ( / ^ 4.].l U $ & w.E x.+.y.(. # + ", +" + @ $ & / $ : 4 $ / / $ : 4 $ / $ $ z.< $ c. $ & < 1 2 3 & $ / $ : 4 $ / s.$ z.< $ & E $ : q.k y. # + ", +" + @ $ & ( - d d e f ( - d d e f $ - P $ A. $ & a b b c & $ ( - d d e f B.- P $ & & $ $ $ $ i. # + ", +" + @ $ & ( - d d e f ( - d d e f $ - P $ A. $ & ) k l ) & $ ( - d d e f B.- P $ & _.n.o C.C.D. # + ", +" + @ $ s u.u.u. / $ m : $ / / $ m : $ / $ $ z.< $ c. $ & c c & $ / $ m : $ / s.$ z.< $ & E.$ x F.d.+. # + ", +" + @ $ $ $ $ $ ^ / f p q ^ ^ / f p q ^ $ 3.#.l @.v. $ & & $ ^ / f p q ^ 4.4 k H $ & v.G.H.j &.m # + ", +" + @ $ & # + ", +" + @ $ & # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u , n.P =. .g.i ] , n.P Y & & n.& & Y d.L | # + ", +" + @ t v w w w w w w w w w w u < 2 / z ) h.p }. < 2 / z ` W z # + ", +" + @ t v w w w w w w w w w w u ..n I./. z = D ..n I./. z z # + ", +" + @ t v w w w w w w w w w w u c.% 8.[ z P p. c.% 8.[ z z # + ", +" + @ t v w w w w w w w w w w u J.K U q. z N '. J.K U q. z z # + ", +" + @ t v w w w w w w w w w w u F | L 8 X p z = D F | L 8 X p z z # + ", +" + @ t v w w w w w w w w w w u = K. _.L. z h r.f c = K. _.L. z z # + ", +" + @ t v w w w w w w w w w w u $.C. M.u. =.& g.i { $.C. M.u. z * X n.X * # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u , n.P =. .g.i ] , n.P Y & & n.& & 9 8.p 5.b. # + ", +" + @ t v w w w w w w w w w w u < 2 / z ) h.p }. < 2 / z a.%. c A. # + ", +" + @ t v w w w w w w w w w w u ..n I./. z = D ..n I./. z w.p. # + ", +" + @ t v w w w w w w w w w w u c.% 8.[ z P p. c.% 8.[ z Y t. # + ", +" + @ t v w w w w w w w w w w u J.K U q. z N '. J.K U q. z N.+.7. # + ", +" + @ t v w w w w w w w w w w u F | L 8 X p z = D F | L 8 X p z P +.O. # + ", +" + @ t v w w w w w w w w w w u = K. _.L. z h r.f c = K. _.L. z ^ _.f. # + ", +" + @ t v w w w w w w w w w w u $.C. M.u. =.& g.i { $.C. M.u. z / P.& & & C # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u , n.P =. .g.i ] , n.P Y & & n.& & p p & 1 ` # + ", +" + @ t v w w w w w w w w w w u < 2 / z ) h.p }. < 2 / z ^ 9.Q. # + ", +" + @ t v w w w w w w w w w w u ..n I./. z = D ..n I./. z R.S. # + ", +" + @ t v w w w w w w w w w w u c.% 8.[ z P p. c.% 8.[ z = '.T.M # + ", +" + @ t v w w w w w w w w w w u J.K U q. z N '. J.K U q. z ; U 5 # + ", +" + @ t v w w w w w w w w w w u F | L 8 X p z = D F | L 8 X p z (.8 # + ", +" + @ t v w w w w w w w w w w u = K. _.L. z h r.f c = K. _.L. z I. d J U. # + ", +" + @ t v w w w w w w w w w w u $.C. M.u. =.& g.i { $.C. M.u. z V.3._.K.N # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u W.5.( 3.X. =.& f ,.Y. =. .g.i ] z =.& & & P # + ", +" + @ t v w w w w w w w w w w u 3 Z. ; I. z X.|. z ) h.p }. z z # + ", +" + @ t v w w w w w w w w w w u g.2. z ).n z = D z z # + ", +" + @ t v w w w w w w w w w w u `.e 5.C. z ) / % z P p. z =.& & m. # + ", +" + @ t v w w w w w w w w w w u 7.E _ @. =.& i 7 + z N '. z z # + ", +" + @ t v w w w w w w w w w w u %.T. z z = D z z # + ", +" + @ t v w w w w w w w w w w u r.d }..+ z z h r.f c z z # + ", +" + @ t v w w w w w w w w w w u ,.g. ..+;. z =.& g.i { z z # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/hdspmixer/pixmaps/Zlmloopm2.xpm b/hdspmixer/pixmaps/Zlmloopm2.xpm index 77d7dab..f3b2159 100644 --- a/hdspmixer/pixmaps/Zlmloopm2.xpm +++ b/hdspmixer/pixmaps/Zlmloopm2.xpm @@ -1,513 +1,434 @@ /* XPM */ char const * Zlmloopm2_xpm[] = { -"76 253 257 2", -" c None", -". c #D1E0E5", -"+ c #E7F6F9", -"@ c #F2FFFF", -"# c #FBFFFF", +"76 253 178 2", +" c #595966", +". c #51515B", +"+ c #3D3D42", +"@ c #717187", +"# c #53535E", "$ c #FFFFFF", -"% c #C4CACB", -"& c #C7D5D9", -"* c #BECDD2", -"= c #B8C5C9", -"- c #AEBDC1", -"; c #B2BDC2", -"> c #A0A09F", -", c #B5B6B6", -"' c #A9B5B9", -") c #A2ADB2", -"! c #A1ACAE", -"~ c #AAAAAA", -"{ c #A6A6A6", -"] c #A0A0A0", -"^ c #9CA5A9", -"/ c #9F9FA0", -"( c #939DA1", -"_ c #9FA09F", -": c #A09F9F", -"< c #90928F", -"[ c #949A9B", -"} c #9B9C9B", -"| c #9D9E9D", -"1 c #999A99", -"2 c #969896", -"3 c #919391", -"4 c #959795", -"5 c #929592", -"6 c #899497", -"7 c #8C969A", -"8 c #8A9395", -"9 c #848E91", -"0 c #8C918C", -"a c #8D918D", -"b c #888C87", -"c c #8B8E8B", -"d c #898D89", -"e c #8A8E8A", -"f c #828B8D", -"g c #868C86", -"h c #858A85", -"i c #828982", -"j c #818587", -"k c #818681", -"l c #7C8789", -"m c #7D8689", -"n c #7B8385", -"o c #D170D1", -"p c #C54CC5", -"q c #A837A8", -"r c #902F90", -"s c #7070D1", -"t c #4C4CC5", -"u c #757E81", -"v c #3737A8", -"w c #2F2F90", -"x c #80857F", -"y c #7F887F", -"z c #7E847E", -"A c #7E817E", -"B c #7A807A", -"C c #708070", -"D c #6E716E", -"E c #737877", -"F c #787F78", -"G c #737B7C", -"H c #747C73", -"I c #767D76", -"J c #747C74", -"K c #757B75", -"L c #747B74", -"M c #737B74", -"N c #747B73", -"O c #727972", -"P c #737B73", -"Q c #717971", -"R c #707870", -"S c #6D7679", -"T c #6C7274", -"U c #686E71", -"V c #70786F", -"W c #707060", -"X c #616669", -"Y c #696C6A", -"Z c #6D6E6D", -"` c #6F6F6F", -" . c #646B6D", -".. c #666966", -"+. c #626563", -"@. c #616561", -"#. c #5C6365", -"$. c #595F61", -"%. c #5F685F", -"&. c #5B605B", -"*. c #5E615E", -"=. c #506050", -"-. c #494F51", -";. c #545A5C", -">. c #5A5D5A", -",. c #5A5E5A", -"'. c #595C59", -"). c #545954", -"!. c #565956", -"~. c #575A56", -"{. c #555855", -"]. c #535654", -"^. c #545554", -"/. c #545754", -"(. c #515651", -"_. c #535653", -":. c #525552", -"<. c #515451", -"[. c #515551", -"}. c #505450", -"|. c #515251", -"1. c #515351", -"2. c #505350", -"3. c #4D5254", -"4. c #50584F", -"5. c #50544F", -"6. c #4F584F", -"7. c #4C504B", -"8. c #4F544F", -"9. c #4E524D", -"0. c #4E534E", -"a. c #4F534F", -"b. c #4F524F", -"c. c #4E524E", -"d. c #4F514F", -"e. c #4F504F", -"f. c #4E514E", -"g. c #4D524D", -"h. c #4C514C", -"i. c #4D514D", -"j. c #4D504D", -"k. c #4C504C", -"l. c #4B504B", -"m. c #405040", -"n. c #45494B", -"o. c #4A4E4E", -"p. c #4D4E4D", -"q. c #4C4E4C", -"r. c #4C4F4C", -"s. c #494E49", -"t. c #4A4F4A", -"u. c #4B4F4B", -"v. c #4B4E4B", -"w. c #4A4E4A", -"x. c #4B4C4B", -"y. c #4A4D4A", -"z. c #484D48", -"A. c #494D49", -"B. c #494C49", -"C. c #484C48", -"D. c #494A49", -"E. c #484A48", -"F. c #484B48", -"G. c #484C47", -"H. c #444843", -"I. c #474C47", -"J. c #464A45", -"K. c #464B46", -"L. c #474B47", -"M. c #474A47", -"N. c #464A46", -"O. c #464946", -"P. c #454A45", -"Q. c #444944", -"R. c #454945", -"S. c #454845", -"T. c #444844", -"U. c #404840", -"V. c #434843", -"W. c #434644", -"X. c #454645", -"Y. c #454645", -"Z. c #444744", -"`. c #424641", -" + c #434643", -".+ c #434743", -"++ c #424642", -"@+ c #424542", -"#+ c #414641", -"$+ c #404440", -"%+ c #414541", -"&+ c #414242", -"*+ c #404340", -"=+ c #3E4142", -"-+ c #6B236B", -";+ c #531B53", -">+ c #4D194D", -",+ c #471747", -"'+ c #23236B", -")+ c #3C3E40", -"!+ c #1B1B53", -"~+ c #19194D", -"{+ c #171747", -"]+ c #40433F", -"^+ c #40483F", -"/+ c #3B403B", -"(+ c #3F443F", -"_+ c #3D423D", -":+ c #3F423F", -"<+ c #3E413E", -"[+ c #3D403D", -"}+ c #1F2420", -"|+ c #2D3030", -"1+ c #363A39", -"2+ c #3B3F3D", -"3+ c #3E3E3E", -"4+ c #3C3F3C", -"5+ c #3A3D3A", -"6+ c #3B3F3B", -"7+ c #393D39", -"8+ c #383B39", -"9+ c #373C37", -"0+ c #363A36", -"a+ c #303F30", -"b+ c #333534", -"c+ c #323532", -"d+ c #303730", -"e+ c #242728", -"f+ c #2A2C2D", -"g+ c #2F2F2F", -"h+ c #212E2E", -"i+ c #222425", -"j+ c #202720", -"k+ c #3B143B", -"l+ c #1D1F20", -"m+ c #14143B", -"n+ c #0F100F", -"o+ c #1C1C18", -"p+ c #121212", -"q+ c #0F1510", -"r+ c #170817", -"s+ c #0E0F10", -"t+ c #080817", -"u+ c #100F0F", -"v+ c #07090A", -"w+ c #0A0A0A", -"x+ c #0D0D0D", -"y+ c #0E0E0E", -"z+ c #0F0F0F", -"A+ c #0B040B", -"B+ c #02050D", -"C+ c #040404", -"D+ c #050606", -"E+ c #070707", -"F+ c #060606", -"G+ c #030303", -"H+ c #000000", -"^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+}+", -"V W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W g+", -"> > > > > > > > > > > > > > : : : : : : > > > > : : : : : : : : : : : : : : : : : > > > : : : : : : : : : : : / / / / / / _ _ _ _ _ _ _ _ > > : ] : ` C+", -"> / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / : ] : ` F+", -"> / y e.g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+%./ : ] : ` C+", -"> / y e.6.6.e.e.U.6.m.e.6.(+e.e.e.m.U.6.m.e.6.(+e.e.e.m.U.6.m.j.6.U.e.e.e.m.U.6.m.e.6.U.p.e.4.m.e.6.U.e.e.e.m.U.U.m.m.m.m.m.6.m.U.j.m.e.U.U.] ] ] : ` F+", -"> / y e.D ..D @.|.'.@.,.]...&.+.*.'.*.*.*.&.1...>.+.*...{.&.....*.@.D ..*.*.&.'.......@...*.,...&.@.*.*.D *.+...*.@.@.:.....*.@.@.>.Z [.j. +] ] ] : ` C+", -"> / y e.u.~.l.:.h./.].k.h.B.{._.b.c.z.).T.2.f.S.v.A.F.N.0.0.t.'.<.:.j.a.<.{.g.N.h.].2.r.y.{.!.<.z.K.k./.}.M.%+}.K.h.W.c.y.0.).N.z.!.k._.&+0+: ] : : ` F+", -"/ / y e.*.z.2+.+$+<.W.<+(+(+j.t.y.h.z.P.++_.y.c.$+N.v.Q.h.7+_+q.b.$+*+_+:+!.V.7+s.$+S._+b.S.y.W.<+<.N.S.N.:.C.I.0.s.@+f.s.t.0.(.(.6+ +$+E.b+: ] ] : ` C+", -"_ / y f.~.F.B.@+Q.[+_+0.).%+b.$ $ $ %+*+k.$ $ $ [.r./.++h.:.h. +(.(.b.y.C.<.(.(.$ $ N._.K.$ K.).v./.++h.:.h. +[.2.T.c.M.b.I.g.[.5+<.j.S. +@+/ ] | / ` F+", -"_ _ y e.*.).b.b.).b.~./+P.h.(.$ $ $ ]+@+L.$ $ $ g.++%+c.<+6+:.F.(.(.c.v.c.8+K.++0.7+N.M.$ $ K.I.%+%+c.<+6+:.F.k.S.s.T.r.y.K._+z.P._+S.s.X.4+] ] / / ` C+", -": / y e.@.f.[.:+++r.c.y.g.5+r.$ $ $ $ F.$ $ $ $ #+:+$ $ $ $ }.b.$ $ $ $ 0.2.K.I.$ $ 0+$ $ $ $ .+*+$ $ $ $ }.b.$ $ $ $ q.v.I.#+s.!.C..+W.%+&+: | / : ` F+", -": / y e.&.F.B._.0.b.0+K.8.}.!.$ $ $ $ r.$ $ $ $ 6+$ $ ]+T.$ $ v.$ $ $ $ $ $ _.0.$ $ _.W.$ $ *.8.$ $ ]+T.$ $ v.$ $ t.B.M.$+H.#+_+I.Q.F.S.O.c+: : : | ` F+", -"/ | y e.{. +).W.c.W.z.t.K.K.$+$ $ (.$ %+$ %+$ $ z.$ $ k.(+$ $ {.$ $ b.y.$ $ (.(.$ $ N._.$ $ I.).$ $ k.(+$ $ {.$ $ ++).y.y.G.I.6+#+.+t.F.O.X.: / | / ` F+", -"_ : y e.*.$+O.2.[.B.v.'.8.Q.z.$ $ #+$ $ $ (.$ $ [.$ $ V.h.$ $ k.$ $ c.v.$ $ K.++$ $ 0+M.$ $ *.h.$ $ V.h.$ $ k.$ $ t.M.7+`.P.s._+8.N._.j.[+8+/ : | / Z F+", -"/ | y e.b.t.y.b.'.F.z.(.g.++j.$ $ #+$ $ $ w.$ $ ~.$ $ z.I.$ $ y.$ $ *.v.$ $ K.I.$ $ N.$+$ $ I.++$ $ z.I.$ $ y.$ $ }.(+7._.).P.}._+++c.~.5+5+: | / / ` F+", -": | x j.r.y.$+).W.b. +y.r.N.M.$ $ .+Q.$ 2+t.$ $ $+k.$ $ $ $ t.6+$ $ h.v.$ $ _.0.$ $ *.W.b.$ $ K.k.$ $ $ $ t.6+$ $ z..+f.z.t.K.I.5+%+W.y.@+<+: | | / ` F+", -"/ | A e.@.}.).K.K.C.$+C.Q.C.$+Z._+_+2.).$+c..+<+S._.N.c.C.T.t..+c._.f.].).(.t.++!..+z.<.F.F.].).a.i.5+_.j.f.*+b.0.++t.}.b.`.g.++0..+O.9.@+<+| : : | ` F+", -"| / A p.<.[.Q.u.N.M.,.V.c.0.y.k.y.6+(.g.K.w.k.Z.~.<+r.F.K.l.f.].h.2.O.t.S.}.z.I.9+%+K.r.<+2.M.:.f..+C.*+/+r.).(+#+%+$+8.z.I./+c.c._+(+J.d.f+| | / / Z F+", -"| / y 6.[.N.7+].&.h.z.I.0.K.b.O.y.z._+9+(.h.i. +4+W.<+(+t.s.@+(+%+<.B.y.].K.P.Q.T..+s.y.<.E.:+M.A.g.w.W.S.F.Q.K.5+k.z.I.8+I.S.O.z._+8.7.<+&+| / | | ` F+", -"| | y 6.[.K.'.c.C.N.l.z.++++F.S.@+h.P.l.C.0.t.].Z.c._.h.#+++Q..+I.u.O.v.j.K.K.}.T.h.[.F.[+*+ +:.H.8.,.F.r.<.s.t.$+K.$+Q.0.t.k.(+<+/+J.J.]+&+: | / | ` F+", -"| / y 6.<.0.;+>+,+,+,+,+,+,+,+,+,+>+q }.N.s.t.<.&.2+.+h.I.++0.s.2+F.2.0.K.Q.t.0.M.v.'.O.v.y.J.2.K.H.T.5+:+v.h.V.8.Q.z.T.K.8.c.c.8.P.8.5.:+X.| / | | ` F+", -"| | y e.f.k.r r r r r r r r r r r r ,+P.$+/+.+F._+*+.+s.t._+z.N.2.j.<+<.++P.P.0.t.).y.B.W.i.2.<.h.,.s._+E.[+C.5+V.0.z.}.[.l.h.N.t.s..+A.X.<+| | / | ` C+", -"| | y 6.d.:.-+r o p p p p p p p p k+r+}.'.k.Q.f. +:.Z.).V.0+C.5+N.r.:+%+a.V.5+}.N.T.<.&. +4+y.j.[.Q.6+O.M.f.t.#+$+K.t._.}.I.N.!.T./+0.`.S.g+/ | | } ` F+", -"| | y e.&.v.-+r r r r r r r r r r k+r+#+C.$+Q._.y.$ $ $ $ $ w.}.$ N.C.].c.B.$ }.++T.h.r.$ y.*+M.$+g.P.M.!.r.}.8.c.y..+h.k.`.c.N.Q.#+P.[+v.5+| | : | ` C+", -"| | y 6.)..+-+r r r r r r r r r r k+r+#+Q.F.O.K.<+<.$+,.c.$ w.w.$ z.7+B.5+j.$ $ $+@+v.$ $ i./+b.F.Q.W.S.c.j.t.g.z._+f.].t.#+K.[.c.T./+7.:+E.: | | } ` F+", -"| | y e.].K.-+r r r r r r r r r r ,+r+t.K.O.f.W.<.5+$+Q.$ <.(+N.$ ~.K.W.$+B.$ $ C.].5+$ $ 7+y.S.:+`.b.y.C.<.c.(+_.t._.:+N.).t.8.8.).'.7.S.8+| | : } ` F+", -"| } y e.k.c.-+r p r r r r r r r r ,+r+#+z.F.W..+ +c.2.$ $ 5+t.2+$ <+C.].c.B.$ z.$ F.$ j.$ 8+9.'.).C.c.v.c.8+K.++0.7+M.j.].l.P.).c.b.O.t.|.5+| | | | ` F+", -"| | y e.:.).-+r r r r r r r r r r k+r+t.}.[+<+S.O.<.M.$ I.<.c.M.$ z.7+B.5+j.$ ].$ W.$ B.$ J.7.<+7.z.h.y.0.2.K.I.).s.$+F.K.#+h.I./+).<. +X.<+| | | } ` F+", -"| } y e.>.z.-+-+r r r r r r r r r ,+r+s.C.:. +C.B.5+$ c.l.5+++v.$ ~.K.W.$+@+$ *+$ C.$ (+$ K.F.*+j.0+h.v.c. +_.0.s.c.W.b.f.g.).Q.h.P.$+r.0+5+| | } | ` F+", -"} | x f.2.}.-+r p r r r r r r r r k+r+P.t.B.<.v._.$ $ $ $ $ h.@+$ $ $ $ <+!.$ f.s.$ l.z.$ 4+]+@+:..+0.,.C.r.}.z.t.*+F.@+%+$+}.P.#+<+f.A.5+D.} : } } ` F+", -"| } y e.].O.-+r -+r r r r r r r -+,+r+(+Q.F.2.K.f.z.[+N.I.V.s.B.r.c.*+_.S.k.++}.{.].O.z.4+9. +M.S.j.Z.<.O.v.c.I.5+(+F.].S.8.l.l._+_+_+N.@+8+| } | } ` F+", -"| } y e.&.v.-+k+r+r+A+A+A+A+A+A+r+A+r+Q.Q.$+:.<.@+0.5+0.V.h.%+5+'.F._.h.2._+h.++(+@+<.M.q./.H. +b.<+%+@+S.S.T.l.K..+B.W.t./+Q.7+~.(+{.++:+4+} | | } ` F+", -"} } y e.'.h.r+H+H+H+H+H+H+H+H+H+H+H+H+#+z.N.M.++_.R.Q.$+P.#+k.h.j./+A.5+0.Q.z.++_.k.2.(.@+6+]+6+<.%+f.y.b.B.k.5./+K._.S.W.0._+_+_.!..+R.]+&+} } } } ` F+", -"} } y e.!.:.s.N.k.b.W.C.z.++{.M.(.N.0.F._+$+t.2.r.5+h.Q._.(.$+%+}.<+F.8+P.C.c.C.(._+C._.2+<.`.b.).F.%+S.v.]+K.z.0.J.9.B.c.(.7+g./+_.B.'.D.<+| } | } ` F+", -"} } y f.).u.K.1.h.@+0.#+L.0+M.K.B.6+Q._+t.!.s.F.<.t.<+c.K.8.$+v.@+:.:+K.y.0.z.h.%+.+t.O.<.k.a.<+R.k.~.r.j.b.S.).s.8+!.c.4+Q.I.V.t.F.v.j.5+W.} } } } ` F+", -"} } y e.!.K.9+r.(+).t.6.(+i.M.B.:.0+U..+t._.z.v.B.B.!.h.}._+z.z.(+E.<.5+:.t.P.7+C.C.5+N.Z.M.F. +:.}.++2.5+2.S.h.#+7+~.K.s._+A.]+K.8.(.s.*+3+} } } } ` C+", -"} } y e.*.*+.+ +%+}.z.I.5+c.b.$+@+C._.0+ +y.[.j. +*+O.++P.7+c.s.k.2.y.j.B.%+P.Q.C.K.v.2+@+2.S.2.T.H.H.B.W. +y.s.`.h.5+ +<.7.5._+0.`.(+`.x.5+} } } } ` F+", -"} } y p.@.@+j.B.j.T.).I.h.:.@+r.j.%+}.8.(+$+%+O.y.B.B.K.7+K.C.T.z.F.S.~.@+$+g.#+6+_+0.F.0+:+<+<.5+`..+]+W.<+@+/+(+8+_+J.@+9+{.*.h.z.I.9.`.&+} } } } ` C+", -"} } x e.&.r.F.%+%+s.(.(.#+%+ +$+v.N.0.l.0.c.K. +r.W.B.s.z.).}.N.k.r.<.v.B.k./+}./+s.N.{.B.q.B.4+2.l.5.B.f.>.S.z.z..+i.N.T.h.a.R.Q.g.9+9.&+0+} } } } ` F+", -"} } y e.).%+++w.P.K.#+(.V.P.$+N..+g.l.l.6+z.6+<.O.y.S.).l.0.[.++/+@+4+:. +0.s.0.C.s.}.:+B.{.O.2._.5+b.[+{.v.,.g.h.~.u.C..+H.7+$+s.t.V.5.@+3+} } } } ` C+", -"} } y e...(+;+>+,+,+,+,+,+,+,+,+,+>+q t./+0.T.F.C.}.j.0.(.z.K.l./+/.<+F._.t.Q._+v.M.S.S.B.2. +`.H.s.7+@+B.E.h./+9.9.K.T.4+).u.:.}.~.(.z.5+8+} } } } ` F+", -"} } y e.@.'.r r r r r r r r r r r r ,+(+:+*+$+y.F.*.6+.+h.I.++0.s.2+L.2.0.K.Q.s.[.(+{.j.[+B.r.4+t.g.&.9.E.`.7.I.7.%+5+H.0.t.6+_+~.I.6+`.p.c+} 1 } } ` F+", -"} 1 y f.!.(.-+r o p p p p p p p p k+r+/+_+F.C.z.y._+*+.+s.t.(+z.N.2.j.:+[.++P._+{.S..+_.f.`.F.f.4+u.B.F.G.5+_.H.H.[+`.v.h.7.w.i.u.Q.G.`.S.b+} 1 } 1 ` F+", -"} 1 y e.}.O.-+r r r r r r r r r r k+r+#+_.r.2.(. +$ v.0.z.Q.~.$ M.$ {.:.F.5+s.z.Q.:.5+b.2+).A.,.a.i.'.v.B.<+!.s.8.0.~._.y.H.G.(.`.c.i..+[+5+1 } } 1 ` F+", -"1 1 x e.@.L.-+r r r r r r r r r r k+r+Q.T.@+B.*+<+$ $ /+8.$+$ $ b.z.v.2.[+B.(..+h.v.$+y.y.:.[.W.$+<+F.y.(.j.s.V.V.!.S.O.B._+P.V.H.~.b.C.]+[+} 1 1 1 ` F+", -"} 1 y e.&.v.-+r r r r r r r r r r ,+r+)._.y.y.y.S.$ $ _+%+z.$ $ j.$ v.c.$ M.k.$ 5+:.*+*+'.@+y.O.:.F.%+1.A.y.Q.t.V.Q.B.B.H.G.7.K.P.Q.w.i.b+@+1 } 1 1 ` F+", -"1 1 y e.>.#+-+r p r r r r r r r r ,+r+s.7+y.j.&.j.$ @+$ t.$ f.$ y.$ r.z.S.$ $ ).).F.@+S.:.B.v.*+>.9+}.j.j.Z.v.P.V.s.!.M.(.V.t.P.0+}.2.B.4+8+1 1 1 1 ` F+", -"1 1 x e.>.(.-+r r r r r r r r r r k+r+(.). +O.N.r.$ $+$ K.$ $+$ Z.$ f.s.q.$ $ C.%+E.8+Z.y.S._.M.S.A.L. +r.M.*+l.I. +@+B.1.`.P.h.l.N.A.:+*+b+1 1 1 1 ` F+", -"1 1 z e.e.W.-+-+r r r r r r r r r ,+r+P.K.:+2.j.@+$ *+$ C.$ (+$ O.$ v._+1.$ $ K.5+@+ +q.j.*+*+2..+i.i.@+f.%+++J.V.s.J.&+9.#+$+V.t.9+$+K.*+[+1 1 1 1 ` F+", -"1 1 A p.@.r.-+r p r r r r r r r r k+r+h.b+z.b.2.!.$ f.s.$ l.z.$ B.$ M.k.$ ).K.$ }.7.[+9.]+`.9.b.G.s.A.4+9.h.t.8._+_.K.`.Z.(.J.5.l.`..+[+B.8+1 1 1 1 ` F+", -"1 1 A e.&.#+-+r -+r r r r r r r -+,+r+/.t.<.(+v.y.<+N.}.5+}.s.N.6+y.B.5+Q.T.K.P.$+<.<.@+9.8+9.H.9. +5+~.O._.h.5./+g..+$+!.l.7+H.s.(.E.B.]+8+1 1 1 1 ` F+", -"1 1 A p.*.W.-+k+r+r+A+A+A+A+A+A+r+A+r+U._+<+$+c.v.y.j.s.K.++(.B.0.++O.v.S.c.5+_+u.9.$+%+<+:+!.S.6+l.`.S.<+b.Q.s.`./+<.M. +8.P.t.(.`.`.r.8+b+1 1 2 1 ` F+", -"2 1 A e.1.s.r+H+H+H+H+H+H+H+H+H+H+H+H+'.6+++v.N.S.@+_.N.P._+T.++f.h.r./+s.6+8.V.K..+{.7.d.:. +5+$+5+b.*+9.y.2.z.s.9.[+F.S.H.(.I.z.0.t.%+O.3+1 1 1 2 ` F+", -"1 1 A e.>.C.t.}.O.v.B.C.!.v.M.b.<+<. +@+c.<.r.:.d.5+j. +r. +t.:+ +r.<.$+ +$+ +O._+v.q.q.<+<+j.<+4+1.J.1.E.4+d.7.r.B.1.4+_.V.g.(.5+9.[+:. +v.2 1 1 1 Z F+", -"2 1 A p.:.6+S.F.s.S.B.t.K.K.[.N.b.[.P.5+_+$+:..+d.&.F.k.0.z.s.$+B.%+S.[.r.k./+_+/+M.E.H.9.y.:.~._.7.`.4+j.!.S.8./+j.`.B.F.$+++u.F.5+d.^.c+&+1 2 1 2 ` F+", -"1 2 A e.<.z.%+M.C.2.K.c.z./+O.z.S.k.z.t.h.*+_.O.r.T.:.~._.Q.C.[+f. +M.Q.f.Q.(.Q.z.j.B.4+$+z.).q._+H.7+!.%+{. +Q.A.y.O._.B.0+(.(+K.$+_.u.y.5+1 2 1 2 ` C+", -"2 1 A e./.c.M.].h.@+r.Q.t.I.}..+v.Q.I.(+k. +2.%+y.s._..+I.z.k.j.*+_. +0. +t._+(.K.[+F.$+/.T.b. +y.v.J.M.%+j.9+7.s.7.@+_.B.z.Q.%+#+w.C.7.O.g+1 2 1 2 ` F+", -"2 2 A p.].w.w.<.c.v.k.0+,.V. +[.f.5+g.z.k.r.y. +y.k.v.K.#+++N.r.f.j.].O.<+*+P.J.K. +O.1.j.@+5.H.B.0+J.O.z.5+Q._+l.!.F.M.b.s.8.Q.0.%+@+2.&+b+2 2 1 2 ` C+", -"1 2 A e.{.P.*+!.7+r.y._.h.$+%+0.f..+9+s.k.O.y.z.:.++r.K.P._+N.r.2.y.&.Q.Z._+Q.g.8+`.:+S.`.s.0.<.~.$+9.E.S.F.K.(+u.6+B._.2.s._+c.K.5.$+r.5+X.2 1 2 2 ` F+", -"2 1 A p.e.{.5+B.*+/.:+r.).v.y.M.5+W.K.s.C.W.r.2.S.[.r.C.K.8.N. + +i.w.K.F.c.(.g./+$+/.v.S. +b.y.M.Q.h.H.~.~..+J.L. +[+d.:.k.(.t.0.Q.1.`.E.5+1 2 1 2 ` F+", -"2 2 A e.*.O.;+>+,+,+,+,+,+,+,+,+,+>+q _+Q.*+O.z.N.}.k.a.(.z.K.l./+/.<+F._.t.V.}.j.0.(.z.J.l._+_.<+<.r.b.(.z.J.l._+].:+E.S.J.0.w.0.K.:+9.@+g+2 2 2 2 ` F+", -"2 2 A e.].~.r r r r r r r r r r r r ,+%+t.M.O.F.M.*.6+.+i.K.++c.s.2+L.2.0.K.Q.*.6+.+h.I.#+g.w.4+E.&.4+ +h.I.#+g.y.4+E.2._.t.H.H.H.c.S.<+8+c+2 2 2 4 ` C+", -"2 4 A p...2.-+r o p p p p p p p p k+r+$+K.T.*+%+.+_+:+++A.s.(+C.N.2.j.:+[.++P.<+]+ +y.s.]+G.J.b.r.<+]+ +y.s.]+G.J.2.j.<+0.J.H.V.0..+z.t.&+5+2 2 2 4 ` F+", -"2 2 A e.j.!.-+r r r r r r r r r r k+r+M.Q.T.N.f.u.$ $ $ $ Q.(+B.5+C.2.7+:.c.).K.R.C.@+$ Z.F.%+S._+_+b./.`.9. +_+H.(.J.f.<.`.P.`.i.:.d._.d.@+4 2 2 2 ` F+", -"4 2 A e.r.<+-+r r r r r r r r r r k+r+++++++K.O.C.$ g.y.(+$ (.N.!.v.b.b.{.~.k.w.P.w.++$ d.].]+!._.b.1.:. +/.:+9.%+z.s.<+J.t.H.P._+b.7.y.E.@+4 4 2 4 ` F+", -"4 4 A p.q.w.-+r r r r r r r r r r ,+r+s.B.S.6+S.C.$ 5+I.~.$ Q.C.$ $ r.s.6+$ $ $ ++0+i.$ _.$ $ $ $ 7+M. +$ $ F.7.J.$ $ K.5+_.(.T.s.7.J.j.]+X.4 4 2 2 ` C+", -"4 4 A e.'.v.-+r p r r r r r r r r ,+r+N.(+[.k.:.A.$ $ $ $ 0..+$ k.B.$ :.F.$ $+l.$ Q.F.$ /.b.<+@+$ s.S.$ b.7.$ H.$ `.).$ %+J.z.J._+g.H.J.B.3+4 4 4 4 ` F+", -"4 4 A p.>.S.-+r r r r r r r r r r k+r+_+h.c.T.j.:.$ 2+*.$ t.s.$ $ $ $ f.@+$ 6+]+$ <+H.$ B.r.$ $ $ _+J.$ Z.<.h.#+$ $ $ $ h.%+]+#+0.9.#+H.S.b+4 4 4 4 ` F+", -"4 4 A e.<.>.-+-+r r r r r r r r r ,+r+.+k.N.C.$+<.$ S.}.++$ .+$ 8.A.c.<.4+$ 7.H.$ 9.`.$ b.$ ]+1.$ Q.:.$ /.,.$ #+$ Q.Q.`.(.Q.N.%+J.#+7.7.D.g+4 4 4 4 ` F+", -"4 4 A p.!.2.-+r p r r r r r r r r k+r+%+t.F.!.j.:.$ r.K.P.$ N.r.$ $ $ Q.Z.$ $ $ 9+@+<+$ `.$ $ $ $ $+9.E.$ $ K.(+l.$ $ $ (.7.(.t.0.Q.1.`.X.5+4 4 5 4 Z F+", -"4 5 A m.j.r.-+r -+r r r r r r r -+,+r+(..+_.(+b. +[.r.C.K.8.N. +++i.v.K.E.$ (.g.4+$+/.v.S..+0.v.J.Q.j.H.~.~..+K.I..+4+d.S.J.9.s.0.K.:+9.]+c+5 4 4 4 ` F+", -"4 4 A e.+.'.-+k+r+r+A+A+A+A+A+A+r+A+r+0.C.0.C.W.2.Q.B.s.5+h.%+B.j.,.}.`.v.$ h.[.H.$+B._+S.2. +q.0+<.j.F._. +H.K.I.<+7._.0.t.z.H.H.9.S.<+9+c+4 5 4 4 Z F+", -"5 4 A p.*.$+r+H+H+H+H+H+H+H+H+H+H+H+H+9+k..+9+b.'.%+6+%+~.Q._+C.8+N.d.8+<.j.).R.H.M.*+M. +G.]+H._+4+9.:.$+h. +/+V.[.Q.j.M.]+).V.9. +G.v.]+4+5 5 4 5 ` F+", -"4 5 A m.^.w.C.2.2.~.(.P.V.G.v.M.y.h.0.0.++N.k.y.b.5+f._+g.(+%+h.}.C.7.y.<+y.B.}.S.$+'.L.[.$+]+d.<+B.7+M.F.j.z.(._+E._.[+(.#+9.:.O.*+S.y.]+G.4 5 4 4 Z C+", -"4 5 A e.&.8+{.f._+{.5.$+).Q.!.B.[+h.z.(+c.[.%+r.O.y.Z.O.&.K.<+v.k.a.:.F.`.7. +9+]+H.]+]+8+E.H.S.F.y._.&+@+$+M.j. +A._+w.&+*+]+%+J.4+@+]+7+4+5 4 4 5 ` F+", -"5 4 A m.*.y.}.r.b.:.z.K.l.[+_.<+F._.t.Q.}.N.z.:.5+v.0+8+C.Q._+$+}.w.B.:.b.%+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+d+a+a+a+d+a+d+a+|+d+3+g+a+3+d+g+o+5 5 3 4 ` F+", -"4 5 C m.&.R.*.4+ +i.I.++9.y.2+E.2.0.K.Q.6+C.}.r.M.f.*+9+0.Q.s.N.0.a.F.F.Z.<.d+q+q+q+z+z+z+z+z+u+z+z+z+z+z+z+u+z+z+y+B+z+y+B+z+z+z+u+z+z+y+z+5 4 4 5 ` F+", -"5 5 C e.*.z.<+*+ +w.t.(+I.R.2.r.:+[.++P.N.5+z.8+O.r.O._.P.V.C.N.T.k.E.*+f.B.m.d c e e e e e e e e e e e e e e e e e e e e e e e e e e e d e 5 5 5 5 ` D+", -"5 5 C m.{.0.b.j.<+}._+Q.8.'.].,.<+.+s.P.Q.$+).M.M.$+M..+h.h.t.6+t.6+1.J.B.H.m.d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d 5 5 5 5 ` D+", -"5 5 C m.2.h.<.j.b.:.z.K.l._+].:+F._.t.Q.0.T.%+M.j.{.~.K.8._+%+h.'.$+y.:.d.j.d+d+d+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+%.3 5 5 3 ` D+", -"5 3 C m._.<.&.4+ +j.I.++0.w.4+F.2.0.K.Q.C.O.N.T._.a.@+C.h.5+t.F.z.C.5+_.S.J.4.4.m.e.6.^+e.e.6.m.e.6.^+e.e.e.m.^+^+m.m.m.m.m.6.m.^+e.m.e.^+#+5 5 5 5 ` D+", -"5 3 C m.!.k.h.Q.).S.b.!.(.y.*+O.Z.R.~.g.K.S.h.s.W.@+O.W.$+l.Q.r.s.<.y._.`.g.(.l.%+ +K.S.E.y.S.y.7.K.F.:.J.d.[.J.6+_+$+:.@+0.,.I.l.a.B.y.4+4+3 5 5 3 ` D+", -"5 3 C m.<.k._+_.++A.s.(+I.R.b.r.<+}.#+Q.++v.N.T.:.Z.).:+l.$+.+s.B.<.J.$+'.G.(.$+$+b.<+F.7+K.F.j.z.(._+F._.[+:.#+9.(.M.&+S.t.$+L.z.a.M.9.y.]+3 3 3 3 ` D+", -"3 3 C m.~.k.;+>+,+,+,+,+,+,+,+,+,+>+q 6+Q.f.~.K.:.[.k.0.(.z.K.l./+/.:+F._.t.V.}.k.a.(.z.J.l._+_.:+F._.t.V.}.k.0.(.z.J.l._+].:+F._.t.H.J. +X.3 5 5 3 ` D+", -"3 3 C m.'.a.r r r r r r r r r r r r ,+V.C._.5+.+:+&.2+.+h.I.++0.s.2+L.2.0.J.V.*.4+.+h.I.#+9.s.4+F.2.0.J.V.*.4+.+h.I.`.9.s.4+F.2.a.K.H.+.F.4+3 5 3 3 ` D+", -"3 3 A e.*.Z.-+r o p p p p p p p p k+r+_+k.y.C.Q.b._+*+.+s.t.(+z.N.2.j.<+[.`.P.<+*+.+w.s.]+G.J.2.j.:+<.`.Q.<+]+.+s.t.(+z.J.2.k.<+}.#+Q.0+%+W.3 3 3 3 ` D+", -"3 3 A m.*.2+-+r r r r r r r r r r k+r+0.$+f.s.h.y.$ +s.g.8.).$+0.z.S.G.M.%+l./+C.:._.i.$ v.b.S.<.`.j.$ $ $ $ #+z.u.r.{.<+z.$+,.R.$ J.2.F.3+3 3 3 3 ` D+", -"3 < A e.{.%+-+r r r r r r r r r r k+r+T. +W.5+0.S.$ d.@+0.t.5+$+F.s.F.>.M._.}.z._.L.C.a.$ 9.B.]+v.G.B.$ +B. +$ H.Q.*+*+B./+]+(+$ V.K.7.<+[+< < 3 < ` D+", -"3 3 A p.@.B.-+r r r r r r r r r r ,+r+%+(+ +t.!.r.$ W.).z.g.*+$ $ Q.j.$ $ $ $ (+(+4+$ $ $ 6+7.@+S.<+2.$ y.H._+$ Q..+$ $ M.G.8.$ $ $ s.t.b.|+< 3 3 < ` D+", -"< < A m.*.w.-+r p r r r r r r r r ,+r+K.z.>.v.9+*+$ +6+~.K.$ q.}.$ b.H.$+V.$ Q.s.$ .+.+$ ]+`.@+S.H.H.$ F.S.s.$ V.$ _+[+$ ).T.N.$ l.[+:+*+8+< 3 3 < ` D+", -"< 3 A p.).c.-+r r r r r r r r r r k+r+s.h.*+b.5+f.$ +K.I.T.$ <+_.$ S.K.$ $ $ z.2+$ @+L.$ G./.`..+s.F.$ j.4+0.$ V.$ $ $ $ s.0.s.$ g._.J.5+g+< < < < Z F+", -"< < A m.{.!.-+-+r r r r r r r r r ,+r+.+M.B._.Q.v.$ M.h./+0.$ E.S.$ v.$ 2+~.$ /+@+$ <+Q.$ _+z.j.(.t.b.$ B.B.5.$ `.$ +5+z.(+).(+$ ).q.y.S.c+< a < < ` C+", -"< a C m.2.z.-+r p r r r r r r r r k+r+(+z.y. +!.F.$ $ $ $ }. +$ $ ].B.$ $ $ $ }._+*+$ $ $ _+.+B.B.v.]+$ $ $ $ 7.7.P.$ $ $ s.9+c.$ K.y.$ @+8+< < < < ` F+", -"< < C p.@.F.-+r -+r r r r r r r -+,+r+%+++O.j.C.S.h.b.~.).(.(+:+>.$+F.N.[.z.$+}.L.B.S.t.Z.K.s.B._.H.y.Z.9+1.5.z.#+V.$+_..+(.8.0./+<+H.v.d.5+< a < < Z C+", -"a < C m.*. +-+k+r+r+A+A+A+A+A+A+r+A+r+/+ +Q.@+F.r.r.t.W.l.$+.+y.F.<.J.%+'.C.Q.(+K.s.O.v.4+v.B.j.y.9.b.J.B.{.7.#+K.h.c.!.T.h.Q.(+7._+O.b.:+0+< a < < ` F+", -"< a C m._.y.r+H+H+H+H+H+H+H+H+H+H+H+H+_+%+N.T.<.@+/.O.9+y.6+P.t.(+*+f.S.N.5.h.).z.C..+k.9.d.7.>.s._+O.5+O.5+Q.[.s.8.[.B.S.(.V./+8.%+B.5+3+f+a < a < ` C+", -"< a C m.>.v.<+{.v.<.b.~.:.y.:+O.Z.Q.~.g.K.Z.j.y.W.@+O.T.$+l.Q.r.s.[.v._. +9.(.t.%+ +K.Q.F.v.S.A.l.P.E.<.J.b.[.J.5+<+*+:.++g.,.K.l.0.B.y.4+5+a < < a ` F+", -"a a C m.'.W._+M.W.E.2+y.*+j.@+!.r.4+C.5+[+[+@+@+j.S.%+!.N.~.$+v.O.Z.S.S.:.j.$+t.Z.y.E.b.*+B. +M.]+u.@+j.$+B.B.[.$+J.F.j.k._+(.#+j.*+B.[+q.7+a a c < ` C+", -"< a C m.r. +S. +1+E.v.:+j.W.E.O.j.|.S.W.*+W.2+W.O.v.7+e.v.O.M.q.<+j.1+X.5+W. +1+<+W.:+*+1+E.W.X.M.x.:.&+&+&+O.p.W.y.2+x.&+*+&+&+O.5+X.3+5+4+< a < a ` F+", -"a a C m.m.m.d+d+a+|+g+c+d+3+a+c+d+a+a+a+d+a+d+a+a+c+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+d+a+a+a+d+a+d+a+g+d+3+g+a+3+d+g+o+c a a a ` C+", -"a c C m.c+q+s+B+q+B+y+s+y+y+y+y+y+u+s+y+y+B+y+y+y+y+y+u+s+y+s+B+s+y+y+y+y+u+s+y+y+B+y+y+y+u+y+u+u+y+y+s+u+y+u+u+s+s+B+y+s+B+y+y+y+u+u+s+y+y+< a a a ` F+", -"a a a a a a c a a a a a < a a a a a a a a a a a a a a a a a a a a < 0 a a a a < a a a a a a a a a < a a a a a c a a < a a a a a a a a a a c a a a a ` F+", -"a a c a c 0 0 c 0 0 c c c c c 0 c c c 0 c 0 c 0 c c 0 c c 0 c c c c 0 c c a c c c c c c 0 c c c c c c a c c c a c c c c c 0 c c 0 c c c c a c a a a ` F+", -"a c a ^+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+%.k c a c ` D+", -"a c 0 j.6.6.e.e.(+4.m.e.6.U.e.e.e.m.U.4.m.p.6.^+p.e.e.m.U.6.m.e.6.#+e.e.p.m.#+6.m.j.6.^+p.e.6.m.e.6.U.e.e.e.m.U.U.m.m.m.m.m.6.m.^+f.m.e.U.U.k 0 0 c ` D+", -"0 0 c 6.Y *.&.D ..*.&.+.@.>.'.*.&.'.@.&.@.@...@.Y >.+...@.'.,.&.&.*.+.&.@.+.&.*...&.....*.^.'.'...,...D *.+...*.@.'.*.'.&...@.@.!.{.{.>.y.*+e c c 0 ` D+", -"0 c c 6.'.<. +/.C./.}.:.Q.j.M.'.F.K.8.[.k.{.f.F.<+}.f.t.*.z.[.j.].{.a.G.M.C.Q.i.t.<+F.@+^.J._.^.{.h.{.<._.2.'.8.!.Q.'.<.`.7.[.%+5.:.@.f.@+8+3 0 c c ` D+", -"c 0 c 6.)._+y.w.t.M.f.++8.).@+(.M.c.P.#+y.S.W.z.8+Q._.c.z./+K.:+{.h.8+#+Z.$+++I.$+y.C.++++V..+M.S.C.s.5+C.~.w.P.z.K.C.u.z.7+z.7+g.V.8+h.:.s.5 c c c ` D+", -"c c c 6.@.K.$ $ 7+b./+_.s.,.b.c.'.h.I./+).y.<.<.~._.y.$+Q.++.+!.b.B.O.h.B.$ $ $ %+*+k.$ $ $ }.v._.++h.:.h. +W.Q.V.P.$ $ B.t.J.C.(.Q.c.2.*+c+5 c c c ` D+", -"c c c 6.,.i.$ $ 7+i.<.N.l.s.z.'.j.s.}._+}. +W.}.:.h.:.:.6+c.@+q.Z.h.*+T.r.$ $ $ ]+@+L.$ $ $ h.%+$+c.<+6+:.F.).z./+c.$ $ u.[./+s.++V.f.y.0+M.5 c c c ` D+", -"c c e 6.[.(.$ $ k.W.:.[+P.).$ $ $ $ #+g.t.$ $ $ $ %+d.$ $ $ $ $ r.W.B.T.O.$ $ $ $ F.$ $ $ $ #+:+$ $ $ $ }.b.K.$ $ $ $ $ F.).$ $ $ $ c.C.@+@+5 c c c ` D+", -"c c c 6.>.c.$ $ P.S.v.!.K.$ $ N.j.$ $ z.$ $ *+h.$ $ {.$ $ 8.f.$ $ j.r..+O.$ $ $ $ r.$ $ $ $ 6+$ $ ]+T.$ $ v.$ $ P.K.$ $ L.$ $ P.z.$ $ w.M./+5 e c c ` D+", -"e c d 6.*.t.$ $ ++!._+t.I.$ $ }.!.$ $ Q.$ $ 2.B.$ $ +$ $ /+f.$ $ j. +C.:+$ $ (.$ %+$ %+$ $ z.$ $ k.(+$ $ {.$ $ t.0.$ $ [+$ $ $ $ $ $ w.E.<+3 d c d ` F+", -"e d d 6.+.c.$ $ }./. +6+P.$ $ %+@+$ $ ++$ $ v.N.$ $ f.$ $ s.B.$ $ r.B.(.:+$ $ #+$ $ $ (.$ $ }.$ $ V.h.$ $ k.$ $ V.$+$ $ $+$ $ h.$+]+b.(+0+F.5 d d c ` F+", -"d c d 6.<.(.$ $ }.N.h.P.#+$ $ T.y.$ $ (.$ $ [+B.$ $ f.$ $ .+(+$ $ +v.z.W.$ $ #+$ $ $ w.$ $ ~.$ $ z.I.$ $ y.$ $ 9+k.$ $ j.$ $ C.g.$ $ 7+&+5+3 d c d ` F+", -"d d c 6.].s.$ $ $ $ $ $ N.C.$ $ $ $ g.I.%+$ $ $ $ N.c.$ $ $ $ $ F.k.f.[.B.$ $ .+Q.$ 2+t.$ $ $+k.$ $ $ $ t.6+(.$ $ $ $ $ T.h.$ $ $ $ '.<+O.F.3 d d d ` C+", -"d d b 6.!.c.%+w.Q.y.b.k.t.}.W.M.C.h.k.y.C.$+[.b.:.8+.+$ $ z.K.C.N.$+r.y.F.(+z.Q./+Q.t.v.y.W.*+C.++++2+F.!.C.z.N.[.(.Q.M.F.++z.l..+_+w.y.X.[+3 d d b ` F+", -"d d d 6.!.++%+y.a.h.5+l.V._._.++@+}._+I.9+S.C.b.B._.<+$ $ /+}.%+}.{.F.%+O.k.$+P.M.h.F.2.B._+O.B.Q.k.s.r.0.$+_.P.t.++}.!._.Q.s._+c.#+Q..+O.4+< d d d ` F+", -"d d b 6.y.T.W.7.G.h.(.V.(+K.@+N.w.I.V.I.C.5+c.W.v.j.&.(.$+s._+h._.M. +y.*+K.0.#+z.0+(.c.w.].W.Z.F.C.$+f.{.<.k.I.V..+h.W._+/+]+s.C.I.I._.S.X.< d d b ` F+", -"b d d 6.<.!.P.S.:+J.#+7.h.i.<+r.2+8.V.I.++_.h.<.].S.[+%+5+8.$+h.u.<.v.j.<._+I.(..+h._.2+a.<+{.v.&.c.c.>.f.y._+).s.0.0.~.[.z.$+L.T.V.~.g.W.4+< b d b ` C+", -"d b b 6.+.k.N.4+B.F.(+t.#+V.A.:.O._._.0./+++$+O.W.~.b.[.I._.k./+).:. +!.O.!.K.5+v.F.%+<.].@+b.O.z.V.N.*.y.$+h.t.g.0.N.$+s.t.a.a.c.K.8.H.@+@+< d b b ` F+", -"b b b e.<.k.h.j.).:+z.(+'.P.]+F.:.a.}.V.N.6+k.!.$+ +r.F.(.).++[.6+2+L.:.y.[.P.#+(+}.s..+v.M.$+[+s.++.+'.k.[._.8.(..+~.t.%+l.N.u.C.(.t.2.5+8+< g f b ` F+", -"b b b 6.*.4+_.j.{.F.Q.K.$+B.O.B.@+O./+/+c._.++2.W.:+O.).P.h.N..+l.S.b.].2.{.).}.z.$+'.S.y.:.y.y.).).0.i.2+{.c.g._+h.c..+s.8.}.R.}.++0.H.@+W.< b b b ` F+", -"b d h e.).:.O.S.S.4+:.`.y.@+D.|.B. +.+(.!./+h.*+<.*+O.:.!.(.~.2+++r.F.F.W.).T.Q._+W..+b.b.f.<+r.6+8.Q.y.S.!.h.0.(.++5+$+5+8.++}.k.Q.5.J.S.x.< b b b ` C+", -"b h b #+*.S.!+~+{+{+{+{+{+{+{+{+{+~+v (+A.h.++v.j.S.b._+++++9+].&.f.v.y.<.K.h..+M.M.(+5+{.2.f. +6+++_+*+j.r.T.(+(+c.N.C.[.P.K.K.t.9.G.w.y.b+a b b h ` F+", -"g b b e.>.A.w w w w w w w w w w w w {+%+L.%+T.F.O.B.[+c.s.I.9+K.Q.O.y.*+:.c.#+h._+y..+v.S.y.v.$+h.Q._+2._.:..+_+z.N.0.k.Q.s.c.!.P.V.G.G.B.4+< h b b ` F+", -"b h h 6.!.y.'+w s t t t t t t t t m+t+l.G.%+/.i.$+c.O.r.K.8.@+B.Z.F.:+c.W.}.$+z.F.<.@+C.B.c.c.*+]. +f.@+t.:+].I./+N.*+{..+g.V.s.h.g.z.H.*+e.a b b h ` F+", -"h b h 6.~.:+'+w w w w w w w w w w m+t+.+Q.S.j.B.:. +W.$ K._+t.:.$ $ $ $ S.0._+2+[+$ E.F.s.$ $ $ $ $ '.s.O.[+(+8+}.N.8+v.B.P.P..+l.P.F.]+O.g+< h b h ` C+", -"b h b 6.>.&.'+w w w w w w w w w w m+t+s.0+<.:._+O._.$ O.$ N.C.].$ z.b+7+$ N.#+f.$ E.$ r.%+).j.$ <+).r.N./.v.O.T.P.s.!.M.0.l.P.t.(.g.%+M.M.c+a b h h ` F+", -"h h h 4.*.H.'+w w w w w w w w w w {+t+R.t.2+Q.:+W.r.$ {.$ 6+z.r.$ E.b.v.$ l.z.C.$ <.$ *+:+y.v.$ h.s.O.O.'.(+h.++.+F.v.O.T.Q.u.0.#+0.v._.*+c+a h h h ` F+", -"h h h 6.).0.'+w t w w w w w w w w {+t+_+/+N.++2.S.$ d._+z.$ _+[+$ Z.<.F.$ !.'.$ v.F.O.$ E.{.b.$ g.K.k.A.[.$+s.i.V.M.(+h.(.#+#+l.6+h.V.7.0+4+a h h h ` F+", -"h h h 8.b.L.'+w w w w w w w w w w m+t+N./+s.T.y.:.$ $ $ $ $ t.7+$ d.b.*+$ }.s.$ $ $ $ $ 1.O.F.$ z.c.:.2+:.++%+Q.`.++g.]+H.5.]+}.s.(.#+K.X.@+a h h h Z F+", -"h h h 6.r.L.'+'+w w w w w w w w w {+t+z.%+!.}.:+y.$ O.0.(.$ h.5+$ x.&.b.$ '.K.$ ).t.:.$ '.].v.$ P.T.O.'.C.9+L.%+]+}.b.K.l.G.%+g.]+H.5.~.7.e.0 h h h ` F+", -"h h h 6._.t.'+w t w w w w w w w w m+t+g.C.s.N.v.$ 2.S.h.$+h.$ (+$ $ $ $ <.T.$ Q.N.T.O.r.$ ].M.$ l./+*+r.t.T.A.J.:.7.:.Q.t.z.(.b.K.l.G.5.S.E.0 h h h Z F+", -"h i h 6.*.~.'+w '+w w w w w w w '+{+t+++K.++k.B.{.!.S._.7+7+Q.0.z.:.F.W.@+_.z.#+C.T.$+[+v.W.W.>.k.}._.:.{.O.'.t.#+t.T.A.J.:.7.:.Q.t.z.G.Z.5+c h j h ` F+", -"h i h 8.@.%+'+m+t+t+B+B+D+B+B+D+t+B+t+(._+*+2.$+<+_.B.).s./+c.t.0.j.].<+q.W.V.g.z.6+[.~.8+_.y.2.~.0.9+].v.!.0.$+V.7+t.s.K.s.&.2.:+%+l.9.O.X.0 h h h Z F+", -"h h h 6.>.K.t+H+H+H+H+H+H+H+H+H+H+H+H+l.*+(+y.++ +K.S.z.5+h.z.F.5+C.W.R.F.(+8.h.%+j.:+t.@+s.T.B.y.:+k.W._+b.(.8.%+[+F.E.5.l.J.w.6+k.w.H.4+0+c h k h ` F+", -"i k h 6.b.(.F.B.(.M.O.Q.P.W.A.B.2.K./+Q.K.j.y.++ +K.Z.F.5+h.B.F.5+C.W.Q.F.:+8.h.%+j.:+t.@+s.T.B.s.(+r.W.<+b.(.8.#+_+B.E.5.t.J.t.g.).r.9.X.4+0 i h k ` F+", -"h j h 6.<.<.0.F.k.F.$+5+}.S.*+&.b.y.6+I.z.<.{.$+*+C.B.(+).z._+].M.B.y.T.E._+P./+0.@+S.B. +++z.S.$+%+T.@+_+@+'.P.(+C.8+F.b.7+(.9.).K.J.F.4+<+e h i h ` F+", -"k h k 4.!.@+}.j.%+~.h.z.t.h.7.d.y._+Q.t.t.:.B.:.].W.W.k.l._+_+c..+b.b. +b.%+$+K..+s.K.@+M.].F.:.k.++T.<+<.O.z.}.t.%+0.7+<+J.h.[.$+V.(.J.5+b+0 i h k ` F+", -"h k h 6.&.Q.c.:+u..+z.++I.s.&+j.O._+g.}.0.$+(+v.B.:.f.K.s.h._.t.0.r.O.M.>.T.P.8.}.Q.%+v.r. +_.y._+s.~.:+f.<+K.(.h.$+z.N._+t.5+H.h.z.).7.x.4+c i j k ` F+", -"i k i 6.'.%+T.W.z.R.K.V.V.8.9+b.M._+$+l.K.6+z.2.{.:+<.!.V.8.k.7+s.y.<.!.@+++0.$+K.T.}.y.O.2.2.$+$+P.$+2.S.r.(.).I.++$+K.T.s..+z.t.l.7.]+$+5+c i i i ` D+", -"k i j e.r.c.%+v.w.:.8.`._+]+y.v._.h.z.V..+!.N.F.O.v.f.K.Q.Q.z.k.5+b.O.b.[+N.++).T.k.}.8+W.y.<.j.%+t.[.<+b.].j.%+K.W.C.c.s.`.s.t.[.(+Q.9.4+4+0 k i k ` D+", -"i k i 6.>.B.F.1.W.j.9..+8+_+&+<.X.b.'.P.s.c.s.j. +y. +N.8.t.s./+(+<+B.B.O.0.z.}.!.[.h.W.<+f.!.O.[._+0.W.y.v.9+(._+O.<+(.s.5.B.]+6+&.K.t.O.5+0 k i k ` D+", -"k i i e.:.k.!+{+{+{+{+{+{+{+{+{+{+{+v 4+k.r.$+:.f.!.v.k.P.8.z.%+%+ +y.W.S.%+t.V.Q.K.C.B.$+M.{.B.K._.T.j.y.f.Q._+s._+%+ +F.H.F.J.J.g.0+g.%+b+c k j k ` D+", -"k k k 6.d._.w w w w w w w w w w w w {+_+%+t.).@+:.}.v.}.V.h.*+*+<.N.$+$+f.t._+~.8.f.S._.f.C.z.B.N.%+%+f.C.:.h.(.I.$+b.S.{.9.9+).y._.g.$+]+c+0 k i k ` D+", -"k k k e.@.A.'+w s t t t t t t t t m+t+0+k.v.f._._.++@+}./+K.9+S.E.j.F._.<+I.(./+8.%+a.].F.%+N.r.%+N.C.2.C.b.z./+Q.K. +7.B.7.s.l.z.C.5+%+<+++e k k k ` D+", -"k k k e.&.M.'+w w w w w w w w w w m+t+s.5+j.S.k.:+_.$ $ Q.(.K.$ $ $ $ }.B.$ $ $ $ b.E.O.$ 7+_+s.$ $ $ $ g.I./+%+V.6+<+b.J.t.9.%+(.R.t..+v.v.e k k k ` D+", -"k k k f.'.7.'+w w w w w w w w w w m+t+I.Q.j.y.@+ +$ <+%+$ (+#+$ k.c.$ _.<+$ f.h.W.$ 2.f.$ 0.#+<+$ b.<..+(.K.g.N.z.O.j.d.{.c+_+_+5.7+ +++8+5+d k k k ` F+", -"k k k e.@._.'+w w w w w w w w w w {+t+6+/+W.O.$+O.$ _.T.(.8.g.$ .+u.$ L. +$ y.].F.$ W._+$ k.K.r.$ w.T.P.l._.s.T.K.).%+d.G.H.g.K.$+7.[+N.y.2+e k k k Z D+", -"k x k f.*._.'+w t w w w w w w w w {+t+z.(.r.*+0+B.O.$ $ s.Q.s.$ $ $ $ 2.2.$ y.++F.$ 2.!.$ c.N.$+$ $ $ }.g.K./+%+++/+W.u.!.V.I.K.$+7.4+z.r.z.d k k x ` F+", -"k k x e.{.0.'+w w w w w w w w w w m+t+]+g. +B.(.W.v.j.t.$ #+#+$ b.b.{.M.:+$ M.S.F.$ d.@+$ T.z.9+$ E.y.6+(.P.g.N._+$+*+[.H.t.h.5.H.).y.5+}.X.d y k k Z D+", -"x k x e.!.@+'+'+w w w w w w w w w {+t+9.t.f.q.@+j.$ 5+t.$ P.I.$ %+v.K.O.*+$ B.&.W.$ _+K.$ 5+++_+$ .+A.0.l._.s.T.).y.S.B.<+z.5+_.z.t.:.F.%+C.d k k z ` D+", -"x k z e.@.k.'+w t w w w w w w w w m+t+_+w.F.f._+@+z.$ $ ++V.P.$ <+}.K. +).$ $ $ $ y.Q._.$ T.s._+$ C.<+8+g.I./+%+Q.K.(+y.C.Q.(+h.Q.Q.).y.C.S.d x x x ` D+", -"z k z e.b.`.'+w '+w w w w w w w '+{+t+l.$+0.v.f._.f.(.s.t.c.9+_.Q.r.M.F..+$+$+Q.K.N./+<+S.b.:.k.5+c.:+y.<+++*.~.t.s.c.:._.K.t.#+A.`.2.S.*+5+g x k z ` F+", -"x x z e.{.9.'+m+t+t+B+D+B+B+D+B+t+B+t+6+t.M.y.M.<+++j.z./+I.h.(._+<.!.Q.<.f.5+z.K.c.).@+@+}.++B.N.}.z.S.0.b.$+(+Q._+h..+A.++6+V.z.[.*+]+<+c+b x x x Z F+", -"x z x e.@.J.t+H+H+H+H+H+H+H+H+H+H+H+H+T.h.0+0.:.y.:.F..+(+(.C.%+s.M.$+[+v. +U.~.s.0._.:.{.O.>.j..+h.N.v.B.{.k.8._+%+t.a.A.}.!.A.T.$+K.H.X.8+d z z x ` F+", -"x x x m.K.Q.B.2.t.%+B.5./+h.(.i. +C.Q.C.j.y. +z.F.<.*+N.0.$+V.S.F.B.@+~.R.7+(.l.Q.b.f..+j.C.t.S.!./+K.<+C.<.s.g.5+0.@+W.h.K._+K.t.Q.9.7.]+[+i I z z ` F+", -"z z z e.@.[.++S.5+r.y.G.t.,.b.6+f.k.Q.$+(+<.S.y.5+).B.k.(.I.P.<.<+*+@+v.v.<+#+I.K.v.$+!.:+T.C.f.f.N.2+M.++v.8+k.K.N.y.w.]+H.P.,.z.z.F./.8+<+i K x z ` F+", -"z z z m.~.t.k.%+v.H.B.j.<.G.'.*+4+h./+I.C._.<.[.<+c.h.%+(.l._.z.q.J.2.y.`.$+#+I.%+ +*+v.W.N.C.K.C.(+S._.L.N.)..+t.K.k.S.]+s._+`..+B.Z.J.:+4+i K z z ` F+", -"z z z m.,.].++).S.q.v.8+z.[+d.[+0+k.$+_.l.[.%+f.S.M.}.0+Q.T.7.).B.B.M.O.).h.(._+s.y.(+M.b.8+2.s.K.6+y.B.5+Q.T.P.P.(+[.1.*+g.9+g..+7.@+5+1.<+i I z z ` F+", -"z z A m.*.(+d.W.%+Z.2.J.t./.H. +d.]+#+$+.+W.T.h.F.T.A.V.Q.0./+[+).~.H.S.M.h._+_+`.B.k.%+y.O.b.r._+}.Z.O.F.[+z.7+V.C.W.:.J..+s.I.V.t.J.]+O.&+i I z z Z F+", -"z A z m.c.s.]+R.E.d.O.h.F.6+Z.L..+u.z.A.l.<+:.V.A.#+(.!._.V.N.2+k.%+S..+7.H.[..+I.k.F.5+:+L.:.y.[+.+0+).]+_.++Q.C.C.J.:.F.I.`._+(+z.E.y.H.b+i J z z ` F+", -"z z B m.t.c+Q.$+%+ + +7+:+<+}.$+@+@+i.0+(+F.7+5+c+4+b+s.<+8+0+ +8+:+8+<+1+&+ +1+<+f.A.]+0+$+4+%+0+T.6+R.6+2.N.0+@+0+9+9+6+6+K.]+6+f.*+5.0+^+b J B z Z F+", -"z A z m.m.m.d+d+a+|+g+d+d+3+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+d+a+a+a+d+a+d+a+|+d+3+g+a+3+d+g+o+0 J z z ` F+", -"z z B m.d+q+z+B+q+B+s+y+s+y+s+y+s+u+z+z+z+B+s+y+s+y+z+u+z+z+z+B+s+s+y+y+z+u+z+z+z+B+s+z+z+z+z+u+z+z+z+z+z+s+z+s+z+z+B+s+z+B+s+y+z+u+z+z+z+y+g J z B ` F+", -"z B z A z A z z z B z z z B z B z A z z z B z z B z z B z B z z B z z z A z z B z z B z B z z z z z B z z A z z B z B z z A z B z z z z z z z z z A ` F+", -"z B z z A z B z z A z B z A z z B z A B z z B z z A z z z z z z z z B z z B z A z B z z z z B z z z z B z z B z A z z B z z z z B z z z A B z B z B ` F+", -"A z B B z B z z B z B z z z z B z z z z z B z B z B z B z B z B z B z z B z z z B z A z B B z z z B z z z B z z A z B z B z B z z z B z B z A z B A ` F+", -"B z B A z z B z z z z B z B z z B z B z B z z z z z z z B z z z B z B z A B z B z B z z z z B z B z B z z z B z z z A z z z z B z A z z B z z B z B ` F+", -"B z B z z B z B z B B z B z z B z B A z z z B z B z B B z B z B z z A z B z B z z z B z B z B z A B z B z B A z B z B z B z B z z B z B z z B z B B ` F+", -"B z B B z B z B z z z B z B B z B z B B z B B z B z z z B z B z B B z B z z z B B z B z B z B A z B z z B z B z B B z B z B z B z B z B z B z B z B ` F+", -"B z B z B z B z B z B B z B z B B z B z B z B z B B z B z B z B B z B z B z B B z B z B z B A z B B z B B z B B z B z B z B z B z z B B z B B B z B ` F+", -"B B A B B z B B B z B z B B B z B B z B B z B z B z B B B z B z B B z B z B z B z B B z B z B B z B z B z B z B B z B B B z B z B z B B z B z B B B ` F+", -"B z B z B z B B z B z B B z B z B z B B z B B B z B B z B z B B z B z B A B B z B B z B z B B z B B z B B B z B z B B z B z B B B z B z B z B z B B ` F+", -"B B B B z B z B B B B A B B z B B z B z B z B z B z B B B z B z B B B B z B B B z B B B B z B B z B z z B B A B B A B B B z B z B B B z B z B B B B ` F+", -"B B B z B B B B B B z B B z B B z B B B B B A B B B B z B B B B A B B z B B B z B z B B z B B z B B B B B A B B B A B B z B B B B B z B B B B B B B ` F+", -"B B B B z B z B z B B B A B B B B A B B B B A B A B z B B A B B B A B B A B B B B B z B B B B B A B A B A B B A B B B A B B A B B z B B z B z B B B ` C+", -"B B B B B B B B B B B A B B B B A B B B A B B B B B B B B A B B A B B A B B A B B A B B A B B A B B B B B B B B B B A B B A B B A B B A B B B B B B ` F+", -"B B B B B B B B B B B B B A B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B F B ` F+", -"B B F B B B B F B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B F B B ` F+", -"F B F B B B B B B B B B B B B B B F B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B F B B B B B B B B B B B B B B B B B B B B F B ` F+", -"F B F B B B B B B B B B B F B B F B B B B B F B B B B B B B B B B B B B B B B B B F B B B B B B B B F B B B B B B F B B B B B F B B B F B B B F F F ` F+", -"F B F B B F B B B B B B B B B B B B B B B B B F B B B B F B B B B B F B B B B B B B B B B B B B B B B F B B B B B F B B B F B F B B B F B B F F B B Z F+", -"F F F B F B F F F F B F B F F B F F B B B B F B F B B B B F B B B F B F B B B F B F B B B B F B B F B F B F B B F B F F B B B F B B F F B F B F F F ` F+", -"F F F F B F B F B F F B F B F B B B F B B F F B F B F B B F B F F B B F B F B F B B F F B F B F B B F B F B F B F B B F F F B F F B B B B F F F F F ` C+", -"F F F B F F B F B B F F F F B F B F F B B F B B F F F F F F B B F B F F F B B B F F B F B B F B B F F F B B F F F F F F F B B F B F B F F B B F F F ` F+", -"F F F F F B F B F F F B F F F F F B F F F F F F B F B F B F F F F F F B F F F F F B F F F F F F B F B F F B F B F B F B F F F F B F F B F F F F F F ` F+", -"I F F F F F F F F F B F F F B F F F F F B F F B F F F F F F F F F F B I B F F F B F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ` F+", -"F I F F F F F F F F F F F F I F F F F F F F F F F F F F I F F F B F F F F F B F F F F F F F F F F F F F F F F B F F F F F F F F F F B F F F F F F F Z F+", -"I F F F F F F F F F I F F F F F F F F F F F I F F F F F F F F F I F F F F F I F F F F F F F F F F F F F F F F F F F F I F F F F F F F F F F F I F I ` F+", -"I F I F F I F F F F F F F F F F F F I F F I F I F F F F F F F F F F I F F F F F I F F I F F I I F F I F I F F F I F F F F F F F F I F F F F I I F I ` C+", -"F I F F F I F F F F F F I F F F F I F F F F F F F F I F I F F F F I F F F F I F F F F F I F F F F F F F F F F I F F F F I F F I F F F I F I F I I F ` F+", -"I I I F I F I F I F I B F F I I F F I F F I F F I F F F I F I F F I F I F F F F F I I F I I I F I I I F F F I F I F F F F I I F F I F I F I F F I I ` F+", -"I F I I F I F I F F I I I I F I F F I F G F I I F I F I I F I F I F I F F I I F I F I F F F F F I F I I F I F I F F I F I I F F I F I I F F I I I I ` F+", -"I I I I I F I F F I F I I F I F I F I F I I F I F I F F I F I F I I I I F I F I G F I I I F I F F I F F I F F F I F F I F I I F I F I I I I F I I I ` F+", -"I I I I F I I F I I I I F I I F I F I I I F I I I I F I F I I I I F I F I F I I I F I F I I I I I I F I I I I I I I I I I F I I F I F I F I I I I I ` F+", -"I I I F I I I I I F I I F I I I I I I F I F I I F I I I I F I F I I I I I I I F I I I I F I I I I F I F I F I F I F I F I F I I I I I I I I F K K I ` F+", -"I I I I I I I I I I I I I I I I I F I I I I I I I I I I I I I I I F I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I K I I ` F+", -"I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I K I I I I I I I I I I I I I I I I I I I I I I I I I I I I K I I ` F+", -"K I I I I I I I I I K I I I I I I I I I K I I I I I I I I I I I I I I I K I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I K I I ` F+", -"K I J I I I I I I I I I K I I I I I I I K I I I I I I I I I I I I I I I I I K I I I K I I I I I I I I I I K I I I I I I I I I I I I I I I I I K K I ` F+", -"K J K I I I I I I J I K I I I I I K I I K I K I J I I I I I J I I I I J I I K I I K I I I I I J I I I I K I I J I I I I I I I I K I I I I I I K I J ` F+", -"K I L K I J I I H I I J I K I K I K I I I I I I I I I I I I K J I I I K I I I J I I K I I K J J I K J I K I I J I K I K K K K I K I J I I I I K K J ` F+", -"J J J I K I K I I I J J K K I J I K I K K K K I J K I J K K I I I I I J J K I K J J J I K I J I I K I J I K I I K I I K I I I K J I I K K J I K J J ` F+", -"I J K K K I I K J I I I J K I I K J K I I I J K I I J J I I K J I K I K I K J I K I I K K I I I I K I K J I I J I K J I I I I I K K I I I I K K J N ` F+", -"J K J K K H J J K K K M K L K J J J J K N L M K K J K J H J N K L M K L L H J J J J H K J J N K K J J J J J J J M L K N L L K L K L L K K L K L N K ` F+", -"M M J K K N K N K N K L M M L L K L N N L K N K L L J K L K N L M K K M L E N K M K N K N K N K K N L L N H J K M L L N K L K K K K N K L M K L K N ` F+", -"K L L N K N E L M L M K K N N L M L E L L K L N L N N L L K M K K N N M K L N L N K M M M M L M L M M L K M K J L K K N K L L N N L L L M K N K N L ` F+", -"L L K N L L L K M L L L L L K N K K M L K N K N L K N L L L L L L L K N L L L K N L L K M L K M L L K M L L L K M L L L L L L L K N L L L K M L L K ` F+", -"L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ` F+", -"N L N N L M L M L N N N L M L L M M L M L M L L M N N L N L N L L M L L L L L L L N N N L L L L L P M N L N P M M L L L N L N L N L L L L L L L L L ` F+", -"L L O L M L L O O O K M L L M P N L N N N N P N N P O P L O L N L N M N P M N M L O N H O M O M N N L M N L M M P M N M M N M L L N O L M L L M L L ` F+", -"N N N N P N N M L O O N N N O L P O P L P N N O P N N O O L M M N O M P N M P M M N N N N M M O P P P P O M M O P M P P P P M L N O M M P N N L M O ` D+", -"P P N P L N N P O L N N P L P N P N O N N N N O N N N N P L N L P L M P M O L P L L M O E M O M M P N P M P O M M M O N N P P L P P N L M M P P P M ` D+", -"N P P O O O O O N O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O Q Q O Q O O O O O O O O O O O O M ` D+", -"O O x e.g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+|+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+%.} P O O ` D+", -"P O y 6.4.6.e.e.U.4.m.e.6.U.e.e.e.m.^+4.m.p.5.^+e.e.p.m.^+4.m.e.6.#+e.p.e.m.U.4.m.e.6.U.e.e.6.m.e.6.#+p.e.e.m.U.^+m.m.m.m.m.6.m.U.e.m.e.^+^+} O P O ` D+", -"P P y 6.O *.,.+.+.~.~...&.+.+.>.+.'.'.*.,.@.*.'.*.Y *...@.'.>.]...&.*.Y +.>...<.!.*.+...!.*.Y *.!.].:...*.+.>...+.*.Y @.!.@.*.@.@...~...&+ +{ P P O ` D+", -"O O y 6.].0.s.v.&.].f.u.:.2.y.F.j.y.P.[.v.<.5.{.5.~.B./.).[.M.B.j.v.f.<.v.8.8.t.k.{.u./.!.i.++O.C.!.z.{.@.j.<.).f.}.O.i.M.s.).:.<. +W.:+W.&+~ O O O ` D+", -"O O y 6.M.r.F.Z.'.S.q.M.i.a.A.@+%+@+_+F.H.8+`.5+j.]+7.9.9.J.9.B.r.z.:.t.:.$+).s.6+M.o.5+B.g.&.k.K.$+t.M.i.@+_+W.j.q.D.o.y.W.z.#+B.%+Z.<. +@+~ O O O ` D+", -"O O y 6.&.:.T.q.v+s+u+z+x+n+u+u+u+u+y+s+y+u+p+y+x+u+y+u+p+z+x+u+x+y+y+s+s+n+w+y+x+x+x+x+y+x+x+s+x+x+x+x+s+v+s+w+y+x+w+x+x+x+x+s+s+v+]+6+B.5+~ O Q O ` D+", -"O O y 6.).Q.f.o.f+( ^ ' = % % % % % % % % = ; ; - - ) ( [ ^ ^ ^ ( ( ( [ [ 7 8 9 f f f m l G T S u u u u G G G E S S S S S S S .S -.y..+4+<+~ O Q O ` D+", -"O O y 6.!.K.b.f.b+- * . % % % % % % % % % % * = ; - = * * ' ! ^ ^ ( ^ ( 7 ( 6 9 f l f l n l n n u u G u S G S S S T T T T T U U T n.)+5.H.c+~ O Q Q ` D+", -"O Q y 6.'.N.O.2+|+^ * U x+v+v+v+v+D+v+v+v+v+v+F+E+E+e+; ) l+w+v+v+v+v+v+s+p+x+w+E+v+v+v+s+e+7 W.p+w+v+x+x+w+x+s+x+x+w+x+x+x+x+n.n n.~.z.&+$+~ Q O O ` D+", -"O O y 6.*.V..+$+f+( = |+H+g+X.)+[+)+)+8+8+2+)+2+=+E+C+- ( H+p+&+1+1+8+W.q+H+}+3+1+1+1+)+w+E+^ e+H+c+8+b+b+b+b+b+b+b+1+b+b+|+b+E u n.W.t.%+x.~ Q O Q ` D+", -"O O y 6.'.].2+i.f+! & =+w+; # @ @ @ + + + . & . + n.G+; ^ H+#.. ' ' ' * ;.E+f - ( 7 ( ) f+F+( e+H+6 6 ( 7 7 6 6 6 8 9 9 8 9 9 u n 3.:+z.S.4+~ R O R ` D+", -"O R y 6.,.{.b.{.o+X l |+x+- ) f f 9 f f ' . = ; n i+G+' ^ H+$.; ^ ( 7 ) =+D+G ^ l l n 6 i+v+^ f+H+f G ;.$.;.;.$.;.$.;.;.;.;.3.;.#.)+@+:.]+3+~ Q R Q ` D+", -"Q R y 6.b._+t.%+H+H+H+H+p+- o+H+H+H+H+H+p+U = & H+H+p+; ( H+;.; ( 7 7 ) 2+H+S ^ l l f 7 e+D+^ f+H+9 ;.H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+8+]+0+Z.~ R R Q ` D+", -"Q R y 6.:.w.T.T.l+T f |+v+) ' 9 9 8 8 j p+H+o+T ' ' ! ; 6 H+;.; ( ( 7 ( 6 I 7 8 l m m 7 e+v+^ f+H+l n T T U T T U U U U U U U U G n.@+W.W.2+~ R O R ` D+", -"R R y 6.u.z.#+x.h+6 ) Q.v+7 * = * * * & & T w+G+l+6 = = 7 H+;.' 7 7 6 6 [ ( 9 f l m f 7 e+v+^ |+H+6 9 9 6 9 9 9 9 f f l l f m u l 3.Q.$+1.3+~ O R R ` D+", -"R Q y 6.'.g.K.B.i+u 7 b+C+9 - ) ) ) ' ' - & = ;.p+H+l+6 ( H+;.' ( 7 7 8 9 9 9 9 l l l 7 i+D+( f+H+o.;.-.3.-.3.3.-.o.-.o.o.-.n. .l -.P.8. +8+~ R R R ` D+", -"R R y 6.*.t.,.$+i+S 9 )+H+l ' ! ) ) ) ) ) ) ' & ' ^.G+#.( G+-.' ( 7 6 8 9 f 9 f l n m 7 l+H+^ 1+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+#.6 -./+$+M.:+~ R R R ` D+", -"R R y e.).v.}.}.i+S S 9 G 7 ( ( ^ ) ! ! ^ ! ^ ^ - = 6 ^ ^ u 6 ( 7 7 6 8 9 9 9 l n l u l u S 7 n T S S T T T U T T T T U U U .f n -.l.7+j.3+~ R R R ` D+", -"R R y 6.*.k.2+B.}+S T n 9 6 7 ^ ) ) ) ! ) ! ) ) ) ) ; ) ! ' ) ( ( 7 [ 7 6 6 7 6 6 9 f l f 6 l 9 9 6 9 9 f f 9 9 9 l l l l l l S u 3.$+g.3+0+{ R R R ` F+", -"R R y e.).:._+o.i+S S ;. .u X X S U T ^ 7 ! 9 S E u U S n 9 X ;.f 6 $. .l [ X #.T T $.X f X $. .#.$.u S u .-.3.X #.;.$.U #.-.;.l 3.c.9.@+ +~ V R R Z F+", -"R R y 6.@.t.++}.i+G .x+i+h+n.b+|+x+i+U n.S 1+p+s+v+p+|+f+1+=+)+8 #.n+p+b+ .v+n.i+p+1+|+u 1+x+s+-.s+-.n.3.2+)+1+e+e+c+w+|+}+p+p+l 3.K..+]+O.{ R R R ` F+", -"R R y e.u.[.T.*+e+u S ;.T X f f m .G .X .f u T T S G ( u ( ( ) 9 l f .#.X X U U $. .6 U $.#.#.$.;.$.-.#.n u U ;.;. .S ;.;.].9 ;._+l..+2+~ V R R Z F+", -"R R y e.}.k.L.R.l+ . .U S S G G l f 9 9 8 9 6 6 6 6 9 f 9 9 l l n l f 9 m n l n m l G G G G u n S u G G S S S S G G S u G S S S u o.]+S.<+3+{ V R R ` F+", -"R R y e.@.C.W.F.w+x+x+x+x+x+w+x+x+z+y+x+y+x+y+x+x+s+n+x+x+x+w+x+x+x+x+x+y+x+x+n+x+w+y+y+x+x+y+x+x+x+x+x+x+x+x+x+x+y+x+w+x+x+s+x+x+w+:+j.S.X.~ V R R Z D+", -"R R y e.[.f.@+S.y.B.1.J.$+'.E.S.*+B.t.H.s.4+k.y.j.B.b.}.K.K.).v.++C.b.b.!.Q.g.Q.(+r.<+M.1.O.W.v.j._+!.v.@+v.R.Q._+T.y.x. +P.6+L.h.]+~.B.E.X.{ V R R ` F+", -"R R y e.>.j.F.<+B.S.3+S.y.y.v.Z.%+C.$+#+5+G.~.E.E.Z.<._.Q.Q.M. +B.r. +_+u.k.w.T.$+@+q.B.S.2.M.S.1.<.<+O. +B.<.g.z.w.0+>.Z.%+0.7.8+d.y.7.O.$+~ V R R Z D+", -"R R y e.{.x.e.O.~.3+5+D.5+X.E.|.e.e.3+p.x.)+e.x.^.E.D.X.e.E.&+3+:+S.&+&+3+D.&+X.O.X.X.3+W.|.X.X.|.&+D.X.x.&+3+D.3+&+&+O.&+X.&+X.p.b+p.&+8+]+~ R R R ` F+", -"R R z d.m.m.d+d+a+|+g+d+d+3+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+d+a+a+a+d+a+d+a+g+d+3+g+a+3+d+g+o+~ R R R Z D+", -"R R y e.d+q+y+B+q+B+y+y+y+x+x+y+y+y+y+y+x+B+y+y+x+x+y+y+y+x+x+B+y+y+x+x+y+y+y+x+x+B+x+x+x+x+x+y+x+x+x+x+x+x+y+x+x+x+B+x+x+B+x+x+x+y+x+x+y+y+~ R R R ` F+", -"R R / { ~ , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ~ R R R Z D+", -"R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R ` F+", -"R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R Z C+", -"R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R Z H+", -"R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R ..H+", -"%.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.>.H+", -"g+h+j+j+j+j+j+j+h+j+j+h+j+j+j+j+j+j+h+j+j+h+j+j+j+j+j+j+h+j+j+h+h+h+h+h+h+h+h+h+h+h+h+h+j+j+j+j+j+j+h+j+j+h+j+j+h+j+j+h+j+j+j+j+h+j+j+h+j+j+j+j+j+h+j+}+"}; +"% c #B9B9BF", +"& c #E0E0E3", +"* c #ACACB3", +"= c #9D9DA4", +"- c #F3F3F4", +"; c #5D5D6A", +"> c #5E5E6A", +", c #92929B", +"' c #878791", +") c #5C5C69", +"! c #EDEDEE", +"~ c #FCFCFC", +"{ c #909098", +"] c #909099", +"^ c #62626E", +"/ c #A5A5AC", +"( c #E2E2E4", +"_ c #E5E5E7", +": c #BDBDC2", +"< c #CCCCD0", +"[ c #70707C", +"} c #C4C4C9", +"| c #FAFAFA", +"1 c #CECED2", +"2 c #CFCFD3", +"3 c #CBCBCF", +"4 c #BFBFC4", +"5 c #C6C6CB", +"6 c #B3B3B9", +"7 c #B2B2B8", +"8 c #EBEBEC", +"9 c #CACACE", +"0 c #A0A0A7", +"a c #8D8D96", +"b c #FDFDFD", +"c c #8C8C95", +"d c #5A5A67", +"e c #F4F4F5", +"f c #E1E1E3", +"g c #F7F7F7", +"h c #5C5C68", +"i c #DBDBDE", +"j c #F8F8F9", +"k c #F2F2F3", +"l c #F1F1F2", +"m c #BCBCC1", +"n c #EAEAEC", +"o c #8F8F98", +"p c #E2E2E5", +"q c #A6A6AD", +"r c #A3A3AA", +"s c #F0F0F1", +"t c #333339", +"u c #34343A", +"v c #1C1F22", +"w c #1A1E20", +"x c #D1D1D5", +"y c #FBFBFB", +"z c #F5F5F6", +"A c #CDCDD1", +"B c #CECED1", +"C c #5B5B68", +"D c #D7D7DA", +"E c #A2A2A9", +"F c #666672", +"G c #676773", +"H c #ADADB3", +"I c #A8A8AF", +"J c #9F9FA7", +"K c #82828C", +"L c #EBEBED", +"M c #656571", +"N c #6D6D78", +"O c #DBDBDD", +"P c #6C6C77", +"Q c #D5D5D9", +"R c #D5D5D8", +"S c #9999A1", +"T c #9898A0", +"U c #A7A7AE", +"V c #61616E", +"W c #6A6A76", +"X c #EDEDEF", +"Y c #A1A1A8", +"Z c #D8D8DB", +"` c #7C7C86", +" . c #E0E0E2", +".. c #63636F", +"+. c #E6E6E8", +"@. c #B0B0B6", +"#. c #C0C0C5", +"$. c #D6D6D9", +"%. c #6B6B76", +"&. c #E9E9EB", +"*. c #C7C7CB", +"=. c #F9F9FA", +"-. c #C3C3C8", +";. c #74747F", +">. c #96969E", +",. c #C2C2C7", +"'. c #EEEEEF", +"). c #636370", +"!. c #C6C6CA", +"~. c #72727D", +"{. c #AEAEB4", +"]. c #BEBEC3", +"^. c #686874", +"/. c #DDDDE0", +"(. c #646470", +"_. c #DFDFE2", +":. c #7D7D87", +"<. c #D2D2D6", +"[. c #A9A9B0", +"}. c #8E8E97", +"|. c #C1C1C6", +"1. c #84848E", +"2. c #70707B", +"3. c #E4E4E6", +"4. c #696975", +"5. c #C8C8CD", +"6. c #6F6F7A", +"7. c #696974", +"8. c #DEDEE1", +"9. c #7D7D88", +"0. c #B4B4BA", +"a. c #777782", +"b. c #757580", +"c. c #9797A0", +"d. c #ABABB2", +"e. c #AEAEB5", +"f. c #8A8A93", +"g. c #E7E7E9", +"h. c #8B8B94", +"i. c #ECECEE", +"j. c #5F5F6B", +"k. c #B7B7BC", +"l. c #B6B6BC", +"m. c #C9C9CD", +"n. c #FEFEFE", +"o. c #94949D", +"p. c #EFEFF0", +"q. c #AAAAB0", +"r. c #898992", +"s. c #B7B7BD", +"t. c #C1C1C5", +"u. c #AFAFB5", +"v. c #60606C", +"w. c #61616D", +"x. c #DCDCDF", +"y. c #ACACB2", +"z. c #B8B8BE", +"A. c #C8C8CC", +"B. c #E8E8E9", +"C. c #85858F", +"D. c #878790", +"E. c #9D9DA5", +"F. c #9B9BA3", +"G. c #9F9FA6", +"H. c #D3D3D7", +"I. c #71717C", +"J. c #D1D1D4", +"K. c #BABABF", +"L. c #767680", +"M. c #AAAAB1", +"N. c #767681", +"O. c #9A9AA2", +"P. c #73737E", +"Q. c #86868F", +"R. c #9E9EA6", +"S. c #6B6B77", +"T. c #E8E8EA", +"U. c #C5C5CA", +" ", +" ", +" ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ $ $ % % $ $ $ & * = # + ", +" + @ $ $ - ; > - $ $ , ' $ & ) # + ", +" + @ $ ! ~ { ] ~ ! $ ^ / & ( / ^ $ _ : - < [ $ & $ $ $ $ ^ / & ( / ^ $ _ } | # + ", +" + @ $ & < 1 2 3 & $ / $ : 4 $ / $ $ 5 6 $ 7 $ & , $ 8 , / $ : 4 $ / $ $ 9 0 # + ", +" + @ $ & a b b c & $ ( - d d e f $ g h ; $ i $ & $ & ( - d d e f $ j ; # + ", +" + @ $ & ) k l ) & $ ( - d d e f $ & $ & $ & $ & ( - d d e f $ f # + ", +" + @ $ & c c & $ / $ m : $ / $ & $ & $ & n - o / $ m : $ / $ & # + ", +" + @ $ & & $ ^ / f p q ^ $ & $ & $ & r - s ^ / f p q ^ $ & # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u x & & & 8 y z | A B | # + ", +" + @ t v w w w w w w w w w w u C D E z z f F G f z # + ", +" + @ t v w w w w w w w w w w u H B z z I J 0 I z # + ", +" + @ t v w w w w w w w w w w u K L M z z N O i P z # + ", +" + @ t v w w w w w w w w w w u F L K z z Q c R z # + ", +" + @ t v w w w w w w w w w w u B * z z S - T z # + ", +" + @ t v w w w w w w w w w w u r D C z z ^ U V z # + ", +" + @ t v w w w w w w w w w w u y 8 & & & & W | X X X Y z z # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u | A B | Z # + ", +" + @ t v w w w w w w w w w w u z f F G f z # + ", +" + @ t v w w w w w w w w w w u z I J 0 I z z ` .; ..+.[ # + ", +" + @ t v w w w w w w w w w w u z N O i P z z @.@.#.0 # + ", +" + @ t v w w w w w w w w w w u z Q c R z z ; p $.d # + ", +" + @ t v w w w w w w w w w w u z S - T z z %.&. .; # + ", +" + @ t v w w w w w w w w w w u z ^ U V z z 2 { @.@. # + ", +" + @ t v w w w w w w w w w w u z z z S *. ; .` # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u =.& & -.;. z # + ", +" + @ t v w w w w w w w w w w u z >.,. z # + ", +" + @ t v w w w w w w w w w w u z ..'. ).* O !.~. z {.+.].^. z >./. .,.~. (.* _.& :.).* O !.~. # + ", +" + @ t v w w w w w w w w w w u z h E <. [.}. K |. | [.d [.7 z M 1.m [.7 ; C ^ [.}. K |. # + ", +" + @ t v w w w w w w w w w w u =.& k | 2. /.& & & 3. | 4. 4.( z ;.: p & X _.P /.& & & 3. # + ", +" + @ t v w w w w w w w w w w u z ; : 5. & 6. | 7. 7.( z B ] ) 4.=. 8.P & 6. # + ", +" + @ t v w w w w w w w w w w u z > L 9. I 0.> d a. | U d U 7 z & b.) 7 | I 7 ; C ^ I 0.> d a. # + ", +" + @ t v w w w w w w w w w w u z c.B ).d._.3.{. z e.+.4 7. z f.8.f r z ).* f .` ).d._.3.{. # + ", +" + @ t v w w w w w w w w w w u z # + ", +" + @ t v w w w w w w w w w w u z # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u z z =. .g.i ] E 8.6 # + ", +" + @ t v w w w w w w w w w w u z z z ) h.p }. i.j. # + ", +" + @ t v w w w w w w w w w w u z 7.k.( l.^. >./. .,.~. ^.: +.* z z = D ).* O !.~.m.n.& o. # + ", +" + @ t v w w w w w w w w w w u z 7 [.d [.@. M 1.m 6 I C d.| z P p. [.}. K |. z # + ", +" + @ t v w w w w w w w w w w u z ( 4. 4.f ;.: p & X p 4. W | z N '. /.& & & 3. z # + ", +" + @ t v w w w w w w w w w w u z ( 7. 7.f B ] ) 4.=. p 7. W | z = D & 6. z # + ", +" + @ t v w w w w w w w w w w u z 7 U d U @. & b.) 7 | 6 U d q.| z h r.f c I 0.> d a. z # + ", +" + @ t v w w w w w w w w w w u | X X X Y 7.s.( k.^. f.8.f r z ^.: +.H z =.& g.i { ).d._.3.{. z Z # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ $ & $ $ % % $ $ $ & # + ", +" + @ $ & $ $ - ; > - $ $ $ & # + ", +" + @ $ & ^ / & ( / ^ ^ / & ( / ^ $ 3.t.l u.v. $ ! ~ { ] ~ ! $ ^ / & ( / ^ 4.].l U $ & w.E x.+.y.(. # + ", +" + @ $ & / $ : 4 $ / / $ : 4 $ / $ $ z.< $ c. $ & < 1 2 3 & $ / $ : 4 $ / s.$ z.< $ & E $ : q.k y. # + ", +" + @ $ & ( - d d e f ( - d d e f $ - P $ A. $ & a b b c & $ ( - d d e f B.- P $ & & $ $ $ $ i. # + ", +" + @ $ & ( - d d e f ( - d d e f $ - P $ A. $ & ) k l ) & $ ( - d d e f B.- P $ & _.n.o C.C.D. # + ", +" + @ $ s u.u.u. / $ m : $ / / $ m : $ / $ $ z.< $ c. $ & c c & $ / $ m : $ / s.$ z.< $ & E.$ x F.d.+. # + ", +" + @ $ $ $ $ $ ^ / f p q ^ ^ / f p q ^ $ 3.#.l @.v. $ & & $ ^ / f p q ^ 4.4 k H $ & v.G.H.j &.m # + ", +" + @ $ & # + ", +" + @ $ & # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u , n.P =. .g.i ] , n.P Y & & n.& & Y # + ", +" + @ t v w w w w w w w w w w u < 2 / z ) h.p }. < 2 / z # + ", +" + @ t v w w w w w w w w w w u ..n I./. z = D ..n I./. z # + ", +" + @ t v w w w w w w w w w w u c.% 8.[ z P p. c.% 8.[ z # + ", +" + @ t v w w w w w w w w w w u J.K U q. z N '. J.K U q. z # + ", +" + @ t v w w w w w w w w w w u F | L 8 X p z = D F | L 8 X p z # + ", +" + @ t v w w w w w w w w w w u = K. _.L. z h r.f c = K. _.L. z # + ", +" + @ t v w w w w w w w w w w u $.C. M.u. =.& g.i { $.C. M.u. z # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u N.5.( 3.O. =.& f ,.P. =. .g.i ] z =.& & & P # + ", +" + @ t v w w w w w w w w w w u 3 Q. ; I. z O.|. z ) h.p }. z z # + ", +" + @ t v w w w w w w w w w w u g.2. z ).n z = D z z # + ", +" + @ t v w w w w w w w w w w u R.e 5.C. z ) / % z P p. z =.& & m. # + ", +" + @ t v w w w w w w w w w w u 7.E _ @. =.& i 7 S. z N '. z z # + ", +" + @ t v w w w w w w w w w w u %.T. z z = D z z # + ", +" + @ t v w w w w w w w w w w u r.d }.U. z z h r.f c z z # + ", +" + @ t v w w w w w w w w w w u ,.g. .U.;. z =.& g.i { z z # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/hdspmixer/pixmaps/b_blank.xpm b/hdspmixer/pixmaps/b_blank.xpm index bafadd7..ee154fb 100644 --- a/hdspmixer/pixmaps/b_blank.xpm +++ b/hdspmixer/pixmaps/b_blank.xpm @@ -1,29 +1,59 @@ /* XPM */ char const * b_blank_xpm[] = { -"13 13 13 1", -" c None", -". c #1AA00D", -"+ c #1A9510", -"@ c #198F0F", -"# c #20FF0D", -"$ c #21E50C", -"% c #1CBA0D", -"& c #69FF5F", -"* c #44FF36", -"= c #188210", -"- c #165A10", -"; c #154C11", -"> c #144010", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&********=-", -"%$$$$$$$$$$=-", -"%$$$$$$$$$$=-", -"%$$$$$$$$$$@-", -"%$*$$$$$$$$@-", -"%$$$$$$$$$$=-", -"%%$$$$$$$$$@-", -"%$*$$$$$$$$=-", -"%$%$$$$$$$%@-", -"%=--;;;;;;-;-", -"->>>>>>>>>>>>"}; +"13 13 43 1", +" c #333339", +". c #34343A", +"+ c #1C1F22", +"@ c #1A1E20", +"# c #212527", +"$ c #797B7C", +"% c #838585", +"& c #202426", +"* c #999A9B", +"= c #929394", +"- c #1E2224", +"; c #222628", +"> c #262A2C", +", c #1C2022", +"' c #8A8B8C", +") c #BCBCBD", +"! c #2C3032", +"~ c #A3A4A5", +"{ c #BFC0C0", +"] c #606264", +"^ c #555859", +"/ c #CACACA", +"( c #656768", +"_ c #535657", +": c #C4C4C4", +"< c #C8C8C8", +"[ c #4E5152", +"} c #A9AAAA", +"| c #BABABB", +"1 c #1F2325", +"2 c #626466", +"3 c #C9C9C9", +"4 c #C3C3C3", +"5 c #707273", +"6 c #1B1F21", +"7 c #8B8C8D", +"8 c #CCCCCC", +"9 c #C2C2C2", +"0 c #2D3132", +"a c #B9B9B9", +"b c #8B8D8D", +"c c #505354", +"d c #454849", +" ............", +" +++++++++++.", +" +@@@@@@#$%@.", +" +@@@@@&*=-@.", +" +;>@@,')!@@.", +" +~{]@^/(@@@.", +" +_:<[}|1@@@.", +" +@234/5@@@@.", +" +@67890@@@@.", +" +@@>ab@@@@@.", +" +@@@cd@@@@@.", +" +@@@@@@@@@@.", +" ............"}; diff --git a/hdspmixer/pixmaps/b_card1.xpm b/hdspmixer/pixmaps/b_card1.xpm index d818674..7081915 100644 --- a/hdspmixer/pixmaps/b_card1.xpm +++ b/hdspmixer/pixmaps/b_card1.xpm @@ -1,30 +1,49 @@ /* XPM */ char const * b_card1_xpm[] = { -"13 13 14 1", -" c None", -". c #8D8F0F", -"+ c #88870F", -"@ c #82800E", -"# c #EBE813", -"$ c #D3D112", -"% c #AAA70F", -"& c #F5F35F", -"* c #F2EF36", -"= c #3C3533", -"- c #75730E", -"; c #4D4D0B", -"> c #40410B", -", c #35340A", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&***=****-;", -"%$$$$==$$$$-;", -"%$$$=$=$$$$-;", -"%$$$$$=$$$$@;", -"%$*$$$=$$$$@;", -"%$$$$$=$$$$-;", -"%%$$$$=$$$$@;", -"%$*$$$=$$$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +"13 13 33 1", +" c #666659", +". c #69684D", +"+ c #8F8C2F", +"@ c #E6E040", +"# c #FFFB7F", +"$ c #908D2F", +"% c #FFFB7E", +"& c #A7A453", +"* c #232211", +"= c #242312", +"- c #918E2F", +"; c #FFFB7D", +"> c #D7D469", +", c #E1DD6E", +"' c #2B2A15", +") c #928F2F", +"! c #FFFB7C", +"~ c #93902F", +"{ c #FEFA7B", +"] c #94912F", +"^ c #FEFA7A", +"/ c #95922F", +"( c #FEFA79", +"_ c #2B2A14", +": c #96932F", +"< c #FEFA78", +"[ c #A9A750", +"} c #1B1A0D", +"| c #040402", +"1 c #C2BF5C", +"2 c #6F6E4C", +"3 c #A39F2F", +"4 c #FAF56B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%&*=%%%%%$", +"-@;;>,';;;;;-", +")@!!!!'!!!!!)", +"~@{{{{'{{{{{~", +"]@^^^^'^^^^^]", +"/@^^^^'^^^^^/", +"/@((((_(((((/", +":@<<[}|}1<<<:", +"2344444444432", +" 23333333332 "}; diff --git a/hdspmixer/pixmaps/b_card2.xpm b/hdspmixer/pixmaps/b_card2.xpm index 9a27ce6..3266bbe 100644 --- a/hdspmixer/pixmaps/b_card2.xpm +++ b/hdspmixer/pixmaps/b_card2.xpm @@ -1,30 +1,59 @@ /* XPM */ char const * b_card2_xpm[] = { -"13 13 14 1", -" c None", -". c #8D8F0F", -"+ c #88870F", -"@ c #82800E", -"# c #EBE813", -"$ c #D3D112", -"% c #AAA70F", -"& c #F5F35F", -"* c #F2EF36", -"= c #3C3533", -"- c #75730E", -"; c #4D4D0B", -"> c #40410B", -", c #35340A", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&**===***-;", -"%$$$=$$$=$$-;", -"%$$$$$$$=$$-;", -"%$$$$$$$=$$@;", -"%$*$$$$=$$$@;", -"%$$$$$=$$$$-;", -"%%$$$=$$$$$@;", -"%$*$=====$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +"13 13 43 1", +" c #666659", +". c #69684D", +"+ c #8F8C2F", +"@ c #E6E040", +"# c #FFFB7F", +"$ c #908D2F", +"% c #FFFB7E", +"& c #605E2F", +"* c #292814", +"= c #4E4D27", +"- c #DBD86C", +"; c #918E2F", +"> c #FFFB7D", +", c #C3C060", +"' c #B4B158", +") c #6F6D36", +"! c #928F2F", +"~ c #FFFB7C", +"{ c #EFEB74", +"] c #3A391C", +"^ c #93902F", +"/ c #FEFA7B", +"( c #9C9A4C", +"_ c #7B793B", +": c #94912F", +"< c #FEFA7A", +"[ c #E8E46F", +"} c #2F2E16", +"| c #EBE771", +"1 c #95922F", +"2 c #4C4B24", +"3 c #B9B659", +"4 c #FEFA79", +"5 c #8E8C44", +"6 c #797739", +"7 c #96932F", +"8 c #FEFA78", +"9 c #131309", +"0 c #2B2A14", +"a c #504E26", +"b c #6F6E4C", +"c c #A39F2F", +"d c #FAF56B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%%&*=-%%%$", +";@>>>,>')>>>;", +"!@~~~~~{]~~~!", +"^@/////(_///^", +":@<<<<[}|<<<:", +"1@<<<<23<<<<1", +"1@44456444441", +"7@88890}a8887", +"bcdddddddddcb", +" bcccccccccb "}; diff --git a/hdspmixer/pixmaps/b_card3.xpm b/hdspmixer/pixmaps/b_card3.xpm index 05961a0..e796057 100644 --- a/hdspmixer/pixmaps/b_card3.xpm +++ b/hdspmixer/pixmaps/b_card3.xpm @@ -1,30 +1,66 @@ /* XPM */ char const * b_card3_xpm[] = { -"13 13 14 1", -" c None", -". c #8D8F0F", -"+ c #88870F", -"@ c #82800E", -"# c #EBE813", -"$ c #D3D112", -"% c #AAA70F", -"& c #F5F35F", -"* c #F2EF36", -"= c #3C3533", -"- c #75730E", -"; c #4D4D0B", -"> c #40410B", -", c #35340A", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&**===***-;", -"%$$$=$$$=$$-;", -"%$$$$$$$=$$-;", -"%$$$$$==$$$@;", -"%$*$$$$$=$$@;", -"%$$$$$$$=$$-;", -"%%$$=$$$=$$@;", -"%$*$$===$$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +"13 13 50 1", +" c #666659", +". c #69684D", +"+ c #8F8C2F", +"@ c #E6E040", +"# c #FFFB7F", +"$ c #908D2F", +"% c #FFFB7E", +"& c #E0DC6F", +"* c #302F18", +"= c #2F2E17", +"- c #4B4A25", +"; c #D5D269", +"> c #918E2F", +", c #FFFB7D", +"' c #F9F57A", +") c #C4C160", +"! c #58572B", +"~ c #928F2F", +"{ c #FFFB7C", +"] c #B5B258", +"^ c #636130", +"/ c #93902F", +"( c #FEFA7B", +"_ c #CAC762", +": c #201F0F", +"< c #252412", +"[ c #F1ED75", +"} c #94912F", +"| c #FEFA7A", +"1 c #FBF779", +"2 c #898742", +"3 c #757338", +"4 c #95922F", +"5 c #E8E46F", +"6 c #403F1F", +"7 c #FEFA79", +"8 c #E4E16D", +"9 c #F7F376", +"0 c #959347", +"a c #868440", +"b c #96932F", +"c c #FEFA78", +"d c #BBB858", +"e c #2C2B15", +"f c #302F17", +"g c #6A6832", +"h c #E9E56E", +"i c #6F6E4C", +"j c #A39F2F", +"k c #FAF56B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%&*=-;%%%$", +">@,,'',)!,,,>", +"~@{{{{{]^{{{~", +"/@(((_:<[(((/", +"}@||||123|||}", +"4@|||||56|||4", +"4@778970a7774", +"b@ccdefghcccb", +"ijkkkkkkkkkji", +" ijjjjjjjjji "}; diff --git a/hdspmixer/pixmaps/b_mute.xpm b/hdspmixer/pixmaps/b_mute.xpm index 86bec57..e70968d 100644 --- a/hdspmixer/pixmaps/b_mute.xpm +++ b/hdspmixer/pixmaps/b_mute.xpm @@ -1,77 +1,147 @@ /* XPM */ char const * b_mute_xpm[] = { -"30 22 52 1", -" c None", -". c #DE8C00", -"+ c #872100", -"@ c #B35A00", -"# c #FFD553", -"$ c #FFC128", -"% c #700909", -"& c #272727", -"* c #FFFFFF", -"= c #001B40", -"- c #775328", -"; c #906230", -"> c #855B2D", -", c #845A2C", -"' c #745027", -") c #3B2B1D", -"! c #553C1C", -"~ c #755427", -"{ c #ACA182", -"] c #B28051", -"^ c #B38052", -"/ c #B28052", -"( c #B38152", -"_ c #A07751", -": c #35271C", -"< c #150D0A", -"[ c #755428", -"} c #966B3A", -"| c #8A5D2F", -"1 c #8B5E2F", -"2 c #8A5D2E", -"3 c #7D572B", -"4 c #150D0B", -"5 c #966A3A", -"6 c #160D0B", -"7 c #36271C", -"8 c #8A5E2F", -"9 c #745327", -"0 c #7D582C", -"a c #563D1D", -"b c #634621", -"c c #714F25", -"d c #715025", -"e c #725026", -"f c #715026", -"g c #48341F", -"h c #553C1D", -"i c #32251B", -"j c #18100D", -"k c #180F0D", -"l c #19100D", -"m c #19100E", -".............................+", -"@.#$$$$$$$$$$$$$$$$$$$$$$$$$%&", -"@..*.....*.*...*.*****.****.%&", -"@..**...**.*...*...*...*....%&", -"@..**...**.*...*...*...*....+&", -"@.$*.*.*.*.*...*...*...****.+&", -"@..*.*.*.*.*...*...*...*....%&", -"@@.*..*..*.*...*...*...*....+&", -"@.$*..*..*..***....*...****.%&", -"@.@........................@+&", -"@%&&=======================&=&", -"-;>>>>>>>>>,>>>>>>>>>>>>>,>>')", -"!~{]]^/]/]/]^](]^//]^^^]^(^_:<", -"![}*|1212*2*111*2*****2****3:4", -"!~5**221**2*122*2||*|2|*22|3:6", -"![5**221**|*212*222*222*12|376", -"![5*1*2*2*2*8|2*228*|22****3:<", -"!95*8*|*2*1*2|2*122*222*21|0:<", -"a[5*|2*12*1*|1|*|22*2|2*1210:<", -"![5*82*12*22***2||2*|1|****0:<", -"![bccccdcecccfcfcfcccccccccg:<", -"hijkljjjjjmkjkkjjmjjjjjjjljk4<"}; +"30 22 122 2", +" c #665C59", +". c #69544D", +"+ c #8F462F", +"@ c #E66840", +"# c #FF9E7F", +"$ c #201410", +"% c #7B4C3D", +"& c #7E4E3F", +"* c #3B251D", +"= c #3F271F", +"- c #452B22", +"; c #0E0907", +"> c #422921", +", c #261813", +"' c #603B30", +") c #90472F", +"! c #FF9D7E", +"~ c #3A241D", +"{ c #412820", +"] c #402720", +"^ c #3D261E", +"/ c #3B241D", +"( c #91472F", +"_ c #FF9D7D", +": c #754839", +"< c #CA7C63", +"[ c #724638", +"} c #92472F", +"| c #FF9C7C", +"1 c #CE7E64", +"2 c #714537", +"3 c #704536", +"4 c #CB7C63", +"5 c #261712", +"6 c #78493A", +"7 c #93472F", +"8 c #FE9B7B", +"9 c #3B241C", +"0 c #422820", +"a c #3F261E", +"b c #3E261E", +"c c #FB997A", +"d c #FC9A7A", +"e c #41281F", +"f c #94482F", +"g c #FE9A7A", +"h c #A2624E", +"i c #9F614D", +"j c #7A4A3A", +"k c #BA7159", +"l c #BE735B", +"m c #7D4B3C", +"n c #95482F", +"o c #E0886C", +"p c #643C30", +"q c #40271F", +"r c #633C2F", +"s c #E2896D", +"t c #543328", +"u c #6F554C", +"v c #A34B2F", +"w c #FA8E6B", +"x c #666659", +"y c #69684D", +"z c #8F8C2F", +"A c #E6E040", +"B c #908D2F", +"C c #FFFB7E", +"D c #202010", +"E c #7B793D", +"F c #7E7C3E", +"G c #3B3A1D", +"H c #3F3E1F", +"I c #454422", +"J c #0E0E07", +"K c #424121", +"L c #262513", +"M c #605E2F", +"N c #918E2F", +"O c #FFFB7D", +"P c #3A391C", +"Q c #414020", +"R c #403F1F", +"S c #3D3C1E", +"T c #928F2F", +"U c #FFFB7C", +"V c #757339", +"W c #CAC762", +"X c #727037", +"Y c #93902F", +"Z c #FEFA7B", +"` c #3B3A1C", +" . c #CDCA63", +".. c #716F37", +"+. c #706E36", +"@. c #3F3E1E", +"#. c #262512", +"$. c #78763A", +"%. c #94912F", +"&. c #FEFA7A", +"*. c #424120", +"=. c #3E3D1E", +"-. c #FBF779", +";. c #FCF879", +">. c #41401F", +",. c #95922F", +"'. c #A2A04E", +"). c #9F9D4D", +"!. c #7A783A", +"~. c #BAB759", +"{. c #BEBB5B", +"]. c #7D7B3C", +"^. c #FEFA79", +"/. c #E0DD6B", +"(. c #64622F", +"_. c #403F1E", +":. c #63612F", +"<. c #E2DF6C", +"[. c #545228", +"}. c #6F6E4C", +"|. c #A39F2F", +"1. c #FAF56B", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +". + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +"+ @ # # $ % # # & $ # * # # # = - = ; = > # , = = ' # # # + ", +") @ ! ! ~ { ! ! ] ^ ! / ! ! ! = ! ! / ! ! ! / ! ! ! ! ! ! ) ", +"( @ _ _ / : < < [ = _ / _ _ _ = _ _ / _ _ _ / _ _ _ _ _ _ ( ", +"} @ | | / 1 2 3 4 = | / | | | = | | / | | | 5 = = 6 | | | } ", +"7 @ 8 8 9 8 0 a 8 a 8 b c 8 d e 8 8 9 8 8 8 9 8 8 8 8 8 8 7 ", +"f @ g g 9 g h i g a g j k g l m g g 9 g g g 9 g g g g g g f ", +"n @ g g 9 g g g g a g o p q r s g g 9 g g g 5 a a t g g g n ", +"u v w w w w w w w w w w w w w w w w w w w w w w w w w w v u ", +" u v v v v v v v v v v v v v v v v v v v v v v v v v v u ", +"x y z z z z z z z z z z z z z z z z z z z z z z z z z z y x ", +"y z A A A A A A A A A A A A A A A A A A A A A A A A A A z y ", +"B A C C D E C C F D C G C C C H I H J H K C L H H M C C C B ", +"N A O O P Q O O R S O G O O O H O O G O O O G O O O O O O N ", +"T A U U G V W W X H U G U U U H U U G U U U G U U U U U U T ", +"Y A Z Z ` ...+.W @.Z ` Z Z Z @.Z Z ` Z Z Z #.@.@.$.Z Z Z Y ", +"%.A &.&.` &.*.@.&.@.&.=.-.&.;.>.&.&.` &.&.&.` &.&.&.&.&.&.%.", +",.A &.&.` &.'.).&.@.&.!.~.&.{.].&.&.` &.&.&.` &.&.&.&.&.&.,.", +",.A ^.^.` ^.^.^.^.@.^./.(._.:.<.^.^.` ^.^.^.#.@.@.[.^.^.^.,.", +"}.|.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.|.}.", +"x }.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.x "}; diff --git a/hdspmixer/pixmaps/b_pre1.xpm b/hdspmixer/pixmaps/b_pre1.xpm index 62b8874..d825565 100644 --- a/hdspmixer/pixmaps/b_pre1.xpm +++ b/hdspmixer/pixmaps/b_pre1.xpm @@ -1,30 +1,49 @@ /* XPM */ char const * b_pre1_xpm[] = { -"13 13 14 1", -" c None", -". c #1AA00D", -"+ c #1A9510", -"@ c #198F0F", -"# c #20FF0D", -"$ c #21E50C", -"% c #1CBA0D", -"& c #69FF5F", -"* c #44FF36", -"= c #3C3533", -"- c #188210", -"; c #165A10", -"> c #154C11", -", c #144010", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&***=****-;", -"%$$$$==$$$$-;", -"%$$$=$=$$$$-;", -"%$$$$$=$$$$@;", -"%$*$$$=$$$$@;", -"%$$$$$=$$$$-;", -"%%$$$$=$$$$@;", -"%$*$$$=$$$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +"13 13 33 1", +" c #595966", +". c #4D6956", +"+ c #2F8F2F", +"@ c #40E640", +"# c #7FFF7F", +"$ c #2F902F", +"% c #7EFF7E", +"& c #53A753", +"* c #112311", +"= c #122412", +"- c #2F912F", +"; c #7DFF7D", +"> c #69D769", +", c #6EE16E", +"' c #152B15", +") c #2F922F", +"! c #7CFF7C", +"~ c #2F932F", +"{ c #7BFE7B", +"] c #2F942F", +"^ c #7AFE7A", +"/ c #2F952F", +"( c #79FE79", +"_ c #142B14", +": c #2F962F", +"< c #78FE78", +"[ c #50A950", +"} c #0D1B0D", +"| c #020402", +"1 c #5CC25C", +"2 c #4C6F55", +"3 c #2FA32F", +"4 c #6BFA6B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%&*=%%%%%$", +"-@;;>,';;;;;-", +")@!!!!'!!!!!)", +"~@{{{{'{{{{{~", +"]@^^^^'^^^^^]", +"/@^^^^'^^^^^/", +"/@((((_(((((/", +":@<<[}|}1<<<:", +"2344444444432", +" 23333333332 "}; diff --git a/hdspmixer/pixmaps/b_pre2.xpm b/hdspmixer/pixmaps/b_pre2.xpm index 4c33101..ad61212 100644 --- a/hdspmixer/pixmaps/b_pre2.xpm +++ b/hdspmixer/pixmaps/b_pre2.xpm @@ -1,30 +1,59 @@ /* XPM */ char const * b_pre2_xpm[] = { -"13 13 14 1", -" c None", -". c #1AA00D", -"+ c #1A9510", -"@ c #198F0F", -"# c #20FF0D", -"$ c #21E50C", -"% c #1CBA0D", -"& c #69FF5F", -"* c #44FF36", -"= c #3C3533", -"- c #188210", -"; c #165A10", -"> c #154C11", -", c #144010", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&**===***-;", -"%$$$=$$$=$$-;", -"%$$$$$$$=$$-;", -"%$$$$$$$=$$@;", -"%$*$$$$=$$$@;", -"%$$$$$=$$$$-;", -"%%$$$=$$$$$@;", -"%$*$=====$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +"13 13 43 1", +" c #595966", +". c #4D6956", +"+ c #2F8F2F", +"@ c #40E640", +"# c #7FFF7F", +"$ c #2F902F", +"% c #7EFF7E", +"& c #2F602F", +"* c #142914", +"= c #274E27", +"- c #6CDB6C", +"; c #2F912F", +"> c #7DFF7D", +", c #60C360", +"' c #58B458", +") c #366F36", +"! c #2F922F", +"~ c #7CFF7C", +"{ c #74EF74", +"] c #1C3A1C", +"^ c #2F932F", +"/ c #7BFE7B", +"( c #4C9C4C", +"_ c #3B7B3B", +": c #2F942F", +"< c #7AFE7A", +"[ c #6FE86F", +"} c #162F16", +"| c #71EB71", +"1 c #2F952F", +"2 c #244C24", +"3 c #59B959", +"4 c #79FE79", +"5 c #448E44", +"6 c #397939", +"7 c #2F962F", +"8 c #78FE78", +"9 c #091309", +"0 c #142B14", +"a c #265026", +"b c #4C6F55", +"c c #2FA32F", +"d c #6BFA6B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%%&*=-%%%$", +";@>>>,>')>>>;", +"!@~~~~~{]~~~!", +"^@/////(_///^", +":@<<<<[}|<<<:", +"1@<<<<23<<<<1", +"1@44456444441", +"7@88890}a8887", +"bcdddddddddcb", +" bcccccccccb "}; diff --git a/hdspmixer/pixmaps/b_pre3.xpm b/hdspmixer/pixmaps/b_pre3.xpm index 0b14cb2..37fbf9e 100644 --- a/hdspmixer/pixmaps/b_pre3.xpm +++ b/hdspmixer/pixmaps/b_pre3.xpm @@ -1,30 +1,66 @@ /* XPM */ char const * b_pre3_xpm[] = { -"13 13 14 1", -" c None", -". c #1AA00D", -"+ c #1A9510", -"@ c #198F0F", -"# c #20FF0D", -"$ c #21E50C", -"% c #1CBA0D", -"& c #69FF5F", -"* c #44FF36", -"= c #3C3533", -"- c #188210", -"; c #165A10", -"> c #154C11", -", c #144010", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&**===***-;", -"%$$$=$$$=$$-;", -"%$$$$$$$=$$-;", -"%$$$$$==$$$@;", -"%$*$$$$$=$$@;", -"%$$$$$$$=$$-;", -"%%$$=$$$=$$@;", -"%$*$$===$$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +"13 13 50 1", +" c #595966", +". c #4D6956", +"+ c #2F8F2F", +"@ c #40E640", +"# c #7FFF7F", +"$ c #2F902F", +"% c #7EFF7E", +"& c #6FE06F", +"* c #183018", +"= c #172F17", +"- c #254B25", +"; c #69D569", +"> c #2F912F", +", c #7DFF7D", +"' c #7AF97A", +") c #60C460", +"! c #2B582B", +"~ c #2F922F", +"{ c #7CFF7C", +"] c #58B558", +"^ c #306330", +"/ c #2F932F", +"( c #7BFE7B", +"_ c #62CA62", +": c #0F200F", +"< c #122512", +"[ c #75F175", +"} c #2F942F", +"| c #7AFE7A", +"1 c #79FB79", +"2 c #428942", +"3 c #387538", +"4 c #2F952F", +"5 c #6FE86F", +"6 c #1F401F", +"7 c #79FE79", +"8 c #6DE46D", +"9 c #76F776", +"0 c #479547", +"a c #408640", +"b c #2F962F", +"c c #78FE78", +"d c #58BB58", +"e c #152C15", +"f c #173017", +"g c #326A32", +"h c #6EE96E", +"i c #4C6F55", +"j c #2FA32F", +"k c #6BFA6B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%&*=-;%%%$", +">@,,'',)!,,,>", +"~@{{{{{]^{{{~", +"/@(((_:<[(((/", +"}@||||123|||}", +"4@|||||56|||4", +"4@778970a7774", +"b@ccdefghcccb", +"ijkkkkkkkkkji", +" ijjjjjjjjji "}; diff --git a/hdspmixer/pixmaps/b_pre4.xpm b/hdspmixer/pixmaps/b_pre4.xpm index c22909b..3acd549 100644 --- a/hdspmixer/pixmaps/b_pre4.xpm +++ b/hdspmixer/pixmaps/b_pre4.xpm @@ -1,30 +1,54 @@ /* XPM */ char const * b_pre4_xpm[] = { -"13 13 14 1", -" c None", -". c #1AA00D", -"+ c #1A9510", -"@ c #198F0F", -"# c #20FF0D", -"$ c #21E50C", -"% c #1CBA0D", -"& c #69FF5F", -"* c #44FF36", -"= c #3C3533", -"- c #188210", -"; c #165A10", -"> c #154C11", -", c #144010", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&****=***-;", -"%$$$$$==$$$-;", -"%$$$$=$=$$$-;", -"%$$$$=$=$$$@;", -"%$*$=$$=$$$@;", -"%$$$=====$$-;", -"%%$$$$$=$$$@;", -"%$*$$$$=$$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +"13 13 38 1", +" c #595966", +". c #4D6956", +"+ c #2F8F2F", +"@ c #40E640", +"# c #7FFF7F", +"$ c #2F902F", +"% c #7EFF7E", +"& c #408140", +"* c #142814", +"= c #2F912F", +"- c #7DFF7D", +"; c #72E872", +"> c #2B572B", +", c #152B15", +"' c #2F922F", +") c #7CFF7C", +"! c #346A34", +"~ c #66D266", +"{ c #2F932F", +"] c #7BFE7B", +"^ c #68D668", +"/ c #2F622F", +"( c #2F942F", +"_ c #7AFE7A", +": c #295629", +"< c #6BDF6B", +"[ c #2F952F", +"} c #122512", +"| c #0F1F0F", +"1 c #020502", +"2 c #285428", +"3 c #79FE79", +"4 c #142B14", +"5 c #2F962F", +"6 c #78FE78", +"7 c #4C6F55", +"8 c #2FA32F", +"9 c #6BFA6B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%%%&*%%%%$", +"=@---;>,----=", +"'@)))!~,))))'", +"{@]]^/],]]]]{", +"(@__:<_,____(", +"[@__}||12___[", +"[@3333343333[", +"5@66666466665", +"7899999999987", +" 78888888887 "}; diff --git a/hdspmixer/pixmaps/b_pre5.xpm b/hdspmixer/pixmaps/b_pre5.xpm index bfc2784..e926c4c 100644 --- a/hdspmixer/pixmaps/b_pre5.xpm +++ b/hdspmixer/pixmaps/b_pre5.xpm @@ -1,30 +1,59 @@ /* XPM */ char const * b_pre5_xpm[] = { -"13 13 14 1", -" c None", -". c #1AA00D", -"+ c #1A9510", -"@ c #198F0F", -"# c #20FF0D", -"$ c #21E50C", -"% c #1CBA0D", -"& c #69FF5F", -"* c #44FF36", -"= c #3C3533", -"- c #188210", -"; c #165A10", -"> c #154C11", -", c #144010", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&**====**-;", -"%$$$$=$$$$$-;", -"%$$$=$$$$$$-;", -"%$$$====$$$@;", -"%$*$$$$$=$$@;", -"%$$$$$$$=$$-;", -"%%$$=$$$=$$@;", -"%$*$$===$$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +"13 13 43 1", +" c #595966", +". c #4D6956", +"+ c #2F8F2F", +"@ c #40E640", +"# c #7FFF7F", +"$ c #2F902F", +"% c #7EFF7E", +"& c #0A150A", +"* c #172F17", +"= c #57B157", +"- c #2F912F", +"; c #7DFF7D", +"> c #2F922F", +", c #7CFF7C", +"' c #2F932F", +") c #7BFE7B", +"! c #0C180C", +"~ c #397739", +"{ c #73ED73", +"] c #2F942F", +"^ c #7AFE7A", +"/ c #6FE86F", +"( c #78F978", +"_ c #3F833F", +": c #418641", +"< c #2F952F", +"[ c #6FE76F", +"} c #204220", +"| c #79FE79", +"1 c #6FE96F", +"2 c #78FC78", +"3 c #459045", +"4 c #408540", +"5 c #2F962F", +"6 c #78FE78", +"7 c #51AB51", +"8 c #142A14", +"9 c #173117", +"0 c #316931", +"a c #6EE96E", +"b c #4C6F55", +"c c #2FA32F", +"d c #6BFA6B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%%&**=%%%$", +"-@;;;*;;;;;;-", +">@,,,*,,,,,,>", +"'@)))!*~{)))'", +"]@^^^/(_:^^^]", +"<@^^^^^[}^^^<", +"<@||12|34|||<", +"5@667890a6665", +"bcdddddddddcb", +" bcccccccccb "}; diff --git a/hdspmixer/pixmaps/b_pre6.xpm b/hdspmixer/pixmaps/b_pre6.xpm index b5ab0f5..e81cbf3 100644 --- a/hdspmixer/pixmaps/b_pre6.xpm +++ b/hdspmixer/pixmaps/b_pre6.xpm @@ -1,30 +1,72 @@ /* XPM */ char const * b_pre6_xpm[] = { -"13 13 14 1", -" c None", -". c #1AA00D", -"+ c #1A9510", -"@ c #198F0F", -"# c #20FF0D", -"$ c #21E50C", -"% c #1CBA0D", -"& c #69FF5F", -"* c #44FF36", -"= c #3C3533", -"- c #188210", -"; c #165A10", -"> c #154C11", -", c #144010", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&**===***-;", -"%$$$=$$$=$$-;", -"%$$$=$$$$$$-;", -"%$$$====$$$@;", -"%$*$=$$$=$$@;", -"%$$$=$$$=$$-;", -"%%$$=$$$=$$@;", -"%$*$$===$$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +"13 13 56 1", +" c #595966", +". c #4D6956", +"+ c #2F8F2F", +"@ c #40E640", +"# c #7FFF7F", +"$ c #2F902F", +"% c #7EFF7E", +"& c #428642", +"* c #132713", +"= c #132613", +"- c #56AF56", +"; c #2F912F", +"> c #7DFF7D", +", c #5CBC5C", +"' c #2C5A2C", +") c #73EB73", +"! c #7CFD7C", +"~ c #74EC74", +"{ c #2F922F", +"] c #7CFF7C", +"^ c #397639", +"/ c #64CD64", +"( c #2F932F", +"_ c #7BFE7B", +": c #1B391B", +"< c #377237", +"[ c #193319", +"} c #3D7F3D", +"| c #74EF74", +"1 c #2F942F", +"2 c #7AFE7A", +"3 c #142A14", +"4 c #4EA14E", +"5 c #77F777", +"6 c #3C7D3C", +"7 c #448E44", +"8 c #2F952F", +"9 c #336B33", +"0 c #7AFD7A", +"a c #6CE06C", +"b c #234A23", +"c c #79FE79", +"d c #479447", +"e c #57B757", +"f c #459045", +"g c #418841", +"h c #2F962F", +"i c #78FE78", +"j c #73F373", +"k c #265126", +"l c #142B14", +"m c #306630", +"n c #6FEA6F", +"o c #4C6F55", +"p c #2FA32F", +"q c #6BFA6B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%%&*=-%%%$", +";@>>,')!~>>>;", +"{@]]^/]]]]]]{", +"(@__:<[}|___(", +"1@22345672221", +"8@22902ab2228", +"8@ccdecfgccc8", +"h@iijklmniiih", +"opqqqqqqqqqpo", +" opppppppppo "}; diff --git a/hdspmixer/pixmaps/b_pre7.xpm b/hdspmixer/pixmaps/b_pre7.xpm index 4690875..e5a1002 100644 --- a/hdspmixer/pixmaps/b_pre7.xpm +++ b/hdspmixer/pixmaps/b_pre7.xpm @@ -1,30 +1,57 @@ /* XPM */ char const * b_pre7_xpm[] = { -"13 13 14 1", -" c None", -". c #1AA00D", -"+ c #1A9510", -"@ c #198F0F", -"# c #20FF0D", -"$ c #21E50C", -"% c #1CBA0D", -"& c #69FF5F", -"* c #44FF36", -"= c #3C3533", -"- c #188210", -"; c #165A10", -"> c #154C11", -", c #144010", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&*=====**-;", -"%$$$$$$$=$$-;", -"%$$$$$$=$$$-;", -"%$$$$$$=$$$@;", -"%$*$$$=$$$$@;", -"%$$$$$=$$$$-;", -"%%$$$=$$$$$@;", -"%$*$$=$$$$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +"13 13 41 1", +" c #595966", +". c #4D6956", +"+ c #2F8F2F", +"@ c #40E640", +"# c #7FFF7F", +"$ c #2F902F", +"% c #7EFF7E", +"& c #66CF66", +"* c #172F17", +"= c #132713", +"- c #142914", +"; c #2F912F", +"> c #7DFF7D", +", c #51A551", +"' c #377137", +") c #2F922F", +"! c #7CFF7C", +"~ c #2A572A", +"{ c #5DBF5D", +"] c #2F932F", +"^ c #7BFE7B", +"/ c #79F979", +"( c #102110", +"_ c #79FA79", +": c #2F942F", +"< c #7AFE7A", +"[ c #59BA59", +"} c #2C5B2C", +"| c #2F952F", +"1 c #346D34", +"2 c #51A851", +"3 c #79FE79", +"4 c #122612", +"5 c #72F072", +"6 c #2F962F", +"7 c #78FE78", +"8 c #63D163", +"9 c #204520", +"0 c #4C6F55", +"a c #2FA32F", +"b c #6BFA6B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%&**=-%%%$", +";@>>>>>,'>>>;", +")@!!!!!~{!!!)", +"]@^^^^/(_^^^]", +":@<<<<[}<<<<:", +"|@<<<<12<<<<|", +"|@3333453333|", +"6@77789777776", +"0abbbbbbbbba0", +" 0aaaaaaaaa0 "}; diff --git a/hdspmixer/pixmaps/b_pre8.xpm b/hdspmixer/pixmaps/b_pre8.xpm index aa4073a..7b19b19 100644 --- a/hdspmixer/pixmaps/b_pre8.xpm +++ b/hdspmixer/pixmaps/b_pre8.xpm @@ -1,30 +1,69 @@ /* XPM */ char const * b_pre8_xpm[] = { -"13 13 14 1", -" c None", -". c #1AA00D", -"+ c #1A9510", -"@ c #198F0F", -"# c #20FF0D", -"$ c #21E50C", -"% c #1CBA0D", -"& c #69FF5F", -"* c #44FF36", -"= c #3C3533", -"- c #188210", -"; c #165A10", -"> c #154C11", -", c #144010", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&**===***-;", -"%$$$=$$$=$$-;", -"%$$$=$$$=$$-;", -"%$$$$===$$$@;", -"%$*$=$$$=$$@;", -"%$$$=$$$=$$-;", -"%%$$=$$$=$$@;", -"%$*$$===$$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +"13 13 53 1", +" c #595966", +". c #4D6956", +"+ c #2F8F2F", +"@ c #40E640", +"# c #7FFF7F", +"$ c #2F902F", +"% c #7EFF7E", +"& c #58B358", +"* c #1B371B", +"= c #1E3C1E", +"- c #61C561", +"; c #2F912F", +"> c #7DFF7D", +", c #1C391C", +"' c #74EC74", +") c #66D166", +"! c #274F27", +"~ c #2F922F", +"{ c #7CFF7C", +"] c #234823", +"^ c #6DE06D", +"/ c #5EC25E", +"( c #306230", +"_ c #2F932F", +": c #7BFE7B", +"< c #6BDD6B", +"[ c #091309", +"} c #0E1D0E", +"| c #73EE73", +"1 c #2F942F", +"2 c #7AFE7A", +"3 c #275227", +"4 c #61C961", +"5 c #51A851", +"6 c #367136", +"7 c #2F952F", +"8 c #173017", +"9 c #73EF73", +"0 c #1D3C1D", +"a c #79FE79", +"b c #265126", +"c c #67D967", +"d c #58B958", +"e c #346E34", +"f c #2F962F", +"g c #78FE78", +"h c #5DC45D", +"i c #1D3E1D", +"j c #214621", +"k c #64D464", +"l c #4C6F55", +"m c #2FA32F", +"n c #6BFA6B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%%&*=-%%%$", +";@>>>,')!>>>;", +"~@{{{]^/({{{~", +"_@:::<[}|:::_", +"1@22234562221", +"7@22282902227", +"7@aaabcdeaaa7", +"f@ggghijkgggf", +"lmnnnnnnnnnml", +" lmmmmmmmmml "}; diff --git a/hdspmixer/pixmaps/b_save.xpm b/hdspmixer/pixmaps/b_save.xpm index c39529b..46e9a18 100644 --- a/hdspmixer/pixmaps/b_save.xpm +++ b/hdspmixer/pixmaps/b_save.xpm @@ -1,30 +1,38 @@ /* XPM */ char const * b_save_xpm[] = { -"13 13 14 1", -" c None", -". c #5C7B1B", -"+ c #505F2F", -"@ c #434343", -"# c #7F817A", -"$ c #DE000B", -"% c #87003B", -"& c #B30020", -"* c #FF6053", -"= c #FF2E28", -"- c #70094F", -"; c #272727", -"> c #004039", -", c #191919", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$%", -"&$*========-;", -"&$$$$$$$$$$-;", -"&$$$$$$$$$$-;", -"&$$$$$$$$$$%;", -"&$=$$$$$$$$%;", -"&$$$$$$$$$$-;", -"&&$$$$$$$$$%;", -"&$=$$$$$$$$-;", -"&$&$$$$$$$&%;", -"&-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +"13 13 22 1", +" c #665959", +". c #694D4D", +"+ c #8F2F2F", +"@ c #E64040", +"# c #FF7F7F", +"$ c #902F2F", +"% c #FF7E7E", +"& c #912F2F", +"* c #FF7D7D", +"= c #922F2F", +"- c #FF7C7C", +"; c #932F2F", +"> c #FE7B7B", +", c #942F2F", +"' c #FE7A7A", +") c #952F2F", +"! c #FE7979", +"~ c #962F2F", +"{ c #FE7878", +"] c #6F4C4C", +"^ c #A32F2F", +"/ c #FA6B6B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%%%%%%%%%$", +"&@**********&", +"=@----------=", +";@>>>>>>>>>>;", +",@'''''''''',", +")@'''''''''')", +")@!!!!!!!!!!)", +"~@{{{{{{{{{{~", +"]^/////////^]", +" ]^^^^^^^^^] "}; diff --git a/hdspmixer/pixmaps/b_solo.xpm b/hdspmixer/pixmaps/b_solo.xpm index ad6c9f5..784fd70 100644 --- a/hdspmixer/pixmaps/b_solo.xpm +++ b/hdspmixer/pixmaps/b_solo.xpm @@ -1,78 +1,169 @@ /* XPM */ char const * b_solo_xpm[] = { -"30 22 53 1", -" c None", -". c #7C2000", -"+ c #690806", -"@ c #272118", -"# c #F4BE91", -"$ c #F44E10", -"% c #23241A", -"& c #151610", -"* c #A85600", -"= c #FF0000", -"- c #F4FDB7", -"; c #532800", -"> c #050406", -", c #322020", -"' c #452524", -") c #3B2323", -"! c #3C2323", -"~ c #3C2423", -"{ c #3B2322", -"] c #322021", -"^ c #191315", -"/ c #231A1C", -"( c #3F2524", -"_ c #EAB1B5", -": c #643534", -"< c #161113", -"[ c #030205", -"} c #231A1B", -"| c #633534", -"1 c #3A2222", -"2 c #FDF9F9", -"3 c #3A2322", -"4 c #FCF9F8", -"5 c #FCF8F8", -"6 c #402423", -"7 c #040205", -"8 c #402524", -"9 c #FDF9F8", -"0 c #161012", -"a c #040305", -"b c #633433", -"c c #402422", -"d c #633533", -"e c #332020", -"f c #321F20", -"g c #332021", -"h c #21191A", -"i c #161013", -"j c #362323", -"k c #140F11", -"l c #040306", -"m c #050306", -"n c #050407", -"............................+@", -".#$$$$$$$$$$$$$$$$$$$$$$$$$$%&", -".*==---===---===-=====---===@&", -".*=-=====-===-==-====-===-==@&", -".*=-====-=====-=-===-=====-=@&", -".*==--==-=====-=-===-=====-=@&", -".*====-=-=====-=-===-=====-=@&", -".*====-==-===-==-====-===-==@&", -".*=---====---===---===---===@&", -"..+++++++++++++++++++++++++;@&", -"@&&&&&&&&&&&&&&&&&&&&&&&&&>&&&", -",'))))))!~!){)~!!)))~))))!)~]^", -"/(_:::::::::::::::::::::::::<[", -"}(|1222)31244)1151)))1222316<7", -"}8:2)3))12))35135)1))9)3)2)60[", -"/8:51))123)1{)2)21))2)3311960a", -"/(b1223121)3)32323))2313))2c<[", -"}(d3)12)213)){212)){2)131)2607", -"/8:)3)233231121123)312))12)60a", -"/(:222e,fg224,ge422,eg222,ghia", -"/8jjjjjjjjjjjjjjjjjjjjjjjjjj07", -"}klmn>l>ll>nm>>nmll>mm>m>n>l[7"}; +"30 22 144 2", +" c #665963", +". c #694D62", +"+ c #8F2F75", +"@ c #E640BA", +"# c #FF7FDD", +"$ c #BF5FA6", +"% c #422139", +"& c #3B1D33", +"* c #984C84", +"= c #FE7FDC", +"- c #AF5798", +"; c #4A2540", +"> c #902F76", +", c #FF7EDD", +"' c #4D2643", +") c #EE76CE", +"! c #F077D0", +"~ c #BC5DA3", +"{ c #5E2E51", +"] c #F177D1", +"^ c #613054", +"/ c #BD5DA4", +"( c #912F77", +"_ c #FF7DDD", +": c #B5599D", +"< c #FD7CDB", +"[ c #6D355E", +"} c #D166B5", +"| c #D568B9", +"1 c #6E365F", +"2 c #922F78", +"3 c #FF7CDD", +"4 c #DA6ABD", +"5 c #542949", +"6 c #2B1525", +"7 c #C45FAA", +"8 c #3E1E36", +"9 c #FE7CDC", +"0 c #412038", +"a c #932F78", +"b c #FE7BDC", +"c c #D969BC", +"d c #4A2440", +"e c #D165B5", +"f c #D467B8", +"g c #6E355F", +"h c #3B1C33", +"i c #942F79", +"j c #FE7ADB", +"k c #DD6ABF", +"l c #EB71CB", +"m c #522746", +"n c #BA59A1", +"o c #612E53", +"p c #F073CF", +"q c #F174D0", +"r c #643056", +"s c #BB5AA1", +"t c #952F7A", +"u c #622F54", +"v c #47223D", +"w c #C05CA6", +"x c #FC79D9", +"y c #AA5293", +"z c #49233F", +"A c #4A2340", +"B c #271321", +"C c #43203A", +"D c #703660", +"E c #6F4C65", +"F c #A32F84", +"G c #FA6BD5", +"H c #665959", +"I c #694D4D", +"J c #8F2F2F", +"K c #E64040", +"L c #FF7F7F", +"M c #BF5F5F", +"N c #422121", +"O c #3B1D1D", +"P c #984C4C", +"Q c #FE7F7F", +"R c #AF5757", +"S c #4A2525", +"T c #902F2F", +"U c #FF7E7E", +"V c #4D2626", +"W c #EE7676", +"X c #F07777", +"Y c #BC5D5D", +"Z c #5E2E2E", +"` c #F17777", +" . c #613030", +".. c #BD5D5D", +"+. c #912F2F", +"@. c #FF7D7D", +"#. c #B55959", +"$. c #FD7C7C", +"%. c #6D3535", +"&. c #D16666", +"*. c #D56868", +"=. c #6E3636", +"-. c #922F2F", +";. c #FF7C7C", +">. c #DA6A6A", +",. c #542929", +"'. c #2B1515", +"). c #C45F5F", +"!. c #3E1E1E", +"~. c #FE7C7C", +"{. c #412020", +"]. c #932F2F", +"^. c #FE7B7B", +"/. c #D96969", +"(. c #4A2424", +"_. c #D16565", +":. c #D46767", +"<. c #6E3535", +"[. c #3B1C1C", +"}. c #942F2F", +"|. c #FE7A7A", +"1. c #DD6A6A", +"2. c #EB7171", +"3. c #522727", +"4. c #BA5959", +"5. c #612E2E", +"6. c #F07373", +"7. c #F17474", +"8. c #643030", +"9. c #BB5A5A", +"0. c #952F2F", +"a. c #622F2F", +"b. c #472222", +"c. c #C05C5C", +"d. c #FC7979", +"e. c #AA5252", +"f. c #492323", +"g. c #4A2323", +"h. c #271313", +"i. c #432020", +"j. c #703636", +"k. c #6F4C4C", +"l. c #A32F2F", +"m. c #FA6B6B", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +". + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +"+ @ # # $ % & * # = - ; ; - = # & # # # = - ; ; - = # # # + ", +"> @ , , ' ) , ! , ~ { ! ] ^ / , & , , , ~ { ! ] ^ / , , , > ", +"( @ _ _ ' : < _ _ [ } _ _ | 1 _ & _ _ _ [ } _ _ | 1 _ _ _ ( ", +"2 @ 3 3 4 5 6 7 3 8 9 3 3 3 0 3 & 3 3 3 8 9 3 3 3 0 3 3 3 2 ", +"a @ b b b b c d b [ e b b f g b h b b b [ e b b f g b b b a ", +"i @ j j k j l m j n o p q r s j h j j j n o p q r s j j j i ", +"t @ j j u h v w j x y z A y x j B C C D x y z A y x j j j t ", +"E F G G G G G G G G G G G G G G G G G G G G G G G G G G F E ", +" E F F F F F F F F F F F F F F F F F F F F F F F F F F E ", +"H I J J J J J J J J J J J J J J J J J J J J J J J J J J I H ", +"I J K K K K K K K K K K K K K K K K K K K K K K K K K K J I ", +"J K L L M N O P L Q R S S R Q L O L L L Q R S S R Q L L L J ", +"T K U U V W U X U Y Z X ` ...U O U U U Y Z X ` ...U U U T ", +"+.K @.@.V #.$.@.@.%.&.@.@.*.=.@.O @.@.@.%.&.@.@.*.=.@.@.@.+.", +"-.K ;.;.>.,.'.).;.!.~.;.;.;.{.;.O ;.;.;.!.~.;.;.;.{.;.;.;.-.", +"].K ^.^.^.^./.(.^.%._.^.^.:.<.^.[.^.^.^.%._.^.^.:.<.^.^.^.].", +"}.K |.|.1.|.2.3.|.4.5.6.7.8.9.|.[.|.|.|.4.5.6.7.8.9.|.|.|.}.", +"0.K |.|.a.[.b.c.|.d.e.f.g.e.d.|.h.i.i.j.d.e.f.g.e.d.|.|.|.0.", +"k.l.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.l.k.", +"H k.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.k.H "}; diff --git a/hdspmixer/pixmaps/b_zlm.xpm b/hdspmixer/pixmaps/b_zlm.xpm index 6e9c6e9..e86e830 100644 --- a/hdspmixer/pixmaps/b_zlm.xpm +++ b/hdspmixer/pixmaps/b_zlm.xpm @@ -1,27 +1,38 @@ /* XPM */ char const * b_zlm_xpm[] = { -"13 13 11 1", -" c None", -". c #000D00", -"+ c #000500", -"@ c #000000", -"# c #333333", -"$ c #CC66CC", -"% c #660066", -"& c #99FFFF", -"* c #FF00FF", -"= c #FF99FF", -"- c #990099", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$%", -"$$&********$%", -"$**========$%", -"$**========$%", -"$**========$%", -"$*&========$%", -"$**========$%", -"$-*========$%", -"$*&========$%", -"$**=======*$%", -"$$$$$$$$$$$%%", -"%%%%%%%%%%%%%"}; +"13 13 22 1", +" c #665966", +". c #694D69", +"+ c #8F2F8F", +"@ c #E640E6", +"# c #FF7FFF", +"$ c #902F90", +"% c #FF7EFF", +"& c #912F91", +"* c #FF7DFF", +"= c #922F92", +"- c #FF7CFF", +"; c #932F93", +"> c #FE7BFE", +", c #942F94", +"' c #FE7AFE", +") c #952F95", +"! c #FE79FE", +"~ c #962F96", +"{ c #FE78FE", +"] c #6F4C6F", +"^ c #A32FA3", +"/ c #FA6BFA", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%%%%%%%%%$", +"&@**********&", +"=@----------=", +";@>>>>>>>>>>;", +",@'''''''''',", +")@'''''''''')", +")@!!!!!!!!!!)", +"~@{{{{{{{{{{~", +"]^/////////^]", +" ]^^^^^^^^^] "}; diff --git a/hdspmixer/pixmaps/buttons.xpm b/hdspmixer/pixmaps/buttons.xpm index 3e3f44f..e2b7dad 100644 --- a/hdspmixer/pixmaps/buttons.xpm +++ b/hdspmixer/pixmaps/buttons.xpm @@ -1,513 +1,596 @@ /* XPM */ char const * buttons_xpm[] = { -"76 253 257 2", -" c None", -". c #C08480", -"+ c #FFFFFF", -"@ c #FDF9F9", -"# c #84C080", -"$ c #9F9FA0", -"% c #B5B6B5", -"& c #AAAAAA", -"* c #A7A8A7", -"= c #A0A8A0", -"- c #A5A6A5", -"; c #A0A1A0", -"> c #9FA0A0", -", c #A0A09F", -"' c #9FA09F", -") c #A09F9F", -"! c #909290", -"~ c #979898", -"{ c #9C9B9C", -"] c #9D9D9D", -"^ c #999A99", -"/ c #939993", -"( c #969996", -"_ c #919491", -": c #959695", -"< c #929592", -"[ c #8B918C", -"} c #8E918E", -"| c #888D87", -"1 c #8B8D8B", -"2 c #898D89", -"3 c #8A8E8A", -"4 c #868B86", -"5 c #858A85", -"6 c #858A85", -"7 c #818881", -"8 c #828282", -"9 c #818681", -"0 c #7F8580", -"a c #80867F", -"b c #C3C111", -"c c #999710", -"d c #8D8E0F", -"e c #7FD477", -"f c #60CA56", -"g c #64B060", -"h c #7F887F", -"i c #7E847E", -"j c #7D827D", -"k c #7F807F", -"l c #7A817A", -"m c #708070", -"n c #4DAF42", -"o c #4E954A", -"p c #43983B", -"q c #C05350", -"r c #906230", -"s c #855B2D", -"t c #8B5E2F", -"u c #8A5D2E", -"v c #9F2026", -"w c #626360", -"x c #6E726E", -"y c #757A75", -"z c #787F78", -"A c #747B74", -"B c #757D75", -"C c #727A72", -"D c #717971", -"E c #707870", -"F c #70706F", -"G c #707060", -"H c #61686D", -"I c #696C69", -"J c #6C6F6C", -"K c #6F6F6F", -"L c #646C65", -"M c #656A65", -"N c #626562", -"O c #626561", -"P c #5F685F", -"Q c #5B605B", -"R c #5E615E", -"S c #506050", -"T c #585C57", -"U c #5C5F5C", -"V c #5A5D5A", -"W c #5B5E5A", -"X c #595C59", -"Y c #585B58", -"Z c #545954", -"` c #565956", -" . c #565A56", -".. c #555855", -"+. c #545753", -"@. c #545754", -"#. c #515651", -"$. c #535653", -"%. c #525552", -"&. c #515451", -"*. c #515551", -"=. c #505450", -"-. c #505150", -";. c #515351", -">. c #505350", -",. c #50534F", -"'. c #50584F", -"). c #4F584F", -"!. c #4C504B", -"~. c #4F544F", -"{. c #4E524D", -"]. c #4E534E", -"^. c #4F534F", -"/. c #4F524F", -"(. c #4E524E", -"_. c #4E504E", -":. c #4F504F", -"<. c #4E514E", -"[. c #4D524D", -"}. c #4C514C", -"|. c #4D514D", -"1. c #4D504D", -"2. c #4C504C", -"3. c #4B504B", -"4. c #405040", -"5. c #4C4F4B", -"6. c #4D4E4D", -"7. c #4C4E4C", -"8. c #4C4F4C", -"9. c #4A4E49", -"0. c #4A4F4A", -"a. c #4B4F4B", -"b. c #4B4E4B", -"c. c #4A4E4A", -"d. c #4B4C4B", -"e. c #4A4D4A", -"f. c #494E49", -"g. c #484D48", -"h. c #494D49", -"i. c #494C49", -"j. c #484C48", -"k. c #494A49", -"l. c #484A48", -"m. c #484B48", -"n. c #484C47", -"o. c #444843", -"p. c #474C47", -"q. c #464A45", -"r. c #464B46", -"s. c #474B47", -"t. c #474A47", -"u. c #464A46", -"v. c #464846", -"w. c #464946", -"x. c #454A45", -"y. c #444944", -"z. c #454945", -"A. c #454845", -"B. c #444844", -"C. c #434843", -"D. c #404840", -"E. c #444743", -"F. c #454645", -"G. c #454745", -"H. c #444744", -"I. c #424641", -"J. c #424742", -"K. c #434743", -"L. c #434643", -"M. c #424642", -"N. c #424542", -"O. c #414641", -"P. c #404440", -"Q. c #414541", -"R. c #414441", -"S. c #404140", -"T. c #404340", -"U. c #437F3F", -"V. c #634621", -"W. c #775428", -"X. c #714F25", -"Y. c #40433F", -"Z. c #40483F", -"`. c #7F7D0E", -" + c #706E0D", -".+ c #65660D", -"++ c #377631", -"@+ c #3B403B", -"#+ c #3F443F", -"$+ c #3D423D", -"%+ c #3F423F", -"&+ c #3E413E", -"*+ c #3D413D", -"=+ c #325F2F", -"-+ c #2E5F2A", -";+ c #2B5A27", -">+ c #2B5127", -",+ c #295327", -"'+ c #244422", -")+ c #274A25", -"!+ c #274923", -"~+ c #6F202E", -"{+ c #402423", -"]+ c #48341F", -"^+ c #553C1C", -"/+ c #2B3032", -"(+ c #333838", -"_+ c #3C3F3B", -":+ c #3E3F3E", -"<+ c #3C3F3C", -"[+ c #393E39", -"}+ c #3B3F3B", -"|+ c #3A3D3A", -"1+ c #393D39", -"2+ c #383B38", -"3+ c #373C37", -"4+ c #363A36", -"5+ c #303F30", -"6+ c #323535", -"7+ c #333533", -"8+ c #303730", -"9+ c #2B2F31", -"0+ c #2F322F", -"a+ c #223F20", -"b+ c #3D2423", -"c+ c #3B2323", -"d+ c #352222", -"e+ c #2B2C2B", -"f+ c #2F2F2F", -"g+ c #202F2F", -"h+ c #202720", -"i+ c #361F2B", -"j+ c #35271C", -"k+ c #3D3D0A", -"l+ c #35340A", -"m+ c #1B341A", -"n+ c #1A2718", -"o+ c #231A1C", -"p+ c #1E1D11", -"q+ c #161A16", -"r+ c #161113", -"s+ c #111111", -"t+ c #0F1710", -"u+ c #100F10", -"v+ c #18100D", -"w+ c #0B140A", -"x+ c #180F0D", -"y+ c #110E0E", -"z+ c #000F0D", -"A+ c #090909", -"B+ c #0F0F0F", -"C+ c #00070F", -"D+ c #050905", -"E+ c #040306", -"F+ c #050406", -"G+ c #060606", -"H+ c #000000", -"Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.} 2+", -"G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G 8 e+", -"& = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = y q+", -"; ; 7 :.f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+P { ; ; ; F A+", -"; ; 7 ).'.'.:.:.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.'.4.:.).D.:.:.:.4.D.D.4.4.4.4.4.).4.D.:.4.:.D.D.] ; ; ; K G+", -"; ; 7 ).y R W N N Y Y M W N M V M X X R Q O R X R I R M O X V Z M U w I N V M %. .R N M Y R I R ` Z $.M w N W M N R I w ` O R N O M Y M R.G.- ; ; ; K G+", -"; ; 7 ).@.].c.b.U ..(.a.%.>.e.i.1.c.x.*.a.%.>.` &.X i.@. .*.s.i.1.b.<.%.b.=.=.a.2.` 8...` {.L.w.j. .h...w <.%.Z (.=.t.(.t.0. .%.*.K.B.S.H.S.& ; ; ; K G+", -"; ; 7 ).s.2.m.A.X A.8.s.[.^.h.M.R.M.#++ + + N.}+<.+ + + ].r.(.e.1.h.$.a.$.Q.+.0.}+t.8.|++ (.U 1.s.P.a.m.(.L.*+C.[.2.i.8.c.y.f.J.f.Q.A.*.L.N.& ; ; ; K G+", -"; ; 7 ).R %.B.8.=.>.K.^.C.^.A.s.>.h.}.+ + + <.w.i.+ + + [.3.*+/.%+w.%.T $.V @+O.h.w.t.+ + u.u.T.u.M.|.<.|.*+a.[+].K.m.H.@.!.~.+.C.}+P.<+e.|+& ; ; ) K G+", -", > 7 ).Z z.<.<.2.*+e.|+~.B.j.B...|.].+ + + + }++ + + + ].g.+ + + j.$.z./.+ + + + $.+ + + + X 1.h.+ + + + &.T + + + + H.B. .].g.x.2.e.K.<+&+& ; ' ; K G+", -", , h ).T s.^./.Y.T.z.Y.].K.b.%.` h.J.+ + + + L.+ + + + #++ M.m.+ + e.B.+ + 3.P.+ + R.+ + j.P.&.+ + =.t.+ + z.+ + *.A.1.b.}+#+a.@+u.*+=.H.7+& ; $ ; K G+", -") > 7 ).X u.t.<+s.<.%+T 0.|.(.c.R.s.}++ + b.+ (.+ =.+ + =.x.+ + + + w.B.+ + + + 2.i.*++ + ..(.1++ + + + + + a.+ + M.L.H.u.C.g.0.}+s.Y h.R.Q.& $ > ) K G+", -") $ 7 ).R K.K.R.B.i.s.s.r.|+m.c.w.h.x.+ + T.+ + + *++ + x.+ + *++ + L.K.%+K.+ + + + }++ + u.(./.+ + (.1+^.t.M.+ + K.t.1.A.o. .Q.g.Q.z.a.R.7.& ) ' $ K G+", -"' $ 7 ).X +.*+<.%.1.N.s.x.h.(.2.L.c.g.+ + A.+ + + u.+ + J.+ + 2++ + w.=.+ + }.r.+ + ` + + P.j.&.+ + }+>.+ + (.+ + u.e.w.|.3.x.x.#.M.%+h.v.*+& $ $ > K G+", -"' $ 7 ).U ..^.....%.c.M.T K.i.*.i.h.+.+ + 8.}++ <.^.+ + ].J.+ + + + >.B.>.+ + + + 1.&.}++ + u.i.=.+ + + + %+=.+ + =. .$.X @+J.0.r.u.M.+.T.:+& $ ) $ K G+", -"$ ' h ).>.*+a.M.i.%+m.A.b.(.%+E.*.s.#.C.Q.u.@.}+L.i.B.P.J.y.s.<+/.M.<.b.2.P.p.#+%.Q.R.c.8.m.&.s.M.3+h.t.A.X z.}.r.2.^.e.Q.#+P.#+j.u.1+P.4+z.& $ $ $ K G+", -"$ $ h ).+.c.B.z.=.4+<.z.*+Q.8.m.<+h.^.+.*+^. .A.>.1.|+c.h.^.+.P.M.>.R.m.z.=.h.B.[.(.P.T.A.%+<.K.a.%.` m.L.Q.j.u.c.O.s.b.8.}.#+y.J.s.L.H.H.<+& ' $ $ K G+", -"$ ' 7 ).2.h.M.b.1+(.r.r.c.a.R.u.w.Q g.g.s.+.&+m.&.P.R.1+y.[+^.M.P.&+8.P.w.Q.r.$+u.j.&+m. .*.u.%+h.z.h.&+2.N.^.C.T 2.}+h.}+#+Y.K.B.].x.Q.>.S.& $ $ $ K G+", -"' $ h ).X (.(+/+/+9+9+/+/+/+9+9+9+/+/+/+9+/+/+/+/+/+/+/+/+/+/+9+9+/+6+V A.%.(+6+6+6+6+6+6+6+6+6+6+6+(+(+6+6+(+6+(+6+6+6+6+(+6+6+(+(+(+H L.|+& $ $ $ K G+", -"$ $ h ).R a.W.r s s s s s s s s s s s s s s s s s s s s s s s s s s X.j+w.s.d+{+c+c+c+c+c+c+c+b+c+c+c+c+b+c+c+c+c+c+b+c+c+c+c+c+c+b+d+r+t.S.& $ $ ' K G+", -"$ ' h :...a.^+W.+ u t u t u + u + t t t + u + + + + + u + + + + u W.j+x+A.Q.o+{+c+@ @ @ c+c+c+@ @ @ c+c+c+@ c+c+c+c+c+@ @ @ c+c+c+{+r+E+1.:+& $ ' ' K G+", -"] $ h ).R 2.^+W.+ + u u t + + u + t u u + u u u + u u u + u u u u W.j+x+R.M.o+{+@ c+c+c+c+c+@ c+c+c+@ c+c+@ c+c+c+c+@ c+c+c+@ c+c+{+r+E+&+4+& ' $ ] K G+", -"] ] h :...%.^+W.+ + u u t + + u + u t u + u u u + u u u + t u u t W.j+x+m.+.o+{+@ c+c+c+c+@ c+c+c+c+c+@ c+@ c+c+c+@ c+c+c+c+c+@ c+{+r+E+N.F.& ] $ ' K G+", -"] ] h ).O a.^+W.+ t + u + u + u + t u u + u u t + u u u + + + + t W.j+x+<.Q o+{+c+@ @ c+c+@ c+c+c+c+c+@ c+@ c+c+c+@ c+c+c+c+c+@ c+{+r+E+T.v.& ] ] ] K G+", -"] ] h :.2.*.^+W.+ t + u + u + t + u u u + t u u + u u u + u t u t W.j+x+<.&+o+{+c+c+c+@ c+@ c+c+c+c+c+@ c+@ c+c+c+@ c+c+c+c+c+@ c+{+r+E+H.:+& ] ' ] K G+", -"] ] h :.*.|.^+W.+ u u + t u + t + u t u + u u u + u u u + t u t u W.j+x+b.=.o+{+c+c+c+@ c+c+@ c+c+c+@ c+c+@ c+c+c+c+@ c+c+c+@ c+c+{+r+E+%+:+& ] ] ] K G+", -"] ] h :.O h.^+W.+ t u + t u + u u + + + u u u u + u t u + + + + t W.j+x+..j.o+{+@ @ @ d+d+d+d+@ @ @ d+d+d+@ @ @ d+d+d+@ @ @ d+d+c+{+r+E+v.H.& ] ] ] K G+", -"] ] h :.%.(.^+W.V.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.]+j+x+` z.o+{+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+r+E+t.v.& ] ] ] K G+", -"] ] h :.W |.^+j+v+x+v+v+v+v+v+v+v+x+v+x+x+v+v+v+v+v+v+v+v+v+v+v+v+x+x+x+a.2.o+r+E+E+F+F+E+F+E+E+F+F+E+F+F+F+E+E+E+F+E+E+F+E+F+F+F+E+E+E+t.Q.& ] ] ] K G+", -"] ] h :...d.v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+S.d.E+F+E+E+F+E+F+F+F+E+F+F+E+F+F+F+E+E+E+F+E+E+F+E+F+F+F+E+E+E+2+%+& ] ] ] K G+", -"] ] h :.M.|.&+&.>.H.*+w.z./.5.|.z.0.}.P.^.b.*+b.A...a.].].B.h.@.s.H./.h.^.O.~.c.<+N.s.i.i.V s.Z %.c...i.j.=.g.}.s.Y.b.j.p.3.O.h.M.>.A.R.|+f+& ] ] ] K G+", -"] ] h :.4.4.8+8+5+f+f+8+8+:+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+8+5+5+5+8+5+8+5+f+8+:+f+5+:+8+f+p+& ] ] ] K G+", -"] ] h :.8+t+B+C+t+C+B+B+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+B+B+B+u+B+B+B+C+B+B+C+B+B+B+u+B+B+B+B+% ] ] ] K G+", -"] ] ; * & % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % & ] ] ] K G+", -"] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] { ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] { ] ] { ] ] ] K G+", -"] ] { ] ] ] ] ] { ] ] { ] ] ] { ] ] ] ] ] ] { ] { ] ] ] ] ] ] ] ] ] ] ] { ] ] ] ] ] { ] { ] ] ] ] ] ] ] ] { ] { ] ] ] ] ] ] { { ] ] ] ] { ] ] { ] ] K G+", -"{ ] h :.f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+P ~ ] ] ] K G+", -"] ] h :.'.'.:.:.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.'.4.:.).D.:.:.:.4.D.D.4.4.4.4.4.).4.D.:.4.:.D.D.^ { { { K G+", -"] { h :.x M x O ;.X O Q @.M U N R X R w R R ;.M U N R M ` U M M w N K M R w R Y I I M w M w W M U O R R x R M M w O w $.I M w N N V J %._.L.; ] { { K G+", -"{ { h :.8.T 2.%.|...@.2.[.e.` +./.(.g...B.>.<.A.b.9.m.u.].^.a.X &.%.1.,.&...[.u.|.@.>.8.e.` .&.h.s.2...&.t.Q.=.s.|.H.(.e.~.Z u.h. .2.@.R.2+- { { { K G+", -"{ { h :.R h.<+H.P.%.H.&+#+Y.|.a.e.|.g.x.M.$.+ + R.u.b.+ + [++ + /.P.T.&+%+ .C.[+c.R.A.&+/.z.c.H.&+*.u.A.u.%.j.p.].c.N.<.c.0.].#.#.}+L.Q.m.7+* { { { K G+", -"{ { h :.T j.h.N.z.&+*+^.Z Q./.K.&+u.#.x.2.t.+ + H.(.$.+ + Z =.e.L.Y H.h.&.h.p.+.+.<.1.}+@.(.^.T.^.^.K.8.*.>.B.].J.(.H.t./.n.[.*.}+*.|.z.L.L.* { { { K G+", -"{ { h :.R Z >./.../.Y <+x.|.%.+.%+h.f.#.M.b./.+ + a.+ + #.p.+ + b.B.i.+ + + + C.u.+ + a.e.+ M.&.+ + 1+L.2.A.c.r.p.B.T.1.c.p.#+g.x.*+w.c.G.*+* { { { K G+", -"{ { h :.O (.*.%+M.1.^.c.[.|+8...w.=.g.r.B.$.N.+ + M.+ + y.#.+ + m...+ + ..a.+ + Y.+ + i.+ + + ..+ + ./.^.R.^.#+f.z.T.8.b.n.O.h. .j.K.B.N.R.* { { { K G+", -"{ { h :.R j.i.$.^./.4+j.~.=. .Z t.z.r.g.B.m.1.+ + B.+ + g.}.+ + &+(.+ + + + + + j.+ + |.+ + + ..+ + .8.}+w.a.#.r.h.A.t.Q.y.J.#+p.z.m.z.t.7+* ^ { { K G+", -"{ { h :. .K...H.(.H.h.a.r.s.R.|.4+(.0.}.Q.%.>.+ + z.+ + P.~.+ + T.<.+ + X %.[.C.%.<.+ + + u.+ + + s.*.1.Z i.M.~.C.Z 1.e.b.n.g.}+O.K.a.j.t.G.* { { ^ K G+", -"^ ^ h :.R Q.w.>.*.i.b.T =.z.h.s.R.+.#.~.j.>.m.M.+ + + s.x.V + + /.h.+ + }++.+ + c.b.+ + + 2.+ + + ^...8.^.w.a.C.].s.m.|+M.x.0.$+~.u.$.|.*+|+* { ^ ^ K G+", -"^ ^ h :.>.a.c.>.X m.h.%.[.M.1.|.b.|.=.#+c.m.w.8.+ + + M.=.#.+ + >...R + + + + C.2.w.+ + A.c.Z + + *+j./.*.>.=.~.y.Y.H.8.$. .r.=.#+M.(.T |+<+* ^ ^ ^ K G+", -"^ ^ h :.1.c.P.Z H./.L.e.8.u.t.P.2.3+[.0.2.M.$.^.e.,.B.^.O.P.^.u.N.Y.1.b.Y.X #.[.K.+./.s.m.i.q.Q.M.(.s.&.1.+.h.O.~.K...<.h.0.p.p.|+Q.H.b.L.&+- ^ ^ ^ K G+", -"^ ^ k :.w =...s.s.i.R.j.z.j.R.A.*+&+=.Z P.(.K.&+A.$.u.(.j.B.0.K.(.$.<.@...%.a.M. .K.h.&.m.m.@.Z ^.|.}+$.1.(.P.^.^.J.a.&./.J.].J.].K.w.<.L.%+- ^ ^ ^ K G+", -"^ ^ k :.*.*.z.8.r.s.V y.(.^.e.2.e.}+#.[.s.c.2.H. .&+8.j.p.3.(.Z |.>.w.a.A.=.g.p.2+Q.s.8.&+=.s.$.(.K.j.T.<+8.Z #+O.Q.P.=.h.p.<+(.(.#+#+u./.e+- ^ ^ ^ K G+", -"^ ^ 7 ).%.u.1+..Q |.g.p.].s./.w.e.h.$+1+%.|.|.L.<+H.%+Y.0.f.M.Y.Q.&.i.e.@.s.x.y.B.K.c.e.&.m.%+t.h.[.c.H.A.m.z.r.}+2.h.j.2+n.z.u.h.$+~.}.&+R.- ^ ^ ^ K G+", -"^ ^ h ).%.s.T /.j.u.3.g.J.M.m.A.N.|.x.3.j.^.a.@.H./.$.|.O.J.z.K.j.8.w.b.1.s.r.=.B.|.*.m.*+R.L.$.B.~.Q i.1.&.c.0.P.s.P.z.^.0.2.Y.Y.*+r.r.T.N.- ^ ^ ^ K G+", -"^ ^ h ).*.^.)+'+a+a+a+a+a+a+a+a+a+'+o =.*.|.M.&.` R 8.z.f.3.K.2.s...A.w.b.Z }.4+<+s.^.%.&.&.%.t.Q.y.2...Y m.*.$+O.|. .Y.s.=.(.(.=.x.~.*.%+G.- ^ ^ ^ K G+", -"^ ^ h :./.2.U.U.U.U.U.U.U.U.U.U.U.U.a+=.u.c.a.&.b.i.1.&+=.*+c.B.Z e.8.e.<+=.0.].s.a.X w.b.b.w.>.s.y.z.|+T.b.|.C.~.z.h.B.*.!.|.u.a.f.C.9.G.%+- ^ ^ ^ K G+", -"^ ^ h )./.%.=+U.# g g g g g g g g m+w+x.P.<+K.m.A.%.H. .x.4+j.|+s.1.T.N.>.u.x.].a.Z c.e.H.<.>.&.|.W c.&+m.*+j.}+C.^.h.=.=.n.u. .B.*+~.I.v.0+- ^ ^ ^ K G+", -"^ ~ h :.R a.=+U.U.U.U.U.U.U.U.U.U.m+w+=.X 2.z.<.L.+ +.C.0.a.*.^.>.R./.w.B.}+=.u.B.*.U L.*+e.L.1.*.x.}+w.t.<.a.O.P.s.a.+.2.I.(.u.z.O.x.&+b.<+- ~ ^ ~ K G+", -"^ ^ h )...K.=+U.U.U.U.U.U.U.U.U.U.m+w+O.j.P.z.$.e.+ V 4+~.a.a.z.8.m.w.1.T x.=.M.B.|.1.m.+ T.e.t.P.[.u.t.` 8.=.~.].c.K.|.a.I.s.*.(.y.*+}.T.l.- ~ ^ ~ K G+", -"~ ~ h :.Z s.=+U.U.U.U.U.U.U.U.U.U.a+w+O.z.m.w.s.&++ z.+ + + %.b.+ + + t.B.r.+ P.N.+ s.+ + + &+/.j.z.B.A.(.1.a.[.g.*+<.@.u.Z 0.~.~...Y 2.v.|+- ~ ~ ~ K G+", -"~ ~ h :.1.(.=+U.g U.U.U.U.U.U.U.U.a+w+0.s.w.<.H.&.+ %.+ r.a.+ $.+ t.+.+ u.=.+ j.@.+ e.4++ &.w.w.Y.M.^.e.j.&.(.#++.a.$.%+@.!.x...].^.u.a.&.|+- ~ ~ ~ K G+", -"~ ~ h :.+...=+U.U.U.U.U.U.U.U.U.U.m+w+O.h.m.H.K.L.+ z.+ f.1++ Y + w.c.+ c.0.+ 1+m.+ |.H.+ Z L.L.Z j.(.b.(.1+s.J.].1+t.1.s.O.}.p.@+Z %.K.H.%+- ~ ~ ~ K G+", -"~ ~ h :.V h.=+=+U.U.U.U.U.U.U.U.U.a+w+0.=.*+&+A.w.+ (.+ 0.M.+ N.+ b.h.+ s.P.+ u.H.+ i.b.+ 2.w.&+2.h.|.e.^.>.s.p.Z c.R.m.<.{. .z.[.u.P.2.2+|+- ~ ~ ~ K G+", -"~ ~ h :.=.=.=+U.g U.U.U.U.U.U.U.U.m+w+f.j.%.L.j.i.+ P.+ J.|.+ b.+ + + &+j.#++.+ + + h.b.+ + i.R.|.4+|.b.(.L.+.].f.(.H./.Q.P.=.r.O.Y.<.c.|+i.- ~ ~ ~ K G+", -"~ ( h :.Z u.=+U.=+U.U.U.U.U.U.U.=+a+w+x.a.i.&.b.$.K.<.%.3.O.M.w.A.+ b.z.e.2.x.r.=.A./.&.t.<+P.N.%.K.^.W j.8.=.g.0.P.m.N.A.=.3.2.$+&+*+s.N.2+- ~ ( ( K G+", -"( ( h :.U a.=+m+w+w+D+D+D+D+D+D+w+D+w+#+z.m.>.s.<.h.*+u.p.C.c.i.8.+ T.+.w.2.J.=...@.w.h.*+(.K.t.z.|.B.%.u.b.(.p.}+Y.m.@.a.*+y.[+ .P...M.T.<+; ( ( ( K G+", -"~ ( h :.X |.w+H+H+H+H+H+H+H+H+H+H+H+H+y.z.R.%.&.N.^.|+^.C.}.Q.|+X m.$.|.>.*+[.J.Y.L.&.t.8.Z B.L.^.&+Q.N.z.A.B.3.r.K.i.H.H.].#+$++. .K.z.R.S.; ( ~ ( K G+", -"( ( h :.T %.Q.c./.1.&+>.%+z.&.T %.V *+O.h.u.t.M.$.q.z.P.x.O.2.|.1.<+e.}+^.z.g.J.+.2.>.%.L._+P.}+*.Q.(.e.,.h.2.~.*+s.+.A.(.#.[+[.<++.e.V m.%+; : ( : K G+", -": ( h :. .a.c.u.2./.H.j.h.M...t.%.u.^.s.#+P.a.>.8.}+|.z.+.%.P.Q.=.&+m.2+u.j.(.j.#.&+j.$.<+&.N.^.Z j.R.A.b.P.s.h.^.r.(.i.<+y.p.C.0.j.b.1.|+H.; : ( ( K G+", -"( : h :.T s.s.&.[.M.].J.j.3+t.s.i.}+y.#+a. .c.m.&.a.&+(.r.~.P.a.M.$.%+s.e.^.g.}.Q.K.a.w.&.2.^.&+z.2.T 8.|.>.z.Z f.2+ .(.c.$+h.Y.s.~.#.c.R.&+; ( ( ( K G+", -": ( h :.R P.2+8.Y.Z 3.=.#+(.t.i.%.4+C.C.2.+.h.b.i.i.` |.=.$+h.h.Y.m.&.}+%.a.x.[+j.j.}+t.A.t.m.L.%.=.M.>.}+>.z.}.O.1+T s.*.!.=.&+^.J.#+J.b.|+; : : : K G+", -": : h :.O M.K.L.Q.*.f.p.}+(./.R.N.j.Z 4+K.c.*.1.L.T.w.M.x.[+(.c.2.>.e.1.i.Q.x.y.j.s.a.<+L.&.A.>.B.y.B.e.H.L.c.0.J.|.}+K.M.3+..R |.g.p.].N.R.; : : : K G+", -": : h :.U 2.|.e.|.B.+.g.}.%.N.8.1.Q.=.~.Y.Q.Q.w.e.i.i.s.[+r.j.B.h.m.A.Y N.P.[.O.}+&+^.m.4+T.%+%.}+J.K.T.H.&+M.@+#+1+*+u.B.}.^.z.z.[.3+{.N.4+; : : : K G+", -": : h :...M.j.R.Q.c.#.+.O.Q.L.R.b.u.].3.^.(.s.L.8.H.i.c.g. .=.u.2.8.&.b.i.2.*+=.<+c.u...e.8.e.<+=.3.=.e.<.V z.g.g.K.|.u.K.o.1+P.c.3.C.=.N.&+; : : : K G+", -": : h :.I Y.)+'+a+a+a+a+a+a+a+a+a+'+o 3.}+h.}+&.w.e.A...3.].*.M.<+N.*+%.L.^.f.].j.c.=.%+e...w.>.+.}+^.&+..b.Q [.}.T a.j.<+Z a.%.*. .#.g.}+|+; : : : K G+", -": : h :.O X U.U.U.U.U.U.U.U.U.U.U.U.a+0.<+^.B.m.i.&+e.1+C.f.K.*.s.w.b.i.A.2.x.#+a.s.z.A.e.>.H.N.B.0.1+N.i.m.|.*+].(.s.B.^.0.}+*+T p.@+J.8.7+; : : : K G+", -": : h :. .+.=+U.# g g g g g g g g m+w+P.Y.P.P.e.m.H.i.c.g. .=.u.2.8.&.b.i.2.*+=.<+c.u...e.8.e.<+=.3.=.e.<.V z.g.g.K.|.u.K.o.1+P.c.3.g.I.G.4+; : : : K G+", -": : h :.*.u.=+U.U.U.U.U.U.U.U.U.U.m+w+*+*+m.j.h.e.+ + + + $+2.+ =.i.&.8.<.c.#.f.*.Y...1.+ i.1.<+a.[.U <.m.N.2.p.}.Q.}+B.|.+ c.|.a.(.|.K.*+|+; : : : K G+", -": : h :.O j.=+U.U.U.U.U.U.U.U.U.U.m+w+J.+.8.>.%.L.+ b.^.+ x.T + s.*+..$.m.|+f.g.z.A.K.+.+ L.i.<.<+2.h.i.i.}++.y.y.*+N.b.e.+ j.%.M.T /.j.T.&+; : < : K G+", -": ' h :.U a.=+U.U.U.U.U.U.U.U.U.U.a+w+y.B.N.i.T.&++ R.<++ P.|.+ >.+ + + + h.#.+ |.%.}++ + + + W ^.|.+ + + + .f.+ + .$.h.+ x.C.+ z.c.|.4+N.; : : < K G+", -": ' h :.V M.=+U.g U.U.U.U.U.U.U.U.a+w+ .+.e.b.c.w.+ + + + f.a.+ <.*+b.(.+ s.}.g.+ b.+ b.+ %.*.+ P.&+j.e.%.+ c.+ C. .+ t.H.+ }.+ x.=.>.h.*+2+; < < < K G+", -"< ' h :.W %.=+U.U.U.U.U.U.U.U.U.U.m+w+0.1+e.<.U 1.+ N.a.3.*+(.+ b.c.+ + + |.[. .+ %.+ P.+ M.c.+ %.j.Q.+ + + z.+ C.z.i.i.%.+ + + 4+u.h.%+T.7+; < < < K G+", -"< ' h :.<.B.=+=+U.U.U.U.U.U.U.U.U.a+w+#...L.w.u.8.+ R.2.p.}.Q.+ A.+ <.c.+ a.y.g.+ i.+ A.+ h.a.+ V 3++ 1.|.+ a.+ C.c.+ t.&.+ x.+ 3.2+R.s.R.&+; < < < K G+", -"< ' k :.O |.=+U.g U.U.U.U.U.U.U.U.m+w+r.u.%+>.1.N.+ T.B.g.0.Y.+ w.+ + + + B.x.r.}++ 1+B.+ + + t.z.h.+ + + + P.3.+ + L.i.(.+ P.C.+ M.K.*+i.2+; < < < K G+", -"< ' k :.W M.=+U.=+U.U.U.U.U.U.U.=+a+w+[.7+j.>.=.` +.u.z.p.g.B.j.1.^./.E.s.2.f.}.P.+ &+(.T.L./.^.j.c.h.<+/.|.a.~.#++.s.N. .3.[+y.c.%.m.9.T.1+; < < < K G+", -"< ' k :.R K.=+m+w+w+D+D+D+D+D+D+w+D+w+Z 3.*.Y.b.e.&+u.=.|+=.f.u.}+e.i.|+z.B.u.u.+ *.*.N.<.1+<.B.(.K.}+Y t.%.|.=.<+[.K.R.L.~.x.0.#.M.N.1.2+7+' < < < K G+", -"< ' k :.=.c.w+H+H+H+H+H+H+H+H+H+H+H+H+C.*+%+P.(.b.e.1.c.r.J.%.i.^.M.w.b.A.(.}+#+a.<.Q.Q.&+%+` A.}+3.N.A.%+>.z.f.J.<+&.t.A.y.#.p.g.^.a.Q.t.&+' < < < K G+", -"_ ' k :.U j.j.^.N.b.<.2.%+^.&+z.*.T #.T }+M.b.u.w.M.+.u.x.#+B.M.<.|.8.<+c.}+~.C.s.K...2./.%.K.}+Q.}+>.R.(.c.=.f.0.(.*+i.+.C.[.#.|+(.*+$.H.b.' < _ < K G+", -"_ ' k :.%.}+a.=.w.b.i.j. .b.t./.&+&.L.N.(.&.8.%./.|+<.L.8.L.a.%+L.8.&.R.L.R.L.w.&+b.8.8.%+&+1.&+<+&.u.&.m.<+/.8.1.h.&.<+i.Q.M.2.j.|+/.+.7+L.' _ _ _ K G+", -"_ ' k :.%.h.A.m.c.A.i.a.r.s.*.u./.*.x.}+&+R.%.K./.Q m.2.].g.c.R.i.Q.A.*.8.2.*+$+<+t.m.B.<.c.%.Y +.2.M.<+|.` z.~.*+|.N.i.h.4++.#+p.P.$.a.e.|+' _ _ _ K G+", -"_ ' k :.Z (.Q.t.j.>.s.(.g.<+w.h.A.2.g.0.|.T.$.w.8.B.%.T +.y.j.*+<.L.t.z.<.z.#.y.h.1.i.<+R.h.Z 8.&+B.1+ .Q...K.y.f.c.t.@.i.g.y.Q.O.c.j.2.v.0+' _ _ ! K G+", -"_ ' k :.Z c.t.@.|.N.1.u.3.j.=.K.b.z.p.#+2.L.>.Q.e.c.$.K.p.g.2.1.T.+.L.^.L.a.$+#.s.*+m.P.@.B.^.H.c.a.u.t.Q.1.3+}.0.2.N.$.^.f.~.y.].Q.N.=.R.7+' _ _ ! K G+", -"! ' k :...u.c.&.(.b.2.4+W B.L.*.<.|+[.g.2.8.e.L.e.2.b.s.O.J.u.8.<.<.@.u.%+P.r.r.s.H.t.&.<.M.=.H.h.4+u.t.h.}+z.#+3. .i.t.>.9.$+(.r.=.Q.2.<+F.' _ ! ! K G+", -"! ' k :.<. .T. .1+8.e.+.}.P.Q.^.<.K.1+f.2.w.e.h.%.M.8.s.x.#+u.8.>.c.U z.A.*+x.[.2+N.%+z.N.c.^.&.T Q.(.m.z.m.s.#+3.}+i.$.%.}.#.0.].z.&.M.t.|+] ! ! ! K G+", -"! ' k :.R u.)+'+a+a+a+a+a+a+a+a+a+'+o 0.j.H.8.>.A.*.8.j.r.~.u.L.L.<.b.s.m.(.#.[.<+R.@.b.A.K.^.b.u.z.|.H.T .K.r.p.K.*+/.A.q.].c.].s.Y.(.R.7+' ! ! ! K G+", -"! ' k :.+.T U.U.U.U.U.U.U.U.U.U.U.U.a+#+z.T.w.h.t.z.i.c.}+}.Q.i.1.V &.M.b.P.[.#.B.R.i.&+w.=.K.8.3+*.|.i.+.L.B.r.p.&+8.@.^.0.g.y.y.(.A.%+2+7+] ! ! ! K G+", -"! ' k :.M =.=+U.# g g g g g g g g m+w+O.a.t.w.m.t.Z <.M.}.x.c.m.&.L.b.z.i.Q.}.J.(.R.b.e.$.K.h.e.(.|.Y.@.B./.K.f.$+%.m.&+t.P.Z C.].K.h.a.R.<+] ! ! ! K G+", -"! ' k :.<.T =+U.U.U.U.U.U.U.U.U.U.m+w+P.s.B.T.Q.H.L.+ + + x.Y.h.|+j.>.|+%.(. .r.z.j.N.j.A.i.I.z.&+*+^.@.I.(.K.$+y.%.u.<.s.C.0.J.|.%./.+./.L.] ! ! ! K G+", -"! ' k :.1.&+=+U.U.U.U.U.U.U.U.U.U.m+w+s.y.B.u.<.8.+ (.c.Y.+ #.u. .b././...T + a.r.a.K.b./.@.T. .+.^.&.$.+ Z Y.(.Q.g.c.%+w.0.y.x.$+^.8.b.l.N.] } ! ! K G+", -"! ' k :.2.a.=+U.U.U.U.U.U.U.U.U.U.a+w+J.M.M.s.w.i.+ }+j.T + z.j.+ b.8.+ }++ + + K.+ + + @.h.+ 8.(.+ s.+ + + j.}.r.Q.a.s.|++.%.B.c.}.r.|.T.v.] } } } K G+", -"} ' k :.T a.=+U.g U.U.U.U.U.U.U.U.a+w+0.h.z.}+A.i.+ b.z.0.+ K.^.+ i.i.+ i.B.+ }.h.+ j./.+ >.+ L.Z + z.H.+ 8.u.y.}.M... .Q.r.h.u.&+[.y.q.i.:+] } } } K G+", -"} ' k :.W z.=+U.U.U.U.U.U.U.U.U.U.m+w+r.Y.*.2.%.e.+ <+R p.+ c.M.+ U 1.+ L.<++ #+|++ B.&.+ 1.+ A.+.+ u. .+ &.|.O.O.|.a.(.|.Q.Y.M.^.].O.o.v.4+] } } } K G+", -"} ' k :.*.V =+=+U.U.U.U.U.U.U.U.U.a+w+#+|.(.B.1.%.+ A.=.J.+ K.z.+ e./.+ <+%.+ y.s.+ M.8.+ <.+ &.Y.+ %.X + W *+O.f.z.z.M.%.y.u.Q.u.O.}.}.t.7+] } } } K G+", -"} ' k :. .=.=+U.g U.U.U.U.U.U.U.U.m+w+C.2.u.j.R.&.<.+ + + g.c.a.a.+ + + m.2.+ + s.+ + + H.1.<.+ + + K./.+ + (.#+P.u.K.a.z.P.u.Z s.~.0.I.%+7+] } } } K G+", -"} ' k 4.1.2.=+U.=+U.U.U.U.U.U.U.=+a+w+O.a.j. .<.%.w.i.M.].}...j.s.*+b.i.N.|.J.J.s.+ z.@.` &.%+A.P.y.K.Y /.%.h.+.}.<++.*.P.Z z.T j.}+3.g.<+L.{ } } } K G+", -"} ' k :.N V =+m+w+w+D+D+D+D+D+D+w+D+w+#.K.+.Y./.L.b.8.Y.x.0.B.z.Y.%.<.<.>.*.W g.j.+ (...8.@.w.$.h.g.h.b.>.H.a.x.C.2.u.s.&+].|.K.T }.g.0.t.&+{ } } } K G+", -"} ' k :.R Q.w+H+H+H+H+H+H+H+H+H+H+H+H+~.j.^.j.H.>.w.1.s.x.V B.|.^.b.1.b.<++.x.[.2+N.%+z.N.c.^.&.T Q.(.m.z.m.s.#+3.}+i.$.%.}.#.0.].z.&.M.t.|+] 3 3 3 K G+", -"[ ' k 4.+.a.a.}+s.T g.x.g.h.b.1.b.}+p.1+2.K.2+/.V ..e.^.0.}.3+z.B.&.<+i.<.j.P.3.B.c.m.^.R.h.K.s.P.2.N.<.P.h.h.#.P.u.j.1.2.$+#.O.|.Q.e.&+8.|+^ 3 3 3 K G+", -"[ ' k :.R 2+h.>.=.T #.x.C.j.b.t.e.|.].].M.u.2.b./.|+<.&+[.#+Q.|.=.i.8.b.&+c.i.*.w.I.T j.#.P.P./.&+i.1+s.j.<.h.%.&+m.+.*+%.O.].%.t.R.A.0.P.s.^ 3 3 3 K G+", -"[ { k 4.R a...<.*+..=.P.Z z. .i.*+|.g.#+(.*.Q./.w.e.A.u.Q p.&+a.2.>.%.i.N.2.H.2+Y.H.T.R.2+m.H.A.m.e.+.N.N.R.t.1.H.c.&+b.N.R.R.N.u.<+F.S.|+*+^ 3 3 3 K G+", -"[ { m 4.U u.*.1.^.%.g.r.3.*+@.%+m.+.0.y.=.u.c.` }+b.4+1+g.y.*+Q.=.b.i.%./.Q.5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+8+5+5+5+8+5+8+5+f+8+:+f+5+:+8+f+p+] 3 3 3 K G+", -"[ { m :.R h.R <+K.|.p.J.].c.<+m.>.^.r.y.}+j.*./.t.<.R.3+].y.c.u.^.>.m.i.A.*.8+t+t+t+B+B+B+B+B+u+B+B+B+B+B+B+u+B+B+B+C+B+B+C+B+B+B+u+B+B+B+B+3 3 3 3 K G+", -"3 { m 4...^.&+T.K.c.0.#+g.u.>.1.%+*.J.x.u.}+h.|+w.8.w.+.x.C.j.u.B.1.m.R.<.h.4.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 K G+", -"1 { m 4.=.|.^.1.&+=.$+y.=.T @.W &+K.f.x.z.Q.Z t.t.R.t.K.}.}.a.}+a.<+&.w.e.B.4.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 K G+", -"1 { m 4.+.=.1.^.%.g.r.3.*+@.%+m.+.0.y.].^.B.Q.w.1...Y s.~.$+Q.|.T R.e.%./.|.8+8+8+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+P 3 3 3 3 K G+", -"3 { m 4.T 2.c.&.(.b.2.4+W B.L.*.<.|+[.f.j.w.u.K.$.,.N.j.}.}+a.m.h.j.}++.w.u.'.'.4.:.).D.:.:.'.4.:.).D.:.:.:.4.D.D.4.4.4.4.4.).4.D.:.4.:.D.D.^ 3 3 3 K G+", -"3 { m 4.*.2.T. .1+8.e.+.}.P.Q.^.<.K.1+x.K.b.T s.%.A.Z %+3.P.K.c.i.*.w.I.T j.#.P.P./.&+i.1+s.j.<.h.%.&+m.+.*+%.O.].%.t.R.A.0.P.s.g.^.s.(.e.T.^ 3 3 3 K G+", -"3 { m 4.T 2.)+'+a+a+a+a+a+a+a+a+a+'+o @+z.<.|+K.%+t.}.u.3+c.}+x.a.Y.R.<.A.u.=.|...g.j.K.1.<./.8.V c.*+t.}+t.}+z.*.a.8...&+g.Q.V u.&+u.=.i.F.^ 3 3 3 K G+", -"3 { m 4.V =.U.U.U.U.U.U.U.U.U.U.U.U.a+y.j.$.j.z./.b.Y s.~.$+Q.|.T.K.c.0.#+g.u.>.1.%+*.J.&+T.K.c.0.#+g.u.>.1.%+*.J.z.R.R.e.*+Y.P.=.B.s.a.I.:+^ 3 3 3 K G+", -"3 { k :.R z.=+U.# g g g g g g g g m+w+#+2.e.c.|.e.c.i.*.w.I.T j.#.P.P./.&+i.1+s.j.<.h.%.&+m.+.*+%.O.].%.t.R.A.0.P.s.A.%.t.n.=.2.K.|.c.a.i.F.~ 3 2 2 K G+", -"3 { k 4.R <+=+U.U.U.U.U.U.U.U.U.U.m+w+~.P.<.|+^.A.w.+ + x.j.&+u.P.<.t.w.+ f.].^./.2.z.<.{.E.t.=.|.u.+ /.A. .[.#.A.(.&+&+$. .B.u.s.2.*+Y.%+:+( 3 2 2 K G+", -"2 { k :. .M.=+U.U.U.U.U.U.U.U.U.U.m+w+y.K.H.a. .8.+ c.[.+ ..R.^.h.A.i.t.+ 3.@+j.%.+.(.$.5.,.w.*.M.|.i.1.b.u.O.g.8.K.A.<.8.9.^.c.Y.(.+.u.,.&+( 2 2 2 K G+", -"2 { k :.w h.=+U.U.U.U.U.U.U.U.U.U.a+w+O.Y.L.b.2+T.+ M.~.0.}++ j.c.+ W m.+ + + Z m.h.+ + + + + + j.h.+ E.+ K.].+ T.(.L.}+h.#+Z #+}...8.c.R.0+( | 2 2 K G+", -"2 { k 4.R a.=+U.g U.U.U.U.U.U.U.U.a+w+p.h.V /.}+<.H.+ + [.P.+ a.z.+ _+T.+ [.#++ *+Y.+ A._++ N.z.+ =.+ b.H.+ + x.<.u.<+t.R.9.1+(.p.s.c.c.}+|+( 2 2 | K G+", -"2 { k :.Z (.=+U.U.U.U.U.U.U.U.U.U.m+w+0.|.T.$.z.b.L.}+T + *.+ =.*++ A.R.+ ~.x.+ $.B.+ /.Y.+ N.z.+ B.+ i.A.+ + C.b.c.t.@.h.g.y.P.O.c.i.2.v.0+( | 2 2 K G+", -"| { k 4. . .=+=+U.U.U.U.U.U.U.U.U.a+w+C.s.i.L.` m.+ s.p.+ u.+ +.Q.+ m.&.+ #.f.+ }+M.+ H.i.+ N.K.+ j.+ {.<++ + y.m.%.t.R.A.0.P.s.g.^.s.(.L.7+( | | | K G+", -"| { m 4.=.c.=+U.g U.U.U.U.U.U.U.U.m+w+#+h.e.1.j.A.t.+ + ].(.m.+ + + }+<++ + + M.&.%++ H.&++ 1.%.+ ^.+ h.+ =.p.+ A.B.R.$.K.#.=.~.$+&+H.a./.|+( | | | K G+", -"| ~ m :.w h.=+U.=+U.U.U.U.U.U.U.=+a+w+O.M.w.A.m.<+(.b.h.1+p.K.H.i.%+&.(.L.(.$+0.Q.i.H.i.e.P.|.A.&+(.*.&.K.%+c.r.~.a.w.b.1.+.}.].0.B.z.T &+|+( | | | K G+", -"| ~ m 4.R K.=+m+w+w+D+D+D+D+D+D+w+D+w+*+K.z.N.j.1.1.a.B.3.P.K.c.i.*.w.I.T j.y.#+s.c.w.a.*+5.9.|.c.(.^.w.i...2.O.r.|.(.` B.}.x.#+2.*+t.,.T.4+( 4 | | K G+", -"4 ( m 4.+.c.w+H+H+H+H+H+H+H+H+H+H+H+H+*+O.u.B.&.N...u.3+c.}+x.a.Y.R.<.A.u.=.|...g.j.K.1.<./.8.V c.*+t.}+t.}+z.*.c.~.*.i.A.+.J.*+~.Q.e.|+:+e+( | | 4 K G+", -"4 ~ m 4.W a.&+` b.*.>.T %.e.T.w.H.z.T [.s.A.|.c.H.N.t.B.P.3.z.8.c.*.b.$.L.(.#.3.Q.L.s.z.m.b.A.e.2.r.m.%.w./.*.r.}+&+R.%.L.].W p.3.^.h.c.<+<+/ 4 4 4 K G+", -"4 ~ m 4.X B.*+s.H.m.<+c.R.|.N.T 2.<+g.}+*+*+N.M.<.z.Q. .r.T P.a.t.B.w.z.%.|.P.3.B.c.m.^.R.h.K.s.P.2.N.<.P.h.h.#.P.u.j.1.2.$+#.O.|.Q.e.&+8.|+( 4 4 4 K G+", -"4 ~ m 4.|.B.u.L.1+m.8.P.<.H.t.t.<.;.w.H.P.H.*+H.t.8.|+-.8.t.j.8.%+<.2+A.}+H.H.2+Y.H.T.R.2+m.H.A.m.e.+.N.N.R.t.1.H.c.&+b.N.R.R.N.u.<+F.S.|+*+^ 4 4 4 K G+", -"4 ( m 4.4.4.8+8+5+f+f+8+8+:+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+8+5+5+5+8+5+8+5+f+8+:+f+5+:+8+f+p+] 4 4 4 K G+", -"5 ( m 4.8+t+B+C+t+C+B+B+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+B+B+B+u+B+B+B+C+B+B+C+B+B+B+u+B+B+B+B+^ 5 4 5 K G+", -"5 4 5 5 5 5 5 5 5 5 5 5 5 5 5 4 5 5 5 5 5 5 5 4 5 5 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 5 5 5 5 5 4 5 5 5 5 5 5 4 5 5 5 5 5 5 4 5 5 K G+", -"5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 5 5 5 5 5 5 K G+", -"5 5 7 D.f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+P 9 5 5 5 K G+", -"5 5 7 :.'.'.:.:.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.'.4.:.).D.:.:.:.4.D.D.4.4.4.4.4.).4.D.:.4.:.D.D.7 5 5 5 K G+", -"5 5 7 ).I R R J M w R N O W V R U X N R N w M O I W M M N X V R U R N R w N R R M U M M R ..X V M V M F w N M w O X R X U M N N ` ` ` W e.T.3 5 5 5 K G+", -"5 5 7 ).X *.K...j...=.%.x.<.t.V m.s.~.*.2...<.m.&+&.<.a.R h.*.1.@...>.i.t.j.y.|.a.&+m.N...q.@.$...|...&.+.>.X ~. .z.X *.N.}.*.Q.=.$.w <.L.2+_ 5 5 5 K G+", -"5 5 7 )...&+b.b.a.t.<.M.~.Z M.+ + + + + c.w.H.h.1+z.$.(.g.@+s.%+..|.2+M.A.Q.C.g.Q.e.i.K.L.B.B.t.z.j.+ |+j.Y c.x.g.s.i.8.h.[+g.[+[.B.2+|.%.c.< 5 5 5 K G+", -"5 5 7 ).O s.^.$.|+/.<++.f.V /.+ + |.p.+ + e.&.&.Y +.e.P.y.J.K. ./.i.w.|.e.B.P.x.M.T.1.t.1.c.*.b.+.+ + %.|.L.B.x.C.u.e.A.i.0.r.j.#.z.(.=.R.7+< 5 5 7 K G+", -"5 7 7 ).U |.t.L.1+<.&.u.3.c.h.+ + c.=.+ + L.H.+ + + + %.@++ + + + |.T.B.+ + + + P.L.m.+ + + + N.+ + + + %.m.+ + + + 8./.a.#.*+0.C.B./.c.4+s.< 7 7 7 K G+", -"7 7 7 ).%.%.h.8.|.H.%.*+x...H.+ + K.O.+ + <./.+ + Q./.=.+ + h.T.+ + i.+ + P.r.+ + i.+ + L.Q.+ + c.+ + 1.*.+ + P.f.+ + e.i. .#.j.3.c.^.h.N.N.< 7 7 7 K G+", -"7 7 h ).W ^.A.b.u.A.b. .r.*.K.+ + + + + *+A.T.+ + u...a.+ + + + + + 8.+ + + + y.<+1.+ + + + + + T + + R.a.+ + + + s./.&.j.W ~.r.f.Q. .a.t.<+< 7 7 7 K G+", -"7 7 7 ).R a.2.8.M. .*+a.p.s.1.+ + |.[.y.h.H.>.+ + |+L.s.+ + (.w.$.<.L.j.T.+ + + + N.+ + &.a.h.<+(.+ + R.j.` 4++ + + + N.&+o.O.s.}+^.a.a.m.%+< 7 7 7 K G+", -"7 7 7 ).M (.b./.*.@.L.}+x.h.%.+ + z.4+J.}+1.b.+ + |+<.%.+ + h.i.+ + i.+ + %.J.+ + %.+ + &.*++ + |.+ + T.B.+ + J.C.+ + m.P.3.}.}.O.P.>.Y.4+j.< 7 7 7 K G+", -"7 7 7 ).*.%...L.*.t.|.u.J.a.t.+ + |+C.#.2.i.*++ + ..<.1+P.+ + + + L.b.h.+ + + + z.H.i.+ + + + e.s.h.+ + 2.e.+ + + + H.2+1.T +.g.].a.|.1+R.|+_ 7 7 7 K G+", -"7 7 7 ).Z c.*.Q./.<.L.N.t.j.%.L.P.s.[.p.Q.s.A.T R.t.(.B.f.g.1+Q.m.2.<.%.h.B.x.C.z.(.<+a.N.1.P.2.a.j.2.1+5.}+%.#+}.j.|.A.B.}.0.O.j.Q.X %+t.j._ 7 7 7 K G+", -"7 7 h ).T (.Q.c.z.e./.2.a.=.H.t.j.|.2.c.g.Q.*./.%.1+K.2.z.h.r.j.u.R.8.e.j.Y.h.z.*+z.a.b.b.H.R.j.M.K.<+m. .j.h.u.*.#.z.t.m.J.g.3.C.*+b.e.G.*+_ 7 7 7 K G+", -"9 9 h ). .M.Q.b.~.|.}+}.B.+.$.M.N.=.$+p.3+z.j./.i.+.%+j.#.@+=.Q.=...m.Q.w.2.P.x.s.(.j.>.i.*+u.i.z.2.c.8.^.R.+.x.0.M.=. .+.y.c.&+(.O.x.K.t.<+_ 9 9 9 K G+", -"9 7 7 ).c.B.B.8.j.|.#.y.#+s.N.t.b.j.C.p.j.|+(.H.b.<.U %.P.f.&+|.+.t.L.e.T.s.].O.c.4+%./.b.@.H.A.j.g.P.<...&.2.p.C.K.|.B.*+*+Y.c.j.p.g.+.v.F._ 7 9 9 K G+", -"9 9 h ).*. .u.w.Y.u.O.}.}.|.&+8.<+=.C.p.M.+.|.&.@.A.*+Q.}+~.P.|.a.&.b.1.&.&+p.#.K.|.+.<+>.&+..b.Q ].(.V <.e.&+Z f.^.^.T *.g.P.s.B.C. .{.H.<+_ 9 9 9 K G+", -"9 9 h ).M 2.-+;+,+,+,+,+,+,+,+,+,+;+n ].<+M.-+;+,+,+,+,+,+,+,+,+,+;+n /.*.p.-+;+,+,+,+,+,+,+,+,+,+;+n R e.R.-+;+,+,+,+,+,+,+,+,+,+;+n y.N.L.! 9 9 9 K G+", -"0 9 h :.*.2.p p p p p p p p p p p p >+C.u.}+p p p p p p p p p p p p >+1.j.#.p p p p p p p p p p p p >+V 1.%.p p p p p p p p p p p p >+=.|+|+! 9 a 0 K G+", -"0 9 h ).R <+++p e f f f + f f f f !+n+*+(.+.++p e f f + + + f f f !+n+t.Z x.++p e f f + + + f f f !+n+<.<+..++p e f f f f + f f f !+n+o.N.G.! a 0 0 K G+", -"0 a h :...+.++p p p p + + p p p p !+n+#. .<+++p p p + p p p + p p !+n+&.T J.++p p p + p p p + p p !+n+A.%.<.++p p p p p + + p p p !+n+r.G.e.! 0 a 0 K G+", -"0 0 7 D.R u.++p p p + p + p p p p !+n+P.h.|.++p p p p p p p + p p !+n+t.%. .++p p p p p p p + p p !+n+e.A.` ++p p p p + p + p p p !+n+0.e.4+} 0 0 0 K G+", -"0 0 7 :.V c.++p p p p p + p p p p >+n+J.s.Q.++p p p p p p p + p p >+n+>.*+J.++p p p p p + + p p p >+n+T.1.8.++p p p p + p + p p p >+n+n.e.:+} 0 0 a K G+", -"0 a 7 ). .a.++p f p p p + p p p p >+n+}.j.Q.++p f p p p p + p p p >+n+*+(.f.++p f p p p p p + p p >+n+>.$.%.++p f p + p p + p p p >+n+o.R._.} 0 0 0 K G+", -"i 0 7 ).T Y.++p p p p p + p p p p !+n+y.u.w.++p p p p p + p p p p !+n+t.2.p.++p p p p p p p + p p !+n+N.a.%+++p p p + + + + + p p !+n+P.t.0+} 0 0 0 K G+", -"0 i 7 ).W R ++++p p p p + p p p p >+n+0.4+&.++++p p p + p p p p p >+n+H.j.p.++++p p + p p p + p p >+n+V c.t.++++p p p p p + p p p >+n+s.t.7+} i 0 0 K G+", -"i i 7 ).R B.++p f p p p + p p p p !+n+r.a.<+++p f p + + + + + p p !+n+8.u.=.++p f p p + + + p p p !+n+8.u...++p f p p p p + p p p !+n++.R.7+} i 0 0 K G+", -"i i 7 )...=.++p ++p p p p p p p ++>+n+#+<+u.++p ++p p p p p p p ++>+n+<...}.++p ++p p p p p p p ++>+n+w.w.X ++p ++p p p p p p p ++>+n+}.4+<+} i i i K G+", -"i i 7 )./.j.++!+n+n+q+q+q+q+q+q+n+q+n+p.<+c.++!+n+n+q+q+q+q+q+q+n+q+n+/.*+g.++!+n+n+q+q+q+q+q+q+n+q+n+1.e.%.++!+n+n+q+q+q+q+q+q+n+q+n+n.G.F.} i i i K G+", -"i i h ).1.j.n+s+s+s+s+s+s+s+s+s+s+s+s+f.Q. .n+s+s+s+s+s+s+s+s+s+s+s+s+e...+.n+s+s+s+s+s+s+s+s+s+s+s+s+%.<+$.n+s+s+s+s+s+s+s+s+s+s+s+s+ .1._.[ i i i K G+", -"i i 7 ).+.a.B...2.=.#.J.}+Q.*+%.L.^.f.].j.c.=.%+e...w.^.#.[+|.}+Z b.U >./.X 3.p.<+Z a.%.%.X @.b.P.x.B.w.X >.h.y.3.j.M.Q.z.J.Q.(.s.3.g.=.v.l.[ i i j K G+", -"i i 7 ).R T h.H.Q.j.y.f.O.j.8.<./.Q.y.J.s.M.u.b.A.>.A.|.P.}.*+Y...m.i.R.%.B. .~.z.u.B.w.8.i.@.t.|.3.<+T.8.*+s.*+~.j.2+u.Q.P.%.^.z.0.f.n.H.<+[ j j j K G+", -"j j 7 ).N Q.c.R.X u.$+x.~.^.$.w.i.*+0.+.&+P.2.i... .A.+.[+[+z.^.h.%.m.H.N.+.g.O.j.B.P.*+b.H.H.V 2.=.+.%...w.X 0.O.a.B.h.u.+.2.%.Y.O.3.].v.F.[ i j j K G+", -"j j 7 ).W s.(.R.K.|.#.J.C.M.A.i.N.|.3.3.P.Y.=.R.&+$.i.Z f.*+(.a.^.1.@.&+8.B.C.[.h.}+*.Y 1+$.e.>.T ].2+@.b.` ^.P.C.1+a.c.s.9.Q =.}+}.0.y.*+2+[ j j j K G+", -"j j h ).>.%.m.i.%.t.w.z.x.B.h.h.>.s.*+y.s.1.e.M.L.s.A.j.}+}.h.m.|+j.H.z.i.Y.~.}.Q.1.%+a.N.c.B.i.c.Y.2.H.&+/.%.~.O.*+i.m.=.3.r.0.[.Z 1.(.G.<+[ j j j K G+", -"j j h ).*.*.^.m.2.m.P.|+=.z.T.R >.c.@+p.h.&...R.T.j.i.Y. .f.*+@.t.i.e.B.m.*+x.*+^.N.A.i.L.M.h.A.P.Q.B.L.*+N.X x.#+j.1+i.>.1+#.(. .s.u.j.<+%+[ j j j K G+", -"j j 7 ). .M.=.1.Q.T }.g.0.|.8./.e.*+x.0.a.%.h.$.@.H.H.2.3.#+&+(.K././.L./.Q.P.r.K.c.s.N.t.@.m.%.2.J.B.&+&.w.h.=.0.Q.^.1+&+r.|.*.P.C.#.q.|+7+[ j j j K G+", -"j j h ).U z.-+;+,+,+,+,+,+,+,+,+,+;+n =.^.Q.-+;+,+,+,+,+,+,+,+,+,+;+n /.*.p.-+;+,+,+,+,+,+,+,+,+,+;+n %+<.&+-+;+,+,+,+,+,+,+,+,+,+;+n !.b.<+[ j j j K G+", -"j j h ).V Q.p p p p p p p p p p p p >+3.s.}+p p p p p p p p p p p p >+1.j.#.p p p p p p p p p p p p >+>.A.8.p p p p p p p p p p p p >+P.R.|+[ j j j K G+", -"l l h :.2.(.++p e f f + + + + f f !+n+C.K. .++p e f f + + + f f f !+n+t.Z x.++p e f + + + + + f f !+n+&+/.@.++p e f f + + + f f f !+n+].*+<+[ j l l K G+", -"l j h ).V h.++p p p p + p p p p p !+n+r.c.(.++p p p + p p p + p p !+n+&.T J.++p p p p p p p + p p !+n+H.e.b.++p p p + p p p + p p !+n+0.t.|+[ j l l K G+", -"l l h :.%.|.++p p p + p p p p p p !+n+$+|.2.++p p p + p p p p p p !+n+t.%. .++p p p p p p + p p p !+n+1.e.<.++p p p + p p p + p p !+n+{.R.4+[ l l l K G+", -"l l h )./.Z ++p p p + + + + p p p >+n+#+M.a.++p p p + + + + p p p >+n+>.*+J.++p p p p p p + p p p >+n+>.8.&+++p p p p + + + p p p >+n+Q.T.7+[ l l l K G+", -"l l h :.O a.++p f p p p p p + p p >+n+4+2.b.++p f p + p p p + p p >+n+*+(.f.++p f p p p + p p p p >+n+<.j.%.++p f p + p p p + p p >+n+Q.&+L.3 l l l K G+", -"l l h :.R s.++p p p p p p p + p p !+n+3.|+1.++p p p + p p p + p p !+n+t.2.p.++p p p p p + p p p p !+n+>.j./.++p p p + p p p + p p !+n+K.b.7.[ l l l K G+", -"l l h :.X |.++++p p + p p p + p p >+n+g.z.1.++++p p + p p p + p p >+n+H.j.p.++++p p p + p p p p p >+n+L.T R.++++p p + p p p + p p >+n+M.1+}+3 l l l K G+", -"l l h :.N +.++p f p p + + + p p p !+n+*+<+H.++p f p p + + + p p p !+n+8.u.=.++p f p p + p p p p p !+n+>.s.i.++p f p p + + + p p p !+n+u.e.<+3 l l l K G+", -"l l h :.R Z ++p ++p p p p p p p ++>+n+f.%.8.++p ++p p p p p p p ++>+n+<...}.++p ++p p p p p p p ++>+n+&+u.L.++p ++p p p p p p p ++>+n+h.8.h.3 l l l K G+", -"l l h :. .^.++!+n+n+q+q+q+q+q+q+n+q+n+P.(.L.++!+n+n+q+q+q+q+q+q+n+q+n+/.*+g.++!+n+n+q+q+q+q+q+q+n+q+n+A.a.A.++!+n+n+q+q+q+q+q+q+n+q+n+|+&.F.3 l l l K G+", -"l l h :. .K.n+s+s+s+s+s+s+s+s+s+s+s+s+].a.<.n+s+s+s+s+s+s+s+s+s+s+s+s+e...+.n+s+s+s+s+s+s+s+s+s+s+s+s+V ^.}+n+s+s+s+s+s+s+s+s+s+s+s+s+j.N.j.3 l l l K G+", -"z z h :.O |.+.R.Z 8.<+s.3.|+b.(.U |.x.#+c.m.<.L.*+z./.(.g.0.h.A.e.L.e.M.A.%.p.f.&+X 2+&.1.|.z.b.s.B.a. .s.%.B.y.3.c.w.e.&+y.#+[.x.z.Z c.i.v.2 z l z K G+", -"z z h :.>.M.|.&+&.>.H.*+w.z./.5.|.z.0.}.P.^.b.*+b.A...a.].].B.h.@.s.H./.h.^.O.~.c.<+N.s.i.i.V s.Z %.c...i.j.=.g.}.s.Y.b.j.p.3.O.h.M.>.A.R.|+| z l z K G+", -"z z h :. .(.a.M.Q.b.e.a.a.a.w.b.j.Z K.<+3.s.c.<.$.<.%.c.a.(.1+%.z.8.t.m.K.P.P.z.r.u.<+&+A./.%.2.|+(.%+e.&+K.R T a.f.(.%.$.J.}+y.g.*.T.T.%+7+| z z z K G+", -"z z h :.O u.2.i.}.z.#+0.&+B.H.c.A.j.y.y.(.4+^.t.&+M.1.h.*+p.|.%.&+&.` z.&.(.}+g.s.(...N.N.=.M.i.u.=.h.A.^./.P.#+y.&+|.K.h.=. .h.B.P.r.B.G.|+2 z z z K G+", -"z z h -.N M.a.N.V s.$+x.~.^.$.w.i.*+0.+.&+P.2.i... .A.+.[+[+z.^.h.%.m.H.N.+.g.O.j.B.P.*+b.H.H.V 2.=.+.%...w.X 0.O.a.B.h.u.+.2.%.Y.O.3.|+v.F.2 z z z K G+", -"z z 7 ).W s.(.R.K.|.#.J.C.M.A.i.N.|.3.3.P.Y.=.R.&+$.i.Z f.*+(.a.^.1.@.&+8.B.C.[.h.}+*.Y 1+$.e.>.T ].2+@.b.` ^.P.C.1+a.c.s.9.Q =.}+}.0.:.*+2+2 z z z K G+", -"z z h :.R *.3+7+f+f+f+f+f+f+f+f+7+F J.#.1+1+s.%.e.%.m.K.#+#.j.Q.c.t.R.*+b.K.O.T c.^.+.%...w.V 1.K.}.u.b.i...2.~.$+Q.a.^.h.}.}+|...y.].g.L.<+| z z z K G+", -"z z h :.T 2.v v v v v v v v v v v i+=.V 2.K.|.L.W Y @.z.0.3.*.|.^.R./.w.A.<+=.r.B.^.Q L.*+e.1.%.u.}+z.t.<.8.K.P.p.a.%.|.Q.}.z.u.K.x.*+=.H.t.| z z z K G+", -"z z h :.1.P.~+v . q q q q q q q i+u+0.J.2.%./...` .. .A.+.[+[+z.^.h.%.m.H.N.+.g.O.j.B.P.*+b.H.&.=.K.^.H.=.A.s.].p.2.>.}+&.}.x.h.~.Q.c.(.t.4+| z z z K G+", -"z z h :.O *.~+v v v v v v v v v i+u+C.p.j.Q. .i.%.+ + .J.s.>.i.i...../.|.[+#.2.<.T./.>.B.2.e.e.+.#+j.@.&+$.K.].#.u.Y.z.c.P.s.c.=.r.[.n.2+<+| z z z K G+", -"z z h :.>.Z ~+v v v v v v v v v i+u+3.#+h.h.%.*++ >.j.+ #+h.(.|.*+/.w.@.+.P.P.(.<+h.|+m.i./.z.&.=.C.j.1.b./.1+3.*+|.Y.M.|.].j.2.c.@+[.}.v.G.| z B z K G+", -"z z h :.T (.~+v v v v v v v v v i+B+].V u.c.=.b.+ b.2.[.y.s.+ + + + e.&.+ .#.z.+ j.b.+ + <.e. .z.=.&+>.H.e.c.4+#.*+u.P.*.0.*.c.Y.[+R n.t.N.| z z z K G+", -"B B h :.R a.~+v q v v v v v v v i+u+1+=.X 1.A.1.L.+ + y.~.c.c.&+T.+ i.i.z.+ g.+ .+.+ H.&++ z.8.*.z.|+A.u.1.a.O.P.s.8.@.1.I.[.z.y.M.u.&+e.%+| z B z K G+", -"z B h :.2.+.~+v v v v v v v v v i+B+P.C.1+8.b.j.V .+.+ 0.a.%.+ + + (.A.B.+ =.+ A.&.+ + + + e.b.2.*+M.m.h.8.Q.Z $+M.t.<.|.r.*+r.O.c.1+|.N.Y.| B B B K G+", -"B B h :. .j.~+~+v v v v v v v v i+u+f.O.P.m.1.@.+ /.}++ 0.B.+ R.*.+ c.}+Z + 0.+ m.m.+ &+Q.M.z.m.*+2.Y.b.a.%.<+0.O.j.b./.A.n.#.~.].4+j.^.e.7.| B B B K G+", -"B B h :.<.M.~+v q v v v v v v v i+u+ .$+z.Q.&+M.K.+ + C.O.z.+ + + + Q.%.z.p.+ s.<.>.$.+ + + 1.(.=.2.V i.*+u.<+p.}+K.=.b.=.=.p.y.Z K.&+,.*+N.4 B B B K G+", -"B B h :.U z.~+v ~+v v v v v v ~+i+u+c.+.~.*.Y./.1.T.*.|. .h.0.u.*.b.N.T.Q.h.K.K.#+a.z.t.m.t.t.Y.u.Z m.w.$.K.2.h.2.C.Y.8.&+J.J.g.C.u.H.H.i.0+4 B B B K G+", -"B B h :.*.^.~+i+B+B+z+z+z+z+z+u+z+B+r.#+4+t.+.h.T.1+t.*.r.x.u.<+..z.1.L.i.*.f.J.B.$.T &+>.%.t.m.=. .H.<+t.>.&+3.#+z.*+%+<.y.].y.~.Q.%.B.1+N.4 B B B K G+", -"B B h :.h.c.u+H+H+H+H+H+H+H+H+H+H+H+J.}.h.}+A.K.L.h.Z a.[+P.B.s.A.u.*+*.Y.B.x.].&+*.e.<+|+P.z.M.s.%.T.R.h.u.}+3.[+2.u.A.K.C.3.0.h.|.i.&+l.h.| B B B K G+", -"B B h :.>.M.|.&+&.>.H.*+w.z./.5.|.z.0.}.P.^.b.*+b.A...a.].].B.h.@.s.H./.h.^.O.~.c.<+N.s.i.i.V s.Z %.c...i.j.=.g.}.s.Y.b.j.p.3.O.h.M.>.A.R.|+| B B B K G+", -"B B k :.4.4.8+8+5+f+f+8+8+:+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+8+5+5+5+8+5+8+5+f+8+:+f+5+:+8+f+p+[ B B B K G+", -"B B z :.8+t+B+C+t+C+B+B+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+B+B+B+u+B+B+B+C+B+B+C+B+B+B+u+B+B+B+B+_ A A A K G+", -"A B B h [ < / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / 3 B A B K G+", -"A A x B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B y A K G+", -"A A k I M M M M M M M L M L M L M M M M L M M L M M M M L M M M L L M M M L M M L M M M M M M M M M M M L L M M L L M M M M M M M L M M I x C A A A K G+", -"A A k :.f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+P A A A A K G+", -"A A k :.'.'.:.:.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.'.4.:.).D.:.:.:.4.D.D.4.4.4.4.4.).4.D.:.4.:.D.D.j A A A K G+", -"A A k :.R r.@.1...m.%.s. .A.1.&...^.%.s.h.>.b.` %...H.a.=.V =.%...b.V %.T.R +.=.K.<.A.1.` V %.1.*.T *.e.&.t.u.%.K.....c.N.0.3...*.$.c.8.i.|+5 A A A K G+", -"A A k :.V z.&.|+Y.m.8.^.#+B.+.s.%+*+1+[.u.b.H.=.<.j...a.$+0.u.b.b.^.%+..%+c.C.J.%.A.T.z.b.2.Y.%+a.<+&+%+|.@.2+g.g.(.8.<.a.~.V J.}.1+L.*.*+c.5 A A A K G+", -"A A k :...M.j.R.Q.e.%.Z J.P.N.P.e.u.].3.^./.t.K.m.+ + + + t.8.b.>.c.m.2.*+=.<+b.w.@.i.a.h.}+=.+ + H.o.1+|.X z.g.g.K.<.t.H.o.1+Y.f.2.B.=.R.N.5 A A A K G+", -"A A k :.T z.H.t.B.m.}+|.0.j.1+h.A.z.p.$+^.1.L.2.+ + J.p.+ + 1.B.*+^.%.*.O.$+j.t.&.2.w.a.(...|.+ + h.f.O.#.X B.x.~.=.w.R.h.f.O.#.g.*+e. .2+H.5 A A A K G+", -"A A k :.J a.2.8.K.X V a.[.Q.<+*+R.<+#+J.(.m.8.+ + u.Z J.(.8.L.L./.+ + + P.$++ + + + A.a.+ + + + + T.Q.#+c.m.Q.P.g.*.@.L.T.Q.#+c.x.^.2.=.i.S.5 C C A K G+", -"C C k :.2.u.%.%+z.A.*+j.}.*.a.=.e.h.g.].s.L.>.+ + ..#+3.Z b.b.u.+ B.m.+ + C.+ + A.=.b.+ + &.j.+ + +.f.y.J.t.j.}.#.|.*+N.+.f.y.J.].c.w.z.t.<+5 A C C K G+", -"C C k :.*.*.z.8.u.t.V z.].(.e.2.e.}+#.[.s.b.8.+ + j.r.3.(...1./.w.+ + + + p.+ + t.b.&++ + $.(.+ + e.n.@+(.8.Z #+O.Q.R.&.e.n.@+(.[.Y.P.s./.0+5 C A C K G+", -"A C k :.T *.=.t.j.` a.Q.p.(./. .A.(.x.#+a.*+t.+ + |.*+Z h.R.b.A.+ + t.+ + J.+ + m.<.T.+ + <.^.+ + @.I.#.r.b.a.0.x.|.N.>.@.I.#.r.[.u.M.a.R.<+5 C C C K G+", -"C C k :.W *. . .$.R.T.V N.h.w.%.j.M.#.p.j.B.8.9.+ + y.f.+ + &.^.+ + z.+ + J.+ + >.*+&++ + ..j.+ + r.3.+.Y.a.Z p.@+M.*+8.a.r.3.+.c.B.w.m.N.3+5 C C C K G+", -"C C k :.2.*.|.c.=.T.@.s.Q. .8.|+z.a.+.s.f.z.s.N.&++ + + + 2.P.*+N.+ + + + u.+ + 2.1.i.L.+ + + + + #+].p.%.T Z K.u.#+^.i.1+#+].p.@+Q.$.R.-.8.5 C C C K G+", -"C C k :.X B.%.i.$+c. .*+2.*+t.Z <.M.0.r.*+c.|+H.1.c.` |.=.C.u.P.=./. .c.t.<+f.r.Y.a.B.A.i.*.z.$...=.&+H.P.A.K. .}.^.s.Z 2.*+..%.M.Z C.Z N.7+5 C C C K G+", -"C C k :.R ^.*.>.u.M.f.O.r.c.b.Y $.j.0.f.(.j.j.1.%+$.%+2.y.#.s.h.h.<+&.1.&.h.3.T K.j.c.w.>.m.w.w.1+#+c.<.w.%.s.f.C.*.a.2.K.9.a.u.a.g.0.Y.L.F.5 C C C K G+", -"C C k :.u. .Y.m.P.+.0.~.p.Y.<+w e.2.0.J.T X 2./.L.*+&+Q.}+#+M.(.h.1./.A.@.&+y.Z M.(.|.H.H.>.<.>.^.O.Y.N.>.&.K.C.f.Y.a.K.s.J.s.Q.j.#+P.g.1.7.5 C C D K G+", -"C C k :.T B.%.i.h.A.a.B.r.h.i.+.A.a.y.4+^./.e.L.w.M.$.B.#.~.(.*+%+H.8. .m.K.y.*+&+b.@.m.*+B.&+8.2.s.2...a.A.u.p.r.*+%.m.Y J.T *.p.u.a.Q./.7+5 C C C K G+", -"C C k 4.R P.k+k+l+l+l+l+l+l+l+l+l+k+c p.=.z.M.V i.w.N.h.f.y.k+k+l+l+l+l+l+l+l+l+l+k+c i.>.>. .w.(.r.Q.<.%+m.k+k+l+l+l+l+l+l+l+l+l+k+c q.t.N.5 D C C K G+", -"C C k :.<.h. + + + + + + + + + + + +l+[.j.2.|.b.H.b.1.a.x.O. + + + + + + + + + + + +l+m.%./.L.&.B.g.3+m.m.e. + + + + + + + + + + + +l+Q.t.|+5 D C D K G+", -"D D k :.R u.k+.+c `.`.`.+ `.`.`.`.l+l+#.a.T.N.(.1.K.|+a.}.x.k+.+c `.d + + + d `.`.l+l+B.H.*+s./.|+M.&+A.K.e.k+.+c `.d + + + d `.`.l+l+%.8.A.7 D D C K G+", -"D D k 4.U a..+d d d d + + d d d d l+l+x.Y.b.8.i.N.h. .h.J.C..+d d d + d d d + d d l+l+N.b.z.+.4+B.c.&+b.j.%+.+d d d + d d d + d d l+l+j.<.S.5 D D C K G+", -"D D k :.=.|..+d d d + d + d d d d l+l+}.j.%.L.K.t.h.T.|.#.]..+d d d d d d d + d d l+l++.e.^.c.t.V h.u.<+..%..+d d d d d d d + d d l+l+2.L.P.7 D D D K G+", -"D D m 4.*.K..+d d d d d + d d d d k+l+f.<+&.N./.A. .H.z.f.r..+d d d d d d d + d d k+l+H.>.c.}+t.^.(.s.w.*+e..+d d d d d + + d d d k+l+s.&+l.7 D D D K G+", -"D D m 4.s.z..+d b d d d + d d d d k+l+g.|.b.L.h.i.*.R.u.].P..+d b d d d d + d d d k+l+K.1.j.a.A. .<+s.%+j.&..+d b d d d d d + d d k+l+2.T.*+7 D D D K G+", -"D D m :.N *..+d d d d d + d d d d l+l+P.Y.&.A.e.}+Z i.2.#.p..+d d d d d + d d d d l+l+` %+B.j.<.(.s.<+t.M.b..+d d d d d d d + d d l+l+Z 2+S.7 D D E K G+", -"D D m 4.T c..+.+d d d d + d d d d k+l+p.j.+.&.*.&+/.|.Q.#.3..+.+d d d + d d d d d k+l+a.H.t.i.s.j.Y.z.$.m.u..+.+d d + d d d + d d k+l+t.%+*+7 D E D K G+", -"E E m 4.V Z .+d b d d d + d d d d l+l++.3.*.Q.<.A.t.=.4+z.B..+d b d + + + + + d d l+l+t./.1+>.c.s.}+e.i.|+z..+d b d d + + + d d d l+l+|+%.Y.7 E D E K G+", -"D E m 4.R Y..+d .+d d d d d d d .+k+l+P.K.H.B.|.m.A.e.B.y.]..+d .+d d d d d d d .+k+l+Q.e.w./.8.&+=.H.t.m.*+.+d .+d d d d d d d .+k+l+%+t.S.7 E E E K G+", -"D E m 4.(.c..+l+l+l+l+l+l+l+l+l+l+l+l+f.2.Y.%.B.e.M.=. .+.C..+l+l+l+l+l+l+l+l+l+l+l+l+|+%+s.%.c.*+K.2+..Y.+..+l+l+l+l+l+l+l+l+l+l+l+l+b.A.7+5 E E D K G+", -"E E m 4.a.7+l+l+l+l+l+l+l+l+l+l+l+l+l+2+Y.i.|+P.P.*+P.e.&+1+l+l+l+l+l+l+l+l+l+l+l+l+l+T.2+R.P.N.|+A.P.w.P.;.l+l+l+l+l+l+l+l+l+l+l+l+l+;.2+Q.| E E E K G+", -"E E h :.>.M.|.&+*+|+H.*+|+z.i.|+|.z.|+}.P.*+|+*+*+A.|+*+i.|+B.*+|+s.H.|+*+^.O.|+c.|+N.s.|+i.*+s.*+|+c.*+i.|+*+|+*+s.|+b.*+|+*+O.h.|+*+A.|+|+| E E E K G+", -"E E m 4.4.4.8+8+5+f+f+8+8+:+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+8+5+5+5+8+5+8+5+f+8+:+f+5+:+8+f+p+[ E E E K G+", -"E E E 4.8+t+B+C+t+C+B+B+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+B+B+B+u+B+B+B+C+B+B+C+B+B+B+u+B+B+B+B+| E E E K G+", -"E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E K G+", -"E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E K G+", -"E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E K G+", -"E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E K G+", -"E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E K G+", -"E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E K G+", -"E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E K G+", -"E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E K G+", -"G P S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S K f+", -"4.f+g+h+h+h+h+h+h+g+h+h+g+h+h+g+h+h+g+h+h+h+h+g+h+h+g+h+g+h+h+h+h+g+h+h+g+h+g+h+h+h+h+g+h+h+g+h+g+h+h+h+h+g+h+h+g+h+g+h+h+h+h+g+h+h+g+h+h+h+h+h+g+h+h+h+"}; +"76 253 340 2", +" c #595966", +". c #51515B", +"+ c #3D3D42", +"@ c #717187", +"# c #53535E", +"$ c #FFFFFF", +"% c #B9B9BF", +"& c #ACACB3", +"* c #9D9DA4", +"= c #F3F3F4", +"- c #5D5D6A", +"; c #5E5E6A", +"> c #E0E0E3", +", c #5C5C69", +"' c #EDEDEE", +") c #FCFCFC", +"! c #909098", +"~ c #909099", +"{ c #9797A0", +"] c #ECECEE", +"^ c #FAFAFB", +"/ c #D9D9DC", +"( c #A3A3AA", +"_ c #91919A", +": c #DDDDE0", +"< c #FAFAFA", +"[ c #EBEBEC", +"} c #94949D", +"| c #61616D", +"1 c #A2A2A9", +"2 c #DCDCDF", +"3 c #E6E6E8", +"4 c #ACACB2", +"5 c #646470", +"6 c #E5E5E7", +"7 c #C4C4C9", +"8 c #CCCCD0", +"9 c #CECED2", +"0 c #CFCFD3", +"a c #CBCBCF", +"b c #8A8A93", +"c c #A0A0A7", +"d c #9C9CA4", +"e c #6E6E79", +"f c #EAEAEB", +"g c #DADADD", +"h c #9999A1", +"i c #AEAEB4", +"j c #95959D", +"k c #92929B", +"l c #BDBDC2", +"m c #AAAAB0", +"n c #F2F2F3", +"o c #CACACE", +"p c #8D8D96", +"q c #FDFDFD", +"r c #8C8C95", +"s c #888891", +"t c #DBDBDD", +"u c #D3D3D6", +"v c #F0F0F1", +"w c #60606C", +"x c #F8F8F9", +"y c #F1F1F2", +"z c #5F5F6B", +"A c #BEBEC3", +"B c #FCFCFD", +"C c #DFDFE2", +"D c #FEFEFE", +"E c #8F8F98", +"F c #85858F", +"G c #878790", +"H c #E1E1E3", +"I c #F9F9FA", +"J c #A1A1A8", +"K c #DEDEE0", +"L c #C5C5CA", +"M c #9D9DA5", +"N c #E4E4E6", +"O c #EAEAEC", +"P c #D1D1D5", +"Q c #9B9BA3", +"R c #ABABB2", +"S c #E9E9EB", +"T c #A9A9B0", +"U c #F7F7F7", +"V c #D4D4D7", +"W c #9F9FA6", +"X c #D3D3D7", +"Y c #BCBCC1", +"Z c #2E3038", +"` c #2C2E34", +" . c #27272B", +".. c #616176", +"+. c #4E4E5C", +"@. c #A8A8AE", +"#. c #D6D6D9", +"$. c #F5F5F6", +"%. c #BCBCC2", +"&. c #474752", +"*. c #7A7A85", +"=. c #95959E", +"-. c #4F4F5D", +";. c #86868F", +">. c #29292C", +",. c #4D4D5B", +"'. c #D7D7DA", +"). c #D2D2D5", +"!. c #D2D2D6", +"~. c #D4D4D8", +"{. c #C9C9CD", +"]. c #575765", +"^. c #7C7C86", +"/. c #BDBDC3", +"(. c #575764", +"_. c #BBBBC1", +":. c #7B7B85", +"<. c #2A2A2D", +"[. c #4C4C59", +"}. c #ADADB3", +"|. c #71717C", +"1. c #AFAFB5", +"2. c #808089", +"3. c #4D4D5A", +"4. c #B2B2B8", +"5. c #6C6C77", +"6. c #696974", +"7. c #B2B2B7", +"8. c #2B2B2E", +"9. c #B0B0B5", +"0. c #B0B0B6", +"a. c #71717B", +"b. c #ABABB1", +"c. c #666671", +"d. c #C4C4C8", +"e. c #75757F", +"f. c #2C2C30", +"g. c #4B4B58", +"h. c #D5D5D8", +"i. c #D0D0D4", +"j. c #D1D1D4", +"k. c #656570", +"l. c #6B6B75", +"m. c #B1B1B7", +"n. c #2D2D31", +"o. c #4B4B57", +"p. c #8C8C94", +"q. c #8E8E96", +"r. c #D3D3D5", +"s. c #A9A9AF", +"t. c #7B7B84", +"u. c #787881", +"v. c #A7A7AD", +"w. c #62626D", +"x. c #585864", +"y. c #C5C5C9", +"z. c #BBBBBF", +"A. c #555560", +"B. c #545460", +"C. c #B8B8BD", +"D. c #7A7A83", +"E. c #2E2E32", +"F. c #4A4A56", +"G. c #5F5F6A", +"H. c #B9B9BD", +"I. c #5E5E69", +"J. c #C3C3C7", +"K. c #B9B9BE", +"L. c #CDCDD0", +"M. c #76767F", +"N. c #86868E", +"O. c #E3E3E5", +"P. c #2E3037", +"Q. c #313136", +"R. c #686874", +"S. c #A5A5AC", +"T. c #6B6B77", +"U. c #878791", +"V. c #6D6D79", +"W. c #676773", +"X. c #B3B3B9", +"Y. c #70707C", +"Z. c #8B8B94", +"`. c #AAAAB1", +" + c #C1C1C6", +".+ c #7D7D87", +"++ c #A4A4AB", +"@+ c #97979F", +"#+ c #656571", +"$+ c #F7F7F8", +"%+ c #5B5B68", +"&+ c #DBDBDE", +"*+ c #94949C", +"=+ c #333339", +"-+ c #34343A", +";+ c #1C1F22", +">+ c #1A1E20", +",+ c #A7A7AE", +"'+ c #D5D5D9", +")+ c #7D7D88", +"!+ c #5A5A67", +"~+ c #8A8A94", +"{+ c #62626E", +"]+ c #696975", +"^+ c #E2E2E4", +"/+ c #F8F8F8", +"(+ c #AEAEB5", +"_+ c #BFBFC4", +":+ c #7E7E88", +"<+ c #E2E2E5", +"[+ c #9F9FA7", +"}+ c #DEDEE1", +"|+ c #C2C2C7", +"1+ c #73737E", +"2+ c #9A9AA2", +"3+ c #636370", +"4+ c #96969E", +"5+ c #E0E0E2", +"6+ c #72727D", +"7+ c #B7B7BC", +"8+ c #666672", +"9+ c #898992", +"0+ c #84848E", +"a+ c #6F6F7A", +"b+ c #60606D", +"c+ c #74747F", +"d+ c #EDEDEF", +"e+ c #757580", +"f+ c #8E8E97", +"g+ c #C1C1C5", +"h+ c #83838D", +"i+ c #CECED1", +"j+ c #CDCDD1", +"k+ c #82828C", +"l+ c #C0C0C5", +"m+ c #E8E8E9", +"n+ c #A8A8AF", +"o+ c #767681", +"p+ c #C8C8CD", +"q+ c #D8D8DB", +"r+ c #E7E7E9", +"s+ c #70707B", +"t+ c #E8E8EA", +"u+ c #93939B", +"v+ c #B4B4BA", +"w+ c #63636F", +"x+ c #9E9EA6", +"y+ c #F4F4F5", +"z+ c #767680", +"A+ c #777782", +"B+ c #5E5E6B", +"C+ c #6B6B76", +"D+ c #C7C7CB", +"E+ c #C6C6CB", +"F+ c #6D6D78", +"G+ c #333342", +"H+ c #2F2F3B", +"I+ c #28282B", +"J+ c #BABABF", +"K+ c #6F6F7B", +"L+ c #61616E", +"M+ c #28282C", +"N+ c #64646F", +"O+ c #51515E", +"P+ c #52525F", +"Q+ c #6A6A75", +"R+ c #5A5A66", +"S+ c #C8C8CC", +"T+ c #73737D", +"U+ c #72727C", +"V+ c #29292D", +"W+ c #4B4B59", +"X+ c #E3E3E6", +"Y+ c #4C4C58", +"Z+ c #E4E4E5", +"`+ c #575762", +" @ c #62626C", +".@ c #4D4D59", +"+@ c #919199", +"@@ c #BEBEC2", +"#@ c #65656F", +"$@ c #2A2A2E", +"%@ c #4F4F5C", +"&@ c #95959C", +"*@ c #B3B3B8", +"=@ c #5D5D67", +"-@ c #51515C", +";@ c #888890", +">@ c #B1B1B6", +",@ c #2B2B2F", +"'@ c #494955", +")@ c #83838B", +"!@ c #ECECED", +"~@ c #EFEFF0", +"{@ c #32323E", +"]@ c #E1E1E4", +"^@ c #7F7F89", +"/@ c #D7D7DB", +"(@ c #5C5C68", +"_@ c #7F7F88", +":@ c #D7D7D9", +"<@ c #60606B", +"[@ c #B6B6BB", +"}@ c #8A8A92", +"|@ c #686873", +"1@ c #4C4C5A", +"2@ c #555562", +"3@ c #5C5C67", +"4@ c #4E4E5A", +"5@ c #98989F", +"6@ c #DFDFE1", +"7@ c #96969D", +"8@ c #50505C", +"9@ c #AFAFB4", +"0@ c #72727B", +"a@ c #C0C0C4", +"b@ c #51515D", +"c@ c #B5B5BA", +"d@ c #50505D", +"e@ c #595964", +"f@ c #8B8B93", +"g@ c #919198", +"h@ c #C2C2C6", +"i@ c #6E6E77", +"j@ c #6E6E78", +"k@ c #82828A", +"l@ c #DDDDDF", +"m@ c #4F4F5A", +"n@ c #60606A", +"o@ c #63636D", +"p@ c #6F6F78", +"q@ c #C6C6CA", +"r@ c #7A7A84", +"s@ c #B6B6BC", +"t@ c #81818B", +"u@ c #F6F6F7", +"v@ c #83838C", +"w@ c #B7B7BD", +"x@ c #B8B8BE", +"y@ c #A1A1A9", +" ", +" ", +" ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +" + @ # + ", +" + @ # + ", +" + @ $ $ % % $ $ & * # + ", +" + @ $ $ = - ; = $ $ $ > , # + ", +" + @ $ ' ) ! ~ ) ' $ { ] ^ / ( _ : < [ } $ $ $ $ | 1 2 3 4 5 $ 6 7 < # + ", +" + @ $ > 8 9 0 a > $ b c d 8 $ e f g h i j k $ [ k 1 $ l m n 4 $ $ o c # + ", +" + @ $ > p q q r > $ s t ) $ $ c u v l p w $ > > $ $ $ $ ] $ x - # + ", +" + @ $ > , n y , > $ : x j m $ & z _ A B 8 $ > C D E F F G $ H # + ", +" + @ $ > r r > $ H I J K $ & L * M x N O = E M $ P Q R 3 $ > # + ", +" + @ $ > > $ b N S T $ & u = U V F ( = v w W X x S Y $ > # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ Z ` . . . . . . . . . . . . . . . . . . . . . . . . . .` Z Z ` . . . . . . . . . . . . . . . . . . . . . . . . . .` Z # + ", +" + @ ` ..................................................... .` ` ..................................................... .` # + ", +" + @ ...+.+.S m +.+.@.S +.#.+.+.+.X 0 X $.X P +.6 X X %.+.+.&. . ...+.+.*.P #.=.+.-.;.8 8 ;.-.+.#.+.+.+.-.;.8 8 ;.-.+.+.&. . # + ", +" + @ >...,.,.'.).,.,.!.~.,.#.,.,.,.u ,.,.#.,.,.,.#.,.,.,.,.,.&.>. >...,.,.{. ,.].,.^./.].(._.:.,.#.,.,.,.^./.].(._.:.,.,.&.>. # + ", +" + @ <...[.[.#.}.|.|.1.u [.#.[.[.[.u [.[.#.[.[.[.#.[.[.[.[.[.&.<. <...[.[.{.2.3.[.[.4.5.[.[.6.7.[.#.[.[.[.4.5.[.[.6.7.[.[.&.<. # + ", +" + @ 8...[.[.#.e 9.0.a.u [.#.[.[.[.u [.[.#.[.[.[.N u u b.[.[.&.8. 8...[.[.c.d.H e.[.X 3.[.[.[.P [.#.[.[.[.X 3.[.[.[.P [.[.&.8. # + ", +" + @ f...g.g.h.g.i.u g.u g.u 3.g.[.j.g.g.h.g.g.g.h.g.g.g.g.g.&.f. f...g.g.g.g.k.a g.4.l.g.g.6.m.g.h.g.g.g.4.l.g.g.6.m.g.g.&.f. # + ", +" + @ n...o.o.h.o.p.q.o.r.o.s.t.o.u.v.o.o.h.o.o.o.h.o.o.o.o.o.&.n. n...o.o.w.o.x.y.o.t.z.A.B.C.D.o.h.o.o.o.t.z.A.B.C.D.o.o.&.n. # + ", +" + @ E...F.F.h.F.F.F.F.).F.G.C.).H.I.F.F.h.F.F.F.N ).).J.F.F.&.E. E...F.F.K.h.L.M.F.o.N.a o N.o.F.O.0 0 9.o.N.a o N.o.F.F.&.E. # + ", +" + @ P.Q.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.Q.P. P.Q.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.Q.P. # + ", +" + @ Z P.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.P.Z Z P.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.P.Z # + ", +" + @ # + ", +" . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" ", +" ", +" ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +" + @ # + ", +" + @ # + ", +" + @ 2 D R. c $ ( $ > # + ", +" + @ S.$ d #.D T. k U. # + ", +" + @ V.$ !. W.D g $ > | 1 2 3 4 5 X.$ Y.F $ * , < o # + ", +" + @ 2 ) 5 Q $ 1 $ > 1 $ l m n 4 Z.$ j `.$ +.+$ 1 # + ", +" + @ ++$ @+j.D T. $ > > $ $ $ $ ] #+D % 0 j.3 1 $ :. # + ", +" + @ V.$ '.) / $ > C D E F F G O.K = s D X $+%+ # + ", +" + @ &+$ $ 1 $ > M $ P Q R 3 _.D < , 3 $ !. # + ", +" + @ ++$ D T. $ > w W X x S Y *+$ / +$ R # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ =+-+-+-+-+-+-+-+-+-+-+-+-+ # + ", +" + @ =+;+;+;+;+;+;+;+;+;+;+;+-+ # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. ,+ # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. $. # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. $.++H '+)+ $.i 3 A R. $. $.i D > 7 # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. < S.!+~+8 < T !+T 4. $. $. $. # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. x {+ , n < ]+ ]+^+ $. $. $. # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. $. $. < 6. 6.^+ n %+ {+/+ $. # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. $. $. < ,+!+,+4. 8 G !+,+< 3 {+ # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. $. $. $.(+3 _+6. :+'+<+S.$. [+}+7 # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. # + ", +" + @ =+-+-+-+-+-+-+-+-+-+-+-+-+ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ =+-+-+-+-+-+-+-+-+-+-+-+-+ # + ", +" + @ =+;+;+;+;+;+;+;+;+;+;+;+-+ # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ I > H |+1+ $. $. $. # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. 2+ + $. $. $. # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. 3+O $. 4+: 5+|+6+(+W 7+@+ $.i 3 A R. 4+: 5+|+6+ 5 & C > .+$. 8+t 9+ # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. , S.% $. #+ 0+Y a+2 , O b+ < T !+T 4. #+ 0+Y T 4.- %+{+$.W.2 ;. # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ I > &+4.T. $. c+l <+> d+ h.e+f+g+ < ]+ ]+^+ c+l <+> d+ C 5. $+<+h+ # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. $. i+~ , ]+I j X.j+k+ < 6. 6.^+ i+~ , ]+I }+5. $.l+4. # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. $. > e+, 4.< z m+3 !+ < ,+!+,+4. > e+, 4.< n+4.- %+{+$.%+{.,+ # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. $. b }+H ( $. g+4 $.(+3 _+6. b }+H ( $. 3+& H 5+^.$. - P * # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ %+^+5. # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ o+3 n+ # + ", +" + @ =+-+-+-+-+-+-+-+-+-+-+-+-+ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ =+-+-+-+-+-+-+-+-+-+-+-+-+ # + ", +" + @ =+;+;+;+;+;+;+;+;+;+;+;+-+ # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ Z.}+O C ~+ ,+ ,+ # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ c+6 s !+G N 6+ $. $. # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ m M d n+ $. $.i D > 7 $.i 3 A R. $. $.i D > 7 # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ C 5. 5.}+ $. $. $. < T !+T 4. $. $. $. # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ C 5. 5.}+ $. $. $. < ]+ ]+^+ $. $. $. # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ `.M d n+ n %+ {+/+ $. < 6. 6.^+ n %+ {+/+ $. # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ c+6 U.!+;.N 6+ 8 G !+,+< 3 {+ < ,+!+,+4. 8 G !+,+< 3 {+ # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ r 5+[ 5+r :+'+<+S.$. [+}+7 $.(+3 _+6. :+'+<+S.$. [+}+7 # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. # + ", +" + @ =+-+-+-+-+-+-+-+-+-+-+-+-+ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ =+-+-+-+-+-+-+-+-+-+-+-+-+ # + ", +" + @ =+;+;+;+;+;+;+;+;+;+;+;+-+ # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ o+p+^+N 2+ $. q+ # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ a ;. - |. $. # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ r+s+ $. $. $.i 3 A R. $.X.t+u+v+O.p $. ^.5+- w+3 Y. # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ x+y+p+F $. $. < T !+T 4. < r z+x r A+'. $. 0.0.l+c # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ 6.1 6 0. $. $. < ]+ ]+^+ /+B+!+^ B+!+= $. - <+#.!+ # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ C+t+ n %+ {+/+ < 6. 6.^+ $. $. $. $. C+S 5+- # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ 9+!+ f+L 8 G !+,+< < ,+!+,+4. $. $. $. $. 0 ! 0.0. # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ |+r+5+L c+ :+'+<+S.$. $.(+3 _+6. $. $. $. $. h D+ - 5+^. # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ # + ", +" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ # + ", +" + @ =+-+-+-+-+-+-+-+-+-+-+-+-+ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" ", +" ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +" + @ # + ", +" + @ # + ", +" + @ $ $ $ 6 i | & * # + ", +" + @ $ [ u+E+$ 2+ , $ > # + ", +" + @ $ > W.$ 0 $ 6 7 < | 1 2 3 4 5 _ : < [ } | 1 2 3 4 5 $ $ $ $ _ : < [ } # + ", +" + @ $ <+W.( $ R $ $ o c 1 $ l m n 4 f g h i j 1 $ l m n 4 k $ [ k f g h i j # + ", +" + @ $ $ $ D 2 F+ $ x - > $ $ $ $ ] u v l p w > $ $ $ $ ] $ > u v l p w # + ", +" + @ $ t+F T. $ H C D E F F G z _ A B 8 C D E F F G $ > z _ A B 8 # + ", +" + @ $ > $ > M $ P Q R 3 L * M x N M $ P Q R 3 O = E L * M x N # + ", +" + @ $ > $ > w W X x S Y u = U V F w W X x S Y ( = v u = U V F # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ G+H+ . . . . . . . . .H+G+ G+H+ . . . . . . . . .H+G+ G+H+ . . . . . . . . .H+G+ G+H+ . . . . . . . . .H+G+ # + ", +" + @ H+ ................... .H+ H+ ................... .H+ H+ ................... .H+ H+ ................... .H+ # + ", +" + @ ...-.-.-.-.-.-.-.-.-.&. . ...-.-.-.-.-.-.-.-.-.&. . ...-.-.-.-.-.-.-.-.-.&. . ...-.-.-.-.-.-.-.-.-.&. . # + ", +" + @ I+..+.+.9+3 y +.+.+.+.&.I+ I+..+.+.+.J+O.j+K++.+.&.I+ I+..+.+.L+: C 9 c++.+.&.I+ I+..+.+.+.+.d y +.+.+.&.I+ # + ", +" + @ M+..3.3.6.N+N 3.3.3.3.&.M+ M+..3.3.3.u.3.e+|+3.3.&.M+ M+..3.3.O+P+3.Q+i.3.3.&.M+ M+..3.3.3.R+S+N 3.3.3.&.M+ # + ", +" + @ >...[.[.[.[.N [.[.[.[.&.>. >...[.[.[.[.[.3.^+[.[.&.>. >...[.[.[.[.[.T+o [.[.&.>. >...[.[.[.0.U+N [.[.[.&.>. # + ", +" + @ V+..W+W+W+W+X+W+W+W+W+&.V+ V+..W+W+W+W+W+h+% W+W+&.V+ V+..W+W+W+C+3 d+%+W+W+&.V+ V+..W+W+#+_+W+X+W+W+W+&.V+ # + ", +" + @ <...Y+Y+Y+Y+Z+Y+Y+Y+Y+&.<. <...Y+Y+Y+Y+`+K @Y+Y+&.<. <...Y+Y+Y+Y+.@+@@@Y+Y+&.<. <...Y+Y+J.#@Y+Z+Y+Y+Y+&.<. # + ", +" + @ $@..g.g.g.g.O.g.g.g.g.&.$@ $@..g.g.g.g.J.N.g.g.g.&.$@ $@..g.g.g.g.g.%@5+g.g.&.$@ $@..g.g.6 S S ) u g.g.&.$@ # + ", +" + @ 8...o.o.o.o.O.o.o.o.o.&.8. 8...o.o.o.&@*@o.o.o.o.&.8. 8...o.o.=@-@o.;@>@o.o.&.8. 8...o.o.o.o.o.O.o.o.o.&.8. # + ", +" + @ ,@..'@'@)@!@) !@)@'@'@&.,@ ,@..'@'@'@~@^+: #.'@'@&.,@ ,@..'@'@M.5+: C.G.'@'@&.,@ ,@..'@'@'@'@'@O.'@'@'@&.,@ # + ", +" + @ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ # + ", +" + @ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ G+H+ . . . . . . . . .H+G+ G+H+ . . . . . . . . .H+G+ G+H+ . . . . . . . . .H+G+ G+H+ . . . . . . . . .H+G+ # + ", +" + @ H+ ................... .H+ H+ ................... .H+ H+ ................... .H+ H+ ................... .H+ # + ", +" + @ ...-.-.-.-.-.-.-.-.-.&. . ...-.-.-.-.-.-.-.-.-.&. . ...-.-.-.-.-.-.-.-.-.&. . ...-.-.-.-.-.-.-.-.-.&. . # + ", +" + @ I+..+.+.+.~@}+}+_ +.+.&.I+ I+..+.+.+.d O.N =.+.+.&.I+ I+..+.+.V.}+}+]@$.+.+.&.I+ I+..+.+.+.^@/@/@^@+.+.&.I+ # + ", +" + @ M+..3.3.3.N 3.3.3.3.3.&.M+ M+..3.3.z+E+; 3.(@3.3.&.M+ M+..3.3.3.3.3._@|+3.3.&.M+ M+..3.3.3.:@<@| :@3.3.&.M+ # + ", +" + @ >...[.[.[.N [.[.[.[.[.&.>. >...[.[.@.u.[.[.[.[.[.&.>. >...[.[.[.[.[.[@}@[.[.&.>. >...[.[.[.o |@6.o [.[.&.>. # + ", +" + @ V+..W+W+W+d+K m.- W+W+&.V+ V+..W+W+'.}.2 & , W+W+&.V+ V+..W+W+W+W+1@t+2@W+W+&.V+ V+..W+W+W+z v v B+W+W+&.V+ # + ", +" + @ <...Y+Y+Y+3@4@5@>@Y+Y+&.<. <...Y+Y+6@7@8@5@9@Y+Y+&.<. <...Y+Y+Y+Y+0@j+Y+Y+Y+&.<. <...Y+Y+Y+J.D.D.a@Y+Y+&.<. # + ", +" + @ $@..g.g.g.g.g.b@K g.g.&.$@ $@..g.g.c@%@g.d@K g.g.&.$@ $@..g.g.g.g.s.*+g.g.g.&.$@ $@..g.g.g.H [.[.H g.g.&.$@ # + ", +" + @ 8...o.o.e@.@o.f@m.o.o.&.8. 8...o.o.g@N.o.;@X.o.o.&.8. 8...o.o.o.o.5+=@o.o.o.&.8. 8...o.o.o.h@i@j@g+o.o.&.8. # + ", +" + @ ,@..'@'@k@H l@K.G.'@'@&.,@ ,@..'@'@m@a@H l n@'@'@&.,@ ,@..'@'@'@o@'.'@'@'@'@&.,@ ,@..'@'@'@p@j.j.p@'@'@&.,@ # + ", +" + @ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ # + ", +" + @ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ G+H+ . . . . . . . . .H+G+ # + ", +" + @ H+ ................... .H+ # + ", +" + @ ...-.-.-.-.-.-.-.-.-.&. . # + ", +" + @ I+..+.+.+.+.+.+.+.+.+.&.I+ o+p+^+N 2+ # + ", +" + @ M+..3.3.3.3.3.3.3.3.3.&.M+ a ;. - |. # + ", +" + @ >...[.[.[.[.[.[.[.[.[.&.>. r+s+ 4+: 5+|+6+4.Q X.2+ 3+& t q@6+ # + ", +" + @ V+..W+W+W+W+W+W+W+W+W+&.V+ x+y+p+F #+ 0+Y r@X !+t+#+ T f+ k+ + # + ", +" + @ <...Y+Y+Y+Y+Y+Y+Y+Y+Y+&.<. 6.1 6 0. c+l <+> d+ 6 W.:+i. : > > > N # + ", +" + @ $@..g.g.g.g.g.g.g.g.g.&.$@ C+t+ i+~ , ]+I 0.* s@{ > a+ # + ", +" + @ 8...o.o.o.o.o.o.o.o.o.&.8. 9+!+ f+L > e+, 4.< A+'+S 3+ n+v+; !+A+ # + ", +" + @ ,@..'@'@'@'@'@'@'@'@'@&.,@ |+r+5+L c+ b }+H ( $. 6 i+ 3+R C N i # + ", +" + @ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ # + ", +" + @ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ # + ", +" + @ # + ", +" . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" ", +" ", +" ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +" + @ # + ", +" + @ # + ", +" + @ k+q+$.y q@ $ > # + ", +" + @ t@D u@v+( > , $ > # + ", +" + @ h.$ v@ !+ { ] ^ / ( $ 6 7 < ]+A y ,+$ > # + ", +" + @ = $.(@ b c d 8 $ e $ $ o c w@$ x@8 $ > # + ", +" + @ = $.(@ s t ) $ $ c $ x - m+= 5.$ > # + ", +" + @ h.$ t@ !+ : x j m $ & $ H m+= 5.$ > # + ", +" + @ t@D $.X.y@C H I J K $ & $ > w@$ x@8 $ > # + ", +" + @ v@q+u@= D+ b N S T $ & $ > ]+_+n }.$ > # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ G+H+ . . . . . . . . .H+G+ G+H+ . . . . . . . . .H+G+ G+H+ . . . . . . . . .H+G+ # + ", +" + @ H+ ................... .H+ H+ ................... .H+ H+ ................... .H+ # + ", +" + @ ...-.-.-.-.-.-.-.-.-.&. . ...-.-.-.-.-.-.-.-.-.&. . ...-.-.-.-.-.-.-.-.-.&. . # + ", +" + @ I+..+.+.9+3 y +.+.+.+.&.I+ I+..+.+.+.J+O.j+K++.+.&.I+ I+..+.+.L+: C 9 c++.+.&.I+ # + ", +" + @ M+..3.3.6.N+N 3.3.3.3.&.M+ M+..3.3.3.u.3.e+|+3.3.&.M+ M+..3.3.O+P+3.Q+i.3.3.&.M+ # + ", +" + @ >...[.[.[.[.N [.[.[.[.&.>. >...[.[.[.[.[.3.^+[.[.&.>. >...[.[.[.[.[.T+o [.[.&.>. # + ", +" + @ V+..W+W+W+W+X+W+W+W+W+&.V+ V+..W+W+W+W+W+h+% W+W+&.V+ V+..W+W+W+C+3 d+%+W+W+&.V+ # + ", +" + @ <...Y+Y+Y+Y+Z+Y+Y+Y+Y+&.<. <...Y+Y+Y+Y+`+K @Y+Y+&.<. <...Y+Y+Y+Y+.@+@@@Y+Y+&.<. # + ", +" + @ $@..g.g.g.g.O.g.g.g.g.&.$@ $@..g.g.g.g.J.N.g.g.g.&.$@ $@..g.g.g.g.g.%@5+g.g.&.$@ # + ", +" + @ 8...o.o.o.o.O.o.o.o.o.&.8. 8...o.o.o.&@*@o.o.o.o.&.8. 8...o.o.=@-@o.;@>@o.o.&.8. # + ", +" + @ ,@..'@'@)@!@) !@)@'@'@&.,@ ,@..'@'@'@~@^+: #.'@'@&.,@ ,@..'@'@M.5+: C.G.'@'@&.,@ # + ", +" + @ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ # + ", +" + @ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ # + ", +" + @ # + ", +" . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/hdspmixer/pixmaps/empty.xpm b/hdspmixer/pixmaps/empty.xpm index c86fe46..5bfe06b 100644 --- a/hdspmixer/pixmaps/empty.xpm +++ b/hdspmixer/pixmaps/empty.xpm @@ -1,658 +1,258 @@ /* XPM */ char const * empty_xpm[] = { -"76 253 402 2", -" c None", -". c #404840", -"+ c #40483F", -"@ c #202720", -"# c #70786F", -"$ c #707060", -"% c #2F2F2F", -"& c #A0A0A0", -"* c #6F6F6F", -"= c #060606", -"- c #A0A09F", -"; c #A09FA0", -"> c #9FA0A0", -", c #9F9FA0", -"' c #9FA09F", -") c #A09F9F", -"! c #9F9F9F", -"~ c #9F9F9E", -"{ c #9EA09F", -"] c #9E9F9F", -"^ c #9E9F9E", -"/ c #9F9E9E", -"( c #9F9E9F", -"_ c #9E9E9E", -": c #9E9E9F", -"< c #9D9E9D", -"[ c #9E9E9D", -"} c #9D9E9E", -"| c #9E9F9D", -"1 c #9D9F9E", -"2 c #9D9F9D", -"3 c #9E9D9E", -"4 c #9E9D9D", -"5 c #9D9D9D", -"6 c #9D9D9E", -"7 c #9D9E9C", -"8 c #9C9D9D", -"9 c #9C9E9D", -"0 c #9D9D9C", -"a c #9C9E9C", -"b c #9C9D9C", -"c c #9D9C9C", -"d c #9C9C9C", -"e c #9C9C9D", -"f c #9B9C9C", -"g c #9B9D9C", -"h c #9C9D9B", -"i c #9C9C9B", -"j c #9B9D9B", -"k c #9B9C9B", -"l c #9B9B9B", -"m c #9B9B9C", -"n c #9C9B9B", -"o c #9A9C9B", -"p c #9B9C9A", -"q c #9B9B9A", -"r c #9A9C9A", -"s c #9A9B9A", -"t c #9A9B9B", -"u c #9A9A9A", -"v c #999B9A", -"w c #999B99", -"x c #999A99", -"y c #9A9B99", -"z c #999A9A", -"A c #9A9A99", -"B c #989A99", -"C c #999A98", -"D c #989A98", -"E c #999999", -"F c #999998", -"G c #989998", -"H c #989999", -"I c #989997", -"J c #989A97", -"K c #979998", -"L c #979A98", -"M c #979A97", -"N c #979997", -"O c #979897", -"P c #989898", -"Q c #989897", -"R c #979898", -"S c #969897", -"T c #969997", -"U c #979896", -"V c #969896", -"W c #979996", -"X c #969996", -"Y c #969796", -"Z c #969797", -"` c #979797", -" . c #979796", -".. c #969795", -"+. c #969895", -"@. c #959895", -"#. c #959796", -"$. c #959896", -"%. c #959795", -"&. c #959695", -"*. c #959696", -"=. c #959794", -"-. c #959694", -";. c #949695", -">. c #949795", -",. c #949794", -"'. c #949694", -"). c #949693", -"!. c #939693", -"~. c #939694", -"{. c #949594", -"]. c #949593", -"^. c #939593", -"/. c #939594", -"(. c #929593", -"_. c #939592", -":. c #939493", -"<. c #929592", -"[. c #929493", -"}. c #929492", -"|. c #939492", -"1. c #929491", -"2. c #919592", -"3. c #919492", -"4. c #919491", -"5. c #919591", -"6. c #929591", -"7. c #919391", -"8. c #929392", -"9. c #929391", -"0. c #919392", -"a. c #909391", -"b. c #919490", -"c. c #919390", -"d. c #909390", -"e. c #909490", -"f. c #909491", -"g. c #909291", -"h. c #909290", -"i. c #919290", -"j. c #8F9290", -"k. c #8F9390", -"l. c #90938F", -"m. c #90928F", -"n. c #8F938F", -"o. c #8F928F", -"p. c #90918F", -"q. c #8F9190", -"r. c #8F918F", -"s. c #8F928E", -"t. c #8E928F", -"u. c #8E918F", -"v. c #8F918E", -"w. c #8E928E", -"x. c #8E918E", -"y. c #8E908E", -"z. c #8E918D", -"A. c #8D918E", -"B. c #8D908E", -"C. c #8E908D", -"D. c #8D918D", -"E. c #8D908D", -"F. c #8C908D", -"G. c #8D908C", -"H. c #8C908C", -"I. c #8C8F8C", -"J. c #8D8F8C", -"K. c #8C8F8D", -"L. c #8D8F8D", -"M. c #8B8F8C", -"N. c #8C908B", -"O. c #8C8F8B", -"P. c #8B8F8B", -"Q. c #8B8E8C", -"R. c #8C8E8B", -"S. c #8B8E8B", -"T. c #8C8E8C", -"U. c #8B8E8A", -"V. c #8A8F8B", -"W. c #8A8E8B", -"X. c #8B8F8A", -"Y. c #8A8E8A", -"Z. c #8A8F8A", -"`. c #8A8D8A", -" + c #8A8D8B", -".+ c #8B8D8A", -"++ c #898E8A", -"@+ c #8A8E89", -"#+ c #898E89", -"$+ c #8A8D89", -"%+ c #898D89", -"&+ c #898D8A", -"*+ c #898C89", -"=+ c #8A8C89", -"-+ c #898C8A", -";+ c #898D88", -">+ c #898C88", -",+ c #888D89", -"'+ c #888D88", -")+ c #888C89", -"!+ c #888C88", -"~+ c #888C87", -"{+ c #878C88", -"]+ c #888B88", -"^+ c #878C87", -"/+ c #878B88", -"(+ c #888B87", -"_+ c #878B87", -":+ c #868B87", -"<+ c #878C86", -"[+ c #878B86", -"}+ c #868A86", -"|+ c #878A86", -"1+ c #878A87", -"2+ c #868B86", -"3+ c #868A87", -"4+ c #858A86", -"5+ c #868A85", -"6+ c #868B85", -"7+ c #858A85", -"8+ c #858B85", -"9+ c #858B86", -"0+ c #858986", -"a+ c #858985", -"b+ c #868985", -"c+ c #868986", -"d+ c #848985", -"e+ c #848A85", -"f+ c #858984", -"g+ c #858A84", -"h+ c #848984", -"i+ c #848A84", -"j+ c #848884", -"k+ c #858884", -"l+ c #848885", -"m+ c #848983", -"n+ c #848883", -"o+ c #838984", -"p+ c #838883", -"q+ c #838884", -"r+ c #838983", -"s+ c #838783", -"t+ c #838784", -"u+ c #838882", -"v+ c #828882", -"w+ c #828783", -"x+ c #828883", -"y+ c #838782", -"z+ c #828782", -"A+ c #828781", -"B+ c #818782", -"C+ c #818781", -"D+ c #828682", -"E+ c #818681", -"F+ c #818682", -"G+ c #828681", -"H+ c #808681", -"I+ c #818680", -"J+ c #808781", -"K+ c #818580", -"L+ c #818581", -"M+ c #808680", -"N+ c #808581", -"O+ c #808580", -"P+ c #7F8580", -"Q+ c #80857F", -"R+ c #7F8680", -"S+ c #7F857F", -"T+ c #80867F", -"U+ c #7F867F", -"V+ c #80847F", -"W+ c #7F847F", -"X+ c #808480", -"Y+ c #7F8480", -"Z+ c #7E847F", -"`+ c #7E857F", -" @ c #7F847E", -".@ c #7E847E", -"+@ c #7F857E", -"@@ c #7E837F", -"#@ c #7F837F", -"$@ c #7F837E", -"%@ c #7E837E", -"&@ c #7E847D", -"*@ c #7D837D", -"=@ c #7D847D", -"-@ c #7D847E", -";@ c #7E837D", -">@ c #7D837E", -",@ c #7D827D", -"'@ c #7C837C", -")@ c #7D837C", -"!@ c #7C827D", -"~@ c #7C837D", -"{@ c #7D827C", -"]@ c #7C827C", -"^@ c #7B827C", -"/@ c #7C827B", -"(@ c #7C817C", -"_@ c #7B827B", -":@ c #7C817B", -"<@ c #7B817B", -"[@ c #7B817C", -"}@ c #7A827B", -"|@ c #7A817B", -"1@ c #7B817A", -"2@ c #7A817A", -"3@ c #7B807B", -"4@ c #7A807B", -"5@ c #7B807A", -"6@ c #7A807A", -"7@ c #7A8079", -"8@ c #798179", -"9@ c #79817A", -"0@ c #798079", -"a@ c #79807A", -"b@ c #7A7F79", -"c@ c #797F79", -"d@ c #797F7A", -"e@ c #7A7F7A", -"f@ c #787F79", -"g@ c #797F78", -"h@ c #798078", -"i@ c #788079", -"j@ c #787F78", -"k@ c #788078", -"l@ c #797E78", -"m@ c #787E78", -"n@ c #787E79", -"o@ c #777E78", -"p@ c #787F77", -"q@ c #787E77", -"r@ c #777F77", -"s@ c #777E77", -"t@ c #777F78", -"u@ c #787D77", -"v@ c #777D78", -"w@ c #777D77", -"x@ c #767E76", -"y@ c #767E77", -"z@ c #777E76", -"A@ c #767D77", -"B@ c #777D76", -"C@ c #767D76", -"D@ c #757D76", -"E@ c #767C76", -"F@ c #767D75", -"G@ c #757D75", -"H@ c #757C76", -"I@ c #757C75", -"J@ c #767C75", -"K@ c #757C74", -"L@ c #747D75", -"M@ c #747C74", -"N@ c #747C75", -"O@ c #757B75", -"P@ c #757B74", -"Q@ c #747B74", -"R@ c #747B75", -"S@ c #747C73", -"T@ c #747B73", -"U@ c #737C74", -"V@ c #737B74", -"W@ c #737C73", -"X@ c #737B73", -"Y@ c #747A74", -"Z@ c #747A73", -"`@ c #737A74", -" # c #737A73", -".# c #737B72", -"+# c #727A73", -"@# c #737A72", -"## c #727B73", -"$# c #727A72", -"%# c #727B72", -"&# c #737972", -"*# c #727973", -"=# c #727972", -"-# c #727A71", -";# c #727971", -"># c #717A72", -",# c #717972", -"'# c #717A71", -")# c #717971", -"!# c #717871", -"~# c #717872", -"{# c #727871", -"]# c #717970", -"^# c #717870", -"/# c #707970", -"(# c #707971", -"_# c #707871", -":# c #707870", -"<# c #050505", -"[# c #6D6D6D", -"}# c #000000", -"|# c #666666", -"1# c #606860", -"2# c #506050", -"3# c #5D5C5D", -"4# c #202F2F", -"5# c #1F261F", -". + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @ ", -"# $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % ", -"& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & * = ", -"& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & * = ", -"& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & * = ", -"& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & * = ", -"& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & * = ", -"& & - & & & ; & > - & - ; - - & & & & & & & & & & & & & & , & & & & & - > & > & & & & & & - , & - > > & & & & & & & & & & & & & > & - & & & & & & & * = ", -"& & & ' ; & & ' ; & ' - & > > ) ; & ) > , & & & ) & & & & - & & & > > & ; > - & & ; - ) - & & & > ; - & & - ) ; & & - & ; ; & & & & ; & > > & & & ) * = ", -"- > & ) & ; & - > > & ; > & ; & - & > , > ) > & - & - > & , & & > - ; > ! ' & & > & & ! - & - & ; & - & - & - > & ) ' ) - & > ' & ' > ; & - > & ' & * = ", -"- - ! - ' & ' ' ) & ; ) - > & & ; & - ) & > - - > - - > & ' ! & ' > ! ; ) & & > > - > & > , > ) - ; & > ' - ! ; ) ! ' & - ' ) ' ) - & ; - - & & , & * = ", -") > - - ) ! ; ) ! ! , , - ' ) > - ' ) ) - ' ; & , & , ! ' ) ! ; & > & , - ) ) & ! & & ! - ' ! ! , - ' ! ; > - ' ' ' ! ' , - > , > ' ! ) ' , - ! > ) * = ", -") , ! , - ! ! , ) - ! , ! > > & - ) ; ; ' ; ) ! - , ! ' ) ' ' ' , > ; ! > > ) ) ; ' , - ) , , & > - > ! ! ' - ! ! ) ! > - ; ' ; ' ! , , ) ! ) ) ' ! * = ", -"' ! ) ! ; , - ' ! , ' ' ; , ! ! ' ' ! ! ! ! ' > - ! - ! , ' ! ! ) & ' ! ' ) ! ' , , ' ! ' - > > ! ! ' ) ! ! ' ! ! ' ' ! ! ! , - ! ' ) ' ! ' ) ! ! > * = ", -"' ! ! ! ! ' ! ' ) ! ) , ! ! ! ! ! ' ! ' ! ' ! ! ' ! ! ' ' , ! ' ! , - ! ! , ! ! ! ! ' , ! ' ) ! ! ' ! ' ! ! ! ! ) ! ' ' ! ! ! ! ' ' > ! ! ! ' ! ) ! * = ", -"! ~ ! ! ! ! ! ! ' ' ! ! ! ' ! ! ! ' ! ! ! ! ! ! ! ! ! ! ! ! ! ! ~ ! ! { ! ' ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ' ! ! ! ' ! ! ! ] ! { ! ! ! ! ! * = ", -"! ! ! ! ! ~ ! ! ! ! ! ~ ] ! ! ! ! ~ ~ ! ! ! ! ! ! ! ! ~ ~ ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ' ! ! ] ! ~ ~ ~ ! ] ] ! ! ! ! ! ] ~ ~ ! ! ! ' ! ^ ] ] * = ", -"! ~ ! ] ! ! ! ~ ! ! ! ! ] ] ! / ! ] ( ! ! ( ! ! ! ! ! ] ( ! ~ ! ~ ~ ! ~ ] ] ] ! ! ! ! ~ ! ] ] ^ ~ ( ! ( ! ^ ] ] ] ! ! ~ ~ ! ~ ! _ ] ] ! ~ ! ] ! ! ! * = ", -"^ ! ^ ] ~ ] ! ! ! ^ ! ^ ! / ^ : ~ ~ ] ! ~ ^ ! ~ ~ ^ ^ ! ! ^ / ^ ( ! ! ( _ : ] ^ ! ~ ! ! ! ! ! ! ] ! ^ ! ~ ^ ! ! ~ ! ] ( : / : _ _ ] ] ^ ! ] ! ] ! ! * = ", -"] ( ~ _ ^ : ^ ] _ _ ^ ^ ! ~ ! ] _ ~ / _ _ ~ ! ^ : ^ ] ] _ ^ ! : / ] ^ ! ] ( ] ^ ^ / ! ] _ ^ ~ _ : ~ / ~ ] ^ ] ! ~ ^ ^ / ] / ] ] ^ ~ ] ] : ] _ ! ] ^ * = ", -": ^ : _ _ ^ ^ ^ ! ] ^ ^ ! ^ ] / _ _ : ~ ~ / ~ : _ : _ ! : _ ~ ^ : ^ : _ ] / ~ _ ^ _ ~ ( ^ ^ ! ^ ^ _ _ _ ~ _ ^ ^ _ ] _ _ ~ ! ^ : _ _ ~ _ ^ _ ] ! ^ ^ * = ", -"_ ! ^ ] _ _ ^ _ ^ ^ : ! ^ ^ ^ _ _ _ _ : _ _ ~ _ : _ / ^ ^ _ / ^ _ ] / _ ~ ] _ _ ~ _ _ ~ _ _ _ _ _ ^ ^ _ ] : ^ ] / ^ ^ ~ ^ _ _ / : ^ _ ] : ^ ^ ^ : _ * = ", -"_ _ ~ ^ _ ^ ^ _ ~ ^ _ _ _ _ _ _ _ ^ ^ _ _ ^ _ ^ _ _ _ _ ^ _ _ _ _ ^ _ _ ^ _ ^ _ _ _ ^ ^ ^ ^ _ / _ _ ^ _ _ ^ ^ _ ] ^ _ ^ _ _ _ ^ ^ _ ^ _ _ ^ _ _ ] ^ * = ", -"< _ _ _ _ [ } ^ _ _ } [ [ _ ^ ^ } ^ ^ _ ^ _ _ ^ ^ _ _ [ _ _ _ _ ^ _ ^ ^ _ _ ^ } _ _ ^ _ ^ _ _ [ _ _ _ _ _ _ _ _ _ ^ _ [ ^ _ _ _ _ | [ [ _ _ ^ _ _ } * = ", -"[ [ [ < _ _ [ _ _ 1 _ 1 ^ _ _ _ _ _ 2 _ } ^ ^ _ _ < } _ _ _ _ ^ _ < _ ^ ^ [ _ } } [ _ | _ } _ _ } _ } _ _ _ _ _ ^ _ | } | _ _ [ _ ^ _ _ [ [ } _ ^ [ * = ", -"_ _ } _ _ [ _ _ [ _ _ _ } < [ } _ _ < < } [ < [ _ } } _ } } } [ < _ } [ _ < _ [ _ _ _ _ _ _ [ [ } < } _ [ < < } } _ < } } _ } _ [ } < } _ [ _ _ [ < * = ", -"< _ 3 [ [ } 4 [ } 3 } _ _ } 5 < 5 _ _ } [ [ } [ < < < [ } [ < < 4 5 [ 6 [ [ 4 < } [ 5 _ } _ < 5 < } [ } [ [ < [ < } < } } } } } 5 [ 4 _ 5 _ [ < _ 4 * = ", -"5 5 5 < < [ [ < < [ 4 < [ 5 < 6 < < } _ [ < < < 6 < } 5 4 } [ < } [ 5 } < < 5 < 5 < [ } < < [ < 5 5 5 } < 5 _ _ < < 5 } < 4 _ < _ < < 6 [ < < < < [ * = ", -"< < 4 [ < < 5 [ } < 5 5 < < 4 5 } < 5 5 < } 5 5 5 } < < } < 4 5 } < < 5 [ } < < 6 5 < < < < 5 } 5 5 < < 5 } [ < < < < < 5 } 5 5 < [ < < < } } < < 5 * = ", -"< < < 5 5 5 < < < 7 < 5 5 < 5 < < < 5 5 < 5 5 < < < 5 5 5 < 5 < < 5 < < 8 < < < 5 5 < 5 5 < 5 5 < 5 < 5 < < < < 5 < 5 5 < < 5 < < 5 5 < 5 < < 5 < < * = ", -"8 8 8 5 5 5 5 5 5 8 9 5 5 < < 8 5 5 0 5 5 5 5 5 < < 5 5 < < < 7 < < 8 0 5 < 5 5 0 5 8 < 5 5 8 5 5 5 5 5 8 < < 5 5 5 5 5 5 0 5 5 < 5 5 < 5 < 5 < a 5 * = ", -"5 5 5 a a 0 8 5 8 5 0 < 5 5 7 < 5 8 0 0 5 < 8 8 5 0 0 9 b 5 8 8 9 5 5 5 < 5 5 0 8 8 5 < 8 5 b 0 9 0 < 7 0 0 5 8 < 5 a 0 5 8 8 8 5 7 5 8 7 5 0 7 0 8 * = ", -"5 8 5 5 8 < 5 8 b 8 0 5 b b 0 8 b 5 < 5 5 0 5 8 b 8 5 5 0 b 0 0 5 8 8 8 8 5 8 b 8 8 0 8 5 b b b a 5 8 8 5 7 5 b 9 b 5 8 5 8 b 8 8 7 5 8 < 0 0 5 5 b * = ", -"b b 0 8 0 b b 0 b b b b b 8 b b 8 b b b b b 8 b 0 b 8 0 0 b b 8 b 5 b 0 b 8 5 b b 5 8 b 5 8 b c 8 b 8 8 0 5 8 b b b b 8 0 b 8 0 0 b b d 0 8 e 0 b 0 * = ", -"b b c b 8 8 b b d b 8 d b b b e 8 0 b b b b d 8 d 5 b b b b 5 b b b 0 b d 0 b 8 b 0 d 5 d b 0 b b 0 b b 8 d b d 0 b b b b 8 c d b b b 8 d b 0 d 8 b * = ", -"d b d d b b b d d b b b b b b b b b d d b b b b d b d b b b b d b b d b b b b d b b b b d b b b b d b b d b d b d b b d b b b d d d b b b b d b b b * = ", -"b b b f g b b d d b d b h b b b d i d b b i d d d d b f b i b d h d b b b b d b j d b d f d i h b f h b h d b b d d b b d d b d d b b d d d f d d d * = ", -"b f b i g d d k d d i d g f k b d i b g d i i g h d h f g i i i i b g f b k h i b i h h i b d d f b b b d d d k j h f i g k j b b b d j j i d b d d * = ", -"k d h k i k g f d d i d i i d i d k i f i k k k d f h i d d k h h f i i h f f k j h i d d d i i f i i f i i k g f j d h i d k i f i k b d b d f i i * = ", -"k i f i f k i i k g k k i f j k k j k k k k i k f i k k k j k i k j k d f k k f i k d k j k d i k k i d g d i k k k k b d k f i j f f k d k j d f k * = ", -"f k k k i k k k k k k k k i i k f k k k k k k k l d m k l f k k i k d k f f f k k k k k k k k k k k k k n k k k k m k k k i k k k k f k k f k k k k * = ", -"k k k k k k k k l k k k k k k k k l o k k k l k k k k k o k p k k p k k l k l k k p k k k k l k l k l k k k o k k k k l k k p k k k k k k k k k k k * = ", -"k o k o k k k k q l p k l k l o k r q o l s k o l k o k k k o k k k q k k l o l l o k k k o k k p r l k k k k t o k l o q o s l k k k k l o k p k k * = ", -"k l q t k k r l p l k q s k l k r t k s k t p o l k t l k l s o l r l t k q t o t s l q k l o s o k s r s t k p q k p k t l p l o o s q o q t s l q * = ", -"p q o s s p p s s s l s o s s q q l o o l t r q r q s r l r r t o p k s t l q s t s p s s r t p s t r t q o r t t r o r p s s r s s t p s s l t o r * = ", -"s r q p q s s s s s s s s l r s s s q s t t l s s s t s s s r s t p s s o s s t s s s t s q s s q s s q s s s s s s s s q q s r s s s s t q s q s s * = ", -"s s s r s s s q s s s s s s s s s s s s t s s s s q s s s s s s s s s s s t s s s s s s s s q s s s s s s s s s s s s t s s s s s s s s s s s s s s * = ", -"s s s u s s s v s s w x y s s s u s s s s s y y s v s s y s y s y s y s u s y v v y z u v s s v s y v y s s v u s s s u s s s s y u s s v w u v s s * = ", -"v u s y s u s v s u v u y u A A y x s z x s s v s A w z s u w v s u s A w v v y v w v v s y y s u s s s y s w A v v z A s v s s s u u y A z v w A u * = ", -"s s A x v y v s y y w w u A y w s v y v x w s s y v x s v y y x s A s y s v w v A u w s u s z u s z v s x u A z x y v z v w A A z x u w y y u v z y * = ", -"x x z A w w x x x x v y x x x x x v z A x x x x x x x A A A A w w z z x x y x w A A w w x x w x x u z v w x x A x w u x w z y x z A w A x x x x v v * = ", -"x x x x x x x x x x x x x x w x w x v x x x A w x x x x x x z x v x x w x x x x x y x x w x x z x z x x x x x x x x x x x x x x x x x x x x x x x z * = ", -"x x B C C x x x x B x B x C C B x x x x C x x w x C x x x x x x x x x x x B B x B C D C w x x x C x x x x x x x x x x x x w x B x D D C x w x x D x * = ", -"D x B x C C E C x x B B x x D x x F C B B B x C x C C B B x B B D C C E x B C B x B C B x B x B B C B x C D D x B x B x B B x x D x E x B x B x x D * = ", -"C x C B D D D C C C x x D C C C G D B x x G D B B B G E x D C C x x D B D H x D D x C x D B x B B x B F x D H D C x C E B D H D B C E B H x F C x C * = ", -"C G G D H D D D D D C G D C B F C G D B G C D D D B D D G G G C G B D G F C G G B F G F H G C G x G D D D E G D E F G F E B G D F G G G F F G G D G * = ", -"D F D G G D B G G G G G G G G G H D G G B D G G G G F F G D G D G G G G G D H G G D G G D G D D G D G G G G D G D D G G G D G D D H D H G G D G D G * = ", -"I G G G G G G G G G G J J D K G G I G K G I G G G D G G D D G I G I L G G K G G I G K I I K K K G G K G G G L G G D G G K K M I G G G J I G G G G G * = ", -"G N K K N N N N I N G G K N K G N G I N G G K N L I K G G K G I G G K I I G G G G I K K G I G N I G K N N G G I K N K G N N N G K K G I I N N G G G * = ", -"K K O N K I G N I N N K N N N P N I O K P P G K N G K K G Q N I K I N N I K G I I N O K N Q I K R I O K N O I I Q I R K G K R N I I K K Q P P K Q R * = ", -"N N O Q G I O N O N I K I N O N O N K N I R O O N N N I Q P O N O N G N N N O N N I I O O K R N N N O N I N N N I G Q N N I N I N N Q N N R N I K N * = ", -"O O N N N O N O N N O O O O O O O O O O N O O O N O O N O O O O N O N O O O O N N O O O N O N O O N O O O N O N N N N O O O N O N N N O O O O O N O * = ", -"S T S O O O O U O V O W N U N U V W U O S U O U O O O N O O N S W S N W N N O O O N O O O O O O T N N S O O O W N T O O S S W O V O U U O S T O X V * = ", -"U V W V V U V V S S O O U N S O S S U T S S O U O T S V S W S S O S O U O U S V S O S O O N O S S S U U S S S O U U U U S S U O O N V U V U V V T V * = ", -"S U S V Y V S S V O V V V V S V S Z V U O V S O V V U V V O S U V V V Y U U O V V U S ` V V O U O U S U O V V O V V O V V V U S V V V U S S V V O V * = ", -"V U V V Y V S Y .V Y V V V V V V V V V V V Y V U V S V S U V V Y S Y U Y V V V Y V V S V Y U V S V V V .Y V V V .V V U V Y Z Y V V S V .V Y V Y * = ", -"Y V V ..V Y Y +.Y V V V +.V Y V V ..V @.Y +.+.#.Y V V V V Y Y Y V V Y Y V Y Y V Y Y Y V Y V Y V Y +.Y Y V Y V +.V #.V V V Y V $.Y #.Y Y Y V ..Y V V * = ", -"V #.#.$.Y +.Y ..Y Y +.$...V Y Y $.+.V Y #.Y ..V Y Y #...Y #.#.V V Y #.Y #...V Y V $.#.V ....#.V ......#.Y +.#.V V Y #.Y Y ..V V ..Y #.Y V Y ..+.V V * = ", -"%.@.#.$.V +.......@.Y #.Y #.#.%.%...%...@...%...%.@.%.%.V %.#.Y %.%.Y V #...Y $.%.%.Y #.@.#.Y ..Y ........+.Y +.%.#.@.%.Y @...Y $.Y %.#.Y %...%.Y #.* = ", -"%.%.#.%.#...%.%.%.%.%.#.%.%.%.#.@...Y %...#.....Y Y %.#...%...%.%.%.%...%...#.....%...%.#...%...%.#...%.%.%.%.%...+.Y %.%.#.Y ..%.%.#.%.%.#.%.%.%.Y * = ", -"&.%.%.%.%.%.%.%.%.&.%.%.%.&.%.%.%.%.%.%.#.%.%.&.%.%.%.&.#.%.%.#...%.&.&.%.%.%.%.&.%.%.%.%.%.%.&.%.%.%.%.%.%.%.%.%.%.%.%.%.%.*.%.%.%.%.%.%.%.%.&.%.%.* = ", -"%.%.%.=.=.%.%.=.-.=.%.%.=.%.;.%.%.&.%.-.&.&.%.&.%.&.&.=.%.%.&.%.%.%.&.=.&.-.=.%.;.%.%.&.;.%.%.;.%.%.>.&.%.&.,.%.,.&.&.&.=.%.&.%.'.%.&.%.&.%.>.&.%.%.* = ", -"&.&.%.'.=.'.>.-.%.&.;.=.'.&.,.=.>.&.=.=.&.'.'.>.=.&.>.=.>.%.'.'.%.%.%.%.%.,.>.'.=.,.&.%.%.>.%.-.=.&.=.,.;.'.'.>.&.%.>.=.;.-.>.'.;.%.&.,.;.;.&.-.&.,.* = ", -"%.-.-.,.=.'.'.%.'.-.'.,.'.%.>.,.;.;.'.'.;.>.;.'.'.-.;.'.=.&.;.,.-.'.>.'.'.-.&.-.=.>.>.'.=.,.'.'.%.=.'.-.'.'.'.-.;.'.'.,.-.=.>.'.-.=.,.&.'.'.'.'.'.,.* = ", -",.'.'.-.'.;.'.,.'.'.'.'.;.,.'.'.'.'.'.'.'.,.'.'.'.'.'.'.,.'.'.'.'.'.'.'.'.'.,.'.-.'.'.'.-.'.'.'.'.'.'.-.'.'.;.-.,.'.'.'.;.'.'.'.'.'.'.'.'.'.,.'.-.'.* = ", -"'.).).'.!.'.'.'.'.'.~.'.'.).'.{.~.{.~.'.'.'.'.'.'.'.'.'.).'.'.'.{.).'.'.'.'.'.'.'.'.'.).'.~.{.).~.].'.'.'.'.'.'.).).'.'.).'.'.'.'.'.'.].'.).'.'.~.'.* = ", -"~.'.^.).'.'.'.!.).~.'.).).{.{././.~.].'.~.{.~.'.'.{.!.'.).].].'.).~.'.~./.{.'.'.].^.!.'.{.).~.'.).'.'.!./.'.~.'.!.'.'.~./.{.]./.].'.!.).'.^.'.{.^.'.* = ", -"~.).{.).~.'.].^.'.!.^.'./.^.~././.!.~.!.!.!./.'.).^./.~./.).~.'.^.^.{.{.~.^.].~.~./.).~./.^.~.~.!.~.{./.'.].).!.'.~.].).!.^.~./.].~.'.!.~.^.!.'.).^.* = ", -"{.!.^.).^.^.^.!.^.!.].'.~.!./.^.!.{.^.^.^.^.{.^.^./.!.^.^.!.^.^.!.!.).^.!.^.!.!.^.^.].~.!.].!.!.^.!.!.^.^.^.^./.^.^.).^./.^.!.^./.^./.].~.'.!.!.!.!.* = ", -"^.!.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.(.^.^.^.!.^.^.^.^.^.!.^.^.^.^.^.^.(.^.^.^.^.^.^.^.^.^.^.(.^.^.^.^.^.^.^.^.^.^.^.^.^.^.!.!.^.^.^.^.^.^.^.(.^.* = ", -"_.^.^.(.^._._.^.(.^.^.:.^.(._.^.^.<.^.^.(.^.<.^.<.^.(.^.(.(.^.(._.^.^.^._._.(.(.^.^.^.(.<.^._.^.(.<.(.(._.^._.^._.^._.(.^.^.(.^.(.^.<.(.^.^.^._.(.[.* = ", -"(._.^.:.(.<.[.(.^.(.}.[._.(.^.(._._._.(.:.<.(.[.(.^.}.<.[.(._.[.<._.|.}.^.(.^.}.<.[.(.(.[.:.[.<.(.[._.:.[.^.^._.}.(.(.^.^.^.:._.<.[.<.|.(.(.[.(.[.^.* = ", -"<.}.<.<.<._.}.<.<.<.}.<.}.<.<.:.(.[._.(.<.[._.}._.}.<.<.}._.}.}.^._._.}._.}.}.<.}.<._.<.^.:._.}.^.<.}.<.}.<.}.}.|.(._.^.(.:.<.^.<.<.[.<._._.|.<.<.}.* = ", -"<.}.<.}.}.}.}.<.}.}.}.|.<.}.}.<.<.}.}.}.}.}.}.}.}.<.}.}.}.}.}.}.}.<.}.}.<.<.<.}.}.}.}.<.<.<.}.}.<.}.<.(.}.}.}.}.|.<.}.}.<.}.<.}.}.}.<.<.}.}.}.}.}.}.* = ", -"}.}.}.1.2.1.}.1.}.}.3.}.1.}.}.<.4.}.3.}.}.}.}.}.3.3.}.<.1.1.2.}.4.<.}.5.3.6.}.1.}.1.}.}.1.}.1.}.}.1.4.}.}.3.}.1.5.4.4.}.<.3.3.3.1.}.}.4.2.}.3.<.<.}.* = ", -"4.1.}.}.}.1.3.}.1.1.3.4.}.}.}.}.}.}.4.1.3.4.1.}.}.4.3.4.}.7.1.}.4.}.4.1.}.1.3.}.1.}.4.7.8.3.3.4.1.1.1.1.1.}.3.4.}.}.9.3.1.}.3.1.3.}.1.4.}.4.1.}.1.}.* = ", -"0.3.1.1.}.0.4.4.1.4.4.4.7.9.4.4.1.1.3.7.8.8.4.7.4.4.0.4.7.8.7.4.3.4.4.1.1.3.1.9.8.4.4.1.3.4.7.4.1.3.}.7.1.3.1.4.7.7.4.3.4.3.8.4.}.4.4.7.}.1.4.1.1.1.* = ", -"4.7.7.7.4.7.4.7.3.1.4.4.7.7.4.1.7.7.4.7.1.7.4.7.3.4.7.4.7.4.7.7.7.4.9.4.7.7.4.7.7.7.7.7.7.4.7.4.4.4.4.7.4.3.7.4.4.4.7.4.9.4.4.4.3.4.4.4.4.1.7.7.4.4.* = ", -"4.a.b.7.7.7.7.7.7.c.b.a.c.7.c.7.c.4.c.7.4.7.4.a.7.4.7.7.7.a.b.7.7.a.4.c.7.c.7.a.4.7.7.d.7.7.7.a.b.e.7.7.7.4.c.e.d.4.4.7.c.a.7.7.7.7.7.e.4.7.7.b.4.c.* = ", -"e.c.a.a.a.d.a.7.d.4.a.f.d.c.7.d.7.7.a.e.d.d.a.c.7.d.d.a.c.a.d.a.4.4.7.f.7.d.7.a.7.d.b.7.7.7.c.a.7.7.f.c.d.c.e.a.7.c.c.a.7.d.7.a.a.a.7.4.f.7.d.7.7.d.* = ", -"a.a.d.c.d.d.d.a.d.c.d.7.a.d.d.a.d.d.7.7.7.d.d.g.d.a.h.d.d.d.d.a.7.7.a.d.7.d.a.d.7.d.d.d.a.d.h.a.d.c.d.h.7.d.d.d.d.7.d.d.a.d.a.d.a.d.h.d.c.c.a.7.c.d.* = ", -"d.d.d.h.h.h.d.h.d.g.d.d.d.d.d.h.d.a.h.d.d.h.d.d.i.d.d.d.d.d.a.d.d.d.h.a.a.d.d.d.h.d.d.d.d.d.d.h.d.g.d.d.h.h.d.d.h.d.h.d.d.d.d.d.d.h.i.d.d.h.h.h.d.d.* = ", -"h.j.k.d.h.j.h.j.h.d.d.d.l.d.h.d.l.l.d.m.d.h.l.h.h.h.n.d.l.h.d.h.k.d.k.h.d.d.d.m.d.d.h.k.h.j.m.k.d.h.h.l.h.d.d.k.h.d.h.d.h.m.l.d.l.k.d.k.h.l.d.m.d.m.* = ", -"k.k.h.m.j.h.l.d.m.j.d.j.m.h.j.o.j.h.k.m.k.m.n.j.j.o.d.d.j.m.h.n.o.d.m.o.d.h.h.k.h.j.o.d.h.d.l.l.j.o.h.j.d.o.n.m.k.k.m.h.d.j.h.j.k.h.j.j.j.h.l.j.j.d.* = ", -"o.h.n.o.n.o.o.o.j.m.j.j.h.h.m.j.o.o.j.o.o.j.h.o.o.j.o.o.k.o.h.h.o.o.o.j.h.o.m.j.n.m.h.j.o.j.o.h.m.m.n.o.j.j.o.m.o.o.j.j.j.o.o.o.j.o.n.m.o.o.o.o.n.m.* = ", -"o.o.j.p.o.o.o.o.o.o.o.j.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.m.o.q.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.m.o.m.m.o.o.o.j.o.o.o.o.o.o.o.r.o.q.o.o.o.o.o.m.o.j.o.m.o.* = ", -"o.o.o.s.o.r.r.r.o.r.r.r.o.t.u.r.o.o.o.t.s.o.u.o.o.o.o.o.o.r.o.o.s.r.o.o.o.o.t.u.o.o.o.o.r.o.o.s.o.o.u.v.o.o.o.r.r.r.o.w.v.r.o.r.o.r.r.r.o.o.t.r.o.o.* = ", -"o.t.r.t.s.v.r.u.w.w.r.x.x.t.w.v.v.x.o.r.r.r.w.o.v.s.o.w.o.w.u.r.u.u.w.o.o.o.w.r.u.u.s.x.o.s.r.v.r.u.x.w.s.s.w.w.s.r.v.v.r.u.r.o.r.s.s.o.r.u.u.r.t.r.* = ", -"u.x.u.u.t.x.t.x.u.x.w.x.u.u.t.u.o.s.s.v.x.t.w.v.x.x.x.v.w.x.v.x.r.v.v.w.t.w.u.s.o.u.u.w.v.w.r.x.t.t.o.t.r.v.x.x.v.v.x.u.u.x.t.u.w.v.w.v.x.w.w.x.x.x.* = ", -"u.x.x.v.x.x.x.x.x.x.v.u.x.v.x.x.w.x.x.v.x.u.x.u.x.x.w.u.x.x.x.w.v.x.x.x.x.r.x.x.x.x.x.w.x.x.x.r.x.x.x.x.x.x.x.x.u.r.x.x.x.v.x.x.x.u.x.x.x.x.v.x.x.x.* = ", -"x.x.x.x.y.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.y.x.x.x.x.y.x.y.y.z.x.z.A.y.x.x.A.x.x.x.x.x.x.x.z.x.A.z.x.B.z.x.z.z.x.x.y.z.x.z.x.z.x.x.x.x.B.y.x.x.x.B.x.z.* = ", -"B.z.y.A.C.A.y.x.B.B.A.z.C.D.C.E.x.C.D.C.z.A.B.z.D.y.C.y.D.D.x.x.z.D.x.C.z.A.z.z.z.E.E.A.B.B.x.D.x.x.z.A.A.A.x.z.E.D.D.A.C.x.D.y.x.x.B.E.A.E.x.x.A.x.* = ", -"B.D.A.x.D.C.E.D.E.D.z.A.B.C.E.B.z.A.C.E.E.E.B.D.D.E.D.A.D.E.B.C.A.z.D.D.B.x.x.x.E.D.E.z.A.E.D.y.A.z.x.x.D.A.z.E.E.B.A.z.A.D.D.B.E.C.A.B.E.D.D.C.y.C.* = ", -"E.B.D.E.E.D.z.E.A.E.E.B.E.E.B.D.E.B.E.E.E.E.E.D.E.D.D.E.E.B.E.E.E.E.E.E.E.D.B.E.E.E.E.E.C.D.E.E.E.E.E.B.E.C.E.D.E.E.C.B.E.D.E.E.B.E.E.E.E.D.C.E.E.D.* = ", -"E.F.G.E.E.E.E.E.E.E.E.E.E.E.E.D.E.E.F.E.E.E.E.E.G.E.G.E.E.E.E.E.E.F.E.F.E.E.F.E.F.G.G.E.E.E.E.E.E.E.E.E.E.E.D.E.E.E.E.E.G.E.E.F.F.H.E.F.E.E.E.G.E.E.* = ", -"G.F.G.E.H.G.H.E.H.E.E.H.I.J.E.E.G.E.E.K.G.H.I.K.E.E.G.H.E.G.E.F.G.G.F.H.E.E.F.E.H.E.L.K.K.G.G.I.L.L.F.H.E.F.K.E.E.E.H.G.H.G.F.G.F.G.G.J.K.G.G.F.F.K.* = ", -"G.G.F.H.I.F.F.H.I.L.J.H.E.J.E.G.G.E.K.K.I.H.I.G.K.H.H.H.F.I.G.F.H.I.L.H.G.F.H.H.I.H.K.L.F.J.H.G.G.G.J.I.H.H.I.L.K.I.I.F.G.H.H.G.G.J.H.H.H.J.H.K.I.H.* = ", -"H.I.I.H.G.I.H.I.I.I.I.I.I.H.G.I.I.H.I.I.I.I.H.I.F.F.I.F.H.I.I.I.I.I.H.I.H.I.I.L.G.I.I.I.I.H.G.I.H.H.H.I.I.I.I.H.F.I.G.I.I.I.H.I.I.H.I.H.J.I.H.H.I.H.* = ", -"I.H.M.H.N.I.I.I.N.O.I.I.I.I.I.H.M.I.P.I.I.I.I.I.N.O.I.I.I.P.H.H.I.I.P.I.I.I.M.I.O.I.I.O.H.I.O.I.H.I.I.H.I.I.I.I.O.O.I.H.I.I.I.M.I.I.I.I.H.I.I.P.O.I.* = ", -"I.I.I.M.I.O.P.I.M.I.I.M.P.O.M.O.O.I.I.I.I.O.O.I.O.M.I.I.I.M.Q.M.I.I.P.O.M.O.I.M.O.O.I.O.I.I.M.I.M.I.P.I.O.P.M.M.P.M.I.P.O.M.P.I.M.M.I.M.I.O.M.O.P.O.* = ", -"P.P.O.R.Q.R.S.P.M.R.P.P.O.O.O.O.O.P.I.I.P.O.M.I.O.I.M.M.R.P.P.M.P.P.O.P.S.M.O.O.S.P.O.P.S.P.R.M.M.P.P.P.P.P.P.O.P.O.P.O.P.R.P.T.P.M.T.P.O.P.P.Q.Q.P.* = ", -"S.P.S.O.P.P.S.P.S.M.P.S.P.P.P.P.S.S.P.P.P.S.S.R.S.S.S.P.P.P.P.P.P.P.S.S.P.P.S.O.S.P.S.P.P.P.P.P.S.S.Q.P.S.P.P.S.S.S.P.P.P.S.I.P.S.P.P.S.P.S.P.P.S.M.* = ", -"S.S.S.U.P.V.S.S.S.W.S.P.V.P.X.P.S.W.S.W.P.P.X.S.S.P.S.S.S.Y.U.S.W.S.S.W.W.U.W.S.S.Y.S.X.S.Y.P.P.P.S.W.U.X.S.P.S.Y.S.S.S.P.U.P.P.P.S.S.Y.S.W.X.W.P.S.* = ", -"W.S.Y.W.Y.Y.S.Y.Y.U.Y.S.Y.Y.S.S.Y.S.W.S.Y.P.W.S.S.S.U.Z.W.Y.W.Y.S.S.S.P.S.Y.X.U.S.Y.Y.Y.W.S.W.W.S.W.U.W.Y.W.S.S.W.S.P.S.S.Y.P.S.Y.X.W.S.U.S.Z.W.W.Y.* = ", -"W.Y.Y.Y.W.Y.U.`.U.Y.W.W.Y.Y.Y.S.U.Y.Y.U.S.Y. +U.U.W.Y.`.W.W.Y.W.Y.`.W.Y.U.U.Y.U.U..+S.Y.Y.U.Y.Y.W.Y.Y.Y.W.Y.U.W.U.U.W.W.U.U.Y.W.Y.Y.Y.U.U.W.Y.Y.Y.W.* = ", -"Y.Y.Y.Y.Y.Y.`.Y.`.`.Y. +`.Y.`.Y.Y.Y.Y.`.Y.Y.Y.U.Y.Y.Y.Y.`.Y.Y.Y.`.Y.Y.Y.Y.`.Y.Y.Y.Y.U.Y.`.W.Y.W.`.Y.Y.`.`.`.`.Y.Y.Y.Y.Y.Y.Y.Y.Y.`.Y.U.Y.Y.Y.Y.`.`.U.* = ", -"`.`.Y.`.++Y.++++`.`.@+Y.#+Y.Y.Y.@+$+++`.`.`.Y.@+Y.`.++@+`.++Y.Y.Y.`.`.Y.Y.$+%+%+`.`.`.`.&+Y.Y.@+Y.`.@+Y.++Y.&+Y.`.@+`.++`.$+++++&+Y.@+`.Y.&+Y.Y.`.@+* = ", -"@+$+%+#+&+%+`.`.&+Y.%+%+&+`.@+$+%+`.Y.%+&+$+&+&+$+%+%+`.`.&+Y.%+++%+`.$+&+`.$+Y.%+%+$+&+&+++`.++$+%+`.`.%+$+`.%+`.&+++Y.#+`.&+@+#+&+`.++$+@+&+`.#+%+* = ", -"`.%+@+%+%+%+$+++$+%+%+%+%+%+%+%+%+%+%+%+&+$+%+%+%+`.&+%+%+%+Y.%+$+`.`.&+%+#+%+#+#+%+%+%+%+%+%+$+%+`.%+`.%+&+%+#+$+#+%+$+%+&+%+`.$+%+%+$+`.%+%+`.%+$+* = ", -"%+%+*+%+%+%+%+%+%+%+*+%+=+%+%+*+%+%+%+%+%+%+*+*+*+%+%+%+%+%+%+%+*+%+%+%+%+%+%+$+%+%+$+%+%+%+*+%+%+%+%+%+%+%+%+%+%+%+-+%+*+%+%+%+%+%+%+%+%+%+%+%+%+%+* = ", -";+%+*+>+%+,+%+%+%+%+*+,+*+;+,+%+%+%+'+%+>+*+>+;+*+)+%+,+%+%+>+%+%+%+*+%+%+*+%+'+%+;+%+*+*+)+;+)+*+*+*+>+*+*+*+%+)+*+)+;+,+%+*+%+%+,+!+%+>+*+%+'+%+>+* = ", -")+'+;+!+;+,+,+*+*+*+)+!+)+;+%+>+!+;+*+)+%+'+)+%+*+>+%+)+>+!+!+%+;+*+!+;+)+!+*+,+;+%+'+)+;+!+)+,+*+>+*+*+'+>+*+,+>+!+;+)+>+,+!+>+%+*+,+,+)+*+>+*+*+!+* = ", -">+)+!+!+;+)+'+%+>+*+!+!+>+)+>+!+>+>+!+!+!+'+>+!+!+!+!+,+'+>+!+!+!+>+!+!+)+*+!+>+!+'+!+>+'+!+!+!+!+!+*+>+'+*+;+>+!+;+*+)+,+>+;+!+!+!+!+!+'+'+'+!+)+)+* = ", -"!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+* = ", -"!+!+~+~+{+]+]+]+]+~+~+^+{+!+!+!+!+!+!+^+!+{+{+/+{+~+{+!+!+~+!+{+{+^+~+~+{+!+]+!+!+!+~+~+]+]+!+!+!+/+]+{+{+!+!+^+!+!+~+~+(+!+!+!+!+{+{+{+^+]+~+!+~+~+* = ", -"^+(+]+!+/+{+(+~+/+(+_+!+!+~+^+/+{+(+/+_+(+_+_+~+]+~+(+!+~+(+]+]+(+{+_+_+]+^+!+!+_+_+^+/+!+^+(+~+_+^+(+(+(+^+!+!+^+/+(+^+_+/+~+^+~+^+_+~+{+{+!+{+^+]+* = ", -"^+~+]+{+_+(+(+/+(+_+_+^+_+_+(+_+(+~+_+!+_+(+^+_+_+_+(+^+^+^+_+_+{+^+_+_+_+{+(+^+^+~+_+(+_+_+/+_+_+^+/+~+(+_+_+_+/+~+^+_+^+_+(+/+(+_+(+^+/+^+_+_+^+]+* = ", -"_+:+_+_+_+_+_+^+_+_+_+_+_+_+_+_+^+_+_+_+_+_+_+_+_+:+_+_+^+_+_+_+_+_+_+_+_+<+_+^+_+_+_+_+_+_+_+_+_+_+_+_+_+_+^+_+_+_+_+_+_+_+_+_+_+_+^+^+_+_+_+^+^+[+* = ", -"_+_+_+[+_+[+_+[+[+[+_+}+:+|+[+:+_+:+_+[+1+2+_+2+:+_+_+2+_+[+_+_+_+_+_+_+_+:+_+_+_+_+[+:+_+_+_+_+_+[+_+_+[+2+_+_+_+_+:+_+[+:+[+}+_+:+2+[+_+_+[+:+_+_+* = ", -"1+:+_+_+:+:+2+[+_+1+:+_+:+:+}+3+[+:+_+1+2+_+3+_+:+|+_+2+[+2+:+_+:+}+[+2+1+:+2+_+}+2+_+2+3+:+}+[+2+[+2+_+[+2+|+}+2+[+2+}+[+1+_+2+2+1+2+:+_+}+}+[+3+:+* = ", -"}+2+}+|+}+:+}+}+|+|+2+3+}+2+}+2+}+}+}+}+2+[+[+2+2+|+}+|+}+}+2+2+}+}+2+2+3+2+}+2+2+}+}+2+}+1+:+}+|+2+}+3+2+|+2+}+_+}+2+2+|+2+2+2+2+}+|+3+}+2+2+}+}+2+* = ", -"}+2+}+}+}+}+}+2+}+4+2+}+}+5+}+}+2+}+}+}+}+}+2+2+2+2+2+}+4+2+}+4+}+}+}+2+}+4+}+2+}+}+6+}+}+}+6+}+}+}+}+}+}+}+}+}+}+2+}+}+2+}+}+}+}+}+}+}+}+}+5+2+}+}+* = ", -"4+7+4+}+2+}+5+5+}+5+4+5+}+}+}+8+}+4+4+}+}+4+5+9+4+}+5+4+}+4+5+7+5+}+4+}+5+5+}+}+9+5+5+9+}+4+}+}+5+5+4+}+}+7+5+}+4+5+}+5+5+7+2+4+}+2+}+}+}+4+7+4+}+4+* = ", -"5+}+7+5+7+4+7+7+5+5+7+7+7+0+a+}+5+4+7+4+7+4+5+}+4+0+}+7+4+7+4+a+5+0+7+a+4+0+5+7+5+b+5+7+c+7+7+4+7+5+5+}+0+4+0+4+5+}+7+5+7+7+7+5+}+5+5+c+4+7+7+}+c+4+* = ", -"4+7+7+5+4+7+a+7+4+5+b+7+7+5+7+a+4+0+a+a+a+7+4+a+7+7+7+5+a+b+4+7+4+a+7+7+7+7+a+a+4+7+0+7+b+7+7+5+a+a+}+4+4+7+7+a+7+b+a+7+7+7+a+7+7+4+7+}+7+7+b+a+7+5+* = ", -"a+d+a+7+7+d+a+7+a+7+7+a+a+a+a+e+a+a+a+7+7+a+7+a+a+7+7+a+7+d+7+7+f+a+a+7+a+7+a+7+7+a+7+a+7+a+7+g+7+7+7+7+7+7+7+a+7+d+7+a+a+7+e+7+a+a+a+7+a+7+a+a+a+7+* = ", -"a+g+f+f+h+7+a+f+a+f+a+d+f+g+a+d+d+h+h+a+7+e+d+d+a+a+f+d+f+d+f+a+d+f+f+a+7+i+d+f+a+d+a+d+h+a+f+f+a+a+d+a+7+h+7+a+d+a+d+d+a+d+h+f+e+a+d+i+h+a+f+d+a+a+* = ", -"d+f+a+h+h+d+d+d+f+h+a+d+h+h+h+d+h+f+f+a+h+f+d+d+h+h+f+d+a+a+d+h+a+e+h+f+f+h+f+h+h+d+a+a+a+h+f+f+d+d+h+d+h+h+h+d+d+h+h+h+h+d+h+a+f+d+h+a+h+h+f+h+f+f+* = ", -"j+j+h+k+h+h+j+l+d+h+j+f+h+h+h+h+l+l+d+h+h+h+d+j+h+h+a+h+j+f+h+h+h+h+h+h+h+h+h+h+d+j+h+f+k+j+l+f+f+h+h+j+h+d+h+h+j+h+j+k+h+d+h+j+k+h+h+h+j+j+j+h+k+h+* = ", -"h+j+h+j+j+h+h+j+j+m+j+h+h+h+h+m+h+j+j+h+j+j+h+h+h+h+j+h+j+j+h+h+h+h+h+j+n+j+o+m+h+j+n+h+m+j+h+n+h+h+m+h+n+h+h+j+j+j+h+h+j+h+m+m+m+h+h+n+h+h+m+h+h+h+* = ", -"n+o+n+j+m+j+h+j+n+j+n+j+j+m+h+n+p+n+j+q+j+h+m+r+p+j+m+h+h+q+o+h+n+n+j+h+h+n+m+j+r+h+j+j+m+j+h+j+h+h+h+h+m+o+q+h+j+o+j+j+m+j+q+m+j+o+q+h+n+r+o+o+h+p+* = ", -"j+p+j+q+p+p+p+r+n+n+p+n+p+n+q+n+p+n+q+p+p+j+m+p+p+n+j+n+q+n+p+p+p+q+j+p+n+n+q+p+j+p+p+h+p+p+p+o+p+j+q+j+p+n+n+p+o+p+n+o+q+p+p+p+m+p+j+p+p+q+p+p+p+p+* = ", -"p+p+p+p+p+p+p+p+q+n+p+p+p+p+p+p+p+p+p+p+n+q+p+p+j+p+p+p+p+p+q+p+p+p+p+q+p+p+p+p+p+p+s+p+n+p+p+n+p+q+p+p+p+p+p+p+q+p+p+p+p+p+p+p+s+p+t+s+p+p+q+p+p+p+* = ", -"s+u+s+s+p+v+p+p+s+p+s+p+p+p+s+s+p+p+p+p+s+p+p+p+s+s+p+p+p+p+p+u+p+s+s+p+s+p+p+p+p+p+p+s+p+p+w+w+x+p+u+p+p+p+p+s+p+p+p+p+p+p+p+p+s+s+w+x+p+x+s+s+u+x+* = ", -"p+y+p+u+s+w+s+w+s+s+z+z+s+x+u+w+s+u+v+y+u+z+s+v+p+p+y+p+w+z+p+p+u+p+w+p+x+v+s+s+p+p+u+p+s+v+u+v+w+u+s+w+u+p+y+s+x+p+s+p+z+p+y+w+y+y+p+z+p+p+s+s+z+w+* = ", -"w+v+u+v+v+w+y+u+s+p+w+y+s+s+y+z+z+s+v+y+z+z+s+v+v+x+y+s+z+v+z+v+z+y+z+p+s+w+s+z+v+u+w+z+y+w+u+y+w+z+u+v+w+z+v+s+z+y+z+w+y+v+x+u+s+v+s+y+z+x+v+z+x+v+* = ", -"y+z+z+z+w+z+z+v+y+z+z+z+z+z+z+z+w+z+y+z+s+s+z+z+v+z+z+z+z+z+z+z+v+z+z+z+z+p+z+z+z+w+z+w+z+z+z+z+v+v+w+z+z+z+z+z+z+w+z+z+u+z+z+z+y+z+w+w+z+z+z+w+z+z+* = ", -"A+z+z+B+z+z+z+z+A+z+z+z+z+z+z+z+z+z+z+z+z+B+z+z+z+z+B+z+B+A+z+C+z+z+z+D+z+z+z+z+B+z+A+z+z+D+B+z+D+z+z+z+z+z+z+C+z+z+z+z+z+A+z+B+z+z+z+z+z+z+D+z+z+z+* = ", -"B+z+B+B+A+B+B+B+A+D+E+z+E+C+D+z+E+A+E+F+G+G+B+G+F+B+G+D+B+z+D+C+B+z+z+G+B+A+D+G+A+z+C+A+z+z+B+z+z+B+C+A+z+A+A+B+C+B+D+A+D+A+A+A+B+D+B+G+B+G+D+C+B+z+* = ", -"E+D+F+E+F+G+F+G+E+E+F+z+B+E+C+G+A+C+z+C+G+G+z+C+C+G+E+F+D+C+G+A+G+C+z+B+C+E+D+C+E+B+E+D+B+B+B+G+A+C+C+z+B+E+G+B+B+B+G+E+E+E+E+C+C+F+C+C+A+E+G+F+E+D+* = ", -"E+A+F+E+E+z+E+E+E+C+B+E+B+F+E+F+E+E+F+E+C+G+E+C+E+C+C+E+E+E+E+E+C+C+E+E+E+D+E+E+E+E+G+G+E+A+B+G+E+B+D+E+E+A+E+C+E+E+C+E+F+C+E+F+E+E+E+E+E+E+G+B+F+E+* = ", -"E+E+H+E+E+E+E+H+E+C+H+H+E+E+E+I+E+E+E+E+I+E+E+E+E+E+E+E+E+C+E+C+E+E+I+E+C+E+E+E+E+I+E+E+E+E+C+I+E+E+E+C+E+E+E+H+E+E+E+E+H+E+E+E+E+H+J+E+E+E+C+E+H+E+* = ", -"H+E+H+I+K+E+K+I+H+H+L+M+E+E+E+K+I+H+E+I+N+E+L+H+L+K+H+E+E+E+E+E+H+M+H+L+E+H+H+E+E+H+E+H+E+H+I+M+I+H+I+H+L+H+H+I+H+I+L+E+M+E+I+E+H+I+I+H+H+M+M+H+E+N+* = ", -"O+E+I+I+H+H+I+H+L+H+O+M+M+L+I+N+I+M+H+I+K+E+H+M+M+N+I+M+N+H+O+M+M+M+E+E+H+M+H+H+O+I+H+E+I+M+I+O+O+M+E+O+O+N+M+H+L+M+I+E+H+M+H+M+N+I+I+N+H+M+M+E+M+O+* = ", -"O+E+O+O+K+M+M+E+K+O+O+O+K+M+M+H+M+M+O+O+O+O+N+O+O+O+O+O+K+O+O+M+N+M+M+O+O+M+M+M+O+M+I+O+O+M+M+K+M+M+N+M+O+O+O+O+K+M+K+O+M+K+O+M+N+O+M+I+M+N+H+M+O+O+* = ", -"O+M+P+O+O+M+O+M+O+Q+O+Q+O+O+M+O+O+O+R+O+O+M+O+O+M+O+S+M+M+O+M+O+P+O+P+O+O+O+O+O+Q+M+O+O+O+O+P+M+M+O+O+O+M+O+O+O+O+O+P+O+O+T+O+O+M+M+O+P+O+M+O+O+M+P+* = ", -"O+O+P+P+O+O+O+Q+Q+S+Q+O+S+O+O+T+P+Q+O+Q+P+O+O+T+Q+O+P+O+O+P+S+T+P+P+T+Q+P+P+S+O+O+O+O+P+O+O+Q+O+O+P+P+O+O+O+Q+Q+Q+S+Q+Q+O+O+O+Q+O+U+Q+S+O+O+S+O+O+O+* = ", -"S+V+P+P+Q+O+Q+V+O+S+Q+P+W+O+P+P+Q+P+O+S+S+P+W+P+P+O+S+Q+S+S+X+Q+S+P+O+Q+P+P+Q+S+W+X+Q+P+S+Q+P+S+O+P+P+O+Q+O+P+Q+P+Q+S+X+P+P+P+Q+O+P+P+W+S+P+Q+P+S+Q+* = ", -"S+Q+Q+S+S+O+Y+W+W+Q+W+S+S+S+W+W+S+W+W+Q+P+W+W+P+W+S+O+V+P+Q+Y+S+O+S+W+S+S+O+P+Q+Y+S+W+P+Y+S+S+Q+S+S+S+W+P+W+W+S+Y+W+S+S+S+Q+V+P+W+S+W+P+Q+P+W+S+S+S+* = ", -"Z+S+W+S+W+W+W+W+S+W+S+W+S+S+W+W+S+S+W+`+S+Z+W+`+S+`+W+W+W+S+W+W+S+S+W+W+ @S+S+ @W+S+W+W+S+S+W+ @W+W+S+S+S+W+W+W+W+W+W+S+W+W+W+`+W+S+W+W+W+W+S+W+W+W+* = ", -"W+ @W+W+Z+ @W+ @S+Z+W+.@W+W+ @`+ @Z+W+W+ @W+W+.@ @ @W+ @.@.@`+S+ @W+W+ @+@W+Z+W+W+W+W+W+ @W+ @ @Z+Z+W+W+Z+ @S+ @W+S+W+S+W+ @S+S+W+.@Z+ @Z+W+W+ @W+W+* = ", -".@Z+.@W+ @ @W+.@Z+ @ @.@W+ @.@W+W+ @Z+W+.@Z+.@.@Z+.@Z+Z+ @ @Z+W+W+.@ @.@Z+.@.@ @ @W+ @.@Z+ @.@W+ @.@ @W+.@W+W+ @ @Z+.@.@ @.@W+Z+ @W+ @W+Z+.@Z+Z+W+W+* = ", -".@.@@@.@.@.@ @.@Z+ @#@$@ @W+@@%@Z+.@.@.@.@.@.@.@.@ @.@.@.@ @Z+.@.@%@.@$@.@.@Z+.@Z+.@Z+.@%@Z+ @.@.@.@.@.@ @Z+%@.@ @.@.@%@.@ @ @.@.@.@.@.@Z+$@ @.@.@.@* = ", -".@%@.@.@%@.@.@.@.@%@%@.@%@.@.@.@%@.@.@.@&@.@%@%@.@.@.@.@%@.@.@.@.@.@.@%@%@.@.@.@%@.@.@.@.@.@.@.@%@.@.@%@.@.@.@.@%@.@.@.@.@%@.@%@.@&@.@%@.@.@.@.@%@.@* = ", -"&@.@*@=@%@-@%@;@-@%@;@;@%@&@&@&@;@-@%@;@-@%@;@&@>@-@%@.@&@%@;@.@;@>@.@.@;@%@>@%@*@.@.@*@>@%@.@%@.@.@%@;@;@%@%@>@%@>@-@%@&@%@%@.@%@%@.@.@%@.@-@.@&@.@* = ", -";@%@&@%@%@;@;@>@.@>@%@.@*@.@%@*@&@*@*@%@*@>@;@;@-@%@;@&@%@-@=@>@%@%@>@=@*@;@*@>@*@*@>@&@%@>@=@-@*@%@.@.@=@>@;@;@>@%@>@*@=@%@-@%@.@-@%@&@;@>@=@&@-@*@* = ", -";@>@;@*@%@*@*@*@*@>@*@*@>@*@*@*@>@*@;@;@*@;@*@*@*@*@>@>@*@*@;@*@=@*@*@>@*@=@*@%@;@*@>@;@>@*@*@;@-@>@*@*@*@>@*@*@*@>@.@*@*@;@*@;@*@%@>@&@>@*@*@*@*@*@* = ", -",@*@*@*@>@*@*@*@*@*@*@*@*@*@*@;@*@*@*@*@*@*@*@*@*@*@*@;@*@,@,@*@*@*@*@*@,@,@,@*@*@*@,@*@*@*@*@*@*@*@*@*@*@;@*@*@*@*@*@,@*@*@>@*@*@*@,@*@*@,@>@;@*@*@* = ", -"*@'@)@*@*@,@,@)@)@!@,@*@,@~@,@~@*@,@~@*@*@)@)@,@~@{@*@,@*@*@*@,@*@,@*@*@)@,@~@*@~@,@,@!@*@,@*@*@*@,@!@*@*@*@,@,@)@]@*@,@*@,@*@*@~@,@*@*@,@~@{@{@,@,@* = ", -"{@)@!@*@]@,@]@'@'@,@)@~@!@,@!@{@{@'@*@,@]@!@!@{@]@]@*@~@)@!@*@]@*@,@!@,@*@*@~@*@)@{@~@'@!@~@{@*@,@,@]@)@)@{@)@]@~@]@{@{@{@~@!@*@]@*@'@!@'@)@,@~@!@!@* = ", -"]@]@]@'@!@'@!@,@!@]@,@!@'@'@]@]@]@]@{@]@]@{@]@!@]@]@'@)@]@!@)@]@]@{@'@!@{@!@,@]@{@]@]@*@!@]@)@,@,@]@]@'@!@!@,@{@]@]@]@{@]@!@)@)@]@*@~@]@'@!@]@{@)@]@* = ", -"{@{@]@]@]@{@!@!@]@]@{@]@]@]@]@]@{@!@'@,@{@]@]@{@]@!@]@]@{@]@!@]@]@]@]@]@]@{@]@]@]@)@!@]@]@]@]@]@]@]@]@]@]@]@]@]@]@]@]@]@'@]@]@]@'@]@]@]@]@]@{@'@]@]@* = ", -"]@]@]@^@]@]@]@]@^@]@]@]@]@]@]@^@]@]@]@/@(@]@]@_@^@]@^@]@(@_@]@]@^@]@]@]@]@(@/@:@/@(@^@]@]@]@/@]@]@^@]@]@/@]@]@]@]@]@]@(@]@(@]@]@]@^@]@]@]@]@]@]@]@/@* = ", -"]@]@/@:@]@<@_@]@<@:@<@/@(@]@(@]@^@]@(@[@^@]@^@]@]@]@[@]@]@<@]@^@/@^@/@[@:@]@]@^@^@]@_@[@^@:@^@[@(@/@]@]@]@]@^@:@/@<@(@/@:@^@(@_@]@(@(@]@]@]@(@]@]@^@* = ", -"<@[@]@/@_@(@_@_@_@^@[@_@<@:@:@<@_@[@_@[@:@<@[@(@_@/@<@^@]@[@_@_@/@(@[@_@_@:@:@<@<@_@^@]@^@^@<@:@[@^@<@:@:@^@^@<@:@<@(@[@]@]@<@<@<@_@^@]@_@^@:@/@_@_@* = ", -"<@/@<@:@<@[@^@[@<@^@<@:@(@_@:@<@<@[@<@_@<@_@:@<@[@^@<@_@[@<@/@[@<@<@<@/@:@^@/@/@<@_@_@_@:@:@<@<@_@<@<@_@_@:@<@<@:@:@^@<@<@<@_@^@[@^@_@_@^@_@/@/@<@<@* = ", -"_@_@<@<@<@<@<@<@<@<@_@<@<@<@<@<@<@<@<@<@<@_@<@<@<@<@}@<@<@|@<@<@<@<@_@<@_@<@<@_@<@_@<@<@1@1@<@<@<@|@<@<@<@<@|@<@<@<@<@<@<@<@<@<@<@_@<@_@<@|@<@<@<@<@* = ", -"<@1@<@<@<@1@|@|@|@<@|@<@|@<@<@1@<@<@|@<@<@|@<@<@2@1@1@|@<@<@<@<@<@1@1@1@<@|@<@<@<@1@1@|@1@<@<@<@3@3@<@<@2@1@1@|@|@<@<@|@<@|@1@<@1@<@<@<@|@|@<@1@4@2@* = ", -"|@1@5@2@4@3@1@2@4@6@|@|@<@1@1@3@<@2@<@5@3@1@4@1@2@5@2@2@|@3@<@3@2@<@|@<@5@<@2@<@<@5@4@3@<@|@1@|@2@4@1@1@2@2@5@2@<@1@3@2@<@|@2@|@4@3@2@5@<@1@5@2@5@5@* = ", -"6@<@4@1@2@|@4@2@2@3@<@6@2@1@2@6@2@2@4@2@|@1@6@1@6@3@2@2@6@<@<@2@6@2@3@6@1@4@4@2@2@2@1@|@|@6@1@2@1@3@5@2@6@2@2@1@6@5@6@<@1@6@2@1@2@2@2@1@2@2@|@2@2@5@* = ", -"6@2@2@6@2@5@6@1@4@6@6@2@6@2@2@2@2@6@2@6@6@2@6@2@2@2@4@6@2@2@4@1@6@2@|@6@6@6@2@2@4@6@2@5@6@2@2@2@2@6@2@6@6@6@2@2@2@6@6@6@6@2@2@|@6@6@6@2@6@5@2@6@6@4@* = ", -"7@6@7@6@6@2@8@6@2@6@2@6@6@6@2@6@7@6@6@2@6@6@6@6@6@6@6@6@2@7@6@6@9@6@2@6@7@6@6@6@6@6@6@9@6@6@6@6@6@6@6@6@6@6@6@2@6@6@2@2@6@6@6@0@a@9@6@6@6@6@6@6@6@2@* = ", -"7@a@7@6@a@6@a@0@0@0@a@6@0@a@0@7@7@a@a@6@6@6@6@7@7@0@6@6@6@a@7@6@a@6@7@6@a@6@6@7@a@7@a@6@2@6@6@a@6@7@7@7@6@a@a@6@6@7@a@0@a@7@7@a@a@6@0@a@0@a@a@a@7@6@* = ", -"a@0@a@0@0@0@0@b@0@a@0@0@b@0@a@c@6@6@d@a@a@7@0@0@a@c@0@c@7@0@7@6@7@0@a@0@0@b@7@6@7@6@a@0@0@7@c@7@e@a@0@0@a@0@b@a@c@0@6@7@0@c@c@a@a@0@6@a@6@e@7@0@0@0@* = ", -"0@7@0@0@0@0@0@6@0@6@c@0@c@c@0@0@0@7@0@0@7@7@0@c@7@c@0@c@0@c@a@7@c@c@d@0@0@0@7@7@0@0@b@7@0@a@7@c@6@0@c@0@7@7@6@0@c@c@c@c@c@c@a@a@0@6@0@e@0@b@a@0@e@7@* = ", -"c@c@c@0@0@c@c@0@c@0@0@0@0@c@0@c@c@c@0@0@c@c@0@0@0@c@0@c@c@c@0@c@c@c@c@0@0@c@c@0@0@c@0@c@c@c@0@c@c@0@0@0@c@c@c@0@c@c@c@0@0@0@c@0@0@c@c@c@0@0@c@c@0@c@* = ", -"f@f@g@0@h@c@0@i@0@0@c@0@g@j@f@c@g@0@g@c@c@c@f@j@0@c@c@g@i@c@i@f@c@f@g@c@j@0@c@h@c@0@c@0@h@j@c@f@c@h@c@c@j@f@c@c@c@0@0@k@f@f@f@h@c@g@g@c@0@i@j@c@0@h@* = ", -"i@j@f@j@j@j@g@f@0@f@g@f@f@g@c@j@c@j@f@0@f@c@f@g@h@j@g@c@f@j@f@g@g@0@0@g@g@g@j@c@0@j@c@c@f@f@g@k@j@c@f@c@0@g@c@g@c@g@g@f@c@c@h@j@c@f@f@c@c@f@j@c@f@g@* = ", -"g@g@f@j@g@g@c@g@j@f@g@j@l@g@g@j@j@j@f@c@g@f@j@m@f@f@j@g@j@g@g@g@j@j@f@j@c@c@c@j@j@g@c@f@g@f@g@g@j@g@f@g@g@f@g@g@c@f@f@j@j@g@f@g@g@l@f@f@j@c@f@m@c@g@* = ", -"m@f@j@j@j@j@m@j@j@j@j@g@f@j@j@j@f@j@g@m@j@j@j@j@m@m@j@j@j@j@j@j@j@j@j@j@f@j@f@j@l@j@j@j@m@j@j@j@m@j@j@m@j@m@j@j@j@j@l@f@j@j@j@j@m@f@m@f@n@f@j@j@g@j@* = ", -"m@j@j@j@j@m@j@j@j@j@j@m@j@j@j@j@j@j@j@j@j@j@j@j@j@j@j@m@j@m@j@j@j@j@m@j@j@j@j@m@j@j@j@j@m@m@j@o@j@j@j@j@j@j@j@j@m@j@j@m@j@m@j@m@m@j@j@j@m@j@p@j@m@j@* = ", -"m@j@j@m@m@q@j@m@m@o@r@q@j@j@m@s@s@j@p@s@p@m@t@m@m@o@t@j@p@o@m@t@q@j@o@m@m@j@m@j@j@m@j@q@j@o@r@t@m@q@s@s@t@m@m@j@t@t@j@t@j@q@m@s@m@j@q@m@m@m@o@r@m@m@* = ", -"q@q@o@q@q@t@m@o@j@j@o@s@s@s@m@j@o@p@m@o@j@r@r@s@q@o@q@r@q@q@m@q@o@q@p@q@o@t@q@q@j@o@m@s@q@r@t@p@o@q@q@q@q@o@o@s@m@o@t@t@o@o@q@m@m@q@m@q@s@m@q@s@o@s@* = ", -"r@s@q@q@s@s@q@q@s@p@s@s@o@s@s@o@m@q@s@s@s@o@s@o@s@q@o@p@p@o@p@q@o@s@s@o@s@q@s@q@o@o@r@q@s@s@s@s@o@s@s@m@m@s@r@s@o@s@q@j@s@m@s@s@o@q@s@s@s@s@q@s@o@q@* = ", -"q@s@s@s@q@o@s@s@s@s@s@u@s@o@s@s@s@s@o@s@s@s@o@s@s@o@s@q@s@o@s@s@s@s@o@s@s@v@s@s@s@s@s@s@o@s@s@s@s@s@o@q@s@s@s@s@s@s@o@s@s@s@q@s@s@s@o@o@s@s@s@s@s@s@* = ", -"w@w@s@s@s@s@x@s@s@s@s@y@s@s@s@w@s@s@y@s@s@s@s@s@w@s@s@s@s@s@s@s@s@y@s@s@s@s@w@s@s@s@s@w@s@s@w@z@s@s@s@s@s@w@s@s@s@s@s@s@s@s@s@s@s@s@z@s@s@s@s@s@A@s@* = ", -"w@w@w@s@w@s@A@y@y@A@s@s@A@s@s@z@w@s@s@w@w@s@s@w@A@s@s@z@z@s@s@y@B@w@s@s@s@z@B@A@s@w@w@A@s@s@w@y@w@y@s@s@s@w@w@w@w@w@B@w@w@s@s@B@y@w@x@w@s@x@w@w@w@w@* = ", -"x@x@B@A@B@A@w@B@s@y@B@x@s@w@A@z@B@w@s@C@A@s@z@B@y@C@A@A@y@y@B@s@s@s@w@w@z@C@A@A@s@A@w@C@z@y@B@s@z@B@z@A@A@y@w@x@B@s@A@A@y@w@z@s@A@z@w@C@z@z@y@w@A@w@* = ", -"s@A@s@C@A@C@A@B@w@C@C@C@A@C@B@s@w@w@B@x@A@C@A@B@s@B@x@x@z@C@C@A@C@A@A@A@C@C@A@C@A@y@C@x@C@x@w@A@A@w@z@w@C@y@C@B@A@s@x@C@A@x@x@w@C@s@B@z@y@A@C@C@C@B@* = ", -"A@C@C@x@x@C@x@C@C@C@C@C@C@C@C@C@C@C@x@A@C@C@C@C@B@x@C@x@C@C@w@C@C@x@C@C@x@C@B@C@C@B@A@C@C@C@C@A@C@C@C@C@C@C@C@C@x@x@C@A@C@B@C@x@C@B@A@C@B@x@C@C@C@B@* = ", -"C@C@C@C@C@C@C@C@C@C@D@C@C@C@C@C@C@C@C@E@C@E@C@C@C@D@C@C@C@C@C@F@C@C@C@C@D@C@C@E@C@E@C@C@C@C@C@C@F@C@C@C@C@C@C@C@F@C@C@C@C@C@C@C@C@E@C@C@C@C@C@C@C@C@* = ", -"E@C@F@F@E@C@F@C@C@G@C@D@G@F@D@H@F@C@C@C@C@C@D@E@C@C@C@C@C@C@C@H@F@C@C@D@E@C@C@C@D@E@F@C@C@C@E@G@F@C@C@I@C@J@F@C@G@G@C@C@C@E@E@F@C@F@C@D@C@C@C@C@C@C@* = ", -"H@D@D@G@G@J@D@F@C@F@C@F@D@E@J@E@F@F@J@E@H@E@H@G@H@F@J@C@I@F@J@C@C@F@C@C@D@G@E@C@H@I@I@G@F@D@H@G@C@F@J@C@G@E@E@C@C@F@E@D@J@C@C@C@H@F@E@D@F@E@D@C@H@C@* = ", -"J@G@E@J@I@I@E@F@E@G@G@G@C@I@J@G@D@E@I@I@D@F@H@G@H@G@F@I@I@J@G@G@D@C@I@F@I@D@I@G@G@I@C@E@E@H@D@D@F@C@E@H@I@G@F@H@I@D@I@G@C@C@C@E@G@G@J@E@D@F@F@I@J@G@* = ", -"I@J@I@G@D@E@I@I@H@J@F@E@I@H@G@I@H@I@I@I@I@H@I@G@J@E@I@I@G@G@H@J@G@F@G@I@G@G@G@I@E@I@F@J@I@I@I@J@I@I@I@G@G@G@G@H@G@I@J@I@J@I@J@I@D@E@C@I@I@G@I@G@I@I@* = ", -"G@I@I@I@I@I@G@G@I@I@I@G@I@I@G@I@I@I@G@I@G@I@I@I@I@I@G@I@I@I@G@I@I@I@I@I@H@I@I@J@G@G@I@I@I@I@I@I@I@G@I@I@G@I@I@I@F@H@G@I@I@G@I@I@I@I@I@G@I@D@G@I@I@G@* = ", -"G@I@I@I@I@I@I@K@K@I@I@G@I@L@I@M@I@I@I@I@G@I@I@N@K@I@I@I@N@I@I@I@G@N@I@I@I@G@I@I@M@I@I@I@I@I@I@I@I@I@I@I@N@N@I@I@N@N@I@I@I@I@I@I@I@N@I@I@I@K@I@N@M@K@* = ", -"K@I@M@I@I@K@I@I@I@I@I@N@N@K@O@N@K@K@M@O@K@N@N@I@I@M@I@K@K@I@M@I@M@N@I@P@M@M@K@I@I@N@K@O@I@I@K@I@I@I@K@M@I@I@N@I@M@M@I@K@N@I@N@N@I@N@N@I@I@K@I@I@M@I@* = ", -"N@N@N@I@I@P@O@K@K@P@I@P@N@N@M@M@N@O@Q@K@N@O@K@N@K@M@M@N@K@K@K@P@N@I@N@N@K@R@M@N@M@K@M@K@K@K@M@P@I@M@M@N@Q@M@I@O@N@P@M@Q@O@N@I@I@I@P@M@I@K@N@I@I@O@K@* = ", -"R@N@N@M@I@K@R@K@Q@M@N@O@N@M@M@I@Q@I@R@M@N@O@N@Q@R@M@P@M@M@O@M@I@R@K@M@R@N@Q@Q@R@M@I@Q@M@Q@M@K@Q@M@Q@R@I@K@M@I@K@K@R@O@K@K@M@M@Q@P@N@Q@Q@Q@O@P@K@P@N@* = ", -"Q@Q@K@M@M@Q@Q@N@Q@M@Q@M@Q@Q@P@M@N@O@N@M@P@M@P@Q@M@K@M@M@Q@M@M@M@Q@Q@P@M@Q@Q@Q@K@M@Q@M@N@M@Q@R@M@Q@Q@N@M@Q@Q@M@N@M@M@Q@Q@M@Q@Q@Q@K@M@Q@Q@M@N@M@Q@M@P@* = ", -"M@Q@Q@Q@Q@Q@Q@Q@M@Q@Q@M@Q@Q@M@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@M@Q@Q@M@Q@Q@M@Q@Q@Q@Q@Q@Q@Q@M@Q@Q@Q@Q@Q@M@Q@Q@Q@Q@Q@Q@Q@Q@Q@M@Q@Q@M@Q@Q@Q@M@Q@Q@Q@Q@Q@Q@M@M@Q@* = ", -"S@Q@S@T@Q@U@M@V@Q@Q@M@Q@Q@V@Q@Q@V@V@Q@V@Q@V@M@Q@V@T@T@Q@T@Q@T@Q@Q@V@Q@M@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W@V@T@Q@S@T@Q@Q@Q@Q@M@T@Q@T@Q@T@Q@M@Q@Q@Q@Q@M@Q@Q@* = ", -"Q@Q@X@Q@V@Q@Q@X@X@X@Q@V@Q@Q@V@X@T@Q@T@T@T@Q@V@Q@Q@X@V@X@Q@X@Q@T@Q@T@V@T@X@V@T@V@Q@X@T@M@X@V@X@V@T@T@M@V@T@Q@Q@V@T@Q@T@U@V@S@V@Q@Q@X@X@Q@V@Q@Q@U@Q@Q@* = ", -"T@Q@Y@Q@X@T@Z@V@Q@T@Z@T@T@T@X@Q@V@X@V@Q@V@Q@T@X@X@T@Y@X@X@Q@V@V@T@X@V@X@T@V@X@V@V@T@T@T@Q@`@Q@V@T@X@X@X@ #V@V@X@X@Q@V@V@V@V@V@Q@T@Z@V@V@X@Z@T@Q@Q@Z@* = ", -"X@V@T@V@Q@T@T@X@X@Y@Z@T@X@Q@X@T@V@X@X@Q@Q@T@V@ #Q@V@T@T@X@Q@Z@Q@X@Q@V@X@V@ #Q@X@Q@Q@X@`@Y@Q@ #V@Q@X@T@ #V@X@X@V@`@V@X@T@T@X@X@Y@X@X@T@Q@V@V@X@X@X@V@* = ", -"T@X@X@X@X@ #X@V@T@ # # # #X@V@`@Z@ #X@X@X@ #X@ #X@T@Z@T@X@X@`@ # #X@X@ #X@ # #X@X@X@X@X@ #X@`@ #V@X@ #X@Z@ #X@Z@ #X@ #T@ #`@ #X@T@ #X@X@ #X@X@ # #V@* = ", -" # #X@ #X@ #X@ # # # #X@X@X@ #X@ # # # #X@ #X@X@ #X@X@`@ #X@X@ #X@ # #X@X@X@X@ #X@X@ # #X@ # #X@ # # #X@ # # # # #X@X@ #X@X@ # #X@ #X@X@ #X@`@X@ # #* = ", -".#.#X@X@ #X@+#X@+# #@#@#+#X@ #X@X@@# # #X@ #.#X@ # #X@ # # # #X@ # #+#+# ###.#$#@#X@X@ # #@# # # # #@# # #X@X@ # # #X@X@+# #$#$#@# #.# #X@$# #%#X@+#* = ", -"X@.#.# #@# # #+#+# # #@# # # # ###+### #@# #@#@###+#X@ #+#$# #.# #X@+#@#+# #+#@#+# #+# #+#+#@### # ###$# #+#X@+#X@+### #X@$# # # #+# ### # #$#.# #@#* = ", -"+#+#$#%#@#@# #X@ #$#@#X@@#$# #+# # #$#.###+#+#$# #X@$#@#@# # #$#+#@#+#X@$#$# #@# #+#+# #+#+# #+#@# #$#+#$#.#X@X@ # #$# #$#+#@# # #+# #@#.# #X@@# #+#* = ", -"$# # #$#$#+#@#@#$#$# #+#@#@#$#+#+#$# #$#$#$# #$#+#@#+#$#@# #+# #$#@#@#$#$#+# #$#@#+#@#@#$# #$#@#$#@# #@#@# #@#$#@# #+#@#$#@#$#$#@#@#@#$#$#$#@#$#@#$#* = ", -"+#$#@#+#&#$#*#*#@#$#*#$#$#+#$#$# #+#$#$#$#$#$#@#@#$#+#$#$#=#$#=#$#+#$#+#$#*#$#@#&#+#+#+#$#$#$#+#$#=#$#$#$#$#$#@#@#@#$#$#$#$#+#$# #$#=#@#$#$#&#$#$#*#* = ", -"$#+#$#$#=#$#+#$#@#$#$#=#@#@#$#$#=#=#$#$#$#$#$#$#&#$#$#$#=#$#$#$#+#+#$#$#@#$#&#*#=#=#=#=#$#$#$#$#$#=#=#$#+#@#$# #$#$#$#$#=#=#=#=#$#$#$#=#$#$#$#$#$#=#* = ", -"$#=#$#$#=#=#$#=#$#=#$#$#=#-#$#=#$#=#$#$#$#$#;#=#$#$#$#$#=#$#=#=#$#$#$#$#$#$#$#=#$#=#=#$#$#=#$#>#$#>#=#$#$#$#,#$#$#=#$#$#$#=#$#$#$#$#=#=#$#$#$#$#$#,#* = ", -"$#>#-#$#,#-#>#-#$#=#=#>#=#'#=#=#$#=#=#$#>#-#=#=#$#$#=#$#=#$#$#=#'#;#=#$#$#=#$#=#$#$#=#$#>#=#=#=#,#-#=#$#=#;#-#,#$#$#$#=#>#$#=#=#=#=#=#=#$#=#,#=#=#=#* = ", -"=#$#-#;#-#,#'#;#,#=#;#;#'#)#'#$#;#=#,#=#=#'#,#-#=#;#=#=#,#=#$#$#,#=#$#)#,#,#$#-#=#;#,#=#;#;#'#=#,#-#$#-#;#-#$#=#-#,#$#'#=#'#,#;#-#-#=#=#$#$#=#,#=#-#* = ", -"=#$#,#>#;#;#>#;#;#,#=#=#=#=#;#=#=#-#)#=#;#,#)#)#-#=#=#=#;#)#)#=#,#=#;#=#>#>#=#;#=#$#)#>#)#)#;#;#,#)#-#;#$#'#;#,#,#=#=#-#,#,#-#=#)#)#=#=#,#,#,#)#>#)#* = ", -",#)#)#;#)#,#)#)#'#$#)#'#;#)#)#;#=#)#)#=#;#)#=#,#'#=#=#'#)#)#)#)#)#-#-#=#,#,#>#=#,#,#=#,#;#)#-#)#)#)#=#=#-#>#)#;#=#)#,#'#,#)#)#;#)#)#)#,#)#'#)#;#)#-#* = ", -")#)#;#)#)#,#,#)#=#;#=#,#,#,#)#;#,#)#,#)#)#)#)#,#)#,#'#,#,#;#,#)#)#,#;#,#)#)#=#)#)#;#;#;#,#,#,#;#;#)#,#,#)#;#)#;#)#)#)#)#)#=#'#)#;#)#;#)#)#,#)#)#)#>#* = ", -")#!#)#)#)#)#=#)#)#)#)#)#)#)#~#)#)#,#)#)#=#)#)#;#)#)#;#)#)#)#)#)#!#)#)#;#)#)#)#)#!#)#)#;#;#;#;#,#)#=#)#)#,#)#)#)#)#)#)#)#)#)#)#)#;#,#)#)#)#;#)#)#;#)#* = ", -")#!#)#)#!#{#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#,#)#,#)#)#)#)#,#)#;#)#)#)#)#)#)#)#)#)#)#)#)#,#)#)#)#{#)#)#)#)#!#)#)#)#)#!#~#)#)#)#)#)#!#)#)#)#)#)#)#)#* = ", -"]#)#!#!#]#!#)#)#)#]#)#!#)#)#^#)#/#)#]#]#(#)#)#)#)#)#!#!#!#)#)#!#!#)#)#!#)#!#)#!#)#!#)#!#)#!#]#!#)#)#!#)#]#)#_#)#)#)#!#)#(#)#_#!#!#)#)#]#_#)#)#)#!#(#* = ", -"(#)#]#!#^#!#)#]#(#^#)#!#)#(#]#)#!#(#)#!#)#)#)#(#^#!#)#_#)#)#!#!#!#!#^#)#!#)#(#(#)#]#^#(#)#!#]#]#_#!#)#_#)#)#!#(#)#)#^#)#)#]#!#_#!#)#)#^#]#)#)#)#)#_#* = ", -")#)#]#]#)#^#]#!#)#)#)#!#/#:#!#:#!#/#)#:#^#:#/#_#:#)#_#(#)#_#(#)#)#(#^#)#)#)#_#)#!#(#_#!#]#!#^#]#)#]#]#)#)#_#!#]#^#!#]#^#)#(#!#(#!#!#:#^#:#)#_#)#:#(#* = ", -":#_#)#_#/#/#:#(#_#/#:#(#_#/#]#)#!#!#_#!#^#)#!#:#_#]#!#!#^#_#(#/#^#:#^#_#^#]#)#!#!#(#!#:#)#:#)#]#]#]#!#!#!#^#]#)#_#:#)#)#]#:#:#(#:#_#)#^#/#]#!#^#(#_#* = ", -"(#_#(#:#^#/#!#_#]#(#:#_#)#)#:#]#)#(#(#(#!#/#!#^#^#_#!#!#!#^#:#_#!#_#/#!#^#:#(#:#/#:#:#_#^#(#(#/#]#)#_#:#]#(#]#_#!#:#!#_#^#^#/#(#!#_#/#(#_#^#_#:#:#_#* = ", -"]#/#:#:#/#:#:#:#:#:#/#_#!#^#:#:#:#_#^#(#^#^#_#:#/#:#_#:#/#]#_#:#^#:#^#/#/#:#_#]#_#_#(#^#_#]#(#/#^#]#:#/#!#:#!#:#^#:#]#_#!#:#_#_#]#_#!#:#:#]#]#^#_#)#* = ", -":#^#:#/#:#_#:#:#:#:#_#:#^#/#:#:#:#^#:#:#/#/#!#/#^#:#)#:#:#^#_#/#:#)#:#:#:#:#:#^#^#/#:#:#:#:#_#^#:#:#:#:#:#:#:#(#^#_#^#:#:#:#)#_#:#_#:#:#^#_#:#/#:#^#* = ", -":#:#:#:#:#:#:#:#/#:#!#(#:#_#:#:#:#_#_#:#:#:#^#_#:#:#:#_#:#:#:#/#:#:#:#^#^#/#:#:#:#^#:#:#:#_#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#^#/#:#^#:#:#:#:#:#/#/#:#:#* = ", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#* = ", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#* = ", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#* = ", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#* = ", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#* = ", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#* = ", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#* = ", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#* = ", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#* <#", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#[#}#", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#|#}#", -"1#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#3#}#", -"% 4#@ @ @ @ @ @ 4#@ @ 4#@ @ @ @ @ @ 4#@ @ 4#@ @ @ @ @ @ 4#@ @ 4#4#4#4#4#4#4#4#4#4#4#4#4#@ @ @ @ @ @ 4#@ @ 4#@ @ 4#@ @ 4#@ @ @ @ 4#@ @ 4#@ @ @ @ @ 4#@ 5#"}; +"76 253 2 1", +" c None", +". c #595966", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................"}; diff --git a/hdspmixer/pixmaps/empty_2.xpm b/hdspmixer/pixmaps/empty_2.xpm index fb40d88..ce7fd0e 100644 --- a/hdspmixer/pixmaps/empty_2.xpm +++ b/hdspmixer/pixmaps/empty_2.xpm @@ -1,513 +1,406 @@ /* XPM */ char const * empty_2_xpm[] = { -"76 253 257 2", -" c None", -". c #D1E0E5", -"+ c #E7F6F9", -"@ c #F2FFFF", -"# c #FBFFFF", +"76 253 150 2", +" c #595966", +". c #51515B", +"+ c #3D3D42", +"@ c #717187", +"# c #53535E", "$ c #FFFFFF", -"% c #C4CACB", -"& c #C7D5D9", -"* c #BECDD2", -"= c #B8C5C9", -"- c #AEBDC1", -"; c #B2BDC2", -"> c #B5B6B6", -", c #A9B5B9", -"' c #A2ADB2", -") c #A1ACAE", -"! c #AAAAAA", -"~ c #A6A6A6", -"{ c #A0A0A0", -"] c #9CA5A9", -"^ c #9F9FA0", -"/ c #939DA1", -"( c #A0A09F", -"_ c #9FA09F", -": c #A09F9F", -"< c #90928F", -"[ c #949A9B", -"} c #9B9C9B", -"| c #9D9E9D", -"1 c #999A99", -"2 c #969896", -"3 c #919391", -"4 c #959795", -"5 c #929592", -"6 c #869194", -"7 c #8E999C", -"8 c #8C969A", -"9 c #8A9395", -"0 c #848E91", -"a c #8C908B", -"b c #8E918E", -"c c #8C908C", -"d c #8D908D", -"e c #888B88", -"f c #8D8F8D", -"g c #8C8F8C", -"h c #8B8F8C", -"i c #8C8F8B", -"j c #898D89", -"k c #8B8E8B", -"l c #8A8E8A", -"m c #8A8D8A", -"n c #898C89", -"o c #898D89", -"p c #888C88", -"q c #848B8B", -"r c #888C87", -"s c #838884", -"t c #878C87", -"u c #858A86", -"v c #868B86", -"w c #878B87", -"x c #868A86", -"y c #858A85", -"z c #858985", -"A c #848984", -"B c #848883", -"C c #808880", -"D c #828882", -"E c #838883", -"F c #828686", -"G c #818782", -"H c #838783", -"I c #828782", -"J c #808680", -"K c #818681", -"L c #818581", -"M c #808580", -"N c #778082", -"O c #7E898B", -"P c #7D8689", -"Q c #7A8386", -"R c #7F8580", -"S c #D170D1", -"T c #C54CC5", -"U c #A837A8", -"V c #902F90", -"W c #757E81", -"X c #80887F", -"Y c #80857F", -"Z c #7F887F", -"` c #7D847D", -" . c #7F847F", -".. c #7E847E", -"+. c #7E827E", -"@. c #7E837E", -"#. c #7D827D", -"$. c #7D837D", -"%. c #7C827C", -"&. c #7B827C", -"*. c #7C817B", -"=. c #7A817A", -"-. c #7A817A", -";. c #7B817B", -">. c #7A807A", -",. c #798079", -"'. c #708070", -"). c #6E716E", -"!. c #717678", -"~. c #7A7F7A", -"{. c #797F79", -"]. c #787F78", -"^. c #727B7D", -"/. c #777E78", -"(. c #787E77", -"_. c #747C73", -":. c #767D75", -"<. c #767E76", -"[. c #777E77", -"}. c #777D77", -"|. c #767D76", -"1. c #747C74", -"2. c #757C75", -"3. c #757B75", -"4. c #747B74", -"5. c #737B74", -"6. c #747B73", -"7. c #727972", -"8. c #737B73", -"9. c #717971", -"0. c #707870", -"a. c #6D7679", -"b. c #6C7274", -"c. c #686E71", -"d. c #70786F", -"e. c #707060", -"f. c #616669", -"g. c #696D6A", -"h. c #6D6E6D", -"i. c #6F6F6F", -"j. c #646B6D", -"k. c #666966", -"l. c #626562", -"m. c #5C6365", -"n. c #595F61", -"o. c #5F685F", -"p. c #5B605B", -"q. c #5E615E", -"r. c #506050", -"s. c #494F51", -"t. c #545A5C", -"u. c #5A5C5A", -"v. c #5A5D5A", -"w. c #555A55", -"x. c #565956", -"y. c #575A57", -"z. c #555855", -"A. c #535654", -"B. c #545754", -"C. c #525552", -"D. c #535653", -"E. c #515451", -"F. c #515251", -"G. c #505350", -"H. c #4D5254", -"I. c #50534F", -"J. c #50584F", -"K. c #4F584F", -"L. c #4C504B", -"M. c #4F544F", -"N. c #4D524D", -"O. c #4F524F", -"P. c #4E514E", -"Q. c #4F504F", -"R. c #4D504D", -"S. c #4B504B", -"T. c #405040", -"U. c #464A4A", -"V. c #494E4E", -"W. c #4D4E4D", -"X. c #4C4F4C", -"Y. c #494E49", -"Z. c #4B4F4B", -"`. c #4A4E4A", -" + c #4A4D4A", -".+ c #494C49", -"++ c #494A49", -"@+ c #484B48", -"#+ c #444843", -"$+ c #474C47", -"%+ c #464A45", -"&+ c #474A47", -"*+ c #464946", -"=+ c #454A45", -"-+ c #454945", -";+ c #424842", -">+ c #434645", -",+ c #454645", -"'+ c #444744", -")+ c #414641", -"!+ c #434743", -"~+ c #424542", -"{+ c #414441", -"]+ c #404340", -"^+ c #3E4142", -"/+ c #6B236B", -"(+ c #531B53", -"_+ c #4D194D", -":+ c #471747", -"<+ c #3C3E40", -"[+ c #40423F", -"}+ c #40483F", -"|+ c #3B403B", -"1+ c #3F443F", -"2+ c #3E413E", -"3+ c #3F423F", -"4+ c #3D413D", -"5+ c #1E2120", -"6+ c #2D3030", -"7+ c #363A39", -"8+ c #393B39", -"9+ c #3E3F3E", -"0+ c #3C3F3C", -"a+ c #393D39", -"b+ c #3B3F3B", -"c+ c #373C37", -"d+ c #363A36", -"e+ c #303F30", -"f+ c #333434", -"g+ c #333433", -"h+ c #303730", -"i+ c #242728", -"j+ c #2A2C2D", -"k+ c #2F2F2F", -"l+ c #212E2E", -"m+ c #222425", -"n+ c #202720", -"o+ c #3B143B", -"p+ c #0F1010", -"q+ c #1B1C19", -"r+ c #121212", -"s+ c #0F1510", -"t+ c #170817", -"u+ c #100F0F", -"v+ c #07090A", -"w+ c #0A0A0A", -"x+ c #0D0D0D", -"y+ c #0E0E0E", -"z+ c #0F0F0F", -"A+ c #0B040B", -"B+ c #01070E", -"C+ c #040404", -"D+ c #050606", -"E+ c #070707", -"F+ c #060606", -"G+ c #030303", -"H+ c #000000", -"}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+n+", -"d.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.k+", -"( ( ( ( ( ( ( ( ( ( ( ( ( ( : : : : ( ( : : : : : : : : : : : : : : : : : : ( ( ( ( ( : : : : : : : : : : : : : : ^ _ _ _ _ ^ ^ : ^ ^ ^ ^ : { { { : i.F+", -"( ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ { { : i.F+", -"( ^ Z Q.k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+6+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+6+k+k+k+k+k+k+k+6+k+k+k+k+o.^ { { : i.F+", -"( ^ Z Q.K.K.Q.Q.}+J.T.P.K.1+Q.Q.Q.T.)+J.T.W.K.)+Q.Q.Q.T.}+K.T.W.K.}+Q.Q.Q.T.)+K.T.Q.K.}+Q.Q.J.T.Q.K.1+Q.Q.W.T.}+}+T.T.T.T.T.K.T.}+R.T.Q.}+}+{ { { : i.F+", -"( ^ Z Q.).k.).l.I.y.l.v.A.k.p.l.q.y.q.q.q.q.F.l.p.l.q.k.z.p.k.k.q.l.).k.q.q.p.y.k.k.k.q.k.q.p.k.v.l.q.q.).q.k.l.q.l.q.D.k.k.q.l.l.u.h.E.P.~+{ ( ( : i.F+", -"( ^ Z Q.Z.w.L.E.R.B.B.S.N. +x.D.P.P.$+w.#+G.R.-+ +Y.&+=+N.M.Y.u.G.C.R.I.E.z.N.*+N.A.G.X..+z.w.G.@+$+X.A.G.&+{+M.$+L.>+P. +M.D.*+Y.w.X.A.{+d+_ ( ^ ^ i.F+", -"^ ^ Z Q.q.@+0+>+1+E.>+4+1+3+R.`..+N.$+=+)+C..+P.]+*+ +-+S.a+2+X.P.]+3+4+2+w.;+a+Y.]+'+2+O.-+ +>+4+E.=+-+*+C.$+$+N. +{+P. +Y.M.K.E.|+!+{+&+g+_ ^ ^ : h.F+", -"_ ^ Z P.y.$+Y.{+-+2+4+M.B.)+P.!+2+=+C.=+S.*+$ $ $ $ $ $ D.B.G.$ $ y.>+Y.E..+$+D.$ $ $ b+A.P.$ $ $ O.!+X.E.O.'+N.;+N.>+&+P.$+N.E.a+E.R.#+!+~+_ ^ _ ^ i.F+", -"_ _ Z Q.q.B.I.P.z.P.y.0+-+R.C.D.2+Y.Y.E.)+`.$ $ $ $ $ $ K.$+ +$ $ '+.+M.R.X.M.!+$ $ $ `..+ +$ $ $ C.a+~+X.-+ +=+$+#+3+R. +$+2+$+=+4+*+ +>+9+^ : ^ ^ i.C+", -": ^ Z Q.l.N.E.2+)+X.P.Y.N.a+X.w.*+M.$+$+#+D.~+.+X.$ $ S.=+E. +$ $ B.z.C.B.`.$+)+$ $ $ $ *+$ $ $ $ @+w.P.M.{+N.1+Y.#+3+X. +$+)+Y.w.@+!+'+~+[+: | ^ : i.F+", -": ^ Z Q.p.@+@+D.M.P.d+@+M.G.x.A.&+-+=+$+#+&+R.O.$ $ &+R.$+S.c+$ $ P.]+;+P.M.=+Y.$ $ $ $ .+$ $ $ $ {+w.X.b+*+Z.E.$+Y.'+&+{+#+;+2+$+-+$+#+*+g+: : : | i.F+", -"^ | Z Q.w.!+B.>+N.'+ +S.=+$+]+N.d+N.Y.S.)+C.O. +$ $ P.)+1+N.-+$ $ R.`.1+u.C.N.!+$ $ &+$ .+$ ~+$ $ &+E.R.A.@+~+M.;+A.X. +Z.$+$+b+)+!+`.@+*+,+: ^ | ^ i.F+", -"_ | Z Q.q.{+*+O.M.@+ +y.M.-+.+&+]+D.E.M.$+O.&+$ $ -+X.&+=+v.;+$ $ .+ + +a+A.N.$+$ $ ~+$ $ $ $+$ $ M.z.X.M.*+`.!+N.$+&+8+)+-+`.4+M.=+D.N.0+8+^ : | ^ h.F+", -": | Z Q.O.`. +M.v.&+Y.E.N.~+X.N. +N.M.1+Y.&+$ $ $ $ $ $ M.E.R.$ $ $ $ $ $ `.`.!+$ $ A.$ $ $ B.$ $ 4+$+O.E.G.G.M.#+2+>+X.C.w.=+M.2+)+N.y.8+0+: | ^ ^ i.F+", -": ^ R Q.X.Y.]+A.'+P.>+Y.X.*+&+]+X.d+N.Y.S.~+$ $ $ $ $ $ )+1+M.$ $ $ $ $ $ u.K.N.$ $ P.&+$ @+-+$ $ N.@+E.L.D.Y.)+M.!+z.P.Y.Y.$+$+a+{+>+ +~+2+^ | | ^ i.F+", -"^ | +.R.l.M.w.&+$+@+]+$+-+$+{+'+4+2+M.B.1+P.;+2+#+D.=+P.@+#+Y.!+P.C.P.A.z.C.Z.)+w.!+Y.E.@+@+A.A.O.R.a+C.X.P.]+M.O.)+`.E.P.)+N.;+N.!+*+P.~+2+| ^ : | i.F+", -"| ^ +.W.E.E.#+X.=+$+v.;+N.O..+S..+b+C.N.$+ +X.>+x.2+X.$+$+Z.P.A.N.O.*+Z.-+G.$+$+c+{+&+X.2+M.$+C.P.!+$+3+0+X.A.1+)+)+]+G..+$+0+P.P.2+1+=+O.j+| | ^ ^ h.F+", -"| ^ Z K.C.*+a+z.v.N.$+$+N.$+O.*+.+Y.4+c+C.R.R.!+0+'+3+3+Y.Y.)+3+)+G.@+.+A.&+=+#+'+!+ +.+G.@+2+*+.+N.Y.>+-+&+-+$+a+S..+@+c+$+-+*+Y.4+M.L.9+]+| ^ ^ | i.F+", -"| | Z K.E.$+y.P.@+*+Z.$+)+~+&+'+{+R.=+S.$+M.`.A.!+P.D.R.)+)+-+!+$+X.*+ +R.$+=+M.'+N.M.@+9+]+!+C.'+M.p.@+R.E.Y.Y.1+&+]+-+O.`.S.1+3+|+=+$+[+{+^ | | | i.F+", -"| : Z K.G.O.(+_+:+:+:+:+:+:+:+:+:+_+U M.=+ +`.G.q.0+!+R.$+;+N.Y.0+@+O.M.=+#+Y.N.$+Y.u.*+ + +*+O.$+#+-+8+3+ +R.;+M.-+Y.'+$+M.P.P.M.#+I.I.2+,+| | ^ | i.F+", -"| | Z Q.P.X.V V V V V V V V V V V V :+#+1+0+!+&+2+]+!+Y.Y.1+$+=+G.R.3+E.;+-+=+N.X.B.Y. +'+R.G.E.N.v.Y.2+&+4+@+a+;+O..+M.E.S.N.*+Z.Y.;+Y.,+[+| : | | i.F+", -"| | Z K.P.C./+V S T T T T T T T T o+t+M.u.X.-+P.~+C.'+w.#+d+$+a+&+X.3+{+O.#+a+M.%+#+E.p.~+0+ +R.E.-+b+*+&+P.Z.)+1+$+`.D.G.$+%+w.#+|+M.)+*+k+| | | | i.F+", -"| | Z Q.p.`./+V V V V V V V V V V o+t+)+@+1+#+D..+v.$ $ $ Y.`.E.O.$ ]+P.$ y.=+M.)+#+R.R.@+ +]+&+]+N.*+&+x.X.M.M.N.Y.!+N.X.)+N.=+-+)+=+4+ +0+| | : } i.F+", -"| | Z K.B.!+/+V V V V V V V V V V o+t+)+-+&+*+&+4+$ {+v.d+$ `.`.$ X.&+$ X.#+=+D.]+~+ +$+b+N.0+P.@+-+'+'+N.R.`.N.$+4+P.A.Z.)+$+E.N.#+|+R.]+++| | | } i.F+", -"| | Z Q.D.$+/+V V V V V V V V V V :+t+Y.&+-+R.>+G.$ ]+-+-+$ 3+$ $ $ $ $ $ *+M.=+$+A.a+.+f+a+Y.-+1+~+M..+$+E.P.1+D.Z.D.3+=+B.Y.M.M.z.y.X.,+8+: } ^ | i.C+", -"| } Z Q.L.P./+V T V V V V V V V V :+t+)+Y.&+>+!+~+$ O.C.$+$ `.0+$ 2+*+$ X.Y.Y.$+a+@+8+N.'+c+N.u.B.$+N.`.N.8+&+;+N.a+&+R.A.Z.-+z.N.M.=+`.E.8+} | | } i.F+", -"| } Z Q.C.w./+V V V V V V V V V V o+t+Y.G.0+2+'+*+$ *+-+$+$ 8+&+$ .+*+$ @+$+1+y.=+'+]+.+ +*+X.2+X..+R. +O.O.&+$+B.Y.{+@+&+)+S.$+b+B.C.!+'+[+| | | | i.C+", -"| | Z Q.v..+/+/+V V V V V V V V V :+t+Y.$+E.!+.+@+$ @+P.Z.$ ~+ +$ -+ +$ E.@+1+D.)+R.>+ + +$+$+{+R.d+R.`.P.!+D.M.Y.N.'+P.R.N.w.#+N.=+1+S.8+8+| } | } i.F+", -"} | R P.G.G./+V T V V V V V V V V o+t+-+`.@+G. +C.P.$ $ $ )+N.{+$ 2+D.$ 2+X.=+=+M.-+P.G.*+0+1+{+C.!+O.v.$+X.M.$+Y.1+@+~+)+1+K.=+)+2+P. +8+++| | } | i.F+", -"| } Z Q.A.*+/+V /+V V V V V V V /+:+t+1+-+&+O.$+P..+4+*+$+;+ +.+X.N.3+D.*+X.)+M.z.A.*+.+4+N.!+*+-+N.#+E.*+ +N.$+a+3+&+B.#+M.S.S.4+2+4+&+{+8+| } | } i.F+", -"| } Z Q.p.`./+o+t+t+A+A+A+A+A+A+t+A+t+#+-+]+C.G.{+O.8+M.!+S.)+8+u.@+D.N.O.4+N.)+1+~+E.&+X.B.#+!+O.2+{+~+-+'+'+Z.=+!+@+>+`.|+#+a+w.1+z.~+]+0+} | } } i.F+", -"} } Z Q.y.N.t+H+H+H+H+H+H+H+H+H+H+H+H+)+Y.=+&+~+D.-+*+1+=+)+S.R.X.|+.+a+O.-+$+;+D.S.G.C.~+b+]+b+E.)+P..+O.Y.X.M.|+$+D.-+'+N.1+4+D.w.~+-+]+[+} } } | i.F+", -"} } Z Q.x.C.Y.=+S.O.'+$+Y.~+B.*+C.=+M.$+2+1+Z.O.X.a+R.-+D.C.1+)+G.2+@+c+*+@+N.$+E.2+$+C.0+G.{+O.B.$+{+-+ +]+&+Y.O.=+O..+N.E.a+N.|+D. +v.@+2+| } } } i.F+", -"} } Z Q.w.Z.%+G.N.)+N.)+@+d+*+$+@+b+#+2+Z.x. +&+E.`.2+N.=+M.]+`.~+C.2+&+.+M.$+S.{+!+`.*+E.X.M.2+-+S.y.X.R.O.-+B.Y.c+w.N.0+#+$+!+Y.@+`.R.8+,+} } | } i.F+", -"} } Z Q.x.%+8+Z.2+B.S.K.1+P.&+.+E.d+;+;+S.D.Y. +.+.+z.R.M.4+Y..+1+&+E.b+E.`.=+a+$+@+b+*+'+*+&+~+C.M.)+G.a+G.-+S.)+8+y.&+ +4+Y.3+&+M.C.Y.{+9+} } } } i.C+", -"} } Z R.q.1+!+~+)+E.Y.$+a+N.P.]+{+$+w.f+!+ +E.X.~+[+-+~+=+a+P.Y.S.G..+X.@+)+=+#+@+$+`.0+~+G.-+G.'+#+'+.+>+!+Y.Y.;+R.b+!+E.Z.M.2+O.;+1+)+W.8+} } } } i.F+", -"} } Z Q.l.)+R. +R.'+D.Y.S.C.{+X.X.)+M.M.3+{+)+*+.+.+.+$+a+=+$+#+.+&+'+u.{+{+N.)+b+2+M.&+d+3+3+C.b+;+!+3+'+2+)+|+2+a+4+*+)+c+z.p.P.$+$+P.{+[+} } } } i.C+", -"} } Z Q.v.Z.@+{+)+ +J.D.)+)+!+{+`.*+N.Z.M.P.&+~+Z.>+@+Y.$+w.M.=+X.X.G. +@+S.|+M.|+Y.=+z. +X. +0+M.S.M..+R.v.-+$+$+!+N.=+#+L.M.-+-+L.c+N.{+d+} } } } i.F+", -"} } Z Q.w.)+~+Y.#+=+1+E.;+#+]+-+~+N.S.Y.b+.+b+G.*+ +-+z.S.N.E.)+|+~+4+E.!+N.Y.N.$+ +G.2+.+z.*+G.D.a+M.2+B. +v.N.S.y.Z.$+!+#+a+1+Y.S.;+I.{+9+} } } } i.C+", -"} 1 Z P.k.4+(+_+:+:+:+:+:+:+:+:+:+_+U Y.0+M.#+@+.+E.S.O.C.$+=+S.4+A.3+@+D.Y.=+2+Z.&+-+-+ +G.'+~+#+Y.8+~+.+&+N.|+N.P.&+'+|+B.`.C.E.w.E.@+b+8+} } } } i.F+", -"} } R P.l.v.V V V V V V V V V V V V :+1+3+]+]+.+&+q.b+!+N.$+)+N.Y.0+@+G.O.=+#+Y.E.1+z.X.2+.+R.0+Z.N.p.R.@+~+S.$+S.)+b+'+M.`.b+4+y.$+b+)+X.g+} 1 } } i.C+", -"} } Z Q.x.C./+V S T T T T T T T T o+t+|+4+&+@+Y..+2+3+!+Y.Y.1+$+=+G.R.3+E.;+=+2+z.'+!+D.O.~+@+P.0+X.Y.@+.+a+D.#+#+4+~+`.P.L. +N.Z.#+$+)+>+d+1 1 } } i.F+", -"1 1 X Q.G.=+/+V V V V V V V V V V o+t+)+D.X.O.C.~+$ +O.$+=+y.$ &+$ z.C.&+a+Y.$+-+E.b+P.0+B.Y.v.M.R.y.S.Y.2+x.Y.M.O.x.C..+#+$+C.)+N.N.!+0+8+} 1 } 1 i.F+", -"1 } Z W.l.&+/+V V V V V V V V V V o+t+#+!+)+.+3+2+$ $ 0+M.1+$ $ O..+ +G.2+Y.C.!+N.`.{+ +Y.E.E.'+1+2+@+ +C.X. +!+;+x.-+*+Y.4+-+;+#+y.O.$+2+9+} 1 1 1 i.F+", -"1 1 Z Q.p.Z./+V V V V V V V V V V :+t+w.D. + + +*+$ $ 2+)+Y.$ $ R.$ +P.$ &+S.$ b+C.]+]+u.)+ +&+C.$+)+G..+.+-+Y.;+-+.+.+'+Y.S.$+-+-+ +R.d+{+1 } 1 1 i.F+", -"1 1 Z Q.v.)+/+V T V V V V V V V V :+t+Y.a+.+R.p.R.$ ~+$ S.$ P.$ +$ X.Y.*+$ $ w.z.@+{+-+E.Y.Z.]+v.d+M.R.R.-+Z.=+!+ +z.&+C.!+Y.-+d+M.O.Y.0+8+1 1 1 1 i.F+", -"1 1 R Q.u.C./+V V V V V V V V V V o+t+C.w.~+*+*+X.$ {+$ $+$ {+$ '+$ R.Y.X.$ $ $+)+&+8+'+ +-+D.&+-+.+&+~+S.&+{+S.$+!+~+@+E.;+-+N.Z.*+.+3+3+g+1 1 1 1 i.F+", -"1 1 .Q.R.!+/+/+V V V V V V V V V :+t+=+=+1+G.R.~+$ ]+$ $+$ 3+$ *+$ `.2+E.$ $ =+b+{+!+X.R.1+1+O.!+R.N.~+N.]+)+=+;+Y.*+]+P.)+1+;+Y.c+]+&+]+9+1 1 1 1 i.F+", -"1 1 +.Q.l.X./+V T V V V V V V V V o+t+N.g+$+G.M.x.$ P.Y.$ Z..+$ @+$ *+S.$ B.$+$ E.S.2+N.]+~+P.M.@+ +.+0+P.N.`.M.2+D.$+{+-+E.=+M.S.~+!+0+.+8+1 1 1 1 i.F+", -"1 1 +.Q.v.)+/+V /+V V V V V V V /+:+t+D.Z.E.]+`. +2+=+M.a+G.Y.*+b+.+.+8+-+#+=+=+1+E.E.{+P.8+P.'+P.!+a+y.*+C.R.G.0+N.!+{+w.S.a+#+Y.C.@+.+[+8+1 1 1 1 i.F+", -"1 1 +.W.q.>+/+o+t+t+A+A+A+A+A+A+t+A+t+;+4+2+1+N.`. +R.Y.=+;+C..+M.~+*+ +'+P.a+2+Z.P.)+{+2+2+z.'+b+Z.~+-+2+G.-+Y.)+|+E.&+~+M.=+Y.C.)+{+R.8+f+1 1 2 1 i.F+", -"1 2 +.Q.E.Y.t+H+H+H+H+H+H+H+H+H+H+H+H+y.b+~+ +*+*+)+D.*+=+2+'+~+R.R.X.|+ +b+M.!+&+!+z.S.O.C.!+b+)+b+G.{+P. +G.Y.Y.N.4+.+#+=+E.$+$+M.`.{+*+9+2 1 1 2 i.F+", -"1 1 +.W.v.@+`.E.*+`..+.+x. +*+O.2+E.~+)+N.E.X.E.P.8+P.!+X.!+`.3+!+X.G.]+~+]+!+-+4+`.X.X.3+2+R.2+0+E.*+G.&+0+P.X.X..+E.0+D.;+N.E.a+M.0+C.'+ +1 1 1 1 h.F+", -"1 2 +.Q.E.b+'+&+Y.'+@+`.=+$+E.*+O.E.=+b+2+{+E.!+P.p.@+S.N.$+Y.]+@+~+'+E.X.X.|+4+b+*+@+#+P.Y.C.y.D.S.~+0+R.z.-+M.|+N.~+@+.+1+)+S.$+8+Q.C.g+~+1 2 1 2 i.F+", -"1 1 +.W.C..+)+*+@+O.$+P.$+|+*+Y.'+S.$+Y.N.]+C.*+X.#+E.y.D.#+$+4+R.~+*+-+R.-+K.-+Y.X..+0+{+.+A.X.2+#+a+y.)+B.!+#+Y.Y.&+A.Y.d+D.4+$+1+C.Z. +8+1 2 1 2 i.C+", -"2 2 +.Q.B.N.&+A.N.~+X.-+S.$+M.!+`.-+$+1+L.~+O.{+.+Y.C.!+$+$+X.X.3+D.!+O.!+`.4+C.*+0+@+1+A.'+M.'+ +`.*+&+{+X.c+S.Y.X.{+C.@+Y.#+]+)+Y.@+X.*+k+1 2 1 2 i.F+", -"1 2 +.W.A.`.Y.E.N.`.S.d+v.;+~+E.R.a+N.$+L.X..+!+.+X. +&+)+;+*+X.R.R.A.=+3+1+=+=+$+>+%+E.P.)+M.'+.+d+*+*+.+b+-+4+S.w.@+&+M.Y.M.#+M.{+)+I.[+g+2 1 1 2 i.F+", -"2 2 +.Q.B.*+3+x.a+X. +D.S.]+{+M.P.!+c+Y.X.*+.+.+E.~+X.$+=+2+*+X.O. +p.-+>+4+=+N.c+~+3+-+{+ +O.E.y.)+P.@+#+&+%+1+`.b+@+D.G.Y.4+N.=+M.]+X.0+,+1 2 2 2 i.F+", -"2 1 +.W.Q.z.b+.+]+B.3+X.w.`. +&+a+'+=+Y.$+>+Z.O.-+E.X.$+=+M.=+!+~+P.`.$+@+N.D.N.b+]+A.Z.-+!+O. +=+-+L.#+y.y.;+=+$+;+0+P.C.S.D.Y.N.-+G.~+*+0+2 1 2 2 i.F+", -"2 4 +.Q.q.*+(+_+:+:+:+:+:+:+:+:+:+_+U 2+-+3+*+.+*+M.X.O.C.$+=+S.4+A.3+@+D.Y.#+M.X.M.C.$+=+Z.4+A.3+G.X.O.C.$+=+S.4+A.3+&+-+=+N.Y.N.$+3+P.{+k+2 2 2 2 i.F+", -"2 2 +.W.A.y.V V V V V V V V V V V V :+)+`.*+*+$+*+q.b+!+R.$+)+N.Y.0+@+G.O.=+#+q.b+!+N.%+)+N.Y.0+&+q.b+!+R.$+;+P.Y.0+@+O.D.Y.-+#+#+N.'+[+8+g+2 2 2 4 i.C+", -"2 4 +.Q.k.G./+V S T T T T T T T T o+t+1+$+#+]+]+>+2+3+!+ +Y.1+$+=+G.R.3+E.;+=+2+]+!+ +Y.1+Y.=+G.R.2+3+!+Y.Y.1+$+=+G.R.2+M.=+#+;+N.~+.+Z.{+8+2 2 2 4 i.F+", -"2 2 +.W.Q.y./+V V V V V V V V V V o+t+&+#+#+*+R.X.$ $ $ $ -+1+.+a+$+G.a+C.N.w.%+-+@+{+$ '+@+~+#+2+4+M.A.~+N.!+4+#+C.=+P.M.;+-+)+N.C.O.D.O.~+4 4 2 2 i.F+", -"2 4 +.Q.W.2+/+V V V V V V V V V V o+t+;+~+~+&+*+@+$ P. +1+$ C.*+x. +P.P.x.y.L.`.=+`.!+$ O.A.3+x.D.M.G.C.!+D.2+P.{+$+ +2+-+S.#+=+4+I.X. +&+~+2 4 2 4 i.F+", -"4 4 +.Q.X.`./+V V V V V V V V V V :+t+Y.Y.-+b+'+@+$ a+@+y.$ -+@+$ $ X. +a+$ $ $ ~+d+P.$ A.$ $ $ $ 8+&+>+$ $ $+S.=+$ $ &+a+D.C.#+Y.S.=+N.[+,+4 4 2 4 i.C+", -"4 4 +.Q.y.Z./+V T V V V V V V V V :+t+=+1+E.S.C..+$ $ $ $ N.!+$ X.@+$ E.@+$ )+S.$ #+@+$ z.O.2+~+$ Y.-+$ O.X.$ #+$ ~+z.$ )+%+.+=+2+N.#+%+@+9+4 4 4 4 i.F+", -"4 4 +.W.u.-+/+V V V V V V V V V V o+t+2+N.P.#+R.C.$ 0+q.$ Y. +$ $ $ $ P.~+$ |+1+$ 2+#+$ .+X.$ $ $ 4+=+$ -+G.R.)+$ $ $ $ N.]+1+~+O.N.)+#+,+f+4 4 4 4 i.F+", -"4 4 +.Q.E.v./+/+V V V V V V V V V :+t+;+S.=+$+{+E.$ '+M.)+$ !+$ G..+P.E.b+$ S.#+$ P.~+$ O.$ 3+G.$ =+C.$ A.v.$ )+$ -+-+~+C.#+=+)+=+)+L.L.*+g+4 4 4 4 i.F+", -"4 4 +.W.x.G./+V T V V V V V V V V o+t+)+`.@+w.R.E.$ X.$+-+# %+X.$ $ $ -+'+$ $ $ c+~+3+$ ~+$ $ $ $ {+P.@+$ $ &+1+Z.$ $ $ C.S.D.Y.N.-+G.~+*+8+4 4 5 4 h.F+", -"4 4 +.T.W.X./+V /+V V V V V V V /+:+t+C.!+D.3+P.!+E.X.$+=+M.*+~+!+P.`.&+$+$ C.N.b+{+A. +#+~+I.`.*+-+R.'+y.x.!+=+$+!+4+P.-+=+N.Y.N.&+1+P.[+g+5 4 4 4 i.F+", -"4 5 +.Q.l.v./+o+t+t+A+A+A+A+A+A+t+A+t+M.$+M.@+!+M.'+.+Y.b+S.)+@+X.v.G.~+`.$ N.E.#+]+.+2+*+I.~+Z.d+E.N.@+D.!+'+=+$+2+X.A.I.Y.Y.#+#+N.'+2+8+g+4 5 4 4 h.F+", -"4 4 +.W.q.{+t+H+H+H+H+H+H+H+H+H+H+H+H+a+S.'+c+O.u.~+b+)+w.!+4+$+8+$+O.c+E.L.B.-+#+&+{+$+#+$+{+'+4+0+N.C.]+R.~+|+;+E.-+X.*+1+B.;+N.;+.+L.]+0+5 5 4 5 i.F+", -"4 5 +.T.A. +.+O.G.y.C.=+;+$+`.&+.+R.N.N.)+=+S..+P.8+P.4+N.1+)+X.M..+X.`.2+Y..+E.-+{+y.@+E.1+1+P.2+@+8+$+@+P.Y.C.4+@+D.4+C.)+N.C.&+]+,+`.1+$+4 5 4 5 i.D+", -"4 3 +.Q.p.c+w.R.4+w.M.1+B.-+y..+0+N.$+1+N.E.{+W.*+.+'+=+p.$+4+Z.S.G.C..+~+S.!+7+1+'+]+]+7+$+>+-+@+ +D.{+{+{+&+L.>+Y.2+`.{+{+{+~+*+0+~+[+a+0+5 4 4 5 i.D+", -"5 4 +.T.q.Y.E.S.M.C.$+=+S.4+A.3+&+D.Y.#+G.*+Y.E.b+ +d+8+$+-+4+]+M. +.+E.P.{+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+h+e+e+e+h+e+h+e+k+h+9+k+e+9+h+k+q+5 5 5 4 i.D+", -"5 5 '.T.v.=+q.0+!+R.$+;+N.Y.0+@+O.M.=+#+b+@+G.X.&+P.]+c+N.#+Y.*+M.G.@+@+-+E.h+s+s+s+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+B+z+z+B+z+z+z+z+z+z+z+y+5 4 5 5 i.D+", -"4 5 '.Q.q.@+2+]+!+Y.Y.1+Y.=+G.R.3+E.;+-+*+b+.+8+*+X.*+D.=+;+$+=+#+R.@+{+P..+T.j k l l l l l l l l l l l l l l l l l l l l l l l l l l l l j 5 4 5 5 i.D+", -"5 5 '.T.B.O.M.R.2+M.4+#+M.y.A.v.2+!+Y.=+-+)+B.&+&+{+&+!+S.S.Z.b+Z.0+E.*+ +'+T.j j j j j j j j j j j j j j j j j l l l l l j j j j j j j j j 5 5 5 5 i.D+", -"5 5 '.T.M.R.E.X.O.C.$+=+S.4+A.3+@+D.Y.;+M.'+{+&+R.z.y.$+N.4+)+R.y.{+.+E.P.R.h+h+h+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+o.5 5 5 3 i.D+", -"5 3 '.T.D.E.p.0+!+R.$+;+N.Y.0+@+G.N.$+#+@+*+*+'+D.I.~+$+N.a+Z.&+Y.@+b+D.*+*+K.K.T.Q.K.}+Q.Q.J.T.Q.K.}+Q.Q.Q.T.}+}+T.T.T.T.T.K.T.}+Q.T.Q.)+}+3 5 3 5 i.D+", -"5 3 '.T.x.S.N.#+A.-+O.y.C. +]+*+'+-+y.N.$+'+N. +'+~+&+#+1+S.-+X.Y.E. +D.!+N.E.S.)+~+$+#+@+`.#+ +X.=+@+C.*+P.E.=+a+2+{+E.~+N.v.$+Z.O.Y.Y.0+0+3 5 5 3 i.D+", -"5 3 '.T.E.S.2+A.!+ +Y.1+$+*+O.X.2+E.)+-+!+`.=+#+C.#+B.3+S.1+'+Y..+E.*+)+y.$+E.1+1+P.2+@+8+&+@+R.Y.C.2+$+D.4+C.)+N.C.&+]+-+`.1+$+$+M.%+P..+]+3 3 3 3 i.D+", -"3 5 '.T.y.S.(+_+:+:+:+:+:+:+:+:+:+_+U b+-+P.y.&+E.E.X.O.C.$+=+S.4+A.3+&+D.Y.#+E.S.M.C.$+%+S.4+D.2+@+D.Y.#+E.X.O.C.$+=+S.4+A.3+&+D.Y.=+%+#+,+3 5 5 3 i.D+", -"3 3 9.T.u.G.V V V V V V V V V V V V :+#+$+D.a+!+3+p.0+!+R.$+)+N.Y.0+@+O.M.=+;+q.0+!+L.$+)+N. +0+&+I.I.=+-+p.0+!+R.$+)+N.Y.0+@+O.M.=+#+l.@+0+3 3 5 3 i.D+", -"3 3 +.W.q.'+/+V S T T T T T T T T o+t+2+S..+@+-+P.2+3+!+ +Y.1+$+=+G.R.2+E.;+-+2+]+!+ +Y.1+$+%+I.R.3+G.)+#+2+3+!+ +Y.1+$+*+O.L.3+G.)+=+d+{+,+< 3 3 3 i.D+", -"3 3 +.T.q.0+/+V V V V V V V V V V o+t+M.]+R.Y.N..+$ ~+ +N.M.w.]+O..+#+.+*+)+S.|+$+E.D.N.$ Z.I.%+E.~+L.$ $ $ $ )+$+`.X.B.2+Y.]+v.-+$ %+I.@+0+3 3 3 3 i.D+", -"3 < +.Q.x.~+/+V V V V V V V V V V o+t+#+!+>+a+O.'+$ P.)+M.Y.b+]+$+ +@+v.&+A.E.Y.B.$+@+I.$ P..+]+Z.$+@+$ !+.+!+$ #+-+]+]+.+0+1+1+$ !+&+Z.2+4+< < 3 < i.D+", -"< < +.Q.q..+/+V V V V V V V V V V :+t+)+3+!+`.x.X.$ '+D.Y.L.1+$ $ -+R.$ $ $ $ 1+2+0+$ $ $ b+L.~+#+4+I.$ +'+2+$ -+'+$ $ *+$+I.$ $ $ Y.Z.I.6+< 3 3 < i.F+", -"3 < +.T.q.`./+V T V V V V V V V V :+t+$+.+u. +c+3+$ ~+b+y.$+# L.G.$ O.'+]+'+$ -+Y.$ !+!+$ [+~+~+-+#+!+$ @+#+Y.$ ;+$ 2+2+$ w.'+-+$ Z.4+3+]+8+3 3 3 < h.D+", -"< < +.Q.A.P./+V V V V V V V V V V o+t+Y.N.]+P.b+R.$ ~+&+$+#+$ 2+D.$ '+&+$ $ $ Y.b+$ )+&+$ @+B.{+!+ +$+$ N.0+P.$ #+$ $ $ $ Y.P.Y.$ N.C.%+b+6+< < < < i.D+", -"< b +.T.x.x./+/+V V V V V V V V V :+t+!+&+.+D.-+ +$ *+N.|+N.$ &+,+$ +$ 0+y.$ b+~+$ 2+#+$ 2+Y.X.C.`.O.$ @+.+I.$ )+$ ~+a+.+1+B.1+$ w.Z. +,+g+< < < < i.D+", -"< < '.T.M. +/+V T V V V V V V V V o+t+1+.+.+~+z.&+$ $ $ $ M.!+$ $ A.@+$ $ $ $ M.4+3+$ $ $ 2+!+@+Y.`.1+$ $ $ $ S.S.-+$ $ $ Y.c+N.$ %+ +$ !+8+< b < < i.F+", -"b < '.Q.q.Y./+V /+V V V V V V V /+:+t+)+~+*+X.$+-+R.O.y.w.E.1+3+v.)+.+&+C.Y.1+M.$+@+,+Z.'+&+ +.+D.#+ +,+c+E.G.Y.)+!+]+D.!+J.M.M.4+4+'+Z.P.8+< < b < h.F+", -"< b '.T.q.!+/+o+t+t+A+A+A+A+A+A+t+A+t+|+!+-+~+$+R.L.Z.#+S.1+!+Y.@+G.*+)+y.@+#+1+%+Y.*+Z.0+X..+R. +P.O.*+@+z.X.)+=+N.N.x.#+S.=+1+S.0+*+I.[+d+< b < b i.F+", -"b b '.T.D. +t+H+H+H+H+H+H+H+H+H+H+H+H+4+)+*+'+E.~+z.=+7+Y.b+=+Z.1+]+R.,+%+M.N.B.Y.$+!+R.P.O.X.v. +4+&+b+*+b+-+E.`.I.E.@+,+D.;+|+M.)+.+8+0+j+b b < b i.F+", -"b b '.T.v.Y.2+z.`.E.O.y.C..+]+*+'+-+y.N.$+-+R. +'+{+*+#+1+S.-+X.Y.E. +D.!+N.C.Z.)+~+&+-+@+Z.,+ +L.%+@+C.*+O.E.=+a+4+{+C.!+N.v.$+S.O..+ +0+0+b b b b i.F+", -"b d '.T.u.!+4+&+>+&+0+ +{+R.{+y.S.|+$+a+4+0+)+~+P.-+)+x.=+y.1+Z.&+!+*+#+C.R.1+Z.#+ +@+O.{+.+!+&+]+L.~+P.]+.+Y.E.)+-+@+R.X.4+C.)+L.]+.+9+L.8+b d b d i.F+", -"b d '.T.N.#+*+!+8+$+Z.1+R.!+&+&+P.G.*+'+1+>+4+'+&+X.a+O.X.&+$+X.3+R.7+-+a+!+>+c+2+!+1+]+d+&+!+'+&+.+C.{+{+]+*+X.~+Y.4+ +{+]+]+{+*+0+~+[+8+|+b b b d i.F+", -"b b '.T.T.T.h+h+e+k+k+h+h+9+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+h+e+e+e+h+e+h+e+k+h+9+k+e+9+h+k+q+a d b d i.F+", -"d d '.T.h+s+z+B+s+B+z+y+z+z+z+z+z+z+z+z+z+B+z+z+z+z+z+z+z+z+z+B+z+z+z+z+z+z+z+z+z+B+z+z+y+z+z+u+y+z+z+z+y+z+z+z+z+z+B+z+z+B+z+z+z+z+z+z+z+z+b b d d i.F+", -"d d b b c d c d c c b d d d d d d d d d d d d d d d d b c d d d b d d d d b b b d d d b d d d b d b b b c b d d d d b d b c c d d d b d c d d d b f i.F+", -"d d d d d c b c b d d d d d d d c d c c d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d c d d c d d d d d c c c i.F+", -"d c c d d d d d d d d d d d d d d d c c d d c c c d c c c d d d d c d c d d c d c c a c d d d d d d d d d d d d d d d d c d c c c c d c d d c c f g i.F+", -"c c c c a a c d a c c c i i c d c d c f c c h f c c c c c a d c c c c c d d c d c c f g g c c g f f c a c c g c c c a c c c c c c c c g h c c c g g i.F+", -"a a c a h c c a i f i a d f c a a c g g i c i a h a a a c h a c a i f c a c a a i a g f c i a a a c i h a a h g h h i c a a a a a i a a a i a h h i i.F+", -"a h h a a h a h h h h i i a a h h a h h i i a h c c h c a h h h h i a i a h h g a h h h h a a h a a a h h i h a c h a h h h a h h a h a i h a a h h i.F+", -"i a h a a h h h a i h i h h h a h h i h h h h h a i h i h l a a h i l h h h h h i h h i a h i h a h i a h h h h i i h a h h h h h h h h a h h l i k i.F+", -"i h h h h i i h h h i h l i h i i h i i h i i h i h h h h h k h h h l i h i h h i i h i g i h h h h l h i l h h l h h l i h l h h h h h h i h i h k i.F+", -"l l i k k k l l h k l l i i i h i l h h l h h h i i h h k l l h l l i l l h i i l l i l l l i h h h l l i l h i l i l i i k i k h h k l i l l k k l h.F+", -"l h l i l l l h l h h l l l l l k k l h l l k k l l l h l h l h l h k k l h l h l h k l h l l l l l k l k l l l k l h l l l i l l l h l h k l h l k i.F+", -"k k k l h l k k k l k h l h l l k l k l h l l k k h l k k l l k l k l l l l l k k l k l k l h l h l l l l l h l l l l l h l l l h l k l k l l l h m i.F+", -"l k l l l l k l l l l k l l k k l k l k j h l k k k l l l l l l k k k h k l l l k l l l l k l l k l l l l l k k l l h k k j h k l l l k l k l l l j i.F+", -"l l l l l l l j k l l l l l l k l l l l k l m l l l l j l l l l l j l l l l l l l m k l l l l l l j l l l l l l l l l l l l l l l l l l l l l l l m i.F+", -"l l l l l l j l m j l m j l j l l l l j l l l l l l l l j l l l j l l l l j l l l l k l m l l l j l l j m j j l l l l l l l l l j l l l l l l m j m i.F+", -"m j l j j l j j j j j l j l l l j j j j j j l j l j j j j j l l l j m l l j j j j j j j j l l j j j j l j l j l j l j j j j j j j l j j l j l j j j i.F+", -"j j j j j j j j j j j j j j j j j j l j j j j j j j j j j j l j j j j j j j j l j j j j j j j j j j j j j j j j j j j l j j j j j j j j j j j j j n i.F+", -"j j j j j j j j j p j j j j j j j j j j j j j j j j j j j j l j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j p j j n i.F+", -"j j n j j j j p j p n j n j j n j j j j j j n n n j j j j j j j n j j j j j j j j j j j j j n j j p j j j p j j j j n j n j j j j j j j j j p j j n i.F+", -"p j n p j p j p j p n p n p j j j j p j p n p p n p j p j j p j j j n j j n j p j p j n n p p p n p n r n p n j p n p p p j n j j p p j p n p r j e i.F+", -"p p p p p p p p n p p p n p j r r r n p j p n j n p j n p p p j p n p p p p n p p j p n p p p j n r n n p p n p p r r p p j p p j n p p p n r n n e i.F+", -"p p p p p p p p r n r r r n p p n r p p p r r r r r r p r r r t p p p p p n p p p p p r r r r r r r n r r n p p p p n p p r r p p p p p p p t r p e i.F+", -"p p p p e e w e e e e e p p p r r r r r r r e e e e e r e e e t p p p p p t r r p r r r e e e r e e e e r r t p p t w e e e r r r t p p p p t e e e i.F+", -"p p t t t e w e e r r v t r r r e e e v e w w w w r w e e r e w w v r r p t e r r p r r e e e e r w e w w e r t p p t r w e e e e w p t t e t p r r i.F+", -"t w e p x w w r w w w p r r t w w r w x r v x r e r r e r w e e r t v w e v e e x x v e r v r r e v w w w v p p t v e w w w r v r v x w w e p t v e i.F+", -"t r e p w w w w e x w t w w e v e r v n v e t v w w e t v v x w t t v v v t r v v r x e v v w v x v w r w x v v e t t w v x w e w x r v w v x v t e i.F+", -"w v w w v x r v x x v w w w v v t w v v v v v w w v v v v r v w v e v e v t w r x r v v v e v e x r x r v v t w w w w v x r v v v v t t x r v t t x i.F+", -"w w w v w v v v r x v x v x v v v v w v x v v v v v v v v v v w v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v x v v v v v v v v v x i.F+", -"x v v v v v v v v x v v v v x x v v v x v v x v v x v v v v v v v x v v x v v v x v v v x v x v v v v v v v x x v v v x v x v v v x v v v x x v x x i.F+", -"x v x x x v x x x x v x x v x v x x x x v v v v v x x x x x v v x x v v x v x v v x x v x x v x x v x x v x v x v x v v x v v v v x x x x v v z z x i.F+", -"x v x x x x x v x y v x x y x x v x x x y u y v v v v x y v x y x x x v x y x v x x y x x x y x x x x x x x x x x v x x v x x x x x x x x x y x x z i.F+", -"y y y x v x y y x y y y x x x y x y y x y u y u u x y y x y y y y x y x y y x x y y y y x y x x y y y x x y y x y y x y y y v y x v x x x y y z x z i.F+", -"y x y y y y y y y z z z y z z x y y y y A y y y y z x y y y y z y z y z y z y y y z y y z y y y y y y x z y z y y x y y y y y y x y y z y z z z z z i.F+", -"u y y y y y z z z z z z z y y z y z z z z A u A y y y y z z y y y z y y y y z z y y z y z y y y z z x y y y y z y z z y y y z y y y y x y z z z z z i.F+", -"A s z y y A z z z z z z z z z A z z z y A A y z z y y z y A y y A z z y z y z y y z y z y z y A y y y y y y y z y A y z z y A y z z z y z z z z z z i.F+", -"z A B B A y z B z B z s A A z A A A A z y A s s z z A A A A A z A A A z y A A A z A z A A z A A z z A z y A y z A z A A z A A A A z A A A z A A z z i.F+", -"z B z B B s s s z B z s B A A A A z A z A A z A A A A A z z A A z A A A A A A A A A z z z A A A A A A A A A A A A A A A A A A z A A A z A A A A A B i.F+", -"s s A z B A B s s s B z B A A A s s z s s B s B A A z A B z A A A A A A A A A A A B A A B B s A A A A B A A A A B A B B A A A B B A A A B B B A B B i.F+", -"A s A B B A s B B B B B B B A B A B B s s B A A A A B A B B A A A A A s B B E B A B B A B B A B A A B A B A A B B B A A B A B B B A A B A A B A A B i.F+", -"B s B s A B A B B B B B B B A B D B B E B B B D E s A A A E s A B B s A A B B B D B B B B B A s A A A A B E E A B s s s A B E B B E H s B E s s A H i.F+", -"B D B E D D D D B B H B D B E B D B B I H B A E E B s B s B E D D E B D B B E H z D D A D D E s E s E B D B B D E E B s s B D H B H B H H s E E D H i.F+", -"H H H H H D D H H B H H D H H I I I D I B H E D B D D D B E E D H H H H D D D D D D H D B D E B E E D B D D H H H D D D D D D H H H H H H D E D D H i.F+", -"H I H H H I H H H H H H H I I I B I B I B D D D H H B D D D D D H H H H H H H H H D D H D D I I D D D D D H H H H H H H D D H H H H I D D D H H I I i.F+", -"H I H D H I H I H H K K H I I I I I K I D K H D D D I D I I D D I B I H I I H H H D D D H D D D I D H I D D I H I H H H I D I I I I H K H D H H I I i.F+", -"I I H G G I I I H H I I H H H I K B D I I I H D D D I H I D K I K I K H H I H I D D I I I I D I I I D D I I I H K I K I I D D I H I I H K D D I D I i.F+", -"H K I I H G I I H K I I I K I K I I I K H H I I D I I I I I K H I K I I I H I I I I I I I I I I D D I I I I K K H I K I D I I K H K H G K I I I I K i.F+", -"K I I G I I I I K G G G I K I I I I I I I I I I I I G I G K K C K I I L I K I I G I K K I K G I K I I I I I I C K K I I I K I K I G G K I I K I I K i.F+", -"G I G G K G G G K G L G L C L I J K J K K K I K K G L L G I L K K I I L G K K K K I C K I I G I I K J K I K K G C K K K K I K I J L G L K K K G G K i.F+", -"J K K L G L G K J L L G G J K K I K I K K K I K K L L G K K L I L K I G C K K G K G K K G G G K K K C I G J K G G G K L L L L J J G J C G K L L L L i.F+", -"K I K K K I K K L J G L G K J K K K K K K K K K K C K K J J J J C J J L L L K K K K K K J K K L J G K J K I K G J K I J G K K G L L L L J L L G L L i.F+", -"K K J J J J J J L C J J J J K J J J J J J J J J J J K K J I J G J J J L C K K K K J K K J L C J J J J G J J J J J J J J J J J K J L C J J M C J R M i.F+", -"J K J J L J L Y R R L J J J J Y J J J J L J L J L Y J J J J J J J J J L J J J K J J J J J J J J J J J J M J J J J J L J J J J M R M J J J J J J L R i.F+", -"Y J J J J J J R L L .J J M J R J J J J Y J J J J M J J M J R J J J J J J J J J Y J J J J J J R R J J Y R L J J L J J J M R L R L Y J R J J J K M Y i.F+", -"R J R R Y M M L Y Y .R Y J J J J J R R R R R R R R R R Y R R J R J J R Y J J J Y J J Y Y J J Y J J R J Y Y Y Y Y J Y R J Y Y Y R .J J J R J J M Y i.F+", -"R J R R .M Y Y Y .R Y R R J R R R R R R J R R J R ..J J R J R R R R R R R R Y Y J R R R R R J J R R R J R R R R R R R R Y Y Y R J R R Y J Y Y Y .i.F+", -"Y R R R .Y Y Y Y ..Y R Y R R Y R Y R Y R R R Y Y R R R R R ..Y R R Y Y R R ..R Y R R R R R Y Y R R R R R R Y Y Y ..Y Y R R Y Y .R Y ..R R ..R R Y i.F+", -".. .R R Y Y Y Y R ..Y R .R R R Y R R ....R ..R R M ..Y .... .Y ..R R Y R R Y .... .Y R ..Y ... .R R R Y R R Y R Y .. .R R .Y R R R ....R Y R .. .i.F+", -"R Y Y ....Y . . .Y .......... ..... .R R .. .R ....Y Y .Y .R R ....Y ..R R Y .....R ... .Y ..Y ....R .. .Y ...R Y ..Y Y .......R R R ..Y ..Y h.F+", -"` R ..Y . . . .....Y ...Y . ...Y .` Y .. .` Y .. . . .R .....Y . .....Y ....Y ...Y ..Y ` .. ...Y Y ... . ......... ...` ..Y .. . . ... . .@.i.F+", -" ... .@.@.@. ...Y ` .` . ......... . ... . .` .... ...` ....R ` . ..... ... . . . . ... ...@.@.@.@.@.@...Y .. .Y .Y ...Y .. .@.@.` . . .` .@.i.F+", -"` ...@.Y @.@.@..... .` ...` . ..... .` ......@.@.@... ..... . .` ..` ....` .... . .......` @.Y ..@.Y ` . .......` ` ..` . .@.Y .. . .` .... .@.i.F+", -"` ` @.` ` ` Y @.` ..@.@. . .@.@...` .` ..` ` ` ` Y @.` ` .. .....@.` @.` ` .` ..` ...@. . .` ` ` ` ` .. .@.` ..` .@.` ....` ` ..` ` ..@. .` ` @.i.F+", -"` @.` ` @.` ` ` ` @.@.` @.` ` ` @.` ` ` ` ` @.@.` ` ` ` @.` ..` ` ` ` @.@.` ` ` @.` ` ` ` ` ` ` @.` ` @.` ` ` ` @.` ` ` ` @.` @.` ` ` @.` ` ..` @.@.i.F+", -"` ` $.` @.` @.$.` @.$.$.@.` ` ` $.` @.$.` @.$.` $.` @.` ` @.$.` $.$.` ` $.@.$.@.$.` ` $.$.@.` @.` ` @.$.$.@.@.$.@.$.` @.` @.@.` @.@.` ` @.` ` ` ` @.i.F+", -"$.@.` @.@.$.$.$.` $.@.` $.` $.$.` $.$.@.$.$.$.$.` @.$.` @.` ` $.@.@.$.` $.$.$.$.$.$.$.` @.$.` ` $.@.` ` ` $.$.$.$.@.$.$.` @.` @.` ` @.` $.$.` ` ` #.i.F+", -"$.$.$.$.@.$.$.$.$.$.$.$.$.$.%.$.$.$.$.$.%.$.$.$.$.$.$.$.%.$.$.%.` $.$.$.$.` $.@.$.$.$.$.$.$.$.$.` $.$.$.$.$.$.$.$.$.` $.$.$.$.$.$.@.$.` $.$.$.$.$.#.i.F+", -"#.$.$.$.#.#.#.#.#.%.#.#.#.#.%.#.$.$.%.$.$.%.#.#.#.$.$.$.%.#.#.%.#.#.#.$.#.#.#.$.$.$.#.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.#.$.$.$.#.$.$.#.$.#.#.#.i.F+", -"$.%.%.$.#.#.#.%.%.%.%.#.#.&.#.&.$.#.%.#.#.%.%.#.%.*.$.#.%.%.#.%.#.#.#.#.%.#.%.$.%.#.#.%.$.#.$.$.$.#.%.$.$.$.#.#.%.*.#.#.$.#.#.#.%.#.$.$.#.%.%.*.#.#.i.F+", -"%.%.%.$.*.#.;.&.&.#.%.#.&.#.#.*.#.%.#.#.&.#.%.#.%.*.$.%.%.#.#.*.#.#.%.#.#.#.%.$.%.%.%.%.%.%.%.$.#.#.%.%.%.%.%.%.%.%.*.*.*.&.&.$.%.$.%.%.%.%.#.%.%.%.i.F+", -"%.%.%.%.%.&.&.#.&.%.#.%.%.%.%.*.*.*.*.*.*.*.*.%.%.%.%.%.*.&.%.&.%.#.%.%.*.%.#.*.%.%.%.$.%.%.%.#.#.%.%.%.%.%.#.%.*.%.%.#.*.#.%.%.%.$.%.%.%.%.%.%.%.%.i.F+", -"%.%.%.%.%.*.#.&.&.;.#.%.%.%.%.*.#.%.%.#.#.%.*.#.%.&.&.;.#.&.#.%.%.%.%.%.*.#.%.*.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.*.%.%.%.%.%.*.%.%.%.%.%.%.%.%.%.%.*.i.F+", -"%.%.%.&.%.%.&.&.&.&.%.%.%.%.%.&.%.%.%.*.*.&.&.=.&.&.&.&.*.;.%.%.&.%.%.%.%.*.*.*.*.*.&.%.%.%.=.%.%.&.%.%.*.%.%.%.*.%.%.*.%.*.%.*.%.&.%.%.%.%.%.%.%.*.i.F+", -"%.%.*.=.&.>.=.#.>.;.>.;.*.%.*.%.&.%.*.;.&.&.&.&.%.&.;.&.&.>.&.&.*.&.*.;.*.%.%.&.;.&.=.=.&.=.&.;.*.*.%.%.%.%.&.*.*.;.*.*.*.&.*.&.%.*.*.%.%.%.*.%.%.&.i.F+", -"=.;.%.*.&.;.=.=.=.&.;.=.;.*.*.;.;.;.;.&.*.;.;.;.=.;.>.&.&.;.=.;.*.*.;.;.=.*.;.;.;.&.&.&.&.&.=.*.;.&.=.*.*.&.&.=.*.;.%.;.%.*.=.=.=.=.&.%.=.&.*.*.=.=.i.F+", -"=.*.;.*.>.;.&.;.>.&.>.*.%.;.*.;.;.&.;.&.=.=.;.;.;.&.&.=.;.>.;.;.;.;.=.*.>.&.;.;.=.=.=.&.;.*.;.=.&.;.;.=.&.*.;.;.*.*.&.;.;.=.&.&.;.&.=.=.&.=.*.%.*.>.i.F+", -"&.=.;.;.;.=.=.&.>.&.=.>.>.=.;.;.;.=.=.=.=.&.=.=.=.=.=.=.&.>.>.;.;.;.;.;.&.=.&.=.;.&.>.>.>.=.;.;.;.=.;.=.=.=.=.=.;.;.;.;.;.=.=.=.;.&.;.&.;.=.;.=.=.>.i.F+", -"=.=.=.=.=.=.=.=.=.=.>.&.=.;.;.=.=.=.=.;.=.=.=.=.=.=.=.=.=.>.&.=.=.=.=.=.=.=.=.=.;.=.>.&.=.=.=.=.>.>.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.>.>.i.F+", -"=.=.>.=.>.>.=.=.>.>.=.=.=.=.=.>.=.=.=.>.>.=.>.=.=.>.=.=.=.>.=.>.=.=.=.=.>.=.=.=.=.>.>.>.=.=.=.=.=.>.=.=.=.,.>.=.=.=.>.=.=.=.=.=.>.>.=.>.=.=.>.,.>.~.i.F+", -">.=.>.=.=.=.>.=.=.>.=.>.=.=.=.>.=.=.>.=.=.=.>.=.>.>.=.=.>.=.=.=.>.=.>.>.=.>.>.=.=.=.=.=.=.>.=.=.=.>.>.=.>.,.=.=.,.>.>.=.=.>.,.=.=.=.=.=.=.=.=.,.=.~.i.F+", -">.=.=.>.=.>.>.=.>.>.>.=.>.=.=.=.=.>.=.>.>.=.>.=.=.=.>.>.=.=.>.=.>.=.=.>.>.>.=.=.>.>.=.>.>.=.=.=.=.,.=.>.>.,.=.=.=.,.>.>.>.=.,.=.>.>.>.=.>.>.=.>.,.~.i.F+", -",.>.,.>.>.=.,.>.=.>.=.>.>.>.=.>.,.>.>.=.>.>.>.>.>.>.>.>.=.,.>.>.,.>.=.>.,.>.>.>.>.>.>.,.>.>.>.>.>.,.>.>.>.,.>.=.,.,.=.=.>.>.,.,.,.,.>.>.>.>.>.>.,.>.i.F+", -",.,.,.>.,.,.,.].,.,.,.~.{.{.,.,.,.,.,.>.>.>.>.,.,.,.~.~.~.,.,.>.,.>.,.>.,.>.>.,.,.,.,.>.=.~.~.{.~.{.,.,.>.,.,.~.~.{.,.,.{.{.{.{.,.>.,.,.{.{.{.,.,.~.i.F+", -",.,.,.,.].,.,.{.,.,.,.{.{.{.{.{.>.>.{.,.,.,.,.,.,.{.{.{.{.{.{.~.{.{.{.{.,.{.,.>.,.~.{.{.,.{.{.{.~.,.,.,.,.,.{.{.{.].~.{.{.].{.,.,.,.~.{.~.~.{.].{.{.i.F+", -"{.{.{.{.].{.,.,.,.>.{.,.{.{.{.{.{.{.{.,.,.,.,.{.,.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.,.{.{.~.].{.{.{.{.{.{.{.].{.{.{.{.{.,.].~.{.~.{.{.{.].~.{.i.F+", -"{.{.{.{.].{.].].{.,.,.,.{.{.{.{.{.{.,.,.{.{.,.,.,.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.].{.{.].{.{.{.{.].{.,.,.,.{.{.].{.{.{.{.{.].{.{.{.i.F+", -"]./.].{.].{.{.].,.,.{.,.(.(.].{.].{.].{.{.{.].].,.{.{.].,.{.]./.{./.].{./.{.{.].{.{.{.{.].].{.].{.].].{.(./.{.{.{.].,.[./././.{.].].].{.{.]./.{.{.].i.F+", -"{./.{.].(.(.{./.{.].]././.{.{./.{.].].,.].{.].].].].].].].(.].(.].{.{.].].]./.{.{./.{.{.].].].]./.{.].{.{.].{.].{.(.{./.{.{.].[.].{./.{.{././.{.].(.i.F+", -"].]./.].{.(.{.]./.].].].].].]./.].].].{.].].]./.].].].].].(.{.(.].].{./.{.{.{././.].{./.].].].].].]./.{.(.{.].].{./././.].].{.].{.(./././.{././.{.(.i.F+", -"/.{.].].].]./.].].].].].].].].].].].]./.].].].]././.[.].(.(.].].].].].]./.].]./.].].].]./.].].]./.]././.]./.]./.]./.].]././.].]./.{./.{./.{.].(.{.(.i.F+", -"/.].].].]././.].].].]./.].].].].].].].].].].].].].].[.(.].(.].].].]./.]./.].]./.].].].]././.]./.].].].]./.].]././.].]./.]./.]././.].].]./.].(.]./.(.i.F+", -"/.].].]./.[.].(.(.[.<.(.].]./.<.<.].[.<.[./././././.[.].(.}.(./.(.]./././.]./.].]./.].[.]./.<././.[.[.[././.]./././.]./.].}./.}./.].(././././.[.(.(.i.F+", -"(.(./.(.(.]././.].].[.<.<.<./.]./.[./././.<.<.}.}./.(.<.(.(.(.(./.(.[.[././.[.[.]././.[.(.[.].[./.[.(.(.(././.[.]./././././.}.]./.(./.(.}.].(.}./.}.i.F+", -"[.[.(.(.<.<.[.(.[.].[.<./.<.<././.}.|.|.}./.}./.<.[.<.(.]./.(.]./.<.<./.}.}.}.[././.[.[.<.<.<.<./.<.<././.<.<.<./.<.[.].}.].[.[./.[.<.<.<.[.[.<.<.}.i.F+", -"[.<.<./.(./.<.<.<.<.<.}.<./.}.}.}.<./.|.|.}./.}.<./.<.(.[./.<.<.<.<./.<.<.}.}.}.<.<.<.<./.}.}.}.<.<./.[.}.}.}.<.<.<./.<.<.<.[.<.<.<././.<.<.<.}.}.|.i.F+", -"}.}.<.<.<.<.<.<./.<./.|.}.}.}.}.}.|.|./.|./.<.<.}.<.[.[.<.<.<.}.}.|.}.<.<.}.}.}.}.<.<.}.<.}.}.|.}.}.<.<.}.}.}.}.}.}.}.}.}.}.}.}.}.}.|.}.}.<.<.}.|.|.i.F+", -"}.}.}.<.}.<.|.<.<.|.<.<.|.}.}.|.}.|.|.}.}.|.|.}.|.<.<.<.<.}.}.|.|.}.}.<.<.|.|.|.}.}.}.|.<.}.}.|.}.|.}.}.}.}.}.}.}.}.|.}.}.}.<.|.|.}.|.}.}.<.}.}.}.|.i.F+", -"<.<.|.|.|.|.}.|.<.<.|.<.}.}.|.|.|.|./.2.2./.<.|.<.|.|.|.<.}.|.}./.<.}.}.<.2.}.|./.|.}.|.<.|.|.}.|.|.|.|.|.<.}.<.|.<.|.|.<.}.|.}.|.|.}.2.<.<.<.}.2.}.i.F+", -"<.|.<.|.|.|.|.|.}.|.|.|.|.|.|.}.}.|.|.|.|.2.|.|.<.|.<.|.|.2.2.|.2.|.|.|.|.2.|.2.|.<.|.<.|.<.}.|.|.}.|.}.2.<.|.|.|.<.<.|.2.|.:.}.|.}.|.|.<.|.|.|.2.}.i.F+", -"|.|.|.<.<.|.<.|.|.|.|.|.|.|.2.|.|.2.|.}.2.|.2.|.|.<.|.|.|.2.}.|.|.<.|.|.|.2.}.2.|.|.|.|.|.|.2.|.|.|.|.2.|.|.|.|.<.<.|.|.2.}.|.|.|.|.}.2.|.<.|.|.2.:.i.F+", -"|.|.|.|.|.|.|.|.|.|.2.|.|.|.|.|.|.|.|.3.|.3.|.2.|.2.|.2.|.|.2.:.|.|.|.2.2.|.|.3.|.2.|.|.|.|.|.2.:.|.|.2.|.|.|.|.:.|.|.|.2.|.|.|.|.3.|.2.|.|.|.|.|.2.i.F+", -"2.|.:.|.2.|.:.|.|.1.|.2.1.2.2.3.2.|.|.|.2.|.|.2.|.|.2.|.|.|.2.3.:.|.|.2.|.|.|.|.2.2.:.|.|.|.2.1.:.|.2.1.|.2.:.|.1.1.|.|.2.|.3.:.|.:.2.2.|.|.|.|.|.2.i.F+", -"2.|.2.1.1.2.2.:.|.:.|.:.2.|.3.|.2.2.3.|.3.2.2.2.2.:.2.|.2.:.:.|.|.:.|.|.1.1.|.2.2.3.3.2.:.|.2.1.|.:.3.|.1.2.2.|.|.:.2.2.2.|.|.|.2.:.|.2.:.2.2.|.3.2.i.F+", -"3.2.3.2.1.2.2.|.2.1.2.2.2.1.2.2.2.|.2.2.2.|.2.1.2.:.|.1.1.2.1.1.2.|.1.|.1.|.2.1.:.3.|.3.3.2.2.2.:.|.2.2.1.1.|.2.1.|.1.:.|.|.|.2.1.1.2.2.2.:.:.3.:.1.i.F+", -"2.:.3.:.2.2.1.1.2.2.:.|.3.2.1.1.2.1.1.1.1.2.1.|.2.2.1.1.:.1.2.2.1.|.1.2.2.1.1.1.2.1.:.:.3.1.1.:.4.1.1.:.1.2.2.2.1.1.2.1.2.1.2.2.|.2.|.1.1.1.1.|.1.3.i.F+", -"1.1.2.2.2.2.:.:.2.2.2.1.1.1.:.2.2.1.:.1.:.2.1.1.1.1.:.2.2.1.:.2.1.2.1.1.2.1.3.:.1.:.2.1.3.3.3.1.2.:.2.2.1.2.2.1.|.2.:.2.1.:.2.2.2.2.1.:.1.|.1.1.1.1.i.F+", -":.1.2.1.1.1.1._._.1.1.:.1.1.2.1.2.3.3.3.1.2.1.1.1.1.2.2.1.2.2.2.1.1.1.2.2.:.1.2.1.2.1.1.1.:.3.1.1.1.2.2.1.1.2.1.1.1.2.2.2.1.1.1.2.1.2.2.2.1.1.1.1.6.i.F+", -"1.2.1.1.3.6.3.3.3.3.4.3.4.3.3.1.4.4.8.3.6.4.5.3.3.1.2.1.1.2.4.3.5.1.1.4.4.4.4.1.1.1._.3.1.1.6.3.3.1.1.1.1.1.1.1.5.4.3.6.4.4.3.4.3.4.4.3.3.4.3.4.6.3.i.F+", -"5.5.1.3.3.6.3.3.6.3.4.4.5.5.4.4.5.3.5.3.4.3.6.3.4.4.1.1.4.4.4.4.5.3.3.5.4.5.4.3.5.3.6.3.6.3.6.3.3.6.4.4.6._.1.3.5.4.4.6.3.4.3.3.3.3.6.3.4.5.3.4.3.6.i.F+", -"3.4.4.6.3.3.5.4.5.4.5.3.3.6.6.4.5.3.5.4.4.3.4.6.4.6.6.4.5.3.1.3.3.6.6.5.3.4.6.4.6.3.5.5.5.5.4.5.4.5.5.4.3.5.3.1.4.3.3.6.3.4.4.6.6.4.4.4.5.3.6.3.6.4.i.F+", -"4.4.3.6.4.4.4.3.5.4.4.4.4.4.3.6.3.3.5.4.3.6.3.6.4.3.6.4.4.4.4.4.4.4.3.6.4.4.4.3.6.4.4.3.5.4.3.5.4.4.3.5.4.4.4.3.5.4.4.4.4.4.4.4.3.6.4.4.4.3.5.4.4.3.i.F+", -"4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.5.5.5.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.i.F+", -"6.4.6.6.4.5.4.5.4.4.4.4.4.5.4.4.5.5.4.5.4.5.4.4.5.6.6.4.6.4.6.4.4.5.4.4.4.4.4.4.4.4.4.4.4.4.5.5.5.8.5.8.5.6.8.5.5.4.5.5.8.5.6.4.6.4.4.5.5.5.4.4.4.4.i.F+", -"4.4.7.4.5.4.4.7.8.7.4.5.4.4.5.8.6.4.6.6.6.4.5.4.6.8.7.8.4.8.4.6.4.6.5.6.8.5.6.5.4.7.6.4.7.5.7.5.8.8.5.5.8.5.5.5.8.5.8.5.5.8.7.5.4.8.7.5.5.4.4.5.4.4.i.F+", -"6.4.4.4.7.6.6.5.4.6.7.6.6.6.7.6.8.7.8.4.8.6.6.8.8.6.6.7.7.6.4.5.6.8.5.8.6.5.8.5.5.6.6.6.4.7.3.5.8.7.8.8.7.5.5.7.8.5.5.5.5.5.5.5.6.6.5.5.7.8.8.5.5.7.i.D+", -"8.5.6.5.4.6.6.7.7.6.6.6.8.4.7.6.8.6.7.6.6.6.4.7.4.6.6.6.6.6.7.4.8.4.5.8.5.7.4.8.4.4.8.5.4.4.7.5.5.8.8.7.5.8.7.5.5.5.7.8.6.8.8.4.8.8.6.5.5.5.8.8.8.5.i.D+", -"6.8.8.8.7.7.7.8.6.7.7.7.7.7.8.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.8.8.7.7.5.i.D+", -"7.7.C W.k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+6+k+6+k+6+k+k+k+o.} 8.7.7.i.D+", -"8.7.Z K.K.K.Q.Q.)+J.T.Q.K.}+Q.Q.W.T.}+J.T.W.J.}+W.W.Q.T.1+K.T.Q.K.)+Q.Q.Q.T.}+J.T.Q.K.1+Q.W.J.T.Q.K.)+Q.Q.Q.T.}+)+T.T.T.T.T.K.T.1+P.T.Q.}+1+| 9._.7.i.D+", -"8.8.Z K.7.q.v.l.l.y.y.k.v.l.l.u.k.y.u.q.v.l.q.y.q.g.q.k.l.u.v.D.k.p.q.g.l.v.k.E.x.q.l.k.u.p.g.q.x.B.C.k.q.l.v.k.l.q.g.q.w.l.q.l.l.k.y.k.]+,+~ 8.7.7.i.D+", -"7.7.Z K.A.N.`.`.p.B.P.Z.C.I..+@+R.`.=+E.`.E.I.x.I.u.@+D.w.E.$+@+R. +R.E. +G.E.`.S.x.L.A.x.N.~+*+$+w.@+z.l.N.E.A.P.G.*+P.=+Y.w.C.E.!+>+]+~+]+! 7.7.7.i.D+", -"7.7.Z K.$+S.@+#+v.'+X.$+L.I.Y.)+{+~+4+$+#+8+{+b+N.2+N.L.M.%+N. +X..+D.Z.D.)+J.Y.b+*+V.a+ +N.p.S.U.1+V.U.N.~+0+!+N.X.++X.V.#+Y.~+Y.)+>+G.>+~+! 7.7.7.i.D+", -"7.7.Z K.p.C.!+V.v+p+u+y+x+p+u+u+u+u+u+u+x+u+u+u+u+u+y+u+u+z+x+y+y+y+y+p+z+p+x+x+x+x+x+x+y+x+x+x+x+x+y+x+y+x+x+w+x+x+x+w+y+y+x+y+y+v+]+b+.+8+! 7.7.7.i.D+", -"7.7.Z K.B.'+P.R.j+/ ] , = % % % % % % % % = = ; - , ' / [ ] ] ] / / / [ 7 8 9 0 0 0 q O Q ^.b.a.N N W ^.^.^.^.!.!.a.a.a.a.b.a.j.a.s. +!+0+4+! 7.7.7.i.D+", -"7.7.Z K.w.$+P.P.f+- * . % % % % % % % % % % = = = - = * * , ) ] ] / ] / 7 / 6 0 O O O O Q P Q Q W ^.W ^.^.a.^.a.a.b.b.b.b.b.c.c.a.U.<+M.'+g+! 9.7.0.i.D+", -"7.9.Z K.v.=+*+b+6+] * c.x+v+v+v+v+D+v+B+v+v+v+E+D+w+i+; ' 5+E+A+v+v+v+v+p+p+y+w+w+v+w+v+y+i+8 U.r+w+w+x+w+x+v+x+x+x+x+y+x+x+x+U.P >+y..+]+]+! 7.7.7.i.D+", -"7.7.C K.q.!+!+{+j+/ = 6+H+k+,+9+<+<+8+8+8+0+8+<+9+E+C+- / H+q+^+8+7+7+>+r+H+5+[+7+f+7+^+w+D+/ i+H+g+7+d+f+f+7+f+f+f+f+f+f+6+g+!.W >+*+`.{+W.! 9.7.9.i.D+", -"7.7.Z K.y.D.0+P.j+) & ^+x+; # @ @ @ @ + + . & . + U.G+; ] H+f.& - , , * t.E+q - 7 7 / ' j+C+] i+H+9 7 7 7 8 9 9 9 9 6 6 6 6 0 N Q H.3+.+-+0+! 0.9.0.i.D+", -"9.9.Z K.p.z.M.B.q+f.P j+y+- ' O 0 O 0 O , . * - Q m+G+, ] H+n.; / / 7 ' ^+D+^.] P P Q 6 i+D+] j+H+O ^.t.n.t.t.n.t.t.t.t.t.t.H.t.m.<+)+C.3+9+! 0.7.9.i.D+", -"9.0.Z K.I.4+Z.~+H+H+H+H+r+- q+H+H+H+H+H+p+j.= & H+H+r+; / H+t.; / 7 8 ) <+H+!.] O O O 8 i+C+] j+H+0 t.H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+7+]+d+'+! 0.0.9.i.D+", -"9.0.Z K.C.Y.'+#+5+b.0 6+v+' , 0 0 9 9 P q+H+q+b., , ) ; 9 H+t.; / / 7 / 9 <.8 6 P P P 8 i+v+] j+H+O N b.b.c.b.c.b.b.c.c.c.c.c.c.!.U.{+'+>+b+! 0.7.0.i.D+", -"9.0.Z K.S.Y.~+ +l+6 ' >+D+7 * = * * * & & b.w+H+5+9 = = 8 H+t., 8 8 8 9 7 / 6 O P Q O 8 i+v+] 6+H+9 0 6 6 0 6 0 6 O O O O O O W P H.=+]+G.3+! 7.0.0.i.D+", -"0.0.Z K.y.N.$+@+i+^.8 f+C+0 - ' ' ' , , - & = u.r+H+5+9 / H+t., / 8 8 9 6 0 0 0 O O O 8 m+D+/ j+H+V.t.s.H.s.H.H.s.V.V.V.V.V.U.j.P s.-+I.~+8+! 0.0.0.i.D+", -"0.0.Z K.q.V.p.{+m+a.6 <+H+O , ) ' ' ' ' ' ' , & , A.H+m./ H+s., 7 8 9 6 0 O 0 0 O Q Q 8 5+H+] 7+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+m.8 s.|+)+&+9+! 0.0.0.i.F+", -"0.0.Z R.B.`.M.G.m+a.a.0 !.8 / / ] ' ) ) ] ' ] ] - = 9 ] ) N 9 / 7 8 9 9 0 0 O P Q Q Q P ^.!.8 Q b.b.a.b.b.b.c.b.c.b.).c.c.c.j.q Q s.L.a+X.0+! 0.0.0.h.D+", -"0.0.Z K.q.S.4+.+n+a.b.Q 6 6 7 ] ' ' ' ' ' ] ' ' ' ' - ' ' ' ' / / 7 7 7 9 9 7 8 6 6 O P 0 6 O 0 6 9 0 6 O O 0 0 0 O O O O P Q a.N H.1+N.9+d+! 0.0.0.i.F+", -"0.0.Z R.B.C.4+V.m+a.a.t.j.W f.f.a.c.b.] 8 ) 6 !.!.N c.a.Q 6 f.n.O 9 n.j.P 7 f.m.b.b.n.f.O f.n.j.m.n.W a.W j.H.H.f.m.t.n.c.m.H.t.P H.N.N.~+~+~ 0.0.0.h.D+", -"0.d.Z K.l.Z.)+E.m+^.j.x+m+l+U.f+6+w+m+c.U.a.7+r+y+v+r+f+j+7+^+<+6 m.p+r+f+c.D+U.m+r+7+f+N 7+w+p+s.p+s.U.H.b+<+7+i+i+h+w+6+5+r+r+P H.$+#+[+,+! 0.0.0.i.D+", -"0.0.Z Q.Z.E.!+{+i+N a.t.b.f.0 O O j.^.j.f.j.O N a.b.a.^.7 N / / ' 0 O O j.f.f.f.c.c.n.f.6 b.n.m.m.n.t.n.s.m.Q W c.t.t.j.b.t.t.H.0 t.4+L.'+0+! d.0.0.i.D+", -"0.0.Z Q.M.R.$+U.q+j.j.c.b.^.a.W P q 0 0 6 0 8 6 9 9 0 q 0 0 O P Q P q 0 O N O N P P ^.^.^.^.N Q a.N ^.^.a.a.a.a.^.^.a.^.^.^.a.a.W V.1+-+2+9+~ d.d.0.i.F+", -"0.0.Z Q.l.@+>+@+w+x+x+x+x+x+w+x+x+y+y+x+y+x+x+x+x+y+p+x+x+x+w+y+x+x+x+w+z+x+x+p+x+w+x+y+x+x+y+x+y+x+x+x+x+x+x+x+x+y+x+x+w+y+y+x+x+w+3+R.,+#+! d.d.0.h.D+", -"0.0.Z Q.C.P.~+-+ +.+G.%+]+u.@+-+]+Y.Y.#+ +4+R. +R..+O.M.=+$+A. +~+@+P.O.z.-+N.=+3+X.2+&+E.*+'+ +R.4+x. +~+ +-+#+4+-+ + +~+-+b+$+N.1+y..+%+,+~ d.d.0.i.F+", -"0.d.` Q.v.R.@+2+@+*+9+*+ + + +'+{+@+)+]+a+@+y.@+++'+E.D.-+-+&+!+ +X.'+2+Z.X. +#+{+~+X.@+,+G.&+-+E.E.9+*+!+.+E.N.@+ +d+u.>+)+O.L.8+P. +W.*+)+! d.d.0.h.D+", -"0.d.Z Q.z. +Q.,+y.9+8+++8+,+++F.Q.Q.9+W. +9+Q.++A.&+++>+Q.++[+9+9+,+^+{+9+++~+>+,+,+,+9+~+F.,+,+F.{+++*+++~+9+++9+{+]+*+{+,+{+>+W.f+W.~+c+[+! 0.0.0.i.F+", -"0.0.R P.T.T.h+h+e+k+k+h+h+9+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+h+e+e+e+h+e+h+e+k+h+9+k+e+9+h+k+q+! 0.0.0.h.D+", -"0.0.Z Q.h+s+y+B+s+B+y+y+y+x+x+y+y+y+y+y+y+B+y+y+x+x+y+y+y+x+x+B+y+y+x+x+y+y+y+x+x+B+y+y+y+y+x+x+x+y+y+x+y+y+y+y+x+x+B+y+x+B+x+x+y+y+y+y+y+y+! 0.0.0.i.F+", -"0.0.^ ~ ! > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ! 0.0.0.h.D+", -"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.i.F+", -"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.h.C+", -"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.h.H+", -"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.k.H+", -"o.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.u.H+", -"k+l+n+n+n+n+n+n+l+n+n+l+n+n+n+n+n+n+l+n+n+l+n+n+n+n+n+n+l+n+n+l+l+l+l+l+l+l+l+l+l+l+l+l+n+n+n+n+n+n+l+n+n+l+n+n+l+n+n+l+n+n+n+n+l+n+n+l+n+n+n+n+n+l+n+n+"}; +"% c #E0E0E3", +"& c #B9B9BF", +"* c #92929B", +"= c #C4C4C8", +"- c #CFCFD3", +"; c #F3F3F4", +"> c #5D5D6A", +", c #5E5E6A", +"' c #686874", +") c #F5F5F5", +"! c #6A6A76", +"~ c #EDEDEE", +"{ c #FCFCFC", +"] c #909098", +"^ c #909099", +"/ c #CCCCD0", +"( c #96969E", +"_ c #CECED2", +": c #CBCBCF", +"< c #8D8D96", +"[ c #FDFDFD", +"} c #8C8C95", +"| c #6B6B76", +"1 c #5C5C69", +"2 c #F2F2F3", +"3 c #F1F1F2", +"4 c #F0F0F1", +"5 c #AFAFB5", +"6 c #333339", +"7 c #34343A", +"8 c #1C1F22", +"9 c #1A1E20", +"0 c #8B8B94", +"a c #DEDEE1", +"b c #EAEAEC", +"c c #DFDFE2", +"d c #8A8A94", +"e c #A8A8AF", +"f c #A2A2A9", +"g c #B3B3B9", +"h c #74747F", +"i c #E5E5E7", +"j c #888891", +"k c #5A5A67", +"l c #878790", +"m c #E4E4E6", +"n c #72727D", +"o c #EDEDEF", +"p c #ECECEE", +"q c #5F5F6B", +"r c #AAAAB0", +"s c #9D9DA5", +"t c #9C9CA4", +"u c #C9C9CD", +"v c #FEFEFE", +"w c #92929A", +"x c #6C6C77", +"y c #F5F5F6", +"z c #AAAAB1", +"A c #878791", +"B c #86868F", +"C c #E0E0E2", +"D c #EBEBEC", +"E c #FAFAFA", +"F c #CDCDD1", +"G c #CECED1", +"H c #D8D8DB", +"I c #E1E1E3", +"J c #666672", +"K c #676773", +"L c #9F9FA7", +"M c #A0A0A7", +"N c #7C7C86", +"O c #63636F", +"P c #E6E6E8", +"Q c #70707C", +"R c #6D6D78", +"S c #DBDBDD", +"T c #DBDBDE", +"U c #B0B0B6", +"V c #C0C0C5", +"W c #D5D5D9", +"X c #D5D5D8", +"Y c #E2E2E5", +"Z c #D6D6D9", +"` c #9999A1", +" . c #9898A0", +".. c #E9E9EB", +"+. c #62626E", +"@. c #A7A7AE", +"#. c #61616E", +"$. c #C7C7CB", +"%. c #F9F9FA", +"&. c #C3C3C8", +"*. c #C2C2C7", +"=. c #EEEEEF", +"-. c #636370", +";. c #ACACB3", +">. c #C6C6CA", +",. c #AEAEB4", +"'. c #BEBEC3", +"). c #DDDDE0", +"!. c #646470", +"~. c #7D7D87", +"{. c #5C5C68", +"]. c #D2D2D6", +"^. c #A9A9B0", +"/. c #8E8E97", +"(. c #82828C", +"_. c #C1C1C6", +":. c #B2B2B8", +"<. c #656571", +"[. c #84848E", +"}. c #BCBCC1", +"|. c #5B5B68", +"1. c #70707B", +"2. c #696975", +"3. c #E2E2E4", +"4. c #BDBDC2", +"5. c #C8C8CD", +"6. c #6F6F7A", +"7. c #696974", +"8. c #EBEBED", +"9. c #7D7D88", +"0. c #B4B4BA", +"a. c #777782", +"b. c #757580", +"c. c #9797A0", +"d. c #ABABB2", +"e. c #AEAEB5", +"f. c #BFBFC4", +"g. c #8A8A93", +"h. c #A3A3AA", +"i. c #E7E7E9", +"j. c #B7B7BC", +"k. c #B6B6BC", +"l. c #9D9DA4", +"m. c #D7D7DA", +"n. c #94949D", +"o. c #EFEFF0", +"p. c #898992", +"q. c #A1A1A8", +"r. c #B7B7BD", +"s. c #ADADB3", +" ", +" ", +" ", +" ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ $ $ $ $ $ $ $ % $ $ & & $ $ # + ", +" + @ * * * = $ - $ % $ $ ; > , ; $ $ # + ", +" + @ ' ; ) ! $ % $ ~ { ] ^ { ~ $ # + ", +" + @ / $ ( $ % $ % / _ - : % $ # + ", +" + @ ( $ / $ % $ % < [ [ } % $ # + ", +" + @ | ) ; ' $ % $ % 1 2 3 1 % $ # + ", +" + @ - $ = * * * $ 4 5 5 5 $ % } } % $ # + ", +" + @ $ $ $ $ $ $ $ $ $ $ $ $ % % $ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ 6 7 7 7 7 7 7 7 7 7 7 7 7 # + ", +" + @ 6 8 8 8 8 8 8 8 8 8 8 8 7 # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 0 a b c d e % ] f a g # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 h i j k l m n o , p q # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 r s t e u v % % v % w # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 c x x a y y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 c x x a y y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 z s t e y y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 h i A k B m n y y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 } C D C } y y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 # + ", +" + @ 6 7 7 7 7 7 7 7 7 7 7 7 7 # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ 6 7 7 7 7 7 7 7 7 7 7 7 7 # + ", +" + @ 6 8 8 8 8 8 8 8 8 8 8 8 7 # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 E F G E H # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y I J K I y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y e L M e y y N C > O P Q # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y R S T x y y U U V M # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y W } X y y > Y Z k # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y ` ; . y y | ..C > # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y +.@.#. y y - ] U U # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y y y ` $. > C N # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 # + ", +" + @ 6 7 7 7 7 7 7 7 7 7 7 7 7 # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ 6 7 7 7 7 7 7 7 7 7 7 7 7 # + ", +" + @ 6 8 8 8 8 8 8 8 8 8 8 8 7 # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 %.% % &.h y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y ( *. y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y O =. -.;.S >.n y ,.P '.' y ( ).C *.n !.;.c % ~.-.;.S >.n # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y {.f ]. ^./. (._. E ^.k ^.:. y <. [.}. ^.:.> |.+.^./. (._. # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 %.% 2 E 1. ).% % % m E 2. 2.3. y h 4.Y % o c x ).% % % m # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y > 4.5. % 6. E 7. 7.3. y G ^ 1 2.%. a x % 6. # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y , 8.9. e 0., k a. E @.k @.:. y % b.1 :.E e :.> |.+.e 0., k a. # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y c.G -.d.c m ,. y e.P f.7. y g.a I h.y -.;.I C N -.d.c m ,. # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y # + ", +" + @ 6 7 7 7 7 7 7 7 7 7 7 7 7 # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ 6 7 7 7 7 7 7 7 7 7 7 7 7 # + ", +" + @ 6 8 8 8 8 8 8 8 8 8 8 8 7 # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y y %.C i.T ^ f a g # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y y y 1 0 Y /. p q # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y 7.j.3.k.' ( ).C *.n ' 4.P ;.y y l.m. -.;.S >.n u v % n. # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y :.^.k ^.U <. [.}. g e |.d.E y x o. ^./. (._. y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y 3.2. 2.I h 4.Y % o Y 2. ! E y R =. ).% % % m y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y 3.7. 7.I G ^ 1 2.%. Y 7. ! E y l.m. % 6. y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y :.@.k @.U % b.1 :.E g @.k r E y {.p.I } e 0., k a. y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 E o o o q. 7.r.3.j.' g.a I h.y ' 4.P s.y %.% i.T ] -.d.c m ,. y H # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 # + ", +" + @ 6 7 7 7 7 7 7 7 7 7 7 7 7 # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/hdspmixer/pixmaps/empty_linux.xpm b/hdspmixer/pixmaps/empty_linux.xpm index 10088d6..d29cf5b 100644 --- a/hdspmixer/pixmaps/empty_linux.xpm +++ b/hdspmixer/pixmaps/empty_linux.xpm @@ -1,1791 +1,278 @@ /* XPM */ char const * empty_linux_xpm[] = { -"76 253 1535 2", -" c None", -". c #404840", -"+ c #40483F", -"@ c #202720", -"# c #70786F", -"$ c #707060", -"% c #2F2F2F", -"& c #A0A0A0", -"* c #6F6F6F", -"= c #060606", -"- c #A0A09F", -"; c #A09FA0", -"> c #9FA0A0", -", c #9F9FA0", -"' c #9FA09F", -") c #A09F9F", -"! c #9F9F9F", -"~ c #9F9F9E", -"{ c #9EA09F", -"] c #9E9F9F", -"^ c #9E9F9E", -"/ c #9F9E9E", -"( c #9F9E9F", -"_ c #9E9E9E", -": c #9E9E9F", -"< c #9D9E9D", -"[ c #9E9E9D", -"} c #9D9E9E", -"| c #9E9F9D", -"1 c #9D9F9E", -"2 c #9D9F9D", -"3 c #9E9D9E", -"4 c #9E9D9D", -"5 c #9D9D9D", -"6 c #9D9D9E", -"7 c #9D9E9C", -"8 c #9C9D9D", -"9 c #9C9E9D", -"0 c #9D9D9C", -"a c #9C9E9C", -"b c #9C9D9C", -"c c #9D9C9C", -"d c #9C9C9C", -"e c #9C9C9D", -"f c #9B9C9C", -"g c #9B9D9C", -"h c #9C9D9B", -"i c #9C9C9B", -"j c #9B9D9B", -"k c #9B9C9B", -"l c #9B9B9B", -"m c #9B9B9C", -"n c #9C9B9B", -"o c #9A9C9B", -"p c #9B9C9A", -"q c #9B9B9A", -"r c #9A9C9A", -"s c #9A9B9A", -"t c #9A9B9B", -"u c #9A9A9A", -"v c #999B9A", -"w c #999B99", -"x c #999A99", -"y c #9A9B99", -"z c #999A9A", -"A c #9A9A99", -"B c #989A99", -"C c #999A98", -"D c #989A98", -"E c #999999", -"F c #999998", -"G c #989998", -"H c #989999", -"I c #989997", -"J c #989A97", -"K c #979998", -"L c #979A98", -"M c #979A97", -"N c #979997", -"O c #979897", -"P c #989898", -"Q c #989897", -"R c #979898", -"S c #969897", -"T c #969997", -"U c #979896", -"V c #969896", -"W c #979996", -"X c #969996", -"Y c #969796", -"Z c #969797", -"` c #979797", -" . c #979796", -".. c #969795", -"+. c #969895", -"@. c #959895", -"#. c #959796", -"$. c #959896", -"%. c #959795", -"&. c #959695", -"*. c #959696", -"=. c #959794", -"-. c #959694", -";. c #949695", -">. c #949795", -",. c #949794", -"'. c #949694", -"). c #949693", -"!. c #939693", -"~. c #939694", -"{. c #949594", -"]. c #949593", -"^. c #939593", -"/. c #939594", -"(. c #929593", -"_. c #939592", -":. c #939493", -"<. c #929592", -"[. c #929493", -"}. c #929492", -"|. c #939492", -"1. c #929491", -"2. c #919592", -"3. c #919492", -"4. c #919491", -"5. c #919591", -"6. c #929591", -"7. c #919391", -"8. c #929392", -"9. c #929391", -"0. c #919392", -"a. c #909391", -"b. c #919490", -"c. c #919390", -"d. c #909390", -"e. c #909490", -"f. c #909491", -"g. c #909291", -"h. c #909290", -"i. c #919290", -"j. c #8F9290", -"k. c #8F9390", -"l. c #90938F", -"m. c #90928F", -"n. c #8F938F", -"o. c #8F928F", -"p. c #90918F", -"q. c #8F9190", -"r. c #8F918F", -"s. c #8F928E", -"t. c #8E928F", -"u. c #8E918F", -"v. c #8F918E", -"w. c #8E928E", -"x. c #8E918E", -"y. c #8E908E", -"z. c #8E918D", -"A. c #8D918E", -"B. c #8D908E", -"C. c #8E908D", -"D. c #8D918D", -"E. c #8D908D", -"F. c #8C908D", -"G. c #8D908C", -"H. c #8C908C", -"I. c #8C8F8C", -"J. c #8D8F8C", -"K. c #8C8F8D", -"L. c #8D8F8D", -"M. c #8B8F8C", -"N. c #8C908B", -"O. c #8C8F8B", -"P. c #8B8F8B", -"Q. c #8B8E8C", -"R. c #8C8E8B", -"S. c #8B8E8B", -"T. c #8C8E8C", -"U. c #8B8E8A", -"V. c #8A8F8B", -"W. c #8A8E8B", -"X. c #8B8F8A", -"Y. c #8A8E8A", -"Z. c #8A8F8A", -"`. c #8A8D8A", -" + c #8A8D8B", -".+ c #8B8D8A", -"++ c #898E8A", -"@+ c #8A8E89", -"#+ c #898E89", -"$+ c #8A8D89", -"%+ c #898D89", -"&+ c #898D8A", -"*+ c #898C89", -"=+ c #8A8C89", -"-+ c #898C8A", -";+ c #898D88", -">+ c #898C88", -",+ c #888D89", -"'+ c #888D88", -")+ c #888C89", -"!+ c #888C88", -"~+ c #878C88", -"{+ c #6C6E6C", -"]+ c #3A3A3A", -"^+ c #303027", -"/+ c #303022", -"(+ c #313023", -"_+ c #303023", -":+ c #303024", -"<+ c #2F3024", -"[+ c #2F2F25", -"}+ c #2E2F25", -"|+ c #2E2F26", -"1+ c #2E2E26", -"2+ c #2E2E27", -"3+ c #2D2E27", -"4+ c #2D2E28", -"5+ c #2D2D28", -"6+ c #2C2D28", -"7+ c #2C2D29", -"8+ c #2C2C29", -"9+ c #2C2C2A", -"0+ c #2B2C2A", -"a+ c #2B2C2B", -"b+ c #2A2C2B", -"c+ c #2A2C2C", -"d+ c #2A2B2C", -"e+ c #292B2C", -"f+ c #292A2D", -"g+ c #2C2C2E", -"h+ c #5B5C5B", -"i+ c #2F2E21", -"j+ c #6E6D47", -"k+ c #A19F69", -"l+ c #A9A971", -"m+ c #A9A972", -"n+ c #A9A873", -"o+ c #A8A774", -"p+ c #A7A775", -"q+ c #A7A676", -"r+ c #A6A677", -"s+ c #A5A578", -"t+ c #A4A578", -"u+ c #A4A47A", -"v+ c #A3A47B", -"w+ c #A2A37C", -"x+ c #A2A27D", -"y+ c #A1A27E", -"z+ c #A0A17F", -"A+ c #9FA181", -"B+ c #9FA081", -"C+ c #9E9F82", -"D+ c #9D9F83", -"E+ c #9C9E84", -"F+ c #9C9E85", -"G+ c #9B9D86", -"H+ c #9A9D87", -"I+ c #9A9C87", -"J+ c #999C89", -"K+ c #989B8A", -"L+ c #989A8B", -"M+ c #979A8C", -"N+ c #969A8D", -"O+ c #96998E", -"P+ c #95988E", -"Q+ c #95988F", -"R+ c #949790", -"S+ c #939692", -"T+ c #929693", -"U+ c #919694", -"V+ c #909495", -"W+ c #909496", -"X+ c #8F9497", -"Y+ c #8E9398", -"Z+ c #8E9399", -"`+ c #8D929A", -" @ c #8C929A", -".@ c #8C919C", -"+@ c #838894", -"@@ c #595D65", -"#@ c #27282B", -"$@ c #878C87", -"%@ c #888B88", -"&@ c #888C87", -"*@ c #888B87", -"=@ c #2E2E29", -"-@ c #717047", -";@ c #ABAA6E", -">@ c #AAA86E", -",@ c #7F7E54", -"'@ c #565639", -")@ c #42422C", -"!@ c #41402C", -"~@ c #525239", -"{@ c #787854", -"]@ c #A3A374", -"^@ c #A6A576", -"/@ c #A4A478", -"(@ c #A4A479", -"_@ c #A3A37A", -":@ c #A2A37B", -"<@ c #555641", -"[@ c #404031", -"}@ c #8D8E6F", -"|@ c #60614D", -"1@ c #8A8C70", -"2@ c #9D9E83", -"3@ c #9D9E84", -"4@ c #9C9D84", -"5@ c #999C87", -"6@ c #999B89", -"7@ c #989B89", -"8@ c #989B8B", -"9@ c #96998C", -"0@ c #95998D", -"a@ c #95998E", -"b@ c #94978F", -"c@ c #949890", -"d@ c #939791", -"e@ c #939691", -"f@ c #919593", -"g@ c #909594", -"h@ c #909396", -"i@ c #8F9397", -"j@ c #8D9398", -"k@ c #8E929A", -"l@ c #8B919B", -"m@ c #8B909D", -"n@ c #8A909D", -"o@ c #5B5E68", -"p@ c #2B2C2D", -"q@ c #2B2B22", -"r@ c #95935D", -"s@ c #ACAB6D", -"t@ c #706F47", -"u@ c #22221B", -"v@ c #34363B", -"w@ c #5A5D64", -"x@ c #70747C", -"y@ c #737780", -"z@ c #64676E", -"A@ c #404248", -"B@ c #20211D", -"C@ c #626145", -"D@ c #A3A376", -"E@ c #A5A579", -"F@ c #A4A37A", -"G@ c #68684F", -"H@ c #1E1E18", -"I@ c #898A6C", -"J@ c #999979", -"K@ c #3C3D31", -"L@ c #6F715A", -"M@ c #5A5B4A", -"N@ c #686956", -"O@ c #595A4B", -"P@ c #979981", -"Q@ c #5B5D4E", -"R@ c #858774", -"S@ c #6C6E5F", -"T@ c #727465", -"U@ c #6B6D61", -"V@ c #5B5C52", -"W@ c #6F7266", -"X@ c #565850", -"Y@ c #93968A", -"Z@ c #93978F", -"`@ c #929692", -" # c #8E9298", -".# c #8D9299", -"+# c #8C919A", -"@# c #8C919B", -"## c #8A8F9E", -"$# c #8A909E", -"%# c #777B88", -"&# c #262628", -"*# c #878B88", -"=# c #878B87", -"-# c #868B87", -";# c #96945C", -"># c #AAA96A", -",# c #414129", -"'# c #333438", -")# c #7A7E85", -"!# c #737779", -"~# c #92979D", -"{# c #979CA4", -"]# c #9499A1", -"^# c #777A7E", -"/# c #8C909A", -"(# c #484A50", -"_# c #313124", -":# c #9B9B71", -"<# c #A3A47A", -"[# c #77775B", -"}# c #25261D", -"|# c #9B9C79", -"1# c #9A9B7A", -"2# c #666753", -"3# c #1D1D17", -"4# c #35352C", -"5# c #2C2D24", -"6# c #4E4F42", -"7# c #32322A", -"8# c #56574B", -"9# c #5B5D50", -"0# c #67695C", -"a# c #0F100E", -"b# c #262723", -"c# c #85887D", -"d# c #95988D", -"e# c #94988F", -"f# c #939790", -"g# c #929691", -"h# c #919594", -"i# c #8F9396", -"j# c #8D919A", -"k# c #8B909C", -"l# c #777C88", -"m# c #2B2B2B", -"n# c #878B86", -"o# c #727145", -"p# c #AEAC6A", -"q# c #45484E", -"r# c #8B8F96", -"s# c #898D8E", -"t# c #A9A024", -"u# c #646769", -"v# c #979CA3", -"w# c #808387", -"x# c #A8A023", -"y# c #707478", -"z# c #959AA4", -"A# c #656870", -"B# c #2C2C21", -"C# c #9E9E74", -"D# c #A3A479", -"E# c #A2A37A", -"F# c #76775A", -"G# c #8E8E6E", -"H# c #7B7C61", -"I# c #36372B", -"J# c #6D6E58", -"K# c #71725E", -"L# c #656655", -"M# c #3C3D33", -"N# c #4B4C3F", -"O# c #535548", -"P# c #747565", -"Q# c #2C2D27", -"R# c #959886", -"S# c #33332E", -"T# c #0A0A09", -"U# c #76796E", -"V# c #94988E", -"W# c #8F9496", -"X# c #8D9397", -"Y# c #8D9199", -"Z# c #8B919C", -"`# c #8A909C", -" $ c #8A8F9D", -".$ c #898F9E", -"+$ c #5B5F68", -"@$ c #595B59", -"#$ c #878A87", -"$$ c #2F2E1F", -"%$ c #AEAC69", -"&$ c #333437", -"*$ c #8B8F95", -"=$ c #989DA2", -"-$ c #7B794B", -";$ c #9A9329", -">$ c #7A7E82", -",$ c #979DA4", -"'$ c #92969D", -")$ c #969033", -"!$ c #7A783C", -"~$ c #9499A2", -"{$ c #959BA5", -"]$ c #51535A", -"^$ c #4C4C38", -"/$ c #A3A379", -"($ c #3E3E30", -"_$ c #0A0A08", -":$ c #1F2018", -"<$ c #1C1D16", -"[$ c #10110D", -"}$ c #38392C", -"|$ c #0F0F0C", -"1$ c #4C4D3F", -"2$ c #35352D", -"3$ c #1A1A16", -"4$ c #646555", -"5$ c #181916", -"6$ c #262721", -"7$ c #0E0E0D", -"8$ c #3C3D35", -"9$ c #30302C", -"0$ c #151513", -"a$ c #868A7E", -"b$ c #929690", -"c$ c #8F9494", -"d$ c #8F9495", -"e$ c #8E9397", -"f$ c #8D9298", -"g$ c #8C9199", -"h$ c #898F9D", -"i$ c #868B86", -"j$ c #868A86", -"k$ c #868A87", -"l$ c #6C6D6C", -"m$ c #706F43", -"n$ c #ADAB68", -"o$ c #22221A", -"p$ c #7A7E84", -"q$ c #848788", -"r$ c #7C7B4A", -"s$ c #B9AF27", -"t$ c #4D4D3B", -"u$ c #908A26", -"v$ c #707373", -"w$ c #7F8386", -"x$ c #8C8625", -"y$ c #5E5F4F", -"z$ c #B5AC28", -"A$ c #7E7B42", -"B$ c #7D8186", -"C$ c #9398A2", -"D$ c #1F2020", -"E$ c #8D8D68", -"F$ c #8F906D", -"G$ c #7B7C5F", -"H$ c #7B7B5F", -"I$ c #7D7E62", -"J$ c #7F7F64", -"K$ c #7D7D64", -"L$ c #7D7E65", -"M$ c #7E8068", -"N$ c #878970", -"O$ c #777964", -"P$ c #92947C", -"Q$ c #7A7D6A", -"R$ c #787968", -"S$ c #787A6A", -"T$ c #7C7F6F", -"U$ c #747769", -"V$ c #828576", -"W$ c #73766A", -"X$ c #888B7F", -"Y$ c #95988C", -"Z$ c #94988D", -"`$ c #94978E", -" % c #939690", -".% c #929791", -"+% c #909593", -"@% c #909494", -"#% c #8F9395", -"$% c #8E9396", -"%% c #8E9297", -"&% c #8C9198", -"*% c #8B909B", -"=% c #8A909B", -"-% c #595D66", -";% c #6A6C6A", -">% c #878A86", -",% c #393A39", -"'% c #A4A261", -")% c #848350", -"!% c #333538", -"~% c #797C7D", -"{% c #A19922", -"]% c #968F2A", -"^% c #4C4D3C", -"/% c #ADA429", -"(% c #706D31", -"_% c #7D8187", -":% c #959AA1", -"<% c #767445", -"[% c #B3AA29", -"}% c #938C2F", -"|% c #AFA625", -"1% c #63676A", -"2% c #53565D", -"3% c #52523D", -"4% c #A2A379", -"5% c #868666", -"6% c #61624B", -"7% c #919372", -"8% c #9FA07E", -"9% c #9E9F7F", -"0% c #9EA080", -"a% c #9D9F81", -"b% c #9C9E82", -"c% c #9C9D83", -"d% c #9B9D84", -"e% c #9B9C85", -"f% c #616354", -"g% c #848674", -"h% c #76786A", -"i% c #888B7B", -"j% c #979A8A", -"k% c #96998A", -"l% c #96988B", -"m% c #95998C", -"n% c #93968F", -"o% c #92978F", -"p% c #909493", -"q% c #8F9394", -"r% c #8E9296", -"s% c #8D9297", -"t% c #8B919A", -"u% c #8A8F9C", -"v% c #818694", -"w% c #383938", -"x% c #868A85", -"y% c #858A86", -"z% c #858A85", -"A% c #303026", -"B% c #AFAD67", -"C% c #5B5A36", -"D% c #585B60", -"E% c #969B9E", -"F% c #6D7072", -"G% c #808488", -"H% c #888326", -"I% c #706C32", -"J% c #7C8086", -"K% c #878C92", -"L% c #858A90", -"M% c #9499A0", -"N% c #8F8923", -"O% c #7F8389", -"P% c #6E7277", -"Q% c #81858F", -"R% c #7B7F88", -"S% c #29291E", -"T% c #A0A076", -"U% c #A1A37A", -"V% c #7E7F60", -"W% c #050504", -"X% c #3C3D2F", -"Y% c #9E9F7D", -"Z% c #898A6E", -"`% c #87896D", -" & c #929377", -".& c #7D7F67", -"+& c #9B9D82", -"@& c #8F9179", -"#& c #757665", -"$& c #33332B", -"%& c #494A40", -"&& c #4D4E44", -"*& c #636559", -"=& c #949686", -"-& c #6C6F63", -";& c #7F8175", -">& c #95988B", -",& c #909492", -"'& c #8E9395", -")& c #8D9296", -"!& c #8B9199", -"~& c #8B909A", -"{& c #898F9C", -"]& c #2A2C2D", -"^& c #30301F", -"/& c #47462A", -"(& c #6E7176", -"_& c #989DA1", -":& c #989CA2", -"<& c #797D7E", -"[& c #7F8388", -"}& c #8C9196", -"|& c #080808", -"1& c #030304", -"2& c #7B7F86", -"3& c #6B6E71", -"4& c #8D929B", -"5& c #969BA5", -"6& c #8D939D", -"7& c #181812", -"8& c #9A9A72", -"9& c #5F5F49", -"0& c #39392C", -"a& c #141410", -"b& c #8E9071", -"c& c #5C5D4A", -"d& c #25251D", -"e& c #7A7C64", -"f& c #0E0F0C", -"g& c #777963", -"h& c #2E2F27", -"i& c #10100D", -"j& c #1B1C19", -"k& c #5B5D52", -"l& c #292A25", -"m& c #282925", -"n& c #191917", -"o& c #66685F", -"p& c #94988C", -"q& c #93978E", -"r& c #92968F", -"s& c #919690", -"t& c #8D9197", -"u& c #8C9298", -"v& c #8A909A", -"w& c #8A8F9B", -"x& c #27292C", -"y& c #868986", -"z& c #B0AD67", -"A& c #48472A", -"B& c #707378", -"C& c #999DA1", -"D& c #7B7F7E", -"E& c #92979B", -"F& c #0A0B0A", -"G& c #040404", -"H& c #6C7179", -"I& c #767A7B", -"J& c #969BA4", -"K& c #8D929D", -"L& c #161610", -"M& c #979871", -"N& c #A1A179", -"O& c #1B1B14", -"P& c #1C1C16", -"Q& c #0D0D0A", -"R& c #555643", -"S& c #85866A", -"T& c #21211B", -"U& c #96987B", -"V& c #181814", -"W& c #4A4B3E", -"X& c #33342B", -"Y& c #93967E", -"Z& c #4C4E42", -"`& c #494B40", -" * c #42433A", -".* c #4D4E45", -"+* c #848779", -"@* c #717368", -"#* c #2A2B28", -"$* c #93968B", -"%* c #94978D", -"&* c #8D9295", -"** c #8C9197", -"=* c #8B9198", -"-* c #8B9099", -";* c #8A8F9A", -">* c #89909B", -",* c #898E9C", -"'* c #868985", -")* c #858985", -"!* c #848985", -"~* c #AFAD66", -"{* c #5C5C37", -"]* c #5E6165", -"^* c #969A9D", -"/* c #757978", -"(* c #939799", -"_* c #8A8529", -":* c #7F7B3A", -"<* c #91959A", -"[* c #858A91", -"}* c #747780", -"|* c #7C7A43", -"1* c #938B23", -"2* c #75797D", -"3* c #8F959D", -"4* c #7A7E86", -"5* c #212118", -"6* c #9B9C73", -"7* c #575841", -"8* c #78795C", -"9* c #494938", -"0* c #14140F", -"a* c #78795F", -"b* c #535444", -"c* c #070705", -"d* c #5B5C4B", -"e* c #161713", -"f* c #545548", -"g* c #151512", -"h* c #32322B", -"i* c #23241F", -"j* c #404139", -"k* c #22231F", -"l* c #474941", -"m* c #454640", -"n* c #93978D", -"o* c #93968E", -"p* c #91968F", -"q* c #909591", -"r* c #8F9492", -"s* c #8F9493", -"t* c #8E9394", -"u* c #8D9395", -"v* c #8A9099", -"w* c #898F9B", -"x* c #888F9C", -"y* c #2A2B2D", -"z* c #858A84", -"A* c #3B3C3A", -"B* c #A2A05E", -"C* c #86854F", -"D* c #393B3D", -"E* c #7E8281", -"F* c #A29922", -"G* c #A29A2C", -"H* c #60604C", -"I* c #A9A12C", -"J* c #807C39", -"K* c #94999F", -"L* c #B0A729", -"M* c #4C4C3A", -"N* c #9A922B", -"O* c #B0A625", -"P* c #626568", -"Q* c #51545A", -"R* c #3E3F2E", -"S* c #A0A177", -"T* c #727355", -"U* c #565641", -"V* c #77785C", -"W* c #77785E", -"X* c #76775F", -"Y* c #505141", -"Z* c #5E5F4E", -"`* c #6F705C", -" = c #80826B", -".= c #515244", -"+= c #646556", -"@= c #585A4D", -"#= c #56584C", -"$= c #5A5B50", -"%= c #878979", -"&= c #505148", -"*= c #56584F", -"== c #86897D", -"-= c #94978C", -";= c #93978C", -">= c #93968D", -",= c #92968E", -"'= c #92958F", -")= c #919590", -"!= c #8F9393", -"~= c #8D9294", -"{= c #888E9C", -"]= c #7F8692", -"^= c #3A3B3A", -"/= c #848A84", -"(= c #848984", -"_= c #858984", -":= c #6F706F", -"<= c #6C6C3F", -"[= c #ADAB66", -"}= c #24241B", -"|= c #898D91", -"1= c #7F8385", -"2= c #716F46", -"3= c #BBB128", -"4= c #5C5C48", -"5= c #898327", -"6= c #666969", -"7= c #808487", -"8= c #868025", -"9= c #4B4C3C", -"0= c #B8AF28", -"a= c #696738", -"b= c #6A6E74", -"c= c #868B94", -"d= c #1B1B1B", -"e= c #707051", -"f= c #A2A378", -"g= c #93946E", -"h= c #8F906C", -"i= c #90916E", -"j= c #9E9F7A", -"k= c #9FA07C", -"l= c #9EA07D", -"m= c #9E9F7E", -"n= c #9C9E7F", -"o= c #9C9E81", -"p= c #9A9C82", -"q= c #9A9C84", -"r= c #999B84", -"s= c #989B85", -"t= c #989A86", -"u= c #919482", -"v= c #878A7A", -"w= c #959889", -"x= c #95978B", -"y= c #92978D", -"z= c #909590", -"A= c #8E9393", -"B= c #8C9295", -"C= c #8A9098", -"D= c #898F9A", -"E= c #888F9B", -"F= c #565A62", -"G= c #6D6F6D", -"H= c #848884", -"I= c #818682", -"J= c #2D2C1F", -"K= c #AEAC66", -"L= c #757445", -"M= c #3B3D3F", -"N= c #979CA0", -"O= c #979BA0", -"P= c #76744C", -"Q= c #A0982A", -"R= c #828689", -"S= c #8F949A", -"T= c #8A8F94", -"U= c #958F2D", -"V= c #6D6B37", -"W= c #848891", -"X= c #959BA4", -"Y= c #4E5056", -"Z= c #2E2E21", -"`= c #98996E", -" - c #3C3C2C", -".- c #090A08", -"+- c #1A1B14", -"@- c #191913", -"#- c #848467", -"$- c #9C9D7C", -"%- c #9C9E7E", -"&- c #9B9E80", -"*- c #9B9D81", -"=- c #999C83", -"-- c #959883", -";- c #979A86", -">- c #747668", -",- c #0D0D0B", -"'- c #85887A", -")- c #94988A", -"!- c #929588", -"~- c #94968C", -"{- c #92958E", -"]- c #91958F", -"^- c #8F9491", -"/- c #8C9090", -"(- c #8B9097", -"_- c #8A8F99", -":- c #888D9B", -"<- c #262629", -"[- c #858884", -"}- c #606160", -"|- c #6C6B40", -"1- c #ADAB67", -"2- c #434328", -"3- c #56585B", -"4- c #979CA1", -"5- c #8A8E8F", -"6- c #A09722", -"7- c #646768", -"8- c #979CA2", -"9- c #9F9621", -"0- c #64676C", -"a- c #959AA3", -"b- c #64676D", -"c- c #171812", -"d- c #7C7D59", -"e- c #A2A377", -"f- c #737355", -"g- c #25241B", -"h- c #939570", -"i- c #64654D", -"j- c #2C2C22", -"k- c #5B5C47", -"l- c #191813", -"m- c #1E1E17", -"n- c #646552", -"o- c #525345", -"p- c #191A15", -"q- c #35362D", -"r- c #393A31", -"s- c #181815", -"t- c #272823", -"u- c #8A8D7B", -"v- c #161715", -"w- c #787A6E", -"x- c #252623", -"y- c #11120F", -"z- c #343631", -"A- c #494B46", -"B- c #191B19", -"C- c #1A1B19", -"D- c #1F201F", -"E- c #7A7E7A", -"F- c #323433", -"G- c #161817", -"H- c #282A2A", -"I- c #56595A", -"J- c #161617", -"K- c #262728", -"L- c #2D2F30", -"M- c #1C1C1E", -"N- c #292B2D", -"O- c #858B95", -"P- c #898E9B", -"Q- c #888E9B", -"R- c #555A61", -"S- c #5E605E", -"T- c #848883", -"U- c #848983", -"V- c #918F56", -"W- c #A8A765", -"X- c #403E27", -"Y- c #3F4043", -"Z- c #8F9498", -"`- c #747879", -" ; c #85898E", -".; c #969BA1", -"+; c #727578", -"@; c #848890", -"#; c #484B4F", -"$; c #191912", -"%; c #70704F", -"&; c #A2A274", -"*; c #A3A476", -"=; c #A2A376", -"-; c #737455", -";; c #24251B", -">; c #9B9C76", -",; c #808162", -"'; c #191A14", -"); c #0C0C0A", -"!; c #36372C", -"~; c #2B2B23", -"{; c #464739", -"]; c #4F5041", -"^; c #1C1D18", -"/; c #535547", -"(; c #0D0E0B", -"_; c #3C3D34", -":; c #25251F", -"<; c #4B4C43", -"[; c #161714", -"}; c #464840", -"|; c #31312D", -"1; c #82857A", -"2; c #31332F", -"3; c #4B4D48", -"4; c #121212", -"5; c #737670", -"6; c #5B5D59", -"7; c #151615", -"8; c #0E100F", -"9; c #393B3A", -"0; c #4C4E4F", -"a; c #0A0A0A", -"b; c #626669", -"c; c #55585E", -"d; c #868C96", -"e; c #717682", -"f; c #2D2E2E", -"g; c #838884", -"h; c #838983", -"i; c #838984", -"j; c #838883", -"k; c #2A2A24", -"l; c #8F8D55", -"m; c #A9A966", -"n; c #67653E", -"o; c #424447", -"p; c #7E8387", -"q; c #6C7175", -"r; c #46484B", -"s; c #171815", -"t; c #343424", -"u; c #81815A", -"v; c #A3A373", -"w; c #A3A375", -"x; c #64654A", -"y; c #1C1C15", -"z; c #747457", -"A; c #2E2E23", -"B; c #3B3B2E", -"C; c #525341", -"D; c #444436", -"E; c #535443", -"F; c #84866C", -"G; c #7F816C", -"H; c #131310", -"I; c #5A5C4E", -"J; c #34352E", -"K; c #5D5F53", -"L; c #131311", -"M; c #4F5148", -"N; c #252621", -"O; c #7A7D71", -"P; c #1F1F1D", -"Q; c #4C4F49", -"R; c #6F736D", -"S; c #414340", -"T; c #232322", -"U; c #131414", -"V; c #565957", -"W; c #2E3030", -"X; c #5C5F5F", -"Y; c #0C0D0D", -"Z; c #777C80", -"`; c #505356", -" > c #53565A", -".> c #7E848D", -"+> c #898E9A", -"@> c #717680", -"#> c #67663E", -"$> c #AAA968", -"%> c #9F9D62", -"&> c #6C6B43", -"*> c #3E3D27", -"=> c #272719", -"-> c #242317", -";> c #2F2F1F", -">> c #4E4E34", -",> c #7B7B53", -"'> c #9E9E6C", -")> c #A4A572", -"!> c #A4A473", -"~> c #A4A474", -"{> c #A2A375", -"]> c #4E4E39", -"^> c #2B2B20", -"/> c #444534", -"(> c #888969", -"_> c #828365", -":> c #2C2D23", -"<> c #2D2D24", -"[> c #787961", -"}> c #9B9D7F", -"|> c #48493C", -"1> c #999B82", -"2> c #686A59", -"3> c #24251F", -"4> c #383931", -"5> c #626456", -"6> c #595B51", -"7> c #51534A", -"8> c #21211E", -"9> c #44453F", -"0> c #72756C", -"a> c #131413", -"b> c #2D2F2C", -"c> c #2F302E", -"d> c #727572", -"e> c #5D605E", -"f> c #212221", -"g> c #383A39", -"h> c #5A5D5D", -"i> c #272728", -"j> c #5C5F62", -"k> c #3E4042", -"l> c #262729", -"m> c #383A3E", -"n> c #7F848D", -"o> c #838784", -"p> c #838783", -"q> c #646564", -"r> c #65643E", -"s> c #99975F", -"t> c #A9A86A", -"u> c #A5A56A", -"v> c #A3A26A", -"w> c #A5A46C", -"x> c #A6A56F", -"y> c #A6A670", -"z> c #A5A571", -"A> c #A5A572", -"B> c #A0A175", -"C> c #9D9D75", -"D> c #9D9D76", -"E> c #9E9F78", -"F> c #9FA07A", -"G> c #9E9F7B", -"H> c #9B9D7A", -"I> c #989979", -"J> c #9C9E7D", -"K> c #9C9D7F", -"L> c #999B7F", -"M> c #989A7F", -"N> c #999B83", -"O> c #959780", -"P> c #949781", -"Q> c #969985", -"R> c #939684", -"S> c #939685", -"T> c #949888", -"U> c #909285", -"V> c #919588", -"W> c #4E504A", -"X> c #0E0E0E", -"Y> c #71746E", -"Z> c #8D918B", -"`> c #90948F", -" , c #8F948F", -"., c #8B8F8D", -"+, c #8B8F8F", -"@, c #8D9292", -"#, c #8A8F91", -"$, c #8A8F93", -"%, c #797E84", -"&, c #4E5256", -"*, c #252627", -"=, c #636463", -"-, c #828783", -";, c #828883", -">, c #838882", -",, c #747674", -"', c #414240", -"), c #30302A", -"!, c #313125", -"~, c #303123", -"{, c #313123", -"], c #313024", -"^, c #303124", -"/, c #303025", -"(, c #2F3026", -"_, c #2F2F27", -":, c #2D2E29", -"<, c #2C2D2A", -"[, c #292A28", -"}, c #20211F", -"|, c #262625", -"1, c #2C2C2B", -"2, c #2C2C2C", -"3, c #2B2C2C", -"4, c #2B2B2C", -"5, c #414241", -"6, c #828782", -"7, c #828882", -"8, c #838782", -"9, c #828781", -"0, c #818782", -"a, c #818781", -"b, c #828682", -"c, c #818681", -"d, c #828681", -"e, c #BED2BC", -"f, c #525650", -"g, c #292B2A", -"h, c #111212", -"i, c #606460", -"j, c #757A75", -"k, c #ACB8AC", -"l, c #DEDEDE", -"m, c #EFF0EF", -"n, c #FEFEFC", -"o, c #808681", -"p, c #818680", -"q, c #687068", -"r, c #424543", -"s, c #D6D6D4", -"t, c #808781", -"u, c #818580", -"v, c #818581", -"w, c #808680", -"x, c #808581", -"y, c #808580", -"z, c #7F8580", -"A, c #80857F", -"B, c #80867F", -"C, c #7F857F", -"D, c #7F867F", -"E, c #80847F", -"F, c #1C1C1C", -"G, c #808480", -"H, c #7F847F", -"I, c #7F8480", -"J, c #7E847F", -"K, c #7E857F", -"L, c #7F847E", -"M, c #7E847E", -"N, c #7E837F", -"O, c #7F837E", -"P, c #7E837E", -"Q, c #C6C6C4", -"R, c #E8E9E9", -"S, c #7E847D", -"T, c #7D837D", -"U, c #7D847D", -"V, c #7D847E", -"W, c #7E837D", -"X, c #CBCBCC", -"Y, c #7D837E", -"Z, c #939992", -"`, c #7D827D", -" ' c #7C837C", -".' c #7D837C", -"+' c #353835", -"@' c #7C837D", -"#' c #7D827C", -"$' c #7C827D", -"%' c #7C827C", -"&' c #B3C0B4", -"*' c #C7D9C5", -"=' c #DBF3DC", -"-' c #D6ECD4", -";' c #D2E9D4", -">' c #7C827B", -",' c #CDE4CE", -"'' c #7C817C", -")' c #7B827C", -"!' c #7B817B", -"~' c #7B817C", -"{' c #C8DEC9", -"]' c #7B827B", -"^' c #7C817B", -"/' c #9DA79E", -"(' c #C2DAC4", -"_' c #7A817B", -":' c #7B817A", -"<' c #7A807B", -"[' c #7A817A", -"}' c #7B807A", -"|' c #7A807A", -"1' c #A6B0A6", -"2' c #7A8079", -"3' c #79807A", -"4' c #798079", -"5' c #7A7F7A", -"6' c #7A7F79", -"7' c #797F79", -"8' c #787F79", -"9' c #788079", -"0' c #787F78", -"a' c #798078", -"b' c #797F78", -"c' c #787E78", -"d' c #787E79", -"e' c #787F77", -"f' c #787E77", -"g' c #777E78", -"h' c #777F77", -"i' c #777E77", -"j' c #D2D2D4", -"k' c #777D77", -"l' c #777E76", -"m' c #767D77", -"n' c #777D76", -"o' c #767E77", -"p' c #767E76", -"q' c #767D76", -"r' c #767C76", -"s' c #767D75", -"t' c #757D75", -"u' c #757D76", -"v' c #757C76", -"w' c #767C75", -"x' c #757C75", -"y' c #757C74", -"z' c #747D75", -"A' c #747C75", -"B' c #747C74", -"C' c #757B75", -"D' c #757B74", -"E' c #747B74", -"F' c #747B75", -"G' c #747C73", -"H' c #747B73", -"I' c #737C74", -"J' c #737B74", -"K' c #737C73", -"L' c #737B73", -"M' c #747A74", -"N' c #747A73", -"O' c #737A74", -"P' c #737A73", -"Q' c #808880", -"R' c #4D4E4D", -"S' c #2D3030", -"T' c #5F685F", -"U' c #737B72", -"V' c #7F887F", -"W' c #4F584F", -"X' c #4F504F", -"Y' c #414641", -"Z' c #50584F", -"`' c #405040", -" ) c #3F443F", -".) c #4E514E", -"+) c #727B72", -"@) c #727A73", -"#) c #727972", -"$) c #5E615E", -"%) c #5A5D5A", -"&) c #626562", -"*) c #575A57", -"=) c #666966", -"-) c #5A5C5A", -";) c #696D6A", -">) c #535653", -",) c #5B605B", -"') c #515451", -")) c #565956", -"!) c #545754", -"~) c #525552", -"{) c #555A55", -"]) c #404340", -"^) c #454645", -"/) c #A6A6A6", -"() c #737A72", -"_) c #535654", -":) c #4D524D", -"<) c #4A4E4A", -"[) c #4B4F4B", -"}) c #50534F", -"|) c #494C49", -"1) c #484B48", -"2) c #4D504D", -"3) c #454A45", -"4) c #474C47", -"5) c #4A4D4A", -"6) c #505350", -"7) c #4B504B", -"8) c #4C504B", -"9) c #424542", -"0) c #464946", -"a) c #555855", -"b) c #494E49", -"c) c #434743", -"d) c #434645", -"e) c #AAAAAA", -"f) c #727A72", -"g) c #444843", -"h) c #444744", -"i) c #4C4F4C", -"j) c #414441", -"k) c #3D413D", -"l) c #393B39", -"m) c #3B3F3B", -"n) c #3E413E", -"o) c #4F544F", -"p) c #464A45", -"q) c #494E4E", -"r) c #393D39", -"s) c #464A4A", -"t) c #3C3F3C", -"u) c #494A49", -"v) c #07090A", -"w) c #0F1010", -"x) c #100F0F", -"y) c #0D0D0D", -"z) c #0F0F0F", -"A) c #727973", -"B) c #939DA1", -"C) c #9CA5A9", -"D) c #A9B5B9", -"E) c #B8C5C9", -"F) c #C4CACB", -"G) c #B2BDC2", -"H) c #AEBDC1", -"I) c #A2ADB2", -"J) c #949A9B", -"K) c #8E999C", -"L) c #8C969A", -"M) c #8A9395", -"N) c #848E91", -"O) c #848B8B", -"P) c #7E898B", -"Q) c #7A8386", -"R) c #727B7D", -"S) c #6C7274", -"T) c #6D7679", -"U) c #778082", -"V) c #757E81", -"W) c #717678", -"X) c #646B6D", -"Y) c #494F51", -"Z) c #333434", -"`) c #BECDD2", -" ! c #D1E0E5", -".! c #A1ACAE", -"+! c #869194", -"@! c #7D8689", -"#! c #686E71", -"$! c #3C3E40", -"%! c #333433", -"&! c #717972", -"*! c #717A72", -"=! c #050606", -"-! c #01070E", -";! c #070707", -">! c #242728", -",! c #1E2120", -"'! c #0B040B", -")! c #000000", -"!! c #3E3F3E", -"~! c #3E4142", -"{! c #363A39", -"]! c #40423F", -"^! c #363A36", -"/! c #727A71", -"(! c #C7D5D9", -"_! c #FBFFFF", -":! c #F2FFFF", -" - & - ; - - & & & & & & & & & & & & & & , & & & & & - > & > & & & & & & - , & - > > & & & & & & & & & & & & & > & - & & & & & & & * = ", -"& & & ' ; & & ' ; & ' - & > > ) ; & ) > , & & & ) & & & & - & & & > > & ; > - & & ; - ) - & & & > ; - & & - ) ; & & - & ; ; & & & & ; & > > & & & ) * = ", -"- > & ) & ; & - > > & ; > & ; & - & > , > ) > & - & - > & , & & > - ; > ! ' & & > & & ! - & - & ; & - & - & - > & ) ' ) - & > ' & ' > ; & - > & ' & * = ", -"- - ! - ' & ' ' ) & ; ) - > & & ; & - ) & > - - > - - > & ' ! & ' > ! ; ) & & > > - > & > , > ) - ; & > ' - ! ; ) ! ' & - ' ) ' ) - & ; - - & & , & * = ", -") > - - ) ! ; ) ! ! , , - ' ) > - ' ) ) - ' ; & , & , ! ' ) ! ; & > & , - ) ) & ! & & ! - ' ! ! , - ' ! ; > - ' ' ' ! ' , - > , > ' ! ) ' , - ! > ) * = ", -") , ! , - ! ! , ) - ! , ! > > & - ) ; ; ' ; ) ! - , ! ' ) ' ' ' , > ; ! > > ) ) ; ' , - ) , , & > - > ! ! ' - ! ! ) ! > - ; ' ; ' ! , , ) ! ) ) ' ! * = ", -"' ! ) ! ; , - ' ! , ' ' ; , ! ! ' ' ! ! ! ! ' > - ! - ! , ' ! ! ) & ' ! ' ) ! ' , , ' ! ' - > > ! ! ' ) ! ! ' ! ! ' ' ! ! ! , - ! ' ) ' ! ' ) ! ! > * = ", -"' ! ! ! ! ' ! ' ) ! ) , ! ! ! ! ! ' ! ' ! ' ! ! ' ! ! ' ' , ! ' ! , - ! ! , ! ! ! ! ' , ! ' ) ! ! ' ! ' ! ! ! ! ) ! ' ' ! ! ! ! ' ' > ! ! ! ' ! ) ! * = ", -"! ~ ! ! ! ! ! ! ' ' ! ! ! ' ! ! ! ' ! ! ! ! ! ! ! ! ! ! ! ! ! ! ~ ! ! { ! ' ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ' ! ! ! ' ! ! ! ] ! { ! ! ! ! ! * = ", -"! ! ! ! ! ~ ! ! ! ! ! ~ ] ! ! ! ! ~ ~ ! ! ! ! ! ! ! ! ~ ~ ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ' ! ! ] ! ~ ~ ~ ! ] ] ! ! ! ! ! ] ~ ~ ! ! ! ' ! ^ ] ] * = ", -"! ~ ! ] ! ! ! ~ ! ! ! ! ] ] ! / ! ] ( ! ! ( ! ! ! ! ! ] ( ! ~ ! ~ ~ ! ~ ] ] ] ! ! ! ! ~ ! ] ] ^ ~ ( ! ( ! ^ ] ] ] ! ! ~ ~ ! ~ ! _ ] ] ! ~ ! ] ! ! ! * = ", -"^ ! ^ ] ~ ] ! ! ! ^ ! ^ ! / ^ : ~ ~ ] ! ~ ^ ! ~ ~ ^ ^ ! ! ^ / ^ ( ! ! ( _ : ] ^ ! ~ ! ! ! ! ! ! ] ! ^ ! ~ ^ ! ! ~ ! ] ( : / : _ _ ] ] ^ ! ] ! ] ! ! * = ", -"] ( ~ _ ^ : ^ ] _ _ ^ ^ ! ~ ! ] _ ~ / _ _ ~ ! ^ : ^ ] ] _ ^ ! : / ] ^ ! ] ( ] ^ ^ / ! ] _ ^ ~ _ : ~ / ~ ] ^ ] ! ~ ^ ^ / ] / ] ] ^ ~ ] ] : ] _ ! ] ^ * = ", -": ^ : _ _ ^ ^ ^ ! ] ^ ^ ! ^ ] / _ _ : ~ ~ / ~ : _ : _ ! : _ ~ ^ : ^ : _ ] / ~ _ ^ _ ~ ( ^ ^ ! ^ ^ _ _ _ ~ _ ^ ^ _ ] _ _ ~ ! ^ : _ _ ~ _ ^ _ ] ! ^ ^ * = ", -"_ ! ^ ] _ _ ^ _ ^ ^ : ! ^ ^ ^ _ _ _ _ : _ _ ~ _ : _ / ^ ^ _ / ^ _ ] / _ ~ ] _ _ ~ _ _ ~ _ _ _ _ _ ^ ^ _ ] : ^ ] / ^ ^ ~ ^ _ _ / : ^ _ ] : ^ ^ ^ : _ * = ", -"_ _ ~ ^ _ ^ ^ _ ~ ^ _ _ _ _ _ _ _ ^ ^ _ _ ^ _ ^ _ _ _ _ ^ _ _ _ _ ^ _ _ ^ _ ^ _ _ _ ^ ^ ^ ^ _ / _ _ ^ _ _ ^ ^ _ ] ^ _ ^ _ _ _ ^ ^ _ ^ _ _ ^ _ _ ] ^ * = ", -"< _ _ _ _ [ } ^ _ _ } [ [ _ ^ ^ } ^ ^ _ ^ _ _ ^ ^ _ _ [ _ _ _ _ ^ _ ^ ^ _ _ ^ } _ _ ^ _ ^ _ _ [ _ _ _ _ _ _ _ _ _ ^ _ [ ^ _ _ _ _ | [ [ _ _ ^ _ _ } * = ", -"[ [ [ < _ _ [ _ _ 1 _ 1 ^ _ _ _ _ _ 2 _ } ^ ^ _ _ < } _ _ _ _ ^ _ < _ ^ ^ [ _ } } [ _ | _ } _ _ } _ } _ _ _ _ _ ^ _ | } | _ _ [ _ ^ _ _ [ [ } _ ^ [ * = ", -"_ _ } _ _ [ _ _ [ _ _ _ } < [ } _ _ < < } [ < [ _ } } _ } } } [ < _ } [ _ < _ [ _ _ _ _ _ _ [ [ } < } _ [ < < } } _ < } } _ } _ [ } < } _ [ _ _ [ < * = ", -"< _ 3 [ [ } 4 [ } 3 } _ _ } 5 < 5 _ _ } [ [ } [ < < < [ } [ < < 4 5 [ 6 [ [ 4 < } [ 5 _ } _ < 5 < } [ } [ [ < [ < } < } } } } } 5 [ 4 _ 5 _ [ < _ 4 * = ", -"5 5 5 < < [ [ < < [ 4 < [ 5 < 6 < < } _ [ < < < 6 < } 5 4 } [ < } [ 5 } < < 5 < 5 < [ } < < [ < 5 5 5 } < 5 _ _ < < 5 } < 4 _ < _ < < 6 [ < < < < [ * = ", -"< < 4 [ < < 5 [ } < 5 5 < < 4 5 } < 5 5 < } 5 5 5 } < < } < 4 5 } < < 5 [ } < < 6 5 < < < < 5 } 5 5 < < 5 } [ < < < < < 5 } 5 5 < [ < < < } } < < 5 * = ", -"< < < 5 5 5 < < < 7 < 5 5 < 5 < < < 5 5 < 5 5 < < < 5 5 5 < 5 < < 5 < < 8 < < < 5 5 < 5 5 < 5 5 < 5 < 5 < < < < 5 < 5 5 < < 5 < < 5 5 < 5 < < 5 < < * = ", -"8 8 8 5 5 5 5 5 5 8 9 5 5 < < 8 5 5 0 5 5 5 5 5 < < 5 5 < < < 7 < < 8 0 5 < 5 5 0 5 8 < 5 5 8 5 5 5 5 5 8 < < 5 5 5 5 5 5 0 5 5 < 5 5 < 5 < 5 < a 5 * = ", -"5 5 5 a a 0 8 5 8 5 0 < 5 5 7 < 5 8 0 0 5 < 8 8 5 0 0 9 b 5 8 8 9 5 5 5 < 5 5 0 8 8 5 < 8 5 b 0 9 0 < 7 0 0 5 8 < 5 a 0 5 8 8 8 5 7 5 8 7 5 0 7 0 8 * = ", -"5 8 5 5 8 < 5 8 b 8 0 5 b b 0 8 b 5 < 5 5 0 5 8 b 8 5 5 0 b 0 0 5 8 8 8 8 5 8 b 8 8 0 8 5 b b b a 5 8 8 5 7 5 b 9 b 5 8 5 8 b 8 8 7 5 8 < 0 0 5 5 b * = ", -"b b 0 8 0 b b 0 b b b b b 8 b b 8 b b b b b 8 b 0 b 8 0 0 b b 8 b 5 b 0 b 8 5 b b 5 8 b 5 8 b c 8 b 8 8 0 5 8 b b b b 8 0 b 8 0 0 b b d 0 8 e 0 b 0 * = ", -"b b c b 8 8 b b d b 8 d b b b e 8 0 b b b b d 8 d 5 b b b b 5 b b b 0 b d 0 b 8 b 0 d 5 d b 0 b b 0 b b 8 d b d 0 b b b b 8 c d b b b 8 d b 0 d 8 b * = ", -"d b d d b b b d d b b b b b b b b b d d b b b b d b d b b b b d b b d b b b b d b b b b d b b b b d b b d b d b d b b d b b b d d d b b b b d b b b * = ", -"b b b f g b b d d b d b h b b b d i d b b i d d d d b f b i b d h d b b b b d b j d b d f d i h b f h b h d b b d d b b d d b d d b b d d d f d d d * = ", -"b f b i g d d k d d i d g f k b d i b g d i i g h d h f g i i i i b g f b k h i b i h h i b d d f b b b d d d k j h f i g k j b b b d j j i d b d d * = ", -"k d h k i k g f d d i d i i d i d k i f i k k k d f h i d d k h h f i i h f f k j h i d d d i i f i i f i i k g f j d h i d k i f i k b d b d f i i * = ", -"k i f i f k i i k g k k i f j k k j k k k k i k f i k k k j k i k j k d f k k f i k d k j k d i k k i d g d i k k k k b d k f i j f f k d k j d f k * = ", -"f k k k i k k k k k k k k i i k f k k k k k k k l d m k l f k k i k d k f f f k k k k k k k k k k k k k n k k k k m k k k i k k k k f k k f k k k k * = ", -"k k k k k k k k l k k k k k k k k l o k k k l k k k k k o k p k k p k k l k l k k p k k k k l k l k l k k k o k k k k l k k p k k k k k k k k k k k * = ", -"k o k o k k k k q l p k l k l o k r q o l s k o l k o k k k o k k k q k k l o l l o k k k o k k p r l k k k k t o k l o q o s l k k k k l o k p k k * = ", -"k l q t k k r l p l k q s k l k r t k s k t p o l k t l k l s o l r l t k q t o t s l q k l o s o k s r s t k p q k p k t l p l o o s q o q t s l q * = ", -"p q o s s p p s s s l s o s s q q l o o l t r q r q s r l r r t o p k s t l q s t s p s s r t p s t r t q o r t t r o r p s s r s s t p s s l t o r * = ", -"s r q p q s s s s s s s s l r s s s q s t t l s s s t s s s r s t p s s o s s t s s s t s q s s q s s q s s s s s s s s q q s r s s s s t q s q s s * = ", -"s s s r s s s q s s s s s s s s s s s s t s s s s q s s s s s s s s s s s t s s s s s s s s q s s s s s s s s s s s s t s s s s s s s s s s s s s s * = ", -"s s s u s s s v s s w x y s s s u s s s s s y y s v s s y s y s y s y s u s y v v y z u v s s v s y v y s s v u s s s u s s s s y u s s v w u v s s * = ", -"v u s y s u s v s u v u y u A A y x s z x s s v s A w z s u w v s u s A w v v y v w v v s y y s u s s s y s w A v v z A s v s s s u u y A z v w A u * = ", -"s s A x v y v s y y w w u A y w s v y v x w s s y v x s v y y x s A s y s v w v A u w s u s z u s z v s x u A z x y v z v w A A z x u w y y u v z y * = ", -"x x z A w w x x x x v y x x x x x v z A x x x x x x x A A A A w w z z x x y x w A A w w x x w x x u z v w x x A x w u x w z y x z A w A x x x x v v * = ", -"x x x x x x x x x x x x x x w x w x v x x x A w x x x x x x z x v x x w x x x x x y x x w x x z x z x x x x x x x x x x x x x x x x x x x x x x x z * = ", -"x x B C C x x x x B x B x C C B x x x x C x x w x C x x x x x x x x x x x B B x B C D C w x x x C x x x x x x x x x x x x w x B x D D C x w x x D x * = ", -"D x B x C C E C x x B B x x D x x F C B B B x C x C C B B x B B D C C E x B C B x B C B x B x B B C B x C D D x B x B x B B x x D x E x B x B x x D * = ", -"C x C B D D D C C C x x D C C C G D B x x G D B B B G E x D C C x x D B D H x D D x C x D B x B B x B F x D H D C x C E B D H D B C E B H x F C x C * = ", -"C G G D H D D D D D C G D C B F C G D B G C D D D B D D G G G C G B D G F C G G B F G F H G C G x G D D D E G D E F G F E B G D F G G G F F G G D G * = ", -"D F D G G D B G G G G G G G G G H D G G B D G G G G F F G D G D G G G G G D H G G D G G D G D D G D G G G G D G D D G G G D G D D H D H G G D G D G * = ", -"I G G G G G G G G G G J J D K G G I G K G I G G G D G G D D G I G I L G G K G G I G K I I K K K G G K G G G L G G D G G K K M I G G G J I G G G G G * = ", -"G N K K N N N N I N G G K N K G N G I N G G K N L I K G G K G I G G K I I G G G G I K K G I G N I G K N N G G I K N K G N N N G K K G I I N N G G G * = ", -"K K O N K I G N I N N K N N N P N I O K P P G K N G K K G Q N I K I N N I K G I I N O K N Q I K R I O K N O I I Q I R K G K R N I I K K Q P P K Q R * = ", -"N N O Q G I O N O N I K I N O N O N K N I R O O N N N I Q P O N O N G N N N O N N I I O O K R N N N O N I N N N I G Q N N I N I N N Q N N R N I K N * = ", -"O O N N N O N O N N O O O O O O O O O O N O O O N O O N O O O O N O N O O O O N N O O O N O N O O N O O O N O N N N N O O O N O N N N O O O O O N O * = ", -"S T S O O O O U O V O W N U N U V W U O S U O U O O O N O O N S W S N W N N O O O N O O O O O O T N N S O O O W N T O O S S W O V O U U O S T O X V * = ", -"U V W V V U V V S S O O U N S O S S U T S S O U O T S V S W S S O S O U O U S V S O S O O N O S S S U U S S S O U U U U S S U O O N V U V U V V T V * = ", -"S U S V Y V S S V O V V V V S V S Z V U O V S O V V U V V O S U V V V Y U U O V V U S ` V V O U O U S U O V V O V V O V V V U S V V V U S S V V O V * = ", -"V U V V Y V S Y .V Y V V V V V V V V V V V Y V U V S V S U V V Y S Y U Y V V V Y V V S V Y U V S V V V .Y V V V .V V U V Y Z Y V V S V .V Y V Y * = ", -"Y V V ..V Y Y +.Y V V V +.V Y V V ..V @.Y +.+.#.Y V V V V Y Y Y V V Y Y V Y Y V Y Y Y V Y V Y V Y +.Y Y V Y V +.V #.V V V Y V $.Y #.Y Y Y V ..Y V V * = ", -"V #.#.$.Y +.Y ..Y Y +.$...V Y Y $.+.V Y #.Y ..V Y Y #...Y #.#.V V Y #.Y #...V Y V $.#.V ....#.V ......#.Y +.#.V V Y #.Y Y ..V V ..Y #.Y V Y ..+.V V * = ", -"%.@.#.$.V +.......@.Y #.Y #.#.%.%...%...@...%...%.@.%.%.V %.#.Y %.%.Y V #...Y $.%.%.Y #.@.#.Y ..Y ........+.Y +.%.#.@.%.Y @...Y $.Y %.#.Y %...%.Y #.* = ", -"%.%.#.%.#...%.%.%.%.%.#.%.%.%.#.@...Y %...#.....Y Y %.#...%...%.%.%.%...%...#.....%...%.#...%...%.#...%.%.%.%.%...+.Y %.%.#.Y ..%.%.#.%.%.#.%.%.%.Y * = ", -"&.%.%.%.%.%.%.%.%.&.%.%.%.&.%.%.%.%.%.%.#.%.%.&.%.%.%.&.#.%.%.#...%.&.&.%.%.%.%.&.%.%.%.%.%.%.&.%.%.%.%.%.%.%.%.%.%.%.%.%.%.*.%.%.%.%.%.%.%.%.&.%.%.* = ", -"%.%.%.=.=.%.%.=.-.=.%.%.=.%.;.%.%.&.%.-.&.&.%.&.%.&.&.=.%.%.&.%.%.%.&.=.&.-.=.%.;.%.%.&.;.%.%.;.%.%.>.&.%.&.,.%.,.&.&.&.=.%.&.%.'.%.&.%.&.%.>.&.%.%.* = ", -"&.&.%.'.=.'.>.-.%.&.;.=.'.&.,.=.>.&.=.=.&.'.'.>.=.&.>.=.>.%.'.'.%.%.%.%.%.,.>.'.=.,.&.%.%.>.%.-.=.&.=.,.;.'.'.>.&.%.>.=.;.-.>.'.;.%.&.,.;.;.&.-.&.,.* = ", -"%.-.-.,.=.'.'.%.'.-.'.,.'.%.>.,.;.;.'.'.;.>.;.'.'.-.;.'.=.&.;.,.-.'.>.'.'.-.&.-.=.>.>.'.=.,.'.'.%.=.'.-.'.'.'.-.;.'.'.,.-.=.>.'.-.=.,.&.'.'.'.'.'.,.* = ", -",.'.'.-.'.;.'.,.'.'.'.'.;.,.'.'.'.'.'.'.'.,.'.'.'.'.'.'.,.'.'.'.'.'.'.'.'.'.,.'.-.'.'.'.-.'.'.'.'.'.'.-.'.'.;.-.,.'.'.'.;.'.'.'.'.'.'.'.'.'.,.'.-.'.* = ", -"'.).).'.!.'.'.'.'.'.~.'.'.).'.{.~.{.~.'.'.'.'.'.'.'.'.'.).'.'.'.{.).'.'.'.'.'.'.'.'.'.).'.~.{.).~.].'.'.'.'.'.'.).).'.'.).'.'.'.'.'.'.].'.).'.'.~.'.* = ", -"~.'.^.).'.'.'.!.).~.'.).).{.{././.~.].'.~.{.~.'.'.{.!.'.).].].'.).~.'.~./.{.'.'.].^.!.'.{.).~.'.).'.'.!./.'.~.'.!.'.'.~./.{.]./.].'.!.).'.^.'.{.^.'.* = ", -"~.).{.).~.'.].^.'.!.^.'./.^.~././.!.~.!.!.!./.'.).^./.~./.).~.'.^.^.{.{.~.^.].~.~./.).~./.^.~.~.!.~.{./.'.].).!.'.~.].).!.^.~./.].~.'.!.~.^.!.'.).^.* = ", -"{.!.^.).^.^.^.!.^.!.].'.~.!./.^.!.{.^.^.^.^.{.^.^./.!.^.^.!.^.^.!.!.).^.!.^.!.!.^.^.].~.!.].!.!.^.!.!.^.^.^.^./.^.^.).^./.^.!.^./.^./.].~.'.!.!.!.!.* = ", -"^.!.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.(.^.^.^.!.^.^.^.^.^.!.^.^.^.^.^.^.(.^.^.^.^.^.^.^.^.^.^.(.^.^.^.^.^.^.^.^.^.^.^.^.^.^.!.!.^.^.^.^.^.^.^.(.^.* = ", -"_.^.^.(.^._._.^.(.^.^.:.^.(._.^.^.<.^.^.(.^.<.^.<.^.(.^.(.(.^.(._.^.^.^._._.(.(.^.^.^.(.<.^._.^.(.<.(.(._.^._.^._.^._.(.^.^.(.^.(.^.<.(.^.^.^._.(.[.* = ", -"(._.^.:.(.<.[.(.^.(.}.[._.(.^.(._._._.(.:.<.(.[.(.^.}.<.[.(._.[.<._.|.}.^.(.^.}.<.[.(.(.[.:.[.<.(.[._.:.[.^.^._.}.(.(.^.^.^.:._.<.[.<.|.(.(.[.(.[.^.* = ", -"<.}.<.<.<._.}.<.<.<.}.<.}.<.<.:.(.[._.(.<.[._.}._.}.<.<.}._.}.}.^._._.}._.}.}.<.}.<._.<.^.:._.}.^.<.}.<.}.<.}.}.|.(._.^.(.:.<.^.<.<.[.<._._.|.<.<.}.* = ", -"<.}.<.}.}.}.}.<.}.}.}.|.<.}.}.<.<.}.}.}.}.}.}.}.}.<.}.}.}.}.}.}.}.<.}.}.<.<.<.}.}.}.}.<.<.<.}.}.<.}.<.(.}.}.}.}.|.<.}.}.<.}.<.}.}.}.<.<.}.}.}.}.}.}.* = ", -"}.}.}.1.2.1.}.1.}.}.3.}.1.}.}.<.4.}.3.}.}.}.}.}.3.3.}.<.1.1.2.}.4.<.}.5.3.6.}.1.}.1.}.}.1.}.1.}.}.1.4.}.}.3.}.1.5.4.4.}.<.3.3.3.1.}.}.4.2.}.3.<.<.}.* = ", -"4.1.}.}.}.1.3.}.1.1.3.4.}.}.}.}.}.}.4.1.3.4.1.}.}.4.3.4.}.7.1.}.4.}.4.1.}.1.3.}.1.}.4.7.8.3.3.4.1.1.1.1.1.}.3.4.}.}.9.3.1.}.3.1.3.}.1.4.}.4.1.}.1.}.* = ", -"0.3.1.1.}.0.4.4.1.4.4.4.7.9.4.4.1.1.3.7.8.8.4.7.4.4.0.4.7.8.7.4.3.4.4.1.1.3.1.9.8.4.4.1.3.4.7.4.1.3.}.7.1.3.1.4.7.7.4.3.4.3.8.4.}.4.4.7.}.1.4.1.1.1.* = ", -"4.7.7.7.4.7.4.7.3.1.4.4.7.7.4.1.7.7.4.7.1.7.4.7.3.4.7.4.7.4.7.7.7.4.9.4.7.7.4.7.7.7.7.7.7.4.7.4.4.4.4.7.4.3.7.4.4.4.7.4.9.4.4.4.3.4.4.4.4.1.7.7.4.4.* = ", -"4.a.b.7.7.7.7.7.7.c.b.a.c.7.c.7.c.4.c.7.4.7.4.a.7.4.7.7.7.a.b.7.7.a.4.c.7.c.7.a.4.7.7.d.7.7.7.a.b.e.7.7.7.4.c.e.d.4.4.7.c.a.7.7.7.7.7.e.4.7.7.b.4.c.* = ", -"e.c.a.a.a.d.a.7.d.4.a.f.d.c.7.d.7.7.a.e.d.d.a.c.7.d.d.a.c.a.d.a.4.4.7.f.7.d.7.a.7.d.b.7.7.7.c.a.7.7.f.c.d.c.e.a.7.c.c.a.7.d.7.a.a.a.7.4.f.7.d.7.7.d.* = ", -"a.a.d.c.d.d.d.a.d.c.d.7.a.d.d.a.d.d.7.7.7.d.d.g.d.a.h.d.d.d.d.a.7.7.a.d.7.d.a.d.7.d.d.d.a.d.h.a.d.c.d.h.7.d.d.d.d.7.d.d.a.d.a.d.a.d.h.d.c.c.a.7.c.d.* = ", -"d.d.d.h.h.h.d.h.d.g.d.d.d.d.d.h.d.a.h.d.d.h.d.d.i.d.d.d.d.d.a.d.d.d.h.a.a.d.d.d.h.d.d.d.d.d.d.h.d.g.d.d.h.h.d.d.h.d.h.d.d.d.d.d.d.h.i.d.d.h.h.h.d.d.* = ", -"h.j.k.d.h.j.h.j.h.d.d.d.l.d.h.d.l.l.d.m.d.h.l.h.h.h.n.d.l.h.d.h.k.d.k.h.d.d.d.m.d.d.h.k.h.j.m.k.d.h.h.l.h.d.d.k.h.d.h.d.h.m.l.d.l.k.d.k.h.l.d.m.d.m.* = ", -"k.k.h.m.j.h.l.d.m.j.d.j.m.h.j.o.j.h.k.m.k.m.n.j.j.o.d.d.j.m.h.n.o.d.m.o.d.h.h.k.h.j.o.d.h.d.l.l.j.o.h.j.d.o.n.m.k.k.m.h.d.j.h.j.k.h.j.j.j.h.l.j.j.d.* = ", -"o.h.n.o.n.o.o.o.j.m.j.j.h.h.m.j.o.o.j.o.o.j.h.o.o.j.o.o.k.o.h.h.o.o.o.j.h.o.m.j.n.m.h.j.o.j.o.h.m.m.n.o.j.j.o.m.o.o.j.j.j.o.o.o.j.o.n.m.o.o.o.o.n.m.* = ", -"o.o.j.p.o.o.o.o.o.o.o.j.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.m.o.q.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.m.o.m.m.o.o.o.j.o.o.o.o.o.o.o.r.o.q.o.o.o.o.o.m.o.j.o.m.o.* = ", -"o.o.o.s.o.r.r.r.o.r.r.r.o.t.u.r.o.o.o.t.s.o.u.o.o.o.o.o.o.r.o.o.s.r.o.o.o.o.t.u.o.o.o.o.r.o.o.s.o.o.u.v.o.o.o.r.r.r.o.w.v.r.o.r.o.r.r.r.o.o.t.r.o.o.* = ", -"o.t.r.t.s.v.r.u.w.w.r.x.x.t.w.v.v.x.o.r.r.r.w.o.v.s.o.w.o.w.u.r.u.u.w.o.o.o.w.r.u.u.s.x.o.s.r.v.r.u.x.w.s.s.w.w.s.r.v.v.r.u.r.o.r.s.s.o.r.u.u.r.t.r.* = ", -"u.x.u.u.t.x.t.x.u.x.w.x.u.u.t.u.o.s.s.v.x.t.w.v.x.x.x.v.w.x.v.x.r.v.v.w.t.w.u.s.o.u.u.w.v.w.r.x.t.t.o.t.r.v.x.x.v.v.x.u.u.x.t.u.w.v.w.v.x.w.w.x.x.x.* = ", -"u.x.x.v.x.x.x.x.x.x.v.u.x.v.x.x.w.x.x.v.x.u.x.u.x.x.w.u.x.x.x.w.v.x.x.x.x.r.x.x.x.x.x.w.x.x.x.r.x.x.x.x.x.x.x.x.u.r.x.x.x.v.x.x.x.u.x.x.x.x.v.x.x.x.* = ", -"x.x.x.x.y.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.y.x.x.x.x.y.x.y.y.z.x.z.A.y.x.x.A.x.x.x.x.x.x.x.z.x.A.z.x.B.z.x.z.z.x.x.y.z.x.z.x.z.x.x.x.x.B.y.x.x.x.B.x.z.* = ", -"B.z.y.A.C.A.y.x.B.B.A.z.C.D.C.E.x.C.D.C.z.A.B.z.D.y.C.y.D.D.x.x.z.D.x.C.z.A.z.z.z.E.E.A.B.B.x.D.x.x.z.A.A.A.x.z.E.D.D.A.C.x.D.y.x.x.B.E.A.E.x.x.A.x.* = ", -"B.D.A.x.D.C.E.D.E.D.z.A.B.C.E.B.z.A.C.E.E.E.B.D.D.E.D.A.D.E.B.C.A.z.D.D.B.x.x.x.E.D.E.z.A.E.D.y.A.z.x.x.D.A.z.E.E.B.A.z.A.D.D.B.E.C.A.B.E.D.D.C.y.C.* = ", -"E.B.D.E.E.D.z.E.A.E.E.B.E.E.B.D.E.B.E.E.E.E.E.D.E.D.D.E.E.B.E.E.E.E.E.E.E.D.B.E.E.E.E.E.C.D.E.E.E.E.E.B.E.C.E.D.E.E.C.B.E.D.E.E.B.E.E.E.E.D.C.E.E.D.* = ", -"E.F.G.E.E.E.E.E.E.E.E.E.E.E.E.D.E.E.F.E.E.E.E.E.G.E.G.E.E.E.E.E.E.F.E.F.E.E.F.E.F.G.G.E.E.E.E.E.E.E.E.E.E.E.D.E.E.E.E.E.G.E.E.F.F.H.E.F.E.E.E.G.E.E.* = ", -"G.F.G.E.H.G.H.E.H.E.E.H.I.J.E.E.G.E.E.K.G.H.I.K.E.E.G.H.E.G.E.F.G.G.F.H.E.E.F.E.H.E.L.K.K.G.G.I.L.L.F.H.E.F.K.E.E.E.H.G.H.G.F.G.F.G.G.J.K.G.G.F.F.K.* = ", -"G.G.F.H.I.F.F.H.I.L.J.H.E.J.E.G.G.E.K.K.I.H.I.G.K.H.H.H.F.I.G.F.H.I.L.H.G.F.H.H.I.H.K.L.F.J.H.G.G.G.J.I.H.H.I.L.K.I.I.F.G.H.H.G.G.J.H.H.H.J.H.K.I.H.* = ", -"H.I.I.H.G.I.H.I.I.I.I.I.I.H.G.I.I.H.I.I.I.I.H.I.F.F.I.F.H.I.I.I.I.I.H.I.H.I.I.L.G.I.I.I.I.H.G.I.H.H.H.I.I.I.I.H.F.I.G.I.I.I.H.I.I.H.I.H.J.I.H.H.I.H.* = ", -"I.H.M.H.N.I.I.I.N.O.I.I.I.I.I.H.M.I.P.I.I.I.I.I.N.O.I.I.I.P.H.H.I.I.P.I.I.I.M.I.O.I.I.O.H.I.O.I.H.I.I.H.I.I.I.I.O.O.I.H.I.I.I.M.I.I.I.I.H.I.I.P.O.I.* = ", -"I.I.I.M.I.O.P.I.M.I.I.M.P.O.M.O.O.I.I.I.I.O.O.I.O.M.I.I.I.M.Q.M.I.I.P.O.M.O.I.M.O.O.I.O.I.I.M.I.M.I.P.I.O.P.M.M.P.M.I.P.O.M.P.I.M.M.I.M.I.O.M.O.P.O.* = ", -"P.P.O.R.Q.R.S.P.M.R.P.P.O.O.O.O.O.P.I.I.P.O.M.I.O.I.M.M.R.P.P.M.P.P.O.P.S.M.O.O.S.P.O.P.S.P.R.M.M.P.P.P.P.P.P.O.P.O.P.O.P.R.P.T.P.M.T.P.O.P.P.Q.Q.P.* = ", -"S.P.S.O.P.P.S.P.S.M.P.S.P.P.P.P.S.S.P.P.P.S.S.R.S.S.S.P.P.P.P.P.P.P.S.S.P.P.S.O.S.P.S.P.P.P.P.P.S.S.Q.P.S.P.P.S.S.S.P.P.P.S.I.P.S.P.P.S.P.S.P.P.S.M.* = ", -"S.S.S.U.P.V.S.S.S.W.S.P.V.P.X.P.S.W.S.W.P.P.X.S.S.P.S.S.S.Y.U.S.W.S.S.W.W.U.W.S.S.Y.S.X.S.Y.P.P.P.S.W.U.X.S.P.S.Y.S.S.S.P.U.P.P.P.S.S.Y.S.W.X.W.P.S.* = ", -"W.S.Y.W.Y.Y.S.Y.Y.U.Y.S.Y.Y.S.S.Y.S.W.S.Y.P.W.S.S.S.U.Z.W.Y.W.Y.S.S.S.P.S.Y.X.U.S.Y.Y.Y.W.S.W.W.S.W.U.W.Y.W.S.S.W.S.P.S.S.Y.P.S.Y.X.W.S.U.S.Z.W.W.Y.* = ", -"W.Y.Y.Y.W.Y.U.`.U.Y.W.W.Y.Y.Y.S.U.Y.Y.U.S.Y. +U.U.W.Y.`.W.W.Y.W.Y.`.W.Y.U.U.Y.U.U..+S.Y.Y.U.Y.Y.W.Y.Y.Y.W.Y.U.W.U.U.W.W.U.U.Y.W.Y.Y.Y.U.U.W.Y.Y.Y.W.* = ", -"Y.Y.Y.Y.Y.Y.`.Y.`.`.Y. +`.Y.`.Y.Y.Y.Y.`.Y.Y.Y.U.Y.Y.Y.Y.`.Y.Y.Y.`.Y.Y.Y.Y.`.Y.Y.Y.Y.U.Y.`.W.Y.W.`.Y.Y.`.`.`.`.Y.Y.Y.Y.Y.Y.Y.Y.Y.`.Y.U.Y.Y.Y.Y.`.`.U.* = ", -"`.`.Y.`.++Y.++++`.`.@+Y.#+Y.Y.Y.@+$+++`.`.`.Y.@+Y.`.++@+`.++Y.Y.Y.`.`.Y.Y.$+%+%+`.`.`.`.&+Y.Y.@+Y.`.@+Y.++Y.&+Y.`.@+`.++`.$+++++&+Y.@+`.Y.&+Y.Y.`.@+* = ", -"@+$+%+#+&+%+`.`.&+Y.%+%+&+`.@+$+%+`.Y.%+&+$+&+&+$+%+%+`.`.&+Y.%+++%+`.$+&+`.$+Y.%+%+$+&+&+++`.++$+%+`.`.%+$+`.%+`.&+++Y.#+`.&+@+#+&+`.++$+@+&+`.#+%+* = ", -"`.%+@+%+%+%+$+++$+%+%+%+%+%+%+%+%+%+%+%+&+$+%+%+%+`.&+%+%+%+Y.%+$+`.`.&+%+#+%+#+#+%+%+%+%+%+%+$+%+`.%+`.%+&+%+#+$+#+%+$+%+&+%+`.$+%+%+$+`.%+%+`.%+$+* = ", -"%+%+*+%+%+%+%+%+%+%+*+%+=+%+%+*+%+%+%+%+%+%+*+*+*+%+%+%+%+%+%+%+*+%+%+%+%+%+%+$+%+%+$+%+%+%+*+%+%+%+%+%+%+%+%+%+%+%+-+%+*+%+%+%+%+%+%+%+%+%+%+%+%+%+* = ", -";+%+*+>+%+,+%+%+%+%+*+,+*+;+,+%+%+%+'+%+>+*+>+;+*+)+%+,+%+%+>+%+%+%+*+%+%+*+%+'+%+;+%+*+*+)+;+)+*+*+*+>+*+*+*+%+)+*+)+;+,+%+*+%+%+,+!+%+>+*+%+'+%+>+* = ", -")+'+;+!+;+,+,+*+*+*+)+!+)+;+%+>+!+;+*+)+%+'+)+%+*+>+%+)+>+!+!+%+;+*+!+;+)+!+*+,+;+%+'+)+;+!+)+,+*+>+*+*+'+>+*+,+>+!+;+)+>+,+!+>+%+*+,+,+)+*+>+*+*+!+* = ", -">+)+!+!+;+)+'+%+>+*+!+!+>+)+>+!+>+>+!+!+!+'+>+!+!+!+!+,+'+>+!+!+!+>+!+!+)+*+!+>+!+'+!+>+'+!+!+!+!+!+*+>+'+*+;+>+!+;+*+)+,+>+;+!+!+!+!+!+'+'+'+!+)+)+* = ", -"!+!+~+~+~+~+~+~+~+{+]+^+/+(+(+(+_+_+_+:+:+<+<+[+[+}+|+|+1+2+3+3+4+4+5+6+6+6+6+7+8+8+9+9+0+a+a+a+b+c+c+c+d+e+e+f+g+]+{+~+~+~+~+~+~+~+~+!+!+!+!+!+!+!+* = ", -"!+!+~+~+~+~+~+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+y+y+z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+S+T+U+V+W+X+Y+Z+`+ @.@+@@@#@h+~+~+~+~+~+~+~+$@%@&@!+&@&@* = ", -"$@*@~+~+~+~+=@-@;@>@,@'@)@!@~@{@]@^@s+/@(@_@:@<@[@}@z+|@1@C+2@3@4@G+I+5@6@7@8@M+9@0@a@b@c@d@e@T+f@g@V+h@i@j@k@`+l@m@m@n@o@p@~+~+~+~+~+&@~+~+!+~+$@%@* = ", -"$@~+~+~+~+q@r@s@t@u@v@w@x@y@z@A@B@C@D@E@(@F@:@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@P+Q+Z@d@`@<.f@g@W+W+i@ #.#+#@#.@n@##$#%#&#~+~+~+~+$@*#$@=#=#$@%@* = ", -"=#-#~+~+=@;#>#,#'#)#!#~#{#{#]#^#/#(#_#:#(@<#:@[#}#|#1#u@2#3#4#5#6#7#8#9#5+0#a#b#7+c#d#e#b@f#g#`@f@h#V+i#i@Y+.#j#@#k#m@######l#m#~+~+~+$@=#=#=#$@$@n#* = ", -"=#=#~+h+o#p#,#q#r#s#t#u#{#v#w#x#y#z#A#B#C#D#E#F#}#G#H#I#J#|+K#L#M#N#O#P#Q#R#S#T#U#9@d#V#b@f#e@`@f@f@V+W#i#X#.#Y#+#Z#`# $ $.$ $+$@$~+~+n#=#=#n#-#=#=#* = ", -"#$-#~+$$%$o#&$*$=$-$;$>$,${#'$)$!$~${$]$^$/$E#($_$:$<$[$}$|$1$2$3$4$5$6$7$8$T#9$0$a$0@V#Z@f#b$g#2.f@c$d$i#e$f$g$+#l@`# $ $####h$#@~+i$-#=#j$j$n#k$-#* = ", -"j$i$l$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$D$E$/$F$G$H$I$J$K$L$M$N$O$P$Q$R$S$T$U$V$W$X$Y$Z$`$ %.%6.2.+%@%#%$%%%f$&%+#*%=%n@ $h$h$h$-%;%>%k$j$i$i$j$j$i$* = ", -"j$i$,%'%)%!%~%{%]%^%/%(%_%:%<%[%M@}%|%1%2%3%4%E#5%6%7%8%9%0%a%b%c%d%e%f%g%h%i%j%k%l%m%Z$`$n%o%g#2.p%@%q%$%r%s%&%g$t%=%u%h$h$h$h$v%w%j$j$j$j$x%i$j$j$* = ", -"y%z%A%B%C%D%E%F%G%H%I%J%K%L%M%<%N%O%P%Q%R%S%T%U%V%W%X%Y%Z%`% &.&+&@&#&$&%&&&*&=&-&;&>&Z$`$n%b$g#5.,&c$c$'&)&s%&%!&~&=%u%{&{&h$h$h$]&j$j$j$y%z%y%j$y%* = ", -"x%j$^&B%/&(&_&_&:&<&[&}&|&1&2&M%3&4&5&{$6&7&8&E#9&0&a&b&c&d&e&f&g&a&h&i&%&j&k&l&m&n&o&p&`$q&r&s&5.,&p%c$'&)&t&u&&%~&v&w&{&{&{&{&h$x&x%y&y%z%z%j$y&y%* = ", -"y%z%^&z&A&B&C&_&:&D&E&f$F&G&H&M%I&J&5&{$K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&`& *.*0$+*@*#*$*%*q&r&b$5.,&p%c$'&&*)&**=*-*;*>*{&{&,*{&{&x&z%j$z%z%'*)*z%x%* = ", -")*!*A%~*{*]*^*/*(*_*:*<*[*}*.#|*1*O%2*3*4*5*6*7*Q&8*9*0*a*i&b*c*d*e*f*g*h*i*j*k*l*b#m*$*n*o*r&p*5.q*r*s*t*u*)&**=*v*v&w*{&{&x*{&,*y*)*z%)*z%)*)*)*z%* = ", -")*z*A*B*C*D*E*F*G*H*I*J*<*K*|*L*M*N*O*P*Q*R*S*T*U*5%V*R&W*X*Y*Z*`* =.=+=@=#=$=%=&=*===-=;=>=,='=)=f.r*!=t*~=)&**=*-*;*w*{&{={=,*]=^=!*/=(=)*_=!*)*)** = ", -"!*_=:=<=[=}=|=1=2=3=4=5=6=7=8=9=0=a=b=c=d=e=f=g=h=i=j=k=l=m=n=n=o=+&p=q=r=s=t=u=v=w=>&x=%*y=o*'=z=f.r*A=A=~=B=**=*C=v*D=E={={=,*F=G=(=)*(=(=_=(=_=_=* = ", -"H=I=I=J=K=L=M=N=O=P=Q=R=S=v#T=U=V=W=X=Y=Z=`=f= -.-+-@-#-Y%$-%-n=&-*-p==-r=--;->-,-'-)-!-~->=,={-]-z=^-/-A=&*&*}&(-C=_-;*w*{={=:-<-I=(=(=H=H=H=(=[-(=* = ", -"(=I=I=}-|-1-2-3-4-5-6-7-8-v#1=9-0-a-b-c-d-D@e-f-g-h-i-j-k-l-m-n-[$o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-Q-R-S-I=(=T-(=(=U-(=(=(=* = ", -"T-I=I=I=9$V-W-X-Y-Z-`- ;8-8-.;+;@;#;$;%;&;*;=;-;;;>;,;';);!;!;~;{;];^;/;(;_;:;<;[;};|;1;2;3;4;5;6;7;8;9;D-0;a;b;&#e+c;d;D=Q-e;f;I=I=g;(=T-h;i;i;(=j;* = ", -"H=I=I=I=I=k;l;m;n;m-o;3&p;[&q;r;s;t;u;v;]@w;=;x;y;z;A;B;<$C;D;E;F;|$:;G;H;I;J;K;L;M;N;O;P;Q;a;R;S;T;U;V;W;X;Y;Z;`; >Y;.>+>@>K-I=I=I=H=j;j;g;j;j;j;j;* = ", -"j;I=I=I=I=I=|;#>$>%>&>*>=>->;>>>,>'>)>!>~>{>=;]>^>^>/>(>_>:><>[>}>|>Z*1>2>3>4>5>l&6>7>8>9>0>a>b>c>d>e>f>g>h>i>j>k>l>m>n>2%% I=I=I=I=o>p>j;j;g;j;j;j;* = ", -"I=I=I=I=I=I=I=q>^>r>s>t>u>v>w>x>y>z>A>!>]@w;=;B>C>D>E>F>G>H>I>J>K>L>M>p=N>O>P>Q>R>S>T>U>V>W>X>Y>Z>`> ,.,+,@,#,$,T=%,&,*,=,I=I=I=I=I=-,;,j;;,p>p>>,;,* = ", -"j;I=I=I=I=I=I=I=I=,,',),!,~,{,_+],_#^,:+/,/,/,/,(,(,(,_,_,|+h&h&h&2+2+4+4+4+4+:,7+7+7+<,<,[,},|,a+1,2,3,a+3,4,p@f;5,,,I=I=I=I=I=I=I=j;6,j;j;p>p>6,-,* = ", -"-,7,>,7,7,-,8,>,p>j;-,8,p>p>8,6,6,p>7,8,6,6,p>7,7,;,8,p>6,7,6,7,6,8,6,j;p>-,p>6,7,>,-,6,8,-,>,8,-,6,>,7,-,6,7,p>6,8,6,-,8,7,;,I=I=7,p>8,6,;,7,6,;,7,* = ", -"8,6,6,6,-,6,6,7,8,6,6,6,6,6,6,6,-,6,8,6,p>p>6,6,7,6,6,6,6,6,6,6,7,6,6,6,6,j;6,6,6,-,6,-,6,6,6,6,7,7,-,6,6,6,6,6,6,-,6,6,>,6,6,6,8,6,-,-,6,6,6,-,6,6,* = ", -"9,6,6,0,6,6,6,6,9,6,6,6,6,6,6,6,6,6,6,6,6,0,6,6,6,6,0,6,0,9,6,a,6,6,6,b,6,6,6,6,0,6,9,6,6,b,0,6,b,6,6,6,6,6,6,a,6,6,6,6,6,9,6,0,6,6,6,6,6,6,b,6,6,6,* = ", -"0,6,0,0,9,0,0,0,9,b,c,6,c,a,b,6,c,9,c,I=d,d,0,d,I=0,d,b,e,e,e,e,e,e,e,e,e,e,e,e,e,6,a,9,6,6,0,6,6,0,a,9,6,9,9,0,a,0,b,9,b,9,9,9,0,b,0,d,0,d,b,a,0,6,* = ", -"c,b,I=c,I=d,I=d,c,c,I=6,0,c,a,d,9,a,6,a,d,d,6,a,e,e,e,e,e,i$f,g,h,1&1&1&h,g,f,i$e,e,e,e,e,0,0,d,9,a,a,6,0,c,d,0,0,0,d,c,c,c,c,a,a,I=a,a,9,c,d,I=c,b,* = ", -"c,9,I=c,c,6,c,c,c,a,0,c,0,I=c,I=c,c,I=c,a,d,e,e,e,i,1&1&1&g,j,k,l,m,n,m,l,k,j,g,1&1&1&i,e,e,e,d,c,0,b,c,c,9,c,a,c,c,a,c,I=a,c,I=c,c,c,c,c,c,d,0,I=c,* = ", -"c,c,o,c,c,c,c,o,c,a,o,o,c,c,c,p,c,c,c,e,e,e,q,1&1&r,s,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,s,r,1&1&q,e,e,e,c,a,c,c,c,o,c,c,c,c,o,c,c,c,c,o,t,c,c,c,a,c,o,c,* = ", -"o,c,o,p,u,c,u,p,o,o,v,w,c,c,c,u,p,o,e,e,r,1&h,s,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,s,h,1&r,e,e,o,v,o,o,p,o,p,v,c,w,c,p,c,o,p,p,o,o,w,w,o,c,x,* = ", -"y,c,p,p,o,o,p,o,v,o,y,w,w,v,p,x,e,e,q,1&g,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,g,1&q,e,e,x,w,o,v,w,p,c,o,w,o,w,x,p,p,x,o,w,w,c,w,y,* = ", -"y,c,y,y,u,w,w,c,u,y,y,y,u,w,w,e,e,1&1&m,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,m,1&1&e,e,y,y,u,w,u,y,w,u,y,w,x,y,w,p,w,x,o,w,y,y,* = ", -"y,w,z,y,y,w,y,w,y,A,y,A,y,y,e,j,1&i$n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,i$1&j,e,y,y,y,z,y,y,B,y,y,w,w,y,z,y,w,y,y,w,z,* = ", -"y,y,z,z,y,y,y,A,A,C,A,y,e,e,r,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&r,e,e,C,A,A,y,y,y,A,y,D,A,C,y,y,C,y,y,y,* = ", -"C,E,z,z,A,y,A,E,y,C,A,e,e,F,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&F,e,e,C,G,z,z,z,A,y,z,z,H,C,z,A,z,C,A,* = ", -"C,A,A,C,C,y,I,H,H,A,e,e,h,g,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,g,h,e,e,C,C,A,E,z,H,C,H,z,A,z,H,C,C,C,* = ", -"J,C,H,C,H,H,H,H,C,H,e,F,g,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,g,F,e,C,H,H,H,K,H,C,H,H,H,H,C,H,H,H,* = ", -"H,L,H,H,J,L,H,L,C,e,r,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&r,e,H,L,C,C,H,M,J,L,J,H,H,L,H,H,* = ", -"M,J,M,H,L,L,H,M,e,j,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&j,e,M,H,J,L,H,L,H,J,M,J,J,H,H,* = ", -"M,M,N,M,M,M,L,e,e,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&e,e,L,M,M,M,M,M,J,O,L,M,M,M,* = ", -"M,P,M,M,P,M,M,e,1&i$n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,m,l,Q,Q,R,n,n,n,n,n,n,n,n,n,n,n,n,i$1&e,M,P,M,S,M,P,M,M,M,M,P,M,* = ", -"S,M,T,U,P,V,e,q,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,i$g,F,h,g,g,F,i,m,n,n,n,n,n,n,n,n,n,n,n,1&q,e,M,P,P,M,M,P,M,V,M,S,M,* = ", -"W,P,S,P,P,e,e,1&m,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,X,f,h,q,X,R,n,n,n,m,i$g,m,n,n,n,n,n,n,n,n,n,n,m,1&e,e,M,V,P,S,W,Y,U,S,V,T,* = ", -"W,Y,W,T,P,e,r,g,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,s,r,g,k,n,n,n,n,n,n,n,n,n,m,Z,n,n,n,n,n,n,n,n,n,n,n,g,r,e,T,P,Y,S,Y,T,T,T,T,T,* = ", -"`,T,T,T,Y,e,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,i$g,Z,n,n,n,n,n,n,n,n,n,n,n,n,l,n,n,n,n,n,n,n,n,n,n,n,n,1&e,T,T,`,T,T,`,Y,W,T,T,* = ", -"T, '.'T,e,q,h,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,s,+'j,m,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,h,q,e,`,T,T,`,@'#'#'`,`,* = ", -"#'.'$'T,e,1&s,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,Z,g,X,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,s,1&e,T, '$' '.'`,@'$'$'* = ", -"%'%'%'e,e,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,q,i,m,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&e,e,@'%' '$'%'#'.'%'* = ", -"#'#'%'e,i,r,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,m,&'j,f,+'g,F,f,j,j,j,j,q,q,i,i,q,i$X,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,r,i,e,%'%'%'%'#' '%'%'* = ", -"%'%'%'e,1&s,n,n,n,n,n,n,n,n,n,n,n,n,n,R,q,F,+'Z,*'='='='='-'-'-'-';';';';';'-'-'='*'j,i$l,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,s,1&e,%'%'%'%'%'%'%'>'* = ", -"%'%'>'e,1&n,n,n,n,n,n,n,n,n,n,n,n,R,+'1&k,='='='-'-'-'-'-';';';';';';';',',',',',',',',','&'X,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&e,''%'%'%'''%'%')'* = ", -"!'~'e,e,1&n,n,n,n,n,n,n,n,n,n,n,f,F,k,='-';';';'-'-'-'q,+'-'-'1&;';';'F,1&+',','g,j,,'{'{'{','*'l,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&e,e,%']')'^'>']']'* = ", -"!'>'e,i$g,n,n,n,n,n,n,n,n,n,R,h,j,=';';';';';'-'-'-'-'+'1&-'-'1&;';'/'h,,',',','1&r,,'{'{'{'{'{'{'{'m,n,n,n,n,n,n,n,n,n,n,n,n,n,g,i$e,]')']'>'>'!'!'* = ", -"]']'e,f,j,n,n,n,n,n,n,n,n,n,g,Z,=';';';';';'-'-'-'-'-'g,1&-'-'1&;';'Z,g,,',',','1&g,,'{'{'{'{'{'*'*'('Q,n,n,n,n,n,n,n,n,n,n,n,n,j,f,e,]'!'_'!'!'!'!'* = ", -"!':'e,g,k,n,n,n,n,n,n,n,n,k,i,=',',';';';';'-'-'-'-'-'F,1&-'-'1&;';'e,1&,',',','1&F,,'{'{'{'{'{'*'('('(','n,n,n,n,n,n,n,n,n,n,n,k,g,e,!'_'_'!':'<'['* = ", -"_':'e,h,l,n,n,n,n,n,n,n,n,f,-';',',';';';';'-'-'-'-'-'1&1&-'-'1&;';';'1&i$,',','1&1&,'{'{'{'{'{'*'('('*'e,s,n,n,n,n,n,n,n,n,n,n,l,h,e,}'!':'}'['}'}'* = ", -"|'!'e,1&m,n,n,n,n,n,n,n,n,i,=',',',';';';';';'-'-'-'-'1&1&e,-'1&;';';'i$1&,',','F,1&*'{'{'{'{'{'*'('('('*'e,m,n,n,n,n,n,n,n,n,n,m,1&e,:'['['_'['['}'* = ", -"|'['e,1&n,n,n,n,n,n,n,n,n,k,-',',',';';';';';'-'-'-'('1&g,i$-'1&;';';','h,Z,,'/'+'1&&'{'{'{'{'{'*'('('('*'e,1'n,n,n,n,n,n,n,n,n,n,1&e,['|'}'['|'|'<'* = ", -"2'|'e,1&m,n,n,n,n,n,n,n,n,n,-',',',',';';';';';'-'-'&'1&r,f,;'1&;';';';'f,g,,'q,r,1&1'{'{'{'{'*'*'('('('*'e,f,n,n,n,n,n,n,n,n,n,m,1&e,|'|'|'|'|'|'['* = ", -"2'3'e,h,l,n,n,n,n,n,n,n,n,n,m,,',',',';';';';';';';'1'1&q,+';'1&;';';','*'1&,'+'q,1&i${'{'{'{'*'*'('('('*'&'F,n,n,n,n,n,n,n,n,n,l,h,e,3'4'3'3'3'2'|'* = ", -"3'4'e,g,k,n,n,n,n,n,n,n,n,n,n,-',',',',';';';';';';'j,+'Z,F,;'1&;';',',','1&,'g,i$g,f,{'{'{'{'*'*'('('*'e,/'+'n,n,n,n,n,n,n,n,n,k,g,e,3'|'5'2'4'4'4'* = ", -"4'2'e,f,j,n,n,n,n,n,n,n,n,n,n,n,;',',',',';';';';';'f,h,g,1&;'1&;',',',','1&,'F,g,h,F,{'{'{'{'*'*'('('e,k,h,X,n,n,n,n,n,n,n,n,n,j,f,e,5'4'6'3'4'5'2'* = ", -"7'7'e,i$g,n,n,n,n,n,n,n,n,n,n,n,n,R,{',',',';';';';'g,F,+'1&,'1&,',',','/'1&,'h,g,g,1&{'{'{'*'*'('('e,&'g,j,n,n,n,n,n,n,n,n,n,n,g,i$e,7'4'4'7'7'4'7'* = ", -"8'8'e,e,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,*'*',',',';';'1&i$,'1&e,1&r,q,q,F,1&i$,'1&&'1'1&{'{'{'*'('e,&'q,1&Z,n,n,n,n,n,n,n,n,n,n,n,1&e,e,7'4'9'0'7'4'a'* = ", -"9'0'8'e,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,R,k,Q,{',','q,e,,'q,e,q,q,i$,'q,&','*'q,{'e,q,{'*'*'e,&'Z,1&r,m,n,n,n,n,n,n,n,n,n,n,n,n,1&e,8'7'7'8'0'7'8'b'* = ", -"b'b'8'e,1&s,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,R,Z,/'e,*'*'{',',',',',',',','{'{'{'*'('e,e,&'1'r,h,f,l,n,n,n,n,n,n,n,n,n,n,n,n,n,s,1&e,8'8'0'7'8'c'7'b'* = ", -"c'8'0'e,i,r,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,m,1'q,f,q,j,Z,/'k,&'&'&'&'/'j,q,i,+'g,r,i$X,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,r,i,e,c'8'd'8'0'0'b'0'* = ", -"c'0'0'e,e,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,m,l,X,k,Z,r,F,j,Z,&'R,R,m,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&e,e,0'0'c'0'e'0'c'0'* = ", -"c'0'0'c'e,1&s,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,m,q,r,l,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,s,1&e,0'f'c'c'c'g'h'c'c'* = ", -"f'f'g'f'e,q,h,n,n,n,n,n,n,n,n,n,n,n,m,n,n,n,n,n,n,n,n,n,n,n,n,n,Z,g,Z,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,h,q,e,f'c'f'i'c'f'i'g'i'* = ", -"h'i'f'f'i'e,1&n,n,n,n,n,n,n,n,n,n,n,l,j'n,n,n,n,n,n,n,n,n,n,&'g,i,R,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&e,g'f'i'i'i'i'f'i'g'f'* = ", -"f'i'i'i'f'e,r,g,n,n,n,n,n,n,n,n,n,n,n,r,X,n,n,n,n,n,n,m,Z,F,g,Q,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,g,r,e,i'i'g'g'i'i'i'i'i'i'* = ", -"k'k'i'i'i'e,e,1&m,n,n,n,n,n,n,n,n,n,n,m,+'+'q,i$j,f,g,h,i,l,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,m,1&e,e,i'i'l'i'i'i'i'i'm'i'* = ", -"k'k'k'i'k'i'e,q,1&n,n,n,n,n,n,n,n,n,n,n,n,X,i$q,j,/'R,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&q,e,n'o'k'p'k'i'p'k'k'k'k'* = ", -"p'p'n'm'n'm'k'e,1&i$n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,i$1&e,l'i'm'l'k'q'l'l'o'k'm'k'* = ", -"i'm'i'q'm'q'm'e,e,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&e,e,p'k'q'i'n'l'o'm'q'q'q'n'* = ", -"m'q'q'p'p'q'p'q'e,j,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&j,e,n'q'p'q'n'm'q'n'p'q'q'q'n'* = ", -"q'q'q'q'q'q'q'q'q'e,r,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&r,e,q'q'q'q'q'r'q'q'q'q'q'q'q'q'* = ", -"r'q's's'r'q's'q'q't'e,F,g,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,g,F,e,q'q'r'r's'q's'q'u'q'q'q'q'q'q'* = ", -"v'u'u't't'w'u's'q's'e,e,h,g,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,g,h,e,e,u'w'q'q'q'v's'r'u's'r'u'q'v'q'* = ", -"w't'r'w'x'x'r's'r't't'e,e,F,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&F,e,e,x't'q'q'q'r't't'w'r'u's's'x'w't'* = ", -"x'w'x't'u'r'x'x'v'w's'r'e,e,r,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&r,e,e,x'w'x'w'x'w'x'u'r'q'x'x't'x't'x'x'* = ", -"t'x'x'x'x'x't't'x'x'x't'x'x'e,j,1&i$n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,i$1&j,e,x's'v't'x'x't'x'x'x'x'x't'x'u't'x'x't'* = ", -"t'x'x'x'x'x'x'y'y'x'x't'x'z'x'e,e,1&1&m,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,m,1&1&e,e,x'x'A'A'x'x'x'x'x'x'x'A'x'x'x'y'x'A'B'y'* = ", -"y'x'B'x'x'y'x'x'x'x'x'A'A'y'C'A'e,e,q,1&g,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,g,1&q,e,e,x'A'x'B'B'x'y'A'x'A'A'x'A'A'x'x'y'x'x'B'x'* = ", -"A'A'A'x'x'D'C'y'y'D'x'D'A'A'B'B'A'C'e,e,r,1&h,s,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,s,h,1&r,e,e,A'E'B'x'C'A'D'B'E'C'A'x'x'x'D'B'x'y'A'x'x'C'y'* = ", -"F'A'A'B'x'y'F'y'E'B'A'C'A'B'B'x'E'x'F'e,e,e,q,1&1&r,s,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,s,r,1&1&q,e,e,e,F'x'y'B'x'y'y'F'C'y'y'B'B'E'D'A'E'E'E'C'D'y'D'A'* = ", -"E'E'y'B'B'E'E'A'E'B'E'B'E'E'D'B'A'C'A'B'D'B'e,e,e,i,1&1&1&g,j,k,l,m,n,m,l,k,j,g,1&1&1&i,e,e,e,B'E'E'A'B'E'E'B'A'B'B'E'E'B'E'E'E'y'B'E'E'B'A'B'E'B'D'* = ", -"B'E'E'E'E'E'E'E'B'E'E'B'E'E'B'E'E'E'E'E'E'E'E'E'e,e,e,e,e,i$f,g,h,1&1&1&h,g,f,i$e,e,e,e,e,E'E'B'E'E'E'E'E'E'E'E'E'B'E'E'B'E'E'E'B'E'E'E'E'E'E'B'B'E'* = ", -"G'E'G'H'E'I'B'J'E'E'B'E'E'J'E'E'J'J'E'J'E'J'B'E'J'H'H'E'e,e,e,e,e,e,e,e,e,e,e,e,e,E'E'E'E'E'E'E'E'K'J'H'E'G'H'E'E'E'E'B'H'E'H'E'H'E'B'E'E'E'E'B'E'E'* = ", -"E'E'L'E'J'E'E'L'L'L'E'J'E'E'J'L'H'E'H'H'H'E'J'E'E'L'J'L'E'L'E'H'E'H'J'H'L'J'H'J'E'L'H'B'L'J'L'J'H'H'B'J'H'E'E'J'H'E'H'I'J'G'J'E'E'L'L'E'J'E'E'I'E'E'* = ", -"H'E'M'E'L'H'N'J'E'H'N'H'H'H'L'E'J'L'J'E'J'E'H'L'L'H'M'L'L'E'J'J'H'L'J'L'H'J'L'J'J'H'H'H'E'O'E'J'H'L'L'L'P'J'J'L'L'E'J'J'J'J'J'E'H'N'J'J'L'N'H'E'E'N'* = ", -"L'J'H'J'E'H'H'L'L'M'N'H'L'E'L'H'J'L'L'E'E'H'J'P'E'J'H'H'L'E'N'E'L'E'J'L'J'P'E'L'E'E'L'O'M'E'P'J'E'L'H'P'J'L'L'J'O'J'L'H'H'L'L'M'L'L'H'E'J'J'L'L'L'J'* = ", -"H'L'L'L'L'P'L'J'H'P'P'P'P'L'J'O'N'P'L'L'L'P'L'P'L'H'N'H'L'L'O'P'P'L'L'P'L'P'P'L'L'L'L'L'P'L'O'P'J'L'P'L'N'P'L'N'P'L'P'H'P'O'P'L'H'P'L'L'P'L'L'P'P'J'* = ", -"P'P'Q'R'% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % S'% S'% S'% % % T'k L'P'P'* = ", -"U'U'V'W'W'W'X'X'Y'Z'`'X'W'+ X'X'R'`'+ Z'`'R'Z'+ R'R'X'`' )W'`'X'W'Y'X'X'X'`'+ Z'`'X'W' )X'R'Z'`'X'W'Y'X'X'X'`'+ Y'`'`'`'`'`'W'`' ).)`'X'+ )< +)L'@)* = ", -"L'U'V'W'#)$)%)&)&)*)*)=)%)&)&)-)=)*)-)$)%)&)$)*)$);)$)=)&)-)%)>)=),)$);)&)%)=)')))$)&)=)-),);)$)))!)~)=)$)&)%)=)&)$);)$){)&)$)&)&)=)*)=)])^)/)U'P'()* = ", -"@)@)V'W'_):)<)<),)!).)[)~)})|)1)2)<)3)')<)')})))})-)1)>){)')4)1)2)5)2)')5)6)')<)7)))8)_))):)9)0)4){)1)a)&):)')_).)6)0).)3)b){)~)')c)d)])9)])e)()P'@)* = ", -"f)P'V'W'4)7)1)g)%)h)i)4)8)})b)Y'j)9)k)4)g)l)j)m):)n):)8)o)p):)5)i)|)>)[)>)Y'Z'b)m)0)q)r)5):),)7)s) )q)s):)9)t)c):)i)u)i)q)g)b)9)b)Y'd)6)d)9)e)f)()f)* = ", -"@)f)V'W',)~)c)q)v)w)x)X>y)w)x)x)x)x)x)x)y)x)x)x)x)x)X>x)x)z)y)X>X>X>X>w)z)w)y)y)y)y)y)y)X>y)y)y)y)y)X>y)X>y)y)a;y)y)y)a;X>X>y)X>X>v)])m)|)l)e)f)f)A)* = ", -"f)@)V'W'!)h).)2)]&B)C)D)E)F)F)F)F)F)F)F)F)E)E)G)H)D)I)B)J)C)C)C)B)B)B)J)K)L)M)N)N)N)O)P)Q)R)S)T)U)U)V)R)R)R)R)W)W)T)T)T)T)S)T)X)T)Y)5)c)t)k)e)f)f)#)* = ", -"f)#)V'W'{)4).).)Z)H)`) !F)F)F)F)F)F)F)F)F)F)E)E)E)H)E)`)`)D).!C)C)B)C)B)K)B)+!N)P)P)P)P)Q)@!Q)Q)V)R)V)R)R)T)R)T)T)S)S)S)S)S)#!#!T)s)$!o)h)%!e)f)f)&!* = ", -"f)*!V'W'%)3)0)m)S'C)`)#!y)v)v)v)v)=!v)-!v)v)v);!=!a;>!G)I),!;!'!v)v)v)v)w)w)X>a;a;v)a;v)X>>!L)s)4;a;a;y)a;y)v)y)y)y)y)X>y)y)y)s)@!d)*)|)])])e)#)#)#)* = ", -"#)f)Q'W'$)c)c)j)]&B)E)S')!% ^)!!$!$!l)l)l)t)l)$!!!;!G&H)B))!j&~!l){!{!d)4;)!,!]!{!Z){!~!a;=!B)>!)!%!{!^!Z)Z){!Z)Z)Z)Z)Z)Z)S'%!W)V)d)0)<)j)R'e)&!#)/!* = ", -"#)f)V'W'*)>)t).)]&.!(!~!y)G)_!:!:!:!:!!)!M)K)K)K)L)M)M)M)M)+!+!+!+!N)U)Q)1!2!|)3!t)e)4!*!4!* = ", -"&!4!V'W',)a)o)!)j&}!@!]&X>H)I)P)N)P)N)P)D) !`)H)Q)5![!D)C))!6!G)B)B)K)I)~!=!R)C)@!@!Q)+!>!=!C)]&)!P)R)|!6!|!|!6!|!|!|!|!|!|!1!|!7!$!Y'~)2!!!e)8!4!/!* = ", -"4!4!V'W'})k)[)9))!)!)!)!4;H)j&)!)!)!)!)!w)X)E)(!)!)!4;G)B))!|!G)B)K)L).!$!)!W)C)P)P)P)L)>!G&C)]&)!N)|!)!)!)!)!)!)!)!)!)!)!)!)!)!)!)!{!])^!h)e)4!4!*!* = ", -"4!9!V'W'~)b)h)g),!S)N)S'v)I)D)N)N)M)M)@!j&)!j&S)D)D).!G)M))!|!G)B)B)K)B)M)p'L)+!@!@!@!L)>!v)C)]&)!P)U)S)S)#!S)#!S)S)#!#!#!#!#!#!W)s)j)h)d)m)e)4!8!4!* = ", -"4!9!V'W'7)b)9)5)0!+!I)d)=!K)`)E)`)`)`)(!(!S)a;)!,!M)E)E)L))!|!D)L)L)L)M)K)B)+!P)@!Q)P)L)>!v)C)S')!M)N)+!+!N)+!N)+!P)P)P)P)P)P)V)@!1!3)])6)2!e)4!4!4!* = ", -"a!4!V'W'*):)4)1)>!R)L)Z)G&N)H)I)I)I)D)D)H)(!E)-)4;)!,!M)B))!|!D)B)L)L)M)+!N)N)N)P)P)P)L)5!=!B)]&)!q)|!Y)1!Y)1!1!Y)q)q)q)q)q)s)X)@!Y)3!})9)l)e)4!9!b!* = ", -"b!4!V'W'$)q),)j)5!T)+!$!)!P)D).!I)I)I)I)I)I)D)(!D)_))!7!B))!Y)D)K)L)M)+!N)P)N)N)P)Q)Q)L),!)!C){!)!)!)!)!)!)!)!)!)!)!)!)!)!)!)!7!L)Y)c!Y'd!!!e)4!4!e!* = ", -"4!4!V'2)!)<)o)6)5!T)T)N)W)L)B)B)C)I).!.!C)I)C)C)H)E)M)C).!U)M)B)K)L)M)M)N)N)P)@!Q)Q)Q)@!R)W)L)Q)S)S)T)S)S)S)#!S)#!S)f!#!#!#!X)O)Q)Y)8)r)i)t)e)4!g!b!* = ", -"g!e!V'W'$)7)k)|)@ T)S)Q)+!+!K)C)I)I)I)I)I)C)I)I)I)I)H)I)I)I)I)B)B)K)K)K)M)M)K)L)+!+!P)@!N)+!P)N)+!M)N)+!P)P)N)N)N)P)P)P)P)@!Q)T)U)1! ):)!!^!e)h!b!e!* = ", -"b!e!V'2)!)~)k)q)5!T)T)|!X)V)}!}!T)#!S)C)L).!+!W)W)U)#!T)Q)+!}!6!P)M)6!X)@!K)}!7!S)S)6!}!P)}!6!X)7!6!V)T)V)X)1!1!}!7!|!6!#!7!1!|!@!1!:):)9)9)/)g!g!e!* = ", -"a!i!V'W'&)[)Y'')5!R)X)y)5!0!s)Z)S'a;5!#!s)T){!4;X>v)4;Z)]&{!~!$!+!7!w)4;Z)#!=!s)5!4;{!Z)U){!a;w)Y)w)Y)s)1!m)$!{!>!>!j!a;S',!4;4;@!1!4)g)]!^)e)h!e!4!* = ", -"g!h!V'X'[)')c)j)>!U)T)|!S)}!N)P)P)X)R)X)}!X)P)U)T)S)T)R)K)U)B)B)I)N)P)P)X)}!}!}!#!#!6!}!+!S)6!7!7!6!|!6!Y)7!Q)V)#!|!|!X)S)|!|!1!N)|!k)8)h)t)e)i!g!h!* = ", -"g!g!V'X'o)2)4)s)j&X)X)#!S)R)T)V)@!O)N)N)+!N)L)+!M)M)N)O)N)N)P)@!Q)@!O)N)P)U)P)U)@!@!R)R)R)R)U)Q)T)U)R)R)T)T)T)T)R)R)T)R)R)R)T)T)V)q) )3!n)!!/)i!g!g!* = ", -"g!g!V'X'&)1)d)1)a;y)y)y)y)y)a;y)y)X>X>y)X>y)y)y)y)X>w)y)y)y)a;X>y)y)y)a;z)y)y)w)y)a;y)X>y)y)X>y)X>y)y)y)y)y)y)y)y)X>y)y)a;X>X>y)y)a;2!2)^)g)e)g!g!g!* = ", -"g!g!V'X'~).)9)3!5)|)6)p)])-)1)3!])b)b)g)5)k)2)5)2)|)k!o)3)4)_)5)9)1).)k!a)3!:)3)2!i)n)d!')0)h)5)2)k)))5)9)5)3!g)k)3!5)5)9)3!m)4):) )*)|)p)^)/)g!g!g!* = ", -"g!g!U,X'%)2)1)n)1)0)!!0)5)5)5)h)j)1)Y'])r)1)*)1)u)h)')>)3!3!d!c)5)i)h)n)[)i)5)g)j)9)i)1)^)6)d!3!')')!!0)c)|)'):)1)5)^!-)d)Y'k!8)l).)5)R'0)Y'e)g!g!g!* = ", -"g!g!V'X'a)5)X'^)*)!!l)u)l)^)u)l!X'X'!!R'5)!!X'u)_)d!u)d)X'u)]!!!!!^)~!j)!!u)9)d)^)^)^)!!9)l!^)^)l!j)u)0)u)9)!!u)!!j)])0)j)^)j)d)R'Z)R'9)m!]!e)g!g!g!* = ", -"g!g!z,.)`'`'j!j!n!% % j!j!!!n!j!j!n!n!n!j!n!j!n!n!j!j!n!n!n!j!n!j!n!n!j!j!n!n!n!j!n!j!n!n!j!j!n!n!n!j!n!j!j!n!n!n!j!n!j!n!% j!!!% n!!!j!% j&e)g!g!g!* = ", -"g!g!V'X'j!o!X>-!o!-!X>X>X>y)y)X>X>X>X>X>X>-!X>X>y)y)X>X>X>y)y)-!X>X>y)y)X>X>X>y)y)-!X>X>X>X>y)y)y)X>X>y)X>X>X>X>y)y)-!X>y)-!y)y)X>X>X>X>X>X>e)g!g!g!* = ", -"g!g!, /)e)p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!e)g!g!g!* = ", -"g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!* = ", -"g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!* q!", -"g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!r!)!", -"g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!s!)!", -"t!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!v!)!", -"% w!@ @ @ @ @ @ w!@ @ w!@ @ @ @ @ @ w!@ @ w!@ @ @ @ @ @ w!@ @ w!w!w!w!w!w!w!w!w!w!w!w!w!@ @ @ @ @ @ w!@ @ w!@ @ w!@ @ w!@ @ @ @ w!@ @ w!@ @ @ @ @ w!@ x!"}; +"76 253 22 1", +" c None", +". c #595966", +"+ c #6C6D7A", +"@ c #7F7F8C", +"# c #737481", +"$ c #6D6F7B", +"% c #757683", +"& c #60616D", +"* c #5B5B67", +"= c #777985", +"- c #5B5C68", +"; c #797A87", +"> c #5A5B67", +", c #767784", +"' c #686A76", +") c #6F717E", +"! c #7B7C89", +"~ c #656773", +"{ c #5F616C", +"] c #616370", +"^ c #5C5E6B", +"/ c #5C5D69", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"........................+@#....$%$......&%@@#*...*=@&.......................", +"........................+@%....%@%.....-;@@@%....>,@'.......................", +"........................)@,>...%@%.....#@!$)~....-!@+.......................", +"........................%@@-...%@%....{;!].......{@@#.......................", +"........................%@@^...%@%....]!;-.......]@@%.......................", +"........................,@@]...%@%....]!,>.......+@@,.......................", +".......................>,@@+...%@%....{;!~.......+@@,-......................", +".......................^;@@)...%@%.....,@+.......#@@;{......................", +".......................]!@@%...%@%.....)@%>......%@@!]......................", +".......................~@@@;...%@%.....^@@~......;@@@'......................", +".......................+@@@@...%@%......,@,......@@@@+......................", +".......................+@%@@...%@%......~@@].....@;!@$......................", +".......................#@#!@^..%@%.......#@#....{@,,@#......................", +".......................#@$,@~..%@%.......~!!]...{@%)@%>.....................", +".......................%@~%@+..%@%.......>,@$...'@#$@,-.....................", +"......................>,@{#@)..%@%........)@,>..+@#]@!^.....................", +"......................>;@>)@%..%@%........]@!^..$@$^@@{.....................", +"......................^@@.+@%..%@%.........@@'..%@+.@@~.....................", +"......................{@@.'@,>.%@%.........!@+..%@+.@@+.....................", +"......................'@%.]!;^.%@%.........%@#.>,!~.,@).....................", +"......................+@%.]!!].%@%.........%@#.>,!].%@%.....................", +"......................)@!%,@@~.%@%.........,@+.{;@,%!@;.....................", +"......................%@@@@@@+.%@%.........@@'.]!@@@@@@.....................", +"......................,@;%%!@$.%@%........{@@{.~!@,%,@@.....................", +"......................@@+..%@#.%@%....^~-{,@%..+@,-.{@@{....................", +"......................@@~..)@#.%@!##+.+@;!@!~..+@,>.^!@]....................", +"...................../@@{..+@,>%@@@@%.)@@@@'...)@%..-,@+....................", +".....................*++...^+~.~++++~..-+'>....]+~...'+{....................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................"}; diff --git a/hdspmixer/pixmaps/iomixer.xpm b/hdspmixer/pixmaps/iomixer.xpm index 15b7536..84aa4b3 100644 --- a/hdspmixer/pixmaps/iomixer.xpm +++ b/hdspmixer/pixmaps/iomixer.xpm @@ -1,513 +1,334 @@ /* XPM */ char const * iomixer_xpm[] = { -"36 253 257 2", -" c None", -". c #000000", -"+ c #080000", -"@ c #080808", -"# c #080810", -"$ c #001008", -"% c #101010", -"& c #181010", -"* c #002010", -"= c #101818", -"- c #181818", -"; c #201818", -"> c #002918", -", c #202018", -"' c #003118", -") c #202020", -"! c #202029", -"~ c #292020", -"{ c #202920", -"] c #392020", -"^ c #292920", -"/ c #292929", -"( c #004120", -"_ c #293131", -": c #412920", -"< c #313131", -"[ c #104A29", -"} c #393939", -"| c #394139", -"1 c #414141", -"2 c #20524A", -"3 c #414152", -"4 c #4A4141", -"5 c #414A41", -"6 c #4A4A41", -"7 c #4A4A4A", -"8 c #524A41", -"9 c #4A524A", -"0 c #525252", -"a c #734A29", -"b c #525A52", -"c c #5A5A52", -"d c #625A4A", -"e c #317B20", -"f c #5A625A", -"g c #62625A", -"h c #626A62", -"i c #6A6A62", -"j c #6A6A6A", -"k c #736A62", -"l c #737373", -"m c #7B736A", -"n c #737383", -"o c #9C7329", -"p c #737B73", -"q c #737B7B", -"r c #7B7B73", -"s c #7B7B7B", -"t c #AC6A5A", -"u c #7B8373", -"v c #7B837B", -"w c #83837B", -"x c #838383", -"y c #838B83", -"z c #8B8B83", -"A c #8B8B8B", -"B c #8B948B", -"C c #94948B", -"D c #949494", -"E c #949C94", -"F c #949C9C", -"G c #9C9C94", -"H c #9C9C9C", -"I c #9CA49C", -"J c #9CA4A4", -"K c #A4A49C", -"L c #A4A4A4", -"M c #C5A45A", -"N c #A4ACA4", -"O c #ACACA4", -"P c #ACACAC", -"Q c #B4B4AC", -"R c #C5B48B", -"S c #BDBDB4", -"T c #C5C5BD", -"U c #CDCDCD", -"V c #D5D5CD", -"W c #F6CDCD", -"X c #DEDED5", -"Y c #DEE6DE", -"Z c #E6E6E6", -"` c #EEEEEE", -" . c #F6EEEE", -".. c #F6F6F6", -"+. c #F6FFFF", -"@. c #FFFFFF", -"#. c #6699FF", -"$. c #66CC00", -"%. c #66CC33", -"&. c #66CC66", -"*. c #66CC99", -"=. c #66CCCC", -"-. c #66CCFF", -";. c #66FF00", -">. c #66FF33", -",. c #66FF66", -"'. c #66FF99", -"). c #66FFCC", -"!. c #66FFFF", -"~. c #990000", -"{. c #990033", -"]. c #990066", -"^. c #990099", -"/. c #9900CC", -"(. c #9900FF", -"_. c #993300", -":. c #993333", -"<. c #993366", -"[. c #993399", -"}. c #9933CC", -"|. c #9933FF", -"1. c #996600", -"2. c #996633", -"3. c #996666", -"4. c #996699", -"5. c #9966CC", -"6. c #9966FF", -"7. c #999900", -"8. c #999933", -"9. c #999966", -"0. c #999999", -"a. c #9999CC", -"b. c #9999FF", -"c. c #99CC00", -"d. c #99CC33", -"e. c #99CC66", -"f. c #99CC99", -"g. c #99CCCC", -"h. c #99CCFF", -"i. c #99FF00", -"j. c #99FF33", -"k. c #99FF66", -"l. c #99FF99", -"m. c #99FFCC", -"n. c #99FFFF", -"o. c #CC0000", -"p. c #CC0033", -"q. c #CC0066", -"r. c #CC0099", -"s. c #CC00CC", -"t. c #CC00FF", -"u. c #CC3300", -"v. c #CC3333", -"w. c #CC3366", -"x. c #CC3399", -"y. c #CC33CC", -"z. c #CC33FF", -"A. c #CC6600", -"B. c #CC6633", -"C. c #CC6666", -"D. c #CC6699", -"E. c #CC66CC", -"F. c #CC66FF", -"G. c #CC9900", -"H. c #CC9933", -"I. c #CC9966", -"J. c #CC9999", -"K. c #CC99CC", -"L. c #CC99FF", -"M. c #CCCC00", -"N. c #CCCC33", -"O. c #CCCC66", -"P. c #CCCC99", -"Q. c #CCCCCC", -"R. c #CCCCFF", -"S. c #CCFF00", -"T. c #CCFF33", -"U. c #CCFF66", -"V. c #CCFF99", -"W. c #CCFFCC", -"X. c #CCFFFF", -"Y. c #FF0000", -"Z. c #FF0033", -"`. c #FF0066", -" + c #FF0099", -".+ c #FF00CC", -"++ c #FF00FF", -"@+ c #FF3300", -"#+ c #FF3333", -"$+ c #FF3366", -"%+ c #FF3399", -"&+ c #FF33CC", -"*+ c #FF33FF", -"=+ c #FF6600", -"-+ c #FF6633", -";+ c #FF6666", -">+ c #FF6699", -",+ c #FF66CC", -"'+ c #FF66FF", -")+ c #FF9900", -"!+ c #FF9933", -"~+ c #FF9966", -"{+ c #FF9999", -"]+ c #FF99CC", -"^+ c #FF99FF", -"/+ c #FFCC00", -"(+ c #FFCC33", -"_+ c #FFCC66", -":+ c #FFCC99", -"<+ c #FFCCCC", -"[+ c #FFCCFF", -"}+ c #FFFF00", -"|+ c #FFFF33", -"1+ c #FFFF66", -"2+ c #FFFF99", -"3+ c #FFFFCC", -"4+ c #FFFFFF", -"5+ c #000000", -"6+ c #0D0D0D", -"7+ c #1A1A1A", -"8+ c #282828", -"9+ c #353535", -"0+ c #434343", -"a+ c #505050", -"b+ c #5D5D5D", -"c+ c #6B6B6B", -"d+ c #787878", -"e+ c #868686", -"f+ c #939393", -"g+ c #A1A1A1", -"h+ c #AEAEAE", -"i+ c #BBBBBB", -"j+ c #C9C9C9", -"k+ c #D6D6D6", -"l+ c #E4E4E4", -"m+ c #F1F1F1", -"n+ c #FFFFFF", -"o+ c #52524A", -"p+ c #524A52", -"q+ c #4A4A4A", -"r+ c #625A4A", -"s+ c #00005A", -"t+ c #311800", -"u+ c #291800", -"v+ c #412000", -"w+ c #311800", -"x+ c #311800", -"y+ c #311800", -"z+ c #412000", -"A+ c #4A2900", -"B+ c #000010", -"C+ c #4A4100", -"D+ c #4A4141", -"E+ c #4A4141", -"F+ c #292041", -"G+ c #8B8B29", -"H+ c #8B8B8B", -"7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", -"r m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m ", -"m P N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N ", -"k N L | } < < < < < < < < < } l N L N L 1 | | } | | | | | | | 1 w L L L ", -"k N L o o o o o o o o o o o o : N L N L ] : : : : : : : : : : ] & L L L ", -"k N L a o R M M M M M M M M ] & N L N L ; : W t t t t t t t t % . L L L ", -"k N L a o o @.o o o o o @.o ] & N L N L ; : a : : @.@.@.: : : & . L L L ", -"k L L a o o @.@.o o o @.@.o ] & L L L L ; : a : @.: : : : : : & . L L L ", -"k L L a o o @.@.o o o @.@.o : % L L L L ; : a : @.: : : : : : & . L L L ", -"k L L a o M @.o @.o @.o @.o : & L L L L ; : a : : @.@.: : : : & . L L L ", -"k L L a o o @.o @.o @.o @.o ] % L L L L ; : a : : : : @.: : : & . L L L ", -"k L L a a o @.o o @.o o @.o : & L L L L ; : a : : : : @.: : : & . L L L ", -"k L L a o M @.o o @.o o @.o ] & L L L L ; : a : @.@.@.] : : : & . L L L ", -"k L L a o a o o o o o o o a : & L L L L ; : : ] ] ] ] ] ] ] ; & . L L L ", -"k L L a ] % % # # # # # # & # % L L L L ; & . . . . . . . . . . . L L L ", -"k L L & . . . . . . . . . . . . L L L L + . . . . . . . . . . . . L L L ", -"k L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", -"k L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", -"k L A v v v v v v v v v v v v v v v v v v v v v v v v v v v v v A G I I ", -"k L x 1 | } < < _ _ / / / / / / / / / / / / / / / / _ _ < < } | 1 I J J ", -"k L y | < < _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ _ < 1 N N N ", -"k J y } < / / ! ) , - , - , - , - , - , - , - , - , , ) ! / / < } P N N ", -"k J y < _ / ! , - - = = = = = = = = = = = = = = = = = - , ! / _ < P N N ", -"k J y < / ! , - = % % # # # # # # # # # # # # # # % = = - , ! / < P N N ", -"k J y _ / ! - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ! / _ P N N ", -"k J y _ / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ) / _ P N N ", -"k J y < / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # & = - ) / _ P N N ", -"k J y < / ! , - = % % # # # # # # # # # # # # # # % % = - , ! / < P N N ", -"k J y < _ / ! , - - = = = = = = = = = = = = = = = = - - - ! / _ < P N N ", -"k J y } _ / / ! ) , - - - - - - - - - - - - - - , - , ) ! / / < } P N N ", -"k J A 1 < < _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ < < | Q N N ", -"k J E 1 1 } < < _ _ / / / / / / / / / / / / / / / / _ _ < < } 1 1 Q N N ", -"k J J P S S S S S S S S S S S S S S S S S S S S S S S S S S S S S Q L L ", -"k I J N N P P P P P P P P P P P P P P P P P P P P P P P P P P P P L J J ", -"k L J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ", -"k L A v v v v v v v v v v v v v v v v v v v v v v v v v v v v v A G I I ", -"k L x 1 | } < < _ _ / / / / / / / / / / / / / / / / _ _ < < } | 1 I J J ", -"k L y | < < _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ _ < 1 N N N ", -"k J y } < / / ! ) , - , - , - , - , - , - , - , - , , ) ! / / < } P N N ", -"k J y < _ / ! , - - = = = = = = = = = = = = = = = = = - , ! / _ < P N N ", -"k J y < / ! , - = % % # # # # # # # # # # # # # # % = = - , ! / < P N N ", -"k J y _ / ! - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ! / _ P N N ", -"k J y _ / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ) / _ P N N ", -"k J y < / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # & = - ) / _ P N N ", -"k J y < / ! , - = % % # # # # # # # # # # # # # # % % = - , ! / < P N N ", -"k J y < _ / ! , - - = = = = = = = = = = = = = = = = - - - ! / _ < P N N ", -"k J y } _ / / ! ) , - - - - - - - - - - - - - - , - , ) ! / / < } P N N ", -"k J A 1 < < _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ < < | Q N N ", -"k J E 1 1 } < < _ _ / / / / / / / / / / / / / / / / _ _ < < } 1 1 Q N N ", -"k J J P S S S S S S S S S S S S S S S S S S S S S S S S S S S S S Q L L ", -"k I J N N P P P P P P P P P P P P P P P P P P P P P P P P P P P P L J J ", -"k J B h < < < < < < < < < < < < < < < < < < < < < < < < < < < < h B H H ", -"k I A 7 c c 0 0 7 c 9 0 b 7 0 0 0 9 7 7 9 9 9 9 9 b 9 7 0 9 0 7 7 E I I ", -"k I A 0 9 c 0 9 c 0 9 9 9 b 0 c 0 c 9 9 9 7 b 7 9 c b b 9 9 c 7 < I I I ", -"k I A b 9 0 9 0 7 0 7 c b 7 7 c 7 c 9 9 7 0 0 0 9 9 9 9 0 0 c 5 { I I I ", -"k I A b 7 9 9 b b 7 7 b 7 b 7 7 9 0 b 0 9 9 c 7 9 9 7 9 7 7 7 1 / I I I ", -"k I A b b 0 7 0 0 7 7 0 b b 9 c f c h r w r r u w r s m g 0 c 1 / I I I ", -"k I A b c 7 9 7 / ) < 1 7 9 7 7 f 9 i . . . . . . . . . . 7 0 7 { I I I ", -"k I A b c c 9 1 ) m 4 9 9 c 9 c g 9 f . . . . . . . . . . 5 7 7 { I I I ", -"k I A b b 9 c 6 ^ d / f f 0 b 7 b 9 g . * $ * * * $ * > . 5 9 | ^ I I I ", -"k I z b 0 b 7 7 / 8 ~ h c 9 c 9 g 9 c . * * > > > ' > ( . | 9 5 / I I I ", -"k I A b c 7 9 7 ) 8 ~ i h c c 7 f c i . ' ' ( > ' ( ( [ . 1 7 | { I I I ", -"k I A b b 9 7 7 / 8 ~ k f 7 7 7 g 9 f . > ' ( ( ' ( ( [ . 1 9 7 / I I I ", -"k I A b b 7 7 1 ^ 8 ~ h f c 7 9 b 7 g . > > ' ' ( ' ( [ . 1 5 7 { I H H ", -"k I A b 9 0 9 | ^ 8 ~ k b 0 9 0 b 7 h . > ' ( ' ' ( ( [ . 5 5 7 ) H I I ", -"k I y b 9 7 7 5 { 8 ~ h b c 9 9 c 0 h . > ' ' ( ' ( ( [ . | 5 | ^ H H H ", -"k I y b 9 b 7 7 / 8 ~ i b c 9 7 f b h . > ' ' ' ( ' ( [ . | 9 5 / H H H ", -"k I A b c 9 b 6 / 8 ~ m f 9 0 9 b 9 h . > ' ' ' ' ( ( [ . 7 1 5 ^ H H H ", -"k I y b 0 9 0 | { 8 ~ h h 7 7 9 c b f . > ' ( ' ' ( ( [ . 5 0 | { H H H ", -"k I y b b 9 0 5 / 8 ~ i f 9 b 9 g 7 g . > > ' ( ' ' ( [ . 5 7 5 / H H H ", -"k I y 0 9 0 9 7 / 8 ~ m c 7 0 9 f 9 g . > > ( ( ' ' ( [ . 1 7 | { H H H ", -"k I y b 7 c b 7 / 8 ~ i c 0 0 7 0 c c . > > ' ( ' ( ( [ . | 0 | { H H H ", -"k I y 0 9 c b 5 / 8 ~ h f 7 0 9 0 c i . > ' ' > ( ' ( [ . 5 7 5 { H H H ", -"k I y b c 0 7 5 / 8 ~ h g 7 c 7 f b h . > > ' ' ( ' ( [ . | 5 7 ) H H H ", -"k I y 0 0 7 7 7 ) 8 ~ i h 7 0 c c 0 g . > ' ' ' ' ' ( [ . 1 9 7 ) H H H ", -"k I y 0 c 7 9 1 ) 8 ~ h c 9 c 9 g c c . ' ' ( ( ( ' ( [ . 7 7 5 / H H H ", -"k I y 0 7 0 9 | { 8 ~ h b c 7 b 0 0 f . ' ' ' ' ' ' ( [ . 1 9 1 / H H H ", -"k I y 0 9 b 7 1 ^ 8 ~ k f 9 0 9 c 9 g . > ' ( ' ( ' ( [ . 1 5 1 { H H H ", -"k I y 0 7 b c 7 { 8 ~ g h 0 7 c b c h . > > ' ' ' ' ( [ . 5 5 5 ^ H H H ", -"k I y 0 9 9 b 6 ) 8 ~ h f 9 7 9 g 9 g . > > ' ' ' ( ( [ . 7 5 1 ) H H H ", -"k I y 0 7 c 7 7 / 8 ~ h b 7 7 b f 7 h . > > ' ' ( ( ( [ . 1 5 7 ) H H H ", -"k I y 0 9 9 b 7 / 8 ~ k f 9 7 0 b 0 g . ' ' ( ' ' ' ( [ . 5 5 1 / H H F ", -"k H y 0 9 c 9 1 ^ 8 ~ k f b 7 c 0 c h . > ' ' ( ' ' ( [ . 1 9 | / H H F ", -"k H y 0 0 9 c | { 8 ~ i h 7 7 9 0 7 g . > > ( ( ' ( ( [ . 7 0 1 / H F H ", -"k H y 0 9 b 0 | ^ 8 ~ g f 9 7 9 b 9 h . ' > ( ' ' ' ( [ . 5 9 1 ) H H H ", -"k H y 0 9 c c 1 { 8 ~ h g b 9 c b 9 i . > ' ' > ( ' ( [ . | 7 1 { F H H ", -"k H y 0 0 9 9 1 ^ 8 ~ m b c 0 b f 9 f . > > ' ' ' ' ' [ . 7 7 5 { H H H ", -"k H y 0 7 b 0 5 { 8 ~ i b 0 c 7 0 c f . > ( ' ' ' ' ( [ . | 7 7 ^ F H H ", -"k H y 0 b 9 c 7 ) 8 ~ i h 9 9 7 f 9 g . > > ( ' ( ' ( [ . | 7 7 / F H H ", -"k H y 0 7 9 9 7 ^ 8 ~ i f 0 b 0 b 9 i . > > ' ' ' ' ( [ . | 9 1 ^ F H H ", -"k H y 0 0 0 b 1 { 8 ~ h b 9 9 c f c g . > ' ' ' ' ' ( [ . 7 5 1 ) F H H ", -"k H y 0 9 0 c 5 ) 8 ~ i g 9 b 9 g 9 g . > ' ( ' ' ( ( [ . | 0 1 ) F F F ", -"k H y 0 b b 9 1 { 8 ~ i h 0 7 9 9 7 f . > ( ' ' ' ( ( [ . 5 7 7 / F F F ", -"k H y 0 9 9 9 5 / 8 ~ h f 0 0 9 f 7 c . > > ' ( > ' ( [ . | 9 1 / F F F ", -"k H y 0 7 7 c | / 8 ~ g g 0 0 9 b 9 g . > ' ( ' ' ' ( [ . 7 9 1 / F F F ", -"k H y 0 9 7 9 5 / 8 ~ k b b b c b 0 f . > > ( ' ( ( ( [ . | 7 5 { F F F ", -"k H y 0 9 0 c 7 / 8 ~ h h 7 7 9 b 9 f . > > ' ( ( ' ( [ . 7 7 1 { F F E ", -"k H y 0 9 9 0 5 / 8 ~ h g 9 7 c g b f . > ' ' > ' ( ( [ . 7 0 1 ^ E E E ", -"k H x 0 9 9 9 1 / 8 ~ g g 9 7 7 f 9 f . > ' ' ( > ' ( [ . 5 0 | / E F F ", -"k H x 0 9 0 c | ^ 8 ~ k g 9 0 9 b 7 i . > > ( ' ' ' ( [ . 5 1 5 ^ E E E ", -"k F x 0 7 b c 5 / 8 ~ i c c 7 b b 7 h . > ' ( ' ' ' ( [ . 7 5 7 / E E E ", -"k F x 0 9 0 7 5 { 8 ~ m b 9 7 7 g c f . > > ( ' ' ' ( [ . 5 0 7 { E E E ", -"k G x 0 0 7 b 1 / 8 ~ k g c 9 b 0 b c . > ' > ' ' ' ( [ . | 5 5 ^ E E E ", -"k F x 0 c 0 9 | ^ 8 ~ i b c 0 0 c 7 f . > ' ' ' ' ( ( [ . 7 0 7 / E E E ", -"k F x 0 c b 0 1 / 8 ~ g h b 0 9 f 0 g . ' > ' ' ' ' ( [ . 1 7 1 ^ E E E ", -"k F x 0 9 0 0 7 / 8 ~ i f 9 0 0 f 9 i . > > ' ( ( ' ( [ . 5 5 5 / E E E ", -"k G x 0 7 9 c 7 ) 8 ~ g h 0 7 9 f 7 h . > > ( ' ' ' ( [ . 7 7 1 / E E E ", -"k G x 0 0 9 7 7 / 8 ~ g b 9 c b g 9 h . ' > ' ' ' ( ( [ . 5 9 5 ) E E E ", -"k F x 0 7 9 0 1 ^ 8 ~ h b 9 0 c c 7 f . > ' ( ' ( ' ( [ . 7 9 5 { E E E ", -"k G x 0 0 7 7 5 { 8 ~ h b b 9 9 f 9 f . > > ( ( ( ( ( [ . 5 5 7 { E E E ", -"k G x 0 c 7 c 7 { 8 ~ g h 0 9 9 g c g . * ' ( ' ' ( ( [ . 7 5 | / E E E ", -"k F x 0 c 7 9 7 { 8 ~ g f b 9 b 0 c c . ' ' ' ' ( ( ( [ . 5 9 1 ^ E E E ", -"k F x 0 0 9 0 5 { 8 ~ i b b 0 9 c 0 f . > ' ' ' ' ' ( [ . 1 5 5 / E E E ", -"k E x 0 c 9 b 7 { 8 ~ g h 9 c 9 0 0 h . > > ( ( ( ( ( [ . 1 7 7 / E E E ", -"k E x 0 9 b b 7 / 8 ~ g h 9 0 c f 0 f . ' ' ' ' ( ( ( [ . 5 9 1 ) E E E ", -"k E x 0 c 7 7 5 { 8 ~ i g 0 9 7 g b f . > > ' > ' ( ( [ . 5 1 7 { E E E ", -"k E x 0 b 7 7 1 ^ 8 ~ k f 0 c c 0 9 i . > > ' ' ' ( ( [ . | 0 7 ^ E E E ", -"k E x 0 9 9 b 1 / 8 ~ i g 9 0 c c b h . > ' ' ( ' ' ( [ . 5 7 7 { E E E ", -"k E x 0 b 9 7 5 ) 8 ~ l b 0 9 9 b 0 g . > > ( ' ' ' ( [ . 5 7 5 ^ E E E ", -"k E x 9 9 0 b 5 / 8 ~ h g 9 c 7 f 0 g . > ' ' ( ' ( ( [ . 1 7 7 { E E E ", -"k E x 0 0 b 9 5 / 8 ~ h c 9 9 7 f 9 h . > ' ' ' ' ( ( [ . 5 5 1 ) E D D ", -"k E x 0 9 9 0 7 { 8 ~ h f b 7 c g c h . > > ( ' > ' ( [ . 5 9 7 ) D E E ", -"k E x 9 9 0 0 1 / 8 ~ i f 9 0 b f 7 g . ' ' ' ( ' ( ( [ . 5 0 5 { D D D ", -"k E x 0 0 0 c 7 ^ 8 ~ m b 7 7 9 f 7 f . > ' ' ( ' ( ( [ . 7 7 7 ) E D D ", -"k E x 9 c 7 b | ^ 8 ~ k f 0 7 0 f 0 h . > > ( ' ( ( ( [ . 1 5 5 { D D D ", -"k E v 9 7 7 7 | ^ 8 ~ h f 0 9 c 0 9 h . > > ( ' ' ' ( [ . 1 9 5 { D D D ", -"k E v 0 9 7 9 5 { 8 ~ k g 9 9 9 g 7 f . > > ' ' ' ' ( [ . 1 9 5 / D D D ", -"k E v 9 0 9 0 7 ) 8 ~ h c 7 9 7 f 9 h . ' ' ( ' ' ' ( [ . 5 5 7 ^ D D D ", -"k E v 9 9 9 b 7 { 8 ~ h b b 9 0 g 9 f . > ' ' ( ' ( ( [ . 7 7 5 ) D D D ", -"k E v 9 9 9 0 5 { 8 ~ h b 9 b b b 9 g . > ' ' ( ' ' ( [ . 5 0 1 ^ D D D ", -"k E v 9 0 0 c 5 { 8 ~ h b c b b b 0 g . > > ' ( ' ' ' [ . 1 9 7 ) D D D ", -"k E v 9 9 7 9 | / 8 ~ i c c 9 9 0 c f . > > ( ' ' ' ( [ . 5 5 5 / D D D ", -"k E v 9 b c 0 7 { 8 ~ h b 0 9 0 f b h . > ' ( ' ' ( ( [ . 1 0 5 ^ D D D ", -"k E v 9 0 9 c 1 { 8 ~ m c 9 9 c c 0 h . > > ' ( ' ( ( [ . 7 1 7 { D D D ", -"k E v 9 b 7 0 5 / 8 ~ i f 7 b c g 9 f . > > ( ( ' ( ( [ . | 5 5 ^ D D D ", -"k D v 9 7 9 b 1 / 8 ~ i c 9 7 c b 9 h . > ' ' > ( ( ( [ . 5 9 5 / D D D ", -"k E v 9 7 c 0 7 { 8 ~ k b 0 9 0 g 7 i . > ' ' ' ( > ( [ . 1 0 7 / D D D ", -"k D v 9 0 7 9 1 ) 8 ~ i g 7 9 9 b 0 h . ' ' ( ( ( ' ( [ . 7 0 1 / D D D ", -"k D v 9 9 9 9 5 ^ 8 ~ h f 9 9 b g b f . > ' ' > ( ' ( [ . 7 1 5 ^ D D D ", -"k E v 9 9 b 9 5 ) 8 ~ h f c 9 b g 9 f . > ' ( ( ( ' ( [ . | 5 5 ) D D D ", -"k D v 9 b 7 b | { 8 ~ h b 9 b 7 c 0 f . > > ' ' ' ' ( [ . 6 0 5 ) D D D ", -"k D v 9 7 9 9 | / 8 ~ i g 0 0 9 g 9 f . > ' ' ' ' ( ( [ . 1 5 5 / D D D ", -"k D v 9 9 7 7 5 ^ 8 ~ g f 0 7 7 g 0 f . > ' ' ' ' ' ( [ . 7 0 5 / D D D ", -"k D v 9 9 7 7 5 { 8 ~ i f 9 0 c 0 7 g . > > ' ' ' > ( [ . 7 9 1 / D D D ", -"k D v 9 b b 9 | / 8 ~ h c 7 7 9 b 9 g . > > ( ' ' ( ( [ . | 0 7 ) D D D ", -"k D v 9 9 9 0 1 / 8 ~ i h 0 b 9 c 9 g . > ' ' ' ( ( ( [ . 7 1 1 ^ C C C ", -"k D v 9 0 c 9 7 { 8 ~ i h 0 b 9 f 7 i . > ( ( ' ( ' ( [ . 7 5 5 { C C C ", -"k D v 9 0 9 7 7 ^ 8 ~ i g 0 b 9 f 9 i . ' ' ' ' > ' ( [ . | 9 1 { C C C ", -"k D v 9 b 0 9 5 / 8 ~ h f 7 9 9 f 9 f . > > ( ' ( ' ' [ . 5 7 5 / C C C ", -"k D v 9 9 7 0 | / 8 ~ k g 7 9 9 c c g . > ' ( ' ' ' ( [ . | 9 | / C C C ", -"k D v 9 c 9 c 5 ) 8 ~ l b b 9 7 f b g . > > ' ' ' ( ( [ . 7 0 7 { B B B ", -"k D v 9 9 7 b 5 ) 8 ~ k g 9 9 9 b 9 h . ' ( ' ' ' ( ( [ . | 9 7 ) B C C ", -"k D v 9 9 7 0 1 ) 8 ~ i c 7 c 7 g 7 h . > ' ( ' ' ' ( [ . | 5 7 { C B B ", -"k D v 9 c b 7 5 { 8 ~ k f 7 9 c c b c . > ' ' ' ( ' ( [ . 5 7 7 ) C B B ", -"k D v 9 c 9 b | ^ 8 ~ g f 7 0 0 f b i . > ' ' ( ( ( ( [ . 5 9 | { B B B ", -"k D v 9 9 0 0 | / 8 ~ i b 7 9 9 b 0 f . > ' ' ( ' ( ( [ . 5 1 7 ^ B B B ", -"k D v 9 0 0 b 5 ) 8 ~ h h 7 9 0 0 0 g . ' ' ' ' ' ' ( [ . 5 9 7 / B B B ", -"k D v 9 c 9 b 5 ^ 8 ~ i g 9 9 7 g 0 h . ' > ' ( ( ' ( [ . 7 5 7 ^ B B B ", -"k D v 9 7 b c | { 8 ~ h f 7 b 9 f 9 i . ' ' ' ' ( ' ( [ . | 5 5 { B B B ", -"k C v 9 b 7 0 7 ^ 8 ~ h f 7 7 9 b 9 i . > ' ' ' ( ' ( [ . | 7 1 ) B B B ", -"k C v 9 7 9 9 7 { 8 ~ g g 0 9 0 g 9 h . > ' ( ' ( ' ( [ . 1 9 5 / B B B ", -"k C v 9 9 0 9 5 / 8 ~ k b 0 c 0 b 0 h . ' ' ( ' ( ( ( [ . 1 0 7 ^ B B B ", -"k C v 9 7 0 c | / 8 ~ g h 9 0 b f 9 f . ' ' ( ( ' ' ( [ . 7 1 1 { B B B ", -"k C v 9 0 b c 5 { 8 ~ h g 7 9 9 0 9 i . * > ' ' ( ' ( [ . 5 0 | { B B B ", -"k C v 9 7 c 9 5 ^ 8 ~ i h c 7 9 f b g . ' ' ' ( ( ( ( [ . | 9 | ) B B B ", -"k C v 9 7 0 9 | / 8 ~ g h 0 7 0 b b f . ' ' ' ' ( ( ( [ . 7 5 1 / B B B ", -"k B v 9 9 0 7 5 / 8 ~ h b 7 0 9 0 c h . > ' ' ' ' ( ( [ . 7 5 | / B B B ", -"k C s 9 0 c b 7 / 8 ~ k h 0 9 b g 9 h . > > ' ( ( ( ( [ . 7 5 1 / B B B ", -"k C B 9 7 b c 9 / 8 ~ g g c 0 7 9 b f . > ' ( ( ' ' ( [ . 1 5 7 / B B B ", -"k B B 9 9 0 0 0 { 8 ~ h c 7 9 c 9 c f . > ' ' ' ' ' ( [ . 1 9 | { B B B ", -"k B B 9 0 9 9 7 / 8 ~ h h 0 b 0 7 9 g . > ' ' ( ' ( ( [ . 1 0 5 ^ B B B ", -"k B B 7 0 7 7 0 ^ 8 ~ h f 9 0 0 b b c . ' ' ' ' ( ' ( [ . 7 5 5 / B B B ", -"k B B 7 0 0 0 9 / 8 ~ g f 7 9 9 b 9 i . > > ( ' ' ( ( [ . 7 9 5 / B A A ", -"k B A 7 0 0 c 7 { 8 ~ h g 7 c 7 9 9 f . > ' ' ( ' ( ( [ . 6 5 5 ^ B B B ", -"k B A 7 c 0 0 c ) 8 ~ i h 7 0 0 b 7 f . > ' ' ( ( ( ( [ . 7 9 | / A A A ", -"k B A 7 0 9 0 9 / 8 ~ i g 9 7 c 7 7 g . > > ( ' ' ( ( [ . | 5 7 ^ A A A ", -"k B A 7 0 7 7 c ^ 8 ~ i c 7 9 9 7 9 f . > ' ( ' ( ' ( [ . 7 7 5 ^ A A A ", -"k B A 7 7 9 9 c { 8 ~ h c 7 7 9 9 c c . > ' ' ' ( ' ( [ . 7 7 5 / A A A ", -"k B A 7 0 c 7 9 / 8 ~ i h c 9 9 0 b f . > ' ' > ' ' ( [ . 1 9 | ) A A A ", -"k B A 7 7 9 9 b ^ 8 ~ i g 7 b b 7 c g . ' > ( ' ' ' ( [ . 1 7 7 ^ A A A ", -"k B A 7 7 0 9 7 { 8 ~ h b c 7 b 7 0 f . ' ' ' ' ' ' ( [ . 1 9 1 / A A A ", -"k B A 7 9 7 0 9 ^ 8 ~ i f 9 9 7 7 9 h . > ' ' ' ( ' ( [ . | 7 1 ) A A A ", -"k B A 7 c 9 0 9 { 8 ~ i h 9 7 9 9 c h . > > ( ' ' ' ( [ . 1 0 | / A A A ", -"k B A 7 9 b 0 0 { 8 ~ g g 0 9 0 9 b f . > ' ' ' > ( ( [ . 5 7 5 ^ A A A ", -"k A A 7 9 9 b 7 { 8 ~ i b c 9 9 7 9 f . ' > ' ( ' ' ( [ . | 5 5 { A A A ", -"k B A 7 b b 7 c ^ 8 ~ i f 9 7 0 7 c f . > ' ( ' ' ' ( [ . 5 0 1 ) A A A ", -"k A A 7 0 b b 9 / 8 ~ k h c 9 0 9 7 f . ' > ( ' ' ' ( [ . 5 5 5 ^ A A A ", -"k A A 7 9 b 9 9 { 8 ~ k h 9 0 9 7 c h . > ' ( ( ' ' ( [ . 7 5 5 { A A A ", -"k A y 7 b 0 0 9 ^ 8 ~ i f 9 9 0 7 9 h . > > ( ' ( ( ' [ . 7 7 5 / y y y ", -"k A y 7 0 c 9 c / 8 ~ k h b 7 7 b 0 f . > > ' ' ' ( ( [ . 5 9 | ) y A A ", -"k A y 7 c 9 9 b ) 8 ~ i b 9 7 9 9 b f . > ' ( ' ' ' ( [ . | 1 7 ^ A y y ", -"k A y 6 0 b b 0 / 8 ~ m b 9 c 9 7 0 g . > > ' ' ( ' ( [ . 5 9 | / y y y ", -"k A y 6 9 b 0 7 { 8 ~ h f 7 9 b 9 0 h . > > ' ' ( ( ' [ . | 5 | { y y y ", -"k A y 6 9 0 9 b / 8 ~ i h 9 b b 9 b i . ' ' ( ' ' ' ( [ . | 5 5 ) y y y ", -"k A y 6 0 0 9 0 { 8 ~ k b 9 7 c 9 c g . > ' ( ' ( ' ( [ . 7 7 | ^ y y y ", -"k A y 6 c b b 7 { 8 ~ h g 0 7 0 0 7 f . > ' ( ' ( ( ( [ . | 1 5 / y y y ", -"k A y 6 7 7 c 9 ^ 8 ~ h b 0 0 0 b c f . ' ( [ [ [ [ [ [ . 5 7 1 ^ y y y ", -"k y y 5 9 0 b 0 < } - k c 7 c c c 9 i . ( [ 2 | e 2 5 | . 1 7 | { y y y ", -"k y y 5 c 9 7 7 9 ~ @ r h 0 9 9 9 9 0 . . . . . . . . . . | 5 1 { y y y ", -"k y y 5 0 0 0 0 b m w w b 9 0 0 0 7 9 5 | } 1 < < } < < } 1 9 7 ^ y y y ", -"k y y 5 7 9 9 b b b i f c 7 b b 7 c 9 0 5 7 1 7 5 5 7 7 1 7 9 7 ^ y y y ", -"k y y 5 0 9 0 b b 9 c c 9 c 7 9 9 9 c 0 7 0 9 9 7 7 9 0 9 9 9 | / y y y ", -"k y y 0 9 9 } } | < < } } 1 | } } | | | } | } | < } 1 < | 1 } < , y x x ", -"k y x p } = % # = # % % % % % % % & % % % # % % # % % % & % % % % y y y ", -"k y y x x x x y y y y x x y x y x x x x y y x x y x x x x y x y x x x x ", -"k y v s q q q q q q q q q q q q q q q q q q q q q q s q q q s s v x x x ", -"k y l h h h h h h g h h h h h h g h h h g h h h h g g h g h g h l v x x ", -"k y j 1 | } < < _ _ / / / / / / / / / / / / / / / / _ _ < < < | 1 v y y ", -"k y j | < _ _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ < < | B A A ", -"k y j < _ _ / ! ) , - , - , - , - , - , - , - , - , , ) ! / _ < | D B B ", -"k y j < _ / ! , - = = = = = = = = = = = = = = = = = - - , ! / _ < C A A ", -"k y j _ / ! , - = = % # # # # # # # # # # # # # # % % = - , ! / < C A A ", -"k y j _ / ! - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ) / _ C A A ", -"k x j / / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ) / _ C A A ", -"k x j _ / ) - = & # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ) / < C A A ", -"k x j _ / ! , - = % % # # # # # # # # # # # # # # % % = - , ! / < C A A ", -"k x j < _ / ! , - - = = = = = = = = = = = = = = = = - - , ! / _ < C A A ", -"k x j < _ / / ! ) - , - - - - - - - - - - - - - - , , ) ! / / < } C A A ", -"k x l | < < _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ < < | D A A ", -"k x q 1 1 } < < _ _ / / / / / / / / / / / / / / / / _ _ _ < } 1 1 H A A ", -"k x y B I K N K K K K K K K K K K K K K K K K K K K K K K K L K L E y y ", -"k x x A B B B B B B B B C C B B B B B B B B B B C C B C B B C B B y x x ", -"k x v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v ", -"k x v | } } } } } } } } } } } } } } } } } } } } } } } } } } } } } v v v ", -"k x v T V T T T T T T T T T T T T T T T T T T T T T T T T T T T T C v v ", -"k x v T Z +.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.f v v ", -"k x v O X ..................................................+...` | v v ", -"k x v Q X .` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` X 4 v v ", -"k v v O X .` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .` X 5 v v ", -"k v v Q X .` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .` X 6 v v ", -"k v v O X .` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .` X 6 v v ", -"k v v Q X ..` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .` X 6 v v ", -"k v v O X .` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .` X 6 v v ", -"k v v Q X .` ` . . . . . . . . . . . . . . . . . . . . . . .` Y 4 v v ", -"k v v O X U X X X X X X X X X X X X X X X X X X X X X X X X Y U O 6 s s ", -"k v v S C k h i h h h h h h h h h h h h h h h h h h h h h h i g f 6 v v ", -"k v s i , # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # v v ", -"k v v s s v v s v v v v v s s s v s v v v v s v v s v v s v v s s s v v ", -"k v s v v v s v v s v s s s v v s v v s v v v v s v s v s v v v v v v v ", -"k v s ) - = - = - = - = - = - = - = - = - = - = - = - = - = - = = q q q ", -"k v q / X n n n n n n n n n n n n n n n n n n n n n n n n n n n @ s s s ", -"k s s / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! @ q q q ", -"k s q / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! . q q q ", -"k s q / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! @ q q q ", -"k s q / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! @ q q q ", -"k s q / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! . q q q ", -"k s q / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! . q q q ", -"k s q / ! = = = = = = = = = = = = = = = = = = = = = = = = = = # @ q q q ", -"k s q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p q q ", -"k s q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p q q ", -"k s q q q q q q q q q p p q p q q q q q q p q q q q p q p q q q q q q q ", -"k j f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ", -"9 < _ / / / / / / _ / / _ / / _ / / _ / / / / _ / / _ / / / / / _ / / / "}; +"36 253 78 1", +" c #595966", +". c #2E3038", +"+ c #333342", +"@ c #2F2F3B", +"# c #27272B", +"$ c #616176", +"% c #4F4F5D", +"& c #474752", +"* c #28282B", +"= c #4E4E5C", +"- c #F1F1F2", +"; c #ABABB2", +"> c #696975", +", c #C3C3C7", +"' c #DFDFE2", +") c #E3E3E5", +"! c #93939C", +"~ c #28282C", +"{ c #4D4D5A", +"] c #E5E5E7", +"^ c #D0D0D3", +"/ c #D0D0D4", +"( c #E4E4E6", +"_ c #BEBEC3", +": c #757580", +"< c #52525F", +"[ c #676772", +"} c #29292C", +"| c #4C4C59", +"1 c #BCBCC1", +"2 c #61616D", +"3 c #62626D", +"4 c #BBBBC0", +"5 c #D9D9DC", +"6 c #5D5D69", +"7 c #29292D", +"8 c #4B4B59", +"9 c #E3E3E6", +"0 c #86868F", +"a c #96969E", +"b c #97979F", +"c c #85858E", +"d c #8D8D96", +"e c #F0F0F1", +"f c #C2C2C7", +"g c #787883", +"h c #2A2A2D", +"i c #4C4C58", +"j c #E4E4E5", +"k c #555561", +"l c #C8C8CB", +"m c #C8C8CC", +"n c #545460", +"o c #5A5A65", +"p c #97979E", +"q c #DEDEE0", +"r c #A0A0A7", +"s c #2A2A2E", +"t c #4B4B58", +"u c #C9C9CD", +"v c #575763", +"w c #DCDCDE", +"x c #2B2B2E", +"y c #4B4B57", +"z c #75757F", +"A c #7E7E86", +"B c #7C7C84", +"C c #B9B9BE", +"D c #2B2B2F", +"E c #494955", +"F c #B8B8BD", +"G c #DBDBDD", +"H c #BEBEC2", +"I c #64646E", +"J c #32323E", +"K c #313136", +"L c #000000", +"M c #737384", +" ", +" .................................. ", +" .................................. ", +" ..+@#########@+....+@#########@+.. ", +" ..@#$$$$$$$$$#@....@#$$$$$$$$$#@.. ", +" ..#$%%%%%%%%%&#....#$%%%%%%%%%&#.. ", +" ..*$==-;==;-=&*....*$==>,')!==&*.. ", +" ..~${{]^{{/({&~....~${{_:{<[{{&~.. ", +" ..}$||(1234(|&}....}$||56|||||&}.. ", +" ..7$8890abc98&7....7$88defg888&7.. ", +" ..h$iijklmnji&h....h$iiiopqrii&h.. ", +" ..s$tt)tumt)t&s....s$tttttvwtt&s.. ", +" ..x$yy)yzzy)y&x....x$yyAiyBCyy&x.. ", +" ..D$EE)EEEE)E&D....D$EEF]GHIEE&D.. ", +" ..JK&&&&&&&&&KJ....JK&&&&&&&&&KJ.. ", +" ..+JKKKKKKKKKJ+....+JKKKKKKKKKJ+.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..................LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ..................LLLLLLLLLL...... ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" .................................. ", +" .................................. ", +" "}; diff --git a/hdspmixer/pixmaps/iomixer_r.xpm b/hdspmixer/pixmaps/iomixer_r.xpm index cac66c9..963c846 100644 --- a/hdspmixer/pixmaps/iomixer_r.xpm +++ b/hdspmixer/pixmaps/iomixer_r.xpm @@ -1,513 +1,334 @@ /* XPM */ char const * iomixer_r_xpm[] = { -"36 253 257 2", -" c None", -". c #000000", -"+ c #080000", -"@ c #080808", -"# c #080810", -"$ c #001008", -"% c #101010", -"& c #181010", -"* c #002010", -"= c #101818", -"- c #181818", -"; c #201818", -"> c #002918", -", c #202018", -"' c #003118", -") c #202020", -"! c #202029", -"~ c #292020", -"{ c #202920", -"] c #392020", -"^ c #292920", -"/ c #292929", -"( c #004120", -"_ c #293131", -": c #412920", -"< c #313131", -"[ c #104A29", -"} c #393939", -"| c #394139", -"1 c #414141", -"2 c #20524A", -"3 c #414152", -"4 c #4A4141", -"5 c #414A41", -"6 c #4A4A41", -"7 c #4A4A4A", -"8 c #524A41", -"9 c #4A524A", -"0 c #525252", -"a c #734A29", -"b c #525A52", -"c c #5A5A52", -"d c #625A4A", -"e c #317B20", -"f c #5A625A", -"g c #62625A", -"h c #626A62", -"i c #6A6A62", -"j c #6A6A6A", -"k c #736A62", -"l c #737373", -"m c #7B736A", -"n c #737383", -"o c #9C7329", -"p c #737B73", -"q c #737B7B", -"r c #7B7B73", -"s c #7B7B7B", -"t c #AC6A5A", -"u c #7B8373", -"v c #7B837B", -"w c #83837B", -"x c #838383", -"y c #838B83", -"z c #8B8B83", -"A c #8B8B8B", -"B c #8B948B", -"C c #94948B", -"D c #949494", -"E c #949C94", -"F c #949C9C", -"G c #9C9C94", -"H c #9C9C9C", -"I c #9CA49C", -"J c #9CA4A4", -"K c #A4A49C", -"L c #A4A4A4", -"M c #C5A45A", -"N c #A4ACA4", -"O c #ACACA4", -"P c #ACACAC", -"Q c #B4B4AC", -"R c #C5B48B", -"S c #BDBDB4", -"T c #C5C5BD", -"U c #CDCDCD", -"V c #D5D5CD", -"W c #F6CDCD", -"X c #DEDED5", -"Y c #DEE6DE", -"Z c #E6E6E6", -"` c #EEEEEE", -" . c #F6EEEE", -".. c #F6F6F6", -"+. c #F6FFFF", -"@. c #FFFFFF", -"#. c #6699FF", -"$. c #66CC00", -"%. c #66CC33", -"&. c #66CC66", -"*. c #66CC99", -"=. c #66CCCC", -"-. c #66CCFF", -";. c #66FF00", -">. c #66FF33", -",. c #66FF66", -"'. c #66FF99", -"). c #66FFCC", -"!. c #66FFFF", -"~. c #990000", -"{. c #990033", -"]. c #990066", -"^. c #990099", -"/. c #9900CC", -"(. c #9900FF", -"_. c #993300", -":. c #993333", -"<. c #993366", -"[. c #993399", -"}. c #9933CC", -"|. c #9933FF", -"1. c #996600", -"2. c #996633", -"3. c #996666", -"4. c #996699", -"5. c #9966CC", -"6. c #9966FF", -"7. c #999900", -"8. c #999933", -"9. c #999966", -"0. c #999999", -"a. c #9999CC", -"b. c #9999FF", -"c. c #99CC00", -"d. c #99CC33", -"e. c #99CC66", -"f. c #99CC99", -"g. c #99CCCC", -"h. c #99CCFF", -"i. c #99FF00", -"j. c #99FF33", -"k. c #99FF66", -"l. c #99FF99", -"m. c #99FFCC", -"n. c #99FFFF", -"o. c #CC0000", -"p. c #CC0033", -"q. c #CC0066", -"r. c #CC0099", -"s. c #CC00CC", -"t. c #CC00FF", -"u. c #CC3300", -"v. c #CC3333", -"w. c #CC3366", -"x. c #CC3399", -"y. c #CC33CC", -"z. c #CC33FF", -"A. c #CC6600", -"B. c #CC6633", -"C. c #CC6666", -"D. c #CC6699", -"E. c #CC66CC", -"F. c #CC66FF", -"G. c #CC9900", -"H. c #CC9933", -"I. c #CC9966", -"J. c #CC9999", -"K. c #CC99CC", -"L. c #CC99FF", -"M. c #CCCC00", -"N. c #CCCC33", -"O. c #CCCC66", -"P. c #CCCC99", -"Q. c #CCCCCC", -"R. c #CCCCFF", -"S. c #CCFF00", -"T. c #CCFF33", -"U. c #CCFF66", -"V. c #CCFF99", -"W. c #CCFFCC", -"X. c #CCFFFF", -"Y. c #FF0000", -"Z. c #FF0033", -"`. c #FF0066", -" + c #FF0099", -".+ c #FF00CC", -"++ c #FF00FF", -"@+ c #FF3300", -"#+ c #FF3333", -"$+ c #FF3366", -"%+ c #FF3399", -"&+ c #FF33CC", -"*+ c #FF33FF", -"=+ c #FF6600", -"-+ c #FF6633", -";+ c #FF6666", -">+ c #FF6699", -",+ c #FF66CC", -"'+ c #FF66FF", -")+ c #FF9900", -"!+ c #FF9933", -"~+ c #FF9966", -"{+ c #FF9999", -"]+ c #FF99CC", -"^+ c #FF99FF", -"/+ c #FFCC00", -"(+ c #FFCC33", -"_+ c #FFCC66", -":+ c #FFCC99", -"<+ c #FFCCCC", -"[+ c #FFCCFF", -"}+ c #FFFF00", -"|+ c #FFFF33", -"1+ c #FFFF66", -"2+ c #FFFF99", -"3+ c #FFFFCC", -"4+ c #FFFFFF", -"5+ c #000000", -"6+ c #0D0D0D", -"7+ c #1A1A1A", -"8+ c #282828", -"9+ c #353535", -"0+ c #434343", -"a+ c #505050", -"b+ c #5D5D5D", -"c+ c #6B6B6B", -"d+ c #787878", -"e+ c #868686", -"f+ c #939393", -"g+ c #A1A1A1", -"h+ c #AEAEAE", -"i+ c #BBBBBB", -"j+ c #C9C9C9", -"k+ c #D6D6D6", -"l+ c #E4E4E4", -"m+ c #F1F1F1", -"n+ c #FFFFFF", -"o+ c #52524A", -"p+ c #524A52", -"q+ c #4A4A4A", -"r+ c #625A4A", -"s+ c #00005A", -"t+ c #311800", -"u+ c #291800", -"v+ c #412000", -"w+ c #311800", -"x+ c #311800", -"y+ c #311800", -"z+ c #412000", -"A+ c #4A2900", -"B+ c #000010", -"C+ c #4A4100", -"D+ c #4A4141", -"E+ c #4A4141", -"F+ c #292041", -"G+ c #8B8B29", -"H+ c #8B8B8B", -"7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 / ", -"m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m < ", -"P P N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N g ", -"N N L | } < < < < < < < < < } l N L N L 1 | | } | | | | | | | 1 w L L c ", -"N N L o o o o o o o o o o o o : N L N L ] : : : : : : : : : : ] & L L c ", -"N N L a o R M M M M M M M M ] & N L N L ; : W t t t t t t t t % . L L c ", -"N N L a o o @.o o o o o @.o ] & N L N L ; : a : : @.@.@.: : : & . L L c ", -"L L L a o o @.@.o o o @.@.o ] & L L L L ; : a : @.: : : : : : & . L L c ", -"L L L a o o @.@.o o o @.@.o : % L L L L ; : a : @.: : : : : : & . L L c ", -"L L L a o M @.o @.o @.o @.o : & L L L L ; : a : : @.@.: : : : & . L L c ", -"L L L a o o @.o @.o @.o @.o ] % L L L L ; : a : : : : @.: : : & . L L c ", -"L L L a a o @.o o @.o o @.o : & L L L L ; : a : : : : @.: : : & . L L c ", -"L L L a o M @.o o @.o o @.o ] & L L L L ; : a : @.@.@.] : : : & . L L c ", -"L L L a o a o o o o o o o a : & L L L L ; : : ] ] ] ] ] ] ] ; & . L L c ", -"L L L a ] % % # # # # # # & # % L L L L ; & . . . . . . . . . . . L L c ", -"L L L & . . . . . . . . . . . . L L L L + . . . . . . . . . . . . L L c ", -"L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L b ", -"L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L b ", -"L L A v v v v v v v v v v v v v v v v v v v v v v v v v v v v v A G I b ", -"L L x 1 | } < < _ _ / / / / / / / / / / / / / / / / _ _ < < } | 1 I J b ", -"L L y | < < _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ _ < 1 N N b ", -"J J y } < / / ! ) , - , - , - , - , - , - , - , - , , ) ! / / < } P N b ", -"J J y < _ / ! , - - = = = = = = = = = = = = = = = = = - , ! / _ < P N b ", -"J J y < / ! , - = % % # # # # # # # # # # # # # # % = = - , ! / < P N b ", -"J J y _ / ! - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ! / _ P N b ", -"J J y _ / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ) / _ P N b ", -"J J y < / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # & = - ) / _ P N b ", -"J J y < / ! , - = % % # # # # # # # # # # # # # # % % = - , ! / < P N b ", -"J J y < _ / ! , - - = = = = = = = = = = = = = = = = - - - ! / _ < P N 0 ", -"J J y } _ / / ! ) , - - - - - - - - - - - - - - , - , ) ! / / < } P N 0 ", -"J J A 1 < < _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ < < | Q N 0 ", -"J J E 1 1 } < < _ _ / / / / / / / / / / / / / / / / _ _ < < } 1 1 Q N 0 ", -"J J J P S S S S S S S S S S S S S S S S S S S S S S S S S S S S S Q L 0 ", -"I I J N N P P P P P P P P P P P P P P P P P P P P P P P P P P P P L J 0 ", -"L L J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J b ", -"L L A v v v v v v v v v v v v v v v v v v v v v v v v v v v v v A G I b ", -"L L x 1 | } < < _ _ / / / / / / / / / / / / / / / / _ _ < < } | 1 I J b ", -"L L y | < < _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ _ < 1 N N b ", -"J J y } < / / ! ) , - , - , - , - , - , - , - , - , , ) ! / / < } P N b ", -"J J y < _ / ! , - - = = = = = = = = = = = = = = = = = - , ! / _ < P N b ", -"J J y < / ! , - = % % # # # # # # # # # # # # # # % = = - , ! / < P N b ", -"J J y _ / ! - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ! / _ P N b ", -"J J y _ / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ) / _ P N b ", -"J J y < / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # & = - ) / _ P N b ", -"J J y < / ! , - = % % # # # # # # # # # # # # # # % % = - , ! / < P N b ", -"J J y < _ / ! , - - = = = = = = = = = = = = = = = = - - - ! / _ < P N 0 ", -"J J y } _ / / ! ) , - - - - - - - - - - - - - - , - , ) ! / / < } P N 0 ", -"J J A 1 < < _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ < < | Q N 0 ", -"J J E 1 1 } < < _ _ / / / / / / / / / / / / / / / / _ _ < < } 1 1 Q N 0 ", -"J J J P S S S S S S S S S S S S S S S S S S S S S S S S S S S S S Q L 0 ", -"I I J N N P P P P P P P P P P P P P P P P P P P P P P P P P P P P L J 0 ", -"J J B h < < < < < < < < < < < < < < < < < < < < < < < < < < < < h B H 0 ", -"I I A 7 c c 0 0 7 c 9 0 b 7 0 0 0 9 7 7 9 9 9 9 9 b 9 7 0 9 0 7 7 E I 0 ", -"I I A 0 9 c 0 9 c 0 9 9 9 b 0 c 0 c 9 9 9 7 b 7 9 c b b 9 9 c 7 < I I 0 ", -"I I A b 9 0 9 0 7 0 7 c b 7 7 c 7 c 9 9 7 0 0 0 9 9 9 9 0 0 c 5 { I I 0 ", -"I I A b 7 9 9 b b 7 7 b 7 b 7 7 9 0 b 0 9 9 c 7 9 9 7 9 7 7 7 1 / I I 0 ", -"I I A b b 0 7 0 0 7 7 0 b b 9 c f c h r w r r u w r s m g 0 c 1 / I I 0 ", -"I I A b c 7 9 7 / ) < 1 7 9 7 7 f 9 i . . . . . . . . . . 7 0 7 { I I 0 ", -"I I A b c c 9 1 ) m 4 9 9 c 9 c g 9 f . . . . . . . . . . 5 7 7 { I I 0 ", -"I I A b b 9 c 6 ^ d / f f 0 b 7 b 9 g . * $ * * * $ * > . 5 9 | ^ I I 0 ", -"I I z b 0 b 7 7 / 8 ~ h c 9 c 9 g 9 c . * * > > > ' > ( . | 9 5 / I I 0 ", -"I I A b c 7 9 7 ) 8 ~ i h c c 7 f c i . ' ' ( > ' ( ( [ . 1 7 | { I I 0 ", -"I I A b b 9 7 7 / 8 ~ k f 7 7 7 g 9 f . > ' ( ( ' ( ( [ . 1 9 7 / I I 0 ", -"I I A b b 7 7 1 ^ 8 ~ h f c 7 9 b 7 g . > > ' ' ( ' ( [ . 1 5 7 { I H 0 ", -"I I A b 9 0 9 | ^ 8 ~ k b 0 9 0 b 7 h . > ' ( ' ' ( ( [ . 5 5 7 ) H I 0 ", -"I I y b 9 7 7 5 { 8 ~ h b c 9 9 c 0 h . > ' ' ( ' ( ( [ . | 5 | ^ H H 0 ", -"I I y b 9 b 7 7 / 8 ~ i b c 9 7 f b h . > ' ' ' ( ' ( [ . | 9 5 / H H 0 ", -"I I A b c 9 b 6 / 8 ~ m f 9 0 9 b 9 h . > ' ' ' ' ( ( [ . 7 1 5 ^ H H 0 ", -"I I y b 0 9 0 | { 8 ~ h h 7 7 9 c b f . > ' ( ' ' ( ( [ . 5 0 | { H H 0 ", -"I I y b b 9 0 5 / 8 ~ i f 9 b 9 g 7 g . > > ' ( ' ' ( [ . 5 7 5 / H H 0 ", -"I I y 0 9 0 9 7 / 8 ~ m c 7 0 9 f 9 g . > > ( ( ' ' ( [ . 1 7 | { H H 0 ", -"I I y b 7 c b 7 / 8 ~ i c 0 0 7 0 c c . > > ' ( ' ( ( [ . | 0 | { H H 0 ", -"I I y 0 9 c b 5 / 8 ~ h f 7 0 9 0 c i . > ' ' > ( ' ( [ . 5 7 5 { H H 0 ", -"I I y b c 0 7 5 / 8 ~ h g 7 c 7 f b h . > > ' ' ( ' ( [ . | 5 7 ) H H 0 ", -"I I y 0 0 7 7 7 ) 8 ~ i h 7 0 c c 0 g . > ' ' ' ' ' ( [ . 1 9 7 ) H H 0 ", -"I I y 0 c 7 9 1 ) 8 ~ h c 9 c 9 g c c . ' ' ( ( ( ' ( [ . 7 7 5 / H H 0 ", -"I I y 0 7 0 9 | { 8 ~ h b c 7 b 0 0 f . ' ' ' ' ' ' ( [ . 1 9 1 / H H 0 ", -"I I y 0 9 b 7 1 ^ 8 ~ k f 9 0 9 c 9 g . > ' ( ' ( ' ( [ . 1 5 1 { H H 0 ", -"I I y 0 7 b c 7 { 8 ~ g h 0 7 c b c h . > > ' ' ' ' ( [ . 5 5 5 ^ H H 0 ", -"I I y 0 9 9 b 6 ) 8 ~ h f 9 7 9 g 9 g . > > ' ' ' ( ( [ . 7 5 1 ) H H 0 ", -"I I y 0 7 c 7 7 / 8 ~ h b 7 7 b f 7 h . > > ' ' ( ( ( [ . 1 5 7 ) H H 0 ", -"I I y 0 9 9 b 7 / 8 ~ k f 9 7 0 b 0 g . ' ' ( ' ' ' ( [ . 5 5 1 / H H 0 ", -"H H y 0 9 c 9 1 ^ 8 ~ k f b 7 c 0 c h . > ' ' ( ' ' ( [ . 1 9 | / H H 0 ", -"H H y 0 0 9 c | { 8 ~ i h 7 7 9 0 7 g . > > ( ( ' ( ( [ . 7 0 1 / H H 0 ", -"H H y 0 9 b 0 | ^ 8 ~ g f 9 7 9 b 9 h . ' > ( ' ' ' ( [ . 5 9 1 ) H F 0 ", -"H H y 0 9 c c 1 { 8 ~ h g b 9 c b 9 i . > ' ' > ( ' ( [ . | 7 1 { F H 0 ", -"H H y 0 0 9 9 1 ^ 8 ~ m b c 0 b f 9 f . > > ' ' ' ' ' [ . 7 7 5 { H H 0 ", -"H H y 0 7 b 0 5 { 8 ~ i b 0 c 7 0 c f . > ( ' ' ' ' ( [ . | 7 7 ^ F F 0 ", -"H H y 0 b 9 c 7 ) 8 ~ i h 9 9 7 f 9 g . > > ( ' ( ' ( [ . | 7 7 / F F 0 ", -"H H y 0 7 9 9 7 ^ 8 ~ i f 0 b 0 b 9 i . > > ' ' ' ' ( [ . | 9 1 ^ F F 9 ", -"H H y 0 0 0 b 1 { 8 ~ h b 9 9 c f c g . > ' ' ' ' ' ( [ . 7 5 1 ) F F 9 ", -"H H y 0 9 0 c 5 ) 8 ~ i g 9 b 9 g 9 g . > ' ( ' ' ( ( [ . | 0 1 ) F F 0 ", -"H H y 0 b b 9 1 { 8 ~ i h 0 7 9 9 7 f . > ( ' ' ' ( ( [ . 5 7 7 / F F 9 ", -"H H y 0 9 9 9 5 / 8 ~ h f 0 0 9 f 7 c . > > ' ( > ' ( [ . | 9 1 / F F 9 ", -"H H y 0 7 7 c | / 8 ~ g g 0 0 9 b 9 g . > ' ( ' ' ' ( [ . 7 9 1 / F F 9 ", -"H H y 0 9 7 9 5 / 8 ~ k b b b c b 0 f . > > ( ' ( ( ( [ . | 7 5 { F F 9 ", -"H H y 0 9 0 c 7 / 8 ~ h h 7 7 9 b 9 f . > > ' ( ( ' ( [ . 7 7 1 { F F 9 ", -"H H y 0 9 9 0 5 / 8 ~ h g 9 7 c g b f . > ' ' > ' ( ( [ . 7 0 1 ^ E E 9 ", -"H H x 0 9 9 9 1 / 8 ~ g g 9 7 7 f 9 f . > ' ' ( > ' ( [ . 5 0 | / E F 9 ", -"H H x 0 9 0 c | ^ 8 ~ k g 9 0 9 b 7 i . > > ( ' ' ' ( [ . 5 1 5 ^ E E 9 ", -"F F x 0 7 b c 5 / 8 ~ i c c 7 b b 7 h . > ' ( ' ' ' ( [ . 7 5 7 / E E 9 ", -"F F x 0 9 0 7 5 { 8 ~ m b 9 7 7 g c f . > > ( ' ' ' ( [ . 5 0 7 { E E 9 ", -"G G x 0 0 7 b 1 / 8 ~ k g c 9 b 0 b c . > ' > ' ' ' ( [ . | 5 5 ^ E E 9 ", -"F F x 0 c 0 9 | ^ 8 ~ i b c 0 0 c 7 f . > ' ' ' ' ( ( [ . 7 0 7 / E E 9 ", -"F F x 0 c b 0 1 / 8 ~ g h b 0 9 f 0 g . ' > ' ' ' ' ( [ . 1 7 1 ^ E E 9 ", -"F F x 0 9 0 0 7 / 8 ~ i f 9 0 0 f 9 i . > > ' ( ( ' ( [ . 5 5 5 / E E 9 ", -"G G x 0 7 9 c 7 ) 8 ~ g h 0 7 9 f 7 h . > > ( ' ' ' ( [ . 7 7 1 / E E 9 ", -"G G x 0 0 9 7 7 / 8 ~ g b 9 c b g 9 h . ' > ' ' ' ( ( [ . 5 9 5 ) E E 9 ", -"F F x 0 7 9 0 1 ^ 8 ~ h b 9 0 c c 7 f . > ' ( ' ( ' ( [ . 7 9 5 { E E 9 ", -"G G x 0 0 7 7 5 { 8 ~ h b b 9 9 f 9 f . > > ( ( ( ( ( [ . 5 5 7 { E E 9 ", -"G G x 0 c 7 c 7 { 8 ~ g h 0 9 9 g c g . * ' ( ' ' ( ( [ . 7 5 | / E E 9 ", -"F F x 0 c 7 9 7 { 8 ~ g f b 9 b 0 c c . ' ' ' ' ( ( ( [ . 5 9 1 ^ E E 9 ", -"F F x 0 0 9 0 5 { 8 ~ i b b 0 9 c 0 f . > ' ' ' ' ' ( [ . 1 5 5 / E E 9 ", -"E E x 0 c 9 b 7 { 8 ~ g h 9 c 9 0 0 h . > > ( ( ( ( ( [ . 1 7 7 / E E 9 ", -"E E x 0 9 b b 7 / 8 ~ g h 9 0 c f 0 f . ' ' ' ' ( ( ( [ . 5 9 1 ) E E 9 ", -"E E x 0 c 7 7 5 { 8 ~ i g 0 9 7 g b f . > > ' > ' ( ( [ . 5 1 7 { E E 9 ", -"E E x 0 b 7 7 1 ^ 8 ~ k f 0 c c 0 9 i . > > ' ' ' ( ( [ . | 0 7 ^ E E 9 ", -"E E x 0 9 9 b 1 / 8 ~ i g 9 0 c c b h . > ' ' ( ' ' ( [ . 5 7 7 { E E 9 ", -"E E x 0 b 9 7 5 ) 8 ~ l b 0 9 9 b 0 g . > > ( ' ' ' ( [ . 5 7 5 ^ E E 9 ", -"E E x 9 9 0 b 5 / 8 ~ h g 9 c 7 f 0 g . > ' ' ( ' ( ( [ . 1 7 7 { E E 9 ", -"E E x 0 0 b 9 5 / 8 ~ h c 9 9 7 f 9 h . > ' ' ' ' ( ( [ . 5 5 1 ) E D 9 ", -"E E x 0 9 9 0 7 { 8 ~ h f b 7 c g c h . > > ( ' > ' ( [ . 5 9 7 ) D E 9 ", -"E E x 9 9 0 0 1 / 8 ~ i f 9 0 b f 7 g . ' ' ' ( ' ( ( [ . 5 0 5 { D D 9 ", -"E E x 0 0 0 c 7 ^ 8 ~ m b 7 7 9 f 7 f . > ' ' ( ' ( ( [ . 7 7 7 ) E D 9 ", -"E E x 9 c 7 b | ^ 8 ~ k f 0 7 0 f 0 h . > > ( ' ( ( ( [ . 1 5 5 { D D 9 ", -"E E v 9 7 7 7 | ^ 8 ~ h f 0 9 c 0 9 h . > > ( ' ' ' ( [ . 1 9 5 { D D 9 ", -"E E v 0 9 7 9 5 { 8 ~ k g 9 9 9 g 7 f . > > ' ' ' ' ( [ . 1 9 5 / D D 9 ", -"E E v 9 0 9 0 7 ) 8 ~ h c 7 9 7 f 9 h . ' ' ( ' ' ' ( [ . 5 5 7 ^ D D 9 ", -"E E v 9 9 9 b 7 { 8 ~ h b b 9 0 g 9 f . > ' ' ( ' ( ( [ . 7 7 5 ) D D 9 ", -"E E v 9 9 9 0 5 { 8 ~ h b 9 b b b 9 g . > ' ' ( ' ' ( [ . 5 0 1 ^ D D 9 ", -"E E v 9 0 0 c 5 { 8 ~ h b c b b b 0 g . > > ' ( ' ' ' [ . 1 9 7 ) D D 9 ", -"E E v 9 9 7 9 | / 8 ~ i c c 9 9 0 c f . > > ( ' ' ' ( [ . 5 5 5 / D D 9 ", -"E E v 9 b c 0 7 { 8 ~ h b 0 9 0 f b h . > ' ( ' ' ( ( [ . 1 0 5 ^ D D 9 ", -"E E v 9 0 9 c 1 { 8 ~ m c 9 9 c c 0 h . > > ' ( ' ( ( [ . 7 1 7 { D D 9 ", -"E E v 9 b 7 0 5 / 8 ~ i f 7 b c g 9 f . > > ( ( ' ( ( [ . | 5 5 ^ D D 9 ", -"D D v 9 7 9 b 1 / 8 ~ i c 9 7 c b 9 h . > ' ' > ( ( ( [ . 5 9 5 / D D 9 ", -"E E v 9 7 c 0 7 { 8 ~ k b 0 9 0 g 7 i . > ' ' ' ( > ( [ . 1 0 7 / D D 9 ", -"D D v 9 0 7 9 1 ) 8 ~ i g 7 9 9 b 0 h . ' ' ( ( ( ' ( [ . 7 0 1 / D D 9 ", -"D D v 9 9 9 9 5 ^ 8 ~ h f 9 9 b g b f . > ' ' > ( ' ( [ . 7 1 5 ^ D D 9 ", -"E E v 9 9 b 9 5 ) 8 ~ h f c 9 b g 9 f . > ' ( ( ( ' ( [ . | 5 5 ) D D 7 ", -"D D v 9 b 7 b | { 8 ~ h b 9 b 7 c 0 f . > > ' ' ' ' ( [ . 6 0 5 ) D D 9 ", -"D D v 9 7 9 9 | / 8 ~ i g 0 0 9 g 9 f . > ' ' ' ' ( ( [ . 1 5 5 / D D 9 ", -"D D v 9 9 7 7 5 ^ 8 ~ g f 0 7 7 g 0 f . > ' ' ' ' ' ( [ . 7 0 5 / D D 7 ", -"D D v 9 9 7 7 5 { 8 ~ i f 9 0 c 0 7 g . > > ' ' ' > ( [ . 7 9 1 / D D 7 ", -"D D v 9 b b 9 | / 8 ~ h c 7 7 9 b 9 g . > > ( ' ' ( ( [ . | 0 7 ) D D 7 ", -"D D v 9 9 9 0 1 / 8 ~ i h 0 b 9 c 9 g . > ' ' ' ( ( ( [ . 7 1 1 ^ C C 7 ", -"D D v 9 0 c 9 7 { 8 ~ i h 0 b 9 f 7 i . > ( ( ' ( ' ( [ . 7 5 5 { C C 7 ", -"D D v 9 0 9 7 7 ^ 8 ~ i g 0 b 9 f 9 i . ' ' ' ' > ' ( [ . | 9 1 { C C 7 ", -"D D v 9 b 0 9 5 / 8 ~ h f 7 9 9 f 9 f . > > ( ' ( ' ' [ . 5 7 5 / C C 7 ", -"D D v 9 9 7 0 | / 8 ~ k g 7 9 9 c c g . > ' ( ' ' ' ( [ . | 9 | / C C 7 ", -"D D v 9 c 9 c 5 ) 8 ~ l b b 9 7 f b g . > > ' ' ' ( ( [ . 7 0 7 { B B 7 ", -"D D v 9 9 7 b 5 ) 8 ~ k g 9 9 9 b 9 h . ' ( ' ' ' ( ( [ . | 9 7 ) B C 7 ", -"D D v 9 9 7 0 1 ) 8 ~ i c 7 c 7 g 7 h . > ' ( ' ' ' ( [ . | 5 7 { C B 7 ", -"D D v 9 c b 7 5 { 8 ~ k f 7 9 c c b c . > ' ' ' ( ' ( [ . 5 7 7 ) C B 7 ", -"D D v 9 c 9 b | ^ 8 ~ g f 7 0 0 f b i . > ' ' ( ( ( ( [ . 5 9 | { B B 7 ", -"D D v 9 9 0 0 | / 8 ~ i b 7 9 9 b 0 f . > ' ' ( ' ( ( [ . 5 1 7 ^ B B 7 ", -"D D v 9 0 0 b 5 ) 8 ~ h h 7 9 0 0 0 g . ' ' ' ' ' ' ( [ . 5 9 7 / B B 7 ", -"D D v 9 c 9 b 5 ^ 8 ~ i g 9 9 7 g 0 h . ' > ' ( ( ' ( [ . 7 5 7 ^ B B 7 ", -"D D v 9 7 b c | { 8 ~ h f 7 b 9 f 9 i . ' ' ' ' ( ' ( [ . | 5 5 { B B 7 ", -"C C v 9 b 7 0 7 ^ 8 ~ h f 7 7 9 b 9 i . > ' ' ' ( ' ( [ . | 7 1 ) B B 7 ", -"C C v 9 7 9 9 7 { 8 ~ g g 0 9 0 g 9 h . > ' ( ' ( ' ( [ . 1 9 5 / B B 7 ", -"C C v 9 9 0 9 5 / 8 ~ k b 0 c 0 b 0 h . ' ' ( ' ( ( ( [ . 1 0 7 ^ B B 7 ", -"C C v 9 7 0 c | / 8 ~ g h 9 0 b f 9 f . ' ' ( ( ' ' ( [ . 7 1 1 { B B 7 ", -"C C v 9 0 b c 5 { 8 ~ h g 7 9 9 0 9 i . * > ' ' ( ' ( [ . 5 0 | { B B 7 ", -"C C v 9 7 c 9 5 ^ 8 ~ i h c 7 9 f b g . ' ' ' ( ( ( ( [ . | 9 | ) B B 7 ", -"C C v 9 7 0 9 | / 8 ~ g h 0 7 0 b b f . ' ' ' ' ( ( ( [ . 7 5 1 / B B 7 ", -"B B v 9 9 0 7 5 / 8 ~ h b 7 0 9 0 c h . > ' ' ' ' ( ( [ . 7 5 | / B B 7 ", -"C C s 9 0 c b 7 / 8 ~ k h 0 9 b g 9 h . > > ' ( ( ( ( [ . 7 5 1 / B B 7 ", -"C C B 9 7 b c 9 / 8 ~ g g c 0 7 9 b f . > ' ( ( ' ' ( [ . 1 5 7 / B B 7 ", -"B B B 9 9 0 0 0 { 8 ~ h c 7 9 c 9 c f . > ' ' ' ' ' ( [ . 1 9 | { B B 7 ", -"B B B 9 0 9 9 7 / 8 ~ h h 0 b 0 7 9 g . > ' ' ( ' ( ( [ . 1 0 5 ^ B B 7 ", -"B B B 7 0 7 7 0 ^ 8 ~ h f 9 0 0 b b c . ' ' ' ' ( ' ( [ . 7 5 5 / B B 7 ", -"B B B 7 0 0 0 9 / 8 ~ g f 7 9 9 b 9 i . > > ( ' ' ( ( [ . 7 9 5 / B A 7 ", -"B B A 7 0 0 c 7 { 8 ~ h g 7 c 7 9 9 f . > ' ' ( ' ( ( [ . 6 5 5 ^ B B 7 ", -"B B A 7 c 0 0 c ) 8 ~ i h 7 0 0 b 7 f . > ' ' ( ( ( ( [ . 7 9 | / A A 7 ", -"B B A 7 0 9 0 9 / 8 ~ i g 9 7 c 7 7 g . > > ( ' ' ( ( [ . | 5 7 ^ A A 7 ", -"B B A 7 0 7 7 c ^ 8 ~ i c 7 9 9 7 9 f . > ' ( ' ( ' ( [ . 7 7 5 ^ A A 7 ", -"B B A 7 7 9 9 c { 8 ~ h c 7 7 9 9 c c . > ' ' ' ( ' ( [ . 7 7 5 / A A 7 ", -"B B A 7 0 c 7 9 / 8 ~ i h c 9 9 0 b f . > ' ' > ' ' ( [ . 1 9 | ) A A 7 ", -"B B A 7 7 9 9 b ^ 8 ~ i g 7 b b 7 c g . ' > ( ' ' ' ( [ . 1 7 7 ^ A A 7 ", -"B B A 7 7 0 9 7 { 8 ~ h b c 7 b 7 0 f . ' ' ' ' ' ' ( [ . 1 9 1 / A A 6 ", -"B B A 7 9 7 0 9 ^ 8 ~ i f 9 9 7 7 9 h . > ' ' ' ( ' ( [ . | 7 1 ) A A 7 ", -"B B A 7 c 9 0 9 { 8 ~ i h 9 7 9 9 c h . > > ( ' ' ' ( [ . 1 0 | / A A 7 ", -"B B A 7 9 b 0 0 { 8 ~ g g 0 9 0 9 b f . > ' ' ' > ( ( [ . 5 7 5 ^ A A 6 ", -"A A A 7 9 9 b 7 { 8 ~ i b c 9 9 7 9 f . ' > ' ( ' ' ( [ . | 5 5 { A A 6 ", -"B B A 7 b b 7 c ^ 8 ~ i f 9 7 0 7 c f . > ' ( ' ' ' ( [ . 5 0 1 ) A A 6 ", -"A A A 7 0 b b 9 / 8 ~ k h c 9 0 9 7 f . ' > ( ' ' ' ( [ . 5 5 5 ^ A A 6 ", -"A A A 7 9 b 9 9 { 8 ~ k h 9 0 9 7 c h . > ' ( ( ' ' ( [ . 7 5 5 { A A 5 ", -"A A y 7 b 0 0 9 ^ 8 ~ i f 9 9 0 7 9 h . > > ( ' ( ( ' [ . 7 7 5 / y y 5 ", -"A A y 7 0 c 9 c / 8 ~ k h b 7 7 b 0 f . > > ' ' ' ( ( [ . 5 9 | ) y A 5 ", -"A A y 7 c 9 9 b ) 8 ~ i b 9 7 9 9 b f . > ' ( ' ' ' ( [ . | 1 7 ^ A y 6 ", -"A A y 6 0 b b 0 / 8 ~ m b 9 c 9 7 0 g . > > ' ' ( ' ( [ . 5 9 | / y y 5 ", -"A A y 6 9 b 0 7 { 8 ~ h f 7 9 b 9 0 h . > > ' ' ( ( ' [ . | 5 | { y y 5 ", -"A A y 6 9 0 9 b / 8 ~ i h 9 b b 9 b i . ' ' ( ' ' ' ( [ . | 5 5 ) y y 5 ", -"A A y 6 0 0 9 0 { 8 ~ k b 9 7 c 9 c g . > ' ( ' ( ' ( [ . 7 7 | ^ y y 5 ", -"A A y 6 c b b 7 { 8 ~ h g 0 7 0 0 7 f . > ' ( ' ( ( ( [ . | 1 5 / y y 5 ", -"A A y 6 7 7 c 9 ^ 8 ~ h b 0 0 0 b c f . ' ( [ [ [ [ [ [ . 5 7 1 ^ y y 5 ", -"y y y 5 9 0 b 0 < } - k c 7 c c c 9 i . ( [ 2 | e 2 5 | . 1 7 | { y y 5 ", -"y y y 5 c 9 7 7 9 ~ @ r h 0 9 9 9 9 0 . . . . . . . . . . | 5 1 { y y 5 ", -"y y y 5 0 0 0 0 b m w w b 9 0 0 0 7 9 5 | } 1 < < } < < } 1 9 7 ^ y y 5 ", -"y y y 5 7 9 9 b b b i f c 7 b b 7 c 9 0 5 7 1 7 5 5 7 7 1 7 9 7 ^ y y 5 ", -"y y y 5 0 9 0 b b 9 c c 9 c 7 9 9 9 c 0 7 0 9 9 7 7 9 0 9 9 9 | / y y 5 ", -"y y y 0 9 9 } } | < < } } 1 | } } | | | } | } | < } 1 < | 1 } < , y x 5 ", -"y y x p } = % # = # % % % % % % % & % % % # % % # % % % & % % % % y y 5 ", -"y y y x x x x y y y y x x y x y x x x x y y x x y x x x x y x y x x x 1 ", -"y y v s q q q q q q q q q q q q q q q q q q q q q q s q q q s s v x x 5 ", -"y y l h h h h h h g h h h h h h g h h h g h h h h g g h g h g h l v x 1 ", -"y y j 1 | } < < _ _ / / / / / / / / / / / / / / / / _ _ < < < | 1 v y 5 ", -"y y j | < _ _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ < < | B A 1 ", -"y y j < _ _ / ! ) , - , - , - , - , - , - , - , - , , ) ! / _ < | D B 1 ", -"y y j < _ / ! , - = = = = = = = = = = = = = = = = = - - , ! / _ < C A 5 ", -"y y j _ / ! , - = = % # # # # # # # # # # # # # # % % = - , ! / < C A 1 ", -"y y j _ / ! - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ) / _ C A 1 ", -"x x j / / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ) / _ C A 5 ", -"x x j _ / ) - = & # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ) / < C A 1 ", -"x x j _ / ! , - = % % # # # # # # # # # # # # # # % % = - , ! / < C A 5 ", -"x x j < _ / ! , - - = = = = = = = = = = = = = = = = - - , ! / _ < C A 1 ", -"x x j < _ / / ! ) - , - - - - - - - - - - - - - - , , ) ! / / < } C A 1 ", -"x x l | < < _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ < < | D A 1 ", -"x x q 1 1 } < < _ _ / / / / / / / / / / / / / / / / _ _ _ < } 1 1 H A 1 ", -"x x y B I K N K K K K K K K K K K K K K K K K K K K K K K K L K L E y 1 ", -"x x x A B B B B B B B B C C B B B B B B B B B B C C B C B B C B B y x 1 ", -"x x v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v 1 ", -"x x v | } } } } } } } } } } } } } } } } } } } } } } } } } } } } } v v 1 ", -"x x v T V T T T T T T T T T T T T T T T T T T T T T T T T T T T T C v 1 ", -"x x v T Z +.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.f v 1 ", -"x x v O X ..................................................+...` | v 1 ", -"x x v Q X .` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` X 4 v 1 ", -"v v v O X .` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .` X 5 v | ", -"v v v Q X .` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .` X 6 v | ", -"v v v O X .` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .` X 6 v | ", -"v v v Q X ..` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .` X 6 v | ", -"v v v O X .` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .` X 6 v | ", -"v v v Q X .` ` . . . . . . . . . . . . . . . . . . . . . . .` Y 4 v 1 ", -"v v v O X U X X X X X X X X X X X X X X X X X X X X X X X X Y U O 6 s | ", -"v v v S C k h i h h h h h h h h h h h h h h h h h h h h h h i g f 6 v | ", -"v v s i , # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # v | ", -"v v v s s v v s v v v v v s s s v s v v v v s v v s v v s v v s s s v | ", -"v v s v v v s v v s v s s s v v s v v s v v v v s v s v s v v v v v v | ", -"v v s ) - = - = - = - = - = - = - = - = - = - = - = - = - = - = = q q | ", -"v v q / X n n n n n n n n n n n n n n n n n n n n n n n n n n n @ s s | ", -"s s s / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! @ q q | ", -"s s q / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! . q q | ", -"s s q / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! @ q q | ", -"s s q / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! @ q q } ", -"s s q / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! . q q | ", -"s s q / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! . q q } ", -"s s q / ! = = = = = = = = = = = = = = = = = = = = = = = = = = # @ q q | ", -"s s q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p q } ", -"s s q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p q | ", -"s s q q q q q q q q q p p q p q q q q q q p q q q q p q p q q q q q q } ", -"k j f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f < ", -"9 < _ / / / / / / _ / / _ / / _ / / _ / / / / _ / / _ / / / / / _ / / / "}; +"36 253 78 1", +" c #595966", +". c #2E3038", +"+ c #333342", +"@ c #2F2F3B", +"# c #27272B", +"$ c #616176", +"% c #4F4F5D", +"& c #474752", +"* c #28282B", +"= c #4E4E5C", +"- c #F1F1F2", +"; c #ABABB2", +"> c #696975", +", c #C3C3C7", +"' c #DFDFE2", +") c #E3E3E5", +"! c #93939C", +"~ c #28282C", +"{ c #4D4D5A", +"] c #E5E5E7", +"^ c #D0D0D3", +"/ c #D0D0D4", +"( c #E4E4E6", +"_ c #BEBEC3", +": c #757580", +"< c #52525F", +"[ c #676772", +"} c #29292C", +"| c #4C4C59", +"1 c #BCBCC1", +"2 c #61616D", +"3 c #62626D", +"4 c #BBBBC0", +"5 c #D9D9DC", +"6 c #5D5D69", +"7 c #29292D", +"8 c #4B4B59", +"9 c #E3E3E6", +"0 c #86868F", +"a c #96969E", +"b c #97979F", +"c c #85858E", +"d c #8D8D96", +"e c #F0F0F1", +"f c #C2C2C7", +"g c #787883", +"h c #2A2A2D", +"i c #4C4C58", +"j c #E4E4E5", +"k c #555561", +"l c #C8C8CB", +"m c #C8C8CC", +"n c #545460", +"o c #5A5A65", +"p c #97979E", +"q c #DEDEE0", +"r c #A0A0A7", +"s c #2A2A2E", +"t c #4B4B58", +"u c #C9C9CD", +"v c #575763", +"w c #DCDCDE", +"x c #2B2B2E", +"y c #4B4B57", +"z c #75757F", +"A c #7E7E86", +"B c #7C7C84", +"C c #B9B9BE", +"D c #2B2B2F", +"E c #494955", +"F c #B8B8BD", +"G c #DBDBDD", +"H c #BEBEC2", +"I c #64646E", +"J c #32323E", +"K c #313136", +"L c #000000", +"M c #737384", +" ", +" .................................. ", +" .................................. ", +" ..+@#########@+....+@#########@+.. ", +" ..@#$$$$$$$$$#@....@#$$$$$$$$$#@.. ", +" ..#$%%%%%%%%%&#....#$%%%%%%%%%&#.. ", +" ..*$==-;==;-=&*....*$==>,')!==&*.. ", +" ..~${{]^{{/({&~....~${{_:{<[{{&~.. ", +" ..}$||(1234(|&}....}$||56|||||&}.. ", +" ..7$8890abc98&7....7$88defg888&7.. ", +" ..h$iijklmnji&h....h$iiiopqrii&h.. ", +" ..s$tt)tumt)t&s....s$tttttvwtt&s.. ", +" ..x$yy)yzzy)y&x....x$yyAiyBCyy&x.. ", +" ..D$EE)EEEE)E&D....D$EEF]GHIEE&D.. ", +" ..JK&&&&&&&&&KJ....JK&&&&&&&&&KJ.. ", +" ..+JKKKKKKKKKJ+....+JKKKKKKKKKJ+.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..................LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ..................LLLLLLLLLL...... ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" .................................. ", +" .................................. ", +" "}; diff --git a/hdspmixer/pixmaps/level.xpm b/hdspmixer/pixmaps/level.xpm index 3b776a5..446b4d8 100644 --- a/hdspmixer/pixmaps/level.xpm +++ b/hdspmixer/pixmaps/level.xpm @@ -1,399 +1,664 @@ /* XPM */ char const * level_xpm[] = { -"8 139 257 2", +"8 139 522 2", " c None", -". c #149003", -"+ c #24B114", -"@ c #2DC114", -"# c #35C91C", -"$ c #3DC91C", -"% c #4DD22D", -"& c #6EEA4D", -"* c #004816", -"= c #004849", -"- c #00487C", -"; c #0048AF", -"> c #0048E2", -", c #007B00", -"' c #007B16", -") c #007B49", -"! c #007B7C", -"~ c #007BAF", -"{ c #007BE2", -"] c #00AE00", -"^ c #00AE16", -"/ c #00AE49", -"( c #00AE7C", -"_ c #00AEAF", -": c #00AEE2", -"< c #00E100", -"[ c #00E116", -"} c #00E149", -"| c #00E17C", -"1 c #00E1AF", -"2 c #00E1E2", -"3 c #00FF00", -"4 c #00FF16", -"5 c #00FF49", -"6 c #00FF7C", -"7 c #00FFAF", -"8 c #00FFE2", -"9 c #161500", -"0 c #161516", -"a c #161549", -"b c #16157C", -"c c #1615AF", -"d c #1615E2", -"e c #164800", -"f c #164816", -"g c #164849", -"h c #16487C", -"i c #1648AF", -"j c #1648E2", -"k c #167B00", -"l c #167B16", -"m c #167B49", -"n c #167B7C", -"o c #167BAF", -"p c #167BE2", -"q c #16AE00", -"r c #16AE16", -"s c #16AE49", -"t c #16AE7C", -"u c #16AEAF", -"v c #16AEE2", -"w c #16E100", -"x c #16E116", -"y c #16E149", -"z c #16E17C", -"A c #16E1AF", -"B c #16E1E2", -"C c #16FF00", -"D c #16FF16", -"E c #16FF49", -"F c #16FF7C", -"G c #16FFAF", -"H c #16FFE2", -"I c #491500", -"J c #491516", -"K c #491549", -"L c #49157C", -"M c #4915AF", -"N c #4915E2", -"O c #494800", -"P c #494816", -"Q c #494849", -"R c #49487C", -"S c #4948AF", -"T c #4948E2", -"U c #497B00", -"V c #497B16", -"W c #497B49", -"X c #497B7C", -"Y c #497BAF", -"Z c #497BE2", -"` c #49AE00", -" . c #49AE16", -".. c #49AE49", -"+. c #49AE7C", -"@. c #49AEAF", -"#. c #49AEE2", -"$. c #49E100", -"%. c #49E116", -"&. c #49E149", -"*. c #49E17C", -"=. c #49E1AF", -"-. c #49E1E2", -";. c #49FF00", -">. c #49FF16", -",. c #49FF49", -"'. c #49FF7C", -"). c #49FFAF", -"!. c #49FFE2", -"~. c #7C1500", -"{. c #7C1516", -"]. c #7C1549", -"^. c #7C157C", -"/. c #7C15AF", -"(. c #7C15E2", -"_. c #7C4800", -":. c #7C4816", -"<. c #7C4849", -"[. c #7C487C", -"}. c #7C48AF", -"|. c #7C48E2", -"1. c #7C7B00", -"2. c #7C7B16", -"3. c #7C7B49", -"4. c #7C7B7C", -"5. c #7C7BAF", -"6. c #7C7BE2", -"7. c #7CAE00", -"8. c #7CAE16", -"9. c #7CAE49", -"0. c #7CAE7C", -"a. c #7CAEAF", -"b. c #7CAEE2", -"c. c #7CE100", -"d. c #7CE116", -"e. c #7CE149", -"f. c #7CE17C", -"g. c #7CE1AF", -"h. c #7CE1E2", -"i. c #7CFF00", -"j. c #7CFF16", -"k. c #7CFF49", -"l. c #7CFF7C", -"m. c #7CFFAF", -"n. c #7CFFE2", -"o. c #AF1500", -"p. c #AF1516", -"q. c #AF1549", -"r. c #AF157C", -"s. c #AF15AF", -"t. c #AF15E2", -"u. c #AF4800", -"v. c #AF4816", -"w. c #AF4849", -"x. c #AF487C", -"y. c #AF48AF", -"z. c #AF48E2", -"A. c #AF7B00", -"B. c #AF7B16", -"C. c #AF7B49", -"D. c #AF7B7C", -"E. c #AF7BAF", -"F. c #AF7BE2", -"G. c #AFAE00", -"H. c #AFAE16", -"I. c #AFAE49", -"J. c #AFAE7C", -"K. c #AFAEAF", -"L. c #AFAEE2", -"M. c #AFE100", -"N. c #AFE116", -"O. c #AFE149", -"P. c #AFE17C", -"Q. c #AFE1AF", -"R. c #AFE1E2", -"S. c #AFFF00", -"T. c #AFFF16", -"U. c #AFFF49", -"V. c #AFFF7C", -"W. c #AFFFAF", -"X. c #AFFFE2", -"Y. c #E21500", -"Z. c #E21516", -"`. c #E21549", -" + c #E2157C", -".+ c #E215AF", -"++ c #E215E2", -"@+ c #E24800", -"#+ c #E24816", -"$+ c #E24849", -"%+ c #E2487C", -"&+ c #E248AF", -"*+ c #E248E2", -"=+ c #E27B00", -"-+ c #E27B16", -";+ c #E27B49", -">+ c #E27B7C", -",+ c #E27BAF", -"'+ c #E27BE2", -")+ c #E2AE00", -"!+ c #E2AE16", -"~+ c #E2AE49", -"{+ c #E2AE7C", -"]+ c #E2AEAF", -"^+ c #E2AEE2", -"/+ c #E2E100", -"(+ c #E2E116", -"_+ c #E2E149", -":+ c #E2E17C", -"<+ c #E2E1AF", -"[+ c #E2E1E2", -"}+ c #E2FF00", -"|+ c #E2FF16", -"1+ c #E2FF49", -"2+ c #E2FF7C", -"3+ c #E2FFAF", -"4+ c #E2FFE2", -"5+ c #001500", -"6+ c #002200", -"7+ c #002F00", -"8+ c #0B3D0B", -"9+ c #184A18", -"0+ c #265826", -"a+ c #336533", -"b+ c #407240", -"c+ c #4E804E", -"d+ c #5B8D5B", -"e+ c #699B69", -"f+ c #76A876", -"g+ c #84B684", -"h+ c #91C391", -"i+ c #9ED09E", -"j+ c #ACDEAC", -"k+ c #B9EBB9", -"l+ c #C7F9C7", -"m+ c #D4FFD4", -"n+ c #E2FFE2", -"o+ c #006100", -"p+ c #001563", -"q+ c #001900", -"r+ c #A12400", -"s+ c #004900", -"t+ c #5E199F", -"u+ c #00D200", -"v+ c #001A00", -"w+ c #00FF00", -"x+ c #83183D", -"y+ c #00AF00", -"z+ c #472C51", -"A+ c #007B00", -"B+ c #3A1680", -"C+ c #006E00", -"D+ c #001800", -"E+ c #00FF00", -"F+ c #3F1555", -"G+ c #008600", -"H+ c #95154F", -". . . . . . . + ", -"+ + + + @ + # $ ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"@ $ % % % % % & ", -"$ % & & & & & % "}; +". c #FD0D0E", +"+ c #FD0E0E", +"@ c #FD0E0D", +"# c #FD1A0E", +"$ c #FC1A0E", +"% c #FD270F", +"& c #FC270E", +"* c #FC260E", +"= c #FC260F", +"- c #FD270E", +"; c #FC320F", +"> c #FC320E", +", c #FC330E", +"' c #FD320F", +") c #FC330F", +"! c #FC3F0F", +"~ c #FC3E0F", +"{ c #FC4A0F", +"] c #FB4A0F", +"^ c #FC4B0F", +"/ c #FB4B0F", +"( c #FB4B10", +"_ c #FC5710", +": c #FC5610", +"< c #FC570F", +"[ c #FB570F", +"} c #FB5710", +"| c #FB6310", +"1 c #FB6F10", +"2 c #FA6F10", +"3 c #FB7B10", +"4 c #FA7B11", +"5 c #FB7C11", +"6 c #FA7B10", +"7 c #FA7C10", +"8 c #FB7B11", +"9 c #FB8411", +"0 c #FA8511", +"a c #FA8411", +"b c #FB8511", +"c c #FA8410", +"d c #FB8510", +"e c #FA8C10", +"f c #FA8C11", +"g c #FB8C11", +"h c #FA9411", +"i c #FA9511", +"j c #FA9C11", +"k c #F99C11", +"l c #FA9C12", +"m c #FAA411", +"n c #F9A411", +"o c #FAA412", +"p c #FAA311", +"q c #F9AC12", +"r c #FAAC12", +"s c #FAAC11", +"t c #FAAB12", +"u c #F9AC11", +"v c #F9B412", +"w c #FAB412", +"x c #F9B312", +"y c #F9B411", +"z c #FAB411", +"A c #F9BC11", +"B c #F9BB12", +"C c #F9BC12", +"D c #F9BB11", +"E c #F9C312", +"F c #F9C412", +"G c #F9CC12", +"H c #F9CC13", +"I c #F9CB12", +"J c #F9CB13", +"K c #F8CB12", +"L c #F8D313", +"M c #F9D312", +"N c #F8D312", +"O c #F9D313", +"P c #F9D413", +"Q c #F9DB13", +"R c #F9DB12", +"S c #F8DB13", +"T c #F8DB12", +"U c #F8E313", +"V c #F9E413", +"W c #F8E312", +"X c #F8EB13", +"Y c #F8EA13", +"Z c #F8EB12", +"` c #F6EE13", +" . c #F6EF13", +".. c #F7EE13", +"+. c #F7EF13", +"@. c #F6EE12", +"#. c #F3EE13", +"$. c #F3ED13", +"%. c #F4ED13", +"&. c #F3EE12", +"*. c #F4EE13", +"=. c #F4EE12", +"-. c #F0EC12", +";. c #F0ED13", +">. c #F1ED13", +",. c #F1ED12", +"'. c #F1EC13", +"). c #F0ED12", +"!. c #EDEC12", +"~. c #EEEC12", +"{. c #EDEC13", +"]. c #EDEB12", +"^. c #EAEB12", +"/. c #EBEB12", +"(. c #E7EA11", +"_. c #E7EA12", +":. c #E8EA12", +"<. c #E8EB12", +"[. c #E4E911", +"}. c #E5E912", +"|. c #E5EA11", +"1. c #E5E911", +"2. c #E2E811", +"3. c #E1E812", +"4. c #E1E811", +"5. c #DEE811", +"6. c #DEE711", +"7. c #DFE711", +"8. c #DCE611", +"9. c #DCE610", +"0. c #DBE711", +"a. c #DBE611", +"b. c #D9E511", +"c. c #D9E611", +"d. c #D9E510", +"e. c #D6E510", +"f. c #D6E511", +"g. c #D5E511", +"h. c #D5E510", +"i. c #D2E410", +"j. c #D2E311", +"k. c #D2E310", +"l. c #CFE310", +"m. c #D0E310", +"n. c #CFE20F", +"o. c #CFE30F", +"p. c #CCE210", +"q. c #CDE210", +"r. c #CCE20F", +"s. c #C9E110", +"t. c #C9E10F", +"u. c #CAE210", +"v. c #CAE110", +"w. c #C6E10F", +"x. c #C7E010", +"y. c #C6E00F", +"z. c #C7E00F", +"A. c #C3DF0F", +"B. c #C4DF0F", +"C. c #C3E00F", +"D. c #C1DE0F", +"E. c #C0DF0F", +"F. c #C0DE0F", +"G. c #C1DF0F", +"H. c #C0DF0E", +"I. c #BEDE0F", +"J. c #BDDE0F", +"K. c #BDDE0E", +"L. c #BDDD0F", +"M. c #BEDE0E", +"N. c #BBDD0E", +"O. c #BADD0F", +"P. c #BBDD0F", +"Q. c #B7DC0E", +"R. c #B8DB0E", +"S. c #B7DC0F", +"T. c #B5DB0E", +"U. c #B5DA0D", +"V. c #B4DB0E", +"W. c #B2DA0D", +"X. c #B1DA0D", +"Y. c #B1DA0E", +"Z. c #B2DA0E", +"`. c #AED90E", +" + c #AFD90D", +".+ c #AFDA0E", +"++ c #AED90D", +"@+ c #AFD90E", +"#+ c #ACD80D", +"$+ c #ABD80D", +"%+ c #ACD90D", +"&+ c #ABD90D", +"*+ c #A8D70D", +"=+ c #A8D70C", +"-+ c #A9D70D", +";+ c #A5D70C", +">+ c #A5D60C", +",+ c #A5D70D", +"'+ c #A6D70D", +")+ c #A6D60D", +"!+ c #A6D70C", +"~+ c #A6D60C", +"{+ c #A3D50C", +"]+ c #A3D50D", +"^+ c #A3D60D", +"/+ c #A3D60C", +"(+ c #9FD50D", +"_+ c #9FD50C", +":+ c #A0D50D", +"<+ c #A0D50C", +"[+ c #A0D40D", +"}+ c #A0D40C", +"|+ c #9DD40C", +"1+ c #9CD40C", +"2+ c #9DD30C", +"3+ c #9AD30C", +"4+ c #99D30C", +"5+ c #9AD30B", +"6+ c #99D30B", +"7+ c #96D20B", +"8+ c #96D20C", +"9+ c #94D10C", +"0+ c #94D10B", +"a+ c #93D10B", +"b+ c #93D10C", +"c+ c #91D00B", +"d+ c #90D00B", +"e+ c #8ECF0B", +"f+ c #8DD00A", +"g+ c #8DCF0B", +"h+ c #8ED00A", +"i+ c #8ED00B", +"j+ c #8DD00B", +"k+ c #8ACE0A", +"l+ c #8BCE0B", +"m+ c #8BCE0A", +"n+ c #8BCF0A", +"o+ c #88CD0A", +"p+ c #88CD0B", +"q+ c #87CD0A", +"r+ c #87CE0A", +"s+ c #87CE0B", +"t+ c #84CC0A", +"u+ c #85CD0A", +"v+ c #85CC0A", +"w+ c #85CD0B", +"x+ c #84CD0A", +"y+ c #82CC0A", +"z+ c #82CB0A", +"A+ c #81CB0A", +"B+ c #81CB09", +"C+ c #7ECB0A", +"D+ c #7ECA0A", +"E+ c #7FCB09", +"F+ c #7FCB0A", +"G+ c #7ECB09", +"H+ c #7FCA0A", +"I+ c #7CCA0A", +"J+ c #7CCA09", +"K+ c #7BCA0A", +"L+ c #7BCA09", +"M+ c #7ACA0A", +"N+ c #7ACA09", +"O+ c #7AC909", +"P+ c #79C909", +"Q+ c #78C909", +"R+ c #78C90A", +"S+ c #79C809", +"T+ c #77C909", +"U+ c #76C90A", +"V+ c #77C809", +"W+ c #77C80A", +"X+ c #76C909", +"Y+ c #75C809", +"Z+ c #75C709", +"`+ c #73C709", +" @ c #73C809", +".@ c #74C709", +"+@ c #74C809", +"@@ c #73C708", +"#@ c #71C709", +"$@ c #71C609", +"%@ c #71C608", +"&@ c #71C708", +"*@ c #6FC608", +"=@ c #70C609", +"-@ c #70C608", +";@ c #70C709", +">@ c #6FC609", +",@ c #70C708", +"'@ c #6EC609", +")@ c #6EC608", +"!@ c #6EC508", +"~@ c #6DC608", +"{@ c #6CC508", +"]@ c #6DC509", +"^@ c #6AC508", +"/@ c #6BC508", +"(@ c #6BC408", +"_@ c #69C508", +":@ c #69C408", +"<@ c #68C408", +"[@ c #67C408", +"}@ c #68C407", +"|@ c #65C308", +"1@ c #65C408", +"2@ c #66C308", +"3@ c #64C308", +"4@ c #64C307", +"5@ c #63C208", +"6@ c #63C207", +"7@ c #62C208", +"8@ c #62C207", +"9@ c #61C208", +"0@ c #61C107", +"a@ c #60C207", +"b@ c #61C207", +"c@ c #5FC208", +"d@ c #5FC207", +"e@ c #5FC107", +"f@ c #5EC207", +"g@ c #5DC107", +"h@ c #5DC007", +"i@ c #5DC008", +"j@ c #5CC007", +"k@ c #5BC007", +"l@ c #5CC107", +"m@ c #59BF07", +"n@ c #59C006", +"o@ c #5AC007", +"p@ c #5ABF07", +"q@ c #59C007", +"r@ c #57BF07", +"s@ c #58BF06", +"t@ c #58BF07", +"u@ c #57C007", +"v@ c #57BF06", +"w@ c #58C007", +"x@ c #57BE07", +"y@ c #56BE07", +"z@ c #56BF06", +"A@ c #56BF07", +"B@ c #54BF07", +"C@ c #55BE06", +"D@ c #55BE07", +"E@ c #54BE06", +"F@ c #53BD06", +"G@ c #53BD07", +"H@ c #52BE07", +"I@ c #53BE06", +"J@ c #52BE06", +"K@ c #51BD06", +"L@ c #51BE06", +"M@ c #4FBD06", +"N@ c #50BD06", +"O@ c #50BC06", +"P@ c #4FBC07", +"Q@ c #4FBC06", +"R@ c #4EBD06", +"S@ c #4DBC05", +"T@ c #4DBC06", +"U@ c #4EBC06", +"V@ c #4EBC05", +"W@ c #4CBC05", +"X@ c #4CBB06", +"Y@ c #4CBC06", +"Z@ c #4BBB05", +"`@ c #4ABB06", +" # c #4ABC05", +".# c #4ABB05", +"+# c #4BBB06", +"@# c #48BA06", +"## c #49BB06", +"$# c #48BA05", +"%# c #48BB06", +"&# c #49BB05", +"*# c #46BA06", +"=# c #47BA06", +"-# c #47BA05", +";# c #46BA05", +"># c #45BA06", +",# c #45BA05", +"'# c #45B906", +")# c #44B905", +"!# c #44BA05", +"~# c #43B906", +"{# c #43B905", +"]# c #43BA05", +"^# c #41B905", +"/# c #41B906", +"(# c #42B905", +"_# c #42B805", +":# c #40B805", +"<# c #40B804", +"[# c #40B905", +"}# c #3FB805", +"|# c #3EB704", +"1# c #3EB805", +"2# c #3EB705", +"3# c #3FB705", +"4# c #3DB705", +"5# c #3DB704", +"6# c #3CB705", +"7# c #3CB704", +"8# c #3BB604", +"9# c #3BB705", +"0# c #3BB605", +"a# c #3AB605", +"b# c #39B604", +"c# c #39B605", +"d# c #3AB604", +"e# c #38B604", +"f# c #38B504", +"g# c #37B504", +"h# c #37B604", +"i# c #38B605", +"j# c #36B504", +"k# c #35B504", +"l# c #34B504", +"m# c #34B404", +"n# c #32B404", +"o# c #33B403", +"p# c #30B404", +"q# c #31B404", +"r# c #31B304", +"s# c #31B403", +"t# c #30B304", +"u# c #2FB304", +"v# c #2FB303", +"w# c #2DB303", +"x# c #2DB304", +"y# c #2DB203", +"z# c #2DB204", +"A# c #2CB204", +"B# c #2BB203", +"C# c #2BB204", +"D# c #2AB103", +"E# c #29B203", +"F# c #29B103", +"G# c #2AB203", +"H# c #28B103", +"I# c #26B003", +"J# c #26B103", +"K# c #27B102", +"L# c #27B003", +"M# c #24AF02", +"N# c #25B003", +"O# c #24B003", +"P# c #24AF03", +"Q# c #25B002", +"R# c #25AF02", +"S# c #23AF03", +"T# c #23B003", +"U# c #23AF02", +"V# c #21AF03", +"W# c #21AF02", +"X# c #22AF03", +"Y# c #20AF03", +"Z# c #20AF02", +"`# c #1FAE02", +" $ c #1FAF02", +".$ c #1EAE03", +"+$ c #1EAE02", +"@$ c #1EAD02", +"#$ c #1EAD03", +"$$ c #1CAE02", +"%$ c #1CAE03", +"&$ c #1CAD03", +"*$ c #1DAD02", +"=$ c #1AAD02", +"-$ c #1BAD02", +";$ c #19AC02", +">$ c #18AC01", +",$ c #19AC01", +"'$ c #18AC02", +")$ c #17AC02", +"!$ c #17AC01", +"~$ c #17AB02", +"{$ c #15AC02", +"]$ c #15AB02", +"^$ c #15AC01", +"/$ c #13AB02", +"($ c #14AB01", +"_$ c #14AB02", +":$ c #13AB01", +"<$ c #12AA01", +"[$ c #12AA02", +"}$ c #10AA01", +"|$ c #10AA02", +"1$ c #0FA901", +"2$ c #0EA902", +"3$ c #0FAA01", +"4$ c #0EA901", +"5$ c #0CA901", +"6$ c #0DA901", +"7$ c #0BA801", +"8$ c #0AA801", +"9$ c #0AA700", +"0$ c #09A801", +"a$ c #0AA701", +"b$ c #09A701", +"c$ c #07A701", +"d$ c #08A801", +"e$ c #07A801", +"f$ c #08A700", +"g$ c #08A800", +"h$ c #07A700", +"i$ c #08A701", +"j$ c #06A701", +"k$ c #06A600", +"l$ c #06A700", +"m$ c #04A600", +"n$ c #05A601", +"o$ c #04A601", +"p$ c #05A600", +"q$ c #02A600", +"r$ c #03A600", +"s$ c #03A500", +"t$ c #01A500", +"u$ c #00A500", +"v$ c #01A501", +"w$ c #01A600", +". + + + . + + . ", +"+ @ + + + . + @ ", +"# $ # $ # # # # ", +"% & * * * = = - ", +"; ; > , ' ) > ) ", +"! ~ ~ ~ ~ ! ~ ! ", +"{ ] ^ ^ ^ / ] ( ", +"_ : < [ [ [ [ } ", +"| | | | | | | | ", +"1 1 2 1 1 1 1 2 ", +"3 4 3 5 6 7 5 8 ", +"9 0 a b c d 9 0 ", +"e e f f f f g e ", +"h h h i h i h h ", +"j j j k j k k l ", +"m n o m n n m p ", +"q r q q s t u u ", +"v w w v x y z y ", +"A B C B B C D B ", +"E E F F E E E E ", +"G H I I J K G G ", +"L M N O O M P O ", +"Q Q R R S R T Q ", +"U V W U U U W W ", +"X X X X Y Z X X ", +"` ...+.+. . .@.", +"#.$.%.&.*.&.&.=.", +"-.;.>.>.,.;.'.).", +"!.~.{.~.].!.~.!.", +"^./.^./.^./././.", +"(._._.:.<.<._._.", +"[.}.[.|.1.1.[.}.", +"2.3.2.4.2.2.3.2.", +"5.6.6.5.5.7.5.6.", +"8.9.0.0.8.0.a.0.", +"b.c.c.c.c.c.c.d.", +"e.f.g.e.g.h.g.e.", +"i.i.i.i.j.k.k.i.", +"l.m.l.m.n.m.o.m.", +"p.q.q.r.q.q.q.p.", +"s.t.s.t.t.u.s.v.", +"w.x.y.z.z.w.y.z.", +"A.B.A.B.B.B.C.B.", +"D.D.E.F.D.G.G.H.", +"I.J.K.I.L.J.J.M.", +"N.N.N.N.O.P.N.N.", +"Q.R.Q.Q.S.Q.S.R.", +"T.T.T.U.V.T.T.T.", +"W.X.X.W.X.Y.Z.Y.", +"`. + +.+++`.@+++", +"#+#+$+#+#+$+%+&+", +"*+*+*+*+*+=+*+-+", +";+>+,+'+>+)+!+~+", +"{+]+]+^+/+/+{+/+", +"(+_+_+:+<+<+[+}+", +"|+1+|+|+2+1+2+|+", +"3+4+5+5+4+4+3+6+", +"7+8+8+7+8+7+7+8+", +"9+0+0+0+0+a+9+b+", +"c+c+d+c+c+c+d+c+", +"e+e+f+g+h+g+i+j+", +"k+k+k+l+m+n+l+l+", +"o+p+q+q+r+q+q+s+", +"t+u+v+w+x+u+v+x+", +"y+z+y+A+B+A+A+A+", +"C+D+E+F+C+F+G+H+", +"I+J+J+I+I+J+K+L+", +"M+N+O+N+O+N+O+O+", +"P+Q+R+Q+P+Q+S+R+", +"T+U+T+T+T+V+W+X+", +"Y+Y+Z+Y+Y+Y+Y+Y+", +"`+ @.@ @+@`+@@`+", +"#@$@%@#@#@&@#@&@", +"*@=@*@-@;@-@>@,@", +"'@'@)@!@'@'@'@'@", +"~@{@{@{@~@{@{@]@", +"^@/@(@/@(@/@^@^@", +"_@:@<@:@:@:@:@_@", +"[@[@[@[@[@}@<@<@", +"|@1@|@2@2@2@|@|@", +"3@3@4@5@3@3@6@3@", +"7@7@8@8@7@8@7@8@", +"9@9@0@0@a@a@b@0@", +"c@d@e@e@e@e@e@f@", +"g@g@g@h@g@i@g@g@", +"j@j@k@k@j@j@l@k@", +"m@n@o@o@p@q@p@o@", +"r@s@t@u@v@t@w@t@", +"x@y@z@A@v@A@A@A@", +"B@C@B@D@C@E@D@C@", +"F@G@H@I@I@I@J@F@", +"K@K@H@L@K@K@K@K@", +"M@N@M@O@P@Q@N@M@", +"R@S@T@U@U@V@T@T@", +"W@X@W@Y@X@Y@Y@Y@", +"Z@`@ #`@.#`@+#`@", +"@###$#%#&#&###$#", +"*#=#-#=#;#=#;#*#", +">#;#,#'#'#;#'#,#", +")#!#~#~#{#]#)#)#", +"^#/#(#(#(#_#(#^#", +":#:#<#[#:#:#:#:#", +"}#|#1#}#2#1#3#1#", +"4#4#4#5#6#7#7#4#", +"8#9#0#0#9#0#0#a#", +"b#c#c#c#b#b#d#c#", +"e#f#g#h#e#e#f#i#", +"j#j#k#j#j#j#k#j#", +"l#m#l#l#l#l#l#m#", +"n#o#n#n#n#n#n#n#", +"p#q#r#p#s#t#r#s#", +"u#u#u#u#u#v#u#v#", +"w#x#y#y#w#z#w#w#", +"A#B#A#C#A#B#B#C#", +"D#D#E#F#E#D#G#D#", +"H#H#H#H#H#H#H#H#", +"I#J#K#L#I#L#I#J#", +"M#N#O#M#P#N#Q#R#", +"S#T#T#S#T#S#S#U#", +"V#W#V#W#V#X#V#V#", +"Y#Z#`# $`#`#Z#Z#", +".$.$+$@$+$.$#$+$", +"$$%$$$&$*$$$$$*$", +"=$-$=$=$-$=$=$=$", +";$>$;$,$'$;$;$>$", +")$)$)$!$!$!$!$~$", +"{$]${$^$]$^$^$^$", +"/$/$($/$($_$:$($", +"<$<$<$[$<$[$<$[$", +"}$|$}$}$|$}$|$}$", +"1$2$3$3$1$4$4$1$", +"5$6$6$5$6$6$6$6$", +"7$7$7$7$7$7$7$7$", +"8$9$8$8$0$a$0$b$", +"c$d$e$f$g$h$i$f$", +"j$k$l$j$l$l$l$j$", +"m$n$o$m$m$m$m$p$", +"q$q$q$r$q$s$r$r$", +"t$u$t$t$v$t$w$t$"}; diff --git a/hdspmixer/pixmaps/matrix_black.xpm b/hdspmixer/pixmaps/matrix_black.xpm index 69e1e50..2aafb17 100644 --- a/hdspmixer/pixmaps/matrix_black.xpm +++ b/hdspmixer/pixmaps/matrix_black.xpm @@ -1,272 +1,17 @@ /* XPM */ char const * matrix_black_xpm[] = { -"32 12 257 2", -" c None", -". c #000000", -"+ c #080808", -"@ c #080810", -"# c #001008", -"$ c #101010", -"% c #181010", -"& c #002010", -"* c #101818", -"= c #181818", -"- c #002918", -"; c #202018", -"> c #003118", -", c #202020", -"' c #202029", -") c #292020", -"! c #202920", -"~ c #292920", -"{ c #292929", -"] c #004120", -"^ c #293131", -"/ c #313131", -"( c #104A29", -"_ c #393939", -": c #394139", -"< c #414141", -"[ c #20524A", -"} c #4A4141", -"| c #414A41", -"1 c #4A4A41", -"2 c #4A4A4A", -"3 c #524A41", -"4 c #4A524A", -"5 c #525252", -"6 c #525A52", -"7 c #5A5A52", -"8 c #625A4A", -"9 c #317B20", -"0 c #5A625A", -"a c #62625A", -"b c #626A62", -"c c #6A6A62", -"d c #6A6A6A", -"e c #736A62", -"f c #737373", -"g c #7B736A", -"h c #737B73", -"i c #737B7B", -"j c #7B7B73", -"k c #7B7B7B", -"l c #7B8373", -"m c #7B837B", -"n c #83837B", -"o c #838383", -"p c #838B83", -"q c #8B8B83", -"r c #8B8B8B", -"s c #8B948B", -"t c #94948B", -"u c #949494", -"v c #949C94", -"w c #949C9C", -"x c #9C9C94", -"y c #9C9C9C", -"z c #9CA49C", -"A c #9CA4A4", -"B c #A4A49C", -"C c #A4A4A4", -"D c #A4ACA4", -"E c #ACACA4", -"F c #ACACAC", -"G c #B4B4AC", -"H c #BDBDB4", -"I c #C5C5BD", -"J c #CDCDCD", -"K c #D5D5CD", -"L c #DEDED5", -"M c #DEE6DE", -"N c #E6E6E6", -"O c #EEEEEE", -"P c #F6EEEE", -"Q c #F6F6F6", -"R c #F6FFFF", -"S c #FFFFFF", -"T c #6633FF", -"U c #666600", -"V c #666633", -"W c #666666", -"X c #666699", -"Y c #6666CC", -"Z c #6666FF", -"` c #669900", -" . c #669933", -".. c #669966", -"+. c #669999", -"@. c #6699CC", -"#. c #6699FF", -"$. c #66CC00", -"%. c #66CC33", -"&. c #66CC66", -"*. c #66CC99", -"=. c #66CCCC", -"-. c #66CCFF", -";. c #66FF00", -">. c #66FF33", -",. c #66FF66", -"'. c #66FF99", -"). c #66FFCC", -"!. c #66FFFF", -"~. c #990000", -"{. c #990033", -"]. c #990066", -"^. c #990099", -"/. c #9900CC", -"(. c #9900FF", -"_. c #993300", -":. c #993333", -"<. c #993366", -"[. c #993399", -"}. c #9933CC", -"|. c #9933FF", -"1. c #996600", -"2. c #996633", -"3. c #996666", -"4. c #996699", -"5. c #9966CC", -"6. c #9966FF", -"7. c #999900", -"8. c #999933", -"9. c #999966", -"0. c #999999", -"a. c #9999CC", -"b. c #9999FF", -"c. c #99CC00", -"d. c #99CC33", -"e. c #99CC66", -"f. c #99CC99", -"g. c #99CCCC", -"h. c #99CCFF", -"i. c #99FF00", -"j. c #99FF33", -"k. c #99FF66", -"l. c #99FF99", -"m. c #99FFCC", -"n. c #99FFFF", -"o. c #CC0000", -"p. c #CC0033", -"q. c #CC0066", -"r. c #CC0099", -"s. c #CC00CC", -"t. c #CC00FF", -"u. c #CC3300", -"v. c #CC3333", -"w. c #CC3366", -"x. c #CC3399", -"y. c #CC33CC", -"z. c #CC33FF", -"A. c #CC6600", -"B. c #CC6633", -"C. c #CC6666", -"D. c #CC6699", -"E. c #CC66CC", -"F. c #CC66FF", -"G. c #CC9900", -"H. c #CC9933", -"I. c #CC9966", -"J. c #CC9999", -"K. c #CC99CC", -"L. c #CC99FF", -"M. c #CCCC00", -"N. c #CCCC33", -"O. c #CCCC66", -"P. c #CCCC99", -"Q. c #CCCCCC", -"R. c #CCCCFF", -"S. c #CCFF00", -"T. c #CCFF33", -"U. c #CCFF66", -"V. c #CCFF99", -"W. c #CCFFCC", -"X. c #CCFFFF", -"Y. c #FF0000", -"Z. c #FF0033", -"`. c #FF0066", -" + c #FF0099", -".+ c #FF00CC", -"++ c #FF00FF", -"@+ c #FF3300", -"#+ c #FF3333", -"$+ c #FF3366", -"%+ c #FF3399", -"&+ c #FF33CC", -"*+ c #FF33FF", -"=+ c #FF6600", -"-+ c #FF6633", -";+ c #FF6666", -">+ c #FF6699", -",+ c #FF66CC", -"'+ c #FF66FF", -")+ c #FF9900", -"!+ c #FF9933", -"~+ c #FF9966", -"{+ c #FF9999", -"]+ c #FF99CC", -"^+ c #FF99FF", -"/+ c #FFCC00", -"(+ c #FFCC33", -"_+ c #FFCC66", -":+ c #FFCC99", -"<+ c #FFCCCC", -"[+ c #FFCCFF", -"}+ c #FFFF00", -"|+ c #FFFF33", -"1+ c #FFFF66", -"2+ c #FFFF99", -"3+ c #FFFFCC", -"4+ c #FFFFFF", -"5+ c #000000", -"6+ c #0D0D0D", -"7+ c #1A1A1A", -"8+ c #282828", -"9+ c #353535", -"0+ c #434343", -"a+ c #505050", -"b+ c #5D5D5D", -"c+ c #6B6B6B", -"d+ c #787878", -"e+ c #868686", -"f+ c #939393", -"g+ c #A1A1A1", -"h+ c #AEAEAE", -"i+ c #BBBBBB", -"j+ c #C9C9C9", -"k+ c #D6D6D6", -"l+ c #E4E4E4", -"m+ c #F1F1F1", -"n+ c #FFFFFF", -"o+ c #0099FF", -"p+ c #00CCFF", -"q+ c #00FFFF", -"r+ c #3300FF", -"s+ c #3333FF", -"t+ c #3366FF", -"u+ c #3399FF", -"v+ c #33CCFF", -"w+ c #33FFFF", -"x+ c #6600FF", -"y+ c #6633FF", -"z+ c #6666FF", -"A+ c #6699FF", -"B+ c #66CCFF", -"C+ c #66FFFF", -"D+ c #9900FF", -"E+ c #9933FF", -"F+ c #9966FF", -"G+ c #9999FF", -"H+ c #99CCFF", -"f b b b b b b a b b b b b b a b b b a b b b b a a b a b a b f m ", -"d < : _ / / ^ ^ { { { { { { { { { { { { { { { { ^ ^ / / / : < m ", -"d : / ^ ^ { { { ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' { { { ^ / / : s ", -"d / ^ ^ { ' , ; = ; = ; = ; = ; = ; = ; = ; = ; ; , ' { ^ / : u ", -"d / ^ { ' ; = * * * * * * * * * * * * * * * * * = = ; ' { ^ / t ", -"d ^ { ' ; = * * $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ $ * = ; ' { / t ", -"d ^ { ' = * $ @ + + + + + + + + + + + + + + + + @ $ * = , { ^ t ", -"d { { , = * $ @ + + + + + + + + + + + + + + + + @ $ * = , { ^ t ", -"d ^ { , = * % @ + + + + + + + + + + + + + + + + @ $ * = , { / t ", -"d ^ { ' ; = * $ $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ $ * = ; ' { / t ", -"d / ^ { ' ; = = * * * * * * * * * * * * * * * * = = ; ' { ^ / t ", -"d a b b b a b b b b b a b b b a b b b a a b b b b a m m a m t t "}; +"32 12 2 1", +" c None", +". c #000000", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................"}; diff --git a/hdspmixer/pixmaps/matrix_grey.xpm b/hdspmixer/pixmaps/matrix_grey.xpm index ad5b369..b7ac81d 100644 --- a/hdspmixer/pixmaps/matrix_grey.xpm +++ b/hdspmixer/pixmaps/matrix_grey.xpm @@ -1,37 +1,17 @@ /* XPM */ char const * matrix_grey_xpm[] = { -"32 12 22 1", +"32 12 2 1", " c None", -". c #A0A0A0", -"+ c #98A098", -"@ c #989898", -"# c #7F7F7F", -"$ c #6F776F", -"% c #909088", -"& c #909890", -"* c #777777", -"= c #949494", -"- c #909898", -"; c #777F77", -"> c #949493", -", c #949394", -"' c #939494", -") c #939394", -"! c #939493", -"~ c #949393", -"{ c #939393", -"] c #A8A8A0", -"^ c #889088", -"/ c #B1B1A8", -".+++++++++++++++++++++++++++++++", -"@#$$$$$$$$$$$$$$$$$$$$$$$$$$$$%&", -"@*============================&-", -"-;============================++", -"-;============================.+", -"-;>===,='>=>,>>==============).+", -"-;=!,==!,=!>=''~,=~')===~====>.+", -"-;=~=,=>''=,'=,=>=')'~'=>=>'=).+", -"-#{>!=!!~=,~>'==,=>~='>>'>>'=!]+", -"-^>>~{,~{{))>!~'>!~~>!,=)=){!~]+", -"--.///////////////////////////]@", -"&-++..........................@-"}; +". c #737384", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................"}; diff --git a/hdspmixer/pixmaps/matrix_grey_l.xpm b/hdspmixer/pixmaps/matrix_grey_l.xpm index 5eeedbe..68c24b4 100644 --- a/hdspmixer/pixmaps/matrix_grey_l.xpm +++ b/hdspmixer/pixmaps/matrix_grey_l.xpm @@ -1,37 +1,17 @@ /* XPM */ char const * matrix_grey_l_xpm[] = { -"32 12 22 1", +"32 12 2 1", " c None", -". c #6F776F", -"+ c #98A098", -"@ c #7F7F7F", -"# c #909088", -"$ c #909890", -"% c #777777", -"& c #949494", -"* c #909898", -"= c #777F77", -"- c #A0A0A0", -"; c #949493", -"> c #949394", -", c #939494", -"' c #939394", -") c #939493", -"! c #949393", -"~ c #939393", -"{ c #A8A8A0", -"] c #889088", -"^ c #B1B1A8", -"/ c #989898", -".+++++++++++++++++++++++++++++++", -".@............................#$", -".%&&&&&&&&&&&&&&&&&&&&&&&&&&&&$*", -".=&&&&&&&&&&&&&&&&&&&&&&&&&&&&++", -".=&&&&&&&&&&&&&&&&&&&&&&&&&&&&-+", -".=;&&&>&,;&;>;;&&&&&&&&&&&&&&'-+", -".=&)>&&)>&);&,,!>&!,'&&&!&&&&;-+", -".=&!&>&;,,&>,&>&;&,',!,&;&;,&'-+", -".@~;)&))!&>!;,&&>&;!&,;;,;;,&){+", -".];;!~>!~~'';)!,;)!!;)>&'&'~)!{+", -".*-^^^^^^^^^^^^^^^^^^^^^^^^^^^{/", -".*++--------------------------/*"}; +". c #737384", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................"}; diff --git a/hdspmixer/pixmaps/matrix_grey_o.xpm b/hdspmixer/pixmaps/matrix_grey_o.xpm index 033e00b..6cd79f3 100644 --- a/hdspmixer/pixmaps/matrix_grey_o.xpm +++ b/hdspmixer/pixmaps/matrix_grey_o.xpm @@ -1,37 +1,17 @@ /* XPM */ char const * matrix_grey_o_xpm[] = { -"32 12 22 1", +"32 12 2 1", " c None", -". c #6F776F", -"+ c #989898", -"@ c #7F7F7F", -"# c #909088", -"$ c #909890", -"% c #777777", -"& c #949494", -"* c #909898", -"= c #777F77", -"- c #98A098", -"; c #A0A0A0", -"> c #949493", -", c #949394", -"' c #939494", -") c #939394", -"! c #939493", -"~ c #949393", -"{ c #939393", -"] c #A8A8A0", -"^ c #889088", -"/ c #B1B1A8", +". c #737384", "................................", -"+@............................#$", -"+%&&&&&&&&&&&&&&&&&&&&&&&&&&&&$*", -"*=&&&&&&&&&&&&&&&&&&&&&&&&&&&&--", -"*=&&&&&&&&&&&&&&&&&&&&&&&&&&&&;-", -"*=>&&&,&'>&>,>>&&&&&&&&&&&&&&);-", -"*=&!,&&!,&!>&''~,&~')&&&~&&&&>;-", -"*=&~&,&>''&,'&,&>&')'~'&>&>'&);-", -"*@{>!&!!~&,~>'&&,&>~&'>>'>>'&!]-", -"*^>>~{,~{{))>!~'>!~~>!,&)&){!~]-", -"**;///////////////////////////]+", -"$*--;;;;;;;;;;;;;;;;;;;;;;;;;;+*"}; +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................"}; diff --git a/hdspmixer/pixmaps/matrix_grey_ol.xpm b/hdspmixer/pixmaps/matrix_grey_ol.xpm index 4ced7f4..a3a8815 100644 --- a/hdspmixer/pixmaps/matrix_grey_ol.xpm +++ b/hdspmixer/pixmaps/matrix_grey_ol.xpm @@ -1,37 +1,17 @@ /* XPM */ char const * matrix_grey_ol_xpm[] = { -"32 12 22 1", +"32 12 2 1", " c None", -". c #6F776F", -"+ c #7F7F7F", -"@ c #909088", -"# c #909890", -"$ c #777777", -"% c #949494", -"& c #909898", -"* c #777F77", -"= c #98A098", -"- c #A0A0A0", -"; c #949493", -"> c #949394", -", c #939494", -"' c #939394", -") c #939493", -"! c #949393", -"~ c #939393", -"{ c #A8A8A0", -"] c #889088", -"^ c #B1B1A8", -"/ c #989898", +". c #737384", "................................", -".+............................@#", -".$%%%%%%%%%%%%%%%%%%%%%%%%%%%%#&", -".*%%%%%%%%%%%%%%%%%%%%%%%%%%%%==", -".*%%%%%%%%%%%%%%%%%%%%%%%%%%%%-=", -".*;%%%>%,;%;>;;%%%%%%%%%%%%%%'-=", -".*%)>%%)>%);%,,!>%!,'%%%!%%%%;-=", -".*%!%>%;,,%>,%>%;%,',!,%;%;,%'-=", -".+~;)%))!%>!;,%%>%;!%,;;,;;,%){=", -".];;!~>!~~'';)!,;)!!;)>%'%'~)!{=", -".&-^^^^^^^^^^^^^^^^^^^^^^^^^^^{/", -".&==--------------------------/&"}; +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................"}; diff --git a/hdspmixer/pixmaps/matrix_mute.xpm b/hdspmixer/pixmaps/matrix_mute.xpm index fcc30b2..b42e2af 100644 --- a/hdspmixer/pixmaps/matrix_mute.xpm +++ b/hdspmixer/pixmaps/matrix_mute.xpm @@ -1,40 +1,17 @@ /* XPM */ char const * matrix_mute_xpm[] = { -"32 12 25 1", +"32 12 2 1", " c None", -". c #C5C5BD", -"+ c #D5D5CD", -"@ c #94948B", -"# c #7B837B", -"$ c #B35A00", -"% c #DE8C00", -"& c #FFC128", -"* c #CC9900", -"= c #700909", -"- c #5A625A", -"; c #ACACA4", -"> c #394139", -", c #B4B4AC", -"' c #4A4141", -") c #872100", -"! c #414A41", -"~ c #4A4A41", -"{ c #CC6600", -"] c #7B7B7B", -"^ c #BDBDB4", -"/ c #736A62", -"( c #626A62", -"_ c #6A6A62", -": c #62625A", -".+............................@#", -".$%&*************************=-#", -";$%%%%%%%%%%%%%%%%%%%%%%%%%%%=>#", -",$%%%%%%%%%%%%%%%%%%%%%%%%%%%='#", -";$%%%%%%%%%%%%%%%%%%%%%%%%%%%)!#", -",$%*%%%%%%%%%%%%%%%%%%%%%%%%%)~#", -";$%%%%%%%%%%%%%%%%%%%%%%%%%%%=~#", -",$$%%%%%%%%%%%%%%%%%%%%%%%%%%)~#", -";$%*%%%%%%%%%%%%%%%%%%%%%%%%%=~#", -",$%$%%%%%%%%%%%%%%%%%%%%%%%%$)'#", -";***************************{*~]", -"^@/(_((((((((((((((((((((((_:-~#"}; +". c #E66840", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................"}; diff --git a/hdspmixer/pixmaps/matrix_white.xpm b/hdspmixer/pixmaps/matrix_white.xpm index ab5808a..4ac57f0 100644 --- a/hdspmixer/pixmaps/matrix_white.xpm +++ b/hdspmixer/pixmaps/matrix_white.xpm @@ -1,272 +1,17 @@ /* XPM */ char const * matrix_white_xpm[] = { -"32 12 257 2", -" c None", -". c #000000", -"+ c #080808", -"@ c #080810", -"# c #001008", -"$ c #101010", -"% c #181010", -"& c #002010", -"* c #101818", -"= c #181818", -"- c #002918", -"; c #202018", -"> c #003118", -", c #202020", -"' c #202029", -") c #292020", -"! c #202920", -"~ c #292920", -"{ c #292929", -"] c #004120", -"^ c #293131", -"/ c #313131", -"( c #104A29", -"_ c #393939", -": c #394139", -"< c #414141", -"[ c #20524A", -"} c #4A4141", -"| c #414A41", -"1 c #4A4A41", -"2 c #4A4A4A", -"3 c #524A41", -"4 c #4A524A", -"5 c #525252", -"6 c #525A52", -"7 c #5A5A52", -"8 c #625A4A", -"9 c #317B20", -"0 c #5A625A", -"a c #62625A", -"b c #626A62", -"c c #6A6A62", -"d c #6A6A6A", -"e c #736A62", -"f c #737373", -"g c #7B736A", -"h c #737B73", -"i c #737B7B", -"j c #7B7B73", -"k c #7B7B7B", -"l c #7B8373", -"m c #7B837B", -"n c #83837B", -"o c #838383", -"p c #838B83", -"q c #8B8B83", -"r c #8B8B8B", -"s c #8B948B", -"t c #94948B", -"u c #949494", -"v c #949C94", -"w c #949C9C", -"x c #9C9C94", -"y c #9C9C9C", -"z c #9CA49C", -"A c #9CA4A4", -"B c #A4A49C", -"C c #A4A4A4", -"D c #A4ACA4", -"E c #ACACA4", -"F c #ACACAC", -"G c #B4B4AC", -"H c #BDBDB4", -"I c #C5C5BD", -"J c #CDCDCD", -"K c #D5D5CD", -"L c #DEDED5", -"M c #DEE6DE", -"N c #E6E6E6", -"O c #EEEEEE", -"P c #F6EEEE", -"Q c #F6F6F6", -"R c #F6FFFF", -"S c #FFFFFF", -"T c #6633FF", -"U c #666600", -"V c #666633", -"W c #666666", -"X c #666699", -"Y c #6666CC", -"Z c #6666FF", -"` c #669900", -" . c #669933", -".. c #669966", -"+. c #669999", -"@. c #6699CC", -"#. c #6699FF", -"$. c #66CC00", -"%. c #66CC33", -"&. c #66CC66", -"*. c #66CC99", -"=. c #66CCCC", -"-. c #66CCFF", -";. c #66FF00", -">. c #66FF33", -",. c #66FF66", -"'. c #66FF99", -"). c #66FFCC", -"!. c #66FFFF", -"~. c #990000", -"{. c #990033", -"]. c #990066", -"^. c #990099", -"/. c #9900CC", -"(. c #9900FF", -"_. c #993300", -":. c #993333", -"<. c #993366", -"[. c #993399", -"}. c #9933CC", -"|. c #9933FF", -"1. c #996600", -"2. c #996633", -"3. c #996666", -"4. c #996699", -"5. c #9966CC", -"6. c #9966FF", -"7. c #999900", -"8. c #999933", -"9. c #999966", -"0. c #999999", -"a. c #9999CC", -"b. c #9999FF", -"c. c #99CC00", -"d. c #99CC33", -"e. c #99CC66", -"f. c #99CC99", -"g. c #99CCCC", -"h. c #99CCFF", -"i. c #99FF00", -"j. c #99FF33", -"k. c #99FF66", -"l. c #99FF99", -"m. c #99FFCC", -"n. c #99FFFF", -"o. c #CC0000", -"p. c #CC0033", -"q. c #CC0066", -"r. c #CC0099", -"s. c #CC00CC", -"t. c #CC00FF", -"u. c #CC3300", -"v. c #CC3333", -"w. c #CC3366", -"x. c #CC3399", -"y. c #CC33CC", -"z. c #CC33FF", -"A. c #CC6600", -"B. c #CC6633", -"C. c #CC6666", -"D. c #CC6699", -"E. c #CC66CC", -"F. c #CC66FF", -"G. c #CC9900", -"H. c #CC9933", -"I. c #CC9966", -"J. c #CC9999", -"K. c #CC99CC", -"L. c #CC99FF", -"M. c #CCCC00", -"N. c #CCCC33", -"O. c #CCCC66", -"P. c #CCCC99", -"Q. c #CCCCCC", -"R. c #CCCCFF", -"S. c #CCFF00", -"T. c #CCFF33", -"U. c #CCFF66", -"V. c #CCFF99", -"W. c #CCFFCC", -"X. c #CCFFFF", -"Y. c #FF0000", -"Z. c #FF0033", -"`. c #FF0066", -" + c #FF0099", -".+ c #FF00CC", -"++ c #FF00FF", -"@+ c #FF3300", -"#+ c #FF3333", -"$+ c #FF3366", -"%+ c #FF3399", -"&+ c #FF33CC", -"*+ c #FF33FF", -"=+ c #FF6600", -"-+ c #FF6633", -";+ c #FF6666", -">+ c #FF6699", -",+ c #FF66CC", -"'+ c #FF66FF", -")+ c #FF9900", -"!+ c #FF9933", -"~+ c #FF9966", -"{+ c #FF9999", -"]+ c #FF99CC", -"^+ c #FF99FF", -"/+ c #FFCC00", -"(+ c #FFCC33", -"_+ c #FFCC66", -":+ c #FFCC99", -"<+ c #FFCCCC", -"[+ c #FFCCFF", -"}+ c #FFFF00", -"|+ c #FFFF33", -"1+ c #FFFF66", -"2+ c #FFFF99", -"3+ c #FFFFCC", -"4+ c #FFFFFF", -"5+ c #000000", -"6+ c #0D0D0D", -"7+ c #1A1A1A", -"8+ c #282828", -"9+ c #353535", -"0+ c #434343", -"a+ c #505050", -"b+ c #5D5D5D", -"c+ c #6B6B6B", -"d+ c #787878", -"e+ c #868686", -"f+ c #939393", -"g+ c #A1A1A1", -"h+ c #AEAEAE", -"i+ c #BBBBBB", -"j+ c #C9C9C9", -"k+ c #D6D6D6", -"l+ c #E4E4E4", -"m+ c #F1F1F1", -"n+ c #FFFFFF", -"o+ c #0099FF", -"p+ c #00CCFF", -"q+ c #00FFFF", -"r+ c #3300FF", -"s+ c #3333FF", -"t+ c #3366FF", -"u+ c #3399FF", -"v+ c #33CCFF", -"w+ c #33FFFF", -"x+ c #6600FF", -"y+ c #6633FF", -"z+ c #6666FF", -"A+ c #6699FF", -"B+ c #66CCFF", -"C+ c #66FFFF", -"D+ c #9900FF", -"E+ c #9933FF", -"F+ c #9966FF", -"G+ c #9999FF", -"H+ c #99CCFF", -"I K I I I I I I I I I I I I I I I I I I I I I I I I I I I I t m ", -"I N R S S S S S S S S S S S S S S S S S S S S S S S S S S S 0 m ", -"E L Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q R Q O : m ", -"G L P O O O O O O O O O O O O O O O O O O O O O O O O O O L } m ", -"E L P O O O O O O O O O O O O O O O O O O O O O O O O P O L | m ", -"G L P O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m ", -"E L P O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m ", -"G L Q O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m ", -"E L P O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m ", -"G L P O O P P P P P P P P P P P P P P P P P P P P P P P O M } m ", -"E L J L L L L L L L L L L L L L L L L L L L L L L L L M J E 1 k ", -"H t e b c b b b b b b b b b b b b b b b b b b b b b b c a 0 1 m "}; +"32 12 2 1", +" c None", +". c #FFFFFF", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................"}; diff --git a/hdspmixer/pixmaps/matrix_yellow.xpm b/hdspmixer/pixmaps/matrix_yellow.xpm index 6a6565c..d587c0f 100644 --- a/hdspmixer/pixmaps/matrix_yellow.xpm +++ b/hdspmixer/pixmaps/matrix_yellow.xpm @@ -1,272 +1,17 @@ /* XPM */ char const * matrix_yellow_xpm[] = { -"32 12 257 2", -" c None", -". c #000000", -"+ c #080000", -"@ c #080808", -"# c #080810", -"$ c #001008", -"% c #101010", -"& c #181010", -"* c #002010", -"= c #101818", -"- c #181818", -"; c #201818", -"> c #002918", -", c #202018", -"' c #003118", -") c #202020", -"! c #202029", -"~ c #292020", -"{ c #202920", -"] c #392020", -"^ c #292920", -"/ c #292929", -"( c #004120", -"_ c #293131", -": c #412920", -"< c #313131", -"[ c #104A29", -"} c #393939", -"| c #394139", -"1 c #414141", -"2 c #20524A", -"3 c #414152", -"4 c #4A4141", -"5 c #414A41", -"6 c #4A4A41", -"7 c #4A4A4A", -"8 c #524A41", -"9 c #4A524A", -"0 c #525252", -"a c #734A29", -"b c #525A52", -"c c #5A5A52", -"d c #625A4A", -"e c #317B20", -"f c #5A625A", -"g c #62625A", -"h c #626A62", -"i c #6A6A62", -"j c #6A6A6A", -"k c #736A62", -"l c #737373", -"m c #7B736A", -"n c #737383", -"o c #9C7329", -"p c #737B73", -"q c #737B7B", -"r c #7B7B73", -"s c #7B7B7B", -"t c #AC6A5A", -"u c #7B8373", -"v c #7B837B", -"w c #83837B", -"x c #838383", -"y c #838B83", -"z c #8B8B83", -"A c #8B8B8B", -"B c #8B948B", -"C c #94948B", -"D c #949494", -"E c #949C94", -"F c #949C9C", -"G c #9C9C94", -"H c #9C9C9C", -"I c #9CA49C", -"J c #9CA4A4", -"K c #A4A49C", -"L c #A4A4A4", -"M c #C5A45A", -"N c #A4ACA4", -"O c #ACACA4", -"P c #ACACAC", -"Q c #B4B4AC", -"R c #C5B48B", -"S c #BDBDB4", -"T c #C5C5BD", -"U c #CDCDCD", -"V c #D5D5CD", -"W c #F6CDCD", -"X c #DEDED5", -"Y c #DEE6DE", -"Z c #E6E6E6", -"` c #EEEEEE", -" . c #F6EEEE", -".. c #F6F6F6", -"+. c #F6FFFF", -"@. c #FFFFFF", -"#. c #6699FF", -"$. c #66CC00", -"%. c #66CC33", -"&. c #66CC66", -"*. c #66CC99", -"=. c #66CCCC", -"-. c #66CCFF", -";. c #66FF00", -">. c #66FF33", -",. c #66FF66", -"'. c #66FF99", -"). c #66FFCC", -"!. c #66FFFF", -"~. c #990000", -"{. c #990033", -"]. c #990066", -"^. c #990099", -"/. c #9900CC", -"(. c #9900FF", -"_. c #993300", -":. c #993333", -"<. c #993366", -"[. c #993399", -"}. c #9933CC", -"|. c #9933FF", -"1. c #996600", -"2. c #996633", -"3. c #996666", -"4. c #996699", -"5. c #9966CC", -"6. c #9966FF", -"7. c #999900", -"8. c #999933", -"9. c #999966", -"0. c #999999", -"a. c #9999CC", -"b. c #9999FF", -"c. c #99CC00", -"d. c #99CC33", -"e. c #99CC66", -"f. c #99CC99", -"g. c #99CCCC", -"h. c #99CCFF", -"i. c #99FF00", -"j. c #99FF33", -"k. c #99FF66", -"l. c #99FF99", -"m. c #99FFCC", -"n. c #99FFFF", -"o. c #CC0000", -"p. c #CC0033", -"q. c #CC0066", -"r. c #CC0099", -"s. c #CC00CC", -"t. c #CC00FF", -"u. c #CC3300", -"v. c #CC3333", -"w. c #CC3366", -"x. c #CC3399", -"y. c #CC33CC", -"z. c #CC33FF", -"A. c #CC6600", -"B. c #CC6633", -"C. c #CC6666", -"D. c #CC6699", -"E. c #CC66CC", -"F. c #CC66FF", -"G. c #CC9900", -"H. c #CC9933", -"I. c #CC9966", -"J. c #CC9999", -"K. c #CC99CC", -"L. c #CC99FF", -"M. c #CCCC00", -"N. c #CCCC33", -"O. c #CCCC66", -"P. c #CCCC99", -"Q. c #CCCCCC", -"R. c #CCCCFF", -"S. c #CCFF00", -"T. c #CCFF33", -"U. c #CCFF66", -"V. c #CCFF99", -"W. c #CCFFCC", -"X. c #CCFFFF", -"Y. c #FF0000", -"Z. c #FF0033", -"`. c #FF0066", -" + c #FF0099", -".+ c #FF00CC", -"++ c #FF00FF", -"@+ c #FF3300", -"#+ c #FF3333", -"$+ c #FF3366", -"%+ c #FF3399", -"&+ c #FF33CC", -"*+ c #FF33FF", -"=+ c #FF6600", -"-+ c #FF6633", -";+ c #FF6666", -">+ c #FF6699", -",+ c #FF66CC", -"'+ c #FF66FF", -")+ c #FF9900", -"!+ c #FF9933", -"~+ c #FF9966", -"{+ c #FF9999", -"]+ c #FF99CC", -"^+ c #FF99FF", -"/+ c #FFCC00", -"(+ c #FFCC33", -"_+ c #FFCC66", -":+ c #FFCC99", -"<+ c #FFCCCC", -"[+ c #FFCCFF", -"}+ c #FFFF00", -"|+ c #FFFF33", -"1+ c #FFFF66", -"2+ c #FFFF99", -"3+ c #FFFFCC", -"4+ c #FFFFFF", -"5+ c #000000", -"6+ c #0D0D0D", -"7+ c #1A1A1A", -"8+ c #282828", -"9+ c #353535", -"0+ c #434343", -"a+ c #505050", -"b+ c #5D5D5D", -"c+ c #6B6B6B", -"d+ c #787878", -"e+ c #868686", -"f+ c #939393", -"g+ c #A1A1A1", -"h+ c #AEAEAE", -"i+ c #BBBBBB", -"j+ c #C9C9C9", -"k+ c #D6D6D6", -"l+ c #E4E4E4", -"m+ c #F1F1F1", -"n+ c #FFFFFF", -"o+ c #52524A", -"p+ c #524A52", -"q+ c #4A4A4A", -"r+ c #625A4A", -"s+ c #00005A", -"t+ c #311800", -"u+ c #291800", -"v+ c #412000", -"w+ c #311800", -"x+ c #311800", -"y+ c #311800", -"z+ c #412000", -"A+ c #4A2900", -"B+ c #000010", -"C+ c #4A4100", -"D+ c #4A4141", -"E+ c #4A4141", -"F+ c #292041", -"G+ c #8B8B29", -"H+ c #8B8B8B", -"T V T T T T T T T T T T T T T T T T T T T T T T T T T T T T C v ", -"T _+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+f v ", -"O G._+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+G.| v ", -"Q G./+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+/+_+G.4 v ", -"O G./+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+/+_+G.5 v ", -"Q G._+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+/+_+G.6 v ", -"O G./+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+/+_+G.6 v ", -"Q A._+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+/+_+G.6 v ", -"O G./+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+/+/+G.6 v ", -"Q A./+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+_+/+4 v ", -"O G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.A.G.6 s ", -"S C k h i h h h h h h h h h h h h h h h h h h h h h h i g f 6 v "}; +"32 12 2 1", +" c None", +". c #FFFB7C", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................"}; diff --git a/hdspmixer/pixmaps/monitor.xpm b/hdspmixer/pixmaps/monitor.xpm index 8c29898..96b523e 100644 --- a/hdspmixer/pixmaps/monitor.xpm +++ b/hdspmixer/pixmaps/monitor.xpm @@ -1,513 +1,406 @@ /* XPM */ char const * monitor_xpm[] = { -"76 253 257 2", -" c None", -". c #D1E0E5", -"+ c #E7F6F9", -"@ c #F2FFFF", -"# c #FBFFFF", +"76 253 150 2", +" c #595966", +". c #51515B", +"+ c #3D3D42", +"@ c #717187", +"# c #53535E", "$ c #FFFFFF", -"% c #C4CACB", -"& c #C7D5D9", -"* c #BECDD2", -"= c #B8C5C9", -"- c #AEBDC1", -"; c #B2BDC2", -"> c #B5B6B6", -", c #A9B5B9", -"' c #A2ADB2", -") c #A1ACAE", -"! c #AAAAAA", -"~ c #A6A6A6", -"{ c #A0A0A0", -"] c #9CA5A9", -"^ c #9F9FA0", -"/ c #939DA1", -"( c #A0A09F", -"_ c #9FA09F", -": c #A09F9F", -"< c #90928F", -"[ c #949A9B", -"} c #9B9C9B", -"| c #9D9E9D", -"1 c #999A99", -"2 c #969896", -"3 c #919391", -"4 c #959795", -"5 c #929592", -"6 c #869194", -"7 c #8E999C", -"8 c #8C969A", -"9 c #8A9395", -"0 c #848E91", -"a c #8C908B", -"b c #8E918E", -"c c #8C908C", -"d c #8D908D", -"e c #888B88", -"f c #8D8F8D", -"g c #8C8F8C", -"h c #8B8F8C", -"i c #8C8F8B", -"j c #898D89", -"k c #8B8E8B", -"l c #8A8E8A", -"m c #8A8D8A", -"n c #898C89", -"o c #898D89", -"p c #888C88", -"q c #848B8B", -"r c #888C87", -"s c #838884", -"t c #878C87", -"u c #858A86", -"v c #868B86", -"w c #878B87", -"x c #868A86", -"y c #858A85", -"z c #858985", -"A c #848984", -"B c #848883", -"C c #808880", -"D c #828882", -"E c #838883", -"F c #828686", -"G c #818782", -"H c #838783", -"I c #828782", -"J c #808680", -"K c #818681", -"L c #818581", -"M c #808580", -"N c #778082", -"O c #7E898B", -"P c #7D8689", -"Q c #7A8386", -"R c #7F8580", -"S c #D170D1", -"T c #C54CC5", -"U c #A837A8", -"V c #902F90", -"W c #757E81", -"X c #80887F", -"Y c #80857F", -"Z c #7F887F", -"` c #7D847D", -" . c #7F847F", -".. c #7E847E", -"+. c #7E827E", -"@. c #7E837E", -"#. c #7D827D", -"$. c #7D837D", -"%. c #7C827C", -"&. c #7B827C", -"*. c #7C817B", -"=. c #7A817A", -"-. c #7A817A", -";. c #7B817B", -">. c #7A807A", -",. c #798079", -"'. c #708070", -"). c #6E716E", -"!. c #717678", -"~. c #7A7F7A", -"{. c #797F79", -"]. c #787F78", -"^. c #727B7D", -"/. c #777E78", -"(. c #787E77", -"_. c #747C73", -":. c #767D75", -"<. c #767E76", -"[. c #777E77", -"}. c #777D77", -"|. c #767D76", -"1. c #747C74", -"2. c #757C75", -"3. c #757B75", -"4. c #747B74", -"5. c #737B74", -"6. c #747B73", -"7. c #727972", -"8. c #737B73", -"9. c #717971", -"0. c #707870", -"a. c #6D7679", -"b. c #6C7274", -"c. c #686E71", -"d. c #70786F", -"e. c #707060", -"f. c #616669", -"g. c #696D6A", -"h. c #6D6E6D", -"i. c #6F6F6F", -"j. c #646B6D", -"k. c #666966", -"l. c #626562", -"m. c #5C6365", -"n. c #595F61", -"o. c #5F685F", -"p. c #5B605B", -"q. c #5E615E", -"r. c #506050", -"s. c #494F51", -"t. c #545A5C", -"u. c #5A5C5A", -"v. c #5A5D5A", -"w. c #555A55", -"x. c #565956", -"y. c #575A57", -"z. c #555855", -"A. c #535654", -"B. c #545754", -"C. c #525552", -"D. c #535653", -"E. c #515451", -"F. c #515251", -"G. c #505350", -"H. c #4D5254", -"I. c #50534F", -"J. c #50584F", -"K. c #4F584F", -"L. c #4C504B", -"M. c #4F544F", -"N. c #4D524D", -"O. c #4F524F", -"P. c #4E514E", -"Q. c #4F504F", -"R. c #4D504D", -"S. c #4B504B", -"T. c #405040", -"U. c #464A4A", -"V. c #494E4E", -"W. c #4D4E4D", -"X. c #4C4F4C", -"Y. c #494E49", -"Z. c #4B4F4B", -"`. c #4A4E4A", -" + c #4A4D4A", -".+ c #494C49", -"++ c #494A49", -"@+ c #484B48", -"#+ c #444843", -"$+ c #474C47", -"%+ c #464A45", -"&+ c #474A47", -"*+ c #464946", -"=+ c #454A45", -"-+ c #454945", -";+ c #424842", -">+ c #434645", -",+ c #454645", -"'+ c #444744", -")+ c #414641", -"!+ c #434743", -"~+ c #424542", -"{+ c #414441", -"]+ c #404340", -"^+ c #3E4142", -"/+ c #6B236B", -"(+ c #531B53", -"_+ c #4D194D", -":+ c #471747", -"<+ c #3C3E40", -"[+ c #40423F", -"}+ c #40483F", -"|+ c #3B403B", -"1+ c #3F443F", -"2+ c #3E413E", -"3+ c #3F423F", -"4+ c #3D413D", -"5+ c #1E2120", -"6+ c #2D3030", -"7+ c #363A39", -"8+ c #393B39", -"9+ c #3E3F3E", -"0+ c #3C3F3C", -"a+ c #393D39", -"b+ c #3B3F3B", -"c+ c #373C37", -"d+ c #363A36", -"e+ c #303F30", -"f+ c #333434", -"g+ c #333433", -"h+ c #303730", -"i+ c #242728", -"j+ c #2A2C2D", -"k+ c #2F2F2F", -"l+ c #212E2E", -"m+ c #222425", -"n+ c #202720", -"o+ c #3B143B", -"p+ c #0F1010", -"q+ c #1B1C19", -"r+ c #121212", -"s+ c #0F1510", -"t+ c #170817", -"u+ c #100F0F", -"v+ c #07090A", -"w+ c #0A0A0A", -"x+ c #0D0D0D", -"y+ c #0E0E0E", -"z+ c #0F0F0F", -"A+ c #0B040B", -"B+ c #01070E", -"C+ c #040404", -"D+ c #050606", -"E+ c #070707", -"F+ c #060606", -"G+ c #030303", -"H+ c #000000", -"}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+n+", -"d.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.k+", -"( ( ( ( ( ( ( ( ( ( ( ( ( ( : : : : ( ( : : : : : : : : : : : : : : : : : : ( ( ( ( ( : : : : : : : : : : : : : : ^ _ _ _ _ ^ ^ : ^ ^ ^ ^ : { { { : i.F+", -"( ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ { { : i.F+", -"( ^ Z Q.k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+6+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+6+k+k+k+k+k+k+k+6+k+k+k+k+o.^ { { : i.F+", -"( ^ Z Q.K.K.Q.Q.}+J.T.P.K.1+Q.Q.Q.T.)+J.T.W.K.)+Q.Q.Q.T.}+K.T.W.K.}+Q.Q.Q.T.)+K.T.Q.K.}+Q.Q.J.T.Q.K.1+Q.Q.W.T.}+}+T.T.T.T.T.K.T.}+R.T.Q.}+}+{ { { : i.F+", -"( ^ Z Q.).k.).l.I.y.l.v.A.k.p.l.q.y.q.q.q.q.F.l.p.l.q.k.z.p.k.k.q.l.).k.q.q.p.y.k.k.k.q.k.q.p.k.v.l.q.q.).q.k.l.q.l.q.D.k.k.q.l.l.u.h.E.P.~+{ ( ( : i.F+", -"( ^ Z Q.Z.w.L.E.R.B.B.S.N. +x.D.P.P.$+w.#+G.R.-+ +Y.&+=+N.M.Y.u.G.C.R.I.E.z.N.*+N.A.G.X..+z.w.G.@+$+X.A.G.&+{+M.$+L.>+P. +M.D.*+Y.w.X.A.{+d+_ ( ^ ^ i.F+", -"^ ^ Z Q.q.@+0+>+1+E.>+4+1+3+R.`..+N.$+=+)+C..+P.]+*+ +-+S.a+2+X.P.]+3+4+2+w.;+a+Y.]+'+2+O.-+ +>+4+E.=+-+*+C.$+$+N. +{+P. +Y.M.K.E.|+!+{+&+g+_ ^ ^ : h.F+", -"_ ^ Z P.y.$+Y.{+-+2+4+M.B.)+P.$ $ $ {+]+X.$ $ $ E.X.A.~+S.E.S.>+E.J.Q..+@+E.C.J.$ $ *+C.=+$ =+B.`.A.~+S.E.S.!+E.O.!+N.&+P.$+N.E.a+E.R.#+!+~+_ ^ _ ^ i.F+", -"_ _ Z Q.q.B.I.P.z.P.y.0+-+R.C.$ $ $ 3+{+&+$ $ $ N.~+{+P.2+b+E.&+J.E.N. +N.7+=+)+N.c+-+*+$ $ =+%+)+{+P.2+b+E.&+Z.'+Y.!+R. +$+2+$+=+4+*+ +>+9+^ : ^ ^ i.C+", -": ^ Z Q.l.N.E.2+)+X.P.Y.N.a+X.$ $ $ $ &+$ $ $ $ )+2+$ $ $ $ G.P.$ $ $ $ N.I.=+$+$ $ d+$ $ $ $ ~+3+$ $ $ $ G.P.$ $ $ $ X. +$+)+Y.w.@+!+'+~+[+: | ^ : i.F+", -": ^ Z Q.p.@+@+D.M.P.d+@+M.G.x.$ $ $ $ X.$ $ $ $ b+$ $ 3+#+$ $ +$ $ $ $ $ $ C.N.$ $ C.>+$ $ q.M.$ $ 3+#+$ $ +$ $ Y..+&+{+#+;+2+$+-+$+#+*+g+: : : | i.F+", -"^ | Z Q.w.!+B.>+N.'+ +S.=+$+]+$ $ E.$ {+$ {+$ $ $+$ $ X.1+$ $ z.$ $ O..+$ $ E.E.$ $ -+C.$ $ $+B.$ $ X.1+$ $ B.$ $ ~+B. +Z.$+$+b+)+!+`.@+*+,+: ^ | ^ i.F+", -"_ | Z Q.q.{+*+O.M.@+ +y.M.-+.+$ $ )+$ $ $ E.$ $ E.$ $ #+L.$ $ L.$ $ P. +$ $ =+)+$ $ d+&+$ $ q.S.$ $ ;+S.$ $ Z.$ $ Y.*+8+)+-+`.4+M.=+D.N.0+8+^ : | ^ h.F+", -": | Z Q.O.`. +M.v.&+Y.E.N.~+X.$ $ )+$ $ $ +$ $ x.$ $ @+$+$ $ +$ $ q. +$ $ =+%+$ $ -+]+$ $ $+)+$ $ $+%+$ $ +$ $ I.1+X.C.w.=+M.2+)+N.y.8+0+: | ^ ^ i.F+", -": ^ R Q.X.Y.]+A.'+P.>+Y.X.*+&+$ $ !+#+$ b+`.$ $ ]+X.$ $ $ $ `.b+$ $ L. +$ $ C.N.$ $ q.~+O.$ $ %+Z.$ $ $ $ `.a+$ $ Y.!+P.Y.Y.$+$+a+{+>+ +~+2+^ | | ^ i.F+", -"^ | +.R.l.M.w.&+$+@+]+$+-+$+{+'+4+2+M.B.1+P.;+2+#+D.=+P.@+#+Y.!+P.C.P.A.z.C.Z.)+w.!+Y.E.@+@+A.A.O.R.a+C.X.P.]+M.O.)+`.E.P.)+N.;+N.!+*+P.~+2+| ^ : | i.F+", -"| ^ +.W.E.E.#+X.=+$+v.;+N.O..+S..+b+C.N.$+ +X.>+x.2+X.$+$+Z.P.A.N.O.*+Z.-+G.$+$+c+{+&+X.2+M.$+C.P.!+$+3+0+X.A.1+)+)+]+G..+$+0+P.P.2+1+=+O.j+| | ^ ^ h.F+", -"| ^ Z K.C.*+a+z.v.N.$+$+N.$+O.*+.+Y.4+c+C.R.R.!+0+'+3+3+Y.Y.)+3+)+G.@+.+A.&+=+#+'+!+ +.+G.@+2+*+.+N.Y.>+-+&+-+$+a+S..+@+c+$+-+*+Y.4+M.L.9+]+| ^ ^ | i.F+", -"| | Z K.E.$+y.P.@+*+Z.$+)+~+&+'+{+R.=+S.$+M.`.A.!+P.D.R.)+)+-+!+$+X.*+ +R.$+=+M.'+N.M.@+9+]+!+C.'+M.p.@+R.E.Y.Y.1+&+]+-+O.`.S.1+3+|+=+$+[+{+^ | | | i.F+", -"| : Z K.G.O.(+_+:+:+:+:+:+:+:+:+:+_+U M.=+ +`.G.q.0+!+R.$+;+N.Y.0+@+O.M.=+#+Y.N.$+Y.u.*+ + +*+O.$+#+-+8+3+ +R.;+M.-+Y.'+$+M.P.P.M.#+I.I.2+,+| | ^ | i.F+", -"| | Z Q.P.X.V V V V V V V V V V V V :+#+1+0+!+&+2+]+!+Y.Y.1+$+=+G.R.3+E.;+-+=+N.X.B.Y. +'+R.G.E.N.v.Y.2+&+4+@+a+;+O..+M.E.S.N.*+Z.Y.;+Y.,+[+| : | | i.F+", -"| | Z K.P.C./+V S T T T T T T T T o+t+M.u.X.-+P.~+C.'+w.#+d+$+a+&+X.3+{+O.#+a+M.%+#+E.p.~+0+ +R.E.-+b+*+&+P.Z.)+1+$+`.D.G.$+%+w.#+|+M.)+*+k+| | | | i.F+", -"| | Z Q.p.`./+V V V V V V V V V V o+t+)+@+1+#+D..+$ $ $ $ $ Y.G.$ %+$+D.N..+$ G.~+#+S.X.$ +]+&+]+N.*+&+x.X.M.M.N.Y.!+N.X.)+N.=+-+)+=+4+ +0+| | : } i.F+", -"| | Z K.B.!+/+V V V V V V V V V V o+t+)+-+&+*+&+4+E.]+v.N.$ Y.Y.$ $+a+.+8+X.$ $ ]+~+ +$ $ N.0+P.@+-+'+'+N.R.`.N.$+4+P.A.Z.)+$+E.N.#+|+R.]+++| | | } i.F+", -"| | Z Q.D.$+/+V V V V V V V V V V :+t+Y.&+-+R.>+G.a+]+#+$ E.1+=+$ w.%+!+]+@+$ $ @+C.8+$ $ a+Y.-+1+~+M..+$+E.P.1+D.Z.D.3+=+B.Y.M.M.z.y.X.,+8+: } ^ | i.C+", -"| } Z Q.L.P./+V T V V V V V V V V :+t+)+Y.&+>+!+~+P.G.$ $ a+Y.0+$ 2+$+D.P..+$ @+$ &+$ X.$ c+N.u.B.$+N.`.N.8+&+;+N.a+&+R.A.Z.-+z.N.M.=+`.E.8+} | | } i.F+", -"| } Z Q.C.w./+V V V V V V V V V V o+t+Y.G.0+2+'+*+E.&+$ $+E.P.&+$ $+a+.+8+R.$ A.$ ~+$ @+$ *+X.2+X..+R. +O.O.&+$+B.Y.{+@+&+)+S.$+b+B.C.!+'+[+| | | | i.C+", -"| | Z Q.v..+/+/+V V V V V V V V V :+t+Y.$+E.!+.+@+a+$ P.S.a+~+`.$ y.%+>+]+~+$ ]+$ $+$ 1+$ $+$+{+R.d+R.`.P.!+D.M.Y.N.'+P.R.N.w.#+N.=+1+S.8+8+| } | } i.F+", -"} | R P.G.G./+V T V V V V V V V V o+t+-+`.@+G. +C.$ $ $ $ $ L.~+$ $ $ $ 2+x.$ P.Y.$ S.Y.$ 0+1+{+C.!+O.v.$+X.M.$+Y.1+@+~+)+1+K.=+)+2+P. +8+++| | } | i.F+", -"| } Z Q.A.*+/+V /+V V V V V V V /+:+t+1+-+&+O.$+P..+4+*+$+;+ +.+X.N.3+D.*+X.)+M.z.A.*+.+4+N.!+*+-+N.#+E.*+ +N.$+a+3+&+B.#+M.S.S.4+2+4+&+{+8+| } | } i.F+", -"| } Z Q.p.`./+o+t+t+A+A+A+A+A+A+t+A+t+#+-+]+C.G.{+O.8+M.!+S.)+8+u.@+D.N.O.4+N.)+1+~+E.&+X.B.#+!+O.2+{+~+-+'+'+Z.=+!+@+>+`.|+#+a+w.1+z.~+]+0+} | } } i.F+", -"} } Z Q.y.N.t+H+H+H+H+H+H+H+H+H+H+H+H+)+Y.=+&+~+D.-+*+1+=+)+S.R.X.|+.+a+O.-+$+;+D.S.G.C.~+b+]+b+E.)+P..+O.Y.X.M.|+$+D.-+'+N.1+4+D.w.~+-+]+[+} } } | i.F+", -"} } Z Q.x.C.Y.=+S.O.'+$+Y.~+B.*+C.=+M.$+2+1+Z.O.X.a+R.-+D.C.1+)+G.2+@+c+*+@+N.$+E.2+$+C.0+G.{+O.B.$+{+-+ +]+&+Y.O.=+O..+N.E.a+N.|+D. +v.@+2+| } } } i.F+", -"} } Z Q.w.Z.%+G.N.)+N.)+@+d+*+$+@+b+#+2+Z.x. +&+E.`.2+N.=+M.]+`.~+C.2+&+.+M.$+S.{+!+`.*+E.X.M.2+-+S.y.X.R.O.-+B.Y.c+w.N.0+#+$+!+Y.@+`.R.8+,+} } | } i.F+", -"} } Z Q.x.%+8+Z.2+B.S.K.1+P.&+.+E.d+;+;+S.D.Y. +.+.+z.R.M.4+Y..+1+&+E.b+E.`.=+a+$+@+b+*+'+*+&+~+C.M.)+G.a+G.-+S.)+8+y.&+ +4+Y.3+&+M.C.Y.{+9+} } } } i.C+", -"} } Z R.q.1+!+~+)+E.Y.$+a+N.P.]+{+$+w.f+!+ +E.X.~+[+-+~+=+a+P.Y.S.G..+X.@+)+=+#+@+$+`.0+~+G.-+G.'+#+'+.+>+!+Y.Y.;+R.b+!+E.Z.M.2+O.;+1+)+W.8+} } } } i.F+", -"} } Z Q.l.)+R. +R.'+D.Y.S.C.{+X.X.)+M.M.3+{+)+*+.+.+.+$+a+=+$+#+.+&+'+u.{+{+N.)+b+2+M.&+d+3+3+C.b+;+!+3+'+2+)+|+2+a+4+*+)+c+z.p.P.$+$+P.{+[+} } } } i.C+", -"} } Z Q.v.Z.@+{+)+ +J.D.)+)+!+{+`.*+N.Z.M.P.&+~+Z.>+@+Y.$+w.M.=+X.X.G. +@+S.|+M.|+Y.=+z. +X. +0+M.S.M..+R.v.-+$+$+!+N.=+#+L.M.-+-+L.c+N.{+d+} } } } i.F+", -"} } Z Q.w.)+~+Y.#+=+1+E.;+#+]+-+~+N.S.Y.b+.+b+G.*+ +-+z.S.N.E.)+|+~+4+E.!+N.Y.N.$+ +G.2+.+z.*+G.D.a+M.2+B. +v.N.S.y.Z.$+!+#+a+1+Y.S.;+I.{+9+} } } } i.C+", -"} 1 Z P.k.4+(+_+:+:+:+:+:+:+:+:+:+_+U Y.0+M.#+@+.+E.S.O.C.$+=+S.4+A.3+@+D.Y.=+2+Z.&+-+-+ +G.'+~+#+Y.8+~+.+&+N.|+N.P.&+'+|+B.`.C.E.w.E.@+b+8+} } } } i.F+", -"} } R P.l.v.V V V V V V V V V V V V :+1+3+]+]+.+&+q.b+!+N.$+)+N.Y.0+@+G.O.=+#+Y.E.1+z.X.2+.+R.0+Z.N.p.R.@+~+S.$+S.)+b+'+M.`.b+4+y.$+b+)+X.g+} 1 } } i.C+", -"} } Z Q.x.C./+V S T T T T T T T T o+t+|+4+&+@+Y..+2+3+!+Y.Y.1+$+=+G.R.3+E.;+=+2+z.'+!+D.O.~+@+P.0+X.Y.@+.+a+D.#+#+4+~+`.P.L. +N.Z.#+$+)+>+d+1 1 } } i.F+", -"1 1 X Q.G.=+/+V V V V V V V V V V o+t+)+D.X.O.C.~+$ +O.$+=+y.$ &+$ z.C.&+a+Y.$+-+E.b+P.0+B.Y.v.M.R.y.S.Y.2+x.Y.M.O.x.C..+#+$+C.)+N.N.!+0+8+} 1 } 1 i.F+", -"1 } Z W.l.&+/+V V V V V V V V V V o+t+#+!+)+.+3+2+$ $ 0+M.1+$ $ O..+ +G.2+Y.C.!+N.`.{+ +Y.E.E.'+1+2+@+ +C.X. +!+;+x.-+*+Y.4+-+;+#+y.O.$+2+9+} 1 1 1 i.F+", -"1 1 Z Q.p.Z./+V V V V V V V V V V :+t+w.D. + + +*+$ $ 2+)+Y.$ $ R.$ +P.$ &+S.$ b+C.]+]+u.)+ +&+C.$+)+G..+.+-+Y.;+-+.+.+'+Y.S.$+-+-+ +R.d+{+1 } 1 1 i.F+", -"1 1 Z Q.v.)+/+V T V V V V V V V V :+t+Y.a+.+R.p.R.$ ~+$ S.$ P.$ +$ X.Y.*+$ $ w.z.@+{+-+E.Y.Z.]+v.d+M.R.R.-+Z.=+!+ +z.&+C.!+Y.-+d+M.O.Y.0+8+1 1 1 1 i.F+", -"1 1 R Q.u.C./+V V V V V V V V V V o+t+C.w.~+*+*+X.$ {+$ $+$ {+$ '+$ R.Y.X.$ $ $+)+&+8+'+ +-+D.&+-+.+&+~+S.&+{+S.$+!+~+@+E.;+-+N.Z.*+.+3+3+g+1 1 1 1 i.F+", -"1 1 .Q.R.!+/+/+V V V V V V V V V :+t+=+=+1+G.R.~+$ ]+$ $+$ 3+$ *+$ `.2+E.$ $ =+b+{+!+X.R.1+1+O.!+R.N.~+N.]+)+=+;+Y.*+]+P.)+1+;+Y.c+]+&+]+9+1 1 1 1 i.F+", -"1 1 +.Q.l.X./+V T V V V V V V V V o+t+N.g+$+G.M.x.$ P.Y.$ Z..+$ @+$ *+S.$ B.$+$ E.S.2+N.]+~+P.M.@+ +.+0+P.N.`.M.2+D.$+{+-+E.=+M.S.~+!+0+.+8+1 1 1 1 i.F+", -"1 1 +.Q.v.)+/+V /+V V V V V V V /+:+t+D.Z.E.]+`. +2+=+M.a+G.Y.*+b+.+.+8+-+#+=+=+1+E.E.{+P.8+P.'+P.!+a+y.*+C.R.G.0+N.!+{+w.S.a+#+Y.C.@+.+[+8+1 1 1 1 i.F+", -"1 1 +.W.q.>+/+o+t+t+A+A+A+A+A+A+t+A+t+;+4+2+1+N.`. +R.Y.=+;+C..+M.~+*+ +'+P.a+2+Z.P.)+{+2+2+z.'+b+Z.~+-+2+G.-+Y.)+|+E.&+~+M.=+Y.C.)+{+R.8+f+1 1 2 1 i.F+", -"1 2 +.Q.E.Y.t+H+H+H+H+H+H+H+H+H+H+H+H+y.b+~+ +*+*+)+D.*+=+2+'+~+R.R.X.|+ +b+M.!+&+!+z.S.O.C.!+b+)+b+G.{+P. +G.Y.Y.N.4+.+#+=+E.$+$+M.`.{+*+9+2 1 1 2 i.F+", -"1 1 +.W.v.@+`.E.*+`..+.+x. +*+O.2+E.~+)+N.E.X.E.P.8+P.!+X.!+`.3+!+X.G.]+~+]+!+-+4+`.X.X.3+2+R.2+0+E.*+G.&+0+P.X.X..+E.0+D.;+N.E.a+M.0+C.'+ +1 1 1 1 h.F+", -"1 2 +.Q.E.b+'+&+Y.'+@+`.=+$+E.*+O.E.=+b+2+{+E.!+P.p.@+S.N.$+Y.]+@+~+'+E.X.X.|+4+b+*+@+#+P.Y.C.y.D.S.~+0+R.z.-+M.|+N.~+@+.+1+)+S.$+8+Q.C.g+~+1 2 1 2 i.F+", -"1 1 +.W.C..+)+*+@+O.$+P.$+|+*+Y.'+S.$+Y.N.]+C.*+X.#+E.y.D.#+$+4+R.~+*+-+R.-+K.-+Y.X..+0+{+.+A.X.2+#+a+y.)+B.!+#+Y.Y.&+A.Y.d+D.4+$+1+C.Z. +8+1 2 1 2 i.C+", -"2 2 +.Q.B.N.&+A.N.~+X.-+S.$+M.!+`.-+$+1+L.~+O.{+.+Y.C.!+$+$+X.X.3+D.!+O.!+`.4+C.*+0+@+1+A.'+M.'+ +`.*+&+{+X.c+S.Y.X.{+C.@+Y.#+]+)+Y.@+X.*+k+1 2 1 2 i.F+", -"1 2 +.W.A.`.Y.E.N.`.S.d+v.;+~+E.R.a+N.$+L.X..+!+.+X. +&+)+;+*+X.R.R.A.=+3+1+=+=+$+>+%+E.P.)+M.'+.+d+*+*+.+b+-+4+S.w.@+&+M.Y.M.#+M.{+)+I.[+g+2 1 1 2 i.F+", -"2 2 +.Q.B.*+3+x.a+X. +D.S.]+{+M.P.!+c+Y.X.*+.+.+E.~+X.$+=+2+*+X.O. +p.-+>+4+=+N.c+~+3+-+{+ +O.E.y.)+P.@+#+&+%+1+`.b+@+D.G.Y.4+N.=+M.]+X.0+,+1 2 2 2 i.F+", -"2 1 +.W.Q.z.b+.+]+B.3+X.w.`. +&+a+'+=+Y.$+>+Z.O.-+E.X.$+=+M.=+!+~+P.`.$+@+N.D.N.b+]+A.Z.-+!+O. +=+-+L.#+y.y.;+=+$+;+0+P.C.S.D.Y.N.-+G.~+*+0+2 1 2 2 i.F+", -"2 4 +.Q.q.*+(+_+:+:+:+:+:+:+:+:+:+_+U 2+-+3+*+.+*+M.X.O.C.$+=+S.4+A.3+@+D.Y.#+M.X.M.C.$+=+Z.4+A.3+G.X.O.C.$+=+S.4+A.3+&+-+=+N.Y.N.$+3+P.{+k+2 2 2 2 i.F+", -"2 2 +.W.A.y.V V V V V V V V V V V V :+)+`.*+*+$+*+q.b+!+R.$+)+N.Y.0+@+G.O.=+#+q.b+!+N.%+)+N.Y.0+&+q.b+!+R.$+;+P.Y.0+@+O.D.Y.-+#+#+N.'+[+8+g+2 2 2 4 i.C+", -"2 4 +.Q.k.G./+V S T T T T T T T T o+t+1+$+#+]+]+>+2+3+!+ +Y.1+$+=+G.R.3+E.;+=+2+]+!+ +Y.1+Y.=+G.R.2+3+!+Y.Y.1+$+=+G.R.2+M.=+#+;+N.~+.+Z.{+8+2 2 2 4 i.F+", -"2 2 +.W.Q.y./+V V V V V V V V V V o+t+&+#+#+*+R.X.$ $ $ $ -+1+.+a+$+G.a+C.N.w.%+-+@+{+$ '+@+~+#+2+4+M.A.~+N.!+4+#+C.=+P.M.;+-+)+N.C.O.D.O.~+4 4 2 2 i.F+", -"2 4 +.Q.W.2+/+V V V V V V V V V V o+t+;+~+~+&+*+@+$ P. +1+$ C.*+x. +P.P.x.y.L.`.=+`.!+$ O.A.3+x.D.M.G.C.!+D.2+P.{+$+ +2+-+S.#+=+4+I.X. +&+~+2 4 2 4 i.F+", -"4 4 +.Q.X.`./+V V V V V V V V V V :+t+Y.Y.-+b+'+@+$ a+@+y.$ -+@+$ $ X. +a+$ $ $ ~+d+P.$ A.$ $ $ $ 8+&+>+$ $ $+S.=+$ $ &+a+D.C.#+Y.S.=+N.[+,+4 4 2 4 i.C+", -"4 4 +.Q.y.Z./+V T V V V V V V V V :+t+=+1+E.S.C..+$ $ $ $ N.!+$ X.@+$ E.@+$ )+S.$ #+@+$ z.O.2+~+$ Y.-+$ O.X.$ #+$ ~+z.$ )+%+.+=+2+N.#+%+@+9+4 4 4 4 i.F+", -"4 4 +.W.u.-+/+V V V V V V V V V V o+t+2+N.P.#+R.C.$ 0+q.$ Y. +$ $ $ $ P.~+$ |+1+$ 2+#+$ .+X.$ $ $ 4+=+$ -+G.R.)+$ $ $ $ N.]+1+~+O.N.)+#+,+f+4 4 4 4 i.F+", -"4 4 +.Q.E.v./+/+V V V V V V V V V :+t+;+S.=+$+{+E.$ '+M.)+$ !+$ G..+P.E.b+$ S.#+$ P.~+$ O.$ 3+G.$ =+C.$ A.v.$ )+$ -+-+~+C.#+=+)+=+)+L.L.*+g+4 4 4 4 i.F+", -"4 4 +.W.x.G./+V T V V V V V V V V o+t+)+`.@+w.R.E.$ X.$+-+# %+X.$ $ $ -+'+$ $ $ c+~+3+$ ~+$ $ $ $ {+P.@+$ $ &+1+Z.$ $ $ C.S.D.Y.N.-+G.~+*+8+4 4 5 4 h.F+", -"4 4 +.T.W.X./+V /+V V V V V V V /+:+t+C.!+D.3+P.!+E.X.$+=+M.*+~+!+P.`.&+$+$ C.N.b+{+A. +#+~+I.`.*+-+R.'+y.x.!+=+$+!+4+P.-+=+N.Y.N.&+1+P.[+g+5 4 4 4 i.F+", -"4 5 +.Q.l.v./+o+t+t+A+A+A+A+A+A+t+A+t+M.$+M.@+!+M.'+.+Y.b+S.)+@+X.v.G.~+`.$ N.E.#+]+.+2+*+I.~+Z.d+E.N.@+D.!+'+=+$+2+X.A.I.Y.Y.#+#+N.'+2+8+g+4 5 4 4 h.F+", -"4 4 +.W.q.{+t+H+H+H+H+H+H+H+H+H+H+H+H+a+S.'+c+O.u.~+b+)+w.!+4+$+8+$+O.c+E.L.B.-+#+&+{+$+#+$+{+'+4+0+N.C.]+R.~+|+;+E.-+X.*+1+B.;+N.;+.+L.]+0+5 5 4 5 i.F+", -"4 5 +.T.A. +.+O.G.y.C.=+;+$+`.&+.+R.N.N.)+=+S..+P.8+P.4+N.1+)+X.M..+X.`.2+Y..+E.-+{+y.@+E.1+1+P.2+@+8+$+@+P.Y.C.4+@+D.4+C.)+N.C.&+]+,+`.1+$+4 5 4 5 i.D+", -"4 3 +.Q.p.c+w.R.4+w.M.1+B.-+y..+0+N.$+1+N.E.{+W.*+.+'+=+p.$+4+Z.S.G.C..+~+S.!+7+1+'+]+]+7+$+>+-+@+ +D.{+{+{+&+L.>+Y.2+`.{+{+{+~+*+0+~+[+a+0+5 4 4 5 i.D+", -"5 4 +.T.q.Y.E.S.M.C.$+=+S.4+A.3+&+D.Y.#+G.*+Y.E.b+ +d+8+$+-+4+]+M. +.+E.P.{+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+h+e+e+e+h+e+h+e+k+h+9+k+e+9+h+k+q+5 5 5 4 i.D+", -"5 5 '.T.v.=+q.0+!+R.$+;+N.Y.0+@+O.M.=+#+b+@+G.X.&+P.]+c+N.#+Y.*+M.G.@+@+-+E.h+s+s+s+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+B+z+z+B+z+z+z+z+z+z+z+y+5 4 5 5 i.D+", -"4 5 '.Q.q.@+2+]+!+Y.Y.1+Y.=+G.R.3+E.;+-+*+b+.+8+*+X.*+D.=+;+$+=+#+R.@+{+P..+T.j k l l l l l l l l l l l l l l l l l l l l l l l l l l l l j 5 4 5 5 i.D+", -"5 5 '.T.B.O.M.R.2+M.4+#+M.y.A.v.2+!+Y.=+-+)+B.&+&+{+&+!+S.S.Z.b+Z.0+E.*+ +'+T.j j j j j j j j j j j j j j j j j l l l l l j j j j j j j j j 5 5 5 5 i.D+", -"5 5 '.T.M.R.E.X.O.C.$+=+S.4+A.3+@+D.Y.;+M.'+{+&+R.z.y.$+N.4+)+R.y.{+.+E.P.R.h+h+h+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+o.5 5 5 3 i.D+", -"5 3 '.T.D.E.p.0+!+R.$+;+N.Y.0+@+G.N.$+#+@+*+*+'+D.I.~+$+N.a+Z.&+Y.@+b+D.*+*+K.K.T.Q.K.}+Q.Q.J.T.Q.K.}+Q.Q.Q.T.}+}+T.T.T.T.T.K.T.}+Q.T.Q.)+}+3 5 3 5 i.D+", -"5 3 '.T.x.S.N.#+A.-+O.y.C. +]+*+'+-+y.N.$+'+N. +'+~+&+#+1+S.-+X.Y.E. +D.!+N.E.S.)+~+$+#+@+`.#+ +X.=+@+C.*+P.E.=+a+2+{+E.~+N.v.$+Z.O.Y.Y.0+0+3 5 5 3 i.D+", -"5 3 '.T.E.S.2+A.!+ +Y.1+$+*+O.X.2+E.)+-+!+`.=+#+C.#+B.3+S.1+'+Y..+E.*+)+y.$+E.1+1+P.2+@+8+&+@+R.Y.C.2+$+D.4+C.)+N.C.&+]+-+`.1+$+$+M.%+P..+]+3 3 3 3 i.D+", -"3 5 '.T.y.S.(+_+:+:+:+:+:+:+:+:+:+_+U b+-+P.y.&+E.E.X.O.C.$+=+S.4+A.3+&+D.Y.#+E.S.M.C.$+%+S.4+D.2+@+D.Y.#+E.X.O.C.$+=+S.4+A.3+&+D.Y.=+%+#+,+3 5 5 3 i.D+", -"3 3 9.T.u.G.V V V V V V V V V V V V :+#+$+D.a+!+3+p.0+!+R.$+)+N.Y.0+@+O.M.=+;+q.0+!+L.$+)+N. +0+&+I.I.=+-+p.0+!+R.$+)+N.Y.0+@+O.M.=+#+l.@+0+3 3 5 3 i.D+", -"3 3 +.W.q.'+/+V S T T T T T T T T o+t+2+S..+@+-+P.2+3+!+ +Y.1+$+=+G.R.2+E.;+-+2+]+!+ +Y.1+$+%+I.R.3+G.)+#+2+3+!+ +Y.1+$+*+O.L.3+G.)+=+d+{+,+< 3 3 3 i.D+", -"3 3 +.T.q.0+/+V V V V V V V V V V o+t+M.]+R.Y.N..+$ ~+ +N.M.w.]+O..+#+.+*+)+S.|+$+E.D.N.$ Z.I.%+E.~+L.$ $ $ $ )+$+`.X.B.2+Y.]+v.-+$ %+I.@+0+3 3 3 3 i.D+", -"3 < +.Q.x.~+/+V V V V V V V V V V o+t+#+!+>+a+O.'+$ P.)+M.Y.b+]+$+ +@+v.&+A.E.Y.B.$+@+I.$ P..+]+Z.$+@+$ !+.+!+$ #+-+]+]+.+0+1+1+$ !+&+Z.2+4+< < 3 < i.D+", -"< < +.Q.q..+/+V V V V V V V V V V :+t+)+3+!+`.x.X.$ '+D.Y.L.1+$ $ -+R.$ $ $ $ 1+2+0+$ $ $ b+L.~+#+4+I.$ +'+2+$ -+'+$ $ *+$+I.$ $ $ Y.Z.I.6+< 3 3 < i.F+", -"3 < +.T.q.`./+V T V V V V V V V V :+t+$+.+u. +c+3+$ ~+b+y.$+# L.G.$ O.'+]+'+$ -+Y.$ !+!+$ [+~+~+-+#+!+$ @+#+Y.$ ;+$ 2+2+$ w.'+-+$ Z.4+3+]+8+3 3 3 < h.D+", -"< < +.Q.A.P./+V V V V V V V V V V o+t+Y.N.]+P.b+R.$ ~+&+$+#+$ 2+D.$ '+&+$ $ $ Y.b+$ )+&+$ @+B.{+!+ +$+$ N.0+P.$ #+$ $ $ $ Y.P.Y.$ N.C.%+b+6+< < < < i.D+", -"< b +.T.x.x./+/+V V V V V V V V V :+t+!+&+.+D.-+ +$ *+N.|+N.$ &+,+$ +$ 0+y.$ b+~+$ 2+#+$ 2+Y.X.C.`.O.$ @+.+I.$ )+$ ~+a+.+1+B.1+$ w.Z. +,+g+< < < < i.D+", -"< < '.T.M. +/+V T V V V V V V V V o+t+1+.+.+~+z.&+$ $ $ $ M.!+$ $ A.@+$ $ $ $ M.4+3+$ $ $ 2+!+@+Y.`.1+$ $ $ $ S.S.-+$ $ $ Y.c+N.$ %+ +$ !+8+< b < < i.F+", -"b < '.Q.q.Y./+V /+V V V V V V V /+:+t+)+~+*+X.$+-+R.O.y.w.E.1+3+v.)+.+&+C.Y.1+M.$+@+,+Z.'+&+ +.+D.#+ +,+c+E.G.Y.)+!+]+D.!+J.M.M.4+4+'+Z.P.8+< < b < h.F+", -"< b '.T.q.!+/+o+t+t+A+A+A+A+A+A+t+A+t+|+!+-+~+$+R.L.Z.#+S.1+!+Y.@+G.*+)+y.@+#+1+%+Y.*+Z.0+X..+R. +P.O.*+@+z.X.)+=+N.N.x.#+S.=+1+S.0+*+I.[+d+< b < b i.F+", -"b b '.T.D. +t+H+H+H+H+H+H+H+H+H+H+H+H+4+)+*+'+E.~+z.=+7+Y.b+=+Z.1+]+R.,+%+M.N.B.Y.$+!+R.P.O.X.v. +4+&+b+*+b+-+E.`.I.E.@+,+D.;+|+M.)+.+8+0+j+b b < b i.F+", -"b b '.T.v.Y.2+z.`.E.O.y.C..+]+*+'+-+y.N.$+-+R. +'+{+*+#+1+S.-+X.Y.E. +D.!+N.C.Z.)+~+&+-+@+Z.,+ +L.%+@+C.*+O.E.=+a+4+{+C.!+N.v.$+S.O..+ +0+0+b b b b i.F+", -"b d '.T.u.!+4+&+>+&+0+ +{+R.{+y.S.|+$+a+4+0+)+~+P.-+)+x.=+y.1+Z.&+!+*+#+C.R.1+Z.#+ +@+O.{+.+!+&+]+L.~+P.]+.+Y.E.)+-+@+R.X.4+C.)+L.]+.+9+L.8+b d b d i.F+", -"b d '.T.N.#+*+!+8+$+Z.1+R.!+&+&+P.G.*+'+1+>+4+'+&+X.a+O.X.&+$+X.3+R.7+-+a+!+>+c+2+!+1+]+d+&+!+'+&+.+C.{+{+]+*+X.~+Y.4+ +{+]+]+{+*+0+~+[+8+|+b b b d i.F+", -"b b '.T.T.T.h+h+e+k+k+h+h+9+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+h+e+e+e+h+e+h+e+k+h+9+k+e+9+h+k+q+a d b d i.F+", -"d d '.T.h+s+z+B+s+B+z+y+z+z+z+z+z+z+z+z+z+B+z+z+z+z+z+z+z+z+z+B+z+z+z+z+z+z+z+z+z+B+z+z+y+z+z+u+y+z+z+z+y+z+z+z+z+z+B+z+z+B+z+z+z+z+z+z+z+z+b b d d i.F+", -"d d b b c d c d c c b d d d d d d d d d d d d d d d d b c d d d b d d d d b b b d d d b d d d b d b b b c b d d d d b d b c c d d d b d c d d d b f i.F+", -"d d d d d c b c b d d d d d d d c d c c d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d c d d c d d d d d c c c i.F+", -"d c c d d d d d d d d d d d d d d d c c d d c c c d c c c d d d d c d c d d c d c c a c d d d d d d d d d d d d d d d d c d c c c c d c d d c c f g i.F+", -"c c c c a a c d a c c c i i c d c d c f c c h f c c c c c a d c c c c c d d c d c c f g g c c g f f c a c c g c c c a c c c c c c c c g h c c c g g i.F+", -"a a c a h c c a i f i a d f c a a c g g i c i a h a a a c h a c a i f c a c a a i a g f c i a a a c i h a a h g h h i c a a a a a i a a a i a h h i i.F+", -"a h h a a h a h h h h i i a a h h a h h i i a h c c h c a h h h h i a i a h h g a h h h h a a h a a a h h i h a c h a h h h a h h a h a i h a a h h i.F+", -"i a h a a h h h a i h i h h h a h h i h h h h h a i h i h l a a h i l h h h h h i h h i a h i h a h i a h h h h i i h a h h h h h h h h a h h l i k i.F+", -"i h h h h i i h h h i h l i h i i h i i h i i h i h h h h h k h h h l i h i h h i i h i g i h h h h l h i l h h l h h l i h l h h h h h h i h i h k i.F+", -"l l i k k k l l h k l l i i i h i l h h l h h h i i h h k l l h l l i l l h i i l l i l l l i h h h l l i l h i l i l i i k i k h h k l i l l k k l h.F+", -"l h l i l l l h l h h l l l l l k k l h l l k k l l l h l h l h l h k k l h l h l h k l h l l l l l k l k l l l k l h l l l i l l l h l h k l h l k i.F+", -"k k k l h l k k k l k h l h l l k l k l h l l k k h l k k l l k l k l l l l l k k l k l k l h l h l l l l l h l l l l l h l l l h l k l k l l l h m i.F+", -"l k l l l l k l l l l k l l k k l k l k j h l k k k l l l l l l k k k h k l l l k l l l l k l l k l l l l l k k l l h k k j h k l l l k l k l l l j i.F+", -"l l l l l l l j k l l l l l l k l l l l k l m l l l l j l l l l l j l l l l l l l m k l l l l l l j l l l l l l l l l l l l l l l l l l l l l l l m i.F+", -"l l l l l l j l m j l m j l j l l l l j l l l l l l l l j l l l j l l l l j l l l l k l m l l l j l l j m j j l l l l l l l l l j l l l l l l m j m i.F+", -"m j l j j l j j j j j l j l l l j j j j j j l j l j j j j j l l l j m l l j j j j j j j j l l j j j j l j l j l j l j j j j j j j l j j l j l j j j i.F+", -"j j j j j j j j j j j j j j j j j j l j j j j j j j j j j j l j j j j j j j j l j j j j j j j j j j j j j j j j j j j l j j j j j j j j j j j j j n i.F+", -"j j j j j j j j j p j j j j j j j j j j j j j j j j j j j j l j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j p j j n i.F+", -"j j n j j j j p j p n j n j j n j j j j j j n n n j j j j j j j n j j j j j j j j j j j j j n j j p j j j p j j j j n j n j j j j j j j j j p j j n i.F+", -"p j n p j p j p j p n p n p j j j j p j p n p p n p j p j j p j j j n j j n j p j p j n n p p p n p n r n p n j p n p p p j n j j p p j p n p r j e i.F+", -"p p p p p p p p n p p p n p j r r r n p j p n j n p j n p p p j p n p p p p n p p j p n p p p j n r n n p p n p p r r p p j p p j n p p p n r n n e i.F+", -"p p p p p p p p r n r r r n p p n r p p p r r r r r r p r r r t p p p p p n p p p p p r r r r r r r n r r n p p p p n p p r r p p p p p p p t r p e i.F+", -"p p p p e e w e e e e e p p p r r r r r r r e e e e e r e e e t p p p p p t r r p r r r e e e r e e e e r r t p p t w e e e r r r t p p p p t e e e i.F+", -"p p t t t e w e e r r v t r r r e e e v e w w w w r w e e r e w w v r r p t e r r p r r e e e e r w e w w e r t p p t r w e e e e w p t t e t p r r i.F+", -"t w e p x w w r w w w p r r t w w r w x r v x r e r r e r w e e r t v w e v e e x x v e r v r r e v w w w v p p t v e w w w r v r v x w w e p t v e i.F+", -"t r e p w w w w e x w t w w e v e r v n v e t v w w e t v v x w t t v v v t r v v r x e v v w v x v w r w x v v e t t w v x w e w x r v w v x v t e i.F+", -"w v w w v x r v x x v w w w v v t w v v v v v w w v v v v r v w v e v e v t w r x r v v v e v e x r x r v v t w w w w v x r v v v v t t x r v t t x i.F+", -"w w w v w v v v r x v x v x v v v v w v x v v v v v v v v v v w v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v x v v v v v v v v v x i.F+", -"x v v v v v v v v x v v v v x x v v v x v v x v v x v v v v v v v x v v x v v v x v v v x v x v v v v v v v x x v v v x v x v v v x v v v x x v x x i.F+", -"x v x x x v x x x x v x x v x v x x x x v v v v v x x x x x v v x x v v x v x v v x x v x x v x x v x x v x v x v x v v x v v v v x x x x v v z z x i.F+", -"x v x x x x x v x y v x x y x x v x x x y u y v v v v x y v x y x x x v x y x v x x y x x x y x x x x x x x x x x v x x v x x x x x x x x x y x x z i.F+", -"y y y x v x y y x y y y x x x y x y y x y u y u u x y y x y y y y x y x y y x x y y y y x y x x y y y x x y y x y y x y y y v y x v x x x y y z x z i.F+", -"y x y y y y y y y z z z y z z x y y y y A y y y y z x y y y y z y z y z y z y y y z y y z y y y y y y x z y z y y x y y y y y y x y y z y z z z z z i.F+", -"u y y y y y z z z z z z z y y z y z z z z A u A y y y y z z y y y z y y y y z z y y z y z y y y z z x y y y y z y z z y y y z y y y y x y z z z z z i.F+", -"A s z y y A z z z z z z z z z A z z z y A A y z z y y z y A y y A z z y z y z y y z y z y z y A y y y y y y y z y A y z z y A y z z z y z z z z z z i.F+", -"z A B B A y z B z B z s A A z A A A A z y A s s z z A A A A A z A A A z y A A A z A z A A z A A z z A z y A y z A z A A z A A A A z A A A z A A z z i.F+", -"z B z B B s s s z B z s B A A A A z A z A A z A A A A A z z A A z A A A A A A A A A z z z A A A A A A A A A A A A A A A A A A z A A A z A A A A A B i.F+", -"s s A z B A B s s s B z B A A A s s z s s B s B A A z A B z A A A A A A A A A A A B A A B B s A A A A B A A A A B A B B A A A B B A A A B B B A B B i.F+", -"A s A B B A s B B B B B B B A B A B B s s B A A A A B A B B A A A A A s B B E B A B B A B B A B A A B A B A A B B B A A B A B B B A A B A A B A A B i.F+", -"B s B s A B A B B B B B B B A B D B B E B B B D E s A A A E s A B B s A A B B B D B B B B B A s A A A A B E E A B s s s A B E B B E H s B E s s A H i.F+", -"B D B E D D D D B B H B D B E B D B B I H B A E E B s B s B E D D E B D B B E H z D D A D D E s E s E B D B B D E E B s s B D H B H B H H s E E D H i.F+", -"H H H H H D D H H B H H D H H I I I D I B H E D B D D D B E E D H H H H D D D D D D H D B D E B E E D B D D H H H D D D D D D H H H H H H D E D D H i.F+", -"H I H H H I H H H H H H H I I I B I B I B D D D H H B D D D D D H H H H H H H H H D D H D D I I D D D D D H H H H H H H D D H H H H I D D D H H I I i.F+", -"H I H D H I H I H H K K H I I I I I K I D K H D D D I D I I D D I B I H I I H H H D D D H D D D I D H I D D I H I H H H I D I I I I H K H D H H I I i.F+", -"I I H G G I I I H H I I H H H I K B D I I I H D D D I H I D K I K I K H H I H I D D I I I I D I I I D D I I I H K I K I I D D I H I I H K D D I D I i.F+", -"H K I I H G I I H K I I I K I K I I I K H H I I D I I I I I K H I K I I I H I I I I I I I I I I D D I I I I K K H I K I D I I K H K H G K I I I I K i.F+", -"K I I G I I I I K G G G I K I I I I I I I I I I I I G I G K K C K I I L I K I I G I K K I K G I K I I I I I I C K K I I I K I K I G G K I I K I I K i.F+", -"G I G G K G G G K G L G L C L I J K J K K K I K K G L L G I L K K I I L G K K K K I C K I I G I I K J K I K K G C K K K K I K I J L G L K K K G G K i.F+", -"J K K L G L G K J L L G G J K K I K I K K K I K K L L G K K L I L K I G C K K G K G K K G G G K K K C I G J K G G G K L L L L J J G J C G K L L L L i.F+", -"K I K K K I K K L J G L G K J K K K K K K K K K K C K K J J J J C J J L L L K K K K K K J K K L J G K J K I K G J K I J G K K G L L L L J L L G L L i.F+", -"K K J J J J J J L C J J J J K J J J J J J J J J J J K K J I J G J J J L C K K K K J K K J L C J J J J G J J J J J J J J J J J K J L C J J M C J R M i.F+", -"J K J J L J L Y R R L J J J J Y J J J J L J L J L Y J J J J J J J J J L J J J K J J J J J J J J J J J J M J J J J J L J J J J M R M J J J J J J L R i.F+", -"Y J J J J J J R L L .J J M J R J J J J Y J J J J M J J M J R J J J J J J J J J Y J J J J J J R R J J Y R L J J L J J J M R L R L Y J R J J J K M Y i.F+", -"R J R R Y M M L Y Y .R Y J J J J J R R R R R R R R R R Y R R J R J J R Y J J J Y J J Y Y J J Y J J R J Y Y Y Y Y J Y R J Y Y Y R .J J J R J J M Y i.F+", -"R J R R .M Y Y Y .R Y R R J R R R R R R J R R J R ..J J R J R R R R R R R R Y Y J R R R R R J J R R R J R R R R R R R R Y Y Y R J R R Y J Y Y Y .i.F+", -"Y R R R .Y Y Y Y ..Y R Y R R Y R Y R Y R R R Y Y R R R R R ..Y R R Y Y R R ..R Y R R R R R Y Y R R R R R R Y Y Y ..Y Y R R Y Y .R Y ..R R ..R R Y i.F+", -".. .R R Y Y Y Y R ..Y R .R R R Y R R ....R ..R R M ..Y .... .Y ..R R Y R R Y .... .Y R ..Y ... .R R R Y R R Y R Y .. .R R .Y R R R ....R Y R .. .i.F+", -"R Y Y ....Y . . .Y .......... ..... .R R .. .R ....Y Y .Y .R R ....Y ..R R Y .....R ... .Y ..Y ....R .. .Y ...R Y ..Y Y .......R R R ..Y ..Y h.F+", -"` R ..Y . . . .....Y ...Y . ...Y .` Y .. .` Y .. . . .R .....Y . .....Y ....Y ...Y ..Y ` .. ...Y Y ... . ......... ...` ..Y .. . . ... . .@.i.F+", -" ... .@.@.@. ...Y ` .` . ......... . ... . .` .... ...` ....R ` . ..... ... . . . . ... ...@.@.@.@.@.@...Y .. .Y .Y ...Y .. .@.@.` . . .` .@.i.F+", -"` ...@.Y @.@.@..... .` ...` . ..... .` ......@.@.@... ..... . .` ..` ....` .... . .......` @.Y ..@.Y ` . .......` ` ..` . .@.Y .. . .` .... .@.i.F+", -"` ` @.` ` ` Y @.` ..@.@. . .@.@...` .` ..` ` ` ` Y @.` ` .. .....@.` @.` ` .` ..` ...@. . .` ` ` ` ` .. .@.` ..` .@.` ....` ` ..` ` ..@. .` ` @.i.F+", -"` @.` ` @.` ` ` ` @.@.` @.` ` ` @.` ` ` ` ` @.@.` ` ` ` @.` ..` ` ` ` @.@.` ` ` @.` ` ` ` ` ` ` @.` ` @.` ` ` ` @.` ` ` ` @.` @.` ` ` @.` ` ..` @.@.i.F+", -"` ` $.` @.` @.$.` @.$.$.@.` ` ` $.` @.$.` @.$.` $.` @.` ` @.$.` $.$.` ` $.@.$.@.$.` ` $.$.@.` @.` ` @.$.$.@.@.$.@.$.` @.` @.@.` @.@.` ` @.` ` ` ` @.i.F+", -"$.@.` @.@.$.$.$.` $.@.` $.` $.$.` $.$.@.$.$.$.$.` @.$.` @.` ` $.@.@.$.` $.$.$.$.$.$.$.` @.$.` ` $.@.` ` ` $.$.$.$.@.$.$.` @.` @.` ` @.` $.$.` ` ` #.i.F+", -"$.$.$.$.@.$.$.$.$.$.$.$.$.$.%.$.$.$.$.$.%.$.$.$.$.$.$.$.%.$.$.%.` $.$.$.$.` $.@.$.$.$.$.$.$.$.$.` $.$.$.$.$.$.$.$.$.` $.$.$.$.$.$.@.$.` $.$.$.$.$.#.i.F+", -"#.$.$.$.#.#.#.#.#.%.#.#.#.#.%.#.$.$.%.$.$.%.#.#.#.$.$.$.%.#.#.%.#.#.#.$.#.#.#.$.$.$.#.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.#.$.$.$.#.$.$.#.$.#.#.#.i.F+", -"$.%.%.$.#.#.#.%.%.%.%.#.#.&.#.&.$.#.%.#.#.%.%.#.%.*.$.#.%.%.#.%.#.#.#.#.%.#.%.$.%.#.#.%.$.#.$.$.$.#.%.$.$.$.#.#.%.*.#.#.$.#.#.#.%.#.$.$.#.%.%.*.#.#.i.F+", -"%.%.%.$.*.#.;.&.&.#.%.#.&.#.#.*.#.%.#.#.&.#.%.#.%.*.$.%.%.#.#.*.#.#.%.#.#.#.%.$.%.%.%.%.%.%.%.$.#.#.%.%.%.%.%.%.%.%.*.*.*.&.&.$.%.$.%.%.%.%.#.%.%.%.i.F+", -"%.%.%.%.%.&.&.#.&.%.#.%.%.%.%.*.*.*.*.*.*.*.*.%.%.%.%.%.*.&.%.&.%.#.%.%.*.%.#.*.%.%.%.$.%.%.%.#.#.%.%.%.%.%.#.%.*.%.%.#.*.#.%.%.%.$.%.%.%.%.%.%.%.%.i.F+", -"%.%.%.%.%.*.#.&.&.;.#.%.%.%.%.*.#.%.%.#.#.%.*.#.%.&.&.;.#.&.#.%.%.%.%.%.*.#.%.*.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.*.%.%.%.%.%.*.%.%.%.%.%.%.%.%.%.%.*.i.F+", -"%.%.%.&.%.%.&.&.&.&.%.%.%.%.%.&.%.%.%.*.*.&.&.=.&.&.&.&.*.;.%.%.&.%.%.%.%.*.*.*.*.*.&.%.%.%.=.%.%.&.%.%.*.%.%.%.*.%.%.*.%.*.%.*.%.&.%.%.%.%.%.%.%.*.i.F+", -"%.%.*.=.&.>.=.#.>.;.>.;.*.%.*.%.&.%.*.;.&.&.&.&.%.&.;.&.&.>.&.&.*.&.*.;.*.%.%.&.;.&.=.=.&.=.&.;.*.*.%.%.%.%.&.*.*.;.*.*.*.&.*.&.%.*.*.%.%.%.*.%.%.&.i.F+", -"=.;.%.*.&.;.=.=.=.&.;.=.;.*.*.;.;.;.;.&.*.;.;.;.=.;.>.&.&.;.=.;.*.*.;.;.=.*.;.;.;.&.&.&.&.&.=.*.;.&.=.*.*.&.&.=.*.;.%.;.%.*.=.=.=.=.&.%.=.&.*.*.=.=.i.F+", -"=.*.;.*.>.;.&.;.>.&.>.*.%.;.*.;.;.&.;.&.=.=.;.;.;.&.&.=.;.>.;.;.;.;.=.*.>.&.;.;.=.=.=.&.;.*.;.=.&.;.;.=.&.*.;.;.*.*.&.;.;.=.&.&.;.&.=.=.&.=.*.%.*.>.i.F+", -"&.=.;.;.;.=.=.&.>.&.=.>.>.=.;.;.;.=.=.=.=.&.=.=.=.=.=.=.&.>.>.;.;.;.;.;.&.=.&.=.;.&.>.>.>.=.;.;.;.=.;.=.=.=.=.=.;.;.;.;.;.=.=.=.;.&.;.&.;.=.;.=.=.>.i.F+", -"=.=.=.=.=.=.=.=.=.=.>.&.=.;.;.=.=.=.=.;.=.=.=.=.=.=.=.=.=.>.&.=.=.=.=.=.=.=.=.=.;.=.>.&.=.=.=.=.>.>.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.>.>.i.F+", -"=.=.>.=.>.>.=.=.>.>.=.=.=.=.=.>.=.=.=.>.>.=.>.=.=.>.=.=.=.>.=.>.=.=.=.=.>.=.=.=.=.>.>.>.=.=.=.=.=.>.=.=.=.,.>.=.=.=.>.=.=.=.=.=.>.>.=.>.=.=.>.,.>.~.i.F+", -">.=.>.=.=.=.>.=.=.>.=.>.=.=.=.>.=.=.>.=.=.=.>.=.>.>.=.=.>.=.=.=.>.=.>.>.=.>.>.=.=.=.=.=.=.>.=.=.=.>.>.=.>.,.=.=.,.>.>.=.=.>.,.=.=.=.=.=.=.=.=.,.=.~.i.F+", -">.=.=.>.=.>.>.=.>.>.>.=.>.=.=.=.=.>.=.>.>.=.>.=.=.=.>.>.=.=.>.=.>.=.=.>.>.>.=.=.>.>.=.>.>.=.=.=.=.,.=.>.>.,.=.=.=.,.>.>.>.=.,.=.>.>.>.=.>.>.=.>.,.~.i.F+", -",.>.,.>.>.=.,.>.=.>.=.>.>.>.=.>.,.>.>.=.>.>.>.>.>.>.>.>.=.,.>.>.,.>.=.>.,.>.>.>.>.>.>.,.>.>.>.>.>.,.>.>.>.,.>.=.,.,.=.=.>.>.,.,.,.,.>.>.>.>.>.>.,.>.i.F+", -",.,.,.>.,.,.,.].,.,.,.~.{.{.,.,.,.,.,.>.>.>.>.,.,.,.~.~.~.,.,.>.,.>.,.>.,.>.>.,.,.,.,.>.=.~.~.{.~.{.,.,.>.,.,.~.~.{.,.,.{.{.{.{.,.>.,.,.{.{.{.,.,.~.i.F+", -",.,.,.,.].,.,.{.,.,.,.{.{.{.{.{.>.>.{.,.,.,.,.,.,.{.{.{.{.{.{.~.{.{.{.{.,.{.,.>.,.~.{.{.,.{.{.{.~.,.,.,.,.,.{.{.{.].~.{.{.].{.,.,.,.~.{.~.~.{.].{.{.i.F+", -"{.{.{.{.].{.,.,.,.>.{.,.{.{.{.{.{.{.{.,.,.,.,.{.,.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.,.{.{.~.].{.{.{.{.{.{.{.].{.{.{.{.{.,.].~.{.~.{.{.{.].~.{.i.F+", -"{.{.{.{.].{.].].{.,.,.,.{.{.{.{.{.{.,.,.{.{.,.,.,.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.].{.{.].{.{.{.{.].{.,.,.,.{.{.].{.{.{.{.{.].{.{.{.i.F+", -"]./.].{.].{.{.].,.,.{.,.(.(.].{.].{.].{.{.{.].].,.{.{.].,.{.]./.{./.].{./.{.{.].{.{.{.{.].].{.].{.].].{.(./.{.{.{.].,.[./././.{.].].].{.{.]./.{.{.].i.F+", -"{./.{.].(.(.{./.{.].]././.{.{./.{.].].,.].{.].].].].].].].(.].(.].{.{.].].]./.{.{./.{.{.].].].]./.{.].{.{.].{.].{.(.{./.{.{.].[.].{./.{.{././.{.].(.i.F+", -"].]./.].{.(.{.]./.].].].].].]./.].].].{.].].]./.].].].].].(.{.(.].].{./.{.{.{././.].{./.].].].].].]./.{.(.{.].].{./././.].].{.].{.(./././.{././.{.(.i.F+", -"/.{.].].].]./.].].].].].].].].].].].]./.].].].]././.[.].(.(.].].].].].]./.].]./.].].].]./.].].]./.]././.]./.]./.]./.].]././.].]./.{./.{./.{.].(.{.(.i.F+", -"/.].].].]././.].].].]./.].].].].].].].].].].].].].].[.(.].(.].].].]./.]./.].]./.].].].]././.]./.].].].]./.].]././.].]./.]./.]././.].].]./.].(.]./.(.i.F+", -"/.].].]./.[.].(.(.[.<.(.].]./.<.<.].[.<.[./././././.[.].(.}.(./.(.]./././.]./.].]./.].[.]./.<././.[.[.[././.]./././.]./.].}./.}./.].(././././.[.(.(.i.F+", -"(.(./.(.(.]././.].].[.<.<.<./.]./.[./././.<.<.}.}./.(.<.(.(.(.(./.(.[.[././.[.[.]././.[.(.[.].[./.[.(.(.(././.[.]./././././.}.]./.(./.(.}.].(.}./.}.i.F+", -"[.[.(.(.<.<.[.(.[.].[.<./.<.<././.}.|.|.}./.}./.<.[.<.(.]./.(.]./.<.<./.}.}.}.[././.[.[.<.<.<.<./.<.<././.<.<.<./.<.[.].}.].[.[./.[.<.<.<.[.[.<.<.}.i.F+", -"[.<.<./.(./.<.<.<.<.<.}.<./.}.}.}.<./.|.|.}./.}.<./.<.(.[./.<.<.<.<./.<.<.}.}.}.<.<.<.<./.}.}.}.<.<./.[.}.}.}.<.<.<./.<.<.<.[.<.<.<././.<.<.<.}.}.|.i.F+", -"}.}.<.<.<.<.<.<./.<./.|.}.}.}.}.}.|.|./.|./.<.<.}.<.[.[.<.<.<.}.}.|.}.<.<.}.}.}.}.<.<.}.<.}.}.|.}.}.<.<.}.}.}.}.}.}.}.}.}.}.}.}.}.}.|.}.}.<.<.}.|.|.i.F+", -"}.}.}.<.}.<.|.<.<.|.<.<.|.}.}.|.}.|.|.}.}.|.|.}.|.<.<.<.<.}.}.|.|.}.}.<.<.|.|.|.}.}.}.|.<.}.}.|.}.|.}.}.}.}.}.}.}.}.|.}.}.}.<.|.|.}.|.}.}.<.}.}.}.|.i.F+", -"<.<.|.|.|.|.}.|.<.<.|.<.}.}.|.|.|.|./.2.2./.<.|.<.|.|.|.<.}.|.}./.<.}.}.<.2.}.|./.|.}.|.<.|.|.}.|.|.|.|.|.<.}.<.|.<.|.|.<.}.|.}.|.|.}.2.<.<.<.}.2.}.i.F+", -"<.|.<.|.|.|.|.|.}.|.|.|.|.|.|.}.}.|.|.|.|.2.|.|.<.|.<.|.|.2.2.|.2.|.|.|.|.2.|.2.|.<.|.<.|.<.}.|.|.}.|.}.2.<.|.|.|.<.<.|.2.|.:.}.|.}.|.|.<.|.|.|.2.}.i.F+", -"|.|.|.<.<.|.<.|.|.|.|.|.|.|.2.|.|.2.|.}.2.|.2.|.|.<.|.|.|.2.}.|.|.<.|.|.|.2.}.2.|.|.|.|.|.|.2.|.|.|.|.2.|.|.|.|.<.<.|.|.2.}.|.|.|.|.}.2.|.<.|.|.2.:.i.F+", -"|.|.|.|.|.|.|.|.|.|.2.|.|.|.|.|.|.|.|.3.|.3.|.2.|.2.|.2.|.|.2.:.|.|.|.2.2.|.|.3.|.2.|.|.|.|.|.2.:.|.|.2.|.|.|.|.:.|.|.|.2.|.|.|.|.3.|.2.|.|.|.|.|.2.i.F+", -"2.|.:.|.2.|.:.|.|.1.|.2.1.2.2.3.2.|.|.|.2.|.|.2.|.|.2.|.|.|.2.3.:.|.|.2.|.|.|.|.2.2.:.|.|.|.2.1.:.|.2.1.|.2.:.|.1.1.|.|.2.|.3.:.|.:.2.2.|.|.|.|.|.2.i.F+", -"2.|.2.1.1.2.2.:.|.:.|.:.2.|.3.|.2.2.3.|.3.2.2.2.2.:.2.|.2.:.:.|.|.:.|.|.1.1.|.2.2.3.3.2.:.|.2.1.|.:.3.|.1.2.2.|.|.:.2.2.2.|.|.|.2.:.|.2.:.2.2.|.3.2.i.F+", -"3.2.3.2.1.2.2.|.2.1.2.2.2.1.2.2.2.|.2.2.2.|.2.1.2.:.|.1.1.2.1.1.2.|.1.|.1.|.2.1.:.3.|.3.3.2.2.2.:.|.2.2.1.1.|.2.1.|.1.:.|.|.|.2.1.1.2.2.2.:.:.3.:.1.i.F+", -"2.:.3.:.2.2.1.1.2.2.:.|.3.2.1.1.2.1.1.1.1.2.1.|.2.2.1.1.:.1.2.2.1.|.1.2.2.1.1.1.2.1.:.:.3.1.1.:.4.1.1.:.1.2.2.2.1.1.2.1.2.1.2.2.|.2.|.1.1.1.1.|.1.3.i.F+", -"1.1.2.2.2.2.:.:.2.2.2.1.1.1.:.2.2.1.:.1.:.2.1.1.1.1.:.2.2.1.:.2.1.2.1.1.2.1.3.:.1.:.2.1.3.3.3.1.2.:.2.2.1.2.2.1.|.2.:.2.1.:.2.2.2.2.1.:.1.|.1.1.1.1.i.F+", -":.1.2.1.1.1.1._._.1.1.:.1.1.2.1.2.3.3.3.1.2.1.1.1.1.2.2.1.2.2.2.1.1.1.2.2.:.1.2.1.2.1.1.1.:.3.1.1.1.2.2.1.1.2.1.1.1.2.2.2.1.1.1.2.1.2.2.2.1.1.1.1.6.i.F+", -"1.2.1.1.3.6.3.3.3.3.4.3.4.3.3.1.4.4.8.3.6.4.5.3.3.1.2.1.1.2.4.3.5.1.1.4.4.4.4.1.1.1._.3.1.1.6.3.3.1.1.1.1.1.1.1.5.4.3.6.4.4.3.4.3.4.4.3.3.4.3.4.6.3.i.F+", -"5.5.1.3.3.6.3.3.6.3.4.4.5.5.4.4.5.3.5.3.4.3.6.3.4.4.1.1.4.4.4.4.5.3.3.5.4.5.4.3.5.3.6.3.6.3.6.3.3.6.4.4.6._.1.3.5.4.4.6.3.4.3.3.3.3.6.3.4.5.3.4.3.6.i.F+", -"3.4.4.6.3.3.5.4.5.4.5.3.3.6.6.4.5.3.5.4.4.3.4.6.4.6.6.4.5.3.1.3.3.6.6.5.3.4.6.4.6.3.5.5.5.5.4.5.4.5.5.4.3.5.3.1.4.3.3.6.3.4.4.6.6.4.4.4.5.3.6.3.6.4.i.F+", -"4.4.3.6.4.4.4.3.5.4.4.4.4.4.3.6.3.3.5.4.3.6.3.6.4.3.6.4.4.4.4.4.4.4.3.6.4.4.4.3.6.4.4.3.5.4.3.5.4.4.3.5.4.4.4.3.5.4.4.4.4.4.4.4.3.6.4.4.4.3.5.4.4.3.i.F+", -"4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.5.5.5.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.i.F+", -"6.4.6.6.4.5.4.5.4.4.4.4.4.5.4.4.5.5.4.5.4.5.4.4.5.6.6.4.6.4.6.4.4.5.4.4.4.4.4.4.4.4.4.4.4.4.5.5.5.8.5.8.5.6.8.5.5.4.5.5.8.5.6.4.6.4.4.5.5.5.4.4.4.4.i.F+", -"4.4.7.4.5.4.4.7.8.7.4.5.4.4.5.8.6.4.6.6.6.4.5.4.6.8.7.8.4.8.4.6.4.6.5.6.8.5.6.5.4.7.6.4.7.5.7.5.8.8.5.5.8.5.5.5.8.5.8.5.5.8.7.5.4.8.7.5.5.4.4.5.4.4.i.F+", -"6.4.4.4.7.6.6.5.4.6.7.6.6.6.7.6.8.7.8.4.8.6.6.8.8.6.6.7.7.6.4.5.6.8.5.8.6.5.8.5.5.6.6.6.4.7.3.5.8.7.8.8.7.5.5.7.8.5.5.5.5.5.5.5.6.6.5.5.7.8.8.5.5.7.i.D+", -"8.5.6.5.4.6.6.7.7.6.6.6.8.4.7.6.8.6.7.6.6.6.4.7.4.6.6.6.6.6.7.4.8.4.5.8.5.7.4.8.4.4.8.5.4.4.7.5.5.8.8.7.5.8.7.5.5.5.7.8.6.8.8.4.8.8.6.5.5.5.8.8.8.5.i.D+", -"6.8.8.8.7.7.7.8.6.7.7.7.7.7.8.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.8.8.7.7.5.i.D+", -"7.7.C W.k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+6+k+6+k+6+k+k+k+o.} 8.7.7.i.D+", -"8.7.Z K.K.K.Q.Q.)+J.T.Q.K.}+Q.Q.W.T.}+J.T.W.J.}+W.W.Q.T.1+K.T.Q.K.)+Q.Q.Q.T.}+J.T.Q.K.1+Q.W.J.T.Q.K.)+Q.Q.Q.T.}+)+T.T.T.T.T.K.T.1+P.T.Q.}+1+| 9._.7.i.D+", -"8.8.Z K.7.q.v.l.l.y.y.k.v.l.l.u.k.y.u.q.v.l.q.y.q.g.q.k.l.u.v.D.k.p.q.g.l.v.k.E.x.q.l.k.u.p.g.q.x.B.C.k.q.l.v.k.l.q.g.q.w.l.q.l.l.k.y.k.]+,+~ 8.7.7.i.D+", -"7.7.Z K.A.N.`.`.p.B.P.Z.C.I..+@+R.`.=+E.`.E.I.x.I.u.@+D.w.E.$+@+R. +R.E. +G.E.`.S.x.L.A.x.N.~+*+$+w.@+z.l.N.E.A.P.G.*+P.=+Y.w.C.E.!+>+]+~+]+! 7.7.7.i.D+", -"7.7.Z K.$+S.@+#+v.'+X.$+L.I.Y.)+{+~+4+$+#+8+{+b+N.2+N.L.M.%+N. +X..+D.Z.D.)+J.Y.b+*+V.a+ +N.p.S.U.1+V.U.N.~+0+!+N.X.++X.V.#+Y.~+Y.)+>+G.>+~+! 7.7.7.i.D+", -"7.7.Z K.p.C.!+V.v+p+u+y+x+p+u+u+u+u+u+u+x+u+u+u+u+u+y+u+u+z+x+y+y+y+y+p+z+p+x+x+x+x+x+x+y+x+x+x+x+x+y+x+y+x+x+w+x+x+x+w+y+y+x+y+y+v+]+b+.+8+! 7.7.7.i.D+", -"7.7.Z K.B.'+P.R.j+/ ] , = % % % % % % % % = = ; - , ' / [ ] ] ] / / / [ 7 8 9 0 0 0 q O Q ^.b.a.N N W ^.^.^.^.!.!.a.a.a.a.b.a.j.a.s. +!+0+4+! 7.7.7.i.D+", -"7.7.Z K.w.$+P.P.f+- * . % % % % % % % % % % = = = - = * * , ) ] ] / ] / 7 / 6 0 O O O O Q P Q Q W ^.W ^.^.a.^.a.a.b.b.b.b.b.c.c.a.U.<+M.'+g+! 9.7.0.i.D+", -"7.9.Z K.v.=+*+b+6+] * c.x+v+v+v+v+D+v+B+v+v+v+E+D+w+i+; ' 5+E+A+v+v+v+v+p+p+y+w+w+v+w+v+y+i+8 U.r+w+w+x+w+x+v+x+x+x+x+y+x+x+x+U.P >+y..+]+]+! 7.7.7.i.D+", -"7.7.C K.q.!+!+{+j+/ = 6+H+k+,+9+<+<+8+8+8+0+8+<+9+E+C+- / H+q+^+8+7+7+>+r+H+5+[+7+f+7+^+w+D+/ i+H+g+7+d+f+f+7+f+f+f+f+f+f+6+g+!.W >+*+`.{+W.! 9.7.9.i.D+", -"7.7.Z K.y.D.0+P.j+) & ^+x+; # @ @ @ @ + + . & . + U.G+; ] H+f.& - , , * t.E+q - 7 7 / ' j+C+] i+H+9 7 7 7 8 9 9 9 9 6 6 6 6 0 N Q H.3+.+-+0+! 0.9.0.i.D+", -"9.9.Z K.p.z.M.B.q+f.P j+y+- ' O 0 O 0 O , . * - Q m+G+, ] H+n.; / / 7 ' ^+D+^.] P P Q 6 i+D+] j+H+O ^.t.n.t.t.n.t.t.t.t.t.t.H.t.m.<+)+C.3+9+! 0.7.9.i.D+", -"9.0.Z K.I.4+Z.~+H+H+H+H+r+- q+H+H+H+H+H+p+j.= & H+H+r+; / H+t.; / 7 8 ) <+H+!.] O O O 8 i+C+] j+H+0 t.H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+7+]+d+'+! 0.0.9.i.D+", -"9.0.Z K.C.Y.'+#+5+b.0 6+v+' , 0 0 9 9 P q+H+q+b., , ) ; 9 H+t.; / / 7 / 9 <.8 6 P P P 8 i+v+] j+H+O N b.b.c.b.c.b.b.c.c.c.c.c.c.!.U.{+'+>+b+! 0.7.0.i.D+", -"9.0.Z K.S.Y.~+ +l+6 ' >+D+7 * = * * * & & b.w+H+5+9 = = 8 H+t., 8 8 8 9 7 / 6 O P Q O 8 i+v+] 6+H+9 0 6 6 0 6 0 6 O O O O O O W P H.=+]+G.3+! 7.0.0.i.D+", -"0.0.Z K.y.N.$+@+i+^.8 f+C+0 - ' ' ' , , - & = u.r+H+5+9 / H+t., / 8 8 9 6 0 0 0 O O O 8 m+D+/ j+H+V.t.s.H.s.H.H.s.V.V.V.V.V.U.j.P s.-+I.~+8+! 0.0.0.i.D+", -"0.0.Z K.q.V.p.{+m+a.6 <+H+O , ) ' ' ' ' ' ' , & , A.H+m./ H+s., 7 8 9 6 0 O 0 0 O Q Q 8 5+H+] 7+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+m.8 s.|+)+&+9+! 0.0.0.i.F+", -"0.0.Z R.B.`.M.G.m+a.a.0 !.8 / / ] ' ) ) ] ' ] ] - = 9 ] ) N 9 / 7 8 9 9 0 0 O P Q Q Q P ^.!.8 Q b.b.a.b.b.b.c.b.c.b.).c.c.c.j.q Q s.L.a+X.0+! 0.0.0.h.D+", -"0.0.Z K.q.S.4+.+n+a.b.Q 6 6 7 ] ' ' ' ' ' ] ' ' ' ' - ' ' ' ' / / 7 7 7 9 9 7 8 6 6 O P 0 6 O 0 6 9 0 6 O O 0 0 0 O O O O P Q a.N H.1+N.9+d+! 0.0.0.i.F+", -"0.0.Z R.B.C.4+V.m+a.a.t.j.W f.f.a.c.b.] 8 ) 6 !.!.N c.a.Q 6 f.n.O 9 n.j.P 7 f.m.b.b.n.f.O f.n.j.m.n.W a.W j.H.H.f.m.t.n.c.m.H.t.P H.N.N.~+~+~ 0.0.0.h.D+", -"0.d.Z K.l.Z.)+E.m+^.j.x+m+l+U.f+6+w+m+c.U.a.7+r+y+v+r+f+j+7+^+<+6 m.p+r+f+c.D+U.m+r+7+f+N 7+w+p+s.p+s.U.H.b+<+7+i+i+h+w+6+5+r+r+P H.$+#+[+,+! 0.0.0.i.D+", -"0.0.Z Q.Z.E.!+{+i+N a.t.b.f.0 O O j.^.j.f.j.O N a.b.a.^.7 N / / ' 0 O O j.f.f.f.c.c.n.f.6 b.n.m.m.n.t.n.s.m.Q W c.t.t.j.b.t.t.H.0 t.4+L.'+0+! d.0.0.i.D+", -"0.0.Z Q.M.R.$+U.q+j.j.c.b.^.a.W P q 0 0 6 0 8 6 9 9 0 q 0 0 O P Q P q 0 O N O N P P ^.^.^.^.N Q a.N ^.^.a.a.a.a.^.^.a.^.^.^.a.a.W V.1+-+2+9+~ d.d.0.i.F+", -"0.0.Z Q.l.@+>+@+w+x+x+x+x+x+w+x+x+y+y+x+y+x+x+x+x+y+p+x+x+x+w+y+x+x+x+w+z+x+x+p+x+w+x+y+x+x+y+x+y+x+x+x+x+x+x+x+x+y+x+x+w+y+y+x+x+w+3+R.,+#+! d.d.0.h.D+", -"0.0.Z Q.C.P.~+-+ +.+G.%+]+u.@+-+]+Y.Y.#+ +4+R. +R..+O.M.=+$+A. +~+@+P.O.z.-+N.=+3+X.2+&+E.*+'+ +R.4+x. +~+ +-+#+4+-+ + +~+-+b+$+N.1+y..+%+,+~ d.d.0.i.F+", -"0.d.` Q.v.R.@+2+@+*+9+*+ + + +'+{+@+)+]+a+@+y.@+++'+E.D.-+-+&+!+ +X.'+2+Z.X. +#+{+~+X.@+,+G.&+-+E.E.9+*+!+.+E.N.@+ +d+u.>+)+O.L.8+P. +W.*+)+! d.d.0.h.D+", -"0.d.Z Q.z. +Q.,+y.9+8+++8+,+++F.Q.Q.9+W. +9+Q.++A.&+++>+Q.++[+9+9+,+^+{+9+++~+>+,+,+,+9+~+F.,+,+F.{+++*+++~+9+++9+{+]+*+{+,+{+>+W.f+W.~+c+[+! 0.0.0.i.F+", -"0.0.R P.T.T.h+h+e+k+k+h+h+9+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+h+e+e+e+h+e+h+e+k+h+9+k+e+9+h+k+q+! 0.0.0.h.D+", -"0.0.Z Q.h+s+y+B+s+B+y+y+y+x+x+y+y+y+y+y+y+B+y+y+x+x+y+y+y+x+x+B+y+y+x+x+y+y+y+x+x+B+y+y+y+y+x+x+x+y+y+x+y+y+y+y+x+x+B+y+x+B+x+x+y+y+y+y+y+y+! 0.0.0.i.F+", -"0.0.^ ~ ! > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ! 0.0.0.h.D+", -"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.i.F+", -"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.h.C+", -"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.h.H+", -"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.k.H+", -"o.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.u.H+", -"k+l+n+n+n+n+n+n+l+n+n+l+n+n+n+n+n+n+l+n+n+l+n+n+n+n+n+n+l+n+n+l+l+l+l+l+l+l+l+l+l+l+l+l+n+n+n+n+n+n+l+n+n+l+n+n+l+n+n+l+n+n+n+n+l+n+n+l+n+n+n+n+n+l+n+n+"}; +"% c #B9B9BF", +"& c #E0E0E3", +"* c #ACACB3", +"= c #9D9DA4", +"- c #F3F3F4", +"; c #5D5D6A", +"> c #5E5E6A", +", c #92929B", +"' c #878791", +") c #5C5C69", +"! c #EDEDEE", +"~ c #FCFCFC", +"{ c #909098", +"] c #909099", +"^ c #62626E", +"/ c #A5A5AC", +"( c #E2E2E4", +"_ c #E5E5E7", +": c #BDBDC2", +"< c #CCCCD0", +"[ c #70707C", +"} c #C4C4C9", +"| c #FAFAFA", +"1 c #CECED2", +"2 c #CFCFD3", +"3 c #CBCBCF", +"4 c #BFBFC4", +"5 c #C6C6CB", +"6 c #B3B3B9", +"7 c #B2B2B8", +"8 c #EBEBEC", +"9 c #CACACE", +"0 c #A0A0A7", +"a c #8D8D96", +"b c #FDFDFD", +"c c #8C8C95", +"d c #5A5A67", +"e c #F4F4F5", +"f c #E1E1E3", +"g c #F7F7F7", +"h c #5C5C68", +"i c #DBDBDE", +"j c #F8F8F9", +"k c #F2F2F3", +"l c #F1F1F2", +"m c #BCBCC1", +"n c #EAEAEC", +"o c #8F8F98", +"p c #E2E2E5", +"q c #A6A6AD", +"r c #A3A3AA", +"s c #F0F0F1", +"t c #333339", +"u c #34343A", +"v c #1C1F22", +"w c #1A1E20", +"x c #D1D1D5", +"y c #FBFBFB", +"z c #F5F5F6", +"A c #CDCDD1", +"B c #CECED1", +"C c #5B5B68", +"D c #D7D7DA", +"E c #A2A2A9", +"F c #666672", +"G c #676773", +"H c #ADADB3", +"I c #A8A8AF", +"J c #9F9FA7", +"K c #82828C", +"L c #EBEBED", +"M c #656571", +"N c #6D6D78", +"O c #DBDBDD", +"P c #6C6C77", +"Q c #D5D5D9", +"R c #D5D5D8", +"S c #9999A1", +"T c #9898A0", +"U c #A7A7AE", +"V c #61616E", +"W c #6A6A76", +"X c #EDEDEF", +"Y c #A1A1A8", +"Z c #D8D8DB", +"` c #7C7C86", +" . c #E0E0E2", +".. c #63636F", +"+. c #E6E6E8", +"@. c #B0B0B6", +"#. c #C0C0C5", +"$. c #D6D6D9", +"%. c #6B6B76", +"&. c #E9E9EB", +"*. c #C7C7CB", +"=. c #F9F9FA", +"-. c #C3C3C8", +";. c #74747F", +">. c #96969E", +",. c #C2C2C7", +"'. c #EEEEEF", +"). c #636370", +"!. c #C6C6CA", +"~. c #72727D", +"{. c #AEAEB4", +"]. c #BEBEC3", +"^. c #686874", +"/. c #DDDDE0", +"(. c #646470", +"_. c #DFDFE2", +":. c #7D7D87", +"<. c #D2D2D6", +"[. c #A9A9B0", +"}. c #8E8E97", +"|. c #C1C1C6", +"1. c #84848E", +"2. c #70707B", +"3. c #E4E4E6", +"4. c #696975", +"5. c #C8C8CD", +"6. c #6F6F7A", +"7. c #696974", +"8. c #DEDEE1", +"9. c #7D7D88", +"0. c #B4B4BA", +"a. c #777782", +"b. c #757580", +"c. c #9797A0", +"d. c #ABABB2", +"e. c #AEAEB5", +"f. c #8A8A93", +"g. c #E7E7E9", +"h. c #8B8B94", +"i. c #ECECEE", +"j. c #5F5F6B", +"k. c #B7B7BC", +"l. c #B6B6BC", +"m. c #C9C9CD", +"n. c #FEFEFE", +"o. c #94949D", +"p. c #EFEFF0", +"q. c #AAAAB0", +"r. c #898992", +"s. c #B7B7BD", +" ", +" ", +" ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ $ $ % % $ $ $ & * = # + ", +" + @ $ $ - ; > - $ $ , ' $ & ) # + ", +" + @ $ ! ~ { ] ~ ! $ ^ / & ( / ^ $ _ : - < [ $ & $ $ $ $ ^ / & ( / ^ $ _ } | # + ", +" + @ $ & < 1 2 3 & $ / $ : 4 $ / $ $ 5 6 $ 7 $ & , $ 8 , / $ : 4 $ / $ $ 9 0 # + ", +" + @ $ & a b b c & $ ( - d d e f $ g h ; $ i $ & $ & ( - d d e f $ j ; # + ", +" + @ $ & ) k l ) & $ ( - d d e f $ & $ & $ & $ & ( - d d e f $ f # + ", +" + @ $ & c c & $ / $ m : $ / $ & $ & $ & n - o / $ m : $ / $ & # + ", +" + @ $ & & $ ^ / f p q ^ $ & $ & $ & r - s ^ / f p q ^ $ & # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u x & & & 8 y z | A B | # + ", +" + @ t v w w w w w w w w w w u C D E z z f F G f z # + ", +" + @ t v w w w w w w w w w w u H B z z I J 0 I z # + ", +" + @ t v w w w w w w w w w w u K L M z z N O i P z # + ", +" + @ t v w w w w w w w w w w u F L K z z Q c R z # + ", +" + @ t v w w w w w w w w w w u B * z z S - T z # + ", +" + @ t v w w w w w w w w w w u r D C z z ^ U V z # + ", +" + @ t v w w w w w w w w w w u y 8 & & & & W | X X X Y z z # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u | A B | Z # + ", +" + @ t v w w w w w w w w w w u z f F G f z # + ", +" + @ t v w w w w w w w w w w u z I J 0 I z z ` .; ..+.[ # + ", +" + @ t v w w w w w w w w w w u z N O i P z z @.@.#.0 # + ", +" + @ t v w w w w w w w w w w u z Q c R z z ; p $.d # + ", +" + @ t v w w w w w w w w w w u z S - T z z %.&. .; # + ", +" + @ t v w w w w w w w w w w u z ^ U V z z 2 { @.@. # + ", +" + @ t v w w w w w w w w w w u z z z S *. ; .` # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u =.& & -.;. z # + ", +" + @ t v w w w w w w w w w w u z >.,. z # + ", +" + @ t v w w w w w w w w w w u z ..'. ).* O !.~. z {.+.].^. z >./. .,.~. (.* _.& :.).* O !.~. # + ", +" + @ t v w w w w w w w w w w u z h E <. [.}. K |. | [.d [.7 z M 1.m [.7 ; C ^ [.}. K |. # + ", +" + @ t v w w w w w w w w w w u =.& k | 2. /.& & & 3. | 4. 4.( z ;.: p & X _.P /.& & & 3. # + ", +" + @ t v w w w w w w w w w w u z ; : 5. & 6. | 7. 7.( z B ] ) 4.=. 8.P & 6. # + ", +" + @ t v w w w w w w w w w w u z > L 9. I 0.> d a. | U d U 7 z & b.) 7 | I 7 ; C ^ I 0.> d a. # + ", +" + @ t v w w w w w w w w w w u z c.B ).d._.3.{. z e.+.4 7. z f.8.f r z ).* f .` ).d._.3.{. # + ", +" + @ t v w w w w w w w w w w u z # + ", +" + @ t v w w w w w w w w w w u z # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u z z =. .g.i ] E 8.6 # + ", +" + @ t v w w w w w w w w w w u z z z ) h.p }. i.j. # + ", +" + @ t v w w w w w w w w w w u z 7.k.( l.^. >./. .,.~. ^.: +.* z z = D ).* O !.~.m.n.& o. # + ", +" + @ t v w w w w w w w w w w u z 7 [.d [.@. M 1.m 6 I C d.| z P p. [.}. K |. z # + ", +" + @ t v w w w w w w w w w w u z ( 4. 4.f ;.: p & X p 4. W | z N '. /.& & & 3. z # + ", +" + @ t v w w w w w w w w w w u z ( 7. 7.f B ] ) 4.=. p 7. W | z = D & 6. z # + ", +" + @ t v w w w w w w w w w w u z 7 U d U @. & b.) 7 | 6 U d q.| z h r.f c I 0.> d a. z # + ", +" + @ t v w w w w w w w w w w u | X X X Y 7.s.( k.^. f.8.f r z ^.: +.H z =.& g.i { ).d._.3.{. z Z # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/hdspmixer/pixmaps/mute.xpm b/hdspmixer/pixmaps/mute.xpm index fbc4707..7e69f21 100644 --- a/hdspmixer/pixmaps/mute.xpm +++ b/hdspmixer/pixmaps/mute.xpm @@ -1,59 +1,137 @@ /* XPM */ char const * mute_xpm[] = { -"13 26 30 1", -" c None", -". c #1B7B1B", -"+ c #2F5F2F", -"@ c #434343", -"# c #7A817A", -"$ c #DE8C00", -"% c #872100", -"& c #B35A00", -"* c #FFCC00", -"= c #FFFF00", -"- c #700909", -"; c #272727", -"> c #FFCC66", -", c #FFFFFF", -"' c #001B40", -") c #191919", -"! c #000D00", -"~ c #000500", -"{ c #000000", -"] c #3D3E3D", -"^ c #4A1B00", -"/ c #0B0000", -"( c #3B0C00", -"_ c #5C4C1C", -": c #5C3C00", -"< c #3D1600", -"[ c #6D3E00", -"} c #CDCDCD", -"| c #0D0000", -"1 c #8E6E1E", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$%", -"&*=********-;", -"&$>,>>>>>,>-;", -"&$>,,>>>,,>-;", -"&$>,,>>>,,>%;", -"&$=,>,>,>,>%;", -"&$>,>,>,>,>-;", -"&&>,>>,>>,>%;", -"&$=,>>,>>,>-;", -"&$&>>>>>>>&%;", -"&-;;'''''';';", -";))))))))))))", -"!~{{{{{{{{{~]", -"^^^^^^^^^^^^{", -"/(_::::::::{{", -"<[[[[[[[[[[{{", -"<[[}[[[[[}[{{", -"<[[}}[[[}}[|{", -"<[1}}[[[}}[|{", -"<[[}[}[}[}[{{", -"<<[}[}[}[}[|{", -"<[1}[[}[[}[{{", -"<[<}[[}[[}<|{", -"<{{{{{{{{{{{{", -"{{{{{{{{{{{{{"}; +"13 26 108 2", +" c #665C59", +". c #69544D", +"+ c #8F462F", +"@ c #E66840", +"# c #FF9E7F", +"$ c #90472F", +"% c #FF9D7E", +"& c #100907", +"* c #865242", +"= c #5E3A2E", +"- c #37221B", +"; c #91472F", +"> c #FF9D7D", +", c #291914", +"' c #492C23", +") c #FD9B7C", +"! c #3E261E", +"~ c #37211A", +"{ c #92472F", +"] c #FF9C7C", +"^ c #2F1C16", +"/ c #563429", +"( c #EE9173", +"_ c #C87A61", +": c #734637", +"< c #93472F", +"[ c #FE9B7B", +"} c #2E1C16", +"| c #9C5F4B", +"1 c #A56550", +"2 c #7C4C3C", +"3 c #BD735B", +"4 c #36211A", +"5 c #94482F", +"6 c #FE9A7A", +"7 c #E58B6E", +"8 c #5B382C", +"9 c #482B22", +"0 c #F19273", +"a c #95482F", +"b c #3F261E", +"c c #5F392D", +"d c #F29374", +"e c #FE9979", +"f c #B86F57", +"g c #CD7B61", +"h c #F29273", +"i c #96482F", +"j c #FE9978", +"k c #F29172", +"l c #362019", +"m c #6F554C", +"n c #A34B2F", +"o c #FA8E6B", +"p c #666659", +"q c #69684D", +"r c #8F8C2F", +"s c #E6E040", +"t c #FFFB7F", +"u c #908D2F", +"v c #FFFB7E", +"w c #100F07", +"x c #868342", +"y c #5E5C2E", +"z c #37361B", +"A c #918E2F", +"B c #FFFB7D", +"C c #292814", +"D c #494723", +"E c #FDF97C", +"F c #3E3D1E", +"G c #37361A", +"H c #928F2F", +"I c #FFFB7C", +"J c #2F2E16", +"K c #565429", +"L c #EEEA73", +"M c #C8C461", +"N c #737137", +"O c #93902F", +"P c #FEFA7B", +"Q c #2E2E16", +"R c #9C994B", +"S c #A5A250", +"T c #7C7A3C", +"U c #BDBA5B", +"V c #36351A", +"W c #94912F", +"X c #FEFA7A", +"Y c #E5E16E", +"Z c #5B5A2C", +"` c #484722", +" . c #F1ED73", +".. c #95922F", +"+. c #3F3E1E", +"@. c #5F5E2D", +"#. c #F2EE74", +"$. c #FEFA79", +"%. c #B8B557", +"&. c #CDC961", +"*. c #F2EE73", +"=. c #96932F", +"-. c #FEFA78", +";. c #F2EE72", +">. c #363519", +",. c #6F6E4C", +"'. c #A39F2F", +"). c #FAF56B", +" . + + + + + + + + + . ", +". + @ @ @ @ @ @ @ @ @ + . ", +"+ @ # # # # # # # # # # + ", +"$ @ % % & * % % = - % % $ ", +"; @ > > , ' > ) ! ~ > > ; ", +"{ @ ] ] ^ / ( _ : ~ ] ] { ", +"< @ [ [ } | 1 2 3 4 [ [ < ", +"5 @ 6 6 } 7 8 9 0 4 6 6 5 ", +"a @ 6 6 } 6 b c d 4 6 6 a ", +"a @ e e } e f g h 4 e e a ", +"i @ j j } j j j k l j j i ", +"m n o o o o o o o o o n m ", +" m n n n n n n n n n m ", +"p q r r r r r r r r r q p ", +"q r s s s s s s s s s r q ", +"r s t t t t t t t t t t r ", +"u s v v w x v v y z v v u ", +"A s B B C D B E F G B B A ", +"H s I I J K L M N G I I H ", +"O s P P Q R S T U V P P O ", +"W s X X Q Y Z ` .V X X W ", +"..s X X Q X +.@.#.V X X ..", +"..s $.$.Q $.%.&.*.V $.$...", +"=.s -.-.Q -.-.-.;.>.-.-.=.", +",.'.).).).).).).).).).'.,.", +"p ,.'.'.'.'.'.'.'.'.'.,.p "}; diff --git a/hdspmixer/pixmaps/output.xpm b/hdspmixer/pixmaps/output.xpm index a9ccb80..2e36a31 100644 --- a/hdspmixer/pixmaps/output.xpm +++ b/hdspmixer/pixmaps/output.xpm @@ -1,468 +1,217 @@ /* XPM */ char const * output_xpm[] = { -"36 208 257 2", -" c None", -". c #000000", -"+ c #080808", -"@ c #080810", -"# c #001008", -"$ c #101010", -"% c #181010", -"& c #002010", -"* c #101818", -"= c #181818", -"- c #002918", -"; c #202018", -"> c #003118", -", c #202020", -"' c #202029", -") c #292020", -"! c #202920", -"~ c #292920", -"{ c #292929", -"] c #004120", -"^ c #293131", -"/ c #313131", -"( c #104A29", -"_ c #393939", -": c #394139", -"< c #414141", -"[ c #20524A", -"} c #4A4141", -"| c #414A41", -"1 c #4A4A41", -"2 c #4A4A4A", -"3 c #524A41", -"4 c #4A524A", -"5 c #525252", -"6 c #525A52", -"7 c #5A5A52", -"8 c #625A4A", -"9 c #317B20", -"0 c #5A625A", -"a c #62625A", -"b c #626A62", -"c c #6A6A62", -"d c #6A6A6A", -"e c #736A62", -"f c #737373", -"g c #7B736A", -"h c #737B73", -"i c #737B7B", -"j c #7B7B73", -"k c #7B7B7B", -"l c #7B8373", -"m c #7B837B", -"n c #83837B", -"o c #838383", -"p c #838B83", -"q c #8B8B83", -"r c #8B8B8B", -"s c #8B948B", -"t c #94948B", -"u c #949494", -"v c #949C94", -"w c #949C9C", -"x c #9C9C94", -"y c #9C9C9C", -"z c #9CA49C", -"A c #9CA4A4", -"B c #A4A49C", -"C c #A4A4A4", -"D c #A4ACA4", -"E c #ACACA4", -"F c #ACACAC", -"G c #B4B4AC", -"H c #BDBDB4", -"I c #C5C5BD", -"J c #CDCDCD", -"K c #D5D5CD", -"L c #DEDED5", -"M c #DEE6DE", -"N c #E6E6E6", -"O c #EEEEEE", -"P c #F6EEEE", -"Q c #F6F6F6", -"R c #F6FFFF", -"S c #FFFFFF", -"T c #6633FF", -"U c #666600", -"V c #666633", -"W c #666666", -"X c #666699", -"Y c #6666CC", -"Z c #6666FF", -"` c #669900", -" . c #669933", -".. c #669966", -"+. c #669999", -"@. c #6699CC", -"#. c #6699FF", -"$. c #66CC00", -"%. c #66CC33", -"&. c #66CC66", -"*. c #66CC99", -"=. c #66CCCC", -"-. c #66CCFF", -";. c #66FF00", -">. c #66FF33", -",. c #66FF66", -"'. c #66FF99", -"). c #66FFCC", -"!. c #66FFFF", -"~. c #990000", -"{. c #990033", -"]. c #990066", -"^. c #990099", -"/. c #9900CC", -"(. c #9900FF", -"_. c #993300", -":. c #993333", -"<. c #993366", -"[. c #993399", -"}. c #9933CC", -"|. c #9933FF", -"1. c #996600", -"2. c #996633", -"3. c #996666", -"4. c #996699", -"5. c #9966CC", -"6. c #9966FF", -"7. c #999900", -"8. c #999933", -"9. c #999966", -"0. c #999999", -"a. c #9999CC", -"b. c #9999FF", -"c. c #99CC00", -"d. c #99CC33", -"e. c #99CC66", -"f. c #99CC99", -"g. c #99CCCC", -"h. c #99CCFF", -"i. c #99FF00", -"j. c #99FF33", -"k. c #99FF66", -"l. c #99FF99", -"m. c #99FFCC", -"n. c #99FFFF", -"o. c #CC0000", -"p. c #CC0033", -"q. c #CC0066", -"r. c #CC0099", -"s. c #CC00CC", -"t. c #CC00FF", -"u. c #CC3300", -"v. c #CC3333", -"w. c #CC3366", -"x. c #CC3399", -"y. c #CC33CC", -"z. c #CC33FF", -"A. c #CC6600", -"B. c #CC6633", -"C. c #CC6666", -"D. c #CC6699", -"E. c #CC66CC", -"F. c #CC66FF", -"G. c #CC9900", -"H. c #CC9933", -"I. c #CC9966", -"J. c #CC9999", -"K. c #CC99CC", -"L. c #CC99FF", -"M. c #CCCC00", -"N. c #CCCC33", -"O. c #CCCC66", -"P. c #CCCC99", -"Q. c #CCCCCC", -"R. c #CCCCFF", -"S. c #CCFF00", -"T. c #CCFF33", -"U. c #CCFF66", -"V. c #CCFF99", -"W. c #CCFFCC", -"X. c #CCFFFF", -"Y. c #FF0000", -"Z. c #FF0033", -"`. c #FF0066", -" + c #FF0099", -".+ c #FF00CC", -"++ c #FF00FF", -"@+ c #FF3300", -"#+ c #FF3333", -"$+ c #FF3366", -"%+ c #FF3399", -"&+ c #FF33CC", -"*+ c #FF33FF", -"=+ c #FF6600", -"-+ c #FF6633", -";+ c #FF6666", -">+ c #FF6699", -",+ c #FF66CC", -"'+ c #FF66FF", -")+ c #FF9900", -"!+ c #FF9933", -"~+ c #FF9966", -"{+ c #FF9999", -"]+ c #FF99CC", -"^+ c #FF99FF", -"/+ c #FFCC00", -"(+ c #FFCC33", -"_+ c #FFCC66", -":+ c #FFCC99", -"<+ c #FFCCCC", -"[+ c #FFCCFF", -"}+ c #FFFF00", -"|+ c #FFFF33", -"1+ c #FFFF66", -"2+ c #FFFF99", -"3+ c #FFFFCC", -"4+ c #FFFFFF", -"5+ c #000000", -"6+ c #0D0D0D", -"7+ c #1A1A1A", -"8+ c #282828", -"9+ c #353535", -"0+ c #434343", -"a+ c #505050", -"b+ c #5D5D5D", -"c+ c #6B6B6B", -"d+ c #787878", -"e+ c #868686", -"f+ c #939393", -"g+ c #A1A1A1", -"h+ c #AEAEAE", -"i+ c #BBBBBB", -"j+ c #C9C9C9", -"k+ c #D6D6D6", -"l+ c #E4E4E4", -"m+ c #F1F1F1", -"n+ c #FFFFFF", -"o+ c #0099FF", -"p+ c #00CCFF", -"q+ c #00FFFF", -"r+ c #3300FF", -"s+ c #3333FF", -"t+ c #3366FF", -"u+ c #3399FF", -"v+ c #33CCFF", -"w+ c #33FFFF", -"x+ c #6600FF", -"y+ c #6633FF", -"z+ c #6666FF", -"A+ c #6699FF", -"B+ c #66CCFF", -"C+ c #66FFFF", -"D+ c #9900FF", -"E+ c #9933FF", -"F+ c #9966FF", -"G+ c #9999FF", -"H+ c #99CCFF", -"2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 { ", -"j g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g ", -"g F D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", -"e C r m m m m m m m m m m m m m m m m m m m m m m m m m m m m m r x z z ", -"e C o < : _ / / ^ ^ { { { { { { { { { { { { { { { { ^ ^ / / _ : < z A A ", -"e C p : / / ^ { { { ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' { { { ^ ^ / < D D D ", -"e A p _ / { { ' , ; = ; = ; = ; = ; = ; = ; = ; = ; ; , ' { { / _ F D D ", -"e A p / ^ { ' ; = = * * * * * * * * * * * * * * * * * = ; ' { ^ / F D D ", -"e A p / { ' ; = * $ $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ * * = ; ' { / F D D ", -"e A p ^ { ' = * $ @ + + + + + + + + + + + + + + + + @ $ * = ' { ^ F D D ", -"e A p ^ { , = * $ @ + + + + + + + + + + + + + + + + @ $ * = , { ^ F D D ", -"e A p / { , = * $ @ + + + + + + + + + + + + + + + + @ % * = , { ^ F D D ", -"e A p / { ' ; = * $ $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ $ * = ; ' { / F D D ", -"e A p / ^ { ' ; = = * * * * * * * * * * * * * * * * = = = ' { ^ / F D D ", -"e A p _ ^ { { ' , ; = = = = = = = = = = = = = = ; = ; , ' { { / _ F D D ", -"e A r < / / ^ { { { ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' { { { ^ / / : G D D ", -"e A v < < _ / / ^ ^ { { { { { { { { { { { { { { { { ^ ^ / / _ < < G D D ", -"e A A F H H H H H H H H H H H H H H H H H H H H H H H H H H H H H G C C ", -"e z A D D F F F F F F F F F F F F F F F F F F F F F F F F F F F F C A A ", -"e A s b / / / / / / / / / / / / / / / / / / / / / / / / / / / / b s y y ", -"e z r 2 7 7 5 5 2 7 4 5 6 2 5 5 5 4 2 2 4 4 4 4 4 6 4 2 5 4 5 2 2 v z z ", -"e z r 5 4 7 5 4 7 5 4 4 4 6 5 7 5 7 4 4 4 2 6 2 4 7 6 6 4 4 7 2 / z z z ", -"e z r 6 4 5 4 5 2 5 2 7 6 2 2 7 2 7 4 4 2 5 5 5 4 4 4 4 5 5 7 | ! z z z ", -"e z r 6 2 4 4 6 6 2 2 6 2 6 2 2 4 5 6 5 4 4 7 2 4 4 2 4 2 2 2 < { z z z ", -"e z r 6 6 5 2 5 5 2 2 5 6 6 4 7 0 7 b j n j j l n j k g a 5 7 < { z z z ", -"e z r 6 7 2 4 2 { , / < 2 4 2 2 0 4 c . . . . . . . . . . 2 5 2 ! z z z ", -"e z r 6 7 7 4 < , g } 4 4 7 4 7 a 4 0 . . . . . . . . . . | 2 2 ! z z z ", -"e z r 6 6 4 7 1 ~ 8 { 0 0 5 6 2 6 4 a . & # & & & # & - . | 4 : ~ z z z ", -"e z q 6 5 6 2 2 { 3 ) b 7 4 7 4 a 4 7 . & & - - - > - ] . : 4 | { z z z ", -"e z r 6 7 2 4 2 , 3 ) c b 7 7 2 0 7 c . > > ] - > ] ] ( . < 2 : ! z z z ", -"e z r 6 6 4 2 2 { 3 ) e 0 2 2 2 a 4 0 . - > ] ] > ] ] ( . < 4 2 { z z z ", -"e z r 6 6 2 2 < ~ 3 ) b 0 7 2 4 6 2 a . - - > > ] > ] ( . < | 2 ! z y y ", -"e z r 6 4 5 4 : ~ 3 ) e 6 5 4 5 6 2 b . - > ] > > ] ] ( . | | 2 , y z z ", -"e z p 6 4 2 2 | ! 3 ) b 6 7 4 4 7 5 b . - > > ] > ] ] ( . : | : ~ y y y ", -"e z p 6 4 6 2 2 { 3 ) c 6 7 4 2 0 6 b . - > > > ] > ] ( . : 4 | { y y y ", -"e z r 6 7 4 6 1 { 3 ) g 0 4 5 4 6 4 b . - > > > > ] ] ( . 2 < | ~ y y y ", -"e z p 6 5 4 5 : ! 3 ) b b 2 2 4 7 6 0 . - > ] > > ] ] ( . | 5 : ! y y y ", -"e z p 6 6 4 5 | { 3 ) c 0 4 6 4 a 2 a . - - > ] > > ] ( . | 2 | { y y y ", -"e z p 5 4 5 4 2 { 3 ) g 7 2 5 4 0 4 a . - - ] ] > > ] ( . < 2 : ! y y y ", -"e z p 6 2 7 6 2 { 3 ) c 7 5 5 2 5 7 7 . - - > ] > ] ] ( . : 5 : ! y y y ", -"e z p 5 4 7 6 | { 3 ) b 0 2 5 4 5 7 c . - > > - ] > ] ( . | 2 | ! y y y ", -"e z p 6 7 5 2 | { 3 ) b a 2 7 2 0 6 b . - - > > ] > ] ( . : | 2 , y y y ", -"e z p 5 5 2 2 2 , 3 ) c b 2 5 7 7 5 a . - > > > > > ] ( . < 4 2 , y y y ", -"e z p 5 7 2 4 < , 3 ) b 7 4 7 4 a 7 7 . > > ] ] ] > ] ( . 2 2 | { y y y ", -"e z p 5 2 5 4 : ! 3 ) b 6 7 2 6 5 5 0 . > > > > > > ] ( . < 4 < { y y y ", -"e z p 5 4 6 2 < ~ 3 ) e 0 4 5 4 7 4 a . - > ] > ] > ] ( . < | < ! y y y ", -"e z p 5 2 6 7 2 ! 3 ) a b 5 2 7 6 7 b . - - > > > > ] ( . | | | ~ y y y ", -"e z p 5 4 4 6 1 , 3 ) b 0 4 2 4 a 4 a . - - > > > ] ] ( . 2 | < , y y y ", -"e z p 5 2 7 2 2 { 3 ) b 6 2 2 6 0 2 b . - - > > ] ] ] ( . < | 2 , y y y ", -"e z p 5 4 4 6 2 { 3 ) e 0 4 2 5 6 5 a . > > ] > > > ] ( . | | < { y y y ", -"e y p 5 4 7 4 < ~ 3 ) e 0 6 2 7 5 7 b . - > > ] > > ] ( . < 4 : { y y y ", -"e y p 5 5 4 7 : ! 3 ) c b 2 2 4 5 2 a . - - ] ] > ] ] ( . 2 5 < { y y y ", -"e y p 5 4 6 5 : ~ 3 ) a 0 4 2 4 6 4 b . > - ] > > > ] ( . | 4 < , y w w ", -"e y p 5 4 7 7 < ! 3 ) b a 6 4 7 6 4 c . - > > - ] > ] ( . : 2 < ! w y y ", -"e y p 5 5 4 4 < ~ 3 ) g 6 7 5 6 0 4 0 . - - > > > > > ( . 2 2 | ! y y y ", -"e y p 5 2 6 5 | ! 3 ) c 6 5 7 2 5 7 0 . - ] > > > > ] ( . : 2 2 ~ w w w ", -"e y p 5 6 4 7 2 , 3 ) c b 4 4 2 0 4 a . - - ] > ] > ] ( . : 2 2 { w w w ", -"e y p 5 2 4 4 2 ~ 3 ) c 0 5 6 5 6 4 c . - - > > > > ] ( . : 4 < ~ w w w ", -"e y p 5 5 5 6 < ! 3 ) b 6 4 4 7 0 7 a . - > > > > > ] ( . 2 | < , w w w ", -"e y p 5 4 5 7 | , 3 ) c a 4 6 4 a 4 a . - > ] > > ] ] ( . : 5 < , w w w ", -"e y p 5 6 6 4 < ! 3 ) c b 5 2 4 4 2 0 . - ] > > > ] ] ( . | 2 2 { w w w ", -"e y p 5 4 4 4 | { 3 ) b 0 5 5 4 0 2 7 . - - > ] - > ] ( . : 4 < { w w w ", -"e y p 5 2 2 7 : { 3 ) a a 5 5 4 6 4 a . - > ] > > > ] ( . 2 4 < { w w w ", -"e y p 5 4 2 4 | { 3 ) e 6 6 6 7 6 5 0 . - - ] > ] ] ] ( . : 2 | ! w w w ", -"e y p 5 4 5 7 2 { 3 ) b b 2 2 4 6 4 0 . - - > ] ] > ] ( . 2 2 < ! w w w ", -"e y p 5 4 4 5 | { 3 ) b a 4 2 7 a 6 0 . - > > - > ] ] ( . 2 5 < ~ v v v ", -"e y o 5 4 4 4 < { 3 ) a a 4 2 2 0 4 0 . - > > ] - > ] ( . | 5 : { v w w ", -"e y o 5 4 5 7 : ~ 3 ) e a 4 5 4 6 2 c . - - ] > > > ] ( . | < | ~ v v v ", -"e w o 5 2 6 7 | { 3 ) c 7 7 2 6 6 2 b . - > ] > > > ] ( . 2 | 2 { v v v ", -"e w o 5 4 5 2 | ! 3 ) g 6 4 2 2 a 7 0 . - - ] > > > ] ( . | 5 2 ! v v v ", -"e x o 5 5 2 6 < { 3 ) e a 7 4 6 5 6 7 . - > - > > > ] ( . : | | ~ v v v ", -"e w o 5 7 5 4 : ~ 3 ) c 6 7 5 5 7 2 0 . - > > > > ] ] ( . 2 5 2 { v v v ", -"e w o 5 7 6 5 < { 3 ) a b 6 5 4 0 5 a . > - > > > > ] ( . < 2 < ~ v v v ", -"e w o 5 4 5 5 2 { 3 ) c 0 4 5 5 0 4 c . - - > ] ] > ] ( . | | | { v v v ", -"e x o 5 2 4 7 2 , 3 ) a b 5 2 4 0 2 b . - - ] > > > ] ( . 2 2 < { v v v ", -"e x o 5 5 4 2 2 { 3 ) a 6 4 7 6 a 4 b . > - > > > ] ] ( . | 4 | , v v v ", -"e w o 5 2 4 5 < ~ 3 ) b 6 4 5 7 7 2 0 . - > ] > ] > ] ( . 2 4 | ! v v v ", -"e x o 5 5 2 2 | ! 3 ) b 6 6 4 4 0 4 0 . - - ] ] ] ] ] ( . | | 2 ! v v v ", -"e x o 5 7 2 7 2 ! 3 ) a b 5 4 4 a 7 a . & > ] > > ] ] ( . 2 | : { v v v ", -"e w o 5 7 2 4 2 ! 3 ) a 0 6 4 6 5 7 7 . > > > > ] ] ] ( . | 4 < ~ v v v ", -"e w o 5 5 4 5 | ! 3 ) c 6 6 5 4 7 5 0 . - > > > > > ] ( . < | | { v v v ", -"e v o 5 7 4 6 2 ! 3 ) a b 4 7 4 5 5 b . - - ] ] ] ] ] ( . < 2 2 { v v v ", -"e v o 5 4 6 6 2 { 3 ) a b 4 5 7 0 5 0 . > > > > ] ] ] ( . | 4 < , v v v ", -"e v o 5 7 2 2 | ! 3 ) c a 5 4 2 a 6 0 . - - > - > ] ] ( . | < 2 ! v v v ", -"e v o 5 6 2 2 < ~ 3 ) e 0 5 7 7 5 4 c . - - > > > ] ] ( . : 5 2 ~ v v v ", -"e v o 5 4 4 6 < { 3 ) c a 4 5 7 7 6 b . - > > ] > > ] ( . | 2 2 ! v v v ", -"e v o 5 6 4 2 | , 3 ) f 6 5 4 4 6 5 a . - - ] > > > ] ( . | 2 | ~ v v v ", -"e v o 4 4 5 6 | { 3 ) b a 4 7 2 0 5 a . - > > ] > ] ] ( . < 2 2 ! v v v ", -"e v o 5 5 6 4 | { 3 ) b 7 4 4 2 0 4 b . - > > > > ] ] ( . | | < , v u u ", -"e v o 5 4 4 5 2 ! 3 ) b 0 6 2 7 a 7 b . - - ] > - > ] ( . | 4 2 , u v v ", -"e v o 4 4 5 5 < { 3 ) c 0 4 5 6 0 2 a . > > > ] > ] ] ( . | 5 | ! u u u ", -"e v o 5 5 5 7 2 ~ 3 ) g 6 2 2 4 0 2 0 . - > > ] > ] ] ( . 2 2 2 , v u u ", -"e v o 4 7 2 6 : ~ 3 ) e 0 5 2 5 0 5 b . - - ] > ] ] ] ( . < | | ! u u u ", -"e v m 4 2 2 2 : ~ 3 ) b 0 5 4 7 5 4 b . - - ] > > > ] ( . < 4 | ! u u u ", -"e v m 5 4 2 4 | ! 3 ) e a 4 4 4 a 2 0 . - - > > > > ] ( . < 4 | { u u u ", -"e v m 4 5 4 5 2 , 3 ) b 7 2 4 2 0 4 b . > > ] > > > ] ( . | | 2 ~ u u u ", -"e v m 4 4 4 6 2 ! 3 ) b 6 6 4 5 a 4 0 . - > > ] > ] ] ( . 2 2 | , u u u ", -"e v m 4 4 4 5 | ! 3 ) b 6 4 6 6 6 4 a . - > > ] > > ] ( . | 5 < ~ u u u ", -"e v m 4 5 5 7 | ! 3 ) b 6 7 6 6 6 5 a . - - > ] > > > ( . < 4 2 , u u u ", -"e v m 4 4 2 4 : { 3 ) c 7 7 4 4 5 7 0 . - - ] > > > ] ( . | | | { u u u ", -"e v m 4 6 7 5 2 ! 3 ) b 6 5 4 5 0 6 b . - > ] > > ] ] ( . < 5 | ~ u u u ", -"e v m 4 5 4 7 < ! 3 ) g 7 4 4 7 7 5 b . - - > ] > ] ] ( . 2 < 2 ! u u u ", -"e v m 4 6 2 5 | { 3 ) c 0 2 6 7 a 4 0 . - - ] ] > ] ] ( . : | | ~ u u u ", -"e u m 4 2 4 6 < { 3 ) c 7 4 2 7 6 4 b . - > > - ] ] ] ( . | 4 | { u u u ", -"e v m 4 2 7 5 2 ! 3 ) e 6 5 4 5 a 2 c . - > > > ] - ] ( . < 5 2 { u u u ", -"e u m 4 5 2 4 < , 3 ) c a 2 4 4 6 5 b . > > ] ] ] > ] ( . 2 5 < { u u u ", -"e u m 4 4 4 4 | ~ 3 ) b 0 4 4 6 a 6 0 . - > > - ] > ] ( . 2 < | ~ u u u ", -"e v m 4 4 6 4 | , 3 ) b 0 7 4 6 a 4 0 . - > ] ] ] > ] ( . : | | , u u u ", -"e u m 4 6 2 6 : ! 3 ) b 6 4 6 2 7 5 0 . - - > > > > ] ( . 1 5 | , u u u ", -"e u m 4 2 4 4 : { 3 ) c a 5 5 4 a 4 0 . - > > > > ] ] ( . < | | { u u u ", -"e u m 4 4 2 2 | ~ 3 ) a 0 5 2 2 a 5 0 . - > > > > > ] ( . 2 5 | { u u u ", -"e u m 4 4 2 2 | ! 3 ) c 0 4 5 7 5 2 a . - - > > > - ] ( . 2 4 < { u u u ", -"e u m 4 6 6 4 : { 3 ) b 7 2 2 4 6 4 a . - - ] > > ] ] ( . : 5 2 , u u u ", -"e u m 4 4 4 5 < { 3 ) c b 5 6 4 7 4 a . - > > > ] ] ] ( . 2 < < ~ t t t ", -"e u m 4 5 7 4 2 ! 3 ) c b 5 6 4 0 2 c . - ] ] > ] > ] ( . 2 | | ! t t t ", -"e u m 4 5 4 2 2 ~ 3 ) c a 5 6 4 0 4 c . > > > > - > ] ( . : 4 < ! t t t ", -"e u m 4 6 5 4 | { 3 ) b 0 2 4 4 0 4 0 . - - ] > ] > > ( . | 2 | { t t t ", -"e u m 4 4 2 5 : { 3 ) e a 2 4 4 7 7 a . - > ] > > > ] ( . : 4 : { t t t ", -"e u m 4 7 4 7 | , 3 ) f 6 6 4 2 0 6 a . - - > > > ] ] ( . 2 5 2 ! s s s ", -"e u m 4 4 2 6 | , 3 ) e a 4 4 4 6 4 b . > ] > > > ] ] ( . : 4 2 , s t t ", -"e u m 4 4 2 5 < , 3 ) c 7 2 7 2 a 2 b . - > ] > > > ] ( . : | 2 ! t s s ", -"e u m 4 7 6 2 | ! 3 ) e 0 2 4 7 7 6 7 . - > > > ] > ] ( . | 2 2 , t s s ", -"e u m 4 7 4 6 : ~ 3 ) a 0 2 5 5 0 6 c . - > > ] ] ] ] ( . | 4 : ! s s s ", -"e u m 4 4 5 5 : { 3 ) c 6 2 4 4 6 5 0 . - > > ] > ] ] ( . | < 2 ~ s s s ", -"e u m 4 5 5 6 | , 3 ) b b 2 4 5 5 5 a . > > > > > > ] ( . | 4 2 { s s s ", -"e u m 4 7 4 6 | ~ 3 ) c a 4 4 2 a 5 b . > - > ] ] > ] ( . 2 | 2 ~ s s s ", -"e u m 4 2 6 7 : ! 3 ) b 0 2 6 4 0 4 c . > > > > ] > ] ( . : | | ! s s s ", -"e t m 4 6 2 5 2 ~ 3 ) b 0 2 2 4 6 4 c . - > > > ] > ] ( . : 2 < , s s s ", -"e t m 4 2 4 4 2 ! 3 ) a a 5 4 5 a 4 b . - > ] > ] > ] ( . < 4 | { s s s ", -"e t m 4 4 5 4 | { 3 ) e 6 5 7 5 6 5 b . > > ] > ] ] ] ( . < 5 2 ~ s s s ", -"e t m 4 2 5 7 : { 3 ) a b 4 5 6 0 4 0 . > > ] ] > > ] ( . 2 < < ! s s s ", -"e t m 4 5 6 7 | ! 3 ) b a 2 4 4 5 4 c . & - > > ] > ] ( . | 5 : ! s s s ", -"e t m 4 2 7 4 | ~ 3 ) c b 7 2 4 0 6 a . > > > ] ] ] ] ( . : 4 : , s s s ", -"e t m 4 2 5 4 : { 3 ) a b 5 2 5 6 6 0 . > > > > ] ] ] ( . 2 | < { s s s ", -"e s m 4 4 5 2 | { 3 ) b 6 2 5 4 5 7 b . - > > > > ] ] ( . 2 | : { s s s ", -"e t k 4 5 7 6 2 { 3 ) e b 5 4 6 a 4 b . - - > ] ] ] ] ( . 2 | < { s s s ", -"e t s 4 2 6 7 4 { 3 ) a a 7 5 2 4 6 0 . - > ] ] > > ] ( . < | 2 { s s s ", -"e s s 4 4 5 5 5 ! 3 ) b 7 2 4 7 4 7 0 . - > > > > > ] ( . < 4 : ! s s s ", -"e s s 4 5 4 4 2 { 3 ) b b 5 6 5 2 4 a . - > > ] > ] ] ( . < 5 | ~ s s s ", -"e s s 2 5 2 2 5 ~ 3 ) b 0 4 5 5 6 6 7 . > > > > ] > ] ( . 2 | | { s s s ", -"e s s 2 5 5 5 4 { 3 ) a 0 2 4 4 6 4 c . - - ] > > ] ] ( . 2 4 | { s r r ", -"e s r 2 5 5 7 2 ! 3 ) b a 2 7 2 4 4 0 . - > > ] > ] ] ( . 1 | | ~ s s s ", -"e s r 2 7 5 5 7 , 3 ) c b 2 5 5 6 2 0 . - > > ] ] ] ] ( . 2 4 : { r r r ", -"e s r 2 5 4 5 4 { 3 ) c a 4 2 7 2 2 a . - - ] > > ] ] ( . : | 2 ~ r r r ", -"e s r 2 5 2 2 7 ~ 3 ) c 7 2 4 4 2 4 0 . - > ] > ] > ] ( . 2 2 | ~ r r r ", -"e s r 2 2 4 4 7 ! 3 ) b 7 2 2 4 4 7 7 . - > > > ] > ] ( . 2 2 | { r r r ", -"e s r 2 5 7 2 4 { 3 ) c b 7 4 4 5 6 0 . - > > - > > ] ( . < 4 : , r r r ", -"e s r 2 2 4 4 6 ~ 3 ) c a 2 6 6 2 7 a . > - ] > > > ] ( . < 2 2 ~ r r r ", -"e s r 2 2 5 4 2 ! 3 ) b 6 7 2 6 2 5 0 . > > > > > > ] ( . < 4 < { r r r ", -"e s r 2 4 2 5 4 ~ 3 ) c 0 4 4 2 2 4 b . - > > > ] > ] ( . : 2 < , r r r ", -"e s r 2 7 4 5 4 ! 3 ) c b 4 2 4 4 7 b . - - ] > > > ] ( . < 5 : { r r r ", -"e s r 2 4 6 5 5 ! 3 ) a a 5 4 5 4 6 0 . - > > > - ] ] ( . | 2 | ~ r r r ", -"e r r 2 4 4 6 2 ! 3 ) c 6 7 4 4 2 4 0 . > - > ] > > ] ( . : | | ! r r r ", -"e s r 2 6 6 2 7 ~ 3 ) c 0 4 2 5 2 7 0 . - > ] > > > ] ( . | 5 < , r r r ", -"e r r 2 5 6 6 4 { 3 ) e b 7 4 5 4 2 0 . > - ] > > > ] ( . | | | ~ r r r ", -"e r r 2 4 6 4 4 ! 3 ) e b 4 5 4 2 7 b . - > ] ] > > ] ( . 2 | | ! r r r ", -"e r p 2 6 5 5 4 ~ 3 ) c 0 4 4 5 2 4 b . - - ] > ] ] > ( . 2 2 | { p p p ", -"e r p 2 5 7 4 7 { 3 ) e b 6 2 2 6 5 0 . - - > > > ] ] ( . | 4 : , p r r ", -"e r p 2 7 4 4 6 , 3 ) c 6 4 2 4 4 6 0 . - > ] > > > ] ( . : < 2 ~ r p p ", -"e r p 1 5 6 6 5 { 3 ) g 6 4 7 4 2 5 a . - - > > ] > ] ( . | 4 : { p p p ", -"e r p 1 4 6 5 2 ! 3 ) b 0 2 4 6 4 5 b . - - > > ] ] > ( . : | : ! p p p ", -"e r p 1 4 5 4 6 { 3 ) c b 4 6 6 4 6 c . > > ] > > > ] ( . : | | , p p p ", -"e r p 1 5 5 4 5 ! 3 ) e 6 4 2 7 4 7 a . - > ] > ] > ] ( . 2 2 : ~ p p p ", -"e r p 1 7 6 6 2 ! 3 ) b a 5 2 5 5 2 0 . - > ] > ] ] ] ( . : < | { p p p ", -"e r p 1 2 2 7 4 ~ 3 ) b 6 5 5 5 6 7 0 . > ] ( ( ( ( ( ( . | 2 < ~ p p p ", -"e p p | 4 5 6 5 / _ = e 7 2 7 7 7 4 c . ] ( [ : 9 [ | : . < 2 : ! p p p ", -"e p p | 7 4 2 2 4 ) + j b 5 4 4 4 4 5 . . . . . . . . . . : | < ! p p p ", -"e p p | 5 5 5 5 6 g n n 6 4 5 5 5 2 4 | : _ < / / _ / / _ < 4 2 ~ p p p ", -"e p p | 2 4 4 6 6 6 c 0 7 2 6 6 2 7 4 5 | 2 < 2 | | 2 2 < 2 4 2 ~ p p p ", -"e p p | 5 4 5 6 6 4 7 7 4 7 2 4 4 4 7 5 2 5 4 4 2 2 4 5 4 4 4 : { p p p ", -"e p p 5 4 4 _ _ : / / _ _ < : _ _ : : : _ : _ : / _ < / : < _ / ; p o o ", -"e p o h _ * $ @ * @ $ $ $ $ $ $ $ % $ $ $ @ $ $ @ $ $ $ % $ $ $ $ p p p ", -"e p p o o o o p p p p o o p o p o o o o p p o o p o o o o p o p o o o o ", -"e p m k i i i i i i i i i i i i i i i i i i i i i i k i i i k k m o o o ", -"e p f b b b b b b a b b b b b b a b b b a b b b b a a b a b a b f m o o ", -"e p d < : _ / / ^ ^ { { { { { { { { { { { { { { { { ^ ^ / / / : < m p p ", -"e p d : / ^ ^ { { { ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' { { { ^ / / : s r o ", -"e p d / ^ ^ { ' , ; = ; = ; = ; = ; = ; = ; = ; = ; ; , ' { ^ / : u s s ", -"e p d / ^ { ' ; = * * * * * * * * * * * * * * * * * = = ; ' { ^ / t r r ", -"e p d ^ { ' ; = * * $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ $ * = ; ' { / t r r ", -"e p d ^ { ' = * $ @ + + + + + + + + + + + + + + + + @ $ * = , { ^ t r r ", -"e o d { { , = * $ @ + + + + + + + + + + + + + + + + @ $ * = , { ^ t r r ", -"e o d ^ { , = * % @ + + + + + + + + + + + + + + + + @ $ * = , { / t r r ", -"e o d ^ { ' ; = * $ $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ $ * = ; ' { / t r r ", -"e o d / ^ { ' ; = = * * * * * * * * * * * * * * * * = = ; ' { ^ / t r r ", -"e o d / ^ { { ' , = ; = = = = = = = = = = = = = = ; ; , ' { { / _ t r r ", -"e o f : / / ^ { { { ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' { { { ^ / / : u r r ", -"e o i < < _ / / ^ ^ { { { { { { { { { { { { { { { { ^ ^ ^ / _ < < y r r ", -"e o p s z B D B B B B B B B B B B B B B B B B B B B B B B B C B C v p p ", -"e o o r s s s s s s s s t t s s s s s s s s s s t t s t s s t s s p o o ", -"e o m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m ", -"e o m : _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ m m m ", -"e o m I K I I I I I I I I I I I I I I I I I I I I I I I I I I I I t m m ", -"e o m I N R S S S S S S S S S S S S S S S S S S S S S S S S S S S 0 m m ", -"e o m E L Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q R Q O : m m ", -"e o m G L P O O O O O O O O O O O O O O O O O O O O O O O O O O L } m m ", -"e m m E L P O O O O O O O O O O O O O O O O O O O O O O O O P O L | m m ", -"e m m G L P O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m m ", -"e m m E L P O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m m ", -"e m m G L Q O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m m ", -"e m m E L P O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m m ", -"e m m G L P O O P P P P P P P P P P P P P P P P P P P P P P P O M } m m ", -"e m m E L J L L L L L L L L L L L L L L L L L L L L L L L L M J E 1 k k ", -"e m m H t e b c b b b b b b b b b b b b b b b b b b b b b b c a 0 1 m m ", -"e m k c ; @ + + + + + + + + + + + + + + + + + + + + + + + + + + + @ m m ", -"e m m k k m m k m m m m m k k k m k m m m m k m m k m m k m m k k k m m ", -"e d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ", -"4 / ^ { { { { { { ^ { { ^ { { ^ { { ^ { { { { ^ { { ^ { { { { { ^ { { { "}; +"36 208 6 1", +" c #595966", +". c #2E3038", +"+ c #000000", +"@ c #27272B", +"# c #616176", +"$ c #737384", +" ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..................++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ..................++++++++++...... ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" "}; diff --git a/hdspmixer/pixmaps/output_r.xpm b/hdspmixer/pixmaps/output_r.xpm index 2e73c7f..3e14513 100644 --- a/hdspmixer/pixmaps/output_r.xpm +++ b/hdspmixer/pixmaps/output_r.xpm @@ -1,468 +1,217 @@ /* XPM */ char const * output_r_xpm[] = { -"36 208 257 2", -" c None", -". c #000000", -"+ c #080808", -"@ c #080810", -"# c #001008", -"$ c #101010", -"% c #181010", -"& c #002010", -"* c #101818", -"= c #181818", -"- c #002918", -"; c #202018", -"> c #003118", -", c #202020", -"' c #202029", -") c #292020", -"! c #202920", -"~ c #292920", -"{ c #292929", -"] c #004120", -"^ c #293131", -"/ c #313131", -"( c #104A29", -"_ c #393939", -": c #394139", -"< c #414141", -"[ c #20524A", -"} c #4A4141", -"| c #414A41", -"1 c #4A4A41", -"2 c #4A4A4A", -"3 c #524A41", -"4 c #4A524A", -"5 c #525252", -"6 c #525A52", -"7 c #5A5A52", -"8 c #625A4A", -"9 c #317B20", -"0 c #5A625A", -"a c #62625A", -"b c #626A62", -"c c #6A6A62", -"d c #6A6A6A", -"e c #736A62", -"f c #737373", -"g c #7B736A", -"h c #737B73", -"i c #737B7B", -"j c #7B7B73", -"k c #7B7B7B", -"l c #7B8373", -"m c #7B837B", -"n c #83837B", -"o c #838383", -"p c #838B83", -"q c #8B8B83", -"r c #8B8B8B", -"s c #8B948B", -"t c #94948B", -"u c #949494", -"v c #949C94", -"w c #949C9C", -"x c #9C9C94", -"y c #9C9C9C", -"z c #9CA49C", -"A c #9CA4A4", -"B c #A4A49C", -"C c #A4A4A4", -"D c #A4ACA4", -"E c #ACACA4", -"F c #ACACAC", -"G c #B4B4AC", -"H c #BDBDB4", -"I c #C5C5BD", -"J c #CDCDCD", -"K c #D5D5CD", -"L c #DEDED5", -"M c #DEE6DE", -"N c #E6E6E6", -"O c #EEEEEE", -"P c #F6EEEE", -"Q c #F6F6F6", -"R c #F6FFFF", -"S c #FFFFFF", -"T c #6633FF", -"U c #666600", -"V c #666633", -"W c #666666", -"X c #666699", -"Y c #6666CC", -"Z c #6666FF", -"` c #669900", -" . c #669933", -".. c #669966", -"+. c #669999", -"@. c #6699CC", -"#. c #6699FF", -"$. c #66CC00", -"%. c #66CC33", -"&. c #66CC66", -"*. c #66CC99", -"=. c #66CCCC", -"-. c #66CCFF", -";. c #66FF00", -">. c #66FF33", -",. c #66FF66", -"'. c #66FF99", -"). c #66FFCC", -"!. c #66FFFF", -"~. c #990000", -"{. c #990033", -"]. c #990066", -"^. c #990099", -"/. c #9900CC", -"(. c #9900FF", -"_. c #993300", -":. c #993333", -"<. c #993366", -"[. c #993399", -"}. c #9933CC", -"|. c #9933FF", -"1. c #996600", -"2. c #996633", -"3. c #996666", -"4. c #996699", -"5. c #9966CC", -"6. c #9966FF", -"7. c #999900", -"8. c #999933", -"9. c #999966", -"0. c #999999", -"a. c #9999CC", -"b. c #9999FF", -"c. c #99CC00", -"d. c #99CC33", -"e. c #99CC66", -"f. c #99CC99", -"g. c #99CCCC", -"h. c #99CCFF", -"i. c #99FF00", -"j. c #99FF33", -"k. c #99FF66", -"l. c #99FF99", -"m. c #99FFCC", -"n. c #99FFFF", -"o. c #CC0000", -"p. c #CC0033", -"q. c #CC0066", -"r. c #CC0099", -"s. c #CC00CC", -"t. c #CC00FF", -"u. c #CC3300", -"v. c #CC3333", -"w. c #CC3366", -"x. c #CC3399", -"y. c #CC33CC", -"z. c #CC33FF", -"A. c #CC6600", -"B. c #CC6633", -"C. c #CC6666", -"D. c #CC6699", -"E. c #CC66CC", -"F. c #CC66FF", -"G. c #CC9900", -"H. c #CC9933", -"I. c #CC9966", -"J. c #CC9999", -"K. c #CC99CC", -"L. c #CC99FF", -"M. c #CCCC00", -"N. c #CCCC33", -"O. c #CCCC66", -"P. c #CCCC99", -"Q. c #CCCCCC", -"R. c #CCCCFF", -"S. c #CCFF00", -"T. c #CCFF33", -"U. c #CCFF66", -"V. c #CCFF99", -"W. c #CCFFCC", -"X. c #CCFFFF", -"Y. c #FF0000", -"Z. c #FF0033", -"`. c #FF0066", -" + c #FF0099", -".+ c #FF00CC", -"++ c #FF00FF", -"@+ c #FF3300", -"#+ c #FF3333", -"$+ c #FF3366", -"%+ c #FF3399", -"&+ c #FF33CC", -"*+ c #FF33FF", -"=+ c #FF6600", -"-+ c #FF6633", -";+ c #FF6666", -">+ c #FF6699", -",+ c #FF66CC", -"'+ c #FF66FF", -")+ c #FF9900", -"!+ c #FF9933", -"~+ c #FF9966", -"{+ c #FF9999", -"]+ c #FF99CC", -"^+ c #FF99FF", -"/+ c #FFCC00", -"(+ c #FFCC33", -"_+ c #FFCC66", -":+ c #FFCC99", -"<+ c #FFCCCC", -"[+ c #FFCCFF", -"}+ c #FFFF00", -"|+ c #FFFF33", -"1+ c #FFFF66", -"2+ c #FFFF99", -"3+ c #FFFFCC", -"4+ c #FFFFFF", -"5+ c #000000", -"6+ c #0D0D0D", -"7+ c #1A1A1A", -"8+ c #282828", -"9+ c #353535", -"0+ c #434343", -"a+ c #505050", -"b+ c #5D5D5D", -"c+ c #6B6B6B", -"d+ c #787878", -"e+ c #868686", -"f+ c #939393", -"g+ c #A1A1A1", -"h+ c #AEAEAE", -"i+ c #BBBBBB", -"j+ c #C9C9C9", -"k+ c #D6D6D6", -"l+ c #E4E4E4", -"m+ c #F1F1F1", -"n+ c #FFFFFF", -"o+ c #0099FF", -"p+ c #00CCFF", -"q+ c #00FFFF", -"r+ c #3300FF", -"s+ c #3333FF", -"t+ c #3366FF", -"u+ c #3399FF", -"v+ c #33CCFF", -"w+ c #33FFFF", -"x+ c #6600FF", -"y+ c #6633FF", -"z+ c #6666FF", -"A+ c #6699FF", -"B+ c #66CCFF", -"C+ c #66FFFF", -"D+ c #9900FF", -"E+ c #9933FF", -"F+ c #9966FF", -"G+ c #9999FF", -"H+ c #99CCFF", -"2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 { ", -"j g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g / ", -"F F D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D a ", -"C C r m m m m m m m m m m m m m m m m m m m m m m m m m m m m m r x z 6 ", -"C C o < : _ / / ^ ^ { { { { { { { { { { { { { { { { ^ ^ / / _ : < z A 6 ", -"C C p : / / ^ { { { ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' { { { ^ ^ / < D D 6 ", -"A A p _ / { { ' , ; = ; = ; = ; = ; = ; = ; = ; = ; ; , ' { { / _ F D 6 ", -"A A p / ^ { ' ; = = * * * * * * * * * * * * * * * * * = ; ' { ^ / F D 6 ", -"A A p / { ' ; = * $ $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ * * = ; ' { / F D 6 ", -"A A p ^ { ' = * $ @ + + + + + + + + + + + + + + + + @ $ * = ' { ^ F D 6 ", -"A A p ^ { , = * $ @ + + + + + + + + + + + + + + + + @ $ * = , { ^ F D 6 ", -"A A p / { , = * $ @ + + + + + + + + + + + + + + + + @ % * = , { ^ F D 6 ", -"A A p / { ' ; = * $ $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ $ * = ; ' { / F D 6 ", -"A A p / ^ { ' ; = = * * * * * * * * * * * * * * * * = = = ' { ^ / F D 5 ", -"A A p _ ^ { { ' , ; = = = = = = = = = = = = = = ; = ; , ' { { / _ F D 5 ", -"A A r < / / ^ { { { ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' { { { ^ / / : G D 5 ", -"A A v < < _ / / ^ ^ { { { { { { { { { { { { { { { { ^ ^ / / _ < < G D 5 ", -"A A A F H H H H H H H H H H H H H H H H H H H H H H H H H H H H H G C 5 ", -"z z A D D F F F F F F F F F F F F F F F F F F F F F F F F F F F F C A 5 ", -"A A s b / / / / / / / / / / / / / / / / / / / / / / / / / / / / b s y 5 ", -"z z r 2 7 7 5 5 2 7 4 5 6 2 5 5 5 4 2 2 4 4 4 4 4 6 4 2 5 4 5 2 2 v z 5 ", -"z z r 5 4 7 5 4 7 5 4 4 4 6 5 7 5 7 4 4 4 2 6 2 4 7 6 6 4 4 7 2 / z z 5 ", -"z z r 6 4 5 4 5 2 5 2 7 6 2 2 7 2 7 4 4 2 5 5 5 4 4 4 4 5 5 7 | ! z z 5 ", -"z z r 6 2 4 4 6 6 2 2 6 2 6 2 2 4 5 6 5 4 4 7 2 4 4 2 4 2 2 2 < { z z 5 ", -"z z r 6 6 5 2 5 5 2 2 5 6 6 4 7 0 7 b j n j j l n j k g a 5 7 < { z z 5 ", -"z z r 6 7 2 4 2 { , / < 2 4 2 2 0 4 c . . . . . . . . . . 2 5 2 ! z z 5 ", -"z z r 6 7 7 4 < , g } 4 4 7 4 7 a 4 0 . . . . . . . . . . | 2 2 ! z z 5 ", -"z z r 6 6 4 7 1 ~ 8 { 0 0 5 6 2 6 4 a . & # & & & # & - . | 4 : ~ z z 5 ", -"z z q 6 5 6 2 2 { 3 ) b 7 4 7 4 a 4 7 . & & - - - > - ] . : 4 | { z z 5 ", -"z z r 6 7 2 4 2 , 3 ) c b 7 7 2 0 7 c . > > ] - > ] ] ( . < 2 : ! z z 5 ", -"z z r 6 6 4 2 2 { 3 ) e 0 2 2 2 a 4 0 . - > ] ] > ] ] ( . < 4 2 { z z 5 ", -"z z r 6 6 2 2 < ~ 3 ) b 0 7 2 4 6 2 a . - - > > ] > ] ( . < | 2 ! z y 5 ", -"z z r 6 4 5 4 : ~ 3 ) e 6 5 4 5 6 2 b . - > ] > > ] ] ( . | | 2 , y z 5 ", -"z z p 6 4 2 2 | ! 3 ) b 6 7 4 4 7 5 b . - > > ] > ] ] ( . : | : ~ y y 5 ", -"z z p 6 4 6 2 2 { 3 ) c 6 7 4 2 0 6 b . - > > > ] > ] ( . : 4 | { y y 5 ", -"z z r 6 7 4 6 1 { 3 ) g 0 4 5 4 6 4 b . - > > > > ] ] ( . 2 < | ~ y y 5 ", -"z z p 6 5 4 5 : ! 3 ) b b 2 2 4 7 6 0 . - > ] > > ] ] ( . | 5 : ! y y 5 ", -"z z p 6 6 4 5 | { 3 ) c 0 4 6 4 a 2 a . - - > ] > > ] ( . | 2 | { y y 5 ", -"z z p 5 4 5 4 2 { 3 ) g 7 2 5 4 0 4 a . - - ] ] > > ] ( . < 2 : ! y y 5 ", -"z z p 6 2 7 6 2 { 3 ) c 7 5 5 2 5 7 7 . - - > ] > ] ] ( . : 5 : ! y y 5 ", -"z z p 5 4 7 6 | { 3 ) b 0 2 5 4 5 7 c . - > > - ] > ] ( . | 2 | ! y y 5 ", -"z z p 6 7 5 2 | { 3 ) b a 2 7 2 0 6 b . - - > > ] > ] ( . : | 2 , y y 5 ", -"z z p 5 5 2 2 2 , 3 ) c b 2 5 7 7 5 a . - > > > > > ] ( . < 4 2 , y y 5 ", -"z z p 5 7 2 4 < , 3 ) b 7 4 7 4 a 7 7 . > > ] ] ] > ] ( . 2 2 | { y y 5 ", -"z z p 5 2 5 4 : ! 3 ) b 6 7 2 6 5 5 0 . > > > > > > ] ( . < 4 < { y y 5 ", -"z z p 5 4 6 2 < ~ 3 ) e 0 4 5 4 7 4 a . - > ] > ] > ] ( . < | < ! y y 5 ", -"z z p 5 2 6 7 2 ! 3 ) a b 5 2 7 6 7 b . - - > > > > ] ( . | | | ~ y y 5 ", -"z z p 5 4 4 6 1 , 3 ) b 0 4 2 4 a 4 a . - - > > > ] ] ( . 2 | < , y y 5 ", -"z z p 5 2 7 2 2 { 3 ) b 6 2 2 6 0 2 b . - - > > ] ] ] ( . < | 2 , y y 5 ", -"z z p 5 4 4 6 2 { 3 ) e 0 4 2 5 6 5 a . > > ] > > > ] ( . | | < { y y 5 ", -"y y p 5 4 7 4 < ~ 3 ) e 0 6 2 7 5 7 b . - > > ] > > ] ( . < 4 : { y y 5 ", -"y y p 5 5 4 7 : ! 3 ) c b 2 2 4 5 2 a . - - ] ] > ] ] ( . 2 5 < { y y 5 ", -"y y p 5 4 6 5 : ~ 3 ) a 0 4 2 4 6 4 b . > - ] > > > ] ( . | 4 < , y w 5 ", -"y y p 5 4 7 7 < ! 3 ) b a 6 4 7 6 4 c . - > > - ] > ] ( . : 2 < ! w y 5 ", -"y y p 5 5 4 4 < ~ 3 ) g 6 7 5 6 0 4 0 . - - > > > > > ( . 2 2 | ! y y 5 ", -"y y p 5 2 6 5 | ! 3 ) c 6 5 7 2 5 7 0 . - ] > > > > ] ( . : 2 2 ~ w w 5 ", -"y y p 5 6 4 7 2 , 3 ) c b 4 4 2 0 4 a . - - ] > ] > ] ( . : 2 2 { w w 5 ", -"y y p 5 2 4 4 2 ~ 3 ) c 0 5 6 5 6 4 c . - - > > > > ] ( . : 4 < ~ w w 4 ", -"y y p 5 5 5 6 < ! 3 ) b 6 4 4 7 0 7 a . - > > > > > ] ( . 2 | < , w w 4 ", -"y y p 5 4 5 7 | , 3 ) c a 4 6 4 a 4 a . - > ] > > ] ] ( . : 5 < , w w 5 ", -"y y p 5 6 6 4 < ! 3 ) c b 5 2 4 4 2 0 . - ] > > > ] ] ( . | 2 2 { w w 4 ", -"y y p 5 4 4 4 | { 3 ) b 0 5 5 4 0 2 7 . - - > ] - > ] ( . : 4 < { w w 4 ", -"y y p 5 2 2 7 : { 3 ) a a 5 5 4 6 4 a . - > ] > > > ] ( . 2 4 < { w w 4 ", -"y y p 5 4 2 4 | { 3 ) e 6 6 6 7 6 5 0 . - - ] > ] ] ] ( . : 2 | ! w w 4 ", -"y y p 5 4 5 7 2 { 3 ) b b 2 2 4 6 4 0 . - - > ] ] > ] ( . 2 2 < ! w w 4 ", -"y y p 5 4 4 5 | { 3 ) b a 4 2 7 a 6 0 . - > > - > ] ] ( . 2 5 < ~ v v 4 ", -"y y o 5 4 4 4 < { 3 ) a a 4 2 2 0 4 0 . - > > ] - > ] ( . | 5 : { v w 4 ", -"y y o 5 4 5 7 : ~ 3 ) e a 4 5 4 6 2 c . - - ] > > > ] ( . | < | ~ v v 4 ", -"w w o 5 2 6 7 | { 3 ) c 7 7 2 6 6 2 b . - > ] > > > ] ( . 2 | 2 { v v 4 ", -"w w o 5 4 5 2 | ! 3 ) g 6 4 2 2 a 7 0 . - - ] > > > ] ( . | 5 2 ! v v 4 ", -"x x o 5 5 2 6 < { 3 ) e a 7 4 6 5 6 7 . - > - > > > ] ( . : | | ~ v v 4 ", -"w w o 5 7 5 4 : ~ 3 ) c 6 7 5 5 7 2 0 . - > > > > ] ] ( . 2 5 2 { v v 4 ", -"w w o 5 7 6 5 < { 3 ) a b 6 5 4 0 5 a . > - > > > > ] ( . < 2 < ~ v v 4 ", -"w w o 5 4 5 5 2 { 3 ) c 0 4 5 5 0 4 c . - - > ] ] > ] ( . | | | { v v 4 ", -"x x o 5 2 4 7 2 , 3 ) a b 5 2 4 0 2 b . - - ] > > > ] ( . 2 2 < { v v 4 ", -"x x o 5 5 4 2 2 { 3 ) a 6 4 7 6 a 4 b . > - > > > ] ] ( . | 4 | , v v 4 ", -"w w o 5 2 4 5 < ~ 3 ) b 6 4 5 7 7 2 0 . - > ] > ] > ] ( . 2 4 | ! v v 4 ", -"x x o 5 5 2 2 | ! 3 ) b 6 6 4 4 0 4 0 . - - ] ] ] ] ] ( . | | 2 ! v v 4 ", -"x x o 5 7 2 7 2 ! 3 ) a b 5 4 4 a 7 a . & > ] > > ] ] ( . 2 | : { v v 4 ", -"w w o 5 7 2 4 2 ! 3 ) a 0 6 4 6 5 7 7 . > > > > ] ] ] ( . | 4 < ~ v v 4 ", -"w w o 5 5 4 5 | ! 3 ) c 6 6 5 4 7 5 0 . - > > > > > ] ( . < | | { v v 4 ", -"x v o 5 7 4 6 2 ! 3 ) a b 4 7 4 5 5 b . - - ] ] ] ] ] ( . < 2 2 { v v 4 ", -"x v o 5 4 6 6 2 { 3 ) a b 4 5 7 0 5 0 . > > > > ] ] ] ( . | 4 < , v v 4 ", -"x v o 5 7 2 2 | ! 3 ) c a 5 4 2 a 6 0 . - - > - > ] ] ( . | < 2 ! v v 4 ", -"x v o 5 6 2 2 < ~ 3 ) e 0 5 7 7 5 4 c . - - > > > ] ] ( . : 5 2 ~ v v 4 ", -"x v o 5 4 4 6 < { 3 ) c a 4 5 7 7 6 b . - > > ] > > ] ( . | 2 2 ! v v 4 ", -"x v o 5 6 4 2 | , 3 ) f 6 5 4 4 6 5 a . - - ] > > > ] ( . | 2 | ~ v v 4 ", -"v v o 4 4 5 6 | { 3 ) b a 4 7 2 0 5 a . - > > ] > ] ] ( . < 2 2 ! v v 4 ", -"v v o 5 5 6 4 | { 3 ) b 7 4 4 2 0 4 b . - > > > > ] ] ( . | | < , v u 4 ", -"v v o 5 4 4 5 2 ! 3 ) b 0 6 2 7 a 7 b . - - ] > - > ] ( . | 4 2 , u v 4 ", -"v v o 4 4 5 5 < { 3 ) c 0 4 5 6 0 2 a . > > > ] > ] ] ( . | 5 | ! u u 4 ", -"v v o 5 5 5 7 2 ~ 3 ) g 6 2 2 4 0 2 0 . - > > ] > ] ] ( . 2 2 2 , v u 4 ", -"v v o 4 7 2 6 : ~ 3 ) e 0 5 2 5 0 5 b . - - ] > ] ] ] ( . < | | ! u u 4 ", -"v v m 4 2 2 2 : ~ 3 ) b 0 5 4 7 5 4 b . - - ] > > > ] ( . < 4 | ! u u 4 ", -"v v m 5 4 2 4 | ! 3 ) e a 4 4 4 a 2 0 . - - > > > > ] ( . < 4 | { u u 4 ", -"v v m 4 5 4 5 2 , 3 ) b 7 2 4 2 0 4 b . > > ] > > > ] ( . | | 2 ~ u u 4 ", -"v v m 4 4 4 6 2 ! 3 ) b 6 6 4 5 a 4 0 . - > > ] > ] ] ( . 2 2 | , u u 4 ", -"v v m 4 4 4 5 | ! 3 ) b 6 4 6 6 6 4 a . - > > ] > > ] ( . | 5 < ~ u u 4 ", -"v v m 4 5 5 7 | ! 3 ) b 6 7 6 6 6 5 a . - - > ] > > > ( . < 4 2 , u u 4 ", -"v v m 4 4 2 4 : { 3 ) c 7 7 4 4 5 7 0 . - - ] > > > ] ( . | | | { u u 4 ", -"v v m 4 6 7 5 2 ! 3 ) b 6 5 4 5 0 6 b . - > ] > > ] ] ( . < 5 | ~ u u 4 ", -"v v m 4 5 4 7 < ! 3 ) g 7 4 4 7 7 5 b . - - > ] > ] ] ( . 2 < 2 ! u u 4 ", -"v v m 4 6 2 5 | { 3 ) c 0 2 6 7 a 4 0 . - - ] ] > ] ] ( . : | | ~ u u 4 ", -"u u m 4 2 4 6 < { 3 ) c 7 4 2 7 6 4 b . - > > - ] ] ] ( . | 4 | { u u 4 ", -"v v m 4 2 7 5 2 ! 3 ) e 6 5 4 5 a 2 c . - > > > ] - ] ( . < 5 2 { u u 4 ", -"u u m 4 5 2 4 < , 3 ) c a 2 4 4 6 5 b . > > ] ] ] > ] ( . 2 5 < { u u 4 ", -"u u m 4 4 4 4 | ~ 3 ) b 0 4 4 6 a 6 0 . - > > - ] > ] ( . 2 < | ~ u u 4 ", -"v v m 4 4 6 4 | , 3 ) b 0 7 4 6 a 4 0 . - > ] ] ] > ] ( . : | | , u u 2 ", -"u u m 4 6 2 6 : ! 3 ) b 6 4 6 2 7 5 0 . - - > > > > ] ( . 1 5 | , u u 4 ", -"u u m 4 2 4 4 : { 3 ) c a 5 5 4 a 4 0 . - > > > > ] ] ( . < | | { u u 4 ", -"u u m 4 4 2 2 | ~ 3 ) a 0 5 2 2 a 5 0 . - > > > > > ] ( . 2 5 | { u u 2 ", -"u u m 4 4 2 2 | ! 3 ) c 0 4 5 7 5 2 a . - - > > > - ] ( . 2 4 < { u u 2 ", -"u u m 4 6 6 4 : { 3 ) b 7 2 2 4 6 4 a . - - ] > > ] ] ( . : 5 2 , u u 2 ", -"u u m 4 4 4 5 < { 3 ) c b 5 6 4 7 4 a . - > > > ] ] ] ( . 2 < < ~ t t 2 ", -"u u m 4 5 7 4 2 ! 3 ) c b 5 6 4 0 2 c . - ] ] > ] > ] ( . 2 | | ! t t 2 ", -"u u m 4 5 4 2 2 ~ 3 ) c a 5 6 4 0 4 c . > > > > - > ] ( . : 4 < ! t t 2 ", -"u u m 4 6 5 4 | { 3 ) b 0 2 4 4 0 4 0 . - - ] > ] > > ( . | 2 | { t t 2 ", -"u u m 4 4 2 5 : { 3 ) e a 2 4 4 7 7 a . - > ] > > > ] ( . : 4 : { t t 2 ", -"u u m 4 7 4 7 | , 3 ) f 6 6 4 2 0 6 a . - - > > > ] ] ( . 2 5 2 ! s s 2 ", -"u u m 4 4 2 6 | , 3 ) e a 4 4 4 6 4 b . > ] > > > ] ] ( . : 4 2 , s t 2 ", -"u u m 4 4 2 5 < , 3 ) c 7 2 7 2 a 2 b . - > ] > > > ] ( . : | 2 ! t s 2 ", -"u u m 4 7 6 2 | ! 3 ) e 0 2 4 7 7 6 7 . - > > > ] > ] ( . | 2 2 , t s 2 ", -"u u m 4 7 4 6 : ~ 3 ) a 0 2 5 5 0 6 c . - > > ] ] ] ] ( . | 4 : ! s s 2 ", -"u u m 4 4 5 5 : { 3 ) c 6 2 4 4 6 5 0 . - > > ] > ] ] ( . | < 2 ~ s s 2 ", -"u u m 4 5 5 6 | , 3 ) b b 2 4 5 5 5 a . > > > > > > ] ( . | 4 2 { s s 2 ", -"u u m 4 7 4 6 | ~ 3 ) c a 4 4 2 a 5 b . > - > ] ] > ] ( . 2 | 2 ~ s s 2 ", -"u u m 4 2 6 7 : ! 3 ) b 0 2 6 4 0 4 c . > > > > ] > ] ( . : | | ! s s 2 ", -"t t m 4 6 2 5 2 ~ 3 ) b 0 2 2 4 6 4 c . - > > > ] > ] ( . : 2 < , s s 2 ", -"t t m 4 2 4 4 2 ! 3 ) a a 5 4 5 a 4 b . - > ] > ] > ] ( . < 4 | { s s 2 ", -"t t m 4 4 5 4 | { 3 ) e 6 5 7 5 6 5 b . > > ] > ] ] ] ( . < 5 2 ~ s s 2 ", -"t t m 4 2 5 7 : { 3 ) a b 4 5 6 0 4 0 . > > ] ] > > ] ( . 2 < < ! s s 2 ", -"t t m 4 5 6 7 | ! 3 ) b a 2 4 4 5 4 c . & - > > ] > ] ( . | 5 : ! s s 2 ", -"t t m 4 2 7 4 | ~ 3 ) c b 7 2 4 0 6 a . > > > ] ] ] ] ( . : 4 : , s s 2 ", -"t t m 4 2 5 4 : { 3 ) a b 5 2 5 6 6 0 . > > > > ] ] ] ( . 2 | < { s s 2 ", -"s s m 4 4 5 2 | { 3 ) b 6 2 5 4 5 7 b . - > > > > ] ] ( . 2 | : { s s 2 ", -"t t k 4 5 7 6 2 { 3 ) e b 5 4 6 a 4 b . - - > ] ] ] ] ( . 2 | < { s s 2 ", -"t t s 4 2 6 7 4 { 3 ) a a 7 5 2 4 6 0 . - > ] ] > > ] ( . < | 2 { s s 2 ", -"s s s 4 4 5 5 5 ! 3 ) b 7 2 4 7 4 7 0 . - > > > > > ] ( . < 4 : ! s s 2 ", -"s s s 4 5 4 4 2 { 3 ) b b 5 6 5 2 4 a . - > > ] > ] ] ( . < 5 | ~ s s 2 ", -"s s s 2 5 2 2 5 ~ 3 ) b 0 4 5 5 6 6 7 . > > > > ] > ] ( . 2 | | { s s 2 ", -"s s s 2 5 5 5 4 { 3 ) a 0 2 4 4 6 4 c . - - ] > > ] ] ( . 2 4 | { s r 2 ", -"s s r 2 5 5 7 2 ! 3 ) b a 2 7 2 4 4 0 . - > > ] > ] ] ( . 1 | | ~ s s 2 ", -"s s r 2 7 5 5 7 , 3 ) c b 2 5 5 6 2 0 . - > > ] ] ] ] ( . 2 4 : { r r 2 ", -"s s r 2 5 4 5 4 { 3 ) c a 4 2 7 2 2 a . - - ] > > ] ] ( . : | 2 ~ r r 2 ", -"s s r 2 5 2 2 7 ~ 3 ) c 7 2 4 4 2 4 0 . - > ] > ] > ] ( . 2 2 | ~ r r 2 ", -"s s r 2 2 4 4 7 ! 3 ) b 7 2 2 4 4 7 7 . - > > > ] > ] ( . 2 2 | { r r 2 ", -"s s r 2 5 7 2 4 { 3 ) c b 7 4 4 5 6 0 . - > > - > > ] ( . < 4 : , r r 2 ", -"s s r 2 2 4 4 6 ~ 3 ) c a 2 6 6 2 7 a . > - ] > > > ] ( . < 2 2 ~ r r 2 ", -"s s r 2 2 5 4 2 ! 3 ) b 6 7 2 6 2 5 0 . > > > > > > ] ( . < 4 < { r r 1 ", -"s s r 2 4 2 5 4 ~ 3 ) c 0 4 4 2 2 4 b . - > > > ] > ] ( . : 2 < , r r 2 ", -"s s r 2 7 4 5 4 ! 3 ) c b 4 2 4 4 7 b . - - ] > > > ] ( . < 5 : { r r 2 ", -"s s r 2 4 6 5 5 ! 3 ) a a 5 4 5 4 6 0 . - > > > - ] ] ( . | 2 | ~ r r 1 ", -"r r r 2 4 4 6 2 ! 3 ) c 6 7 4 4 2 4 0 . > - > ] > > ] ( . : | | ! r r 1 ", -"s s r 2 6 6 2 7 ~ 3 ) c 0 4 2 5 2 7 0 . - > ] > > > ] ( . | 5 < , r r 1 ", -"r r r 2 5 6 6 4 { 3 ) e b 7 4 5 4 2 0 . > - ] > > > ] ( . | | | ~ r r 1 ", -"r r r 2 4 6 4 4 ! 3 ) e b 4 5 4 2 7 b . - > ] ] > > ] ( . 2 | | ! r r | ", -"r r p 2 6 5 5 4 ~ 3 ) c 0 4 4 5 2 4 b . - - ] > ] ] > ( . 2 2 | { p p | ", -"r r p 2 5 7 4 7 { 3 ) e b 6 2 2 6 5 0 . - - > > > ] ] ( . | 4 : , p r | ", -"r r p 2 7 4 4 6 , 3 ) c 6 4 2 4 4 6 0 . - > ] > > > ] ( . : < 2 ~ r p 1 ", -"r r p 1 5 6 6 5 { 3 ) g 6 4 7 4 2 5 a . - - > > ] > ] ( . | 4 : { p p | ", -"r r p 1 4 6 5 2 ! 3 ) b 0 2 4 6 4 5 b . - - > > ] ] > ( . : | : ! p p | ", -"r r p 1 4 5 4 6 { 3 ) c b 4 6 6 4 6 c . > > ] > > > ] ( . : | | , p p | ", -"r r p 1 5 5 4 5 ! 3 ) e 6 4 2 7 4 7 a . - > ] > ] > ] ( . 2 2 : ~ p p | ", -"r r p 1 7 6 6 2 ! 3 ) b a 5 2 5 5 2 0 . - > ] > ] ] ] ( . : < | { p p | ", -"r r p 1 2 2 7 4 ~ 3 ) b 6 5 5 5 6 7 0 . > ] ( ( ( ( ( ( . | 2 < ~ p p | ", -"p p p | 4 5 6 5 / _ = e 7 2 7 7 7 4 c . ] ( [ : 9 [ | : . < 2 : ! p p | ", -"p p p | 7 4 2 2 4 ) + j b 5 4 4 4 4 5 . . . . . . . . . . : | < ! p p | ", -"p p p | 5 5 5 5 6 g n n 6 4 5 5 5 2 4 | : _ < / / _ / / _ < 4 2 ~ p p | ", -"p p p | 2 4 4 6 6 6 c 0 7 2 6 6 2 7 4 5 | 2 < 2 | | 2 2 < 2 4 2 ~ p p | ", -"p p p | 5 4 5 6 6 4 7 7 4 7 2 4 4 4 7 5 2 5 4 4 2 2 4 5 4 4 4 : { p p | ", -"p p p 5 4 4 _ _ : / / _ _ < : _ _ : : : _ : _ : / _ < / : < _ / ; p o | ", -"p p o h _ * $ @ * @ $ $ $ $ $ $ $ % $ $ $ @ $ $ @ $ $ $ % $ $ $ $ p p | ", -"p p p o o o o p p p p o o p o p o o o o p p o o p o o o o p o p o o o < ", -"p p m k i i i i i i i i i i i i i i i i i i i i i i k i i i k k m o o | ", -"p p f b b b b b b a b b b b b b a b b b a b b b b a a b a b a b f m o < ", -"p p d < : _ / / ^ ^ { { { { { { { { { { { { { { { { ^ ^ / / / : < m p | ", -"p p d : / ^ ^ { { { ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' { { { ^ / / : s r < ", -"p p d / ^ ^ { ' , ; = ; = ; = ; = ; = ; = ; = ; = ; ; , ' { ^ / : u s < ", -"p p d / ^ { ' ; = * * * * * * * * * * * * * * * * * = = ; ' { ^ / t r | ", -"p p d ^ { ' ; = * * $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ $ * = ; ' { / t r < ", -"p p d ^ { ' = * $ @ + + + + + + + + + + + + + + + + @ $ * = , { ^ t r < ", -"o o d { { , = * $ @ + + + + + + + + + + + + + + + + @ $ * = , { ^ t r | ", -"o o d ^ { , = * % @ + + + + + + + + + + + + + + + + @ $ * = , { / t r < ", -"o o d ^ { ' ; = * $ $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ $ * = ; ' { / t r | ", -"o o d / ^ { ' ; = = * * * * * * * * * * * * * * * * = = ; ' { ^ / t r < ", -"o o d / ^ { { ' , = ; = = = = = = = = = = = = = = ; ; , ' { { / _ t r < ", -"o o f : / / ^ { { { ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' { { { ^ / / : u r < ", -"o o i < < _ / / ^ ^ { { { { { { { { { { { { { { { { ^ ^ ^ / _ < < y r < ", -"o o p s z B D B B B B B B B B B B B B B B B B B B B B B B B C B C v p < ", -"o o o r s s s s s s s s t t s s s s s s s s s s t t s t s s t s s p o < ", -"o o m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m < ", -"o o m : _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ m m < ", -"o o m I K I I I I I I I I I I I I I I I I I I I I I I I I I I I I t m < ", -"o o m I N R S S S S S S S S S S S S S S S S S S S S S S S S S S S 0 m < ", -"o o m E L Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q R Q O : m < ", -"o o m G L P O O O O O O O O O O O O O O O O O O O O O O O O O O L } m < ", -"m m m E L P O O O O O O O O O O O O O O O O O O O O O O O O P O L | m : ", -"m m m G L P O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m : ", -"m m m E L P O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m : ", -"m m m G L Q O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m : ", -"m m m E L P O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m : ", -"m m m G L P O O P P P P P P P P P P P P P P P P P P P P P P P O M } m < ", -"m m m E L J L L L L L L L L L L L L L L L L L L L L L L L L M J E 1 k : ", -"m m m H t e b c b b b b b b b b b b b b b b b b b b b b b b c a 0 1 m : ", -"m m k c ; @ + + + + + + + + + + + + + + + + + + + + + + + + + + + @ m : ", -"m m m k k m m k m m m m m k k k m k m m m m k m m k m m k m m k k k m : ", -"e d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / ", -"4 / ^ { { { { { { ^ { { ^ { { ^ { { ^ { { { { ^ { { ^ { { { { { ^ { { { "}; +"36 208 6 1", +" c #595966", +". c #2E3038", +"+ c #000000", +"@ c #27272B", +"# c #616176", +"$ c #737384", +" ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..................++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ........@#........++++++++++...... ", +" ..................++++++++++...... ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" ..++++++++++++++++++++++++++++++.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" "}; diff --git a/hdspmixer/pixmaps/over.xpm b/hdspmixer/pixmaps/over.xpm index 5918170..e56c73b 100644 --- a/hdspmixer/pixmaps/over.xpm +++ b/hdspmixer/pixmaps/over.xpm @@ -1,273 +1,18 @@ /* XPM */ char const * over_xpm[] = { -"30 13 257 2", -" c None", -". c #000000", -"+ c #080000", -"@ c #080808", -"# c #080810", -"$ c #001008", -"% c #101010", -"& c #181010", -"* c #002010", -"= c #101818", -"- c #181818", -"; c #201818", -"> c #002918", -", c #202018", -"' c #003118", -") c #202020", -"! c #202029", -"~ c #292020", -"{ c #202920", -"] c #392020", -"^ c #292920", -"/ c #292929", -"( c #004120", -"_ c #293131", -": c #412920", -"< c #313129", -"[ c #313131", -"} c #104A29", -"| c #393939", -"1 c #394139", -"2 c #414141", -"3 c #20524A", -"4 c #414152", -"5 c #4A4141", -"6 c #414A41", -"7 c #4A4A41", -"8 c #4A4A4A", -"9 c #524A41", -"0 c #4A524A", -"a c #525252", -"b c #734A29", -"c c #5A524A", -"d c #525A52", -"e c #5A5A52", -"f c #625A4A", -"g c #317B20", -"h c #5A625A", -"i c #62625A", -"j c #6A6252", -"k c #626A62", -"l c #6A6A62", -"m c #6A6A6A", -"n c #736A62", -"o c #737373", -"p c #7B736A", -"q c #737383", -"r c #9C7329", -"s c #737B73", -"t c #737B7B", -"u c #7B7B73", -"v c #7B7B7B", -"w c #AC6A5A", -"x c #7B8373", -"y c #7B837B", -"z c #83837B", -"A c #838383", -"B c #838B83", -"C c #8B8B83", -"D c #8B8B8B", -"E c #9C8B73", -"F c #8B948B", -"G c #94948B", -"H c #949494", -"I c #949C94", -"J c #949C9C", -"K c #9C9C94", -"L c #9C9C9C", -"M c #B49C83", -"N c #9CA49C", -"O c #9CA4A4", -"P c #A4A49C", -"Q c #A4A4A4", -"R c #C5A45A", -"S c #A4ACA4", -"T c #ACACA4", -"U c #ACACAC", -"V c #B4B4AC", -"W c #C5B48B", -"X c #BDBDB4", -"Y c #C5C5BD", -"Z c #D5C59C", -"` c #CDCDCD", -" . c #D5D5CD", -".. c #E6D5A4", -"+. c #F6CDCD", -"@. c #DEDED5", -"#. c #DEE6DE", -"$. c #E6E6E6", -"%. c #EEEEEE", -"&. c #F6EEEE", -"*. c #F6F6F6", -"=. c #F6FFFF", -"-. c #FFFFFF", -";. c #66FF00", -">. c #66FF33", -",. c #66FF66", -"'. c #66FF99", -"). c #66FFCC", -"!. c #66FFFF", -"~. c #990000", -"{. c #990033", -"]. c #990066", -"^. c #990099", -"/. c #9900CC", -"(. c #9900FF", -"_. c #993300", -":. c #993333", -"<. c #993366", -"[. c #993399", -"}. c #9933CC", -"|. c #9933FF", -"1. c #996600", -"2. c #996633", -"3. c #996666", -"4. c #996699", -"5. c #9966CC", -"6. c #9966FF", -"7. c #999900", -"8. c #999933", -"9. c #999966", -"0. c #999999", -"a. c #9999CC", -"b. c #9999FF", -"c. c #99CC00", -"d. c #99CC33", -"e. c #99CC66", -"f. c #99CC99", -"g. c #99CCCC", -"h. c #99CCFF", -"i. c #99FF00", -"j. c #99FF33", -"k. c #99FF66", -"l. c #99FF99", -"m. c #99FFCC", -"n. c #99FFFF", -"o. c #CC0000", -"p. c #CC0033", -"q. c #CC0066", -"r. c #CC0099", -"s. c #CC00CC", -"t. c #CC00FF", -"u. c #CC3300", -"v. c #CC3333", -"w. c #CC3366", -"x. c #CC3399", -"y. c #CC33CC", -"z. c #CC33FF", -"A. c #CC6600", -"B. c #CC6633", -"C. c #CC6666", -"D. c #CC6699", -"E. c #CC66CC", -"F. c #CC66FF", -"G. c #CC9900", -"H. c #CC9933", -"I. c #CC9966", -"J. c #CC9999", -"K. c #CC99CC", -"L. c #CC99FF", -"M. c #CCCC00", -"N. c #CCCC33", -"O. c #CCCC66", -"P. c #CCCC99", -"Q. c #CCCCCC", -"R. c #CCCCFF", -"S. c #CCFF00", -"T. c #CCFF33", -"U. c #CCFF66", -"V. c #CCFF99", -"W. c #CCFFCC", -"X. c #CCFFFF", -"Y. c #FF0000", -"Z. c #FF0033", -"`. c #FF0066", -" + c #FF0099", -".+ c #FF00CC", -"++ c #FF00FF", -"@+ c #FF3300", -"#+ c #FF3333", -"$+ c #FF3366", -"%+ c #FF3399", -"&+ c #FF33CC", -"*+ c #FF33FF", -"=+ c #FF6600", -"-+ c #FF6633", -";+ c #FF6666", -">+ c #FF6699", -",+ c #FF66CC", -"'+ c #FF66FF", -")+ c #FF9900", -"!+ c #FF9933", -"~+ c #FF9966", -"{+ c #FF9999", -"]+ c #FF99CC", -"^+ c #FF99FF", -"/+ c #FFCC00", -"(+ c #FFCC33", -"_+ c #FFCC66", -":+ c #FFCC99", -"<+ c #FFCCCC", -"[+ c #FFCCFF", -"}+ c #FFFF00", -"|+ c #FFFF33", -"1+ c #FFFF66", -"2+ c #FFFF99", -"3+ c #FFFFCC", -"4+ c #FFFFFF", -"5+ c #000000", -"6+ c #0D0D0D", -"7+ c #1A1A1A", -"8+ c #282828", -"9+ c #353535", -"0+ c #434343", -"a+ c #505050", -"b+ c #5D5D5D", -"c+ c #6B6B6B", -"d+ c #787878", -"e+ c #868686", -"f+ c #939393", -"g+ c #A1A1A1", -"h+ c #AEAEAE", -"i+ c #BBBBBB", -"j+ c #C9C9C9", -"k+ c #D6D6D6", -"l+ c #E4E4E4", -"m+ c #F1F1F1", -"n+ c #FFFFFF", -"o+ c #0E4C00", -"p+ c #0A0080", -"q+ c #000403", -"r+ c #BE0F17", -"s+ c #0F3404", -"t+ c #7B04BC", -"u+ c #04BD0A", -"v+ c #05050A", -"w+ c #17F700", -"x+ c #A0035A", -"y+ c #019A14", -"z+ c #64176E", -"A+ c #186604", -"B+ c #57019D", -"C+ c #035917", -"D+ c #01030B", -"E+ c #0CF000", -"F+ c #5C0072", -"G+ c #00710C", -"H+ c #B2006C", -"2 1 | [ [ _ _ / / / / / / / / / / / / / / / / _ _ [ [ | 1 2 ", -"1 [ [ _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / / _ [ 2 ", -"| [ / / ! ) , - , - , - , - , - , - , - , - , / / _.u._./ | ", -"[ _ / ! , - - = = = = = = = = = = = = = = = = = u.Y.Y.Y.u.2 ", -"[ / ! , - = % % # # # # # # # # # # # # # # % : Y.Y.Y.Y.Y.b ", -"_ / ! - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ u.Y.Y.Y.Y.Y.u.", -"_ / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ u.Y.Y.Y.Y.Y.u.", -"[ / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ u.Y.Y.Y.Y.Y.u.", -"[ / ! , - = % % # # # # # # # # # # # # # # % : Y.Y.Y.Y.Y.b ", -"[ _ / ! , - - = = = = = = = = = = = = = = = = / u.Y.Y.Y.u.2 ", -"| _ / / ! ) , - - - - - - - - - - - - - - , - = / _.u._./ | ", -"2 [ [ _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / : / / [ 1 ", -"2 2 | [ [ _ _ / / / / / / / / / / / / / / / / _ _ [ [ | 2 2 "}; +"30 13 2 1", +" c #000000", +". c #FF0000", +" ", +" ", +" ", +" ", +" ..... ", +" ..... ", +" ..... ", +" ..... ", +" ..... ", +" ", +" ", +" ", +" "}; diff --git a/hdspmixer/pixmaps/peak.xpm b/hdspmixer/pixmaps/peak.xpm index 19d46be..be41b4e 100644 --- a/hdspmixer/pixmaps/peak.xpm +++ b/hdspmixer/pixmaps/peak.xpm @@ -1,265 +1,11 @@ /* XPM */ -char const * peak_xpm[] = { -"8 5 257 2", -" c None", -". c #61FF48", -"+ c #6FFF57", -"@ c #7EFF57", -"# c #86FF5E", -"$ c #93FF5E", -"% c #A4FF6C", -"& c #D4FF87", -"* c #16FF5D", -"= c #16FBFF", -"- c #42AFFF", -"; c #45ADFF", -"> c #45ADFF", -", c #41FF41", -"' c #41FF63", -") c #41FFB1", -"! c #42FDFF", -"~ c #45F7FF", -"{ c #45F7FF", -"] c #45FF45", -"^ c #45FF65", -"/ c #45FFAF", -"( c #45FFF9", -"_ c #45FFFF", -": c #45FFFF", -"< c #45FF45", -"[ c #45FF65", -"} c #45FFAF", -"| c #45FFF9", -"1 c #45FFFF", -"2 c #45FFFF", -"3 c #45FF45", -"4 c #45FF65", -"5 c #45FFAF", -"6 c #45FFF9", -"7 c #45FFFF", -"8 c #45FFFF", -"9 c #EBE000", -"0 c #FC00FC", -"a c #2C28FF", -"b c #5654FF", -"c c #5958FF", -"d c #5958FF", -"e c #5DFF16", -"f c #28FF28", -"g c #29FAFF", -"h c #55A8FF", -"i c #58A7FF", -"j c #58A7FF", -"k c #63FF41", -"l c #54FF54", -"m c #54FFAA", -"n c #55FDFF", -"o c #58F7FF", -"p c #58F7FF", -"q c #65FF45", -"r c #58FF58", -"s c #58FFA8", -"t c #58FFF8", -"u c #58FFFF", -"v c #58FFFF", -"w c #65FF45", -"x c #58FF58", -"y c #58FFA8", -"z c #58FFF8", -"A c #58FFFF", -"B c #58FFFF", -"C c #65FF45", -"D c #58FF58", -"E c #58FFA8", -"F c #58FFF8", -"G c #58FFFF", -"H c #58FFFF", -"I c #FF5916", -"J c #FF282C", -"K c #FF28FF", -"L c #AA54FF", -"M c #A958FF", -"N c #A958FF", -"O c #FFFB16", -"P c #FFFA29", -"Q c #FF54FF", -"R c #827FFF", -"S c #8582FF", -"T c #8582FF", -"U c #B1FF41", -"V c #AAFF54", -"W c #7FFF7F", -"X c #80FCFF", -"Y c #83F3FF", -"Z c #83F3FF", -"` c #AFFF45", -" . c #A8FF58", -".. c #83FF83", -"+. c #83FFF5", -"@. c #83FFFF", -"#. c #83FFFF", -"$. c #AFFF45", -"%. c #A8FF58", -"&. c #83FF83", -"*. c #83FFF5", -"=. c #83FFFF", -"-. c #83FFFF", -";. c #AFFF45", -">. c #A8FF58", -",. c #83FF83", -"'. c #83FFF5", -"). c #83FFFF", -"!. c #83FFFF", -"~. c #FF6242", -"{. c #FF5456", -"]. c #FF54AA", -"^. c #FF54FF", -"/. c #F858FF", -"(. c #F858FF", -"_. c #FFAF42", -":. c #FFA855", -"<. c #FF7F82", -"[. c #FF7FFF", -"}. c #F682FF", -"|. c #F682FF", -"1. c #FFFD42", -"2. c #FFFD55", -"3. c #FFFC80", -"4. c #D6D3D6", -"5. c #D6D5D7", -"6. c #D6D5D7", -"7. c #F9FF45", -"8. c #F8FF58", -"9. c #F5FF83", -"0. c #D6D7D6", -"a. c #D6D7D7", -"b. c #D6D7D7", -"c. c #F9FF45", -"d. c #F8FF58", -"e. c #F5FF83", -"f. c #D6D7D6", -"g. c #D6D7D7", -"h. c #D6D7D7", -"i. c #F9FF45", -"j. c #F8FF58", -"k. c #F5FF83", -"l. c #D6D7D6", -"m. c #D6D7D7", -"n. c #D6D7D7", -"o. c #FF6445", -"p. c #FF5859", -"q. c #FF58A9", -"r. c #FF58F8", -"s. c #FF58FF", -"t. c #FF58FF", -"u. c #FFAD45", -"v. c #FFA758", -"w. c #FF8285", -"x. c #FF82F6", -"y. c #FF82FF", -"z. c #FF82FF", -"A. c #FFF745", -"B. c #FFF758", -"C. c #FFF383", -"D. c #D7D5D6", -"E. c #D7D5D7", -"F. c #D7D5D7", -"G. c #FFFF45", -"H. c #FFFF58", -"I. c #FFFF83", -"J. c #D7D7D6", -"K. c #D8D8D8", -"L. c #D8D8D8", -"M. c #FFFF45", -"N. c #FFFF58", -"O. c #FFFF83", -"P. c #D7D7D6", -"Q. c #D8D8D8", -"R. c #D8D8D8", -"S. c #FFFF45", -"T. c #FFFF58", -"U. c #FFFF83", -"V. c #D7D7D6", -"W. c #D8D8D8", -"X. c #D8D8D8", -"Y. c #FF6445", -"Z. c #FF5859", -"`. c #FF58A9", -" + c #FF58F8", -".+ c #FF58FF", -"++ c #FF58FF", -"@+ c #FFAD45", -"#+ c #FFA758", -"$+ c #FF8285", -"%+ c #FF82F6", -"&+ c #FF82FF", -"*+ c #FF82FF", -"=+ c #FFF745", -"-+ c #FFF758", -";+ c #FFF383", -">+ c #D7D5D6", -",+ c #D7D5D7", -"'+ c #D7D5D7", -")+ c #FFFF45", -"!+ c #FFFF58", -"~+ c #FFFF83", -"{+ c #D7D7D6", -"]+ c #D8D8D8", -"^+ c #D8D8D8", -"/+ c #FFFF45", -"(+ c #FFFF58", -"_+ c #FFFF83", -":+ c #D7D7D6", -"<+ c #D8D8D8", -"[+ c #D8D8D8", -"}+ c #FFFF45", -"|+ c #FFFF58", -"1+ c #FFFF83", -"2+ c #D7D7D6", -"3+ c #D8D8D8", -"4+ c #D8D8D8", -"5+ c #00EA00", -"6+ c #00F500", -"7+ c #00FF00", -"8+ c #16FF16", -"9+ c #2CFF2C", -"0+ c #44FF44", -"a+ c #5AFF5A", -"b+ c #70FF70", -"c+ c #B8CFB8", -"d+ c #C1D1C1", -"e+ c #CAD3CA", -"f+ c #D2D6D2", -"g+ c #D8D8D8", -"h+ c #D8D8D8", -"i+ c #D8D8D8", -"j+ c #D8D8D8", -"k+ c #D8D8D8", -"l+ c #D8D8D8", -"m+ c #D8D8D8", -"n+ c #D8D8D8", -"o+ c #2BFF2B", -"p+ c #2D59FF", -"q+ c #00ED00", -"r+ c #FF7945", -"s+ c #16FF16", -"t+ c #C85BFF", -"u+ c #45FF45", -"v+ c #00EE00", -"w+ c #45FF45", -"x+ c #FF5A95", -"y+ c #45FF45", -"z+ c #CC43FF", -"A+ c #41FF41", -"B+ c #9158FF", -"C+ c #36FF36", -"D+ c #00EC00", -"E+ c #45FF45", -"F+ c #B833FF", -"G+ c #45FF45", -"H+ c #FF58B2", -"9 A.A.A.A.A.A.9 ", -"A.G.G.G.G.G.G.A.", -"A.G.G.G.G.G.G.A.", -"A.G.G.G.G.G.G.A.", -"9 A.A.A.A.A.A.9 "}; +const char * peak_xpm[] = { +"8 5 3 1", +" c None", +". c #EBE000", +"+ c #FFFF45", +"........", +"++++++++", +"++++++++", +"++++++++", +"........"}; diff --git a/hdspmixer/pixmaps/solo.xpm b/hdspmixer/pixmaps/solo.xpm index 42f3aca..7de8c9e 100644 --- a/hdspmixer/pixmaps/solo.xpm +++ b/hdspmixer/pixmaps/solo.xpm @@ -1,57 +1,133 @@ /* XPM */ char const * solo_xpm[] = { -"13 26 28 1", -" c None", -". c #3C3E2D", -"+ c #2E3E23", -"@ c #2E3623", -"# c #7A7F51", -"$ c #690806", -"% c #7C2000", -"& c #272118", -"* c #532800", -"= c #F4BE91", -"- c #F44E10", -"; c #23241A", -"> c #151610", -", c #A85600", -"' c #FF0000", -") c #F4FDB7", -"! c #181818", -"~ c #091809", -"{ c #091009", -"] c #585949", -"^ c #000000", -"/ c #180000", -"( c #C9A1A8", -"_ c #884129", -": c #482100", -"< c #D8D8D8", -"[ c #090000", -"} c #020000", -".++@+++++++.#", -"$%%%%%%%%%%$&", -"*%=--------;>", -"*%,'')))'''&>", -"*%'')''''''&>", -"*%'')''''''&>", -"*%'''))''''&>", -"*%''''')'''&>", -"*%''''')'''&>", -"*%,')))-'''&>", -"*%--------*&>", -"*&>>>>>>>>>>>", -">>>>>>>>>>>>>", -"!~~{~~~~~~~!]", -"^^^^^^^^^^^^^", -"^/(________^^", -"^/::::::///^^", -"^/:::<< c #912F77", +", c #FF7DDD", +"' c #592B4D", +") c #D065B4", +"! c #F477D3", +"~ c #DF6DC1", +"{ c #922F78", +"] c #FF7CDD", +"^ c #35192E", +"/ c #EE73CE", +"( c #932F78", +"_ c #FE7BDC", +": c #9A4A85", +"< c #150A12", +"[ c #5B2C4E", +"} c #CA61AE", +"| c #942F79", +"1 c #FE7ADB", +"2 c #E66EC6", +"3 c #8D437A", +"4 c #261221", +"5 c #A24D8C", +"6 c #952F7A", +"7 c #D666B8", +"8 c #4C2441", +"9 c #FE79DB", +"0 c #B7579D", +"a c #FD78DA", +"b c #9E4B88", +"c c #803D6E", +"d c #962F7B", +"e c #FE78DB", +"f c #5E2C51", +"g c #23101E", +"h c #32182B", +"i c #612E53", +"j c #E66CC6", +"k c #6F4C65", +"l c #A32F84", +"m c #FA6BD5", +"n c #665959", +"o c #694D4D", +"p c #8F2F2F", +"q c #E64040", +"r c #FF7F7F", +"s c #902F2F", +"t c #FF7E7E", +"u c #D46868", +"v c #532929", +"w c #2E1616", +"x c #2A1414", +"y c #B05656", +"z c #912F2F", +"A c #FF7D7D", +"B c #592B2B", +"C c #D06565", +"D c #F47777", +"E c #DF6D6D", +"F c #922F2F", +"G c #FF7C7C", +"H c #351919", +"I c #EE7373", +"J c #932F2F", +"K c #FE7B7B", +"L c #9A4A4A", +"M c #150A0A", +"N c #5B2C2C", +"O c #CA6161", +"P c #942F2F", +"Q c #FE7A7A", +"R c #E66E6E", +"S c #8D4343", +"T c #261212", +"U c #A24D4D", +"V c #952F2F", +"W c #D66666", +"X c #4C2424", +"Y c #FE7979", +"Z c #B75757", +"` c #FD7878", +" . c #9E4B4B", +".. c #803D3D", +"+. c #962F2F", +"@. c #FE7878", +"#. c #5E2C2C", +"$. c #231010", +"%. c #321818", +"&. c #612E2E", +"*. c #E66C6C", +"=. c #6F4C4C", +"-. c #A32F2F", +";. c #FA6B6B", +" . + + + + + + + + + . ", +". + @ @ @ @ @ @ @ @ @ + . ", +"+ @ # # # # # # # # # # + ", +"$ @ % % & * = - ; % % % $ ", +"> @ , , ' ) , ! ~ , , , > ", +"{ @ ] ] ^ / ] ] ] ] ] ] { ", +"( @ _ _ : < [ } _ _ _ _ ( ", +"| @ 1 1 1 2 3 4 5 1 1 1 | ", +"6 @ 1 1 1 1 1 7 8 1 1 1 6 ", +"6 @ 9 9 0 a 9 b c 9 9 9 6 ", +"d @ e e f g h i j e e e d ", +"k l m m m m m m m m m l k ", +" k l l l l l l l l l k ", +"n o p p p p p p p p p o n ", +"o p q q q q q q q q q p o ", +"p q r r r r r r r r r r p ", +"s q t t u v w x y t t t s ", +"z q A A B C A D E A A A z ", +"F q G G H I G G G G G G F ", +"J q K K L M N O K K K K J ", +"P q Q Q Q R S T U Q Q Q P ", +"V q Q Q Q Q Q W X Q Q Q V ", +"V q Y Y Z ` Y ...Y Y Y V ", +"+.q @.@.#.$.%.&.*.@.@.@.+.", +"=.-.;.;.;.;.;.;.;.;.;.-.=.", +"n =.-.-.-.-.-.-.-.-.-.=.n "}; From 5e77f279bac0190c22123193a537d6f1f18b3255 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Tue, 22 Mar 2011 11:53:44 +0100 Subject: [PATCH 039/166] hdspmixer: Fix toggle of master mute and solo buttons The sensitive area for master mute and solo buttons was slightly off. Discovered and fixed by Reuben Martin. Thanks for the patch. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerMaster.cxx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/hdspmixer/src/HDSPMixerMaster.cxx b/hdspmixer/src/HDSPMixerMaster.cxx index 77c4a28..f4399eb 100644 --- a/hdspmixer/src/HDSPMixerMaster.cxx +++ b/hdspmixer/src/HDSPMixerMaster.cxx @@ -31,21 +31,21 @@ HDSPMixerMaster::HDSPMixerMaster(int x, int y, int w, int h):Fl_Widget(x, y, 62, void HDSPMixerMaster::draw() { if (mute && mute_active) { - fl_push_clip(x(), y(), 29, 10); + fl_push_clip(x(), y(), 30, 11); fl_draw_pixmap(b_mute_xpm, x(), y()); fl_pop_clip(); } else if (mute) { - fl_push_clip(x(), y(), 29, 10); - fl_draw_pixmap(b_mute_xpm, x(), y()-10); + fl_push_clip(x(), y(), 30, 11); + fl_draw_pixmap(b_mute_xpm, x(), y()-11); fl_pop_clip(); } if (solo && solo_active) { - fl_push_clip(x()+32, y(), 29, 10); + fl_push_clip(x()+32, y(), 30, 11); fl_draw_pixmap(b_solo_xpm, x()+32, y()); fl_pop_clip(); } else if (solo) { - fl_push_clip(x()+32, y(), 29, 10); - fl_draw_pixmap(b_solo_xpm, x()+32, y()-10); + fl_push_clip(x()+32, y(), 30, 11); + fl_draw_pixmap(b_solo_xpm, x()+32, y()-11); fl_pop_clip(); } } @@ -55,7 +55,7 @@ int HDSPMixerMaster::handle(int e) int xpos = Fl::event_x()-x(); switch (e) { case FL_PUSH: - if (xpos >= 0 && xpos <= 29) { + if (xpos >= 0 && xpos <= 30) { if (mute) { mute = 0; } else { From 015579556d4a17e85059d5ebbe0d4e5ca3b307cc Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Tue, 22 Mar 2011 11:53:45 +0100 Subject: [PATCH 040/166] hdspmixer: Improve pixmaps - Added tick marks at 4dB intervals - Small fixes and cleanup to buttons - Better ALSA branding All pixmaps provided by Reuben Martin. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/pixmaps/b_save.xpm | 71 +- hdspmixer/pixmaps/buttons.xpm | 767 +++++++++-------- hdspmixer/pixmaps/empty_linux.xpm | 580 ++++++------- hdspmixer/pixmaps/iomixer.xpm | 51 +- hdspmixer/pixmaps/iomixer_r.xpm | 51 +- hdspmixer/pixmaps/level.xpm | 1275 ++++++++++++++--------------- hdspmixer/pixmaps/output.xpm | 315 +++---- hdspmixer/pixmaps/output_r.xpm | 315 +++---- hdspmixer/pixmaps/peak.xpm | 14 +- 9 files changed, 1713 insertions(+), 1726 deletions(-) diff --git a/hdspmixer/pixmaps/b_save.xpm b/hdspmixer/pixmaps/b_save.xpm index 46e9a18..9e7c583 100644 --- a/hdspmixer/pixmaps/b_save.xpm +++ b/hdspmixer/pixmaps/b_save.xpm @@ -1,38 +1,39 @@ /* XPM */ char const * b_save_xpm[] = { -"13 13 22 1", -" c #665959", -". c #694D4D", -"+ c #8F2F2F", -"@ c #E64040", -"# c #FF7F7F", -"$ c #902F2F", -"% c #FF7E7E", -"& c #912F2F", -"* c #FF7D7D", -"= c #922F2F", -"- c #FF7C7C", -"; c #932F2F", -"> c #FE7B7B", -", c #942F2F", -"' c #FE7A7A", -") c #952F2F", -"! c #FE7979", -"~ c #962F2F", -"{ c #FE7878", -"] c #6F4C4C", -"^ c #A32F2F", -"/ c #FA6B6B", -" .+++++++++. ", +"13 13 23 1", +" c None", +". c #665959", +"+ c #694D4D", +"@ c #8F2F2F", +"# c #E64040", +"$ c #FF7F7F", +"% c #FA6B6B", +"& c #902F2F", +"* c #FF7E7E", +"= c #912F2F", +"- c #FF7D7D", +"; c #922F2F", +"> c #FF7C7C", +", c #932F2F", +"' c #FE7B7B", +") c #942F2F", +"! c #FE7A7A", +"~ c #952F2F", +"{ c #FE7979", +"] c #962F2F", +"^ c #FE7878", +"/ c #6F4C4C", +"( c #A32F2F", ".+@@@@@@@@@+.", -"+@##########+", -"$@%%%%%%%%%%$", -"&@**********&", -"=@----------=", -";@>>>>>>>>>>;", -",@'''''''''',", -")@'''''''''')", -")@!!!!!!!!!!)", -"~@{{{{{{{{{{~", -"]^/////////^]", -" ]^^^^^^^^^] "}; +"+@#########@+", +"@#$$$$$$$$$%@", +"&#*********%&", +"=#---------%=", +";#>>>>>>>>>%;", +",#'''''''''%,", +")#!!!!!!!!!%)", +"~#!!!!!!!!!%~", +"~#{{{{{{{{{%~", +"]#^^^^^^^^^%]", +"/(%%%%%%%%%(/", +"./(((((((((/."}; diff --git a/hdspmixer/pixmaps/buttons.xpm b/hdspmixer/pixmaps/buttons.xpm index e2b7dad..f222671 100644 --- a/hdspmixer/pixmaps/buttons.xpm +++ b/hdspmixer/pixmaps/buttons.xpm @@ -1,6 +1,6 @@ /* XPM */ char const * buttons_xpm[] = { -"76 253 340 2", +"76 253 333 2", " c #595966", ". c #51515B", "+ c #3D3D42", @@ -91,256 +91,249 @@ char const * buttons_xpm[] = { "W c #9F9FA6", "X c #D3D3D7", "Y c #BCBCC1", -"Z c #2E3038", -"` c #2C2E34", -" . c #27272B", -".. c #616176", -"+. c #4E4E5C", -"@. c #A8A8AE", -"#. c #D6D6D9", -"$. c #F5F5F6", -"%. c #BCBCC2", -"&. c #474752", -"*. c #7A7A85", -"=. c #95959E", -"-. c #4F4F5D", -";. c #86868F", -">. c #29292C", -",. c #4D4D5B", -"'. c #D7D7DA", -"). c #D2D2D5", -"!. c #D2D2D6", -"~. c #D4D4D8", -"{. c #C9C9CD", -"]. c #575765", -"^. c #7C7C86", -"/. c #BDBDC3", -"(. c #575764", -"_. c #BBBBC1", -":. c #7B7B85", -"<. c #2A2A2D", -"[. c #4C4C59", -"}. c #ADADB3", -"|. c #71717C", -"1. c #AFAFB5", -"2. c #808089", -"3. c #4D4D5A", -"4. c #B2B2B8", -"5. c #6C6C77", -"6. c #696974", -"7. c #B2B2B7", -"8. c #2B2B2E", -"9. c #B0B0B5", -"0. c #B0B0B6", -"a. c #71717B", -"b. c #ABABB1", -"c. c #666671", -"d. c #C4C4C8", -"e. c #75757F", -"f. c #2C2C30", -"g. c #4B4B58", -"h. c #D5D5D8", -"i. c #D0D0D4", -"j. c #D1D1D4", -"k. c #656570", -"l. c #6B6B75", -"m. c #B1B1B7", -"n. c #2D2D31", -"o. c #4B4B57", -"p. c #8C8C94", -"q. c #8E8E96", -"r. c #D3D3D5", -"s. c #A9A9AF", -"t. c #7B7B84", -"u. c #787881", -"v. c #A7A7AD", -"w. c #62626D", -"x. c #585864", -"y. c #C5C5C9", -"z. c #BBBBBF", -"A. c #555560", -"B. c #545460", -"C. c #B8B8BD", -"D. c #7A7A83", -"E. c #2E2E32", -"F. c #4A4A56", -"G. c #5F5F6A", -"H. c #B9B9BD", -"I. c #5E5E69", -"J. c #C3C3C7", -"K. c #B9B9BE", -"L. c #CDCDD0", -"M. c #76767F", -"N. c #86868E", -"O. c #E3E3E5", -"P. c #2E3037", -"Q. c #313136", -"R. c #686874", -"S. c #A5A5AC", -"T. c #6B6B77", -"U. c #878791", -"V. c #6D6D79", -"W. c #676773", -"X. c #B3B3B9", -"Y. c #70707C", -"Z. c #8B8B94", -"`. c #AAAAB1", -" + c #C1C1C6", -".+ c #7D7D87", -"++ c #A4A4AB", -"@+ c #97979F", -"#+ c #656571", -"$+ c #F7F7F8", -"%+ c #5B5B68", -"&+ c #DBDBDE", -"*+ c #94949C", -"=+ c #333339", -"-+ c #34343A", -";+ c #1C1F22", -">+ c #1A1E20", -",+ c #A7A7AE", -"'+ c #D5D5D9", -")+ c #7D7D88", -"!+ c #5A5A67", -"~+ c #8A8A94", -"{+ c #62626E", -"]+ c #696975", -"^+ c #E2E2E4", -"/+ c #F8F8F8", -"(+ c #AEAEB5", -"_+ c #BFBFC4", -":+ c #7E7E88", -"<+ c #E2E2E5", -"[+ c #9F9FA7", -"}+ c #DEDEE1", -"|+ c #C2C2C7", -"1+ c #73737E", -"2+ c #9A9AA2", -"3+ c #636370", -"4+ c #96969E", -"5+ c #E0E0E2", -"6+ c #72727D", -"7+ c #B7B7BC", -"8+ c #666672", -"9+ c #898992", -"0+ c #84848E", -"a+ c #6F6F7A", -"b+ c #60606D", -"c+ c #74747F", -"d+ c #EDEDEF", -"e+ c #757580", -"f+ c #8E8E97", -"g+ c #C1C1C5", -"h+ c #83838D", -"i+ c #CECED1", -"j+ c #CDCDD1", -"k+ c #82828C", -"l+ c #C0C0C5", -"m+ c #E8E8E9", -"n+ c #A8A8AF", -"o+ c #767681", -"p+ c #C8C8CD", -"q+ c #D8D8DB", -"r+ c #E7E7E9", -"s+ c #70707B", -"t+ c #E8E8EA", -"u+ c #93939B", -"v+ c #B4B4BA", -"w+ c #63636F", -"x+ c #9E9EA6", -"y+ c #F4F4F5", -"z+ c #767680", -"A+ c #777782", -"B+ c #5E5E6B", -"C+ c #6B6B76", -"D+ c #C7C7CB", -"E+ c #C6C6CB", -"F+ c #6D6D78", -"G+ c #333342", -"H+ c #2F2F3B", -"I+ c #28282B", -"J+ c #BABABF", -"K+ c #6F6F7B", -"L+ c #61616E", -"M+ c #28282C", -"N+ c #64646F", -"O+ c #51515E", -"P+ c #52525F", -"Q+ c #6A6A75", -"R+ c #5A5A66", -"S+ c #C8C8CC", -"T+ c #73737D", -"U+ c #72727C", -"V+ c #29292D", -"W+ c #4B4B59", -"X+ c #E3E3E6", -"Y+ c #4C4C58", -"Z+ c #E4E4E5", -"`+ c #575762", -" @ c #62626C", -".@ c #4D4D59", -"+@ c #919199", -"@@ c #BEBEC2", -"#@ c #65656F", -"$@ c #2A2A2E", -"%@ c #4F4F5C", -"&@ c #95959C", -"*@ c #B3B3B8", -"=@ c #5D5D67", -"-@ c #51515C", -";@ c #888890", -">@ c #B1B1B6", -",@ c #2B2B2F", -"'@ c #494955", -")@ c #83838B", -"!@ c #ECECED", -"~@ c #EFEFF0", -"{@ c #32323E", -"]@ c #E1E1E4", -"^@ c #7F7F89", -"/@ c #D7D7DB", -"(@ c #5C5C68", -"_@ c #7F7F88", -":@ c #D7D7D9", -"<@ c #60606B", -"[@ c #B6B6BB", -"}@ c #8A8A92", -"|@ c #686873", -"1@ c #4C4C5A", -"2@ c #555562", -"3@ c #5C5C67", -"4@ c #4E4E5A", -"5@ c #98989F", -"6@ c #DFDFE1", -"7@ c #96969D", -"8@ c #50505C", -"9@ c #AFAFB4", -"0@ c #72727B", -"a@ c #C0C0C4", -"b@ c #51515D", -"c@ c #B5B5BA", -"d@ c #50505D", -"e@ c #595964", -"f@ c #8B8B93", -"g@ c #919198", -"h@ c #C2C2C6", -"i@ c #6E6E77", -"j@ c #6E6E78", -"k@ c #82828A", -"l@ c #DDDDDF", -"m@ c #4F4F5A", -"n@ c #60606A", -"o@ c #63636D", -"p@ c #6F6F78", -"q@ c #C6C6CA", -"r@ c #7A7A84", -"s@ c #B6B6BC", -"t@ c #81818B", -"u@ c #F6F6F7", -"v@ c #83838C", -"w@ c #B7B7BD", -"x@ c #B8B8BE", -"y@ c #A1A1A9", +"Z c #484852", +"` c #27272B", +" . c #616176", +".. c #4E4E5C", +"+. c #A8A8AE", +"@. c #D6D6D9", +"#. c #F5F5F6", +"$. c #BCBCC2", +"%. c #474752", +"&. c #7A7A85", +"*. c #95959E", +"=. c #4F4F5D", +"-. c #86868F", +";. c #28282B", +">. c #4D4D5B", +",. c #D7D7DA", +"'. c #D2D2D5", +"). c #D2D2D6", +"!. c #D4D4D8", +"~. c #C9C9CD", +"{. c #575765", +"]. c #7C7C86", +"^. c #BDBDC3", +"/. c #575764", +"(. c #BBBBC1", +"_. c #7B7B85", +":. c #29292D", +"<. c #4C4C59", +"[. c #ADADB3", +"}. c #71717C", +"|. c #AFAFB5", +"1. c #808089", +"2. c #4D4D5A", +"3. c #B2B2B8", +"4. c #6C6C77", +"5. c #696974", +"6. c #B2B2B7", +"7. c #2A2A2D", +"8. c #B0B0B5", +"9. c #B0B0B6", +"0. c #71717B", +"a. c #ABABB1", +"b. c #666671", +"c. c #C4C4C8", +"d. c #75757F", +"e. c #2A2A2E", +"f. c #4B4B58", +"g. c #D5D5D8", +"h. c #D0D0D4", +"i. c #D1D1D4", +"j. c #656570", +"k. c #6B6B75", +"l. c #B1B1B7", +"m. c #2B2B2E", +"n. c #4B4B57", +"o. c #8C8C94", +"p. c #8E8E96", +"q. c #D3D3D5", +"r. c #A9A9AF", +"s. c #7B7B84", +"t. c #787881", +"u. c #A7A7AD", +"v. c #62626D", +"w. c #585864", +"x. c #C5C5C9", +"y. c #BBBBBF", +"z. c #555560", +"A. c #545460", +"B. c #B8B8BD", +"C. c #7A7A83", +"D. c #2B2B2F", +"E. c #4A4A56", +"F. c #5F5F6A", +"G. c #B9B9BD", +"H. c #5E5E69", +"I. c #C3C3C7", +"J. c #B9B9BE", +"K. c #CDCDD0", +"L. c #76767F", +"M. c #86868E", +"N. c #E3E3E5", +"O. c #4A4A54", +"P. c #313136", +"Q. c #686874", +"R. c #A5A5AC", +"S. c #6B6B77", +"T. c #878791", +"U. c #6D6D79", +"V. c #676773", +"W. c #B3B3B9", +"X. c #70707C", +"Y. c #8B8B94", +"Z. c #AAAAB1", +"`. c #C1C1C6", +" + c #7D7D87", +".+ c #A4A4AB", +"++ c #97979F", +"@+ c #656571", +"#+ c #F7F7F8", +"$+ c #5B5B68", +"%+ c #DBDBDE", +"&+ c #94949C", +"*+ c #333339", +"=+ c #34343A", +"-+ c #1C1F22", +";+ c #1A1E20", +">+ c #A7A7AE", +",+ c #D5D5D9", +"'+ c #7D7D88", +")+ c #5A5A67", +"!+ c #8A8A94", +"~+ c #62626E", +"{+ c #696975", +"]+ c #E2E2E4", +"^+ c #F8F8F8", +"/+ c #AEAEB5", +"(+ c #BFBFC4", +"_+ c #7E7E88", +":+ c #E2E2E5", +"<+ c #9F9FA7", +"[+ c #DEDEE1", +"}+ c #C2C2C7", +"|+ c #73737E", +"1+ c #9A9AA2", +"2+ c #636370", +"3+ c #96969E", +"4+ c #E0E0E2", +"5+ c #72727D", +"6+ c #B7B7BC", +"7+ c #666672", +"8+ c #898992", +"9+ c #84848E", +"0+ c #6F6F7A", +"a+ c #60606D", +"b+ c #74747F", +"c+ c #EDEDEF", +"d+ c #757580", +"e+ c #8E8E97", +"f+ c #C1C1C5", +"g+ c #83838D", +"h+ c #CECED1", +"i+ c #CDCDD1", +"j+ c #82828C", +"k+ c #C0C0C5", +"l+ c #E8E8E9", +"m+ c #A8A8AF", +"n+ c #767681", +"o+ c #C8C8CD", +"p+ c #D8D8DB", +"q+ c #E7E7E9", +"r+ c #70707B", +"s+ c #E8E8EA", +"t+ c #93939B", +"u+ c #B4B4BA", +"v+ c #63636F", +"w+ c #9E9EA6", +"x+ c #F4F4F5", +"y+ c #767680", +"z+ c #777782", +"A+ c #5E5E6B", +"B+ c #6B6B76", +"C+ c #C7C7CB", +"D+ c #C6C6CB", +"E+ c #6D6D78", +"F+ c #BABABF", +"G+ c #6F6F7B", +"H+ c #61616E", +"I+ c #28282C", +"J+ c #64646F", +"K+ c #51515E", +"L+ c #52525F", +"M+ c #6A6A75", +"N+ c #5A5A66", +"O+ c #C8C8CC", +"P+ c #29292C", +"Q+ c #73737D", +"R+ c #72727C", +"S+ c #4B4B59", +"T+ c #E3E3E6", +"U+ c #4C4C58", +"V+ c #E4E4E5", +"W+ c #575762", +"X+ c #62626C", +"Y+ c #4D4D59", +"Z+ c #919199", +"`+ c #BEBEC2", +" @ c #65656F", +".@ c #4F4F5C", +"+@ c #95959C", +"@@ c #B3B3B8", +"#@ c #5D5D67", +"$@ c #51515C", +"%@ c #888890", +"&@ c #B1B1B6", +"*@ c #494955", +"=@ c #83838B", +"-@ c #ECECED", +";@ c #EFEFF0", +">@ c #E1E1E4", +",@ c #7F7F89", +"'@ c #D7D7DB", +")@ c #5C5C68", +"!@ c #7F7F88", +"~@ c #D7D7D9", +"{@ c #60606B", +"]@ c #B6B6BB", +"^@ c #8A8A92", +"/@ c #686873", +"(@ c #4C4C5A", +"_@ c #555562", +":@ c #5C5C67", +"<@ c #4E4E5A", +"[@ c #98989F", +"}@ c #DFDFE1", +"|@ c #96969D", +"1@ c #50505C", +"2@ c #AFAFB4", +"3@ c #72727B", +"4@ c #C0C0C4", +"5@ c #51515D", +"6@ c #B5B5BA", +"7@ c #50505D", +"8@ c #595964", +"9@ c #8B8B93", +"0@ c #919198", +"a@ c #C2C2C6", +"b@ c #6E6E77", +"c@ c #6E6E78", +"d@ c #82828A", +"e@ c #DDDDDF", +"f@ c #4F4F5A", +"g@ c #60606A", +"h@ c #63636D", +"i@ c #6F6F78", +"j@ c #C6C6CA", +"k@ c #7A7A84", +"l@ c #B6B6BC", +"m@ c #81818B", +"n@ c #F6F6F7", +"o@ c #83838C", +"p@ c #B7B7BD", +"q@ c #B8B8BE", +"r@ c #A1A1A9", " ", " ", " ", @@ -359,18 +352,18 @@ char const * buttons_xpm[] = { " + @ # + ", " + @ # + ", " + @ # + ", -" + @ # + ", +" + @ Z ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` Z Z ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` Z # + ", " + @ Z ` . . . . . . . . . . . . . . . . . . . . . . . . . .` Z Z ` . . . . . . . . . . . . . . . . . . . . . . . . . .` Z # + ", -" + @ ` ..................................................... .` ` ..................................................... .` # + ", -" + @ ...+.+.S m +.+.@.S +.#.+.+.+.X 0 X $.X P +.6 X X %.+.+.&. . ...+.+.*.P #.=.+.-.;.8 8 ;.-.+.#.+.+.+.-.;.8 8 ;.-.+.+.&. . # + ", -" + @ >...,.,.'.).,.,.!.~.,.#.,.,.,.u ,.,.#.,.,.,.#.,.,.,.,.,.&.>. >...,.,.{. ,.].,.^./.].(._.:.,.#.,.,.,.^./.].(._.:.,.,.&.>. # + ", -" + @ <...[.[.#.}.|.|.1.u [.#.[.[.[.u [.[.#.[.[.[.#.[.[.[.[.[.&.<. <...[.[.{.2.3.[.[.4.5.[.[.6.7.[.#.[.[.[.4.5.[.[.6.7.[.[.&.<. # + ", -" + @ 8...[.[.#.e 9.0.a.u [.#.[.[.[.u [.[.#.[.[.[.N u u b.[.[.&.8. 8...[.[.c.d.H e.[.X 3.[.[.[.P [.#.[.[.[.X 3.[.[.[.P [.[.&.8. # + ", -" + @ f...g.g.h.g.i.u g.u g.u 3.g.[.j.g.g.h.g.g.g.h.g.g.g.g.g.&.f. f...g.g.g.g.k.a g.4.l.g.g.6.m.g.h.g.g.g.4.l.g.g.6.m.g.g.&.f. # + ", -" + @ n...o.o.h.o.p.q.o.r.o.s.t.o.u.v.o.o.h.o.o.o.h.o.o.o.o.o.&.n. n...o.o.w.o.x.y.o.t.z.A.B.C.D.o.h.o.o.o.t.z.A.B.C.D.o.o.&.n. # + ", -" + @ E...F.F.h.F.F.F.F.).F.G.C.).H.I.F.F.h.F.F.F.N ).).J.F.F.&.E. E...F.F.K.h.L.M.F.o.N.a o N.o.F.O.0 0 9.o.N.a o N.o.F.F.&.E. # + ", -" + @ P.Q.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.Q.P. P.Q.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.Q.P. # + ", -" + @ Z P.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.P.Z Z P.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.P.Z # + ", +" + @ ` .....S m ....+.S ..@.......X 0 X #.X P ..6 X X $.....%.` ` .....&.P @.*...=.-.8 8 -.=...@.......=.-.8 8 -.=.....%.` # + ", +" + @ ;. .>.>.,.'.>.>.).!.>.@.>.>.>.u >.>.@.>.>.>.@.>.>.>.>.>.%.;. ;. .>.>.~. >.{.>.].^.{./.(._.>.@.>.>.>.].^.{./.(._.>.>.%.;. # + ", +" + @ :. .<.<.@.[.}.}.|.u <.@.<.<.<.u <.<.@.<.<.<.@.<.<.<.<.<.%.:. :. .<.<.~.1.2.<.<.3.4.<.<.5.6.<.@.<.<.<.3.4.<.<.5.6.<.<.%.:. # + ", +" + @ 7. .<.<.@.e 8.9.0.u <.@.<.<.<.u <.<.@.<.<.<.N u u a.<.<.%.7. 7. .<.<.b.c.H d.<.X 2.<.<.<.P <.@.<.<.<.X 2.<.<.<.P <.<.%.7. # + ", +" + @ e. .f.f.g.f.h.u f.u f.u 2.f.<.i.f.f.g.f.f.f.g.f.f.f.f.f.%.e. e. .f.f.f.f.j.a f.3.k.f.f.5.l.f.g.f.f.f.3.k.f.f.5.l.f.f.%.e. # + ", +" + @ m. .n.n.g.n.o.p.n.q.n.r.s.n.t.u.n.n.g.n.n.n.g.n.n.n.n.n.%.m. m. .n.n.v.n.w.x.n.s.y.z.A.B.C.n.g.n.n.n.s.y.z.A.B.C.n.n.%.m. # + ", +" + @ D. .E.E.g.E.E.E.E.'.E.F.B.'.G.H.E.E.g.E.E.E.N '.'.I.E.E.%.D. D. .E.E.J.g.K.L.E.n.M.a o M.n.E.N.0 0 8.n.M.a o M.n.E.E.%.D. # + ", +" + @ O.P.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.P.O. O.P.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.P.O. # + ", +" + @ O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O. O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O. # + ", +" + @ # + ", " + @ # + ", " . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", @@ -381,32 +374,32 @@ char const * buttons_xpm[] = { " . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", " + @ # + ", " + @ # + ", -" + @ 2 D R. c $ ( $ > # + ", -" + @ S.$ d #.D T. k U. # + ", -" + @ V.$ !. W.D g $ > | 1 2 3 4 5 X.$ Y.F $ * , < o # + ", -" + @ 2 ) 5 Q $ 1 $ > 1 $ l m n 4 Z.$ j `.$ +.+$ 1 # + ", -" + @ ++$ @+j.D T. $ > > $ $ $ $ ] #+D % 0 j.3 1 $ :. # + ", -" + @ V.$ '.) / $ > C D E F F G O.K = s D X $+%+ # + ", -" + @ &+$ $ 1 $ > M $ P Q R 3 _.D < , 3 $ !. # + ", -" + @ ++$ D T. $ > w W X x S Y *+$ / +$ R # + ", +" + @ 2 D Q. c $ ( $ > # + ", +" + @ R.$ d @.D S. k T. # + ", +" + @ U.$ ). V.D g $ > | 1 2 3 4 5 W.$ X.F $ * , < o # + ", +" + @ 2 ) 5 Q $ 1 $ > 1 $ l m n 4 Y.$ j Z.$ `. +$ 1 # + ", +" + @ .+$ ++i.D S. $ > > $ $ $ $ ] @+D % 0 i.3 1 $ _. # + ", +" + @ U.$ ,.) / $ > C D E F F G N.K = s D X #+$+ # + ", +" + @ %+$ $ 1 $ > M $ P Q R 3 (.D < , 3 $ ). # + ", +" + @ .+$ D S. $ > w W X x S Y &+$ / `.$ R # + ", " + @ # + ", " + @ # + ", " + @ # + ", " + @ # + ", " + @ # + ", -" + @ =+-+-+-+-+-+-+-+-+-+-+-+-+ # + ", -" + @ =+;+;+;+;+;+;+;+;+;+;+;+-+ # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. ,+ # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. $. # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. $.++H '+)+ $.i 3 A R. $. $.i D > 7 # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. < S.!+~+8 < T !+T 4. $. $. $. # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. x {+ , n < ]+ ]+^+ $. $. $. # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. $. $. < 6. 6.^+ n %+ {+/+ $. # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. $. $. < ,+!+,+4. 8 G !+,+< 3 {+ # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. $. $. $.(+3 _+6. :+'+<+S.$. [+}+7 # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. # + ", -" + @ =+-+-+-+-+-+-+-+-+-+-+-+-+ # + ", +" + @ *+=+=+=+=+=+=+=+=+=+=+=+=+ # + ", +" + @ *+-+-+-+-+-+-+-+-+-+-+-+=+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. >+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. #..+H ,+'+ #.i 3 A Q. #. #.i D > 7 # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. < R.)+!+8 < T )+T 3. #. #. #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. x ~+ , n < {+ {+]+ #. #. #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. #. #. < 5. 5.]+ n $+ ~+^+ #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. #. #. < >+)+>+3. 8 G )+>+< 3 ~+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. #. #. #./+3 (+5. _+,+:+R.#. <+[+7 # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. # + ", +" + @ *+=+=+=+=+=+=+=+=+=+=+=+=+ # + ", " + @ # + ", " + @ # + ", " + @ # + ", @@ -414,19 +407,19 @@ char const * buttons_xpm[] = { " + @ # + ", " + @ # + ", " + @ # + ", -" + @ =+-+-+-+-+-+-+-+-+-+-+-+-+ # + ", -" + @ =+;+;+;+;+;+;+;+;+;+;+;+-+ # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ I > H |+1+ $. $. $. # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. 2+ + $. $. $. # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. 3+O $. 4+: 5+|+6+(+W 7+@+ $.i 3 A R. 4+: 5+|+6+ 5 & C > .+$. 8+t 9+ # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. , S.% $. #+ 0+Y a+2 , O b+ < T !+T 4. #+ 0+Y T 4.- %+{+$.W.2 ;. # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ I > &+4.T. $. c+l <+> d+ h.e+f+g+ < ]+ ]+^+ c+l <+> d+ C 5. $+<+h+ # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. $. i+~ , ]+I j X.j+k+ < 6. 6.^+ i+~ , ]+I }+5. $.l+4. # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. $. > e+, 4.< z m+3 !+ < ,+!+,+4. > e+, 4.< n+4.- %+{+$.%+{.,+ # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. $. b }+H ( $. g+4 $.(+3 _+6. b }+H ( $. 3+& H 5+^.$. - P * # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ %+^+5. # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ o+3 n+ # + ", -" + @ =+-+-+-+-+-+-+-+-+-+-+-+-+ # + ", +" + @ *+=+=+=+=+=+=+=+=+=+=+=+=+ # + ", +" + @ *+-+-+-+-+-+-+-+-+-+-+-+=+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ I > H }+|+ #. #. #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. 1+`. #. #. #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. 2+O #. 3+: 4+}+5+/+W 6+++ #.i 3 A Q. 3+: 4+}+5+ 5 & C > +#. 7+t 8+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. , R.% #. @+ 9+Y 0+2 , O a+ < T )+T 3. @+ 9+Y T 3.- $+~+#.V.2 -. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ I > %+3.S. #. b+l :+> c+ g.d+e+f+ < {+ {+]+ b+l :+> c+ C 4. #+:+g+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. #. h+~ , {+I j W.i+j+ < 5. 5.]+ h+~ , {+I [+4. #.k+3. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. #. > d+, 3.< z l+3 )+ < >+)+>+3. > d+, 3.< m+3.- $+~+#.$+~.>+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. #. b [+H ( #. f+4 #./+3 (+5. b [+H ( #. 2+& H 4+].#. - P * # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ $+]+4. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ n+3 m+ # + ", +" + @ *+=+=+=+=+=+=+=+=+=+=+=+=+ # + ", " + @ # + ", " + @ # + ", " + @ # + ", @@ -434,19 +427,19 @@ char const * buttons_xpm[] = { " + @ # + ", " + @ # + ", " + @ # + ", -" + @ =+-+-+-+-+-+-+-+-+-+-+-+-+ # + ", -" + @ =+;+;+;+;+;+;+;+;+;+;+;+-+ # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ Z.}+O C ~+ ,+ ,+ # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ c+6 s !+G N 6+ $. $. # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ m M d n+ $. $.i D > 7 $.i 3 A R. $. $.i D > 7 # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ C 5. 5.}+ $. $. $. < T !+T 4. $. $. $. # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ C 5. 5.}+ $. $. $. < ]+ ]+^+ $. $. $. # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ `.M d n+ n %+ {+/+ $. < 6. 6.^+ n %+ {+/+ $. # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ c+6 U.!+;.N 6+ 8 G !+,+< 3 {+ < ,+!+,+4. 8 G !+,+< 3 {+ # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ r 5+[ 5+r :+'+<+S.$. [+}+7 $.(+3 _+6. :+'+<+S.$. [+}+7 # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ $. # + ", -" + @ =+-+-+-+-+-+-+-+-+-+-+-+-+ # + ", +" + @ *+=+=+=+=+=+=+=+=+=+=+=+=+ # + ", +" + @ *+-+-+-+-+-+-+-+-+-+-+-+=+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ Y.[+O C !+ >+ >+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ b+6 s )+G N 5+ #. #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ m M d m+ #. #.i D > 7 #.i 3 A Q. #. #.i D > 7 # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ C 4. 4.[+ #. #. #. < T )+T 3. #. #. #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ C 4. 4.[+ #. #. #. < {+ {+]+ #. #. #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ Z.M d m+ n $+ ~+^+ #. < 5. 5.]+ n $+ ~+^+ #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ b+6 T.)+-.N 5+ 8 G )+>+< 3 ~+ < >+)+>+3. 8 G )+>+< 3 ~+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ r 4+[ 4+r _+,+:+R.#. <+[+7 #./+3 (+5. _+,+:+R.#. <+[+7 # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. # + ", +" + @ *+=+=+=+=+=+=+=+=+=+=+=+=+ # + ", " + @ # + ", " + @ # + ", " + @ # + ", @@ -457,19 +450,19 @@ char const * buttons_xpm[] = { " + @ # + ", " + @ # + ", " + @ # + ", -" + @ =+-+-+-+-+-+-+-+-+-+-+-+-+ # + ", -" + @ =+;+;+;+;+;+;+;+;+;+;+;+-+ # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ o+p+^+N 2+ $. q+ # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ a ;. - |. $. # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ r+s+ $. $. $.i 3 A R. $.X.t+u+v+O.p $. ^.5+- w+3 Y. # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ x+y+p+F $. $. < T !+T 4. < r z+x r A+'. $. 0.0.l+c # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ 6.1 6 0. $. $. < ]+ ]+^+ /+B+!+^ B+!+= $. - <+#.!+ # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ C+t+ n %+ {+/+ < 6. 6.^+ $. $. $. $. C+S 5+- # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ 9+!+ f+L 8 G !+,+< < ,+!+,+4. $. $. $. $. 0 ! 0.0. # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ |+r+5+L c+ :+'+<+S.$. $.(+3 _+6. $. $. $. $. h D+ - 5+^. # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ # + ", -" + @ =+;+>+>+>+>+>+>+>+>+>+>+-+ # + ", -" + @ =+-+-+-+-+-+-+-+-+-+-+-+-+ # + ", +" + @ *+=+=+=+=+=+=+=+=+=+=+=+=+ # + ", +" + @ *+-+-+-+-+-+-+-+-+-+-+-+=+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ n+o+]+N 1+ #. p+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ a -. - }. #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ q+r+ #. #. #.i 3 A Q. #.W.s+t+u+N.p #. ].4+- v+3 X. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ w+x+o+F #. #. < T )+T 3. < r y+x r z+,. #. 9.9.k+c # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ 5.1 6 9. #. #. < {+ {+]+ ^+A+)+^ A+)+= #. - :+@.)+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ B+s+ n $+ ~+^+ < 5. 5.]+ #. #. #. #. B+S 4+- # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ 8+)+ e+L 8 G )+>+< < >+)+>+3. #. #. #. #. 0 ! 9.9. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ }+q+4+L b+ _+,+:+R.#. #./+3 (+5. #. #. #. #. h C+ - 4+]. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ # + ", +" + @ *+=+=+=+=+=+=+=+=+=+=+=+=+ # + ", " + @ # + ", " + @ # + ", " + @ # + ", @@ -482,11 +475,11 @@ char const * buttons_xpm[] = { " + @ # + ", " + @ # + ", " + @ $ $ $ 6 i | & * # + ", -" + @ $ [ u+E+$ 2+ , $ > # + ", -" + @ $ > W.$ 0 $ 6 7 < | 1 2 3 4 5 _ : < [ } | 1 2 3 4 5 $ $ $ $ _ : < [ } # + ", -" + @ $ <+W.( $ R $ $ o c 1 $ l m n 4 f g h i j 1 $ l m n 4 k $ [ k f g h i j # + ", -" + @ $ $ $ D 2 F+ $ x - > $ $ $ $ ] u v l p w > $ $ $ $ ] $ > u v l p w # + ", -" + @ $ t+F T. $ H C D E F F G z _ A B 8 C D E F F G $ > z _ A B 8 # + ", +" + @ $ [ t+D+$ 1+ , $ > # + ", +" + @ $ > V.$ 0 $ 6 7 < | 1 2 3 4 5 _ : < [ } | 1 2 3 4 5 $ $ $ $ _ : < [ } # + ", +" + @ $ :+V.( $ R $ $ o c 1 $ l m n 4 f g h i j 1 $ l m n 4 k $ [ k f g h i j # + ", +" + @ $ $ $ D 2 E+ $ x - > $ $ $ $ ] u v l p w > $ $ $ $ ] $ > u v l p w # + ", +" + @ $ s+F S. $ H C D E F F G z _ A B 8 C D E F F G $ > z _ A B 8 # + ", " + @ $ > $ > M $ P Q R 3 L * M x N M $ P Q R 3 O = E L * M x N # + ", " + @ $ > $ > w W X x S Y u = U V F w W X x S Y ( = v u = U V F # + ", " + @ # + ", @@ -494,19 +487,19 @@ char const * buttons_xpm[] = { " + @ # + ", " + @ # + ", " + @ # + ", -" + @ G+H+ . . . . . . . . .H+G+ G+H+ . . . . . . . . .H+G+ G+H+ . . . . . . . . .H+G+ G+H+ . . . . . . . . .H+G+ # + ", -" + @ H+ ................... .H+ H+ ................... .H+ H+ ................... .H+ H+ ................... .H+ # + ", -" + @ ...-.-.-.-.-.-.-.-.-.&. . ...-.-.-.-.-.-.-.-.-.&. . ...-.-.-.-.-.-.-.-.-.&. . ...-.-.-.-.-.-.-.-.-.&. . # + ", -" + @ I+..+.+.9+3 y +.+.+.+.&.I+ I+..+.+.+.J+O.j+K++.+.&.I+ I+..+.+.L+: C 9 c++.+.&.I+ I+..+.+.+.+.d y +.+.+.&.I+ # + ", -" + @ M+..3.3.6.N+N 3.3.3.3.&.M+ M+..3.3.3.u.3.e+|+3.3.&.M+ M+..3.3.O+P+3.Q+i.3.3.&.M+ M+..3.3.3.R+S+N 3.3.3.&.M+ # + ", -" + @ >...[.[.[.[.N [.[.[.[.&.>. >...[.[.[.[.[.3.^+[.[.&.>. >...[.[.[.[.[.T+o [.[.&.>. >...[.[.[.0.U+N [.[.[.&.>. # + ", -" + @ V+..W+W+W+W+X+W+W+W+W+&.V+ V+..W+W+W+W+W+h+% W+W+&.V+ V+..W+W+W+C+3 d+%+W+W+&.V+ V+..W+W+#+_+W+X+W+W+W+&.V+ # + ", -" + @ <...Y+Y+Y+Y+Z+Y+Y+Y+Y+&.<. <...Y+Y+Y+Y+`+K @Y+Y+&.<. <...Y+Y+Y+Y+.@+@@@Y+Y+&.<. <...Y+Y+J.#@Y+Z+Y+Y+Y+&.<. # + ", -" + @ $@..g.g.g.g.O.g.g.g.g.&.$@ $@..g.g.g.g.J.N.g.g.g.&.$@ $@..g.g.g.g.g.%@5+g.g.&.$@ $@..g.g.6 S S ) u g.g.&.$@ # + ", -" + @ 8...o.o.o.o.O.o.o.o.o.&.8. 8...o.o.o.&@*@o.o.o.o.&.8. 8...o.o.=@-@o.;@>@o.o.&.8. 8...o.o.o.o.o.O.o.o.o.&.8. # + ", -" + @ ,@..'@'@)@!@) !@)@'@'@&.,@ ,@..'@'@'@~@^+: #.'@'@&.,@ ,@..'@'@M.5+: C.G.'@'@&.,@ ,@..'@'@'@'@'@O.'@'@'@&.,@ # + ", -" + @ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ # + ", -" + @ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ # + ", +" + @ Z ` ` ` ` ` ` ` ` ` Z Z ` ` ` ` ` ` ` ` ` Z Z ` ` ` ` ` ` ` ` ` Z Z ` ` ` ` ` ` ` ` ` Z # + ", +" + @ Z ` . . . . . . . . .` Z Z ` . . . . . . . . .` Z Z ` . . . . . . . . .` Z Z ` . . . . . . . . .` Z # + ", +" + @ ` .=.=.=.=.=.=.=.=.=.%.` ` .=.=.=.=.=.=.=.=.=.%.` ` .=.=.=.=.=.=.=.=.=.%.` ` .=.=.=.=.=.=.=.=.=.%.` # + ", +" + @ ;. .....8+3 y ........%.;. ;. .......F+N.i+G+....%.;. ;. .....H+: C 9 b+....%.;. ;. .........d y ......%.;. # + ", +" + @ I+ .2.2.5.J+N 2.2.2.2.%.I+ I+ .2.2.2.t.2.d+}+2.2.%.I+ I+ .2.2.K+L+2.M+h.2.2.%.I+ I+ .2.2.2.N+O+N 2.2.2.%.I+ # + ", +" + @ P+ .<.<.<.<.N <.<.<.<.%.P+ P+ .<.<.<.<.<.2.]+<.<.%.P+ P+ .<.<.<.<.<.Q+o <.<.%.P+ P+ .<.<.<.9.R+N <.<.<.%.P+ # + ", +" + @ :. .S+S+S+S+T+S+S+S+S+%.:. :. .S+S+S+S+S+g+% S+S+%.:. :. .S+S+S+B+3 c+$+S+S+%.:. :. .S+S+@+(+S+T+S+S+S+%.:. # + ", +" + @ 7. .U+U+U+U+V+U+U+U+U+%.7. 7. .U+U+U+U+W+K X+U+U+%.7. 7. .U+U+U+U+Y+Z+`+U+U+%.7. 7. .U+U+I. @U+V+U+U+U+%.7. # + ", +" + @ e. .f.f.f.f.N.f.f.f.f.%.e. e. .f.f.f.f.I.M.f.f.f.%.e. e. .f.f.f.f.f..@4+f.f.%.e. e. .f.f.6 S S ) u f.f.%.e. # + ", +" + @ m. .n.n.n.n.N.n.n.n.n.%.m. m. .n.n.n.+@@@n.n.n.n.%.m. m. .n.n.#@$@n.%@&@n.n.%.m. m. .n.n.n.n.n.N.n.n.n.%.m. # + ", +" + @ D. .*@*@=@-@) -@=@*@*@%.D. D. .*@*@*@;@]+: @.*@*@%.D. D. .*@*@L.4+: B.F.*@*@%.D. D. .*@*@*@*@*@N.*@*@*@%.D. # + ", +" + @ O.P.%.%.%.%.%.%.%.%.%.P.O. O.P.%.%.%.%.%.%.%.%.%.P.O. O.P.%.%.%.%.%.%.%.%.%.P.O. O.P.%.%.%.%.%.%.%.%.%.P.O. # + ", +" + @ O.P.P.P.P.P.P.P.P.P.O. O.P.P.P.P.P.P.P.P.P.O. O.P.P.P.P.P.P.P.P.P.O. O.P.P.P.P.P.P.P.P.P.O. # + ", " + @ # + ", " + @ # + ", " + @ # + ", @@ -514,38 +507,38 @@ char const * buttons_xpm[] = { " + @ # + ", " + @ # + ", " + @ # + ", -" + @ G+H+ . . . . . . . . .H+G+ G+H+ . . . . . . . . .H+G+ G+H+ . . . . . . . . .H+G+ G+H+ . . . . . . . . .H+G+ # + ", -" + @ H+ ................... .H+ H+ ................... .H+ H+ ................... .H+ H+ ................... .H+ # + ", -" + @ ...-.-.-.-.-.-.-.-.-.&. . ...-.-.-.-.-.-.-.-.-.&. . ...-.-.-.-.-.-.-.-.-.&. . ...-.-.-.-.-.-.-.-.-.&. . # + ", -" + @ I+..+.+.+.~@}+}+_ +.+.&.I+ I+..+.+.+.d O.N =.+.+.&.I+ I+..+.+.V.}+}+]@$.+.+.&.I+ I+..+.+.+.^@/@/@^@+.+.&.I+ # + ", -" + @ M+..3.3.3.N 3.3.3.3.3.&.M+ M+..3.3.z+E+; 3.(@3.3.&.M+ M+..3.3.3.3.3._@|+3.3.&.M+ M+..3.3.3.:@<@| :@3.3.&.M+ # + ", -" + @ >...[.[.[.N [.[.[.[.[.&.>. >...[.[.@.u.[.[.[.[.[.&.>. >...[.[.[.[.[.[@}@[.[.&.>. >...[.[.[.o |@6.o [.[.&.>. # + ", -" + @ V+..W+W+W+d+K m.- W+W+&.V+ V+..W+W+'.}.2 & , W+W+&.V+ V+..W+W+W+W+1@t+2@W+W+&.V+ V+..W+W+W+z v v B+W+W+&.V+ # + ", -" + @ <...Y+Y+Y+3@4@5@>@Y+Y+&.<. <...Y+Y+6@7@8@5@9@Y+Y+&.<. <...Y+Y+Y+Y+0@j+Y+Y+Y+&.<. <...Y+Y+Y+J.D.D.a@Y+Y+&.<. # + ", -" + @ $@..g.g.g.g.g.b@K g.g.&.$@ $@..g.g.c@%@g.d@K g.g.&.$@ $@..g.g.g.g.s.*+g.g.g.&.$@ $@..g.g.g.H [.[.H g.g.&.$@ # + ", -" + @ 8...o.o.e@.@o.f@m.o.o.&.8. 8...o.o.g@N.o.;@X.o.o.&.8. 8...o.o.o.o.5+=@o.o.o.&.8. 8...o.o.o.h@i@j@g+o.o.&.8. # + ", -" + @ ,@..'@'@k@H l@K.G.'@'@&.,@ ,@..'@'@m@a@H l n@'@'@&.,@ ,@..'@'@'@o@'.'@'@'@'@&.,@ ,@..'@'@'@p@j.j.p@'@'@&.,@ # + ", -" + @ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ # + ", -" + @ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ # + ", +" + @ Z ` ` ` ` ` ` ` ` ` Z Z ` ` ` ` ` ` ` ` ` Z Z ` ` ` ` ` ` ` ` ` Z Z ` ` ` ` ` ` ` ` ` Z # + ", +" + @ Z ` . . . . . . . . .` Z Z ` . . . . . . . . .` Z Z ` . . . . . . . . .` Z Z ` . . . . . . . . .` Z # + ", +" + @ ` .=.=.=.=.=.=.=.=.=.%.` ` .=.=.=.=.=.=.=.=.=.%.` ` .=.=.=.=.=.=.=.=.=.%.` ` .=.=.=.=.=.=.=.=.=.%.` # + ", +" + @ ;. .......;@[+[+_ ....%.;. ;. .......d N.N *.....%.;. ;. .....U.[+[+>@#.....%.;. ;. .......,@'@'@,@....%.;. # + ", +" + @ I+ .2.2.2.N 2.2.2.2.2.%.I+ I+ .2.2.y+D+; 2.)@2.2.%.I+ I+ .2.2.2.2.2.!@}+2.2.%.I+ I+ .2.2.2.~@{@| ~@2.2.%.I+ # + ", +" + @ P+ .<.<.<.N <.<.<.<.<.%.P+ P+ .<.<.+.t.<.<.<.<.<.%.P+ P+ .<.<.<.<.<.]@^@<.<.%.P+ P+ .<.<.<.o /@5.o <.<.%.P+ # + ", +" + @ :. .S+S+S+c+K l.- S+S+%.:. :. .S+S+,.[.2 & , S+S+%.:. :. .S+S+S+S+(@s+_@S+S+%.:. :. .S+S+S+z v v A+S+S+%.:. # + ", +" + @ 7. .U+U+U+:@<@[@&@U+U+%.7. 7. .U+U+}@|@1@[@2@U+U+%.7. 7. .U+U+U+U+3@i+U+U+U+%.7. 7. .U+U+U+I.C.C.4@U+U+%.7. # + ", +" + @ e. .f.f.f.f.f.5@K f.f.%.e. e. .f.f.6@.@f.7@K f.f.%.e. e. .f.f.f.f.r.&+f.f.f.%.e. e. .f.f.f.H <.<.H f.f.%.e. # + ", +" + @ m. .n.n.8@Y+n.9@l.n.n.%.m. m. .n.n.0@M.n.%@W.n.n.%.m. m. .n.n.n.n.4+#@n.n.n.%.m. m. .n.n.n.a@b@c@f+n.n.%.m. # + ", +" + @ D. .*@*@d@H e@J.F.*@*@%.D. D. .*@*@f@4@H l g@*@*@%.D. D. .*@*@*@h@,.*@*@*@*@%.D. D. .*@*@*@i@i.i.i@*@*@%.D. # + ", +" + @ O.P.%.%.%.%.%.%.%.%.%.P.O. O.P.%.%.%.%.%.%.%.%.%.P.O. O.P.%.%.%.%.%.%.%.%.%.P.O. O.P.%.%.%.%.%.%.%.%.%.P.O. # + ", +" + @ O.P.P.P.P.P.P.P.P.P.O. O.P.P.P.P.P.P.P.P.P.O. O.P.P.P.P.P.P.P.P.P.O. O.P.P.P.P.P.P.P.P.P.O. # + ", " + @ # + ", " + @ # + ", " + @ # + ", " + @ # + ", " + @ # + ", " + @ # + ", -" + @ G+H+ . . . . . . . . .H+G+ # + ", -" + @ H+ ................... .H+ # + ", -" + @ ...-.-.-.-.-.-.-.-.-.&. . # + ", -" + @ I+..+.+.+.+.+.+.+.+.+.&.I+ o+p+^+N 2+ # + ", -" + @ M+..3.3.3.3.3.3.3.3.3.&.M+ a ;. - |. # + ", -" + @ >...[.[.[.[.[.[.[.[.[.&.>. r+s+ 4+: 5+|+6+4.Q X.2+ 3+& t q@6+ # + ", -" + @ V+..W+W+W+W+W+W+W+W+W+&.V+ x+y+p+F #+ 0+Y r@X !+t+#+ T f+ k+ + # + ", -" + @ <...Y+Y+Y+Y+Y+Y+Y+Y+Y+&.<. 6.1 6 0. c+l <+> d+ 6 W.:+i. : > > > N # + ", -" + @ $@..g.g.g.g.g.g.g.g.g.&.$@ C+t+ i+~ , ]+I 0.* s@{ > a+ # + ", -" + @ 8...o.o.o.o.o.o.o.o.o.&.8. 9+!+ f+L > e+, 4.< A+'+S 3+ n+v+; !+A+ # + ", -" + @ ,@..'@'@'@'@'@'@'@'@'@&.,@ |+r+5+L c+ b }+H ( $. 6 i+ 3+R C N i # + ", -" + @ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ # + ", -" + @ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ # + ", +" + @ Z ` ` ` ` ` ` ` ` ` Z # + ", +" + @ Z ` . . . . . . . . .` Z # + ", +" + @ ` .=.=.=.=.=.=.=.=.=.%.` # + ", +" + @ ;. ...................%.;. n+o+]+N 1+ # + ", +" + @ I+ .2.2.2.2.2.2.2.2.2.%.I+ a -. - }. # + ", +" + @ P+ .<.<.<.<.<.<.<.<.<.%.P+ q+r+ 3+: 4+}+5+3.Q W.1+ 2+& t j@5+ # + ", +" + @ :. .S+S+S+S+S+S+S+S+S+%.:. w+x+o+F @+ 9+Y k@X )+s+@+ T e+ j+`. # + ", +" + @ 7. .U+U+U+U+U+U+U+U+U+%.7. 5.1 6 9. b+l :+> c+ 6 V._+h. : > > > N # + ", +" + @ e. .f.f.f.f.f.f.f.f.f.%.e. B+s+ h+~ , {+I 9.* l@{ > 0+ # + ", +" + @ m. .n.n.n.n.n.n.n.n.n.%.m. 8+)+ e+L > d+, 3.< z+,+S 2+ m+u+; )+z+ # + ", +" + @ D. .*@*@*@*@*@*@*@*@*@%.D. }+q+4+L b+ b [+H ( #. 6 h+ 2+R C N i # + ", +" + @ O.P.%.%.%.%.%.%.%.%.%.P.O. # + ", +" + @ O.P.P.P.P.P.P.P.P.P.O. # + ", " + @ # + ", " . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", @@ -556,31 +549,31 @@ char const * buttons_xpm[] = { " . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", " + @ # + ", " + @ # + ", -" + @ k+q+$.y q@ $ > # + ", -" + @ t@D u@v+( > , $ > # + ", -" + @ h.$ v@ !+ { ] ^ / ( $ 6 7 < ]+A y ,+$ > # + ", -" + @ = $.(@ b c d 8 $ e $ $ o c w@$ x@8 $ > # + ", -" + @ = $.(@ s t ) $ $ c $ x - m+= 5.$ > # + ", -" + @ h.$ t@ !+ : x j m $ & $ H m+= 5.$ > # + ", -" + @ t@D $.X.y@C H I J K $ & $ > w@$ x@8 $ > # + ", -" + @ v@q+u@= D+ b N S T $ & $ > ]+_+n }.$ > # + ", +" + @ j+p+#.y j@ $ > # + ", +" + @ m@D n@u+( > , $ > # + ", +" + @ g.$ o@ )+ { ] ^ / ( $ 6 7 < {+A y >+$ > # + ", +" + @ = #.)@ b c d 8 $ e $ $ o c p@$ q@8 $ > # + ", +" + @ = #.)@ s t ) $ $ c $ x - l+= 4.$ > # + ", +" + @ g.$ m@ )+ : x j m $ & $ H l+= 4.$ > # + ", +" + @ m@D #.W.r@C H I J K $ & $ > p@$ q@8 $ > # + ", +" + @ o@p+n@= C+ b N S T $ & $ > {+(+n [.$ > # + ", " + @ # + ", " + @ # + ", " + @ # + ", " + @ # + ", -" + @ G+H+ . . . . . . . . .H+G+ G+H+ . . . . . . . . .H+G+ G+H+ . . . . . . . . .H+G+ # + ", -" + @ H+ ................... .H+ H+ ................... .H+ H+ ................... .H+ # + ", -" + @ ...-.-.-.-.-.-.-.-.-.&. . ...-.-.-.-.-.-.-.-.-.&. . ...-.-.-.-.-.-.-.-.-.&. . # + ", -" + @ I+..+.+.9+3 y +.+.+.+.&.I+ I+..+.+.+.J+O.j+K++.+.&.I+ I+..+.+.L+: C 9 c++.+.&.I+ # + ", -" + @ M+..3.3.6.N+N 3.3.3.3.&.M+ M+..3.3.3.u.3.e+|+3.3.&.M+ M+..3.3.O+P+3.Q+i.3.3.&.M+ # + ", -" + @ >...[.[.[.[.N [.[.[.[.&.>. >...[.[.[.[.[.3.^+[.[.&.>. >...[.[.[.[.[.T+o [.[.&.>. # + ", -" + @ V+..W+W+W+W+X+W+W+W+W+&.V+ V+..W+W+W+W+W+h+% W+W+&.V+ V+..W+W+W+C+3 d+%+W+W+&.V+ # + ", -" + @ <...Y+Y+Y+Y+Z+Y+Y+Y+Y+&.<. <...Y+Y+Y+Y+`+K @Y+Y+&.<. <...Y+Y+Y+Y+.@+@@@Y+Y+&.<. # + ", -" + @ $@..g.g.g.g.O.g.g.g.g.&.$@ $@..g.g.g.g.J.N.g.g.g.&.$@ $@..g.g.g.g.g.%@5+g.g.&.$@ # + ", -" + @ 8...o.o.o.o.O.o.o.o.o.&.8. 8...o.o.o.&@*@o.o.o.o.&.8. 8...o.o.=@-@o.;@>@o.o.&.8. # + ", -" + @ ,@..'@'@)@!@) !@)@'@'@&.,@ ,@..'@'@'@~@^+: #.'@'@&.,@ ,@..'@'@M.5+: C.G.'@'@&.,@ # + ", -" + @ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ {@Q.&.&.&.&.&.&.&.&.&.Q.{@ # + ", -" + @ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ G+{@Q.Q.Q.Q.Q.Q.Q.Q.Q.{@G+ # + ", +" + @ Z ` ` ` ` ` ` ` ` ` Z Z ` ` ` ` ` ` ` ` ` Z Z ` ` ` ` ` ` ` ` ` Z # + ", +" + @ Z ` . . . . . . . . .` Z Z ` . . . . . . . . .` Z Z ` . . . . . . . . .` Z # + ", +" + @ ` .=.=.=.=.=.=.=.=.=.%.` ` .=.=.=.=.=.=.=.=.=.%.` ` .=.=.=.=.=.=.=.=.=.%.` # + ", +" + @ ;. .....8+3 y ........%.;. ;. .......F+N.i+G+....%.;. ;. .....H+: C 9 b+....%.;. # + ", +" + @ I+ .2.2.5.J+N 2.2.2.2.%.I+ I+ .2.2.2.t.2.d+}+2.2.%.I+ I+ .2.2.K+L+2.M+h.2.2.%.I+ # + ", +" + @ P+ .<.<.<.<.N <.<.<.<.%.P+ P+ .<.<.<.<.<.2.]+<.<.%.P+ P+ .<.<.<.<.<.Q+o <.<.%.P+ # + ", +" + @ :. .S+S+S+S+T+S+S+S+S+%.:. :. .S+S+S+S+S+g+% S+S+%.:. :. .S+S+S+B+3 c+$+S+S+%.:. # + ", +" + @ 7. .U+U+U+U+V+U+U+U+U+%.7. 7. .U+U+U+U+W+K X+U+U+%.7. 7. .U+U+U+U+Y+Z+`+U+U+%.7. # + ", +" + @ e. .f.f.f.f.N.f.f.f.f.%.e. e. .f.f.f.f.I.M.f.f.f.%.e. e. .f.f.f.f.f..@4+f.f.%.e. # + ", +" + @ m. .n.n.n.n.N.n.n.n.n.%.m. m. .n.n.n.+@@@n.n.n.n.%.m. m. .n.n.#@$@n.%@&@n.n.%.m. # + ", +" + @ D. .*@*@=@-@) -@=@*@*@%.D. D. .*@*@*@;@]+: @.*@*@%.D. D. .*@*@L.4+: B.F.*@*@%.D. # + ", +" + @ O.P.%.%.%.%.%.%.%.%.%.P.O. O.P.%.%.%.%.%.%.%.%.%.P.O. O.P.%.%.%.%.%.%.%.%.%.P.O. # + ", +" + @ O.P.P.P.P.P.P.P.P.P.O. O.P.P.P.P.P.P.P.P.P.O. O.P.P.P.P.P.P.P.P.P.O. # + ", " + @ # + ", " . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", diff --git a/hdspmixer/pixmaps/empty_linux.xpm b/hdspmixer/pixmaps/empty_linux.xpm index d29cf5b..f8556f8 100644 --- a/hdspmixer/pixmaps/empty_linux.xpm +++ b/hdspmixer/pixmaps/empty_linux.xpm @@ -1,278 +1,306 @@ /* XPM */ char const * empty_linux_xpm[] = { -"76 253 22 1", -" c None", -". c #595966", -"+ c #6C6D7A", -"@ c #7F7F8C", -"# c #737481", -"$ c #6D6F7B", -"% c #757683", -"& c #60616D", -"* c #5B5B67", -"= c #777985", -"- c #5B5C68", -"; c #797A87", -"> c #5A5B67", -", c #767784", -"' c #686A76", -") c #6F717E", -"! c #7B7C89", -"~ c #656773", -"{ c #5F616C", -"] c #616370", -"^ c #5C5E6B", -"/ c #5C5D69", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"........................+@#....$%$......&%@@#*...*=@&.......................", -"........................+@%....%@%.....-;@@@%....>,@'.......................", -"........................)@,>...%@%.....#@!$)~....-!@+.......................", -"........................%@@-...%@%....{;!].......{@@#.......................", -"........................%@@^...%@%....]!;-.......]@@%.......................", -"........................,@@]...%@%....]!,>.......+@@,.......................", -".......................>,@@+...%@%....{;!~.......+@@,-......................", -".......................^;@@)...%@%.....,@+.......#@@;{......................", -".......................]!@@%...%@%.....)@%>......%@@!]......................", -".......................~@@@;...%@%.....^@@~......;@@@'......................", -".......................+@@@@...%@%......,@,......@@@@+......................", -".......................+@%@@...%@%......~@@].....@;!@$......................", -".......................#@#!@^..%@%.......#@#....{@,,@#......................", -".......................#@$,@~..%@%.......~!!]...{@%)@%>.....................", -".......................%@~%@+..%@%.......>,@$...'@#$@,-.....................", -"......................>,@{#@)..%@%........)@,>..+@#]@!^.....................", -"......................>;@>)@%..%@%........]@!^..$@$^@@{.....................", -"......................^@@.+@%..%@%.........@@'..%@+.@@~.....................", -"......................{@@.'@,>.%@%.........!@+..%@+.@@+.....................", -"......................'@%.]!;^.%@%.........%@#.>,!~.,@).....................", -"......................+@%.]!!].%@%.........%@#.>,!].%@%.....................", -"......................)@!%,@@~.%@%.........,@+.{;@,%!@;.....................", -"......................%@@@@@@+.%@%.........@@'.]!@@@@@@.....................", -"......................,@;%%!@$.%@%........{@@{.~!@,%,@@.....................", -"......................@@+..%@#.%@%....^~-{,@%..+@,-.{@@{....................", -"......................@@~..)@#.%@!##+.+@;!@!~..+@,>.^!@]....................", -"...................../@@{..+@,>%@@@@%.)@@@@'...)@%..-,@+....................", -".....................*++...^+~.~++++~..-+'>....]+~...'+{....................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................", -"............................................................................"}; +"76 253 50 1", +" c #595966", +". c #5A5A67", +"+ c #5B5B68", +"@ c #5C5C69", +"# c #5F5F6C", +"$ c #656572", +"% c #6B6B78", +"& c #757582", +"* c #7B7B88", +"= c #80808D", +"- c #82828F", +"; c #848491", +"> c #61616E", +", c #6C6C79", +"' c #7C7C89", +") c #838390", +"! c #72727F", +"~ c #696976", +"{ c #5D5D6A", +"] c #686875", +"^ c #7D7D8A", +"/ c #858592", +"( c #60606D", +"_ c #6D6D7A", +": c #81818E", +"< c #777784", +"[ c #7F7F8C", +"} c #747481", +"| c #5E5E6B", +"1 c #767683", +"2 c #737380", +"3 c #646471", +"4 c #636370", +"5 c #62626F", +"6 c #7E7E8B", +"7 c #71717E", +"8 c #7A7A87", +"9 c #6E6E7B", +"0 c #676774", +"a c #797986", +"b c #666673", +"c c #6A6A77", +"d c #6F6F7C", +"e c #787885", +"f c #70707D", +"g c #878794", +"h c #868693", +"i c #888895", +"j c #8A8A97", +"k c #898996", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" .+++@@@@+++. ", +" .#$%&*=-;;;;-=*&%$#. ", +" +>,';)=*!~>>>>>>~!*=);',>+ ", +" {]^/)&$(.. ..($&)/^]{ ", +" @_:/<${. .{$. .>};[]. ", +" |. .>1/<| ", +" .]:=$. .$=:]. ", +" .,/&{ {&/,. ", +" @2/_. ._/2@ ", +" @<)3. .3)<@ ", +" @<:4 4:<@ ", +" .2)4 4)2. ", +" .,/3 3/,. ", +" ]/_. ._/] ", +" |:&. .&:| ", +" .<={ .@|(5#@ {=<. ", +" ]/$ {~1'[6^6*~+ $/] ", +" @[1. .>7^890>{{5~a9. .1[@ ", +" _;> .(7*2b+ {9# >;_ ", +" @:}. @,82>. +{ .}:@ ", +" ]/> 41}5. >/] ", +" .'<. +~8c+ .<'. ", +" >/$ {!&( $/> ", +" ,){ .@{5b~d*=}d_c04{@+ {), ", +" .'&. .@$,2e&!99%]00000]0]c,%0|+ .&'. ", +" #;$ +$7* @e> 5hj3{;7 f)( 3jg5 >-+ ", +" @;> @!+ $ijb{;7 (/d bjk$ >;@ ", +" @;> +]. ]hh_{;7 .}=| 9/g~ + >;@ ", +" @;> @ ~)=1|;7 4/%.}=/9 .]+ >;@ ", +" @;> 9=8'|;7 +6<+ea:}. +!| >;@ ", +" +-> .}^2[(;7 &[{^}68. (a| >-+ ", +" +=~ +8af)3;7 7)([78[+ .,8+ ~=+ ", +" +*! +[g/g0;7 }[5)/g/@ .b[] !*+ ", +" .&*. @):*g~;7 .|#6e4h66g| @]62+ .*&. ", +" %=. {h_(/,;-14=)/b3/$bh$ .51-d+ .=% ", +" $)( +++ {}(@!b2e&#,&$.>}||}5 @37=a3. ()$ ", +" #;$ +|3#@@+.. ... . . .++{5,<^&b+ $;# ", +" .'&. .#3],_0b$4>##||#4]~_!&e8!~#. .&'. ", +" ,){ .@{>~_d7}<['<&117,0#@. {), ", +" >/$ .#d8$@+ $/> ", +" .'<. +$e!| .<'. ", +" ]/> . .>}8$+ >/] ", +" @:}. +c@ +3}*9| .}:@ ", +" _;> c&0@+++@49a'd#. >;_ ", +" @[1. +,''e<8'6a%| .1[@ ", +" ]/$ {099%3|+ $/] ", +" .<={ {=<. ", +" |:&. .&:| ", +" ]/_. ._/] ", +" .,/3 3/,. ", +" .2)4 4)2. ", +" @<:4 4:<@ ", +" @<)3. .3)<@ ", +" @2/_. ._/2@ ", +" .,/&{ {&/,. ", +" .]:=$. .$=:]. ", +" |. .>1/<| ", +" .][;}>. .>};[]. ", +" @_:/<${. .{$,';)=*!~>>>>>>~!*=);',>+ ", +" .#$%&*=-;;;;-=*&%$#. ", +" .+++@@@@+++. ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/hdspmixer/pixmaps/iomixer.xpm b/hdspmixer/pixmaps/iomixer.xpm index 84aa4b3..8407705 100644 --- a/hdspmixer/pixmaps/iomixer.xpm +++ b/hdspmixer/pixmaps/iomixer.xpm @@ -1,6 +1,6 @@ /* XPM */ char const * iomixer_xpm[] = { -"36 253 78 1", +"36 253 81 1", " c #595966", ". c #2E3038", "+ c #333342", @@ -78,7 +78,10 @@ char const * iomixer_xpm[] = { "J c #32323E", "K c #313136", "L c #000000", -"M c #737384", +"M c #474951", +"N c #404044", +"O c #7A7A8F", +"P c #737384", " ", " .................................. ", " .................................. ", @@ -147,6 +150,7 @@ char const * iomixer_xpm[] = { " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", @@ -166,6 +170,7 @@ char const * iomixer_xpm[] = { " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", @@ -183,6 +188,7 @@ char const * iomixer_xpm[] = { " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", @@ -200,6 +206,7 @@ char const * iomixer_xpm[] = { " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", @@ -215,6 +222,7 @@ char const * iomixer_xpm[] = { " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", @@ -227,6 +235,7 @@ char const * iomixer_xpm[] = { " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", @@ -238,6 +247,7 @@ char const * iomixer_xpm[] = { " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", @@ -246,26 +256,19 @@ char const * iomixer_xpm[] = { " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", -" ........#$........LLLLLLLLLL...... ", -" ........#$........LLLLLLLLLL...... ", -" ........#$........LLLLLLLLLL...... ", -" ........#$........LLLLLLLLLL...... ", -" ........#$........LLLLLLLLLL...... ", -" ........#$........LLLLLLLLLL...... ", -" ........#$........LLLLLLLLLL...... ", -" ........#$........LLLLLLLLLL...... ", -" ........#$........LLLLLLLLLL...... ", -" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", @@ -303,18 +306,18 @@ char const * iomixer_xpm[] = { " .................................. ", " .................................. ", " .................................. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", " .................................. ", " .................................. ", " .................................. ", diff --git a/hdspmixer/pixmaps/iomixer_r.xpm b/hdspmixer/pixmaps/iomixer_r.xpm index 963c846..6fdd8b5 100644 --- a/hdspmixer/pixmaps/iomixer_r.xpm +++ b/hdspmixer/pixmaps/iomixer_r.xpm @@ -1,6 +1,6 @@ /* XPM */ char const * iomixer_r_xpm[] = { -"36 253 78 1", +"36 253 81 1", " c #595966", ". c #2E3038", "+ c #333342", @@ -78,7 +78,10 @@ char const * iomixer_r_xpm[] = { "J c #32323E", "K c #313136", "L c #000000", -"M c #737384", +"M c #474951", +"N c #404044", +"O c #7A7A8F", +"P c #737384", " ", " .................................. ", " .................................. ", @@ -147,6 +150,7 @@ char const * iomixer_r_xpm[] = { " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", @@ -166,6 +170,7 @@ char const * iomixer_r_xpm[] = { " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", @@ -183,6 +188,7 @@ char const * iomixer_r_xpm[] = { " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", @@ -200,6 +206,7 @@ char const * iomixer_r_xpm[] = { " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", @@ -215,6 +222,7 @@ char const * iomixer_r_xpm[] = { " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", @@ -227,6 +235,7 @@ char const * iomixer_r_xpm[] = { " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", @@ -238,6 +247,7 @@ char const * iomixer_r_xpm[] = { " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", @@ -246,26 +256,19 @@ char const * iomixer_r_xpm[] = { " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", -" ........#$........LLLLLLLLLL...... ", -" ........#$........LLLLLLLLLL...... ", -" ........#$........LLLLLLLLLL...... ", -" ........#$........LLLLLLLLLL...... ", -" ........#$........LLLLLLLLLL...... ", -" ........#$........LLLLLLLLLL...... ", -" ........#$........LLLLLLLLLL...... ", -" ........#$........LLLLLLLLLL...... ", -" ........#$........LLLLLLLLLL...... ", -" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", " ........#$........LLLLLLLLLL...... ", @@ -303,18 +306,18 @@ char const * iomixer_r_xpm[] = { " .................................. ", " .................................. ", " .................................. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", -" ..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", " .................................. ", " .................................. ", " .................................. ", diff --git a/hdspmixer/pixmaps/level.xpm b/hdspmixer/pixmaps/level.xpm index 446b4d8..87af86c 100644 --- a/hdspmixer/pixmaps/level.xpm +++ b/hdspmixer/pixmaps/level.xpm @@ -1,664 +1,617 @@ /* XPM */ char const * level_xpm[] = { -"8 139 522 2", -" c None", -". c #FD0D0E", -"+ c #FD0E0E", -"@ c #FD0E0D", -"# c #FD1A0E", -"$ c #FC1A0E", -"% c #FD270F", -"& c #FC270E", -"* c #FC260E", -"= c #FC260F", -"- c #FD270E", -"; c #FC320F", -"> c #FC320E", -", c #FC330E", -"' c #FD320F", -") c #FC330F", -"! c #FC3F0F", -"~ c #FC3E0F", -"{ c #FC4A0F", -"] c #FB4A0F", -"^ c #FC4B0F", -"/ c #FB4B0F", -"( c #FB4B10", -"_ c #FC5710", -": c #FC5610", -"< c #FC570F", -"[ c #FB570F", -"} c #FB5710", -"| c #FB6310", -"1 c #FB6F10", -"2 c #FA6F10", -"3 c #FB7B10", -"4 c #FA7B11", -"5 c #FB7C11", -"6 c #FA7B10", -"7 c #FA7C10", -"8 c #FB7B11", -"9 c #FB8411", -"0 c #FA8511", -"a c #FA8411", -"b c #FB8511", -"c c #FA8410", -"d c #FB8510", -"e c #FA8C10", -"f c #FA8C11", -"g c #FB8C11", -"h c #FA9411", -"i c #FA9511", -"j c #FA9C11", -"k c #F99C11", -"l c #FA9C12", -"m c #FAA411", -"n c #F9A411", -"o c #FAA412", -"p c #FAA311", -"q c #F9AC12", -"r c #FAAC12", -"s c #FAAC11", -"t c #FAAB12", -"u c #F9AC11", -"v c #F9B412", -"w c #FAB412", -"x c #F9B312", -"y c #F9B411", -"z c #FAB411", -"A c #F9BC11", -"B c #F9BB12", -"C c #F9BC12", -"D c #F9BB11", -"E c #F9C312", -"F c #F9C412", -"G c #F9CC12", -"H c #F9CC13", -"I c #F9CB12", -"J c #F9CB13", -"K c #F8CB12", -"L c #F8D313", -"M c #F9D312", -"N c #F8D312", -"O c #F9D313", -"P c #F9D413", -"Q c #F9DB13", -"R c #F9DB12", -"S c #F8DB13", -"T c #F8DB12", -"U c #F8E313", -"V c #F9E413", -"W c #F8E312", -"X c #F8EB13", -"Y c #F8EA13", -"Z c #F8EB12", -"` c #F6EE13", -" . c #F6EF13", -".. c #F7EE13", -"+. c #F7EF13", -"@. c #F6EE12", -"#. c #F3EE13", -"$. c #F3ED13", -"%. c #F4ED13", -"&. c #F3EE12", -"*. c #F4EE13", -"=. c #F4EE12", -"-. c #F0EC12", -";. c #F0ED13", -">. c #F1ED13", -",. c #F1ED12", -"'. c #F1EC13", -"). c #F0ED12", -"!. c #EDEC12", -"~. c #EEEC12", -"{. c #EDEC13", -"]. c #EDEB12", -"^. c #EAEB12", -"/. c #EBEB12", -"(. c #E7EA11", -"_. c #E7EA12", -":. c #E8EA12", -"<. c #E8EB12", -"[. c #E4E911", -"}. c #E5E912", -"|. c #E5EA11", -"1. c #E5E911", -"2. c #E2E811", -"3. c #E1E812", -"4. c #E1E811", -"5. c #DEE811", -"6. c #DEE711", -"7. c #DFE711", -"8. c #DCE611", -"9. c #DCE610", -"0. c #DBE711", -"a. c #DBE611", -"b. c #D9E511", -"c. c #D9E611", -"d. c #D9E510", -"e. c #D6E510", -"f. c #D6E511", -"g. c #D5E511", -"h. c #D5E510", -"i. c #D2E410", -"j. c #D2E311", -"k. c #D2E310", -"l. c #CFE310", -"m. c #D0E310", -"n. c #CFE20F", -"o. c #CFE30F", -"p. c #CCE210", -"q. c #CDE210", -"r. c #CCE20F", -"s. c #C9E110", -"t. c #C9E10F", -"u. c #CAE210", -"v. c #CAE110", -"w. c #C6E10F", -"x. c #C7E010", -"y. c #C6E00F", -"z. c #C7E00F", -"A. c #C3DF0F", -"B. c #C4DF0F", -"C. c #C3E00F", -"D. c #C1DE0F", -"E. c #C0DF0F", -"F. c #C0DE0F", -"G. c #C1DF0F", -"H. c #C0DF0E", -"I. c #BEDE0F", -"J. c #BDDE0F", -"K. c #BDDE0E", -"L. c #BDDD0F", -"M. c #BEDE0E", -"N. c #BBDD0E", -"O. c #BADD0F", -"P. c #BBDD0F", -"Q. c #B7DC0E", -"R. c #B8DB0E", -"S. c #B7DC0F", -"T. c #B5DB0E", -"U. c #B5DA0D", -"V. c #B4DB0E", -"W. c #B2DA0D", -"X. c #B1DA0D", -"Y. c #B1DA0E", -"Z. c #B2DA0E", -"`. c #AED90E", -" + c #AFD90D", -".+ c #AFDA0E", -"++ c #AED90D", -"@+ c #AFD90E", -"#+ c #ACD80D", -"$+ c #ABD80D", -"%+ c #ACD90D", -"&+ c #ABD90D", -"*+ c #A8D70D", -"=+ c #A8D70C", -"-+ c #A9D70D", -";+ c #A5D70C", -">+ c #A5D60C", -",+ c #A5D70D", -"'+ c #A6D70D", -")+ c #A6D60D", -"!+ c #A6D70C", -"~+ c #A6D60C", -"{+ c #A3D50C", -"]+ c #A3D50D", -"^+ c #A3D60D", -"/+ c #A3D60C", -"(+ c #9FD50D", -"_+ c #9FD50C", -":+ c #A0D50D", -"<+ c #A0D50C", -"[+ c #A0D40D", -"}+ c #A0D40C", -"|+ c #9DD40C", -"1+ c #9CD40C", -"2+ c #9DD30C", -"3+ c #9AD30C", -"4+ c #99D30C", -"5+ c #9AD30B", -"6+ c #99D30B", -"7+ c #96D20B", -"8+ c #96D20C", -"9+ c #94D10C", -"0+ c #94D10B", -"a+ c #93D10B", -"b+ c #93D10C", -"c+ c #91D00B", -"d+ c #90D00B", -"e+ c #8ECF0B", -"f+ c #8DD00A", -"g+ c #8DCF0B", -"h+ c #8ED00A", -"i+ c #8ED00B", -"j+ c #8DD00B", -"k+ c #8ACE0A", -"l+ c #8BCE0B", -"m+ c #8BCE0A", -"n+ c #8BCF0A", -"o+ c #88CD0A", -"p+ c #88CD0B", -"q+ c #87CD0A", -"r+ c #87CE0A", -"s+ c #87CE0B", -"t+ c #84CC0A", -"u+ c #85CD0A", -"v+ c #85CC0A", -"w+ c #85CD0B", -"x+ c #84CD0A", -"y+ c #82CC0A", -"z+ c #82CB0A", -"A+ c #81CB0A", -"B+ c #81CB09", -"C+ c #7ECB0A", -"D+ c #7ECA0A", -"E+ c #7FCB09", -"F+ c #7FCB0A", -"G+ c #7ECB09", -"H+ c #7FCA0A", -"I+ c #7CCA0A", -"J+ c #7CCA09", -"K+ c #7BCA0A", -"L+ c #7BCA09", -"M+ c #7ACA0A", -"N+ c #7ACA09", -"O+ c #7AC909", -"P+ c #79C909", -"Q+ c #78C909", -"R+ c #78C90A", -"S+ c #79C809", -"T+ c #77C909", -"U+ c #76C90A", -"V+ c #77C809", -"W+ c #77C80A", -"X+ c #76C909", -"Y+ c #75C809", -"Z+ c #75C709", -"`+ c #73C709", -" @ c #73C809", -".@ c #74C709", -"+@ c #74C809", -"@@ c #73C708", -"#@ c #71C709", -"$@ c #71C609", -"%@ c #71C608", -"&@ c #71C708", -"*@ c #6FC608", -"=@ c #70C609", -"-@ c #70C608", -";@ c #70C709", -">@ c #6FC609", -",@ c #70C708", -"'@ c #6EC609", -")@ c #6EC608", -"!@ c #6EC508", -"~@ c #6DC608", -"{@ c #6CC508", -"]@ c #6DC509", -"^@ c #6AC508", -"/@ c #6BC508", -"(@ c #6BC408", -"_@ c #69C508", -":@ c #69C408", -"<@ c #68C408", -"[@ c #67C408", -"}@ c #68C407", -"|@ c #65C308", -"1@ c #65C408", -"2@ c #66C308", -"3@ c #64C308", -"4@ c #64C307", -"5@ c #63C208", -"6@ c #63C207", -"7@ c #62C208", -"8@ c #62C207", -"9@ c #61C208", -"0@ c #61C107", -"a@ c #60C207", -"b@ c #61C207", -"c@ c #5FC208", -"d@ c #5FC207", -"e@ c #5FC107", -"f@ c #5EC207", -"g@ c #5DC107", -"h@ c #5DC007", -"i@ c #5DC008", -"j@ c #5CC007", -"k@ c #5BC007", -"l@ c #5CC107", -"m@ c #59BF07", -"n@ c #59C006", -"o@ c #5AC007", -"p@ c #5ABF07", -"q@ c #59C007", -"r@ c #57BF07", -"s@ c #58BF06", -"t@ c #58BF07", -"u@ c #57C007", -"v@ c #57BF06", -"w@ c #58C007", -"x@ c #57BE07", -"y@ c #56BE07", -"z@ c #56BF06", -"A@ c #56BF07", -"B@ c #54BF07", -"C@ c #55BE06", -"D@ c #55BE07", -"E@ c #54BE06", -"F@ c #53BD06", -"G@ c #53BD07", -"H@ c #52BE07", -"I@ c #53BE06", -"J@ c #52BE06", -"K@ c #51BD06", -"L@ c #51BE06", -"M@ c #4FBD06", -"N@ c #50BD06", -"O@ c #50BC06", -"P@ c #4FBC07", -"Q@ c #4FBC06", -"R@ c #4EBD06", -"S@ c #4DBC05", -"T@ c #4DBC06", -"U@ c #4EBC06", -"V@ c #4EBC05", -"W@ c #4CBC05", -"X@ c #4CBB06", -"Y@ c #4CBC06", -"Z@ c #4BBB05", -"`@ c #4ABB06", -" # c #4ABC05", -".# c #4ABB05", -"+# c #4BBB06", -"@# c #48BA06", -"## c #49BB06", -"$# c #48BA05", -"%# c #48BB06", -"&# c #49BB05", -"*# c #46BA06", -"=# c #47BA06", -"-# c #47BA05", -";# c #46BA05", -"># c #45BA06", -",# c #45BA05", -"'# c #45B906", -")# c #44B905", -"!# c #44BA05", -"~# c #43B906", -"{# c #43B905", -"]# c #43BA05", -"^# c #41B905", -"/# c #41B906", -"(# c #42B905", -"_# c #42B805", -":# c #40B805", -"<# c #40B804", -"[# c #40B905", -"}# c #3FB805", -"|# c #3EB704", -"1# c #3EB805", -"2# c #3EB705", -"3# c #3FB705", -"4# c #3DB705", -"5# c #3DB704", -"6# c #3CB705", -"7# c #3CB704", -"8# c #3BB604", -"9# c #3BB705", -"0# c #3BB605", -"a# c #3AB605", -"b# c #39B604", -"c# c #39B605", -"d# c #3AB604", -"e# c #38B604", -"f# c #38B504", -"g# c #37B504", -"h# c #37B604", -"i# c #38B605", -"j# c #36B504", -"k# c #35B504", -"l# c #34B504", -"m# c #34B404", -"n# c #32B404", -"o# c #33B403", -"p# c #30B404", -"q# c #31B404", -"r# c #31B304", -"s# c #31B403", -"t# c #30B304", -"u# c #2FB304", -"v# c #2FB303", -"w# c #2DB303", -"x# c #2DB304", -"y# c #2DB203", -"z# c #2DB204", -"A# c #2CB204", -"B# c #2BB203", -"C# c #2BB204", -"D# c #2AB103", -"E# c #29B203", -"F# c #29B103", -"G# c #2AB203", -"H# c #28B103", -"I# c #26B003", -"J# c #26B103", -"K# c #27B102", -"L# c #27B003", -"M# c #24AF02", -"N# c #25B003", -"O# c #24B003", -"P# c #24AF03", -"Q# c #25B002", -"R# c #25AF02", -"S# c #23AF03", -"T# c #23B003", -"U# c #23AF02", -"V# c #21AF03", -"W# c #21AF02", -"X# c #22AF03", -"Y# c #20AF03", -"Z# c #20AF02", -"`# c #1FAE02", -" $ c #1FAF02", -".$ c #1EAE03", -"+$ c #1EAE02", -"@$ c #1EAD02", -"#$ c #1EAD03", -"$$ c #1CAE02", -"%$ c #1CAE03", -"&$ c #1CAD03", -"*$ c #1DAD02", -"=$ c #1AAD02", -"-$ c #1BAD02", -";$ c #19AC02", -">$ c #18AC01", -",$ c #19AC01", -"'$ c #18AC02", -")$ c #17AC02", -"!$ c #17AC01", -"~$ c #17AB02", -"{$ c #15AC02", -"]$ c #15AB02", -"^$ c #15AC01", -"/$ c #13AB02", -"($ c #14AB01", -"_$ c #14AB02", -":$ c #13AB01", -"<$ c #12AA01", -"[$ c #12AA02", -"}$ c #10AA01", -"|$ c #10AA02", -"1$ c #0FA901", -"2$ c #0EA902", -"3$ c #0FAA01", -"4$ c #0EA901", -"5$ c #0CA901", -"6$ c #0DA901", -"7$ c #0BA801", -"8$ c #0AA801", -"9$ c #0AA700", -"0$ c #09A801", -"a$ c #0AA701", -"b$ c #09A701", -"c$ c #07A701", -"d$ c #08A801", -"e$ c #07A801", -"f$ c #08A700", -"g$ c #08A800", -"h$ c #07A700", -"i$ c #08A701", -"j$ c #06A701", -"k$ c #06A600", -"l$ c #06A700", -"m$ c #04A600", -"n$ c #05A601", -"o$ c #04A601", -"p$ c #05A600", -"q$ c #02A600", -"r$ c #03A600", -"s$ c #03A500", -"t$ c #01A500", -"u$ c #00A500", -"v$ c #01A501", -"w$ c #01A600", -". + + + . + + . ", -"+ @ + + + . + @ ", -"# $ # $ # # # # ", -"% & * * * = = - ", -"; ; > , ' ) > ) ", -"! ~ ~ ~ ~ ! ~ ! ", -"{ ] ^ ^ ^ / ] ( ", -"_ : < [ [ [ [ } ", -"| | | | | | | | ", -"1 1 2 1 1 1 1 2 ", -"3 4 3 5 6 7 5 8 ", -"9 0 a b c d 9 0 ", -"e e f f f f g e ", -"h h h i h i h h ", -"j j j k j k k l ", -"m n o m n n m p ", -"q r q q s t u u ", -"v w w v x y z y ", -"A B C B B C D B ", -"E E F F E E E E ", -"G H I I J K G G ", -"L M N O O M P O ", -"Q Q R R S R T Q ", -"U V W U U U W W ", -"X X X X Y Z X X ", -"` ...+.+. . .@.", -"#.$.%.&.*.&.&.=.", -"-.;.>.>.,.;.'.).", -"!.~.{.~.].!.~.!.", -"^./.^./.^./././.", -"(._._.:.<.<._._.", -"[.}.[.|.1.1.[.}.", -"2.3.2.4.2.2.3.2.", -"5.6.6.5.5.7.5.6.", -"8.9.0.0.8.0.a.0.", -"b.c.c.c.c.c.c.d.", -"e.f.g.e.g.h.g.e.", -"i.i.i.i.j.k.k.i.", -"l.m.l.m.n.m.o.m.", -"p.q.q.r.q.q.q.p.", -"s.t.s.t.t.u.s.v.", -"w.x.y.z.z.w.y.z.", -"A.B.A.B.B.B.C.B.", -"D.D.E.F.D.G.G.H.", -"I.J.K.I.L.J.J.M.", -"N.N.N.N.O.P.N.N.", -"Q.R.Q.Q.S.Q.S.R.", -"T.T.T.U.V.T.T.T.", -"W.X.X.W.X.Y.Z.Y.", -"`. + +.+++`.@+++", -"#+#+$+#+#+$+%+&+", -"*+*+*+*+*+=+*+-+", -";+>+,+'+>+)+!+~+", -"{+]+]+^+/+/+{+/+", -"(+_+_+:+<+<+[+}+", -"|+1+|+|+2+1+2+|+", -"3+4+5+5+4+4+3+6+", -"7+8+8+7+8+7+7+8+", -"9+0+0+0+0+a+9+b+", -"c+c+d+c+c+c+d+c+", -"e+e+f+g+h+g+i+j+", -"k+k+k+l+m+n+l+l+", -"o+p+q+q+r+q+q+s+", -"t+u+v+w+x+u+v+x+", -"y+z+y+A+B+A+A+A+", -"C+D+E+F+C+F+G+H+", -"I+J+J+I+I+J+K+L+", -"M+N+O+N+O+N+O+O+", -"P+Q+R+Q+P+Q+S+R+", -"T+U+T+T+T+V+W+X+", -"Y+Y+Z+Y+Y+Y+Y+Y+", -"`+ @.@ @+@`+@@`+", -"#@$@%@#@#@&@#@&@", -"*@=@*@-@;@-@>@,@", -"'@'@)@!@'@'@'@'@", -"~@{@{@{@~@{@{@]@", -"^@/@(@/@(@/@^@^@", -"_@:@<@:@:@:@:@_@", -"[@[@[@[@[@}@<@<@", -"|@1@|@2@2@2@|@|@", -"3@3@4@5@3@3@6@3@", -"7@7@8@8@7@8@7@8@", -"9@9@0@0@a@a@b@0@", -"c@d@e@e@e@e@e@f@", -"g@g@g@h@g@i@g@g@", -"j@j@k@k@j@j@l@k@", -"m@n@o@o@p@q@p@o@", -"r@s@t@u@v@t@w@t@", -"x@y@z@A@v@A@A@A@", -"B@C@B@D@C@E@D@C@", -"F@G@H@I@I@I@J@F@", -"K@K@H@L@K@K@K@K@", -"M@N@M@O@P@Q@N@M@", -"R@S@T@U@U@V@T@T@", -"W@X@W@Y@X@Y@Y@Y@", -"Z@`@ #`@.#`@+#`@", -"@###$#%#&#&###$#", -"*#=#-#=#;#=#;#*#", -">#;#,#'#'#;#'#,#", -")#!#~#~#{#]#)#)#", -"^#/#(#(#(#_#(#^#", -":#:#<#[#:#:#:#:#", -"}#|#1#}#2#1#3#1#", -"4#4#4#5#6#7#7#4#", -"8#9#0#0#9#0#0#a#", -"b#c#c#c#b#b#d#c#", -"e#f#g#h#e#e#f#i#", -"j#j#k#j#j#j#k#j#", -"l#m#l#l#l#l#l#m#", -"n#o#n#n#n#n#n#n#", -"p#q#r#p#s#t#r#s#", -"u#u#u#u#u#v#u#v#", -"w#x#y#y#w#z#w#w#", -"A#B#A#C#A#B#B#C#", -"D#D#E#F#E#D#G#D#", +"8 139 475 2", +" c #FD0D0E", +". c #FD0E0E", +"+ c #BD0707", +"@ c #FD1A0E", +"# c #FC1A0E", +"$ c #BD1408", +"% c #BC1407", +"& c #BC1307", +"* c #BC1308", +"= c #BD1407", +"- c #FC320F", +"; c #FC320E", +"> c #FC330E", +", c #FD320F", +"' c #FC330F", +") c #BC2008", +"! c #BC1F08", +"~ c #FC4A0F", +"{ c #FB4A0F", +"] c #FC4B0F", +"^ c #FB4B0F", +"/ c #FB4B10", +"( c #BC2C08", +"_ c #BC2B08", +": c #BB2C08", +"< c #FB6310", +"[ c #BB3808", +"} c #BA3808", +"| c #FB7B10", +"1 c #FA7B11", +"2 c #FB7C11", +"3 c #FA7B10", +"4 c #FA7C10", +"5 c #FB7B11", +"6 c #BB4409", +"7 c #BA4509", +"8 c #BA4409", +"9 c #BB4509", +"0 c #BA4408", +"a c #BB4508", +"b c #FA8C10", +"c c #FA8C11", +"d c #FB8C11", +"e c #BA5409", +"f c #BA5509", +"g c #FA9C11", +"h c #F99C11", +"i c #FA9C12", +"j c #BA6409", +"k c #B96409", +"l c #BA6309", +"m c #F9AC12", +"n c #FAAC12", +"o c #FAAC11", +"p c #FAAB12", +"q c #F9AC11", +"r c #B97409", +"s c #BA7409", +"t c #B97309", +"u c #F9BC11", +"v c #F9BB12", +"w c #F9BC12", +"x c #F9BB11", +"y c #B98309", +"z c #B98409", +"A c #F9CC12", +"B c #F9CC13", +"C c #F9CB12", +"D c #F9CB13", +"E c #F8CB12", +"F c #B8930A", +"G c #B99309", +"H c #B89309", +"I c #B9930A", +"J c #B9940A", +"K c #F9DB13", +"L c #F9DB12", +"M c #F8DB13", +"N c #F8DB12", +"O c #B8A30A", +"P c #B9A40A", +"Q c #B8A309", +"R c #F8EB13", +"S c #F8EA13", +"T c #F8EB12", +"U c #B6AE0A", +"V c #B6AF0A", +"W c #B7AE0A", +"X c #B7AF0A", +"Y c #B6AE09", +"Z c #F3EE13", +"` c #F3ED13", +" . c #F4ED13", +".. c #F3EE12", +"+. c #F4EE13", +"@. c #F4EE12", +"#. c #B0AC09", +"$. c #B0AD0A", +"%. c #B1AD0A", +"&. c #B1AD09", +"*. c #B1AC0A", +"=. c #B0AD09", +"-. c #EDEC12", +";. c #EEEC12", +">. c #EDEC13", +",. c #EDEB12", +"'. c #AAAB09", +"). c #ABAB09", +"!. c #E7EA11", +"~. c #E7EA12", +"{. c #E8EA12", +"]. c #E8EB12", +"^. c #A4A909", +"/. c #A5A909", +"(. c #A5AA09", +"_. c #E2E811", +":. c #E1E812", +"<. c #E1E811", +"[. c #9EA809", +"}. c #9EA709", +"|. c #9FA709", +"1. c #DCE611", +"2. c #DCE610", +"3. c #DBE711", +"4. c #DBE611", +"5. c #99A509", +"6. c #99A609", +"7. c #99A508", +"8. c #D6E510", +"9. c #D6E511", +"0. c #D5E511", +"a. c #D5E510", +"b. c #92A408", +"c. c #92A309", +"d. c #92A308", +"e. c #CFE310", +"f. c #D0E310", +"g. c #CFE20F", +"h. c #CFE30F", +"i. c #8CA208", +"j. c #8DA208", +"k. c #C9E110", +"l. c #C9E10F", +"m. c #CAE210", +"n. c #CAE110", +"o. c #86A108", +"p. c #87A008", +"q. c #86A008", +"r. c #C3DF0F", +"s. c #C4DF0F", +"t. c #C3E00F", +"u. c #819E08", +"v. c #809F08", +"w. c #809E08", +"x. c #819F08", +"y. c #809F07", +"z. c #BEDE0F", +"A. c #BDDE0F", +"B. c #BDDE0E", +"C. c #BDDD0F", +"D. c #BEDE0E", +"E. c #7B9D07", +"F. c #7A9D08", +"G. c #7B9D08", +"H. c #B7DC0E", +"I. c #B8DB0E", +"J. c #B7DC0F", +"K. c #759B07", +"L. c #759A07", +"M. c #749B07", +"N. c #B2DA0D", +"O. c #B1DA0D", +"P. c #B1DA0E", +"Q. c #B2DA0E", +"R. c #6E9907", +"S. c #6F9907", +"T. c #6F9A07", +"U. c #ACD80D", +"V. c #ABD80D", +"W. c #ACD90D", +"X. c #ABD90D", +"Y. c #689707", +"Z. c #689706", +"`. c #699707", +" + c #A5D70C", +".+ c #A5D60C", +"++ c #A5D70D", +"@+ c #A6D70D", +"#+ c #A6D60D", +"$+ c #A6D70C", +"%+ c #A6D60C", +"&+ c #639506", +"*+ c #639507", +"=+ c #639607", +"-+ c #639606", +";+ c #9FD50D", +">+ c #9FD50C", +",+ c #A0D50D", +"'+ c #A0D50C", +")+ c #A0D40D", +"!+ c #A0D40C", +"~+ c #5D9406", +"{+ c #5C9406", +"]+ c #5D9306", +"^+ c #9AD30C", +"/+ c #99D30C", +"(+ c #9AD30B", +"_+ c #99D30B", +":+ c #569206", +"<+ c #94D10C", +"[+ c #94D10B", +"}+ c #93D10B", +"|+ c #93D10C", +"1+ c #519006", +"2+ c #509006", +"3+ c #8ECF0B", +"4+ c #8DD00A", +"5+ c #8DCF0B", +"6+ c #8ED00A", +"7+ c #8ED00B", +"8+ c #8DD00B", +"9+ c #4A8E05", +"0+ c #4B8E06", +"a+ c #4B8E05", +"b+ c #4B8F05", +"c+ c #88CD0A", +"d+ c #88CD0B", +"e+ c #87CD0A", +"f+ c #87CE0A", +"g+ c #87CE0B", +"h+ c #448C05", +"i+ c #458D05", +"j+ c #458C05", +"k+ c #458D06", +"l+ c #448D05", +"m+ c #82CC0A", +"n+ c #82CB0A", +"o+ c #81CB0A", +"p+ c #81CB09", +"q+ c #3F8B05", +"r+ c #3F8A05", +"s+ c #408B05", +"t+ c #408A05", +"u+ c #7CCA0A", +"v+ c #7CCA09", +"w+ c #7BCA0A", +"x+ c #7BCA09", +"y+ c #3D8A05", +"z+ c #3D8905", +"A+ c #79C909", +"B+ c #78C909", +"C+ c #78C90A", +"D+ c #79C809", +"E+ c #3C8905", +"F+ c #3B8905", +"G+ c #3C8805", +"H+ c #75C809", +"I+ c #75C709", +"J+ c #3A8705", +"K+ c #3A8805", +"L+ c #3A8704", +"M+ c #71C709", +"N+ c #71C609", +"O+ c #71C608", +"P+ c #71C708", +"Q+ c #388604", +"R+ c #388605", +"S+ c #388705", +"T+ c #388704", +"U+ c #6EC609", +"V+ c #6EC608", +"W+ c #6EC508", +"X+ c #378604", +"Y+ c #368504", +"Z+ c #378505", +"`+ c #6AC508", +" @ c #6BC508", +".@ c #6BC408", +"+@ c #358504", +"@@ c #358404", +"#@ c #348404", +"$@ c #67C408", +"%@ c #68C407", +"&@ c #68C408", +"*@ c #338304", +"=@ c #338404", +"-@ c #64C308", +";@ c #64C307", +">@ c #63C208", +",@ c #63C207", +"'@ c #318204", +")@ c #61C208", +"!@ c #61C107", +"~@ c #60C207", +"{@ c #61C207", +"]@ c #308204", +"^@ c #308104", +"/@ c #2F8204", +"(@ c #5DC107", +"_@ c #5DC007", +":@ c #5DC008", +"<@ c #2E8004", +"[@ c #2E8104", +"}@ c #59BF07", +"|@ c #59C006", +"1@ c #5AC007", +"2@ c #5ABF07", +"3@ c #59C007", +"4@ c #2C7F04", +"5@ c #2C7F03", +"6@ c #2C8004", +"7@ c #57BE07", +"8@ c #56BE07", +"9@ c #56BF06", +"0@ c #56BF07", +"a@ c #57BF06", +"b@ c #2A7F04", +"c@ c #2B7E03", +"d@ c #2B7E04", +"e@ c #2A7E03", +"f@ c #53BD06", +"g@ c #53BD07", +"h@ c #52BE07", +"i@ c #53BE06", +"j@ c #52BE06", +"k@ c #297D03", +"l@ c #297E04", +"m@ c #297E03", +"n@ c #4FBD06", +"o@ c #50BD06", +"p@ c #50BC06", +"q@ c #4FBC07", +"r@ c #4FBC06", +"s@ c #277D03", +"t@ c #277C03", +"u@ c #4CBC05", +"v@ c #4CBB06", +"w@ c #4CBC06", +"x@ c #267B03", +"y@ c #257B03", +"z@ c #257C03", +"A@ c #48BA06", +"B@ c #49BB06", +"C@ c #48BA05", +"D@ c #48BB06", +"E@ c #49BB05", +"F@ c #237A03", +"G@ c #247A03", +"H@ c #45BA06", +"I@ c #46BA05", +"J@ c #45BA05", +"K@ c #45B906", +"L@ c #227903", +"M@ c #227A03", +"N@ c #41B905", +"O@ c #41B906", +"P@ c #42B905", +"Q@ c #42B805", +"R@ c #207803", +"S@ c #207802", +"T@ c #207903", +"U@ c #3FB805", +"V@ c #3EB704", +"W@ c #3EB805", +"X@ c #3EB705", +"Y@ c #3FB705", +"Z@ c #1F7703", +"`@ c #1F7702", +" # c #1E7703", +".# c #1E7702", +"+# c #3BB604", +"@# c #3BB705", +"## c #3BB605", +"$# c #3AB605", +"%# c #1D7602", +"&# c #1D7603", +"*# c #38B604", +"=# c #38B504", +"-# c #37B504", +";# c #37B604", +"># c #38B605", +",# c #1B7502", +"'# c #34B504", +")# c #34B404", +"!# c #197402", +"~# c #1A7402", +"{# c #30B404", +"]# c #31B404", +"^# c #31B304", +"/# c #31B403", +"(# c #30B304", +"_# c #187302", +":# c #2DB303", +"<# c #2DB304", +"[# c #2DB203", +"}# c #2DB204", +"|# c #167202", +"1# c #2AB103", +"2# c #29B203", +"3# c #29B103", +"4# c #2AB203", +"5# c #147102", +"6# c #26B003", +"7# c #26B103", +"8# c #27B102", +"9# c #27B003", +"0# c #126F01", +"a# c #137002", +"b# c #127002", +"c# c #126F02", +"d# c #137001", +"e# c #136F01", +"f# c #23AF03", +"g# c #23B003", +"h# c #23AF02", +"i# c #116F02", +"j# c #116F01", +"k# c #20AF03", +"l# c #20AF02", +"m# c #1FAE02", +"n# c #1FAF02", +"o# c #0F6E02", +"p# c #0F6E01", +"q# c #0F6D01", +"r# c #0F6D02", +"s# c #1CAE02", +"t# c #1CAE03", +"u# c #1CAD03", +"v# c #1DAD02", +"w# c #0D6D01", +"x# c #0E6D01", +"y# c #19AC02", +"z# c #18AC01", +"A# c #19AC01", +"B# c #18AC02", +"C# c #0C6C01", +"D# c #0C6B01", +"E# c #15AC02", +"F# c #15AB02", +"G# c #15AC01", +"H# c #0A6B01", +"I# c #12AA01", +"J# c #12AA02", +"K# c #086A01", +"L# c #0FA901", +"M# c #0EA902", +"N# c #0FAA01", +"O# c #0EA901", +"P# c #066901", +"Q# c #076901", +"R# c #0BA801", +"S# c #056801", +"T# c #056700", +"U# c #056701", +"V# c #07A701", +"W# c #08A801", +"X# c #07A801", +"Y# c #08A700", +"Z# c #08A800", +"`# c #07A700", +" $ c #08A701", +".$ c #036701", +"+$ c #036600", +"@$ c #036700", +"#$ c #04A600", +"$$ c #05A601", +"%$ c #04A601", +"&$ c #05A600", +"*$ c #016600", +"=$ c #026600", +"-$ c #026500", +";$ c #01A500", +">$ c #00A500", +",$ c #01A501", +"'$ c #01A600", +" . . . . . ", +"+ + + + + + + + ", +"@ # @ # @ @ @ @ ", +"$ % & & & * * = ", +"- - ; > , ' ; ' ", +") ! ! ! ! ) ! ) ", +"~ { ] ] ] ^ { / ", +"( _ ( : : : : : ", +"< < < < < < < < ", +"[ [ } [ [ [ [ } ", +"| 1 | 2 3 4 2 5 ", +"6 7 8 9 0 a 6 7 ", +"b b c c c c d b ", +"e e e f e f e e ", +"g g g h g h h i ", +"j k j j k k j l ", +"m n m m o p q q ", +"r s s r t r s r ", +"u v w v v w x v ", +"y y z z y y y y ", +"A B C C D E A A ", +"F G H I I G J I ", +"K K L L M L N K ", +"O P Q O O O Q Q ", +"R R R R S T R R ", +"U V W X X V V Y ", +"Z ` ...+.....@.", +"#.$.%.%.&.$.*.=.", +"-.;.>.;.,.-.;.-.", +"'.).'.).'.).).).", +"!.~.~.{.].].~.~.", +"^./.^.(././.^./.", +"_.:._.<._._.:._.", +"[.}.}.[.[.|.[.}.", +"1.2.3.3.1.3.4.3.", +"5.6.6.6.6.6.6.7.", +"8.9.0.8.0.a.0.8.", +"b.b.b.b.c.d.d.b.", +"e.f.e.f.g.f.h.f.", +"i.j.j.i.j.j.j.i.", +"k.l.k.l.l.m.k.n.", +"o.p.q.p.p.o.q.p.", +"r.s.r.s.s.s.t.s.", +"u.u.v.w.u.x.x.y.", +"z.A.B.z.C.A.A.D.", +"E.E.E.E.F.G.E.E.", +"H.I.H.H.J.H.J.I.", +"K.K.K.L.M.K.K.K.", +"N.O.O.N.O.P.Q.P.", +"R.S.S.T.R.R.S.R.", +"U.U.V.U.U.V.W.X.", +"Y.Y.Y.Y.Y.Z.Y.`.", +" +.+++@+.+#+$+%+", +"&+*+*+=+-+-+&+-+", +";+>+>+,+'+'+)+!+", +"~+{+~+~+]+{+]+~+", +"^+/+(+(+/+/+^+_+", +":+:+:+:+:+:+:+:+", +"<+[+[+[+[+}+<+|+", +"1+1+2+1+1+1+2+1+", +"3+3+4+5+6+5+7+8+", +"9+9+9+0+a+b+0+0+", +"c+d+e+e+f+e+e+g+", +"h+i+j+k+l+i+j+l+", +"m+n+m+o+p+o+o+o+", +"q+r+s+s+q+s+q+t+", +"u+v+v+u+u+v+w+x+", +"y+y+z+y+z+y+z+z+", +"A+B+C+B+A+B+D+C+", +"E+F+E+E+E+G+G+F+", +"H+H+I+H+H+H+H+H+", +"J+K+J+K+K+J+L+J+", +"M+N+O+M+M+P+M+P+", +"Q+R+Q+Q+S+Q+R+T+", +"U+U+V+W+U+U+U+U+", +"X+Y+Y+Y+X+Y+Y+Z+", +"`+ @.@ @.@ @`+`+", +"+@@@#@@@@@@@@@+@", +"$@$@$@$@$@%@&@&@", +"*@=@*@*@*@*@*@*@", +"-@-@;@>@-@-@,@-@", +"'@'@'@'@'@'@'@'@", +")@)@!@!@~@~@{@!@", +"]@]@^@^@^@^@^@/@", +"(@(@(@_@(@:@(@(@", +"<@<@<@<@<@<@[@<@", +"}@|@1@1@2@3@2@1@", +"4@5@4@6@5@4@6@4@", +"7@8@9@0@a@0@0@0@", +"b@c@b@d@c@e@d@c@", +"f@g@h@i@i@i@j@f@", +"k@k@l@m@k@k@k@k@", +"n@o@n@p@q@r@o@n@", +"s@t@t@t@t@t@t@t@", +"u@v@u@w@v@w@w@w@", +"x@y@z@y@y@y@x@y@", +"A@B@C@D@E@E@B@C@", +"F@G@G@G@F@G@F@F@", +"H@I@J@K@K@I@K@J@", +"L@M@L@L@L@M@L@L@", +"N@O@P@P@P@Q@P@N@", +"R@R@S@T@R@R@R@R@", +"U@V@W@U@X@W@Y@W@", +"Z@Z@Z@`@ #.#.#Z@", +"+#@#####@#####$#", +"%#&#&#&#%#%#%#&#", +"*#=#-#;#*#*#=#>#", +",#,#,#,#,#,#,#,#", +"'#)#'#'#'#'#'#)#", +"!#~#!#!#!#!#!#!#", +"{#]#^#{#/#(#^#/#", +"_#_#_#_#_#_#_#_#", +":#<#[#[#:#}#:#:#", +"|#|#|#|#|#|#|#|#", +"1#1#2#3#2#1#4#1#", +"5#5#5#5#5#5#5#5#", +"6#7#8#9#6#9#6#7#", +"0#a#b#0#c#a#d#e#", +"f#g#g#f#g#f#f#h#", +"i#j#i#j#i#i#i#i#", +"k#l#m#n#m#m#l#l#", +"o#o#p#q#p#o#r#p#", +"s#t#s#u#v#s#s#v#", +"w#x#w#w#x#w#w#w#", +"y#z#y#A#B#y#y#z#", +"C#C#C#C#C#C#C#D#", +"E#F#E#G#F#G#G#G#", "H#H#H#H#H#H#H#H#", -"I#J#K#L#I#L#I#J#", -"M#N#O#M#P#N#Q#R#", -"S#T#T#S#T#S#S#U#", -"V#W#V#W#V#X#V#V#", -"Y#Z#`# $`#`#Z#Z#", -".$.$+$@$+$.$#$+$", -"$$%$$$&$*$$$$$*$", -"=$-$=$=$-$=$=$=$", -";$>$;$,$'$;$;$>$", -")$)$)$!$!$!$!$~$", -"{$]${$^$]$^$^$^$", -"/$/$($/$($_$:$($", -"<$<$<$[$<$[$<$[$", -"}$|$}$}$|$}$|$}$", -"1$2$3$3$1$4$4$1$", -"5$6$6$5$6$6$6$6$", -"7$7$7$7$7$7$7$7$", -"8$9$8$8$0$a$0$b$", -"c$d$e$f$g$h$i$f$", -"j$k$l$j$l$l$l$j$", -"m$n$o$m$m$m$m$p$", -"q$q$q$r$q$s$r$r$", -"t$u$t$t$v$t$w$t$"}; +"I#I#I#J#I#J#I#J#", +"K#K#K#K#K#K#K#K#", +"L#M#N#N#L#O#O#L#", +"P#Q#Q#P#Q#Q#Q#Q#", +"R#R#R#R#R#R#R#R#", +"S#T#S#S#S#U#S#U#", +"V#W#X#Y#Z#`# $Y#", +".$+$@$.$@$@$@$.$", +"#$$$%$#$#$#$#$&$", +"*$*$*$=$*$-$=$=$", +";$>$;$;$,$;$'$;$"}; diff --git a/hdspmixer/pixmaps/output.xpm b/hdspmixer/pixmaps/output.xpm index 2e36a31..8f7cd65 100644 --- a/hdspmixer/pixmaps/output.xpm +++ b/hdspmixer/pixmaps/output.xpm @@ -1,12 +1,15 @@ /* XPM */ char const * output_xpm[] = { -"36 208 6 1", +"36 208 9 1", " c #595966", ". c #2E3038", "+ c #000000", -"@ c #27272B", -"# c #616176", -"$ c #737384", +"@ c #474951", +"# c #404044", +"$ c #7A7A8F", +"% c #27272B", +"& c #616176", +"* c #737384", " ", " .................................. ", " .................................. ", @@ -33,146 +36,146 @@ char const * output_xpm[] = { " .................................. ", " .................................. ", " ..................++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", +" .@@@@@@@#$@@@.....++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" .@@@@@@@#$@@@.....++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" .@@@@@@@#$@@@.....++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" .@@@@@@@#$@@@.....++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" .@@@@@@@#$@@@.....++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" .@@@@@@@#$@@@.....++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" .@@@@@@@#$@@@.....++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" .@@@@@@@#$@@@.....++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" .@@@@@@@#$@@@.....++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", " ..................++++++++++...... ", " .................................. ", " .................................. ", @@ -199,18 +202,18 @@ char const * output_xpm[] = { " .................................. ", " .................................. ", " .................................. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..******************************.. ", +" ..******************************.. ", +" ..******************************.. ", +" ..******************************.. ", +" ..******************************.. ", +" ..******************************.. ", +" ..******************************.. ", +" ..******************************.. ", +" ..******************************.. ", +" ..******************************.. ", +" ..******************************.. ", +" ..******************************.. ", " .................................. ", " .................................. ", " .................................. ", diff --git a/hdspmixer/pixmaps/output_r.xpm b/hdspmixer/pixmaps/output_r.xpm index 3e14513..ab2ca99 100644 --- a/hdspmixer/pixmaps/output_r.xpm +++ b/hdspmixer/pixmaps/output_r.xpm @@ -1,12 +1,15 @@ /* XPM */ char const * output_r_xpm[] = { -"36 208 6 1", +"36 208 9 1", " c #595966", ". c #2E3038", "+ c #000000", -"@ c #27272B", -"# c #616176", -"$ c #737384", +"@ c #474951", +"# c #404044", +"$ c #7A7A8F", +"% c #27272B", +"& c #616176", +"* c #737384", " ", " .................................. ", " .................................. ", @@ -33,146 +36,146 @@ char const * output_r_xpm[] = { " .................................. ", " .................................. ", " ..................++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", -" ........@#........++++++++++...... ", +" .@@@@@@@#$@@@.....++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" .@@@@@@@#$@@@.....++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" .@@@@@@@#$@@@.....++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" .@@@@@@@#$@@@.....++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" .@@@@@@@#$@@@.....++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" .@@@@@@@#$@@@.....++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" .@@@@@@@#$@@@.....++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" .@@@@@@@#$@@@.....++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" .@@@@@@@#$@@@.....++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", +" ........%&........++++++++++...... ", " ..................++++++++++...... ", " .................................. ", " .................................. ", @@ -199,18 +202,18 @@ char const * output_r_xpm[] = { " .................................. ", " .................................. ", " .................................. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", -" ..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.. ", +" ..******************************.. ", +" ..******************************.. ", +" ..******************************.. ", +" ..******************************.. ", +" ..******************************.. ", +" ..******************************.. ", +" ..******************************.. ", +" ..******************************.. ", +" ..******************************.. ", +" ..******************************.. ", +" ..******************************.. ", +" ..******************************.. ", " .................................. ", " .................................. ", " .................................. ", diff --git a/hdspmixer/pixmaps/peak.xpm b/hdspmixer/pixmaps/peak.xpm index be41b4e..33f6629 100644 --- a/hdspmixer/pixmaps/peak.xpm +++ b/hdspmixer/pixmaps/peak.xpm @@ -1,11 +1,11 @@ /* XPM */ -const char * peak_xpm[] = { +char const * peak_xpm[] = { "8 5 3 1", -" c None", -". c #EBE000", -"+ c #FFFF45", +" c #EBE000", +". c #FFFF45", +"+ c #FFFFAB", +" ", "........", "++++++++", -"++++++++", -"++++++++", -"........"}; +"........", +" "}; From 6cc4d395f484de2cf8c197367b034ad6f65b92cc Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Tue, 22 Mar 2011 11:53:46 +0100 Subject: [PATCH 041/166] hdspmixer: Use constant instead of hardcoded number of cards. Again, use MAX_CARDS instead of "3", just in case MAX_CARDS should change some day. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerOutput.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hdspmixer/src/HDSPMixerOutput.h b/hdspmixer/src/HDSPMixerOutput.h index f38d263..2bc3d5c 100644 --- a/hdspmixer/src/HDSPMixerOutput.h +++ b/hdspmixer/src/HDSPMixerOutput.h @@ -52,7 +52,7 @@ private: HDSPMixerWindow *basew; void update_child(Fl_Widget& widget); public: - HDSPMixerOutputData *data[3][3][8]; /* data[card][mode(ss/ds/qs)][preset number] */ + HDSPMixerOutputData *data[MAX_CARDS][3][8]; /* data[card][mode(ss/ds/qs)][preset number] */ HDSPMixerFader *fader; HDSPMixerGain *gain; HDSPMixerMeter *meter; From 287bc091e9dba539399ba4540c60623dee1a3bc3 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Tue, 22 Mar 2011 11:53:47 +0100 Subject: [PATCH 042/166] hdspmixer: Save and restore level meter settings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each preset can have a different level meter setting (FS samples for OVR, release rate, minimum level and so on). These settings were not saved/restore to/from the on-disk file. This patch adds the missing functionality. Unfortunately, the current on-disk format is a 1:1 binary dump from memory without any header information. In other words, this commit will break backward compatibility with older hdspmixers, that is, new preset files cannot be read by older versions of hdspmixer. However, we can still read the old mix files and save them in the new format. I hence bumped the version, so users know to re-create their files after upgrading to 1.11. Bug discovered by Raphaël Doursenaud from ematech.fr. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/configure.in | 2 +- hdspmixer/src/HDSPMixerWindow.cxx | 64 +++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/hdspmixer/configure.in b/hdspmixer/configure.in index 1b43bc9..e47a97d 100644 --- a/hdspmixer/configure.in +++ b/hdspmixer/configure.in @@ -1,5 +1,5 @@ AC_INIT(src/hdspmixer.cxx) -AM_INIT_AUTOMAKE(hdspmixer, 1.10) +AM_INIT_AUTOMAKE(hdspmixer, 1.11) AC_PROG_CXX AC_PROG_MAKE_SET diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index 364d727..960ec0f 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -25,6 +25,9 @@ #pragma implementation #include "HDSPMixerWindow.h" +/* header used in .mix file */ +const char header[] = "HDSPMixer v1"; + static void readregisters_cb(void *arg) { int err; @@ -341,6 +344,13 @@ void HDSPMixerWindow::save() if (dirty) { inputs->buttons->presets->save_preset(current_preset+1); } + /* since hdspmixer 1.11, we also store the meter level settings. Indicate + * the new on-disk structure via a small header */ + if (fwrite((void *)&header, sizeof(char), sizeof(header), file) != + sizeof(header)) { + goto save_error; + } + for (int speed = 0; speed < 3; ++speed) { for (int card = 0; card < MAX_CARDS; ++card) { for (int preset = 0; preset < 8; ++preset) { @@ -414,6 +424,24 @@ void HDSPMixerWindow::save() if (fwrite((void *)&(data[card][speed][preset]->mute), sizeof(int), 1, file) != 1) { goto save_error; } + if (fwrite((void *)&(data[card][speed][preset]->last_destination), sizeof(int), 1, file) != 1) { + goto save_error; + } + if (fwrite((void *)&(data[card][speed][preset]->rmsplus3), sizeof(int), 1, file) != 1) { + goto save_error; + } + if (fwrite((void *)&(data[card][speed][preset]->numbers), sizeof(int), 1, file) != 1) { + goto save_error; + } + if (fwrite((void *)&(data[card][speed][preset]->over), sizeof(int), 1, file) != 1) { + goto save_error; + } + if (fwrite((void *)&(data[card][speed][preset]->level), sizeof(int), 1, file) != 1) { + goto save_error; + } + if (fwrite((void *)&(data[card][speed][preset]->rate), sizeof(int), 1, file) != 1) { + goto save_error; + } } } } @@ -437,6 +465,21 @@ void HDSPMixerWindow::load() inputs->buttons->presets->preset_change(1); return; } + + /* check for new ondisk format */ + char buffer[sizeof(header)]; + bool ondisk_v1 = false; + if (fread(&buffer, sizeof(char), sizeof(buffer), file) != sizeof(buffer)) { + goto load_error; + } + if (0 == strncmp(buffer, header, sizeof(buffer))) { + /* new ondisk format found */ + ondisk_v1 = true; + } else { + /* old format, rewind to the start and simply read all data */ + rewind(file); + } + for (int speed = 0; speed < 3; ++speed) { for (int card = 0; card < MAX_CARDS; ++card) { for (int preset = 0; preset < 8; ++preset) { @@ -510,6 +553,27 @@ void HDSPMixerWindow::load() if (fread((void *)&(data[card][speed][preset]->mute), sizeof(int), 1, file) != 1) { goto load_error; } + /* read additional meter settings only present in newer mix files */ + if (ondisk_v1) { + if (fread((void *)&(data[card][speed][preset]->last_destination), sizeof(int), 1, file) != 1) { + goto load_error; + } + if (fread((void *)&(data[card][speed][preset]->rmsplus3), sizeof(int), 1, file) != 1) { + goto load_error; + } + if (fread((void *)&(data[card][speed][preset]->numbers), sizeof(int), 1, file) != 1) { + goto load_error; + } + if (fread((void *)&(data[card][speed][preset]->over), sizeof(int), 1, file) != 1) { + goto load_error; + } + if (fread((void *)&(data[card][speed][preset]->level), sizeof(int), 1, file) != 1) { + goto load_error; + } + if (fread((void *)&(data[card][speed][preset]->rate), sizeof(int), 1, file) != 1) { + goto load_error; + } + } } } } From 8f446f99e5ee4c4708206fedb35bcd1ed18fd706 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Tue, 22 Mar 2011 11:53:48 +0100 Subject: [PATCH 043/166] hdspmixer: Update NEWS file. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/NEWS | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/hdspmixer/NEWS b/hdspmixer/NEWS index cbe95d8..f4900d0 100644 --- a/hdspmixer/NEWS +++ b/hdspmixer/NEWS @@ -1,3 +1,17 @@ +Version 1.11 (2011-03-22): + * Fix ALSA snd_ctl_open error when running with three cards. + * Fix metering for non-MADI cards + * Fix labels on H9652 + * Fix preset activation segfault on AES(32) + * Adjust playback channel count on Multiface + * Provide headphones out on Multiface/Digiface + * Update pixmaps + * Save and restore level meter settings + WARNING: New mix files cannot be read by older versions of hdspmixers + +Version 1.10 (2011-02-24): + * Add support for RME MADI, RayDAT, AES, AES32 and AIO + Version 1.6 (24/11/2003): * Fixes compilation warnings * AutoSync sample rate detection scheme changed From e6c824175204763e264cf288d966141bfe7d9ef6 Mon Sep 17 00:00:00 2001 From: Tim Blechmann Date: Sun, 27 Mar 2011 13:34:19 +0200 Subject: [PATCH 044/166] hdspconf: fix some string constant conversions Signed-off-by: Tim Blechmann Signed-off-by: Takashi Iwai --- hdspconf/src/HC_BreakoutCable.cxx | 8 ++++---- hdspconf/src/HC_CardPane.cxx | 20 ++++++++++---------- hdspconf/src/HC_ClockSource.cxx | 14 +++++++------- hdspconf/src/HC_SpdifFreq.cxx | 6 +++--- hdspconf/src/HC_SyncCheck.cxx | 8 ++++---- hdspconf/src/HC_SystemClock.cxx | 6 +++--- hdspconf/src/labels.cxx | 12 ++++++------ hdspconf/src/labels.h | 12 ++++++------ 8 files changed, 43 insertions(+), 43 deletions(-) diff --git a/hdspconf/src/HC_BreakoutCable.cxx b/hdspconf/src/HC_BreakoutCable.cxx index 89d3ec8..0d7edcb 100644 --- a/hdspconf/src/HC_BreakoutCable.cxx +++ b/hdspconf/src/HC_BreakoutCable.cxx @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -21,7 +21,7 @@ #pragma implementation #include "HC_BreakoutCable.h" -static void setXlrStatus(char *ctl_name, int val, int card_index) +static void setXlrStatus(const char *ctl_name, int val, int card_index) { int err; char card_name[6]; @@ -67,7 +67,7 @@ HC_BreakoutCable::HC_BreakoutCable(int x, int y, int w, int h):Fl_Group(x, y, w, xlr = new Fl_Check_Button(x+15, y, w-30, 20, "XLR"); xlr->labelsize(10); xlr->callback(xlr_cb, (void *)parent()); - end(); + end(); } void HC_BreakoutCable::setXlr(unsigned char val) diff --git a/hdspconf/src/HC_CardPane.cxx b/hdspconf/src/HC_CardPane.cxx index 8371dbc..1e346b7 100644 --- a/hdspconf/src/HC_CardPane.cxx +++ b/hdspconf/src/HC_CardPane.cxx @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -21,7 +21,7 @@ #pragma implementation #include "HC_CardPane.h" -extern char *card_names[5]; +extern const char *card_names[5]; HC_CardPane::HC_CardPane(int alsa_idx, int idx, HDSP_IO_Type t):Fl_Group(PANE_X, PANE_Y, PANE_W, PANE_H) { @@ -39,20 +39,20 @@ HC_CardPane::HC_CardPane(int alsa_idx, int idx, HDSP_IO_Type t):Fl_Group(PANE_X, spdif_in = new HC_SpdifIn(x()+166, y()+20, 148, V_STEP*3); spdif_out = new HC_SpdifOut(x()+166, y()+40+V_STEP*3, 148, V_STEP*4); spdif_freq = new HC_SpdifFreq(x()+166, y()+60+V_STEP*7, 148, V_STEP); - + sync_ref = new HC_PrefSyncRef(x()+323, y()+20, 148, V_STEP*4); autosync_ref = new HC_AutoSyncRef(x()+323, y()+40+V_STEP*4, 148, V_STEP*2); system_clock = new HC_SystemClock(x()+323, y()+60+V_STEP*6, 148, V_STEP*2); } else if (type == Digiface) { - + clock_source = new HC_ClockSource(x()+9, y()+20, 148, V_STEP*7); sync_check = new HC_SyncCheck(x()+9, y()+40+V_STEP*7, 148, V_STEP*6); spdif_in = new HC_SpdifIn(x()+166, y()+20, 148, V_STEP*3); spdif_out = new HC_SpdifOut(x()+166, y()+40+V_STEP*3, 148, V_STEP*4); spdif_freq = new HC_SpdifFreq(x()+166, y()+60+V_STEP*7, 148, V_STEP); - + sync_ref = new HC_PrefSyncRef(x()+323, y()+20, 148, V_STEP*6); autosync_ref = new HC_AutoSyncRef(x()+323, y()+40+V_STEP*6, 148, V_STEP*2); system_clock = new HC_SystemClock(x()+323, y()+60+V_STEP*8, 148, V_STEP*2); @@ -65,7 +65,7 @@ HC_CardPane::HC_CardPane(int alsa_idx, int idx, HDSP_IO_Type t):Fl_Group(PANE_X, spdif_in = new HC_SpdifIn(x()+166, y()+20, 148, V_STEP*3); spdif_out = new HC_SpdifOut(x()+166, y()+40+V_STEP*3, 148, V_STEP*4); spdif_freq = new HC_SpdifFreq(x()+166, y()+60+V_STEP*7, 148, V_STEP); - + aeb = new HC_Aeb(x()+323, y()+20, 148, V_STEP); sync_ref = new HC_PrefSyncRef(x()+323, y()+40+V_STEP, 148, V_STEP*6); autosync_ref = new HC_AutoSyncRef(x()+323, y()+60+V_STEP*7, 148, V_STEP*2); @@ -78,17 +78,17 @@ HC_CardPane::HC_CardPane(int alsa_idx, int idx, HDSP_IO_Type t):Fl_Group(PANE_X, spdif_in = new HC_SpdifIn(x()+126, y()+20, 110, V_STEP*4); spdif_out = new HC_SpdifOut(x()+126, y()+40+V_STEP*4, 110, V_STEP*4); spdif_freq = new HC_SpdifFreq(x()+126, y()+60+V_STEP*8, 110, V_STEP); - + aeb = new HC_Aeb(x()+244, y()+20, 110, V_STEP); sync_ref = new HC_PrefSyncRef(x()+244, y()+40+V_STEP, 110, V_STEP*3); autosync_ref = new HC_AutoSyncRef(x()+244, y()+60+V_STEP*4, 110, V_STEP*2); system_clock = new HC_SystemClock(x()+244, y()+80+V_STEP*6, 110, V_STEP*2); - + breakout_cable = new HC_BreakoutCable(x()+362, y()+20, 110, V_STEP); input_level = new HC_InputLevel(x()+362, y()+40+V_STEP, 110, V_STEP*3); output_level = new HC_OutputLevel(x()+362, y()+60+V_STEP*4, 110, V_STEP*3); phones = new HC_Phones(x()+362, y()+80+V_STEP*7, 110, V_STEP*3); - + } end(); } diff --git a/hdspconf/src/HC_ClockSource.cxx b/hdspconf/src/HC_ClockSource.cxx index 4bb978a..d7b2a07 100644 --- a/hdspconf/src/HC_ClockSource.cxx +++ b/hdspconf/src/HC_ClockSource.cxx @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -21,7 +21,7 @@ #pragma implementation #include "HC_ClockSource.h" -extern char *freqs[10]; +extern const char *freqs[10]; void clock_source_cb(Fl_Widget *w, void *arg) { @@ -55,7 +55,7 @@ void clock_source_cb(Fl_Widget *w, void *arg) } else if (source == cs->khz192) { src = 9; } - + snprintf(card_name, 6, "hw:%i", pane->alsa_index); snd_ctl_elem_value_alloca(&ctl); snd_ctl_elem_id_alloca(&id); @@ -67,7 +67,7 @@ void clock_source_cb(Fl_Widget *w, void *arg) if ((err = snd_ctl_open(&handle, card_name, SND_CTL_NONBLOCK)) < 0) { fprintf(stderr, "Error opening ctl interface on card %s\n", card_name); return; - } + } if ((err = snd_ctl_elem_write(handle, ctl)) < 0) { snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_PCM); snd_ctl_elem_value_set_id(ctl, id); @@ -111,7 +111,7 @@ HC_ClockSource::HC_ClockSource(int x, int y, int w, int h):Fl_Group(x, y, w, h, khz176_4->labelsize(10); khz176_4->type(FL_RADIO_BUTTON); khz192 = new Fl_Round_Button(x+10, y+V_STEP*i++, w-20, V_STEP, freqs[9]); - khz192->callback(clock_source_cb, (void *)this); + khz192->callback(clock_source_cb, (void *)this); khz192->labelsize(10); khz192->type(FL_RADIO_BUTTON); } @@ -129,7 +129,7 @@ HC_ClockSource::HC_ClockSource(int x, int y, int w, int h):Fl_Group(x, y, w, h, khz88_2->type(FL_RADIO_BUTTON); khz96->labelsize(10); khz96->type(FL_RADIO_BUTTON); - end(); + end(); } void HC_ClockSource::setSource(unsigned char s) diff --git a/hdspconf/src/HC_SpdifFreq.cxx b/hdspconf/src/HC_SpdifFreq.cxx index 0fed38f..b607d65 100644 --- a/hdspconf/src/HC_SpdifFreq.cxx +++ b/hdspconf/src/HC_SpdifFreq.cxx @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -21,7 +21,7 @@ #pragma implementation #include "HC_SpdifFreq.h" -extern char *freqs[10]; +extern const char *freqs[10]; HC_SpdifFreq::HC_SpdifFreq(int x, int y, int w, int h):Fl_Widget(x, y, w, h, "SPDIF Freq.") { diff --git a/hdspconf/src/HC_SyncCheck.cxx b/hdspconf/src/HC_SyncCheck.cxx index 4a088ba..111c9bc 100644 --- a/hdspconf/src/HC_SyncCheck.cxx +++ b/hdspconf/src/HC_SyncCheck.cxx @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -21,7 +21,7 @@ #pragma implementation #include "HC_SyncCheck.h" -extern char *lock_status[3]; +extern const char *lock_status[3]; HC_SyncCheck::HC_SyncCheck(int x, int y, int w, int h):Fl_Widget(x, y, w, h, "SyncCheck") { @@ -35,7 +35,7 @@ HC_SyncCheck::HC_SyncCheck(int x, int y, int w, int h):Fl_Widget(x, y, w, h, "Sy adat_name = "ADAT In"; } else { adat_name = "ADAT1 In"; - } + } h_step = (int)(w/2.0f); draw_box = Fl::get_boxtype(FL_ENGRAVED_FRAME); label("SyncCheck"); diff --git a/hdspconf/src/HC_SystemClock.cxx b/hdspconf/src/HC_SystemClock.cxx index f1f88bb..d549a6f 100644 --- a/hdspconf/src/HC_SystemClock.cxx +++ b/hdspconf/src/HC_SystemClock.cxx @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -21,7 +21,7 @@ #pragma implementation #include "HC_SystemClock.h" -extern char *freqs[10]; +extern const char *freqs[10]; HC_SystemClock::HC_SystemClock(int x, int y, int w, int h):Fl_Widget(x, y, w, h, "System Clock") { diff --git a/hdspconf/src/labels.cxx b/hdspconf/src/labels.cxx index 59880b6..f8900be 100644 --- a/hdspconf/src/labels.cxx +++ b/hdspconf/src/labels.cxx @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -20,7 +20,7 @@ #include "labels.h" -char *card_names[5] = { +const char *card_names[5] = { "Digiface", "Multiface", "HDSP9652", @@ -28,7 +28,7 @@ char *card_names[5] = { "Undefined", }; -char *freqs[10] = { +const char *freqs[10] = { "32.0 kHz", "44.1 kHz", "48.0 kHz", @@ -41,7 +41,7 @@ char *freqs[10] = { "192.0 kHz", }; -char *ref[7] = { +const char *ref[7] = { "Word Clock", "ADAT Sync", "SPDIF", @@ -51,7 +51,7 @@ char *ref[7] = { "ADAT3" }; -char *lock_status[3] = { +const char *lock_status[3] = { "No Lock", "Lock", "Sync" diff --git a/hdspconf/src/labels.h b/hdspconf/src/labels.h index 42964c0..da996f9 100644 --- a/hdspconf/src/labels.h +++ b/hdspconf/src/labels.h @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -21,10 +21,10 @@ #ifndef LABELS_H #define LABELS_H -extern char *card_names[5]; -extern char *freqs[10]; -extern char *ref[7]; -extern char *lock_status[3]; +extern const char *card_names[5]; +extern const char *freqs[10]; +extern const char *ref[7]; +extern const char *lock_status[3]; #endif From 3ee59653eccfb487fa44d3d55325d7385fb1f903 Mon Sep 17 00:00:00 2001 From: Tim Blechmann Date: Sun, 27 Mar 2011 13:34:20 +0200 Subject: [PATCH 045/166] hdspconf: use foreground color instead of black if the background color of the color scheme is black, black text is hard to read. using the foreground color fixes this problem Signed-off-by: Tim Blechmann Signed-off-by: Takashi Iwai --- hdspconf/src/HC_AboutText.cxx | 2 +- hdspconf/src/HC_AutoSyncRef.cxx | 2 +- hdspconf/src/HC_SpdifFreq.cxx | 2 +- hdspconf/src/HC_SyncCheck.cxx | 2 +- hdspconf/src/HC_SystemClock.cxx | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/hdspconf/src/HC_AboutText.cxx b/hdspconf/src/HC_AboutText.cxx index 4014bf1..2205d15 100644 --- a/hdspconf/src/HC_AboutText.cxx +++ b/hdspconf/src/HC_AboutText.cxx @@ -39,7 +39,7 @@ HC_AboutText::HC_AboutText(int x, int y, int w, int h):Fl_Widget(x, y, w, h, "Ab void HC_AboutText::draw() { - fl_color(FL_BLACK); + fl_color(FL_FOREGROUND_COLOR); fl_font(FL_HELVETICA, 10); fl_draw(text, x(), y(), w(), h(), FL_ALIGN_LEFT); } diff --git a/hdspconf/src/HC_AutoSyncRef.cxx b/hdspconf/src/HC_AutoSyncRef.cxx index f20bbad..4f569e4 100644 --- a/hdspconf/src/HC_AutoSyncRef.cxx +++ b/hdspconf/src/HC_AutoSyncRef.cxx @@ -37,7 +37,7 @@ void HC_AutoSyncRef::draw() fl_color(FL_BACKGROUND_COLOR); fl_rectf(x(), y(), w(), h()); draw_box(x(), y(), w(), h(), FL_WHITE); - fl_color(FL_BLACK); + fl_color(FL_FOREGROUND_COLOR); fl_font(FL_HELVETICA, 10); fl_draw("Input", x()+4, y(), w()/2, h()/2, FL_ALIGN_LEFT); fl_draw(ref[external_ref], x()+w()/2-4, y(), w()/2, h()/2, FL_ALIGN_CENTER); diff --git a/hdspconf/src/HC_SpdifFreq.cxx b/hdspconf/src/HC_SpdifFreq.cxx index b607d65..894058b 100644 --- a/hdspconf/src/HC_SpdifFreq.cxx +++ b/hdspconf/src/HC_SpdifFreq.cxx @@ -37,7 +37,7 @@ void HC_SpdifFreq::draw() fl_color(FL_BACKGROUND_COLOR); fl_rectf(x(), y(), w(), h()); draw_box(x(), y(), w(), h(), FL_WHITE); - fl_color(FL_BLACK); + fl_color(FL_FOREGROUND_COLOR); fl_font(FL_HELVETICA, 10); fl_draw(freqs[spdif_freq], x(), y(), w(), h(), FL_ALIGN_CENTER); } diff --git a/hdspconf/src/HC_SyncCheck.cxx b/hdspconf/src/HC_SyncCheck.cxx index 111c9bc..bd03d35 100644 --- a/hdspconf/src/HC_SyncCheck.cxx +++ b/hdspconf/src/HC_SyncCheck.cxx @@ -50,7 +50,7 @@ void HC_SyncCheck::draw() fl_color(FL_BACKGROUND_COLOR); fl_rectf(x(), y(), w(), h()); draw_box(x(), y(), w(), h(), FL_WHITE); - fl_color(FL_BLACK); + fl_color(FL_FOREGROUND_COLOR); fl_font(FL_HELVETICA, 10); fl_draw(adat_name, x()+h_pos, y()+V_STEP*i, h_step, V_STEP, FL_ALIGN_LEFT); fl_draw(lock_status[adat1_lock_status], x()+h_pos+h_step, y()+V_STEP*i++, h_step-h_pos, V_STEP, FL_ALIGN_CENTER); diff --git a/hdspconf/src/HC_SystemClock.cxx b/hdspconf/src/HC_SystemClock.cxx index d549a6f..a7ce675 100644 --- a/hdspconf/src/HC_SystemClock.cxx +++ b/hdspconf/src/HC_SystemClock.cxx @@ -38,7 +38,7 @@ void HC_SystemClock::draw() fl_color(FL_BACKGROUND_COLOR); fl_rectf(x(), y(), w(), h()); draw_box(x(), y(), w(), h(), FL_WHITE); - fl_color(FL_BLACK); + fl_color(FL_FOREGROUND_COLOR); fl_font(FL_HELVETICA, 10); fl_draw("Mode", x()+4, y(), w()/2, h()/2, FL_ALIGN_LEFT); fl_draw(system_mode ? "Slave" : "Master", x()+w()/2-4, y(), w()/2, h()/2, FL_ALIGN_CENTER); From 210cb5f447e261acc9a1148e291737c420f8bb26 Mon Sep 17 00:00:00 2001 From: Tim Blechmann Date: Sun, 27 Mar 2011 13:50:34 +0200 Subject: [PATCH 046/166] hdspconf: more string constant fixes Signed-off-by: Tim Blechmann Signed-off-by: Takashi Iwai --- hdspconf/pixmaps/alsalogo.xpm | 2 +- hdspconf/pixmaps/lad_banner.xpm | 2 +- hdspconf/pixmaps/rme.xpm | 2 +- hdspconf/src/HC_PrefSyncRef.h | 6 +++--- hdspconf/src/HC_XpmRenderer.cxx | 6 +++--- hdspconf/src/HC_XpmRenderer.h | 8 ++++---- hdspconf/src/pixmaps.h | 10 +++++----- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/hdspconf/pixmaps/alsalogo.xpm b/hdspconf/pixmaps/alsalogo.xpm index b32c32d..cd22dd2 100644 --- a/hdspconf/pixmaps/alsalogo.xpm +++ b/hdspconf/pixmaps/alsalogo.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * alsalogo_xpm[] = { +const char * alsalogo_xpm[] = { "50 50 398 2", " c None", ". c #C0C0C0", diff --git a/hdspconf/pixmaps/lad_banner.xpm b/hdspconf/pixmaps/lad_banner.xpm index 8bb8545..11d4357 100644 --- a/hdspconf/pixmaps/lad_banner.xpm +++ b/hdspconf/pixmaps/lad_banner.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * lad_banner_xpm[] = { +const char * lad_banner_xpm[] = { "113 39 1833 2", " c None", ". c #C0C0C0", diff --git a/hdspconf/pixmaps/rme.xpm b/hdspconf/pixmaps/rme.xpm index a892603..b94fa7e 100644 --- a/hdspconf/pixmaps/rme.xpm +++ b/hdspconf/pixmaps/rme.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * rme_xpm[] = { +const char * rme_xpm[] = { "113 35 2300 2", " c None", ". c #030505", diff --git a/hdspconf/src/HC_PrefSyncRef.h b/hdspconf/src/HC_PrefSyncRef.h index 5ef8875..8c3a71f 100644 --- a/hdspconf/src/HC_PrefSyncRef.h +++ b/hdspconf/src/HC_PrefSyncRef.h @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -42,7 +42,7 @@ public: Fl_Round_Button *adat_sync; void setRef(int r); private: - char *adat_name; + const char *adat_name; }; #endif diff --git a/hdspconf/src/HC_XpmRenderer.cxx b/hdspconf/src/HC_XpmRenderer.cxx index 72742f8..ed66d4d 100644 --- a/hdspconf/src/HC_XpmRenderer.cxx +++ b/hdspconf/src/HC_XpmRenderer.cxx @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -21,7 +21,7 @@ #pragma implementation #include "HC_XpmRenderer.h" -HC_XpmRenderer::HC_XpmRenderer(int x, int y, int w, int h, char * const *xpm):Fl_Widget(x, y, w, h) +HC_XpmRenderer::HC_XpmRenderer(int x, int y, int w, int h, const char * const *xpm):Fl_Widget(x, y, w, h) { pixmap = xpm; } diff --git a/hdspconf/src/HC_XpmRenderer.h b/hdspconf/src/HC_XpmRenderer.h index 3c6f768..1e18541 100644 --- a/hdspconf/src/HC_XpmRenderer.h +++ b/hdspconf/src/HC_XpmRenderer.h @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -30,10 +30,10 @@ class HC_XpmRenderer:public Fl_Widget { public: - HC_XpmRenderer(int x, int y, int w, int h, char * const *xpm); + HC_XpmRenderer(int x, int y, int w, int h, const char * const *xpm); void draw(); private: - char * const *pixmap; + const char * const *pixmap; }; #endif diff --git a/hdspconf/src/pixmaps.h b/hdspconf/src/pixmaps.h index c193ed2..4c5aa65 100644 --- a/hdspconf/src/pixmaps.h +++ b/hdspconf/src/pixmaps.h @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -21,9 +21,9 @@ #ifndef pixmaps_H #define pixmaps_H -extern char * rme_xpm[]; -extern char * alsalogo_xpm[]; -extern char * lad_banner_xpm[]; +extern const char * rme_xpm[]; +extern const char * alsalogo_xpm[]; +extern const char * lad_banner_xpm[]; #endif From c97536987428d39c71cfb3b75f5a23bda5b1b91a Mon Sep 17 00:00:00 2001 From: Tim Blechmann Date: Sat, 2 Apr 2011 14:44:11 +0200 Subject: [PATCH 047/166] hdspmixer: fix drawing problems with black background - use foreground color instead of black - HDSPMixerSelector: set colors before setting labels Signed-off-by: Tim Blechmann Reviewed-by: Paul Menzel Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerAboutText.cxx | 2 +- hdspmixer/src/HDSPMixerIOMixer.cxx | 2 +- hdspmixer/src/HDSPMixerOutput.cxx | 2 +- hdspmixer/src/HDSPMixerSelector.cxx | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/hdspmixer/src/HDSPMixerAboutText.cxx b/hdspmixer/src/HDSPMixerAboutText.cxx index c8c9b1a..6227b11 100644 --- a/hdspmixer/src/HDSPMixerAboutText.cxx +++ b/hdspmixer/src/HDSPMixerAboutText.cxx @@ -48,7 +48,7 @@ HDSPMixerAboutText::HDSPMixerAboutText(int x, int y, int w, int h):Fl_Widget(x, void HDSPMixerAboutText::draw() { - fl_color(FL_BLACK); + fl_color(FL_FOREGROUND_COLOR); fl_font(FL_HELVETICA, 10); fl_draw(text, x(), y(), w(), h(), FL_ALIGN_LEFT); } diff --git a/hdspmixer/src/HDSPMixerIOMixer.cxx b/hdspmixer/src/HDSPMixerIOMixer.cxx index 987be41..7e3934e 100644 --- a/hdspmixer/src/HDSPMixerIOMixer.cxx +++ b/hdspmixer/src/HDSPMixerIOMixer.cxx @@ -71,7 +71,7 @@ void HDSPMixerIOMixer::draw() Fl_Widget *const* a = array(); if (damage() & ~FL_DAMAGE_CHILD) { draw_background(); - fl_color(FL_BLACK); + fl_color(FL_FOREGROUND_COLOR); fl_font(FL_HELVETICA, 8); fl_draw(channel_name.str().c_str(), x()+4, y()+225, 27, 9, FL_ALIGN_CENTER); for (int i=children(); i--;) { diff --git a/hdspmixer/src/HDSPMixerOutput.cxx b/hdspmixer/src/HDSPMixerOutput.cxx index 5047825..2c7fe29 100644 --- a/hdspmixer/src/HDSPMixerOutput.cxx +++ b/hdspmixer/src/HDSPMixerOutput.cxx @@ -303,7 +303,7 @@ void HDSPMixerOutput::draw() Fl_Widget*const* a = array(); if (damage() & ~FL_DAMAGE_CHILD) { draw_background(); - fl_color(FL_BLACK); + fl_color(FL_FOREGROUND_COLOR); fl_font(FL_HELVETICA, 8); fl_draw(labels_playback[out_num], x()+4, y()+193, 27, 9, FL_ALIGN_CENTER); for (int i=children(); i--;) { diff --git a/hdspmixer/src/HDSPMixerSelector.cxx b/hdspmixer/src/HDSPMixerSelector.cxx index 098658f..32d91db 100644 --- a/hdspmixer/src/HDSPMixerSelector.cxx +++ b/hdspmixer/src/HDSPMixerSelector.cxx @@ -164,10 +164,10 @@ HDSPMixerSelector::HDSPMixerSelector(int x, int y, int w, int h):Fl_Menu_(x, y, max_dest = 0; selected = 0; basew = (HDSPMixerWindow *)window(); - setLabels(); textfont(FL_HELVETICA); textsize(8); - textcolor(FL_BLACK); + textcolor(FL_FOREGROUND_COLOR); + setLabels(); } void HDSPMixerSelector::draw() { From 0b018d9a2361e9aac57cae6568ea60a45e859fbd Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Mon, 4 Apr 2011 14:34:27 +0200 Subject: [PATCH 048/166] hdspmixer: Add a 9th pseudo preset When switching cards, all current settings are lost. To have a place where to store them, let's add a virtual 9th preset which can be used as a temporary scratch pad. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerIOMixer.cxx | 2 +- hdspmixer/src/HDSPMixerIOMixer.h | 2 +- hdspmixer/src/HDSPMixerOutput.cxx | 4 ++-- hdspmixer/src/HDSPMixerOutput.h | 2 +- hdspmixer/src/HDSPMixerWindow.cxx | 2 +- hdspmixer/src/HDSPMixerWindow.h | 2 +- hdspmixer/src/defines.h | 6 ++++++ 7 files changed, 13 insertions(+), 7 deletions(-) diff --git a/hdspmixer/src/HDSPMixerIOMixer.cxx b/hdspmixer/src/HDSPMixerIOMixer.cxx index 7e3934e..119ffd7 100644 --- a/hdspmixer/src/HDSPMixerIOMixer.cxx +++ b/hdspmixer/src/HDSPMixerIOMixer.cxx @@ -38,7 +38,7 @@ HDSPMixerIOMixer::HDSPMixerIOMixer(int x, int y, int w, int h, int ch, int type) p_iomixer_xpm = iomixer_r_xpm; } for (int j = 0; j < MAX_CARDS; ++j) { - for (int i = 0; i < 8; ++i) { + for (int i = 0; i < NUM_PRESETS; ++i) { data[j][0][i] = new HDSPMixerStripData(); data[j][1][i] = new HDSPMixerStripData(); data[j][2][i] = new HDSPMixerStripData(); diff --git a/hdspmixer/src/HDSPMixerIOMixer.h b/hdspmixer/src/HDSPMixerIOMixer.h index 2ec7f05..aa12487 100644 --- a/hdspmixer/src/HDSPMixerIOMixer.h +++ b/hdspmixer/src/HDSPMixerIOMixer.h @@ -56,7 +56,7 @@ private: std::stringstream channel_name; void update_child(Fl_Widget &widget); public: - HDSPMixerStripData *data[MAX_CARDS][3][8]; /* data[card][mode(ss/ds/qs)][preset number] */ + HDSPMixerStripData *data[MAX_CARDS][3][NUM_PRESETS]; /* data[card][mode(ss/ds/qs)][preset number] */ HDSPMixerPan *pan; HDSPMixerFader *fader; HDSPMixerPeak *peak; diff --git a/hdspmixer/src/HDSPMixerOutput.cxx b/hdspmixer/src/HDSPMixerOutput.cxx index 2c7fe29..17ab25d 100644 --- a/hdspmixer/src/HDSPMixerOutput.cxx +++ b/hdspmixer/src/HDSPMixerOutput.cxx @@ -170,8 +170,8 @@ static char const *labels_9632_qs[8] = { HDSPMixerOutput::HDSPMixerOutput(int x, int y, int w, int h, int num):Fl_Group(x, y, w, h) { - for (int j = 0; j < 3; ++j) { - for (int i = 0; i < 8; ++i) { + for (int j = 0; j < MAX_CARDS; ++j) { + for (int i = 0; i < NUM_PRESETS; ++i) { data[j][0][i] = new HDSPMixerOutputData(); data[j][1][i] = new HDSPMixerOutputData(); data[j][2][i] = new HDSPMixerOutputData(); diff --git a/hdspmixer/src/HDSPMixerOutput.h b/hdspmixer/src/HDSPMixerOutput.h index 2bc3d5c..6278cfd 100644 --- a/hdspmixer/src/HDSPMixerOutput.h +++ b/hdspmixer/src/HDSPMixerOutput.h @@ -52,7 +52,7 @@ private: HDSPMixerWindow *basew; void update_child(Fl_Widget& widget); public: - HDSPMixerOutputData *data[MAX_CARDS][3][8]; /* data[card][mode(ss/ds/qs)][preset number] */ + HDSPMixerOutputData *data[MAX_CARDS][3][NUM_PRESETS]; /* data[card][mode(ss/ds/qs)][preset number] */ HDSPMixerFader *fader; HDSPMixerGain *gain; HDSPMixerMeter *meter; diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index 960ec0f..a327904 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -791,7 +791,7 @@ HDSPMixerWindow::HDSPMixerWindow(int x, int y, int w, int h, const char *label, } } for (int j = 0; j < MAX_CARDS; j++) { - for (int i = 0; i < 8; ++i) { + for (int i = 0; i < NUM_PRESETS; ++i) { data[j][0][i] = new HDSPMixerPresetData(); data[j][1][i] = new HDSPMixerPresetData(); data[j][2][i] = new HDSPMixerPresetData(); diff --git a/hdspmixer/src/HDSPMixerWindow.h b/hdspmixer/src/HDSPMixerWindow.h index dfc7d59..0c2674f 100644 --- a/hdspmixer/src/HDSPMixerWindow.h +++ b/hdspmixer/src/HDSPMixerWindow.h @@ -73,7 +73,7 @@ public: Fl_Scroll *scroll; HDSPMixerSetup *setup; HDSPMixerAbout *about; - HDSPMixerPresetData *data[MAX_CARDS][3][8]; /* data[card number][mode(ss/ds/qs)][preset number] */ + HDSPMixerPresetData *data[MAX_CARDS][3][NUM_PRESETS]; /* data[card number][mode(ss/ds/qs)][preset number] */ HDSPMixerCard *cards[MAX_CARDS]; HDSPMixerInputs *inputs; HDSPMixerPlaybacks *playbacks; diff --git a/hdspmixer/src/defines.h b/hdspmixer/src/defines.h index d29c37c..af5c382 100644 --- a/hdspmixer/src/defines.h +++ b/hdspmixer/src/defines.h @@ -49,6 +49,12 @@ #define MAX_CARDS 3 +/* Number of presets. 8 presets visible to the user, the 9th is used for + * holding temporary mixer data when switching cards, so it's not a real + * preset but more like a scratch pad. + */ +#define NUM_PRESETS 9 + typedef unsigned long long int int64; #endif From 7a865ce04036ee092a07a131c1bc3b38ae810c9c Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Mon, 4 Apr 2011 14:34:28 +0200 Subject: [PATCH 049/166] hdspmixer: Save preset before switching cards When running with more than one card, switching cards would lose any changes made to the current card. To avoid this inconvenience, save the current settings to the virtual 9th preset and restore them when switching back. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerCard.cxx | 1 + hdspmixer/src/HDSPMixerCard.h | 2 ++ hdspmixer/src/HDSPMixerCardSelector.cxx | 2 ++ hdspmixer/src/HDSPMixerWindow.cxx | 41 ++++++++++++++++++++++++- hdspmixer/src/HDSPMixerWindow.h | 2 ++ 5 files changed, 47 insertions(+), 1 deletion(-) diff --git a/hdspmixer/src/HDSPMixerCard.cxx b/hdspmixer/src/HDSPMixerCard.cxx index f3205b9..fbd5de5 100644 --- a/hdspmixer/src/HDSPMixerCard.cxx +++ b/hdspmixer/src/HDSPMixerCard.cxx @@ -186,6 +186,7 @@ HDSPMixerCard::HDSPMixerCard(int cardtype, int id, char *shortname) /* Set channels and mappings */ adjustSettings(); + last_preset = last_dirty = 0; basew = NULL; } diff --git a/hdspmixer/src/HDSPMixerCard.h b/hdspmixer/src/HDSPMixerCard.h index 032c61f..d2ef8a6 100644 --- a/hdspmixer/src/HDSPMixerCard.h +++ b/hdspmixer/src/HDSPMixerCard.h @@ -48,6 +48,8 @@ public: int channels_input, channels_playback, window_width, window_height, card_id; int channels_output; int type; + int last_preset; /* Last activated preset before switching to another card */ + int last_dirty; /* Last dirty flag before switching to another card */ char *channel_map_input, *channel_map_playback; char *dest_map; char *meter_map_input, *meter_map_playback; diff --git a/hdspmixer/src/HDSPMixerCardSelector.cxx b/hdspmixer/src/HDSPMixerCardSelector.cxx index d83c4c9..d685009 100644 --- a/hdspmixer/src/HDSPMixerCardSelector.cxx +++ b/hdspmixer/src/HDSPMixerCardSelector.cxx @@ -48,9 +48,11 @@ void HDSPMixerCardSelector::draw() void HDSPMixerCardSelector::ActivateCard (int i) { card = i + 1; + basew->stashPreset(); /* save current mixer state */ basew->current_card = i; basew->cards[i]->setMode (basew->cards[i]->getSpeed ()); basew->setTitleWithFilename(); + basew->unstashPreset(); /* restore previous mixer state */ redraw (); } diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index a327904..7848190 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -609,7 +609,44 @@ void HDSPMixerWindow::setTitleWithFilename(void) setTitle(filename); } +void HDSPMixerWindow::stashPreset(void) +{ + cards[current_card]->last_preset = current_preset; + cards[current_card]->last_dirty = dirty; + /* save the current mixer state to the virtual 9th preset */ + inputs->buttons->presets->save_preset(9); +} +void HDSPMixerWindow::unstashPreset(void) +{ + /* load temporary data from virtual 9th preset */ + inputs->buttons->presets->restore_preset(9); + + current_preset = cards[current_card]->last_preset; + /* Internal notion of playback in use. Relevant for blinking buttons */ + inputs->buttons->presets->preset = current_preset + 1; + dirty = cards[current_card]->last_dirty; + /* Preset masks (which preset button is green) */ + inputs->buttons->presets->presetmask = (int)pow(2, current_preset); + if (dirty) { + /* make the buttons blink if it's unsaved. We need to remove any + * existing triggers to dirty_cb, because dirty_cb is called + * every 0.3 seconds and enabling/disabling (highlight/unlight) the + * buttons, so if we have too many callbacks, the buttons would + * remain in one state --> no blinking. We need exactly one. + */ + Fl::remove_timeout(dirty_cb, (void *)this); + Fl::add_timeout(0.3, dirty_cb, (void *)this); + } else { + /* Hack. I don't know why this is necessary, but if we're clean, + * we need to recall the preset again to correctly reflect + * the dirty/undirty state. + * + * Though it's a little bit redundant, it at least won't do any harm. + */ + inputs->buttons->presets->preset_change(current_preset+1); + } +} void HDSPMixerWindow::restoreDefaults(int card) { @@ -848,8 +885,10 @@ HDSPMixerWindow::HDSPMixerWindow(int x, int y, int w, int h, const char *label, Fl::add_handler(handler_cb); Fl::add_timeout(0.030, readregisters_cb, this); i = 0; - while (i < MAX_CARDS && cards[i] != NULL) + while (i < MAX_CARDS && cards[i] != NULL) { + current_card = i; inputs->buttons->cardselector->ActivateCard (i++); + } } int HDSPMixerWindow::handle(int e) diff --git a/hdspmixer/src/HDSPMixerWindow.h b/hdspmixer/src/HDSPMixerWindow.h index 0c2674f..134db3e 100644 --- a/hdspmixer/src/HDSPMixerWindow.h +++ b/hdspmixer/src/HDSPMixerWindow.h @@ -95,6 +95,8 @@ public: void load(); void setTitle(std::string suffix); void setTitleWithFilename(); + void stashPreset(); + void unstashPreset(); }; #endif From 92413b739e07d2451abfb95bae42bbbd74e60e15 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Mon, 4 Apr 2011 14:34:29 +0200 Subject: [PATCH 050/166] hdspmixer: Recall 1st preset on all cards, not just on the first With the new "store current settings to the virtual 9th preset" before switching cards code, one needs to make sure the actual mixer state is loaded with sane values, either from the preset file or a generic builtin preset. Calling preset_change(1) is sufficient, setting all the required data. However, in case of more than one RME card in the system, one needs to call this function for each card, otherwise, some of the cards store uninitialized data to the 9th preset, resulting in a weird mixer state afterwards. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerWindow.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index 7848190..5a7dac0 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -877,9 +877,10 @@ HDSPMixerWindow::HDSPMixerWindow(int x, int y, int w, int h, const char *label, printf("Initializing default presets\n"); i = 0; while (i < MAX_CARDS && cards[i] != NULL) { + current_card = i; restoreDefaults(i++); + inputs->buttons->presets->preset_change(1); } - inputs->buttons->presets->preset_change(1); } Fl::atclose = atclose_cb; Fl::add_handler(handler_cb); From f9147bfc2cb94eb260e70b4791ca423fe56bf26d Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Mon, 4 Apr 2011 14:34:30 +0200 Subject: [PATCH 051/166] hdspmixer: Initialize headphones out in presets Cards like the multiface/digiface have additional headphones out. Those were not initialized in the presets due to wrong loop boundaries: maxdest represents the amount of physical stereo pairs, and chnls is either equal or less, so the output fader array needs more iterations than the playback section. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerWindow.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index 5a7dac0..75fbc4f 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -734,7 +734,7 @@ void HDSPMixerWindow::restoreDefaults(int card) for (int preset = 0; preset < 8; ++preset) { for (int speed = 0; speed < num_modes; ++speed) { - for (int i = 0; i < chnls[speed]; i+=2) { + for (int i = 0; i < 2*maxdest[speed]; i+=2) { for (int z = 0; z < maxdest[speed]; ++z) { /* Gain setup */ if (cards[card]->type == H9632) { From 25bd81562a6a97a6e9a2fccdcb1a53734742db57 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Fri, 8 Apr 2011 19:58:35 +0200 Subject: [PATCH 052/166] hdspmixer: Fix read/write from/to preset files on MADI-like cards The old hdspmixer (prior to e24e56795ea57e3dd7da45063ab71f04e231192d, that is pre-1.0.24) has used the hard-coded value "14" for reading/storing 14 ints from/to preset files, however, it's actually HDSP_MAX_DEST that should be used. HDSP_MAX_DEST was bumped from 14 to 32 to allow for MADI cards (32 stereo pairs equal 64 output channels on MADI cards) Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerWindow.cxx | 37 ++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index 75fbc4f..d6d28e3 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -337,7 +337,25 @@ static int handler_cb(int event) void HDSPMixerWindow::save() { + const int pan_array_size = + sizeof(inputs->strips[0]->data[0][0][0]->pan_pos) / + sizeof(inputs->strips[0]->data[0][0][0]->pan_pos[0]); + /* MixerStripData defines pan_pos[HDSP_MAX_DEST], but just in case this + * will ever change, let's detect it early and fail safely instead of + * reading/writing garbage from/to preset files + */ + assert (HDSP_MAX_DEST == pan_array_size); + + /* also make sure that fader_pos[] has the same size as pan_pos. This comes + * naturally, but just to be sure. + */ + assert (pan_array_size == + sizeof(inputs->strips[0]->data[0][0][0]->fader_pos) / + sizeof(inputs->strips[0]->data[0][0][0]->fader_pos[0])); + + FILE *file; + if ((file = fopen(file_name, "w")) == NULL) { fl_alert("Error opening file %s for saving", file_name); } @@ -356,17 +374,17 @@ void HDSPMixerWindow::save() for (int preset = 0; preset < 8; ++preset) { for (int channel = 0; channel < HDSP_MAX_CHANNELS; ++channel) { /* inputs pans and volumes */ - if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), 14, file) != 14) { + if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), pan_array_size, file) != pan_array_size) { goto save_error; } - if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->fader_pos[0]), sizeof(int), 14, file) != 14) { + if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->fader_pos[0]), sizeof(int), pan_array_size, file) != pan_array_size) { goto save_error; } /* playbacks pans and volumes */ - if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), 14, file) != 14) { + if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), pan_array_size, file) != pan_array_size) { goto save_error; } - if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->fader_pos[0]), sizeof(int), 14, file) != 14) { + if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->fader_pos[0]), sizeof(int), pan_array_size, file) != pan_array_size) { goto save_error; } /* inputs mute/solo/dest */ @@ -469,12 +487,15 @@ void HDSPMixerWindow::load() /* check for new ondisk format */ char buffer[sizeof(header)]; bool ondisk_v1 = false; + int pan_array_size = 14; /* old (pre 1.0.24) HDSP_MAX_DEST */ + if (fread(&buffer, sizeof(char), sizeof(buffer), file) != sizeof(buffer)) { goto load_error; } if (0 == strncmp(buffer, header, sizeof(buffer))) { /* new ondisk format found */ ondisk_v1 = true; + pan_array_size = HDSP_MAX_DEST; } else { /* old format, rewind to the start and simply read all data */ rewind(file); @@ -485,17 +506,17 @@ void HDSPMixerWindow::load() for (int preset = 0; preset < 8; ++preset) { for (int channel = 0; channel < HDSP_MAX_CHANNELS; ++channel) { /* inputs pans and volumes */ - if (fread((void *)&(inputs->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), 14, file) != 14) { + if (fread((void *)&(inputs->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), pan_array_size, file) != pan_array_size) { goto load_error; } - if (fread((void *)&(inputs->strips[channel]->data[card][speed][preset]->fader_pos[0]), sizeof(int), 14, file) != 14) { + if (fread((void *)&(inputs->strips[channel]->data[card][speed][preset]->fader_pos[0]), sizeof(int), pan_array_size, file) != pan_array_size) { goto load_error; } /* playbacks pans and volumes */ - if (fread((void *)&(playbacks->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), 14, file) != 14) { + if (fread((void *)&(playbacks->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), pan_array_size, file) != pan_array_size) { goto load_error; } - if (fread((void *)&(playbacks->strips[channel]->data[card][speed][preset]->fader_pos[0]), sizeof(int), 14, file) != 14) { + if (fread((void *)&(playbacks->strips[channel]->data[card][speed][preset]->fader_pos[0]), sizeof(int), pan_array_size, file) != pan_array_size) { goto load_error; } /* inputs mute/solo/dest */ From 7c6912449a5c6f0d7958077ad67ef35e0e2daff0 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Fri, 8 Apr 2011 19:58:36 +0200 Subject: [PATCH 053/166] hdspmixer: Handle channel count in old (v1.0.23) preset file format When reading a preset file, v1.0.23 only used 26 channels instead of 64. Reading 64 channels from a 26 channel file won't work, hence set it depending on the file format version. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerWindow.cxx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index d6d28e3..fb41721 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -488,6 +488,7 @@ void HDSPMixerWindow::load() char buffer[sizeof(header)]; bool ondisk_v1 = false; int pan_array_size = 14; /* old (pre 1.0.24) HDSP_MAX_DEST */ + int channels_per_card = 26; /* old (pre 1.0.24) HDSP_MAX_CHANNELS */ if (fread(&buffer, sizeof(char), sizeof(buffer), file) != sizeof(buffer)) { goto load_error; @@ -496,6 +497,7 @@ void HDSPMixerWindow::load() /* new ondisk format found */ ondisk_v1 = true; pan_array_size = HDSP_MAX_DEST; + channels_per_card = HDSP_MAX_CHANNELS; } else { /* old format, rewind to the start and simply read all data */ rewind(file); @@ -504,7 +506,7 @@ void HDSPMixerWindow::load() for (int speed = 0; speed < 3; ++speed) { for (int card = 0; card < MAX_CARDS; ++card) { for (int preset = 0; preset < 8; ++preset) { - for (int channel = 0; channel < HDSP_MAX_CHANNELS; ++channel) { + for (int channel = 0; channel < channels_per_card; ++channel) { /* inputs pans and volumes */ if (fread((void *)&(inputs->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), pan_array_size, file) != pan_array_size) { goto load_error; From cb40769c939b7c6f0836d7a36149fdfde7febfc9 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Fri, 8 Apr 2011 19:58:37 +0200 Subject: [PATCH 054/166] hdspmixer: Handle preset files used in 1.0.24 and 1.0.24.1 As an addition to the previous commit, let's also cover the 3rd case when a preset file was written with hdspmixer v1.0.24 or v1.0.24.1. In this case, no magic header will be present, but the file size would differ from the pre 1.0.24 format. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerWindow.cxx | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index fb41721..74b5630 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -499,7 +499,24 @@ void HDSPMixerWindow::load() pan_array_size = HDSP_MAX_DEST; channels_per_card = HDSP_MAX_CHANNELS; } else { - /* old format, rewind to the start and simply read all data */ + /* There are two different kinds of old format: pre 1.0.24 and + * the one used for 1.0.24/1.0.24.1. We can distinguish between + * these two by checking the file size, becase HDSP_MAX_CHANNELS + * was bumped right before the 1.0.24 release. + */ + fseek (file, 0, SEEK_END); + long filesize = ftell (file); + + if (1163808 == filesize) { + /* file written by hdspmixer v1.0.24 or v1.0.24.1 with + * HDSP_MAX_CHANNELS set to 64, but pan_array_size still at + * 14, so setting channels_per_card should get the correct + * mapping. + */ + channels_per_card = 64; /* HDSP_MAX_CHANNELS */ + } + + /* rewind to the start and simply read all data */ rewind(file); } From 53bcd9d16c557c13d8f5988a33ee141cfd6b51e0 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Thu, 28 Jul 2011 23:45:46 +0200 Subject: [PATCH 055/166] hdspmixer: Add support for RME RPM This patch adds support for the RME RPM devices. It's mostly based on Florian Faber's previous patch against hdspmixer 1.0.23, forwarded-ported to the current hdspmixer code. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerCard.cxx | 11 +++++++++++ hdspmixer/src/HDSPMixerCard.h | 5 +++++ hdspmixer/src/HDSPMixerOutput.cxx | 15 +++++++++++++++ hdspmixer/src/HDSPMixerSelector.cxx | 7 +++++++ hdspmixer/src/HDSPMixerWindow.cxx | 4 ++++ hdspmixer/src/channelmap.cxx | 12 ++++++++++++ hdspmixer/src/channelmap.h | 5 +++++ hdspmixer/src/hdspmixer.cxx | 4 ++++ 8 files changed, 63 insertions(+) diff --git a/hdspmixer/src/HDSPMixerCard.cxx b/hdspmixer/src/HDSPMixerCard.cxx index fbd5de5..78b88b6 100644 --- a/hdspmixer/src/HDSPMixerCard.cxx +++ b/hdspmixer/src/HDSPMixerCard.cxx @@ -255,6 +255,17 @@ void HDSPMixerCard::adjustSettings() { } } + if (type == RPM) { + /* RPM has no digital audio connectors, hence channel mappings don't + * depend on speedmode */ + channels_input = 5; + channels_playback = channels_output = 6; /* 2xMain,2xMon,2xPH */ + channel_map_input = channel_map_playback = channel_map_rpm; + dest_map = dest_map_rpm; + meter_map_input = meter_map_playback = channel_map_rpm; + } + + if (type == H9652) { switch (speed_mode) { case 0: diff --git a/hdspmixer/src/HDSPMixerCard.h b/hdspmixer/src/HDSPMixerCard.h index d2ef8a6..656702b 100644 --- a/hdspmixer/src/HDSPMixerCard.h +++ b/hdspmixer/src/HDSPMixerCard.h @@ -32,6 +32,11 @@ #include "channelmap.h" #include "HDSPMixerWindow.h" +/* temporary workaround until hdsp.h (HDSP_IO_Type gets fixed */ +#ifndef RPM +# define RPM 5 +#endif + class HDSPMixerWindow; class HDSPMixerCard diff --git a/hdspmixer/src/HDSPMixerOutput.cxx b/hdspmixer/src/HDSPMixerOutput.cxx index 17ab25d..5a88f41 100644 --- a/hdspmixer/src/HDSPMixerOutput.cxx +++ b/hdspmixer/src/HDSPMixerOutput.cxx @@ -77,6 +77,15 @@ static char const *labels_raydat_qs[12] = { "SP.L", "SP.R" }; +static char const *labels_rpm_output[6] = { + "Main L", "Main R", "Mon L", "Mon R", "PH L", "PH R" +}; + +static char const *labels_rpm_input[5] = { + "Phono 1.L", "Phono 1.R", + "Phono 2.L", "Phono 2.R", + "Mic" +}; static char const *labels_aio_ss_input[14] = { "AN 1", "AN 2", @@ -219,6 +228,12 @@ void HDSPMixerOutput::setLabels() labels_input = labels_playback = labels_mf_ss; return; }; + + if (type == RPM) { + labels_input = labels_rpm_input; + labels_playback = labels_rpm_output; + return; + }; if (type == Digiface || type == H9652) { if (sm) diff --git a/hdspmixer/src/HDSPMixerSelector.cxx b/hdspmixer/src/HDSPMixerSelector.cxx index 32d91db..084c80d 100644 --- a/hdspmixer/src/HDSPMixerSelector.cxx +++ b/hdspmixer/src/HDSPMixerSelector.cxx @@ -131,6 +131,10 @@ static char const *destinations_df_ds[8] = { "SPDIF", "Analog" }; +static char const *destinations_rpm[3] = { + "Main", "Mon", "Phones" +}; + static char const *destinations_h9652_ss[13] = { "A1 1+2", "A1 3+4", "A1 5+6", "A1 7+8", "A2 1+2", "A2 3+4", "A2 5+6", "A2 7+8", @@ -261,6 +265,9 @@ void HDSPMixerSelector::setLabels() /* should never happen */ break; } + } else if (type == RPM) { + max_dest = 3; + destinations = destinations_rpm; } else if (type == H9652) { switch (sm) { case 0: diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index 74b5630..e1fe18c 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -709,6 +709,10 @@ void HDSPMixerWindow::restoreDefaults(int card) maxdest[0] = 14; maxdest[1] = 8; break; + case RPM: + chnls[0] = chnls[1] = 6; + maxdest[0] = maxdest[1] = 3; + break; case H9652: chnls[0] = 26; chnls[1] = 14; diff --git a/hdspmixer/src/channelmap.cxx b/hdspmixer/src/channelmap.cxx index 598be56..e3ca15c 100644 --- a/hdspmixer/src/channelmap.cxx +++ b/hdspmixer/src/channelmap.cxx @@ -78,6 +78,18 @@ char dest_map_ds[8] = { 0, 2, 8, 10, 16, 18, 24, 26 }; +/* RPM */ +char dest_map_rpm[3] = { + 0, 2, 4 +}; + +char channel_map_rpm[26] = { + 0, 1, 2, 3, 4, 5, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1 +}; + // HDSP 9652 char dest_map_h9652_ss[13] = { diff --git a/hdspmixer/src/channelmap.h b/hdspmixer/src/channelmap.h index 6b151a0..51b69ce 100644 --- a/hdspmixer/src/channelmap.h +++ b/hdspmixer/src/channelmap.h @@ -54,6 +54,11 @@ extern char channel_map_ds[26]; extern char dest_map_ds[8]; +// RPM + +extern char dest_map_rpm[3]; +extern char channel_map_rpm[26]; + // HDSP 9652 extern char dest_map_h9652_ss[13]; diff --git a/hdspmixer/src/hdspmixer.cxx b/hdspmixer/src/hdspmixer.cxx index 4929863..9c0a3c4 100644 --- a/hdspmixer/src/hdspmixer.cxx +++ b/hdspmixer/src/hdspmixer.cxx @@ -65,6 +65,10 @@ int main(int argc, char **argv) printf("Digiface found!\n"); hdsp_cards[cards] = new HDSPMixerCard(Digiface, card, shortname); cards++; + } else if (!strncmp(name, "RME Hammerfall DSP + RPM", 24)) { + printf("RPM found!\n"); + hdsp_cards[cards] = new HDSPMixerCard(RPM, card, shortname); + cards++; } else if (!strncmp(name, "RME Hammerfall HDSP 9652", 24)) { printf("HDSP 9652 found!\n"); hdsp_cards[cards] = new HDSPMixerCard(H9652, card, shortname); From da8a50938ddab0ce0238aa978241914f4e6d3172 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Thu, 28 Jul 2011 23:45:47 +0200 Subject: [PATCH 056/166] hdsploader: Add support for RME RPM Augment hdsploader to support the RME RPM devices. The firmware is already present in alsa-firmware, so we can directly load it. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdsploader/hdsploader.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hdsploader/hdsploader.c b/hdsploader/hdsploader.c index d1855b1..fa488a2 100644 --- a/hdsploader/hdsploader.c +++ b/hdsploader/hdsploader.c @@ -86,6 +86,9 @@ void upload_firmware(int card) err = read_bin_file(code, DATAPATH "/digiface_firmware_rev11.bin"); } break; + case RPM: + err = read_bin_file(code, DATAPATH "/rpm_firmware.bin"); + break; default: fprintf(stderr, "Unknown iobox or firmware revision\n"); snd_hwdep_close(hw); From 21df31ab4ffe05741ae017aa46dcf24891aae7b9 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Thu, 28 Jul 2011 23:45:48 +0200 Subject: [PATCH 057/166] hdsploader: Temporary define for RPM Right now (1.0.24.1), alsa-lib's hdsp.h doesn't know about the RPM. To avoid a strong dependency on unreleased code, temporary provide the define here. It can be dropped as soon as a new version of alsa-lib will be released, thus effectively making it the required minimum version for alsa-tools. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdsploader/hdsploader.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hdsploader/hdsploader.c b/hdsploader/hdsploader.c index fa488a2..bfbe3bc 100644 --- a/hdsploader/hdsploader.c +++ b/hdsploader/hdsploader.c @@ -27,6 +27,10 @@ static u_int32_t code[24413]; +#ifndef RPM +# define RPM 5 +#endif + int read_bin_file(u_int32_t *array, const char *filename) { FILE *out; From 1d37a85054e08da4e5b1778e73c744c60efcba28 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Fri, 29 Jul 2011 17:57:29 +0200 Subject: [PATCH 058/166] hdsploader: Fix temporary RPM constant RPM in HDSP_IO_Type (enum from hdsp.h) is 4, not 5. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdsploader/hdsploader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hdsploader/hdsploader.c b/hdsploader/hdsploader.c index bfbe3bc..9199c3a 100644 --- a/hdsploader/hdsploader.c +++ b/hdsploader/hdsploader.c @@ -28,7 +28,7 @@ static u_int32_t code[24413]; #ifndef RPM -# define RPM 5 +# define RPM 4 #endif int read_bin_file(u_int32_t *array, const char *filename) From 15aaaba184a04a436770153b5319a3fd406d2ce6 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Fri, 29 Jul 2011 17:57:30 +0200 Subject: [PATCH 059/166] hdspmixer: Fix temporary RPM constant RPM in hdsp.h's HDSP_IO_Type is 4, not 5. This patch isn't exactly necessary here, because the constant is only used internally, but to avoid confusion if somebody ever reads the code, let's use the correct value. Note that we'll drop it after the next alsa-lib release. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerCard.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hdspmixer/src/HDSPMixerCard.h b/hdspmixer/src/HDSPMixerCard.h index 656702b..faaeefa 100644 --- a/hdspmixer/src/HDSPMixerCard.h +++ b/hdspmixer/src/HDSPMixerCard.h @@ -34,7 +34,7 @@ /* temporary workaround until hdsp.h (HDSP_IO_Type gets fixed */ #ifndef RPM -# define RPM 5 +# define RPM 4 #endif class HDSPMixerWindow; From 52384d847940cce5d95748e54639acb35f5b36eb Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Fri, 20 Jan 2012 12:39:09 +0100 Subject: [PATCH 060/166] envy24control: support gtk1 only in configure.in-gtk1 Signed-off-by: Jaroslav Kysela --- envy24control/Makefile.am | 2 +- envy24control/configure.in | 17 ----------------- envy24control/configure.in-gtk2 | 9 --------- envy24control/cvscompile | 25 ------------------------- 4 files changed, 1 insertion(+), 52 deletions(-) delete mode 100644 envy24control/configure.in-gtk2 delete mode 100755 envy24control/cvscompile diff --git a/envy24control/Makefile.am b/envy24control/Makefile.am index e29c408..aaa50ee 100644 --- a/envy24control/Makefile.am +++ b/envy24control/Makefile.am @@ -6,7 +6,7 @@ envy24control_SOURCES = envy24control.c envy24control.h levelmeters.c midi.c \ profiles.c profiles.h midi.h config.c config.h envy24control_LDADD = @ENVY24CONTROL_LIBS@ EXTRA_DIST = gitcompile envy24control.1 depcomp configure.in-gtk1 \ - configure.in-gtk2 strstr_icase_blank.c new_process.c \ + strstr_icase_blank.c new_process.c \ README.profiles AUTOMAKE_OPTIONS = foreign diff --git a/envy24control/configure.in b/envy24control/configure.in index 30dc8a8..d42aee8 100644 --- a/envy24control/configure.in +++ b/envy24control/configure.in @@ -4,23 +4,6 @@ AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC -AC_ARG_WITH(gtk2, - [ --with-gtk2=yes,no Build with GTK+2 (default = yes)], - with_gtk2="$withval", with_gtk2="yes") - -if test "$with_gtk2" = "yes"; then - PKG_CHECK_MODULES(ENVY24CONTROL, gtk+-2.0 alsa >= 0.9.0) -else - -AM_PATH_GTK(1.0.1) -AM_PATH_ALSA(1.0.0) -ENVY24CONTROL_CFLAGS="$CFLAGS $ALSA_CFLAGS $GTK_CFLAGS" -ENVY24CONTROL_LIBS="$LIBS $ALSA_LIBS $GTK_LIBS" -AC_SUBST(ENVY24CONTROL_CFLAGS) -AC_SUBST(ENVY24CONTROL_LIBS) - -fi - AC_OUTPUT(Makefile) diff --git a/envy24control/configure.in-gtk2 b/envy24control/configure.in-gtk2 deleted file mode 100644 index d42aee8..0000000 --- a/envy24control/configure.in-gtk2 +++ /dev/null @@ -1,9 +0,0 @@ -AC_INIT(envy24control.c) -AM_INIT_AUTOMAKE(envy24control, 0.6.0) -AC_PROG_CC -AC_PROG_INSTALL -AC_HEADER_STDC - -PKG_CHECK_MODULES(ENVY24CONTROL, gtk+-2.0 alsa >= 0.9.0) - -AC_OUTPUT(Makefile) diff --git a/envy24control/cvscompile b/envy24control/cvscompile deleted file mode 100755 index e8a1c45..0000000 --- a/envy24control/cvscompile +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -if test "x$AUTOMAKE_DIR" = "x"; then - if test -d /usr/local/share/automake; then - AUTOMAKE_DIR=/usr/local/share/automake - fi - if test -d /usr/share/automake; then - AUTOMAKE_DIR="/usr/share/automake" - fi -fi - -for f in install-sh mkinstalldirs missing; do - cp -av $AUTOMAKE_DIR/$f . -done - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing --copy -touch depcomp -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make From 3375a08a4c20cb8f3ff5587bd5100cbcfcb95348 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 23 Jan 2012 11:40:34 +0100 Subject: [PATCH 061/166] More build fixes (gtk1 check removal from echomixer), cvscompile removal Signed-off-by: Jaroslav Kysela --- .gitignore | 15 +- ac3dec/cvscompile | 9 -- as10k1/cvscompile | 25 --- echomixer/configure.in | 18 --- echomixer/configure.in-gtk2 | 9 -- echomixer/cvscompile | 25 --- hdspconf/cvscompile | 25 --- hdsploader/cvscompile | 11 -- hdspmixer/cvscompile | 25 --- ld10k1/INSTALL | 253 +++++++++++++++++++++++-------- ld10k1/configure.in | 1 + ld10k1/cvscompile | 9 -- mixartloader/cvscompile | 11 -- pcxhrloader/cvscompile | 11 -- qlo10k1/INSTALL | 253 +++++++++++++++++++++++-------- qlo10k1/config.h.in | 24 ++- qlo10k1/configure.in | 1 + qlo10k1/cvscompile | 9 -- rmedigicontrol/configure.in | 18 --- rmedigicontrol/configure.in-gtk2 | 8 - rmedigicontrol/cvscompile | 25 --- sb16_csp/cvscompile | 25 --- seq/cvscompile | 3 - seq/sbiload/cvscompile | 25 --- sscape_ctl/cvscompile | 24 --- us428control/cvscompile | 11 -- usx2yloader/cvscompile | 11 -- vxloader/cvscompile | 11 -- 28 files changed, 418 insertions(+), 477 deletions(-) delete mode 100755 ac3dec/cvscompile delete mode 100755 as10k1/cvscompile delete mode 100644 echomixer/configure.in-gtk2 delete mode 100755 echomixer/cvscompile delete mode 100755 hdspconf/cvscompile delete mode 100755 hdsploader/cvscompile delete mode 100755 hdspmixer/cvscompile delete mode 100755 ld10k1/cvscompile delete mode 100755 mixartloader/cvscompile delete mode 100755 pcxhrloader/cvscompile delete mode 100755 qlo10k1/cvscompile delete mode 100644 rmedigicontrol/configure.in-gtk2 delete mode 100755 rmedigicontrol/cvscompile delete mode 100755 sb16_csp/cvscompile delete mode 100755 seq/cvscompile delete mode 100755 seq/sbiload/cvscompile delete mode 100755 sscape_ctl/cvscompile delete mode 100755 us428control/cvscompile delete mode 100755 usx2yloader/cvscompile delete mode 100755 vxloader/cvscompile diff --git a/.gitignore b/.gitignore index cdaa897..36308dc 100644 --- a/.gitignore +++ b/.gitignore @@ -47,10 +47,16 @@ echomixer/Makefile echomixer/configure envy24control/Makefile envy24control/configure -hdspconf/src/hdspconf +hdspconf/Makefile hdspconf/configure -hdspmixer/src/hdspmixer +hdspconf/src/hdspconf +hdspconf/src/Makefile +hdspconf/pixmaps/Makefile +hdspmixer/Makefile hdspmixer/configure +hdspmixer/src/hdspmixer +hdspmixer/pixmaps/Makefile +hdspmixer/src/Makefile hdsploader/Makefile hdsploader/configure hwmixvolume/Makefile @@ -59,12 +65,14 @@ ld10k1/Makefile ld10k1/compile ld10k1/ld10k1d ld10k1/configure +ld10k1/m4/ ld10k1/contrib/Makefile ld10k1/contrib/emu10k1MIDIEffects/Makefile ld10k1/doc/Makefile ld10k1/dump/Makefile ld10k1/include/Makefile ld10k1/include/lo10k1 +ld10k1/include/stamp-vh ld10k1/setup/init_audigy ld10k1/setup/init_audigy_eq10 ld10k1/setup/init_live @@ -80,13 +88,16 @@ mixartloader/Makefile mixartloader/configure pcxhrloader/Makefile pcxhrloader/configure +qlo10k1/Makefile qlo10k1/configure qlo10k1/include qlo10k1/ld10k1 +qlo10k1/src/Makefile qlo10k1/src/*.moc.cpp qlo10k1/src/qlo10k1 qlo10k1/src/dlgs/*.cpp qlo10k1/src/dlgs/*.h +qlo10k1/m4/ rmedigicontrol/Makefile rmedigicontrol/configure *control/*control diff --git a/ac3dec/cvscompile b/ac3dec/cvscompile deleted file mode 100755 index 6c3452b..0000000 --- a/ac3dec/cvscompile +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -aclocal $ACLOCAL_FLAGS -autoheader -automake --add-missing --copy --foreign -touch depcomp -autoconf -./configure $* -make diff --git a/as10k1/cvscompile b/as10k1/cvscompile deleted file mode 100755 index e8a1c45..0000000 --- a/as10k1/cvscompile +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -if test "x$AUTOMAKE_DIR" = "x"; then - if test -d /usr/local/share/automake; then - AUTOMAKE_DIR=/usr/local/share/automake - fi - if test -d /usr/share/automake; then - AUTOMAKE_DIR="/usr/share/automake" - fi -fi - -for f in install-sh mkinstalldirs missing; do - cp -av $AUTOMAKE_DIR/$f . -done - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing --copy -touch depcomp -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/echomixer/configure.in b/echomixer/configure.in index 2aca4ef..9228924 100644 --- a/echomixer/configure.in +++ b/echomixer/configure.in @@ -1,27 +1,9 @@ -dnl Process this file with autoconf to produce a configure script. AC_INIT(echomixer.c) AM_INIT_AUTOMAKE(echomixer, 1.0.5) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC -AC_ARG_WITH(gtk2, - [ --with-gtk2=yes,no Build with GTK+2 (default = yes)], - with_gtk2="$withval", with_gtk2="yes") - -if test "$with_gtk2" = "yes"; then - PKG_CHECK_MODULES(ECHOMIXER, gtk+-2.0 alsa >= 1.0.0) -else - -AM_PATH_GTK(1.2.0) -AM_PATH_ALSA(1.0.0) -ECHOMIXER_CFLAGS="$CFLAGS $ALSA_CFLAGS $GTK_CFLAGS" -ECHOMIXER_LIBS="$LIBS $ALSA_LIBS $GTK_LIBS" -AC_SUBST(ECHOMIXER_CFLAGS) -AC_SUBST(ECHOMIXER_LIBS) - -fi - AC_OUTPUT(Makefile) diff --git a/echomixer/configure.in-gtk2 b/echomixer/configure.in-gtk2 deleted file mode 100644 index 9228924..0000000 --- a/echomixer/configure.in-gtk2 +++ /dev/null @@ -1,9 +0,0 @@ -AC_INIT(echomixer.c) -AM_INIT_AUTOMAKE(echomixer, 1.0.5) -AC_PROG_CC -AC_PROG_INSTALL -AC_HEADER_STDC - -PKG_CHECK_MODULES(ECHOMIXER, gtk+-2.0 alsa >= 1.0.0) - -AC_OUTPUT(Makefile) diff --git a/echomixer/cvscompile b/echomixer/cvscompile deleted file mode 100755 index 3a5537d..0000000 --- a/echomixer/cvscompile +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -if test "x$AUTOMAKE_DIR" = "x"; then - if test -d /usr/local/share/automake; then - AUTOMAKE_DIR=/usr/local/share/automake - fi - if test -d /usr/share/automake; then - AUTOMAKE_DIR="/usr/share/automake" - fi -fi - -for f in install-sh mkinstalldirs missing; do - cp -av $AUTOMAKE_DIR/$f . -done - -aclocal $ACLOCAL_FLAGS -automake --add-missing --copy -touch depcomp -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/hdspconf/cvscompile b/hdspconf/cvscompile deleted file mode 100755 index e8a1c45..0000000 --- a/hdspconf/cvscompile +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -if test "x$AUTOMAKE_DIR" = "x"; then - if test -d /usr/local/share/automake; then - AUTOMAKE_DIR=/usr/local/share/automake - fi - if test -d /usr/share/automake; then - AUTOMAKE_DIR="/usr/share/automake" - fi -fi - -for f in install-sh mkinstalldirs missing; do - cp -av $AUTOMAKE_DIR/$f . -done - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing --copy -touch depcomp -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/hdsploader/cvscompile b/hdsploader/cvscompile deleted file mode 100755 index 5daa701..0000000 --- a/hdsploader/cvscompile +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/hdspmixer/cvscompile b/hdspmixer/cvscompile deleted file mode 100755 index 3a5537d..0000000 --- a/hdspmixer/cvscompile +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -if test "x$AUTOMAKE_DIR" = "x"; then - if test -d /usr/local/share/automake; then - AUTOMAKE_DIR=/usr/local/share/automake - fi - if test -d /usr/share/automake; then - AUTOMAKE_DIR="/usr/share/automake" - fi -fi - -for f in install-sh mkinstalldirs missing; do - cp -av $AUTOMAKE_DIR/$f . -done - -aclocal $ACLOCAL_FLAGS -automake --add-missing --copy -touch depcomp -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/ld10k1/INSTALL b/ld10k1/INSTALL index 56b077d..7d1c323 100644 --- a/ld10k1/INSTALL +++ b/ld10k1/INSTALL @@ -1,16 +1,25 @@ Installation Instructions ************************* -Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free -Software Foundation, Inc. +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +2006, 2007, 2008, 2009 Free Software Foundation, Inc. -This file is free documentation; the Free Software Foundation gives -unlimited permission to copy, distribute and modify it. + Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. This file is offered as-is, +without warranty of any kind. Basic Installation ================== -These are generic installation instructions. + Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. Some packages provide this +`INSTALL' file but do not implement all of the features documented +below. The lack of an optional feature in a given package is not +necessarily a bug. More recommendations for GNU packages can be found +in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses @@ -23,9 +32,9 @@ debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. (Caching is +the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale -cache files.) +cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail @@ -35,30 +44,37 @@ some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You only need -`configure.ac' if you want to change it or regenerate `configure' using -a newer version of `autoconf'. +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. -The simplest way to compile this package is: + The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. If you're - using `csh' on an old version of System V, you might need to type - `sh ./configure' instead to prevent `csh' from trying to execute - `configure' itself. + `./configure' to configure the package for your system. - Running `configure' takes awhile. While running, it prints some - messages telling which features it is checking for. + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with - the package. + the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and - documentation. + documentation. When installing into a prefix owned by root, it is + recommended that the package be configured and built as a regular + user, and only the `make install' phase executed with root + privileges. - 5. You can remove the program binaries and object files from the + 5. Optionally, type `make installcheck' to repeat any self-tests, but + this time using the binaries in their final installed location. + This target does not install anything. Running this target as a + regular user, particularly if the prior `make install' required + root privileges, verifies that the installation completed + correctly. + + 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is @@ -67,65 +83,120 @@ The simplest way to compile this package is: all sorts of other programs in order to regenerate files that came with the distribution. + 7. Often, you can also type `make uninstall' to remove the installed + files again. In practice, not all packages have tested that + uninstallation works correctly, even though it is required by the + GNU Coding Standards. + + 8. Some packages, particularly those that use Automake, provide `make + distcheck', which can by used by developers to test that all other + targets like `make install' and `make uninstall' work correctly. + This target is generally not run by end users. + Compilers and Options ===================== -Some systems require unusual options for compilation or linking that the -`configure' script does not know about. Run `./configure --help' for -details on some of the pertinent environment variables. + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: - ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== -You can compile the package for more than one kind of computer at the + You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their -own directory. To do this, you must use a version of `make' that -supports the `VPATH' variable, such as GNU `make'. `cd' to the +own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. +source code in the directory that `configure' is in and in `..'. This +is known as a "VPATH" build. - If you have to use a `make' that does not support the `VPATH' -variable, you have to compile the package for one architecture at a -time in the source code directory. After you have installed the -package for one architecture, use `make distclean' before reconfiguring -for another architecture. + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor. Like +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. Installation Names ================== -By default, `make install' will install the package's files in -`/usr/local/bin', `/usr/local/man', etc. You can specify an -installation prefix other than `/usr/local' by giving `configure' the -option `--prefix=PREFIX'. + By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX', where PREFIX must be an +absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you -give `configure' the option `--exec-prefix=PREFIX', the package will -use PREFIX as the prefix for installing programs and libraries. -Documentation and other data files will still use the regular prefix. +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. +you can set and what kinds of files go in them. In general, the +default for these options is expressed in terms of `${prefix}', so that +specifying just `--prefix' will affect all of the other directory +specifications that were not explicitly provided. + + The most portable way to affect installation locations is to pass the +correct locations to `configure'; however, many packages provide one or +both of the following shortcuts of passing variable assignments to the +`make install' command line to change installation locations without +having to reconfigure or recompile. + + The first method involves providing an override variable for each +affected directory. For example, `make install +prefix=/alternate/directory' will choose an alternate location for all +directory configuration variables that were expressed in terms of +`${prefix}'. Any directories that were specified during `configure', +but not in terms of `${prefix}', must each be overridden at install +time for the entire installation to be relocated. The approach of +makefile variable overrides for each directory variable is required by +the GNU Coding Standards, and ideally causes no recompilation. +However, some platforms have known limitations with the semantics of +shared libraries that end up requiring recompilation when using this +method, particularly noticeable in packages that use GNU Libtool. + + The second method involves providing the `DESTDIR' variable. For +example, `make install DESTDIR=/alternate/directory' will prepend +`/alternate/directory' before all installation names. The approach of +`DESTDIR' overrides is not required by the GNU Coding Standards, and +does not work on platforms that have drive letters. On the other hand, +it does better at avoiding recompilation issues, and works well even +when some directory options were not specified in terms of `${prefix}' +at `configure' time. + +Optional Features +================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. -Optional Features -================= - -Some packages pay attention to `--enable-FEATURE' options to + Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The @@ -137,14 +208,53 @@ find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. + Some packages offer the ability to configure how verbose the +execution of `make' will be. For these packages, running `./configure +--enable-silent-rules' sets the default to minimal output, which can be +overridden with `make V=1'; while running `./configure +--disable-silent-rules' sets the default to verbose, which can be +overridden with `make V=0'. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + + On Solaris, don't put `/usr/ucb' early in your `PATH'. This +directory contains several dysfunctional programs; working variants of +these programs are available in `/usr/bin'. So, if you need `/usr/ucb' +in your `PATH', put it _after_ `/usr/bin'. + + On Haiku, software installed for all users goes in `/boot/common', +not `/usr/local'. It is recommended to use the following options: + + ./configure --prefix=/boot/common + Specifying the System Type ========================== -There may be some features `configure' cannot figure out automatically, -but needs to determine by the type of machine the package will run on. -Usually, assuming the package is built to be run on the _same_ -architectures, `configure' can figure that out, but if it prints a -message saying it cannot guess the machine type, give it the + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: @@ -152,14 +262,15 @@ type, such as `sun4', or a canonical name which has the form: where SYSTEM can have one of these forms: - OS KERNEL-OS + OS + KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should -use the `--target=TYPE' option to select the type of system they will +use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a @@ -170,9 +281,9 @@ eventually be run) with `--host=TYPE'. Sharing Defaults ================ -If you want to set default values for `configure' scripts to share, you -can create a site shell script called `config.site' that gives default -values for variables like `CC', `cache_file', and `prefix'. + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. @@ -181,7 +292,7 @@ A warning: not all `configure' scripts look for a site script. Defining Variables ================== -Variables not defined in a site shell script can be set in the + Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set @@ -190,21 +301,29 @@ them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is -overridden in the site shell script). Here is a another example: +overridden in the site shell script). - /bin/bash ./configure CONFIG_SHELL=/bin/bash +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf bug. Until the bug is fixed you can use this workaround: -Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent -configuration-related scripts to be executed by `/bin/bash'. + CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== -`configure' recognizes the following options to control how it operates. + `configure' recognizes the following options to control how it +operates. `--help' `-h' - Print a summary of the options to `configure', and exit. + Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' + Print a summary of the options unique to this package's + `configure', and exit. The `short' variant lists options used + only in the top level, while the `recursive' variant lists options + also present in any nested packages. `--version' `-V' @@ -231,6 +350,16 @@ configuration-related scripts to be executed by `/bin/bash'. Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. +`--prefix=DIR' + Use DIR as the installation prefix. *note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. + +`--no-create' +`-n' + Run the configure checks, but stop before creating any output + files. + `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. diff --git a/ld10k1/configure.in b/ld10k1/configure.in index f1fc8d0..b04fa34 100644 --- a/ld10k1/configure.in +++ b/ld10k1/configure.in @@ -1,5 +1,6 @@ AC_INIT(src/ld10k1.c) AM_INIT_AUTOMAKE(ld10k1, 0.1.8p1) +AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_HEADERS(config.h) AC_PROG_CC diff --git a/ld10k1/cvscompile b/ld10k1/cvscompile deleted file mode 100755 index 5ddd1ec..0000000 --- a/ld10k1/cvscompile +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -autoreconf -fi -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/mixartloader/cvscompile b/mixartloader/cvscompile deleted file mode 100755 index 5daa701..0000000 --- a/mixartloader/cvscompile +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/pcxhrloader/cvscompile b/pcxhrloader/cvscompile deleted file mode 100755 index 5daa701..0000000 --- a/pcxhrloader/cvscompile +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/qlo10k1/INSTALL b/qlo10k1/INSTALL index 56b077d..7d1c323 100644 --- a/qlo10k1/INSTALL +++ b/qlo10k1/INSTALL @@ -1,16 +1,25 @@ Installation Instructions ************************* -Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free -Software Foundation, Inc. +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +2006, 2007, 2008, 2009 Free Software Foundation, Inc. -This file is free documentation; the Free Software Foundation gives -unlimited permission to copy, distribute and modify it. + Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. This file is offered as-is, +without warranty of any kind. Basic Installation ================== -These are generic installation instructions. + Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. Some packages provide this +`INSTALL' file but do not implement all of the features documented +below. The lack of an optional feature in a given package is not +necessarily a bug. More recommendations for GNU packages can be found +in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses @@ -23,9 +32,9 @@ debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. (Caching is +the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale -cache files.) +cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail @@ -35,30 +44,37 @@ some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You only need -`configure.ac' if you want to change it or regenerate `configure' using -a newer version of `autoconf'. +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. -The simplest way to compile this package is: + The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. If you're - using `csh' on an old version of System V, you might need to type - `sh ./configure' instead to prevent `csh' from trying to execute - `configure' itself. + `./configure' to configure the package for your system. - Running `configure' takes awhile. While running, it prints some - messages telling which features it is checking for. + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with - the package. + the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and - documentation. + documentation. When installing into a prefix owned by root, it is + recommended that the package be configured and built as a regular + user, and only the `make install' phase executed with root + privileges. - 5. You can remove the program binaries and object files from the + 5. Optionally, type `make installcheck' to repeat any self-tests, but + this time using the binaries in their final installed location. + This target does not install anything. Running this target as a + regular user, particularly if the prior `make install' required + root privileges, verifies that the installation completed + correctly. + + 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is @@ -67,65 +83,120 @@ The simplest way to compile this package is: all sorts of other programs in order to regenerate files that came with the distribution. + 7. Often, you can also type `make uninstall' to remove the installed + files again. In practice, not all packages have tested that + uninstallation works correctly, even though it is required by the + GNU Coding Standards. + + 8. Some packages, particularly those that use Automake, provide `make + distcheck', which can by used by developers to test that all other + targets like `make install' and `make uninstall' work correctly. + This target is generally not run by end users. + Compilers and Options ===================== -Some systems require unusual options for compilation or linking that the -`configure' script does not know about. Run `./configure --help' for -details on some of the pertinent environment variables. + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: - ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== -You can compile the package for more than one kind of computer at the + You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their -own directory. To do this, you must use a version of `make' that -supports the `VPATH' variable, such as GNU `make'. `cd' to the +own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. +source code in the directory that `configure' is in and in `..'. This +is known as a "VPATH" build. - If you have to use a `make' that does not support the `VPATH' -variable, you have to compile the package for one architecture at a -time in the source code directory. After you have installed the -package for one architecture, use `make distclean' before reconfiguring -for another architecture. + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor. Like +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. Installation Names ================== -By default, `make install' will install the package's files in -`/usr/local/bin', `/usr/local/man', etc. You can specify an -installation prefix other than `/usr/local' by giving `configure' the -option `--prefix=PREFIX'. + By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX', where PREFIX must be an +absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you -give `configure' the option `--exec-prefix=PREFIX', the package will -use PREFIX as the prefix for installing programs and libraries. -Documentation and other data files will still use the regular prefix. +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. +you can set and what kinds of files go in them. In general, the +default for these options is expressed in terms of `${prefix}', so that +specifying just `--prefix' will affect all of the other directory +specifications that were not explicitly provided. + + The most portable way to affect installation locations is to pass the +correct locations to `configure'; however, many packages provide one or +both of the following shortcuts of passing variable assignments to the +`make install' command line to change installation locations without +having to reconfigure or recompile. + + The first method involves providing an override variable for each +affected directory. For example, `make install +prefix=/alternate/directory' will choose an alternate location for all +directory configuration variables that were expressed in terms of +`${prefix}'. Any directories that were specified during `configure', +but not in terms of `${prefix}', must each be overridden at install +time for the entire installation to be relocated. The approach of +makefile variable overrides for each directory variable is required by +the GNU Coding Standards, and ideally causes no recompilation. +However, some platforms have known limitations with the semantics of +shared libraries that end up requiring recompilation when using this +method, particularly noticeable in packages that use GNU Libtool. + + The second method involves providing the `DESTDIR' variable. For +example, `make install DESTDIR=/alternate/directory' will prepend +`/alternate/directory' before all installation names. The approach of +`DESTDIR' overrides is not required by the GNU Coding Standards, and +does not work on platforms that have drive letters. On the other hand, +it does better at avoiding recompilation issues, and works well even +when some directory options were not specified in terms of `${prefix}' +at `configure' time. + +Optional Features +================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. -Optional Features -================= - -Some packages pay attention to `--enable-FEATURE' options to + Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The @@ -137,14 +208,53 @@ find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. + Some packages offer the ability to configure how verbose the +execution of `make' will be. For these packages, running `./configure +--enable-silent-rules' sets the default to minimal output, which can be +overridden with `make V=1'; while running `./configure +--disable-silent-rules' sets the default to verbose, which can be +overridden with `make V=0'. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + + On Solaris, don't put `/usr/ucb' early in your `PATH'. This +directory contains several dysfunctional programs; working variants of +these programs are available in `/usr/bin'. So, if you need `/usr/ucb' +in your `PATH', put it _after_ `/usr/bin'. + + On Haiku, software installed for all users goes in `/boot/common', +not `/usr/local'. It is recommended to use the following options: + + ./configure --prefix=/boot/common + Specifying the System Type ========================== -There may be some features `configure' cannot figure out automatically, -but needs to determine by the type of machine the package will run on. -Usually, assuming the package is built to be run on the _same_ -architectures, `configure' can figure that out, but if it prints a -message saying it cannot guess the machine type, give it the + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: @@ -152,14 +262,15 @@ type, such as `sun4', or a canonical name which has the form: where SYSTEM can have one of these forms: - OS KERNEL-OS + OS + KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should -use the `--target=TYPE' option to select the type of system they will +use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a @@ -170,9 +281,9 @@ eventually be run) with `--host=TYPE'. Sharing Defaults ================ -If you want to set default values for `configure' scripts to share, you -can create a site shell script called `config.site' that gives default -values for variables like `CC', `cache_file', and `prefix'. + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. @@ -181,7 +292,7 @@ A warning: not all `configure' scripts look for a site script. Defining Variables ================== -Variables not defined in a site shell script can be set in the + Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set @@ -190,21 +301,29 @@ them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is -overridden in the site shell script). Here is a another example: +overridden in the site shell script). - /bin/bash ./configure CONFIG_SHELL=/bin/bash +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf bug. Until the bug is fixed you can use this workaround: -Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent -configuration-related scripts to be executed by `/bin/bash'. + CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== -`configure' recognizes the following options to control how it operates. + `configure' recognizes the following options to control how it +operates. `--help' `-h' - Print a summary of the options to `configure', and exit. + Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' + Print a summary of the options unique to this package's + `configure', and exit. The `short' variant lists options used + only in the top level, while the `recursive' variant lists options + also present in any nested packages. `--version' `-V' @@ -231,6 +350,16 @@ configuration-related scripts to be executed by `/bin/bash'. Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. +`--prefix=DIR' + Use DIR as the installation prefix. *note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. + +`--no-create' +`-n' + Run the configure checks, but stop before creating any output + files. + `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. diff --git a/qlo10k1/config.h.in b/qlo10k1/config.h.in index 215c9bd..f0b12a9 100644 --- a/qlo10k1/config.h.in +++ b/qlo10k1/config.h.in @@ -1,5 +1,8 @@ /* config.h.in. Generated from configure.in by autoheader. */ +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H @@ -33,6 +36,10 @@ /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + /* Name of package */ #undef PACKAGE @@ -48,6 +55,9 @@ /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME +/* Define to the home page for this package. */ +#undef PACKAGE_URL + /* Define to the version of this package. */ #undef PACKAGE_VERSION @@ -60,6 +70,14 @@ /* Defined if on Win32 platform */ #undef WIN32 -/* Define to 1 if your processor stores words with the most significant byte - first (like Motorola and SPARC, unlike Intel and VAX). */ -#undef WORDS_BIGENDIAN +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif diff --git a/qlo10k1/configure.in b/qlo10k1/configure.in index 86c32a0..da6ea97 100644 --- a/qlo10k1/configure.in +++ b/qlo10k1/configure.in @@ -1,5 +1,6 @@ AC_INIT(src/main.cpp) AM_INIT_AUTOMAKE(qlo10k1, 0.1.2p1) +AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_HEADERS(config.h) AC_PROG_CXX AC_PROG_LD diff --git a/qlo10k1/cvscompile b/qlo10k1/cvscompile deleted file mode 100755 index 5ddd1ec..0000000 --- a/qlo10k1/cvscompile +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -autoreconf -fi -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/rmedigicontrol/configure.in b/rmedigicontrol/configure.in index 1bb1986..bc4c605 100644 --- a/rmedigicontrol/configure.in +++ b/rmedigicontrol/configure.in @@ -3,24 +3,6 @@ AM_INIT_AUTOMAKE(rmedigicontrol, 0.3.5a) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC - -AC_ARG_WITH(gtk2, - [ --with-gtk2=yes,no Build with GTK+2 (default = yes)], - with_gtk2="$withval", with_gtk2="yes") - -if test "$with_gtk2" = "yes"; then - PKG_CHECK_MODULES(RMEDIGICONTROL, gtk+-2.0 alsa >= 1.0.0) -else - -AM_PATH_GTK(1.0.1) -AM_PATH_ALSA(1.0.0) -RMEDIGICONTROL_CFLAGS="$CFLAGS $ALSA_CFLAGS $GTK_CFLAGS" -RMEDIGICONTROL_LIBS="$LIBS $ALSA_LIBS $GTK_LIBS" -AC_SUBST(RMEDIGICONTROL_CFLAGS) -AC_SUBST(RMEDIGICONTROL_LIBS) - -fi - AC_OUTPUT(Makefile) diff --git a/rmedigicontrol/configure.in-gtk2 b/rmedigicontrol/configure.in-gtk2 deleted file mode 100644 index bc4c605..0000000 --- a/rmedigicontrol/configure.in-gtk2 +++ /dev/null @@ -1,8 +0,0 @@ -AC_INIT(rmedigicontrol.c) -AM_INIT_AUTOMAKE(rmedigicontrol, 0.3.5a) -AC_PROG_CC -AC_PROG_INSTALL -AC_HEADER_STDC -PKG_CHECK_MODULES(RMEDIGICONTROL, gtk+-2.0 alsa >= 1.0.0) - -AC_OUTPUT(Makefile) diff --git a/rmedigicontrol/cvscompile b/rmedigicontrol/cvscompile deleted file mode 100755 index e8a1c45..0000000 --- a/rmedigicontrol/cvscompile +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -if test "x$AUTOMAKE_DIR" = "x"; then - if test -d /usr/local/share/automake; then - AUTOMAKE_DIR=/usr/local/share/automake - fi - if test -d /usr/share/automake; then - AUTOMAKE_DIR="/usr/share/automake" - fi -fi - -for f in install-sh mkinstalldirs missing; do - cp -av $AUTOMAKE_DIR/$f . -done - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing --copy -touch depcomp -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/sb16_csp/cvscompile b/sb16_csp/cvscompile deleted file mode 100755 index e8a1c45..0000000 --- a/sb16_csp/cvscompile +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -if test "x$AUTOMAKE_DIR" = "x"; then - if test -d /usr/local/share/automake; then - AUTOMAKE_DIR=/usr/local/share/automake - fi - if test -d /usr/share/automake; then - AUTOMAKE_DIR="/usr/share/automake" - fi -fi - -for f in install-sh mkinstalldirs missing; do - cp -av $AUTOMAKE_DIR/$f . -done - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing --copy -touch depcomp -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/seq/cvscompile b/seq/cvscompile deleted file mode 100755 index 57bb7dc..0000000 --- a/seq/cvscompile +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -make CVSCOMPILE_ARGS="$*" diff --git a/seq/sbiload/cvscompile b/seq/sbiload/cvscompile deleted file mode 100755 index e8a1c45..0000000 --- a/seq/sbiload/cvscompile +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -if test "x$AUTOMAKE_DIR" = "x"; then - if test -d /usr/local/share/automake; then - AUTOMAKE_DIR=/usr/local/share/automake - fi - if test -d /usr/share/automake; then - AUTOMAKE_DIR="/usr/share/automake" - fi -fi - -for f in install-sh mkinstalldirs missing; do - cp -av $AUTOMAKE_DIR/$f . -done - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing --copy -touch depcomp -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/sscape_ctl/cvscompile b/sscape_ctl/cvscompile deleted file mode 100755 index 01e8151..0000000 --- a/sscape_ctl/cvscompile +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -if test "x$AUTOMAKE_DIR" = "x"; then - if test -d /usr/local/share/automake; then - AUTOMAKE_DIR=/usr/local/share/automake - fi - if test -d /usr/share/automake; then - AUTOMAKE_DIR="/usr/share/automake" - fi -fi - -for f in install-sh mkinstalldirs missing; do - cp -av $AUTOMAKE_DIR/$f . -done - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/us428control/cvscompile b/us428control/cvscompile deleted file mode 100755 index 5daa701..0000000 --- a/us428control/cvscompile +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/usx2yloader/cvscompile b/usx2yloader/cvscompile deleted file mode 100755 index 5daa701..0000000 --- a/usx2yloader/cvscompile +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/vxloader/cvscompile b/vxloader/cvscompile deleted file mode 100755 index 5daa701..0000000 --- a/vxloader/cvscompile +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make From 234fa1f79a54bba02ad23ddabe63ab0b6b1e374c Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 23 Jan 2012 11:45:15 +0100 Subject: [PATCH 062/166] Remove configure.in-gtk2 from Makefiles... Signed-off-by: Jaroslav Kysela --- echomixer/Makefile.am | 2 +- rmedigicontrol/Makefile.am | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/echomixer/Makefile.am b/echomixer/Makefile.am index 1af72c0..ee08822 100644 --- a/echomixer/Makefile.am +++ b/echomixer/Makefile.am @@ -3,7 +3,7 @@ bin_PROGRAMS = echomixer man_MANS = echomixer_SOURCES = echomixer.c echomixer_LDADD = @ECHOMIXER_LIBS@ -EXTRA_DIST = gitcompile configure.in-gtk1 configure.in-gtk2 +EXTRA_DIST = gitcompile configure.in-gtk1 AUTOMAKE_OPTIONS = foreign alsa-dist: distdir diff --git a/rmedigicontrol/Makefile.am b/rmedigicontrol/Makefile.am index bf24c5c..89d552e 100644 --- a/rmedigicontrol/Makefile.am +++ b/rmedigicontrol/Makefile.am @@ -4,7 +4,7 @@ rmedigicontrol_SOURCES = rmedigicontrol.c rmedigicontrol.h level.c loopback.c rmedigicontrol_LDADD = @RMEDIGICONTROL_LIBS@ -EXTRA_DIST = gitcompile depcomp configure.in-gtk1 configure.in-gtk2 +EXTRA_DIST = gitcompile depcomp configure.in-gtk1 AUTOMAKE_OPTIONS = foreign alsa-dist: distdir From 50fb5772e6dde6e709038c44b8e453d8d50c901f Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Wed, 25 Jan 2012 08:57:04 +0100 Subject: [PATCH 063/166] Release v1.0.25 Signed-off-by: Jaroslav Kysela --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 9ed3d65..3bfeac7 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION = 1.0.24.1 +VERSION = 1.0.25 TOP = . SUBDIRS = ac3dec as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ From a680841d4a2a142981d2038e9af0a07abc74c5d7 Mon Sep 17 00:00:00 2001 From: Raymond Yau Date: Sun, 11 Mar 2012 11:37:22 +0800 Subject: [PATCH 064/166] alsa-tools: hwmixvolume - update README for au88x0 - Need to use alsa-driver kernel 3.4 for Aureal sound cards Signed-off-by: Raymond Yau Signed-off-by: Takashi Iwai --- hwmixvolume/README | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hwmixvolume/README b/hwmixvolume/README index 96bb0b4..9884ec2 100644 --- a/hwmixvolume/README +++ b/hwmixvolume/README @@ -13,5 +13,7 @@ This tool requires Python, pygtk, and alsa-pyton 1.0.22 or later. It is recommended to use at least Linux kernel 2.6.32 or alsa-driver 1.0.22; otherwise, the name of the program that is using a stream cannot be shown. +Need to use alsa-driver kernel 3.4 for Aureal sound cards +* Aureal Vortex/Vortex2/Advantage (driver: snd-au8820, snd-au8830, snd-au8810) Author: Clemens Ladisch From 7aa4a74f88d74de26886ce9203a5de2b8a905a84 Mon Sep 17 00:00:00 2001 From: David Henningsson Date: Thu, 22 Mar 2012 17:47:02 +0100 Subject: [PATCH 065/166] hdajackretask: Add new program for easy retask of hda pin nodes Most HDA Intel soundcards are to some degree retaskable, i e can be used for more than one thing. This tool is a GUI to make it easy to retask your jacks - e g, turn your Mic jack into an extra Headphone, or why not make them both line outs and connect them to your surround receiver? Signed-off-by: David Henningsson --- Makefile | 2 +- hdajackretask/Makefile | 18 + hdajackretask/README | 52 +++ hdajackretask/apply-changes.c | 285 ++++++++++++++ hdajackretask/apply-changes.h | 15 + hdajackretask/gitcompile | 3 + hdajackretask/main-gtk.c | 523 +++++++++++++++++++++++++ hdajackretask/sysfs-pin-configs.c | 626 ++++++++++++++++++++++++++++++ hdajackretask/sysfs-pin-configs.h | 63 +++ 9 files changed, 1586 insertions(+), 1 deletion(-) create mode 100644 hdajackretask/Makefile create mode 100644 hdajackretask/README create mode 100644 hdajackretask/apply-changes.c create mode 100644 hdajackretask/apply-changes.h create mode 100755 hdajackretask/gitcompile create mode 100644 hdajackretask/main-gtk.c create mode 100644 hdajackretask/sysfs-pin-configs.c create mode 100644 hdajackretask/sysfs-pin-configs.h diff --git a/Makefile b/Makefile index 3bfeac7..893b394 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ TOP = . SUBDIRS = ac3dec as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ us428control usx2yloader vxloader echomixer ld10k1 qlo10k1 \ - hwmixvolume + hwmixvolume hdajackretask all: @for i in $(SUBDIRS); do \ diff --git a/hdajackretask/Makefile b/hdajackretask/Makefile new file mode 100644 index 0000000..c9c4043 --- /dev/null +++ b/hdajackretask/Makefile @@ -0,0 +1,18 @@ +SOURCES = main-gtk.c sysfs-pin-configs.c apply-changes.c + +build: + $(shell sed 's/\\/\\\\/g;s/"/\\"/g;s/^/"/;s/$$/\\n"/;' < README > README.generated.h) + gcc -g -O0 -Wall -o hda-jack-retask $(SOURCES) $(shell pkg-config --cflags --libs gtk+-3.0) + +clean: + -rm hda-jack-retask + -rm README.generated.h + +install: + install -Dm755 hda-jack-retask $(DESTDIR)/usr/bin/hda-jack-retask + install -Dm644 README $(DESTDIR)/usr/share/doc/hda-jack-retask/README + +uninstall: + -rm $(DESTDIR)/usr/bin/hda-jack-retask + +.PHONY: build install uninstall diff --git a/hdajackretask/README b/hdajackretask/README new file mode 100644 index 0000000..68f62b1 --- /dev/null +++ b/hdajackretask/README @@ -0,0 +1,52 @@ +Documentation for hda-jack-retask +================================= + +Most HDA Intel soundcards are to some degree retaskable, i e can be used for more than one thing. This tool is a GUI to make it easy to retask your jacks - e g, turn your Mic jack into an extra Headphone, or why not make them both line outs and connect them to your surround receiver? + +Quickstart +========== + +Start the application "hda-jack-retask" from the command line. +Select a codec in the top bar; some people have only one - if you have more than one, one is the "main" one, and the rest are probably HDMI codecs. + +All jacks (and other inputs/outputs) are shown under "Pin configuration". To override one of your jacks, click the "Override" checkbox for that pin and select the desired function. +Note: If you select a "Line out (back)" override, you should also have a "Line out (front)" override. A "Line out (Center/LFE)" override will only work with the previous two overrides, and so on. + +You can try out your new configuration by clicking "Apply now". To make your new configuration the boot up default, click "Install boot override". +Doing any of these requires root privileges, so you will likely be asked for your password. + +Quickend +======== + +Did you screw up? Click the "Remove boot override" button, and once the process has completed, shut down your computer, wait a little while and turn it on again. You should now be back where you started. + +Did it work? +============ + +If it did, be happy, share your joy, do something nice! + +If it didn't, here are some things to try: + + * Go into alsamixer and see if there are new volume controls, and see if they are unmuted and set to a reasonable value. + + * Sometimes the driver does not shut off unconnected pins (if they're unconnected, why worry?). You might be able to fix this by turning your computer completely off for a little while. + + * See the "model=auto" option below + +If this does not help, chances are high you're running into either a driver or a hardware limitation. You might run into driver bugs (maybe nobody has ever tested four headphones before!). If you do, feel free to report them on the alsa-devel mailinglist: however, due to lack of manpower, chances are this will be dealt with at a very low priority (having sound working out of the box for a standard configuration, is more important than supporting strange configurations). However, if you are a kernel hacker and come up with a patch that solves your problem without screwing up anything else, chances are pretty high it will be merged. + +If you suspect the problem is with this GUI application rather than the kernel driver, feel free to write me an email (and if you like, include a patch!). If so, write to diwic@ubuntu.com. + +Options +======= + + * Show unconnected pins +Your BIOS is responsible for setting up what pins on the codec that are actually connected to something and which ones are not. Sometimes BIOS is buggy, and will not show all your jacks. If you have a jack your BIOS says you haven't, you can try enabling random pins and see if it works. + + * Set Model=auto +Some codecs, especially older ones, are hard-coded to use a specific model, and thus will not care about your overrides. In many cases and with a reasonably new kernel, the auto parser now works well for these codecs as well. You can force the auto parser to be used by checking this box. In some cases, though, the explicit model is there for a reason, if so, you're stuck. + + * Advanced override +This is for the experts only. It makes you select each configuration field individually, instead of just a few predefined values that make sense. Note that most combinations here are invalid in one way or the other, so you should probably not mess with this unless you have read and understood the "Configuration Default" section of the HD Audio specification. (Which, at the time of this writing, is available here: +http://www.intel.com/content/dam/doc/product-specification/high-definition-audio-specification.pdf ) + diff --git a/hdajackretask/apply-changes.c b/hdajackretask/apply-changes.c new file mode 100644 index 0000000..eda404e --- /dev/null +++ b/hdajackretask/apply-changes.c @@ -0,0 +1,285 @@ +/* Copyright 2011 David Henningsson, Canonical Ltd. + License: GPLv2+ +*/ + +#include +#include +#include +#include +#include +#include + +#include "apply-changes.h" + +static gchar* tempdir = NULL; +static gchar* scriptfile = NULL; +static gchar* errorfile = NULL; + +static gboolean ensure_tempdir(GError** err) +{ + if (!tempdir) { + tempdir = g_dir_make_tmp("hda-jack-retask-XXXXXX", err); + if (!tempdir) + return FALSE; + scriptfile = g_strdup_printf("%s/script.sh", tempdir); + errorfile = g_strdup_printf("%s/errors.log", tempdir); + } + g_unlink(errorfile); /* Ignore file does not exist error */ + return TRUE; +} + +static gboolean create_reconfig_script(pin_configs_t* pins, int entries, int card, int device, + const char* model, GError** err) +{ + gchar* hwdir = g_strdup_printf("/sys/class/sound/hwC%dD%d", card, device); + gchar destbuf[120*40] = "#!/bin/sh\n"; + int bufleft = sizeof(destbuf) - strlen(destbuf); + gboolean ok = FALSE; + gchar* s = destbuf + strlen(destbuf); + + if (!ensure_tempdir(err)) + goto cleanup; + + if (model) { + int l = g_snprintf(s, bufleft, "echo \"%s\" | tee %s/modelname 2>>%s\n", + model, hwdir, errorfile); + bufleft-=l; + s+=l; + } + + while (entries) { + int l = g_snprintf(s, bufleft, "echo \"0x%02x 0x%08x\" | tee %s/user_pin_configs 2>>%s\n", + pins->nid, (unsigned int) actual_pin_config(pins), hwdir, errorfile); + bufleft-=l; + s+=l; + pins++; + entries--; + } + + if (bufleft < g_snprintf(s, bufleft, "echo 1 | tee %s/reconfig 2>>%s", hwdir, errorfile)) { + g_set_error(err, 0, 0, "Bug in %s:%d!", __FILE__, __LINE__); + goto cleanup; + } + + if (!g_file_set_contents(scriptfile, destbuf, -1, err)) + goto cleanup; + + ok = TRUE; +cleanup: + g_free(hwdir); + return ok; +} + + +//#define SUDO_COMMAND "gksudo --description \"Jack retasking\"" +#define SUDO_COMMAND "pkexec" + +gboolean run_sudo_script(const gchar* script_name, GError** err) +{ + gchar* errfilecontents = NULL; + gchar* cmdline = g_strdup_printf("%s %s", SUDO_COMMAND, script_name); + int exit_status; + gsize errlen; + gboolean ok; + + g_chmod(script_name, 0755); + g_spawn_command_line_sync(cmdline, NULL, NULL, &exit_status, NULL); + if (errorfile && g_file_get_contents(errorfile, &errfilecontents, &errlen, NULL) && errlen) { + g_set_error(err, 0, 0, "%s", errfilecontents); + ok = FALSE; + } + else ok = TRUE; + + g_free(errfilecontents); + g_free(cmdline); + return ok; +} + +static gchar* get_pulseaudio_client_conf() +{ + return g_strdup_printf("%s/.pulse/client.conf", g_get_home_dir()); +} + +static gboolean kill_pulseaudio(gboolean* was_killed, int card, GError** err) +{ + gchar* fuser = NULL, *fuser2 = NULL; + gchar* s = NULL; + gchar* clientconf = NULL; + gboolean ok; + *was_killed = FALSE; + /* Is PA having a lock on the sound card? */ + s = g_strdup_printf("fuser -v /dev/snd/controlC%d", card); + /* Due to some bug in fuser, stdout and stderr output is unclear. Better check both. */ + if (!(ok = g_spawn_command_line_sync(s, &fuser, &fuser2, NULL, err))) + goto cleanup; + if ((ok = strstr(fuser, "pulseaudio") == NULL && strstr(fuser2, "pulseaudio") == NULL)) + goto cleanup; // PulseAudio not locking the sound card + + clientconf = get_pulseaudio_client_conf(); + if (!(ok = !g_file_test(clientconf, G_FILE_TEST_EXISTS))) { + g_set_error(err, 0, 0, "Cannot block PulseAudio from respawning:\n" + "Please either remove '%s' or kill PulseAudio manually.", clientconf); + goto cleanup; + } + + if (!(ok = g_file_set_contents(clientconf, "autospawn=no\n", -1, err))) + goto cleanup; + + *was_killed = TRUE; + ok = g_spawn_command_line_sync("pulseaudio -k", NULL, NULL, NULL, err); + +cleanup: + g_free(clientconf); + g_free(fuser); + g_free(fuser2); + g_free(s); + return ok; +} + +static gboolean restore_pulseaudio(gboolean was_killed, GError** err) +{ + gchar* clientconf = get_pulseaudio_client_conf(); + if (was_killed && g_unlink(clientconf) != 0) { + g_set_error(err, 0, 0, "%s", g_strerror(errno)); + g_free(clientconf); + return FALSE; + } + g_free(clientconf); + return TRUE; +} + +gboolean apply_changes_reconfig(pin_configs_t* pins, int entries, int card, int device, + const char* model, GError** err) +{ + gboolean result = FALSE; +// gchar* script_name = NULL; + gboolean pa_killed = FALSE; + /* Check for users of the sound card */ + /* Kill pulseaudio if necessary (and possible) */ + if (!kill_pulseaudio(&pa_killed, card, err)) + goto cleanup; + /* Create script */ + if (!create_reconfig_script(pins, entries, card, device, model, err)) + goto cleanup; + /* Run script as root */ + if (!run_sudo_script(scriptfile, err)) + goto cleanup; + result = TRUE; +cleanup: + if (!restore_pulseaudio(pa_killed, result ? err : NULL)) { + result = FALSE; + } +// g_free(script_name); + return result; +} + +static gboolean create_firmware_file(pin_configs_t* pins, int entries, int card, int device, + const char* model, GError** err) +{ + gboolean ok; + gchar destbuf[40*40] = ""; + gchar* s = destbuf; + gchar* filename = g_strdup_printf("%s/hda-jack-retask.fw", tempdir); + unsigned int address, codec_vendorid, codec_ssid; + int bufleft = sizeof(destbuf); + int l; + + get_codec_header(card, device, &address, &codec_vendorid, &codec_ssid); + l = g_snprintf(s, bufleft, "[codec]\n0x%08x 0x%08x %u\n\n[pincfg]\n", codec_vendorid, codec_ssid, address); + bufleft -= l; + s += l; + + while (entries) { + l = g_snprintf(s, bufleft, "0x%02x 0x%08x\n", pins->nid, (unsigned int) actual_pin_config(pins)); + bufleft -= l; + s += l; + pins++; + entries--; + } + + if (model) { + int l = g_snprintf(s, bufleft, "\n[model]\n%s\n", model); + bufleft-=l; + s+=l; + } + + ok = g_file_set_contents(filename, destbuf, -1, err); + g_free(filename); + return ok; +} + + +static const gchar* remove_script = +"#!/bin/sh\n" +"rm /etc/modprobe.d/hda-jack-retask.conf 2>>%s\n" +"rm /lib/firmware/hda-jack-retask.fw 2>>%s\n"; + +static const gchar* retask_conf = +"# This file was added by the program 'hda-jack-retask'.\n" +"# If you want to revert the changes made by this program, you can simply erase this file and reboot your computer.\n" +"options snd-hda-intel patch=hda-jack-retask.fw,hda-jack-retask.fw,hda-jack-retask.fw,hda-jack-retask.fw\n"; + +static const gchar* install_script = +"#!/bin/sh\n" +"mv %s/hda-jack-retask.fw /lib/firmware/hda-jack-retask.fw\n 2>>%s\n" +"mv %s/hda-jack-retask.conf /etc/modprobe.d/hda-jack-retask.conf 2>>%s\n"; + +gboolean apply_changes_boot(pin_configs_t* pins, int entries, int card, int device, + const char* model, GError** err) +{ + gchar *s; + + if (!ensure_tempdir(err)) + return FALSE; + + if (!create_firmware_file(pins, entries, card, device, model, err)) + return FALSE; + + /* Create hda-jack-retask.conf */ + s = g_strdup_printf("%s/hda-jack-retask.conf", tempdir); + if (!g_file_set_contents(s, retask_conf, -1, err)) { + g_free(s); + return FALSE; + } + g_free(s); + + /* Create install script */ + s = g_strdup_printf(install_script, tempdir, errorfile, tempdir, errorfile); + if (!g_file_set_contents(scriptfile, s, -1, err)) { + g_free(s); + return FALSE; + } + g_free(s); + + /* Run script as root */ + if (!run_sudo_script(scriptfile, err)) + return FALSE; + return TRUE; +} + +gboolean reset_changes_boot(GError** err) +{ + gchar *s; + + if ((g_file_test("/etc/modprobe.d/hda-jack-retask.conf", G_FILE_TEST_EXISTS) == 0) && + (g_file_test("/lib/firmware/hda-jack-retask.fw", G_FILE_TEST_EXISTS) == 0)) + { + g_set_error(err, 0, 0, "No boot override is currently installed, nothing to remove."); + return FALSE; + } + + if (!ensure_tempdir(err)) + return FALSE; + s = g_strdup_printf(remove_script, errorfile, errorfile); + if (!g_file_set_contents(scriptfile, s, -1, err)) { + g_free(s); + return FALSE; + } + g_free(s); + + /* Run script as root */ + if (!run_sudo_script(scriptfile, err)) + return FALSE; + return TRUE; +} + diff --git a/hdajackretask/apply-changes.h b/hdajackretask/apply-changes.h new file mode 100644 index 0000000..2507a6a --- /dev/null +++ b/hdajackretask/apply-changes.h @@ -0,0 +1,15 @@ +#ifndef __APPLY_CHANGES_H__ +#define __APPLY_CHANGES_H__ + +#include "sysfs-pin-configs.h" +#include + +gboolean apply_changes_reconfig(pin_configs_t* pins, int entries, int card, int device, + const char* model, GError** err); + +gboolean apply_changes_boot(pin_configs_t* pins, int entries, int card, int device, + const char* model, GError** err); +gboolean reset_changes_boot(); + +#endif + diff --git a/hdajackretask/gitcompile b/hdajackretask/gitcompile new file mode 100755 index 0000000..acc8825 --- /dev/null +++ b/hdajackretask/gitcompile @@ -0,0 +1,3 @@ +#!/bin/sh + +make GITCOMPILE_ARGS="$*" diff --git a/hdajackretask/main-gtk.c b/hdajackretask/main-gtk.c new file mode 100644 index 0000000..65d0f3a --- /dev/null +++ b/hdajackretask/main-gtk.c @@ -0,0 +1,523 @@ +/* Copyright 2011 David Henningsson, Canonical Ltd. + License: GPLv2+ +*/ + +#include +#include +#include + +#include "sysfs-pin-configs.h" +#include "apply-changes.h" + +typedef struct pin_ui_data_t { + pin_configs_t* pin_config; + typical_pins_t pins_info[32]; + GtkWidget *frame, *override, *jacktype; + + GtkWidget* free_override_cb[FREE_OVERRIDES_COUNT]; +} pin_ui_data_t; + +typedef struct ui_data_t { + GList* pin_ui_data; + GtkWidget *main_window; + GtkWidget *content_scroll_widget; + GtkWidget *content_inner_box; + GtkWidget *codec_selection_combo; + + codec_name_t* current_codec; + int sysfs_pincount; + codec_name_t sysfs_codec_names[128]; + pin_configs_t sysfs_pins[32]; + gboolean free_overrides; + gboolean trust_codec; + gboolean trust_defcfg; + gboolean model_auto; +} ui_data_t; + +static void override_toggled(GtkWidget* sender, pin_ui_data_t* data) +{ + int i; + gboolean checked = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sender)); + gtk_widget_set_sensitive(data->jacktype, checked); + for (i = 0; i < FREE_OVERRIDES_COUNT; i++) + gtk_widget_set_sensitive(data->free_override_cb[i], checked); +} + +static GtkWidget* create_pin_ui(ui_data_t* ui, pin_configs_t* pin_cfg) +{ + GtkWidget* result; + GtkContainer* box; + pin_ui_data_t* data; + + int port_conn = get_port_conn(pin_cfg->init_pin_config); + /* Do not show unconnected pins */ + if (ui->trust_defcfg && port_conn == 1) + return NULL; + + data = calloc(1, sizeof(pin_ui_data_t)); + data->pin_config = pin_cfg; + + { /* Frame */ + gchar* d = get_config_description(pin_cfg->init_pin_config); + gchar* c = g_strdup_printf("Pin ID: 0x%02x", pin_cfg->nid); + GtkWidget* label = gtk_label_new(c); + result = gtk_frame_new(d); + data->frame = result; + box = GTK_CONTAINER(gtk_box_new(GTK_ORIENTATION_VERTICAL, 2)); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + gtk_container_add(box, label); + g_free(d); + g_free(c); + } + + { /* Capabilities + gchar* s = get_caps_description(pin_cfg->pin_caps); + gchar* s2 = g_strdup_printf("Capabilities: %s", strlen(s) > 2 ? s+2 : ""); // Hack for initial comma + GtkWidget* label = gtk_label_new(s2); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + gtk_container_add(box, label); + g_free(s); + g_free(s2); */ + } + + { /* Override */ + GtkWidget* override = data->override = gtk_check_button_new_with_label("Override"); + GtkWidget* jacktype = data->jacktype = gtk_combo_box_text_new(); + GtkWidget* jacktype_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2); + int index = get_typical_pins(data->pins_info, 32, pin_cfg, ui->trust_codec); + typical_pins_t* current = data->pins_info; + while (current->name) { + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(jacktype), current->name); + current++; + } + gtk_combo_box_set_active(GTK_COMBO_BOX(jacktype), index); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(override), pin_cfg->user_override); + g_signal_connect(override, "toggled", G_CALLBACK(override_toggled), data); + + gtk_container_add(box, override); + gtk_container_add(GTK_CONTAINER(jacktype_box), jacktype); + if (!ui->free_overrides) + gtk_container_add(box, jacktype_box); + } + + /* Advanced override */ + { + int i; + GtkGrid* grid = GTK_GRID(gtk_grid_new()); + gtk_grid_set_row_spacing(grid, 2); + gtk_grid_set_column_spacing(grid, 4); + + for (i = 0; i < FREE_OVERRIDES_COUNT; i++) { + int index = -1; + int j = 0; + unsigned long act_pincfg = actual_pin_config(pin_cfg); + unsigned long mask = get_free_override_mask(i); + free_override_t* values = get_free_override_list(i); + data->free_override_cb[i] = gtk_combo_box_text_new(); + if (!values) + continue; + while (values->name) { + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(data->free_override_cb[i]), values->name); + if ((act_pincfg & mask) == values->value) + index = j; + values++; + j++; + } + if (index >= 0) + gtk_combo_box_set_active(GTK_COMBO_BOX(data->free_override_cb[i]), index); + } + + gtk_grid_attach(grid, gtk_label_new("Connectivity"), 0, 0, 1, 1); + gtk_grid_attach(grid, data->free_override_cb[0], 0, 1, 1, 1); + gtk_grid_attach(grid, gtk_label_new("Location"), 1, 0, 1, 1); + gtk_grid_attach(grid, data->free_override_cb[1], 1, 1, 1, 1); + gtk_grid_attach(grid, gtk_label_new("Device"), 2, 0, 1, 1); + gtk_grid_attach(grid, data->free_override_cb[2], 2, 1, 1, 1); + gtk_grid_attach(grid, gtk_label_new("Jack"), 3, 0, 1, 1); + gtk_grid_attach(grid, data->free_override_cb[3], 3, 1, 1, 1); + + gtk_grid_attach(grid, gtk_label_new("Color"), 0, 2, 1, 1); + gtk_grid_attach(grid, data->free_override_cb[4], 0, 3, 1, 1); + gtk_grid_attach(grid, gtk_label_new("Jack detection"), 1, 2, 1, 1); + gtk_grid_attach(grid, data->free_override_cb[5], 1, 3, 1, 1); + gtk_grid_attach(grid, gtk_label_new("Channel group"), 2, 2, 1, 1); + gtk_grid_attach(grid, data->free_override_cb[6], 2, 3, 1, 1); + gtk_grid_attach(grid, gtk_label_new("Channel (in group)"), 3, 2, 1, 1); + gtk_grid_attach(grid, data->free_override_cb[7], 3, 3, 1, 1); + + if (ui->free_overrides) + gtk_container_add(box, GTK_WIDGET(grid)); + } + override_toggled(data->override, data); + + gtk_container_add(GTK_CONTAINER(result), GTK_WIDGET(box)); + ui->pin_ui_data = g_list_prepend(ui->pin_ui_data, data); + return result; +} + +static void free_pin_ui_data(pin_ui_data_t* data) +{ + if (!data) + return; + if (data->frame) + gtk_widget_destroy(data->frame); + free(data); +} + +static gint pin_config_find(pin_ui_data_t* pin_ui, pin_configs_t* cfg) +{ + return pin_ui->pin_config == cfg ? 0 : 1; +} + +static void update_user_pin_config(ui_data_t* ui) +{ + int i; + for (i = 0; i < ui->sysfs_pincount; i++) { + pin_ui_data_t* pin_ui; + GList *pos = g_list_find_custom(ui->pin_ui_data, &ui->sysfs_pins[i], (GCompareFunc) pin_config_find); + ui->sysfs_pins[i].user_override = FALSE; + if (!pos) + continue; + pin_ui = pos->data; + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pin_ui->override))) + continue; + + if (ui->free_overrides) { + int i; + int index; + unsigned long val = 0; + for (i = 0; i < FREE_OVERRIDES_COUNT; i++) { + index = gtk_combo_box_get_active(GTK_COMBO_BOX(pin_ui->jacktype)); + if (index < 0) + break; + val += get_free_override_list(i)[index].value; + } + if (index < 0) + continue; + ui->sysfs_pins[i].user_pin_config = val; + } else { + int index; + index = gtk_combo_box_get_active(GTK_COMBO_BOX(pin_ui->jacktype)); + if (index < 0) + continue; + ui->sysfs_pins[i].user_pin_config = pin_ui->pins_info[index].pin_set; + } + ui->sysfs_pins[i].user_override = TRUE; + } + +} + +static gboolean validate_user_pin_config(ui_data_t* ui, GError** err) +{ + int i; + + if (!ui->current_codec) { + g_set_error(err, 0, 0, "You must first select a codec!"); + return FALSE; + } + update_user_pin_config(ui); + if (ui->free_overrides) + return TRUE; + + /* Check surround configs */ + for (i = 0; i < ui->sysfs_pincount; i++) { + unsigned long v = ui->sysfs_pins[i].user_pin_config; + if (!ui->sysfs_pins[i].user_override) + continue; + if ((v & 0xf0) != 0x10) + continue; + if (((v & 0xf) != 0) && !find_pin_channel_match(ui->sysfs_pins, ui->sysfs_pincount, v & 0xf0)) { + g_set_error(err, 0, 0, "This surround setup also requires a \"front\" channel override."); + return FALSE; + } + if (((v & 0xf) >= 3) && !find_pin_channel_match(ui->sysfs_pins, ui->sysfs_pincount, 2 + (v & 0xf0))) { + g_set_error(err, 0, 0, "This surround setup also requires a \"back\" channel override."); + return FALSE; + } + if ((v & 0xf) >= 3 && !find_pin_channel_match(ui->sysfs_pins, ui->sysfs_pincount, 1 + (v & 0xf0))) { + g_set_error(err, 0, 0, "This surround setup also requires a \"Center/LFE\" channel override."); + return FALSE; + } + } + return TRUE; +} + +static void show_action_result(ui_data_t* ui, GError* err, const gchar* ok_msg) +{ + GtkWidget* dialog; + const gchar* msg = err ? err->message : ok_msg; + dialog = gtk_message_dialog_new (GTK_WINDOW(ui->main_window), + GTK_DIALOG_DESTROY_WITH_PARENT, err ? GTK_MESSAGE_ERROR : GTK_MESSAGE_INFO, + GTK_BUTTONS_CLOSE, "%s", msg); + gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_destroy (dialog); + if (err) + g_error_free(err); +} + +static void apply_now_clicked(GtkButton* button, gpointer user_data) +{ + GError* err = NULL; + ui_data_t* ui = user_data; + gboolean ok = validate_user_pin_config(ui, &err); + if (ok) + apply_changes_reconfig(ui->sysfs_pins, ui->sysfs_pincount, + ui->current_codec->card, ui->current_codec->device, + ui->model_auto ? "auto" : NULL, &err); + show_action_result(ui, err, + "Ok, now go ahead and test to see if it actually worked!\n" + "(Remember, this stuff is still experimental.)"); +} + +static void apply_boot_clicked(GtkButton* button, gpointer user_data) +{ + GError* err = NULL; + ui_data_t* ui = user_data; + gboolean ok = validate_user_pin_config(ui, &err); + if (ok) + apply_changes_boot(ui->sysfs_pins, ui->sysfs_pincount, + ui->current_codec->card, ui->current_codec->device, + ui->model_auto ? "auto" : NULL, &err); + show_action_result(ui, err, + "Ok, now reboot to test to see if it actually worked!\n" + "(Remember, this stuff is still experimental.)"); +} + + +static void reset_boot_clicked(GtkButton* button, gpointer user_data) +{ + GError* err = NULL; + ui_data_t* ui = user_data; + reset_changes_boot(&err); + show_action_result(ui, err, + "The previous installed files (if any) of this program have been removed.\n" + "Reboot to finish the uninstallation."); +} + +static void resize_main_window(ui_data_t* ui) +{ + GtkAllocation a; + GtkRequisition r; + gint oldw, oldh, neww, newh, maxw, maxh; + GdkScreen* screen = gtk_window_get_screen(GTK_WINDOW(ui->main_window)); + gtk_widget_size_request(GTK_WIDGET(ui->content_inner_box), &r); + gtk_widget_get_allocation(ui->content_scroll_widget, &a); +// fprintf(stderr, "W: %d, H: %d, W: %d, H: %d\n", a.width, a.height, r.width, r.height); + gtk_window_get_size(GTK_WINDOW(ui->main_window), &oldw, &oldh); + maxw = screen ? (gdk_screen_get_width(screen)*3)/4 : INT_MAX / 4; + maxh = screen ? (gdk_screen_get_height(screen)*3)/4 : INT_MAX / 4; +// fprintf(stderr, "Before: W: %d, H: %d\n", oldw, oldh); + neww = oldw; + newh = oldh; + if (a.width < r.width) { + neww += 8 + r.width - a.width; + if (neww > maxw) + neww = maxw; + } + if (a.height < r.height) { + newh += 8 + r.height - a.height; + if (newh > maxh) + newh = maxh; + } + if (neww != oldw || newh != oldh) { + gtk_window_resize(GTK_WINDOW(ui->main_window), neww, newh); +// fprintf(stderr, "After: W: %d, H: %d\n", neww, newh); + } +} + +static void update_codec_ui(ui_data_t* ui) +{ + int codec_index = gtk_combo_box_get_active(GTK_COMBO_BOX(ui->codec_selection_combo)); + int i; + + g_list_free_full(ui->pin_ui_data, (GDestroyNotify) free_pin_ui_data); + ui->pin_ui_data = NULL; + ui->current_codec = NULL; + + if (codec_index < 0) + return; + ui->current_codec = &ui->sysfs_codec_names[codec_index]; + ui->sysfs_pincount = get_pin_configs_list(ui->sysfs_pins, 32, ui->current_codec->card, ui->current_codec->device); + for (i = 0; i < ui->sysfs_pincount; i++) { + GtkWidget *w = create_pin_ui(ui, &ui->sysfs_pins[i]); + if (w) + gtk_container_add(GTK_CONTAINER(ui->content_inner_box), w); + } + + gtk_widget_show_all(GTK_WIDGET(ui->content_inner_box)); + resize_main_window(ui); +} + +static void codec_selected(GtkComboBox* combo, gpointer user_data) +{ + update_codec_ui(user_data); +} + +static void showallpins_toggled(GtkWidget* sender, ui_data_t* ui_data) +{ + gboolean checked = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sender)); + ui_data->trust_defcfg = !checked; + update_codec_ui(ui_data); +} + +static void automodel_toggled(GtkWidget* sender, ui_data_t* ui_data) +{ + ui_data->model_auto = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sender)); +} + +static void free_override_toggled(GtkWidget* sender, ui_data_t* ui_data) +{ + update_user_pin_config(ui_data); + ui_data->free_overrides = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sender)); + update_codec_ui(ui_data); +} + +static const char* readme_text = +#include "README.generated.h" +; + +static void documentation_clicked(GtkWidget* sender, ui_data_t* ui) +{ + GtkDialog* dlg = GTK_DIALOG(gtk_dialog_new_with_buttons("Jack retasking documentation", + GTK_WINDOW(ui->main_window), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_STOCK_CLOSE, GTK_RESPONSE_NONE, NULL)); + GtkTextView* textview = GTK_TEXT_VIEW(gtk_text_view_new()); + GtkContainer* content_area = GTK_CONTAINER(gtk_dialog_get_content_area(dlg)); + GtkScrolledWindow* content_scroll = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL)); + + gtk_text_buffer_set_text(gtk_text_view_get_buffer(textview), readme_text, -1); + gtk_text_view_set_editable(textview, FALSE); + gtk_text_view_set_wrap_mode(textview, GTK_WRAP_WORD); + gtk_text_view_set_cursor_visible(textview, FALSE); + gtk_scrolled_window_add_with_viewport(content_scroll, GTK_WIDGET(textview)); + gtk_container_add(content_area, GTK_WIDGET(content_scroll)); + gtk_box_set_child_packing(GTK_BOX(content_area), GTK_WIDGET(content_scroll), TRUE, TRUE, 2, GTK_PACK_START); + + gtk_widget_show_all(GTK_WIDGET(content_area)); + + { /* Resize to fit screen */ + GdkScreen* screen = gtk_window_get_screen(GTK_WINDOW(ui->main_window)); + int neww = screen ? (gdk_screen_get_width(screen)*3)/4 : 800; + int newh = screen ? (gdk_screen_get_height(screen)*3)/4 : 600; + + gtk_window_set_default_size(GTK_WINDOW(dlg), neww, newh); + } + + gtk_dialog_run(dlg); + gtk_widget_destroy(GTK_WIDGET(dlg)); +} + +static ui_data_t* create_ui() +{ + ui_data_t* ui = calloc(sizeof(ui_data_t), 1); + GtkContainer* toplevel_box = GTK_CONTAINER(gtk_box_new(GTK_ORIENTATION_VERTICAL, 2)); + GtkContainer* toplevel_2ndbox = GTK_CONTAINER(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2)); + ui->content_inner_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 2); + GtkContainer* rightside_box = GTK_CONTAINER(gtk_box_new(GTK_ORIENTATION_VERTICAL, 2)); + ui->main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(ui->main_window), "Jack retasking for HDA Intel sound cards"); + g_signal_connect (ui->main_window, "destroy", G_CALLBACK (gtk_main_quit), NULL); + + ui->trust_codec = TRUE; + ui->trust_defcfg = TRUE; + + /* Select codec to work with */ + { + GtkWidget* combo = ui->codec_selection_combo = gtk_combo_box_text_new(); + GtkWidget* box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2); + codec_name_t *n = ui->sysfs_codec_names; + get_codec_name_list(ui->sysfs_codec_names, 128); + while (n->card != -1) { + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), n->name); + n++; + } + /* Select the first codec */ + if (ui->sysfs_codec_names->card != -1) { + gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0); + g_signal_connect(combo, "changed", G_CALLBACK(codec_selected), ui); + gtk_container_add(GTK_CONTAINER(box), gtk_label_new("Select a codec:")); + gtk_container_add(GTK_CONTAINER(box), combo); + } + else { + gtk_container_add(GTK_CONTAINER(box), gtk_label_new("No codecs found. Sorry.")); + gtk_widget_destroy(combo); + } + + gtk_container_add(toplevel_box, box); + } + + /* Add pin content area */ + { + GtkWidget* frame = gtk_frame_new("Pin configuration"); + GtkScrolledWindow* content_scroll = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL)); + ui->content_scroll_widget = GTK_WIDGET(content_scroll); + gtk_frame_set_label_align(GTK_FRAME(frame), 0.5, 0.5); + gtk_scrolled_window_add_with_viewport(content_scroll, ui->content_inner_box); + gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(content_scroll)); + gtk_container_add(toplevel_2ndbox, frame); + gtk_box_set_child_packing(GTK_BOX(toplevel_2ndbox), frame, TRUE, TRUE, 2, GTK_PACK_START); + } + + /* Create settings */ + { + GtkWidget* frame = gtk_frame_new("Options"); + GtkContainer* box = GTK_CONTAINER(gtk_button_box_new(GTK_ORIENTATION_VERTICAL)); + GtkWidget* check; + + check = gtk_check_button_new_with_label("Show unconnected pins"); + g_signal_connect(check, "toggled", G_CALLBACK(showallpins_toggled), ui); + gtk_container_add(box, check); + + check = gtk_check_button_new_with_label("Set model=auto"); + g_signal_connect(check, "toggled", G_CALLBACK(automodel_toggled), ui); + gtk_container_add(box, check); + + check = gtk_check_button_new_with_label("Advanced override"); + g_signal_connect(check, "toggled", G_CALLBACK(free_override_toggled), ui); + gtk_container_add(box, check); + + gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(box)); + gtk_container_add(rightside_box, frame); + } + + /* Create bottom right buttons */ + { + GtkWidget* button; + GtkWidget* box = gtk_button_box_new(GTK_ORIENTATION_VERTICAL); + button = gtk_button_new_with_label("Read documentation"); + g_signal_connect(button, "clicked", G_CALLBACK(documentation_clicked), ui); + gtk_container_add(GTK_CONTAINER(box), button); + button = gtk_button_new_with_label("Apply now"); + g_signal_connect(button, "clicked", G_CALLBACK(apply_now_clicked), ui); + gtk_container_add(GTK_CONTAINER(box), button); + button = gtk_button_new_with_label("Install boot override"); + g_signal_connect(button, "clicked", G_CALLBACK(apply_boot_clicked), ui); + gtk_container_add(GTK_CONTAINER(box), button); + button = gtk_button_new_with_label("Remove boot override"); + g_signal_connect(button, "clicked", G_CALLBACK(reset_boot_clicked), ui); + gtk_container_add(GTK_CONTAINER(box), button); + + gtk_container_add(rightside_box, box); + gtk_box_set_child_packing(GTK_BOX(rightside_box), box, FALSE, FALSE, 2, GTK_PACK_END); + } + + gtk_container_add(toplevel_2ndbox, GTK_WIDGET(rightside_box)); + + gtk_container_add(GTK_CONTAINER(toplevel_box), GTK_WIDGET(toplevel_2ndbox)); + gtk_box_set_child_packing(GTK_BOX(toplevel_box), GTK_WIDGET(toplevel_2ndbox), TRUE, TRUE, 2, GTK_PACK_END); + gtk_container_add(GTK_CONTAINER(ui->main_window), GTK_WIDGET(toplevel_box)); + + return ui; +} + +int main(int argc, char *argv[]) +{ + ui_data_t* ui; + gtk_init(&argc, &argv); + ui = create_ui(); + gtk_widget_show_all(ui->main_window); + if (ui->codec_selection_combo) + update_codec_ui(ui); + gtk_main(); + return 0; +} diff --git a/hdajackretask/sysfs-pin-configs.c b/hdajackretask/sysfs-pin-configs.c new file mode 100644 index 0000000..cd2897e --- /dev/null +++ b/hdajackretask/sysfs-pin-configs.c @@ -0,0 +1,626 @@ +/* Copyright 2011 David Henningsson, Canonical Ltd. + License: GPLv2+ +*/ + +#include +#include +#include "sysfs-pin-configs.h" +#include "apply-changes.h" + +int get_codec_name_list(codec_name_t* names, int entries) +{ + GDir* sysdir = g_dir_open("/sys/class/sound", 0, NULL); + int count = 0; + if (!sysdir) + return 0; + + while (entries > 1) { + gchar** cd = NULL; + gboolean ok; + const gchar* dirname = g_dir_read_name(sysdir); + if (!dirname) + break; + cd = g_strsplit_set(dirname, "CD", 9); + ok = g_strv_length(cd) == 3; + if (ok) { + gchar* filetest = g_strdup_printf("/sys/class/sound/%s/init_pin_configs", dirname); + ok = g_file_test(filetest, G_FILE_TEST_IS_REGULAR); + g_free(filetest); + } + + if (ok) { + gchar* chip_name = NULL, *vendor_name = NULL; + gchar* chip_file = g_strdup_printf("/sys/class/sound/%s/chip_name", dirname); + gchar* vendor_file = g_strdup_printf("/sys/class/sound/%s/vendor_name", dirname); + ok = g_file_get_contents(chip_file, &chip_name, NULL, NULL); + ok &= g_file_get_contents(vendor_file, &vendor_name, NULL, NULL); + if (ok) { + names->name = g_strdup_printf("%s %s", g_strchomp(vendor_name), g_strchomp(chip_name)); + } + g_free(chip_name); + g_free(vendor_name); + g_free(chip_file); + g_free(vendor_file); + } + + if (ok) { + names->card = atoi(cd[1]); + names->device = atoi(cd[2]); + + names++; + count++; + entries--; + } + g_strfreev(cd); + } + if (entries) { + names->name = NULL; + names->card = -1; + } + g_dir_close(sysdir); + return count; +} + +static unsigned long read_header_value(gchar* contents, gchar* key) +{ + gchar* s = strstr(contents, key); + s += strlen(key); + return g_ascii_strtoull(s, NULL, 0); +} + +void get_codec_header(int card, int device, unsigned int* address, + unsigned int* codec_vendorid, unsigned int* codec_ssid) +{ + gchar* filename = g_strdup_printf("/proc/asound/card%d/codec#%d", card, device); + gchar* contents = NULL; + int ok = g_file_get_contents(filename, &contents, NULL, NULL); + g_free(filename); + if (!ok) + return; + *address = read_header_value(contents, "Address: "); + *codec_vendorid = read_header_value(contents, "Vendor Id: "); + *codec_ssid = read_header_value(contents, "Subsystem Id: "); + + g_free(contents); +} + +static void get_pin_caps(pin_configs_t* pins, int entries, int card, int device) +{ + gchar* filename = g_strdup_printf("/proc/asound/card%d/codec#%d", card, device); + gchar* contents = NULL; + int ok = g_file_get_contents(filename, &contents, NULL, NULL); + g_free(filename); + if (!ok) + return; + + for (; entries; entries--, pins++) { + gchar* nodestr = g_strdup_printf("Node 0x%02x [", pins->nid); + gchar* q = strstr(contents, nodestr); + g_free(nodestr); + if (!q) + continue; + + q = strstr(q, "wcaps 0x"); + if (!q) + continue; + q += strlen("wcaps "); + pins->wid_caps = g_ascii_strtoull(q, NULL, 0); + + q = strstr(q, "Pincap 0x"); + if (!q) + continue; + q += strlen("Pincap "); + pins->pin_caps = g_ascii_strtoull(q, NULL, 0); + } + g_free(contents); +} + + +static void read_pin_overrides(pin_configs_t* pins, int entries, int card, int device, gboolean is_user) +{ + gchar* filename = g_strdup_printf("/sys/class/sound/hwC%dD%d/%s_pin_configs", card, device, is_user ? "user" : "driver"); + gchar* contents = NULL; + gchar** lines = NULL, **line_iterator; + int count = 0; + int ok = g_file_get_contents(filename, &contents, NULL, NULL); + g_free(filename); + if (!ok) + return; + line_iterator = lines = g_strsplit(contents, "\n", entries); + while (count < entries && *line_iterator) { + gchar** line = g_strsplit(*line_iterator, " ", 0); + line_iterator++; + if (g_strv_length(line) == 2) { + int nid = g_ascii_strtoull(line[0], NULL, 0) & 0xff; + unsigned long config = g_ascii_strtoull(line[1], NULL, 0); + int i; + for (i=0; i < entries; i++) + if (nid == pins[i].nid) { + if (is_user) { + pins[i].user_override = FALSE; + pins[i].user_override = config != actual_pin_config(&pins[i]); + pins[i].user_pin_config = config; + } else { + pins[i].driver_override = config != pins[i].init_pin_config; + pins[i].driver_pin_config = config; + } + } + } + g_strfreev(line); + } + g_strfreev(lines); +} + +int get_pin_configs_list(pin_configs_t* pins, int entries, int card, int device) +{ + gchar* filename = g_strdup_printf("/sys/class/sound/hwC%dD%d/init_pin_configs", card, device); + gchar* contents = NULL; + gchar** lines = NULL, **line_iterator; + int count = 0; + int ok = g_file_get_contents(filename, &contents, NULL, NULL); + g_free(filename); + if (!ok) + return 0; + line_iterator = lines = g_strsplit(contents, "\n", entries); + g_free(contents); + while (count < entries && *line_iterator) { + gchar** line = g_strsplit(*line_iterator, " ", 0); + line_iterator++; + if (g_strv_length(line) == 2) { + pins[count].nid = g_ascii_strtoull(line[0], NULL, 0); + pins[count].init_pin_config = g_ascii_strtoull(line[1], NULL, 0) & 0xffffffff; + pins[count].driver_override = FALSE; + pins[count].user_override = FALSE; + count++; + } + g_strfreev(line); + } + g_strfreev(lines); + + read_pin_overrides(pins, count, card, device, FALSE); + read_pin_overrides(pins, count, card, device, TRUE); + get_pin_caps(pins, count, card, device); + + return count; +} + +unsigned long actual_pin_config(pin_configs_t* pins) +{ + if (pins->user_override) + return pins->user_pin_config; + if (pins->driver_override) + return pins->driver_pin_config; + return pins->init_pin_config; +} + +/*** Code below taken from sound/pci/hda/hda_proc.c and hda_codec.h, (C) Takashi Iwai, GPLv2+. ****/ + +#define u32 unsigned long + +#define AC_WCAP_STEREO (1<<0) /* stereo I/O */ +#define AC_WCAP_IN_AMP (1<<1) /* AMP-in present */ +#define AC_WCAP_OUT_AMP (1<<2) /* AMP-out present */ +#define AC_WCAP_AMP_OVRD (1<<3) /* AMP-parameter override */ +#define AC_WCAP_FORMAT_OVRD (1<<4) /* format override */ +#define AC_WCAP_STRIPE (1<<5) /* stripe */ +#define AC_WCAP_PROC_WID (1<<6) /* Proc Widget */ +#define AC_WCAP_UNSOL_CAP (1<<7) /* Unsol capable */ +#define AC_WCAP_CONN_LIST (1<<8) /* connection list */ +#define AC_WCAP_DIGITAL (1<<9) /* digital I/O */ +#define AC_WCAP_POWER (1<<10) /* power control */ +#define AC_WCAP_LR_SWAP (1<<11) /* L/R swap */ +#define AC_WCAP_CP_CAPS (1<<12) /* content protection */ +#define AC_WCAP_CHAN_CNT_EXT (7<<13) /* channel count ext */ +#define AC_WCAP_DELAY (0xf<<16) +#define AC_WCAP_DELAY_SHIFT 16 +#define AC_WCAP_TYPE (0xf<<20) +#define AC_WCAP_TYPE_SHIFT 20 + +#define AC_PINCAP_IMP_SENSE (1<<0) /* impedance sense capable */ +#define AC_PINCAP_TRIG_REQ (1<<1) /* trigger required */ +#define AC_PINCAP_PRES_DETECT (1<<2) /* presence detect capable */ +#define AC_PINCAP_HP_DRV (1<<3) /* headphone drive capable */ +#define AC_PINCAP_OUT (1<<4) /* output capable */ +#define AC_PINCAP_IN (1<<5) /* input capable */ +#define AC_PINCAP_BALANCE (1<<6) /* balanced I/O capable */ +/* Note: This LR_SWAP pincap is defined in the Realtek ALC883 specification, + * but is marked reserved in the Intel HDA specification. + */ +#define AC_PINCAP_LR_SWAP (1<<7) /* L/R swap */ +/* Note: The same bit as LR_SWAP is newly defined as HDMI capability + * in HD-audio specification + */ +#define AC_PINCAP_HDMI (1<<7) /* HDMI pin */ +#define AC_PINCAP_DP (1<<24) /* DisplayPort pin, can + * coexist with AC_PINCAP_HDMI + */ +#define AC_PINCAP_VREF (0x37<<8) +#define AC_PINCAP_VREF_SHIFT 8 +#define AC_PINCAP_EAPD (1<<16) /* EAPD capable */ +#define AC_PINCAP_HBR (1<<27) /* High Bit Rate */ +/* Vref status (used in pin cap) */ +#define AC_PINCAP_VREF_HIZ (1<<0) /* Hi-Z */ +#define AC_PINCAP_VREF_50 (1<<1) /* 50% */ +#define AC_PINCAP_VREF_GRD (1<<2) /* ground */ +#define AC_PINCAP_VREF_80 (1<<4) /* 80% */ +#define AC_PINCAP_VREF_100 (1<<5) /* 100% */ + + +/* configuration default - 32bit */ +#define AC_DEFCFG_SEQUENCE (0xf<<0) +#define AC_DEFCFG_DEF_ASSOC (0xf<<4) +#define AC_DEFCFG_ASSOC_SHIFT 4 +#define AC_DEFCFG_MISC (0xf<<8) +#define AC_DEFCFG_MISC_SHIFT 8 +#define AC_DEFCFG_MISC_NO_PRESENCE (1<<0) +#define AC_DEFCFG_COLOR (0xf<<12) +#define AC_DEFCFG_COLOR_SHIFT 12 +#define AC_DEFCFG_CONN_TYPE (0xf<<16) +#define AC_DEFCFG_CONN_TYPE_SHIFT 16 +#define AC_DEFCFG_DEVICE (0xf<<20) +#define AC_DEFCFG_DEVICE_SHIFT 20 +#define AC_DEFCFG_LOCATION (0x3f<<24) +#define AC_DEFCFG_LOCATION_SHIFT 24 +#define AC_DEFCFG_PORT_CONN (0x3<<30) +#define AC_DEFCFG_PORT_CONN_SHIFT 30 + +static const char *get_jack_color(u32 cfg) +{ + static char *names[16] = { + "", "Black", "Grey", "Blue", + "Green", "Red", "Orange", "Yellow", + "Purple", "Pink", NULL, NULL, + NULL, NULL, "White", "Other", + }; + cfg = (cfg & AC_DEFCFG_COLOR) >> AC_DEFCFG_COLOR_SHIFT; + if (names[cfg]) + return names[cfg]; + else + return "UNKNOWN"; +} + +static const char *get_jack_type(u32 cfg) +{ + static char *jack_types[16] = { + "Line Out", "Speaker", "Headphone", "CD", + "SPDIF Out", "Digital Out", "Modem Line", "Modem Hand", + "Line In", "Aux", "Mic", "Telephony", + "SPDIF In", "Digital In", "Reserved", "Other" + }; + + return jack_types[(cfg & AC_DEFCFG_DEVICE) + >> AC_DEFCFG_DEVICE_SHIFT]; +} + +static const char *get_jack_location(u32 cfg) +{ + static char *bases[7] = { + "", ", Rear side", ", Front side", ", Left side", ", Right side", ", Top", ", Bottom", + }; + static unsigned char specials_idx[] = { + 0x07, 0x08, + 0x17, 0x18, 0x19, + 0x37, 0x38 + }; + static char *specials[] = { + ", Rear Panel", ", Drive Bar", + ", Riser", ", HDMI", ", ATAPI", + ", Mobile-In", ", Mobile-Out" + }; + int i; + cfg = (cfg & AC_DEFCFG_LOCATION) >> AC_DEFCFG_LOCATION_SHIFT; + if ((cfg & 0x0f) < 7) + return bases[cfg & 0x0f]; + for (i = 0; i < 7; i++) { + if (cfg == specials_idx[i]) + return specials[i]; + } + return "UNKNOWN"; +} + + +/**** Borrowed code end *****/ + +static free_override_t pc_arr[] = { + {"Not connected", 1 << AC_DEFCFG_PORT_CONN_SHIFT}, + {"Jack", 0}, + {"Internal", 2 << AC_DEFCFG_PORT_CONN_SHIFT}, + {"Both", 3 << AC_DEFCFG_PORT_CONN_SHIFT}, + {} +}; + +static free_override_t location_arr[] = { + {"External", 0}, + {"Rear", 1 << AC_DEFCFG_LOCATION_SHIFT}, + {"Front", 2 << AC_DEFCFG_LOCATION_SHIFT}, + {"Left", 3 << AC_DEFCFG_LOCATION_SHIFT}, + {"Right", 4 << AC_DEFCFG_LOCATION_SHIFT}, + {"Top", 5 << AC_DEFCFG_LOCATION_SHIFT}, + {"Bottom", 6 << AC_DEFCFG_LOCATION_SHIFT}, + {"Rear panel", 7 << AC_DEFCFG_LOCATION_SHIFT}, + {"Drive bay", 8 << AC_DEFCFG_LOCATION_SHIFT}, + + {"Internal", 16 << AC_DEFCFG_LOCATION_SHIFT}, + {"Internal riser", (16+7) << AC_DEFCFG_LOCATION_SHIFT}, + {"Internal display", (16+8) << AC_DEFCFG_LOCATION_SHIFT}, + {"Internal ATAPI", (16+9) << AC_DEFCFG_LOCATION_SHIFT}, + + {"Dock", 32 << AC_DEFCFG_LOCATION_SHIFT}, + {"Dock Rear", 33 << AC_DEFCFG_LOCATION_SHIFT}, + {"Dock Front", 34 << AC_DEFCFG_LOCATION_SHIFT}, + {"Dock Left", 35 << AC_DEFCFG_LOCATION_SHIFT}, + {"Dock Right", 36 << AC_DEFCFG_LOCATION_SHIFT}, + {"Dock Top", 37 << AC_DEFCFG_LOCATION_SHIFT}, + {"Dock Bottom", 38 << AC_DEFCFG_LOCATION_SHIFT}, + + {"Other", 48 << AC_DEFCFG_LOCATION_SHIFT}, + {"Other bottom", (48+7) << AC_DEFCFG_LOCATION_SHIFT}, + {"Inside mobile lid", (48+8) << AC_DEFCFG_LOCATION_SHIFT}, + {"Outside mobile lid", (48+9) << AC_DEFCFG_LOCATION_SHIFT}, + + {} +}; + +static free_override_t device_arr[] = { + {"Line Out", 0}, + {"Speaker", 1 << AC_DEFCFG_DEVICE_SHIFT}, + {"Headphone", 2 << AC_DEFCFG_DEVICE_SHIFT}, + {"CD", 3 << AC_DEFCFG_DEVICE_SHIFT}, + {"SPDIF Out", 4 << AC_DEFCFG_DEVICE_SHIFT}, + {"Digital Out", 5 << AC_DEFCFG_DEVICE_SHIFT}, + {"Modem (Line side)", 6 << AC_DEFCFG_DEVICE_SHIFT}, + {"Modem (Handset side)", 7 << AC_DEFCFG_DEVICE_SHIFT}, + {"Line In", 8 << AC_DEFCFG_DEVICE_SHIFT}, + {"Aux", 9 << AC_DEFCFG_DEVICE_SHIFT}, + {"Microphone", 10 << AC_DEFCFG_DEVICE_SHIFT}, + {"Telephony", 11 << AC_DEFCFG_DEVICE_SHIFT}, + {"SPDIF In", 12 << AC_DEFCFG_DEVICE_SHIFT}, + {"Other Digital In", 13 << AC_DEFCFG_DEVICE_SHIFT}, + {"Other", 15 << AC_DEFCFG_DEVICE_SHIFT}, + {} +}; + +static free_override_t jack_arr[] = { + {"Unknown", 0}, + {"3.5 mm", 1 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"6.3 mm", 2 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"ATAPI", 3 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"RCA", 4 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"Optical", 5 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"Other Digital", 6 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"Other Analog", 7 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"DIN", 8 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"XLR", 9 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"RJ-11 (Modem)", 10 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"Combination", 11 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"Other", 15 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {} +}; + +static free_override_t color_arr[] = { + {"Unknown", 0}, + {"Black", 1 << AC_DEFCFG_COLOR_SHIFT}, + {"Grey", 2 << AC_DEFCFG_COLOR_SHIFT}, + {"Blue", 3 << AC_DEFCFG_COLOR_SHIFT}, + {"Green", 4 << AC_DEFCFG_COLOR_SHIFT}, + {"Red", 5 << AC_DEFCFG_COLOR_SHIFT}, + {"Orange", 6 << AC_DEFCFG_COLOR_SHIFT}, + {"Yellow", 7 << AC_DEFCFG_COLOR_SHIFT}, + {"Purple", 8 << AC_DEFCFG_COLOR_SHIFT}, + {"Pink", 9 << AC_DEFCFG_COLOR_SHIFT}, + {"White", 14 << AC_DEFCFG_COLOR_SHIFT}, + {"Other", 15 << AC_DEFCFG_COLOR_SHIFT}, + {} +}; + +static free_override_t no_presence_arr[] = { + {"Present", 0}, + {"Not present", 1 << AC_DEFCFG_MISC_SHIFT}, + {} +}; + +static free_override_t group_nr_arr[] = { + {"1", 1 << AC_DEFCFG_ASSOC_SHIFT}, + {"2", 2 << AC_DEFCFG_ASSOC_SHIFT}, + {"3", 3 << AC_DEFCFG_ASSOC_SHIFT}, + {"4", 4 << AC_DEFCFG_ASSOC_SHIFT}, + {"5", 5 << AC_DEFCFG_ASSOC_SHIFT}, + {"6", 6 << AC_DEFCFG_ASSOC_SHIFT}, + {"7", 7 << AC_DEFCFG_ASSOC_SHIFT}, + {"8", 8 << AC_DEFCFG_ASSOC_SHIFT}, + {"9", 9 << AC_DEFCFG_ASSOC_SHIFT}, + {"10", 10 << AC_DEFCFG_ASSOC_SHIFT}, + {"11", 11 << AC_DEFCFG_ASSOC_SHIFT}, + {"12", 12 << AC_DEFCFG_ASSOC_SHIFT}, + {"13", 13 << AC_DEFCFG_ASSOC_SHIFT}, + {"14", 14 << AC_DEFCFG_ASSOC_SHIFT}, + {"15", 15 << AC_DEFCFG_ASSOC_SHIFT}, + {} +}; + +static free_override_t channel_arr[] = { + {"Front", 0}, + {"Center/LFE", 1}, + {"Back", 2}, + {"Side", 3}, + {"Channel 8 & 9", 4}, + {"Channel 10 & 11", 5}, + {"Channel 12 & 13", 6}, + {"Channel 14 & 15", 7}, + {"Channel 16 & 17", 8}, + {"Channel 18 & 19", 9}, + {"Channel 20 & 21", 10}, + {"Channel 22 & 23", 11}, + {"Channel 24 & 25", 12}, + {"Channel 26 & 27", 13}, + {"Channel 28 & 29", 14}, + {"Channel 30 & 31", 15}, + {} +}; + + +static free_override_t* type_order[FREE_OVERRIDES_COUNT] = { + pc_arr, location_arr, device_arr, jack_arr, + color_arr, no_presence_arr, group_nr_arr, channel_arr +}; + +unsigned long get_free_override_mask(int type) +{ + static unsigned long masks[FREE_OVERRIDES_COUNT] = { + AC_DEFCFG_PORT_CONN, + AC_DEFCFG_LOCATION, + AC_DEFCFG_DEVICE, + AC_DEFCFG_CONN_TYPE, + AC_DEFCFG_COLOR, + AC_DEFCFG_MISC & 1, + AC_DEFCFG_DEF_ASSOC, + AC_DEFCFG_SEQUENCE, + }; + + return masks[type]; +} + +free_override_t* get_free_override_list(int type) +{ + return type_order[type]; +} + + +int get_port_conn(unsigned long config) +{ + return (config & AC_DEFCFG_PORT_CONN) >> AC_DEFCFG_PORT_CONN_SHIFT; +} + +gchar* get_config_description(unsigned long config) +{ + int port_conn = get_port_conn(config); + if (port_conn == 1) + return g_strdup("Not connected"); + return g_strdup_printf("%s %s%s%s", port_conn == 2 ? "Internal" : get_jack_color(config), + get_jack_type(config), + ((config >> (AC_DEFCFG_LOCATION_SHIFT+4)) & 3) == 2 ? ", Docking station" : "", + get_jack_location(config)); +} + +/* +gchar* get_caps_description(unsigned long pin_caps) +{ + int vref = (pin_caps & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT; + gboolean linein = (pin_caps & AC_PINCAP_IN) && (vref & AC_PINCAP_VREF_HIZ); + gboolean lineout = pin_caps & AC_PINCAP_OUT; + gboolean hp = pin_caps & AC_PINCAP_HP_DRV; + gboolean mic = (pin_caps & AC_PINCAP_IN) && (vref & AC_PINCAP_VREF_50 || vref & AC_PINCAP_VREF_80); + return g_strjoin("", + lineout ? ", Line out": "", + hp ? ", Headphone": "", + linein ? ", Line in": "", + mic ? ", Microphone": "", NULL); + +} +*/ + +static gboolean extmic_caps(unsigned long pin_caps, unsigned long wid_caps) +{ + int vref = (pin_caps & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT; + return (pin_caps & AC_PINCAP_IN) && (vref & AC_PINCAP_VREF_50 || vref & AC_PINCAP_VREF_80); +} + +static gboolean headphone_caps(unsigned long pin_caps, unsigned long wid_caps) +{ + return pin_caps & AC_PINCAP_HP_DRV; +} + +static gboolean lineout_caps(unsigned long pin_caps, unsigned long wid_caps) +{ + return (pin_caps & AC_PINCAP_OUT) && !(wid_caps & AC_WCAP_DIGITAL); +} + +static gboolean spdifout_caps(unsigned long pin_caps, unsigned long wid_caps) +{ + return (pin_caps & AC_PINCAP_OUT) && (wid_caps & AC_WCAP_DIGITAL) && !(pin_caps & AC_PINCAP_HDMI); +} + +static gboolean hdmi_caps(unsigned long pin_caps, unsigned long wid_caps) +{ + return pin_caps & AC_PINCAP_HDMI; +} + +static gboolean intmic_caps(unsigned long pin_caps, unsigned long wid_caps) +{ + return (pin_caps & AC_PINCAP_IN) && !(wid_caps & AC_WCAP_DIGITAL); +} + +static gboolean spdifin_caps(unsigned long pin_caps, unsigned long wid_caps) +{ + return (pin_caps & AC_PINCAP_IN) && (wid_caps & AC_WCAP_DIGITAL); +} + +static gboolean linein_caps(unsigned long pin_caps, unsigned long wid_caps) +{ + int vref = (pin_caps & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT; + return (pin_caps & AC_PINCAP_IN) && (vref & AC_PINCAP_VREF_HIZ); +} + +static gboolean disabled_caps(unsigned long pin_caps, unsigned long wid_caps) +{ + return TRUE; +} + +static typical_pins_t simple_typical_pins[] = { + {"Headphone", headphone_caps, 0x0321403f, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE, }, + {"Microphone", extmic_caps, 0x03a19020, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE,}, + {"Line out (Front)", lineout_caps, 0x01014410, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE | AC_DEFCFG_SEQUENCE,}, + {"Line out (Center/LFE)", lineout_caps, 0x01014411, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE | AC_DEFCFG_SEQUENCE,}, + {"Line out (Back)", lineout_caps, 0x01014412, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE | AC_DEFCFG_SEQUENCE,}, + {"Line out (Side)", lineout_caps, 0x01014413, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE | AC_DEFCFG_SEQUENCE,}, + {"Line in", linein_caps, 0x0181344f, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE,}, + {"Internal speaker", lineout_caps, 0x90170150, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE | AC_DEFCFG_SEQUENCE, }, + {"Internal speaker (LFE)", lineout_caps, 0x90170151, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE | AC_DEFCFG_SEQUENCE, }, + {"Internal speaker (Back)", lineout_caps, 0x90170152, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE | AC_DEFCFG_SEQUENCE, }, + {"Internal mic", intmic_caps, 0x90a60160, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE,}, + {"HDMI", hdmi_caps, 0x18560070, AC_DEFCFG_PORT_CONN | AC_DEFCFG_LOCATION,}, + {"SPDIF out", spdifout_caps, 0x014b1180, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE,}, + {"SPDIF in", spdifin_caps, 0x01cb6190, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE,}, + {"Not connected", disabled_caps, 0x40f000f0, AC_DEFCFG_PORT_CONN,}, + {} +}; + + + +int get_typical_pins(typical_pins_t* result, int entries, pin_configs_t* pin_cfg, int caps_limit) +{ + int count = 0; + int index = -1; + unsigned long actual = actual_pin_config(pin_cfg); + typical_pins_t* src; + for (src = simple_typical_pins; src->name && entries; src++) { + if (caps_limit && !src->caps_limit(pin_cfg->pin_caps, pin_cfg->wid_caps)) + continue; + if ((actual & src->match_mask) == (src->pin_set & src->match_mask)) + index = count; + *result = *src; + result++; + count++; + entries--; + } + if (entries) { + result->name = NULL; + } + return index; +} + +gboolean find_pin_channel_match(pin_configs_t* pins, int count, unsigned long pinval) +{ + int i; + pinval &= (AC_DEFCFG_DEF_ASSOC + AC_DEFCFG_SEQUENCE); + for (i = 0; i < count; i++, pins++) { + unsigned long val2 = actual_pin_config(pins); + if (get_port_conn(val2) == 1) + continue; + if (pinval == (val2 & (AC_DEFCFG_DEF_ASSOC + AC_DEFCFG_SEQUENCE))) + return TRUE; + } + return FALSE; +} + + diff --git a/hdajackretask/sysfs-pin-configs.h b/hdajackretask/sysfs-pin-configs.h new file mode 100644 index 0000000..9a0a902 --- /dev/null +++ b/hdajackretask/sysfs-pin-configs.h @@ -0,0 +1,63 @@ +#ifndef __SYSFS_PIN_CONFIGS_H__ +#define __SYSFS_PIN_CONFIGS_H__ + +#include + +typedef struct codec_name_t { + int card; + int device; + gchar* name; +} codec_name_t; + +typedef struct pin_configs_t { + int nid; + unsigned long init_pin_config; + unsigned long driver_pin_config; + unsigned long user_pin_config; + unsigned long pin_caps; + unsigned long wid_caps; + gboolean user_override; + gboolean driver_override; +} pin_configs_t; + +typedef gboolean(*caps_limit_func_t)(unsigned long, unsigned long); + +typedef struct typical_pins_t { + char* name; + caps_limit_func_t caps_limit; + unsigned long pin_set; + unsigned long match_mask; + unsigned long pin_set_mask; +} typical_pins_t; + +typedef struct free_override_t { + const char* name; + unsigned long value; +} free_override_t; + +#define FREE_OVERRIDES_COUNT 8 + +free_override_t* get_free_override_list(int type); +unsigned long get_free_override_mask(int type); + +int get_codec_name_list(codec_name_t* names, int entries); + +int get_pin_configs_list(pin_configs_t* pins, int entries, int card, int device); + +gchar* get_config_description(unsigned long config); + +gchar* get_caps_description(unsigned long pin_caps); + +/* 0 = Jack, 1 = N/A, 2 = Internal, 3 = Both (?!) */ +int get_port_conn(unsigned long config); + +int get_typical_pins(typical_pins_t* result, int entries, pin_configs_t* pin_cfg, int caps_limit); + +unsigned long actual_pin_config(pin_configs_t* pins); + +void get_codec_header(int card, int device, unsigned int* address, + unsigned int* codec_vendorid, unsigned int* codec_ssid); + +gboolean find_pin_channel_match(pin_configs_t* pins, int count, unsigned long pinval); + +#endif From d06008f39767d6377997c51a3c8eebb2100941f7 Mon Sep 17 00:00:00 2001 From: David Henningsson Date: Fri, 13 Apr 2012 11:49:21 +0200 Subject: [PATCH 066/166] hdajackretask: Use autotools Start to use autotools as build system, just like the other programs in the alsa-tools suite. Signed-off-by: David Henningsson --- hdajackretask/AUTHORS | 1 + hdajackretask/ChangeLog | 1 + hdajackretask/Makefile | 18 ------------------ hdajackretask/Makefile.am | 20 ++++++++++++++++++++ hdajackretask/NEWS | 1 + hdajackretask/configure.in | 10 ++++++++++ hdajackretask/gitcompile | 31 +++++++++++++++++++++++++++++-- 7 files changed, 62 insertions(+), 20 deletions(-) create mode 100644 hdajackretask/AUTHORS create mode 100644 hdajackretask/ChangeLog delete mode 100644 hdajackretask/Makefile create mode 100644 hdajackretask/Makefile.am create mode 100644 hdajackretask/NEWS create mode 100644 hdajackretask/configure.in diff --git a/hdajackretask/AUTHORS b/hdajackretask/AUTHORS new file mode 100644 index 0000000..9f136d8 --- /dev/null +++ b/hdajackretask/AUTHORS @@ -0,0 +1 @@ +David Henningsson diff --git a/hdajackretask/ChangeLog b/hdajackretask/ChangeLog new file mode 100644 index 0000000..70c7475 --- /dev/null +++ b/hdajackretask/ChangeLog @@ -0,0 +1 @@ +For news and changelog, refer to git repository history. This file is only present because autotools requires it. diff --git a/hdajackretask/Makefile b/hdajackretask/Makefile deleted file mode 100644 index c9c4043..0000000 --- a/hdajackretask/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -SOURCES = main-gtk.c sysfs-pin-configs.c apply-changes.c - -build: - $(shell sed 's/\\/\\\\/g;s/"/\\"/g;s/^/"/;s/$$/\\n"/;' < README > README.generated.h) - gcc -g -O0 -Wall -o hda-jack-retask $(SOURCES) $(shell pkg-config --cflags --libs gtk+-3.0) - -clean: - -rm hda-jack-retask - -rm README.generated.h - -install: - install -Dm755 hda-jack-retask $(DESTDIR)/usr/bin/hda-jack-retask - install -Dm644 README $(DESTDIR)/usr/share/doc/hda-jack-retask/README - -uninstall: - -rm $(DESTDIR)/usr/bin/hda-jack-retask - -.PHONY: build install uninstall diff --git a/hdajackretask/Makefile.am b/hdajackretask/Makefile.am new file mode 100644 index 0000000..e0204bc --- /dev/null +++ b/hdajackretask/Makefile.am @@ -0,0 +1,20 @@ +EXTRA_DIST = gitcompile README +AM_CFLAGS = @GTK3_CFLAGS@ +bin_PROGRAMS = hdajackretask +man_MANS = +hdajackretask_SOURCES = main-gtk.c sysfs-pin-configs.c apply-changes.c +hdajackretask_LDADD = @GTK3_LIBS@ + +BUILT_SOURCES = README.generated.h +nodist_hdajackretask_SOURCES = README.generated.h +CLEANFILES = README.generated.h + +README.generated.h: + sed 's/\\/\\\\/g;s/"/\\"/g;s/^/"/;s/$$/\\n"/;' README >$@ + +alsa-dist: distdir + @rm -rf ../distdir/hdajackretask + @mkdir -p ../distdir/hdajackretask + @cp -RLpv $(distdir)/* ../distdir/hdajackretask + @rm -rf $(distdir) + diff --git a/hdajackretask/NEWS b/hdajackretask/NEWS new file mode 100644 index 0000000..70c7475 --- /dev/null +++ b/hdajackretask/NEWS @@ -0,0 +1 @@ +For news and changelog, refer to git repository history. This file is only present because autotools requires it. diff --git a/hdajackretask/configure.in b/hdajackretask/configure.in new file mode 100644 index 0000000..f839af3 --- /dev/null +++ b/hdajackretask/configure.in @@ -0,0 +1,10 @@ +AC_INIT([hdajackretask], [0.20120413]) +AC_CONFIG_SRCDIR([main-gtk.c]) +AM_INIT_AUTOMAKE +AC_PROG_CC +AC_PROG_INSTALL +AC_HEADER_STDC + +PKG_CHECK_MODULES(GTK3, gtk+-3.0) + +AC_OUTPUT(Makefile) diff --git a/hdajackretask/gitcompile b/hdajackretask/gitcompile index acc8825..10e057c 100755 --- a/hdajackretask/gitcompile +++ b/hdajackretask/gitcompile @@ -1,3 +1,30 @@ -#!/bin/sh +#!/bin/bash -make GITCOMPILE_ARGS="$*" +if test -z "$AUTOMAKE_DIR"; then + if test -d /usr/local/share/automake; then + AUTOMAKE_DIR=/usr/local/share/automake + fi + if test -d /usr/share/automake; then + AUTOMAKE_DIR="/usr/share/automake" + fi + if test -z "$AUTOMAKE_DIR"; then + AUTOMAKE_DIR=/usr/share/`ls /usr/share | grep automake | tail -n 1` + fi +fi + +for f in install-sh mkinstalldirs missing; do + cp -av $AUTOMAKE_DIR/$f . || exit 1 +done + +aclocal $ACLOCAL_FLAGS || exit 1 +automake --add-missing --copy || exit 1 +touch depcomp || exit 1 +autoconf || exit 1 +export CFLAGS='-O2 -Wall -pipe -g' +echo "CFLAGS=$CFLAGS" +echo "./configure $@" +./configure $@ || exit 1 +unset CFLAGS +if [ -z "$GITCOMPILE_NO_MAKE" ]; then + make || exit 1 +fi From 21e250bfbc923b762bf35fae3c277633b793654a Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Fri, 20 Apr 2012 15:48:01 +0200 Subject: [PATCH 067/166] Import hda-verb 0.4 to alsa-tools repo Signed-off-by: Takashi Iwai --- Makefile | 2 +- hda-verb/ChangeLog | 12 ++ hda-verb/Makefile | 15 ++ hda-verb/README | 36 +++++ hda-verb/hda-verb.c | 347 +++++++++++++++++++++++++++++++++++++++++++ hda-verb/hda_hwdep.h | 44 ++++++ 6 files changed, 455 insertions(+), 1 deletion(-) create mode 100644 hda-verb/ChangeLog create mode 100644 hda-verb/Makefile create mode 100644 hda-verb/README create mode 100644 hda-verb/hda-verb.c create mode 100644 hda-verb/hda_hwdep.h diff --git a/Makefile b/Makefile index 893b394..bded637 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ TOP = . SUBDIRS = ac3dec as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ us428control usx2yloader vxloader echomixer ld10k1 qlo10k1 \ - hwmixvolume hdajackretask + hwmixvolume hdajackretask hda-verb all: @for i in $(SUBDIRS); do \ diff --git a/hda-verb/ChangeLog b/hda-verb/ChangeLog new file mode 100644 index 0000000..cbecd9d --- /dev/null +++ b/hda-verb/ChangeLog @@ -0,0 +1,12 @@ +version 0.3: + - Add -l and -L option to show defined verbs and parameters + +version 0.3: + - Add a brief description about hwdep in README + - Add COPYING before someone blaming me + +version 0.2 + - public release + +version 0.1 + - embryo diff --git a/hda-verb/Makefile b/hda-verb/Makefile new file mode 100644 index 0000000..260831a --- /dev/null +++ b/hda-verb/Makefile @@ -0,0 +1,15 @@ +VERSION = 0.4 + +CC = gcc +CFLAGS = -Wall -O2 -g + +hda-verb: hda-verb.o + $(CC) -o $@ hda-verb.o + +clean: + rm -f hda-verb *.o + +dist: + cd ..; mv hda-verb hda-verb-$(VERSION); \ + tar cfz hda-verb-$(VERSION).tar.gz --exclude='.git*' hda-verb-$(VERSION); \ + mv hda-verb-$(VERSION) hda-verb diff --git a/hda-verb/README b/hda-verb/README new file mode 100644 index 0000000..2ec65b5 --- /dev/null +++ b/hda-verb/README @@ -0,0 +1,36 @@ +HDA-VERB -- Send a HD-audio command + +hda-verb is a small program to send HD-audio commands to the given +ALSA hwdep device on the hd-audio interface. + +First off, build HD-audio driver with hwdep support. For the kernel +config, set CONFIG_SND_HDA_HWDEP=y. When you build ALSA drivers from +alsa-driver tarball, usually this is set automatically. + +Once snd-hda-intel driver is built with the hwdep support, you should +have a hwdep device such as /dev/snd/hwC0D0. + +The program takes four arguments, the hwdep device name, the widget NID, +the verb and the parameter. For example, + + % hda-verb /dev/snd/hwC0D0 0x12 0x701 2 + +The verb argument can be a string like "PARAMETERS". Also the +parameter argument can be a string like "VENDOR_ID" as well. + + % hda-verb /dev/snd/hwC0D0 0x0 PARAMETERS VENDOR_ID + +The string is case insensitive. Also, it doesn't have to be the full +string but only has to be unique. E.g. "par" is enough to mean +"PARAMETER", and "set_a" is enough as "SET_AMP_GAIN_MUTE". + + % hda-verb /dev/snd/hwC0D0 2 set_a 0xb080 + +The program executs the given verb, shows the result and quits. +Usually you need to be root to run this command. + + +*WARNING* +Use this program carefully. Sending an invalid verb may screw up the +codec communication, which requires either a reboot or reloading of +the sound driver eventually. diff --git a/hda-verb/hda-verb.c b/hda-verb/hda-verb.c new file mode 100644 index 0000000..2577ae0 --- /dev/null +++ b/hda-verb/hda-verb.c @@ -0,0 +1,347 @@ +/* + * Accessing HD-audio verbs via hwdep interface + * Version 0.3 + * + * Copyright (c) 2008 Takashi Iwai + * + * Licensed under GPL v2 or later. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; + +#include "hda_hwdep.h" + +#define AC_VERB_GET_STREAM_FORMAT 0x0a00 +#define AC_VERB_GET_AMP_GAIN_MUTE 0x0b00 +#define AC_VERB_GET_PROC_COEF 0x0c00 +#define AC_VERB_GET_COEF_INDEX 0x0d00 +#define AC_VERB_PARAMETERS 0x0f00 +#define AC_VERB_GET_CONNECT_SEL 0x0f01 +#define AC_VERB_GET_CONNECT_LIST 0x0f02 +#define AC_VERB_GET_PROC_STATE 0x0f03 +#define AC_VERB_GET_SDI_SELECT 0x0f04 +#define AC_VERB_GET_POWER_STATE 0x0f05 +#define AC_VERB_GET_CONV 0x0f06 +#define AC_VERB_GET_PIN_WIDGET_CONTROL 0x0f07 +#define AC_VERB_GET_UNSOLICITED_RESPONSE 0x0f08 +#define AC_VERB_GET_PIN_SENSE 0x0f09 +#define AC_VERB_GET_BEEP_CONTROL 0x0f0a +#define AC_VERB_GET_EAPD_BTLENABLE 0x0f0c +#define AC_VERB_GET_DIGI_CONVERT_1 0x0f0d +#define AC_VERB_GET_DIGI_CONVERT_2 0x0f0e +#define AC_VERB_GET_VOLUME_KNOB_CONTROL 0x0f0f +#define AC_VERB_GET_GPIO_DATA 0x0f15 +#define AC_VERB_GET_GPIO_MASK 0x0f16 +#define AC_VERB_GET_GPIO_DIRECTION 0x0f17 +#define AC_VERB_GET_GPIO_WAKE_MASK 0x0f18 +#define AC_VERB_GET_GPIO_UNSOLICITED_RSP_MASK 0x0f19 +#define AC_VERB_GET_GPIO_STICKY_MASK 0x0f1a +#define AC_VERB_GET_CONFIG_DEFAULT 0x0f1c +#define AC_VERB_GET_SUBSYSTEM_ID 0x0f20 + +#define AC_VERB_SET_STREAM_FORMAT 0x200 +#define AC_VERB_SET_AMP_GAIN_MUTE 0x300 +#define AC_VERB_SET_PROC_COEF 0x400 +#define AC_VERB_SET_COEF_INDEX 0x500 +#define AC_VERB_SET_CONNECT_SEL 0x701 +#define AC_VERB_SET_PROC_STATE 0x703 +#define AC_VERB_SET_SDI_SELECT 0x704 +#define AC_VERB_SET_POWER_STATE 0x705 +#define AC_VERB_SET_CHANNEL_STREAMID 0x706 +#define AC_VERB_SET_PIN_WIDGET_CONTROL 0x707 +#define AC_VERB_SET_UNSOLICITED_ENABLE 0x708 +#define AC_VERB_SET_PIN_SENSE 0x709 +#define AC_VERB_SET_BEEP_CONTROL 0x70a +#define AC_VERB_SET_EAPD_BTLENABLE 0x70c +#define AC_VERB_SET_DIGI_CONVERT_1 0x70d +#define AC_VERB_SET_DIGI_CONVERT_2 0x70e +#define AC_VERB_SET_VOLUME_KNOB_CONTROL 0x70f +#define AC_VERB_SET_GPIO_DATA 0x715 +#define AC_VERB_SET_GPIO_MASK 0x716 +#define AC_VERB_SET_GPIO_DIRECTION 0x717 +#define AC_VERB_SET_GPIO_WAKE_MASK 0x718 +#define AC_VERB_SET_GPIO_UNSOLICITED_RSP_MASK 0x719 +#define AC_VERB_SET_GPIO_STICKY_MASK 0x71a +#define AC_VERB_SET_CONFIG_DEFAULT_BYTES_0 0x71c +#define AC_VERB_SET_CONFIG_DEFAULT_BYTES_1 0x71d +#define AC_VERB_SET_CONFIG_DEFAULT_BYTES_2 0x71e +#define AC_VERB_SET_CONFIG_DEFAULT_BYTES_3 0x71f +#define AC_VERB_SET_CODEC_RESET 0x7ff + +#define AC_PAR_VENDOR_ID 0x00 +#define AC_PAR_SUBSYSTEM_ID 0x01 +#define AC_PAR_REV_ID 0x02 +#define AC_PAR_NODE_COUNT 0x04 +#define AC_PAR_FUNCTION_TYPE 0x05 +#define AC_PAR_AUDIO_FG_CAP 0x08 +#define AC_PAR_AUDIO_WIDGET_CAP 0x09 +#define AC_PAR_PCM 0x0a +#define AC_PAR_STREAM 0x0b +#define AC_PAR_PIN_CAP 0x0c +#define AC_PAR_AMP_IN_CAP 0x0d +#define AC_PAR_CONNLIST_LEN 0x0e +#define AC_PAR_POWER_STATE 0x0f +#define AC_PAR_PROC_CAP 0x10 +#define AC_PAR_GPIO_CAP 0x11 +#define AC_PAR_AMP_OUT_CAP 0x12 +#define AC_PAR_VOL_KNB_CAP 0x13 + +/* + */ +#define VERBSTR(x) { .val = AC_VERB_##x, .str = #x } +#define PARMSTR(x) { .val = AC_PAR_##x, .str = #x } + +struct strtbl { + int val; + const char *str; +}; + +static struct strtbl hda_verbs[] = { + VERBSTR(GET_STREAM_FORMAT), + VERBSTR(GET_AMP_GAIN_MUTE), + VERBSTR(GET_PROC_COEF), + VERBSTR(GET_COEF_INDEX), + VERBSTR(PARAMETERS), + VERBSTR(GET_CONNECT_SEL), + VERBSTR(GET_CONNECT_LIST), + VERBSTR(GET_PROC_STATE), + VERBSTR(GET_SDI_SELECT), + VERBSTR(GET_POWER_STATE), + VERBSTR(GET_CONV), + VERBSTR(GET_PIN_WIDGET_CONTROL), + VERBSTR(GET_UNSOLICITED_RESPONSE), + VERBSTR(GET_PIN_SENSE), + VERBSTR(GET_BEEP_CONTROL), + VERBSTR(GET_EAPD_BTLENABLE), + VERBSTR(GET_DIGI_CONVERT_1), + VERBSTR(GET_DIGI_CONVERT_2), + VERBSTR(GET_VOLUME_KNOB_CONTROL), + VERBSTR(GET_GPIO_DATA), + VERBSTR(GET_GPIO_MASK), + VERBSTR(GET_GPIO_DIRECTION), + VERBSTR(GET_GPIO_WAKE_MASK), + VERBSTR(GET_GPIO_UNSOLICITED_RSP_MASK), + VERBSTR(GET_GPIO_STICKY_MASK), + VERBSTR(GET_CONFIG_DEFAULT), + VERBSTR(GET_SUBSYSTEM_ID), + + VERBSTR(SET_STREAM_FORMAT), + VERBSTR(SET_AMP_GAIN_MUTE), + VERBSTR(SET_PROC_COEF), + VERBSTR(SET_COEF_INDEX), + VERBSTR(SET_CONNECT_SEL), + VERBSTR(SET_PROC_STATE), + VERBSTR(SET_SDI_SELECT), + VERBSTR(SET_POWER_STATE), + VERBSTR(SET_CHANNEL_STREAMID), + VERBSTR(SET_PIN_WIDGET_CONTROL), + VERBSTR(SET_UNSOLICITED_ENABLE), + VERBSTR(SET_PIN_SENSE), + VERBSTR(SET_BEEP_CONTROL), + VERBSTR(SET_EAPD_BTLENABLE), + VERBSTR(SET_DIGI_CONVERT_1), + VERBSTR(SET_DIGI_CONVERT_2), + VERBSTR(SET_VOLUME_KNOB_CONTROL), + VERBSTR(SET_GPIO_DATA), + VERBSTR(SET_GPIO_MASK), + VERBSTR(SET_GPIO_DIRECTION), + VERBSTR(SET_GPIO_WAKE_MASK), + VERBSTR(SET_GPIO_UNSOLICITED_RSP_MASK), + VERBSTR(SET_GPIO_STICKY_MASK), + VERBSTR(SET_CONFIG_DEFAULT_BYTES_0), + VERBSTR(SET_CONFIG_DEFAULT_BYTES_1), + VERBSTR(SET_CONFIG_DEFAULT_BYTES_2), + VERBSTR(SET_CONFIG_DEFAULT_BYTES_3), + VERBSTR(SET_CODEC_RESET), + { }, /* end */ +}; + +static struct strtbl hda_params[] = { + PARMSTR(VENDOR_ID), + PARMSTR(SUBSYSTEM_ID), + PARMSTR(REV_ID), + PARMSTR(NODE_COUNT), + PARMSTR(FUNCTION_TYPE), + PARMSTR(AUDIO_FG_CAP), + PARMSTR(AUDIO_WIDGET_CAP), + PARMSTR(PCM), + PARMSTR(STREAM), + PARMSTR(PIN_CAP), + PARMSTR(AMP_IN_CAP), + PARMSTR(CONNLIST_LEN), + PARMSTR(POWER_STATE), + PARMSTR(PROC_CAP), + PARMSTR(GPIO_CAP), + PARMSTR(AMP_OUT_CAP), + PARMSTR(VOL_KNB_CAP), + { }, /* end */ +}; + +static void list_keys(struct strtbl *tbl, int one_per_line) +{ + int c = 0; + for (; tbl->str; tbl++) { + int len = strlen(tbl->str) + 2; + if (!one_per_line && c + len >= 80) { + fprintf(stderr, "\n"); + c = 0; + } + if (one_per_line) + fprintf(stderr, " %s\n", tbl->str); + else if (!c) + fprintf(stderr, " %s", tbl->str); + else + fprintf(stderr, ", %s", tbl->str); + c += 2 + len; + } + if (!one_per_line) + fprintf(stderr, "\n"); +} + +/* look up a value from the given string table */ +static int lookup_str(struct strtbl *tbl, const char *str) +{ + struct strtbl *p, *found; + int len = strlen(str); + + found = NULL; + for (p = tbl; p->str; p++) { + if (!strncmp(str, p->str, len)) { + if (found) { + fprintf(stderr, "No unique key '%s'\n", str); + return -1; + } + found = p; + } + } + if (!found) { + fprintf(stderr, "No key matching with '%s'\n", str); + return -1; + } + return found->val; +} + +/* convert a string to upper letters */ +static void strtoupper(char *str) +{ + for (; *str; str++) + *str = toupper(*str); +} + +static void usage(void) +{ + fprintf(stderr, "usage: hda-verb [option] hwdep-device nid verb param\n"); + fprintf(stderr, " -l List known verbs and parameters\n"); + fprintf(stderr, " -L List known verbs and parameters (one per line)\n"); +} + +static void list_verbs(int one_per_line) +{ + fprintf(stderr, "known verbs:\n"); + list_keys(hda_verbs, one_per_line); + fprintf(stderr, "known parameters:\n"); + list_keys(hda_params, one_per_line); +} + +int main(int argc, char **argv) +{ + int version; + int fd; + int nid, verb, param; + int c; + struct hda_verb_ioctl val; + char **p; + + while ((c = getopt(argc, argv, "lL")) >= 0) { + switch (c) { + case 'l': + list_verbs(0); + return 0; + case 'L': + list_verbs(1); + return 0; + default: + usage(); + return 1; + } + } + + if (argc - optind < 4) { + usage(); + return 1; + } + p = argv + optind; + fd = open(*p, O_RDWR); + if (fd < 0) { + perror("open"); + return 1; + } + version = 0; + if (ioctl(fd, HDA_IOCTL_PVERSION, &version) < 0) { + perror("ioctl(PVERSION)"); + fprintf(stderr, "Looks like an invalid hwdep device...\n"); + return 1; + } + if (version < HDA_HWDEP_VERSION) { + fprintf(stderr, "Invalid version number 0x%x\n", version); + fprintf(stderr, "Looks like an invalid hwdep device...\n"); + return 1; + } + + p++; + nid = strtol(*p, NULL, 0); + if (nid < 0 || nid > 0xff) { + fprintf(stderr, "invalid nid %s\n", *p); + return 1; + } + + p++; + if (!isdigit(**p)) { + strtoupper(*p); + verb = lookup_str(hda_verbs, *p); + if (verb < 0) + return 1; + } else { + verb = strtol(*p, NULL, 0); + if (verb < 0 || verb > 0xfff) { + fprintf(stderr, "invalid verb %s\n", *p); + return 1; + } + } + p++; + if (!isdigit(**p)) { + strtoupper(*p); + param = lookup_str(hda_params, *p); + if (param < 0) + return 1; + } else { + param = strtol(*p, NULL, 0); + if (param < 0 || param > 0xffff) { + fprintf(stderr, "invalid param %s\n", *p); + return 1; + } + } + fprintf(stderr, "nid = 0x%x, verb = 0x%x, param = 0x%x\n", + nid, verb, param); + + val.verb = HDA_VERB(nid, verb, param); + if (ioctl(fd, HDA_IOCTL_VERB_WRITE, &val) < 0) + perror("ioctl"); + printf("value = 0x%x\n", val.res); + close(fd); + return 0; +} diff --git a/hda-verb/hda_hwdep.h b/hda-verb/hda_hwdep.h new file mode 100644 index 0000000..1c0034e --- /dev/null +++ b/hda-verb/hda_hwdep.h @@ -0,0 +1,44 @@ +/* + * HWDEP Interface for HD-audio codec + * + * Copyright (c) 2007 Takashi Iwai + * + * This driver is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This driver is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __SOUND_HDA_HWDEP_H +#define __SOUND_HDA_HWDEP_H + +#define HDA_HWDEP_VERSION ((1 << 16) | (0 << 8) | (0 << 0)) /* 1.0.0 */ + +/* verb */ +#define HDA_REG_NID_SHIFT 24 +#define HDA_REG_VERB_SHIFT 8 +#define HDA_REG_VAL_SHIFT 0 +#define HDA_VERB(nid,verb,param) ((nid)<<24 | (verb)<<8 | (param)) + +struct hda_verb_ioctl { + u32 verb; /* HDA_VERB() */ + u32 res; /* response */ +}; + +/* + * ioctls + */ +#define HDA_IOCTL_PVERSION _IOR('H', 0x10, int) +#define HDA_IOCTL_VERB_WRITE _IOWR('H', 0x11, struct hda_verb_ioctl) +#define HDA_IOCTL_GET_WCAP _IOWR('H', 0x12, struct hda_verb_ioctl) + +#endif From f8d648a84b617810f3d86b4ebaa61f20dbf2d928 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Fri, 20 Apr 2012 15:49:35 +0200 Subject: [PATCH 068/166] Add hdajackretask files to .gitignore Signed-off-by: Takashi Iwai --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 36308dc..1b5b81a 100644 --- a/.gitignore +++ b/.gitignore @@ -119,3 +119,6 @@ vxloader/Makefile vxloader/configure usx2yloader/tascam_fpga usx2yloader/tascam_fw +hdajackretask/Makefile +hdajackreteask/configure +hdajackreteask/hdajackretask From 2996581ce2c2131804a5766a8bb6995e674965b8 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Fri, 20 Apr 2012 15:54:49 +0200 Subject: [PATCH 069/166] Convert hda-verb to use automake Signed-off-by: Takashi Iwai --- hda-verb/Makefile | 15 --------------- hda-verb/Makefile.am | 12 ++++++++++++ hda-verb/configure.ac | 7 +++++++ hda-verb/gitcompile | 13 +++++++++++++ 4 files changed, 32 insertions(+), 15 deletions(-) delete mode 100644 hda-verb/Makefile create mode 100644 hda-verb/Makefile.am create mode 100644 hda-verb/configure.ac create mode 100755 hda-verb/gitcompile diff --git a/hda-verb/Makefile b/hda-verb/Makefile deleted file mode 100644 index 260831a..0000000 --- a/hda-verb/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -VERSION = 0.4 - -CC = gcc -CFLAGS = -Wall -O2 -g - -hda-verb: hda-verb.o - $(CC) -o $@ hda-verb.o - -clean: - rm -f hda-verb *.o - -dist: - cd ..; mv hda-verb hda-verb-$(VERSION); \ - tar cfz hda-verb-$(VERSION).tar.gz --exclude='.git*' hda-verb-$(VERSION); \ - mv hda-verb-$(VERSION) hda-verb diff --git a/hda-verb/Makefile.am b/hda-verb/Makefile.am new file mode 100644 index 0000000..7dab1d9 --- /dev/null +++ b/hda-verb/Makefile.am @@ -0,0 +1,12 @@ +AUTOMAKE_OPTIONS = 1.3 foreign +bin_PROGRAMS = hda-verb +hda_verb_SOURCES = hda-verb.c +noinst_HEADERS = hda_hwdep.h + +EXTRA_DIST = gitcompile README ChangeLog + +alsa-dist: distdir + @rm -rf ../distdir/$(MYNAME) + @mkdir -p ../distdir/$(MYNAME) + @cp -RLpv $(distdir)/* ../distdir/$(MYNAME) + @rm -rf $(distdir) diff --git a/hda-verb/configure.ac b/hda-verb/configure.ac new file mode 100644 index 0000000..94ca73b --- /dev/null +++ b/hda-verb/configure.ac @@ -0,0 +1,7 @@ +AC_INIT(hda-verb.c) +AM_INIT_AUTOMAKE(hda-verb, 0.4) +AC_PROG_CC +AC_PROG_INSTALL +AC_HEADER_STDC + +AC_OUTPUT(Makefile) diff --git a/hda-verb/gitcompile b/hda-verb/gitcompile new file mode 100755 index 0000000..58328bd --- /dev/null +++ b/hda-verb/gitcompile @@ -0,0 +1,13 @@ +#!/bin/bash + +aclocal $ACLOCAL_FLAGS || exit 1 +automake --foreign --add-missing || exit 1 +autoconf || exit 1 +export CFLAGS='-O2 -Wall -pipe -g' +echo "CFLAGS=$CFLAGS" +echo "./configure $@" +./configure $@ || exit 1 +unset CFLAGS +if [ -z "$GITCOMPILE_NO_MAKE" ]; then + make || exit 1 +fi From 43135b17d86070d7fca349576c06ae5d163648b8 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Fri, 20 Apr 2012 15:56:53 +0200 Subject: [PATCH 070/166] Update .gitignore for hda-verb Signed-off-by: Takashi Iwai --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 1b5b81a..1851333 100644 --- a/.gitignore +++ b/.gitignore @@ -122,3 +122,6 @@ usx2yloader/tascam_fw hdajackretask/Makefile hdajackreteask/configure hdajackreteask/hdajackretask +hda-verb/Makefile +hda-verb/configure +hda-verb/hda-verb From 845c3186a7badaae74dda7a61189550968985f81 Mon Sep 17 00:00:00 2001 From: Karsten Wiese Date: Wed, 25 Apr 2012 12:25:04 +0200 Subject: [PATCH 071/166] usx2yloader: make fxload work without deprecated usbfs Use $DEVNAME instead of $DEVICE in script tascam_fw. Signed-off-by: Karsten Wiese Signed-off-by: Takashi Iwai --- usx2yloader/tascam_fw.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usx2yloader/tascam_fw.in b/usx2yloader/tascam_fw.in index 14bbc6c..d3145e3 100644 --- a/usx2yloader/tascam_fw.in +++ b/usx2yloader/tascam_fw.in @@ -53,8 +53,8 @@ if [ ! -x $LOADER ]; then fi if [ -x /usr/bin/logger ]; then - /usr/bin/logger -t $0 "load $FIRMWARE for $PRODUCT to $DEVICE" + /usr/bin/logger -t $0 "load $FIRMWARE for $PRODUCT to $DEVNAME" fi -$LOADER $FLAGS -s $LOADERFIRMWARE -I $FIRMWARE +$LOADER $FLAGS -s $LOADERFIRMWARE -I $FIRMWARE -D $DEVNAME exit 0 From 65219ca2de8beed50408f7eb58d29e45a7eafb4b Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 17 Jul 2012 18:48:20 +0200 Subject: [PATCH 072/166] hda-verb: Add missing MYNAME definition for packaging Signed-off-by: Jaroslav Kysela --- hda-verb/Makefile.am | 1 + 1 file changed, 1 insertion(+) diff --git a/hda-verb/Makefile.am b/hda-verb/Makefile.am index 7dab1d9..0e3278d 100644 --- a/hda-verb/Makefile.am +++ b/hda-verb/Makefile.am @@ -1,3 +1,4 @@ +MYNAME = hda-verb AUTOMAKE_OPTIONS = 1.3 foreign bin_PROGRAMS = hda-verb hda_verb_SOURCES = hda-verb.c From aa795cb82726776bf9402c3171f784a9e3aba3bb Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Tue, 31 Jul 2012 10:58:43 +0200 Subject: [PATCH 073/166] hda-verb: Don't include sys/io.h for PPC Signed-off-by: Takashi Iwai --- hda-verb/hda-verb.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hda-verb/hda-verb.c b/hda-verb/hda-verb.c index 2577ae0..bd746ad 100644 --- a/hda-verb/hda-verb.c +++ b/hda-verb/hda-verb.c @@ -13,7 +13,9 @@ #include #include #include +#ifndef __PPC__ #include +#endif #include #include From c799e978c8aafed91ccf00e088d9cfc49921b3a9 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 6 Sep 2012 09:53:16 +0200 Subject: [PATCH 074/166] Release v1.0.26 Signed-off-by: Jaroslav Kysela --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index bded637..b0842ef 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION = 1.0.25 +VERSION = 1.0.26 TOP = . SUBDIRS = ac3dec as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ From 61ea74a6e5f7b05cbcfe36ab22931fed59bea9dd Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 6 Sep 2012 17:19:10 +0200 Subject: [PATCH 075/166] hdajackretask: Add missing header files to tar-ball distribution Signed-off-by: Jaroslav Kysela --- hdajackretask/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hdajackretask/Makefile.am b/hdajackretask/Makefile.am index e0204bc..fec5a8a 100644 --- a/hdajackretask/Makefile.am +++ b/hdajackretask/Makefile.am @@ -5,6 +5,8 @@ man_MANS = hdajackretask_SOURCES = main-gtk.c sysfs-pin-configs.c apply-changes.c hdajackretask_LDADD = @GTK3_LIBS@ +noinst_HEADERS = apply-changes.h sysfs-pin-configs.h + BUILT_SOURCES = README.generated.h nodist_hdajackretask_SOURCES = README.generated.h CLEANFILES = README.generated.h From d22f887951fcc2d4bd614c5ac317b93f2b11445d Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 6 Sep 2012 17:19:56 +0200 Subject: [PATCH 076/166] (q)lo10k1: updated INSTALL files Signed-off-by: Jaroslav Kysela --- ld10k1/INSTALL | 9 +++++++-- qlo10k1/INSTALL | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/ld10k1/INSTALL b/ld10k1/INSTALL index 7d1c323..a1e89e1 100644 --- a/ld10k1/INSTALL +++ b/ld10k1/INSTALL @@ -1,8 +1,8 @@ Installation Instructions ************************* -Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, -2006, 2007, 2008, 2009 Free Software Foundation, Inc. +Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation, +Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright @@ -226,6 +226,11 @@ order to use an ANSI C compiler: and if that doesn't work, install pre-built binaries of GCC for HP-UX. + HP-UX `make' updates targets which have the same time stamps as +their prerequisites, which makes it generally unusable when shipped +generated files such as `configure' are involved. Use GNU `make' +instead. + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended diff --git a/qlo10k1/INSTALL b/qlo10k1/INSTALL index 7d1c323..a1e89e1 100644 --- a/qlo10k1/INSTALL +++ b/qlo10k1/INSTALL @@ -1,8 +1,8 @@ Installation Instructions ************************* -Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, -2006, 2007, 2008, 2009 Free Software Foundation, Inc. +Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation, +Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright @@ -226,6 +226,11 @@ order to use an ANSI C compiler: and if that doesn't work, install pre-built binaries of GCC for HP-UX. + HP-UX `make' updates targets which have the same time stamps as +their prerequisites, which makes it generally unusable when shipped +generated files such as `configure' are involved. Use GNU `make' +instead. + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended From e875fa883ddef1aa8ebfbe5ab8051cec454921fa Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 6 Sep 2012 17:20:39 +0200 Subject: [PATCH 077/166] Release v1.0.26.1 Signed-off-by: Jaroslav Kysela --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index b0842ef..c01de06 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION = 1.0.26 +VERSION = 1.0.26.1 TOP = . SUBDIRS = ac3dec as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ From 848e26d10e5d11e33727c318bd2f9eb5cf93e67f Mon Sep 17 00:00:00 2001 From: Fabio Estevam Date: Tue, 13 Nov 2012 10:08:14 -0200 Subject: [PATCH 078/166] ac3dec: Show usage if no parameter is passed When ac3dec is called without any argument the application hangs forever. Instead of hanging, print the usage and exit. Signed-off-by: Fabio Estevam Signed-off-by: Takashi Iwai --- ac3dec/ac3dec.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ac3dec/ac3dec.c b/ac3dec/ac3dec.c index 00c4f1a..89d7ce8 100644 --- a/ac3dec/ac3dec.c +++ b/ac3dec/ac3dec.c @@ -130,6 +130,11 @@ int main(int argc,char *argv[]) out_config.spdif = SPDIF_NONE; out_config.hdmi = 0; + if (isatty(fileno(stdin)) && (argc == 1)) { + help(); + return 1; + } + morehelp = 0; while (1) { int c; From 9a49ef8c62d34fab1486bb29c9eaf4a3cc4f7066 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Tue, 13 Nov 2012 14:29:56 +0100 Subject: [PATCH 079/166] Fix typos and missing files for hdajackretask to .gitignore Signed-off-by: Takashi Iwai --- .gitignore | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 1851333..93127b4 100644 --- a/.gitignore +++ b/.gitignore @@ -119,9 +119,10 @@ vxloader/Makefile vxloader/configure usx2yloader/tascam_fpga usx2yloader/tascam_fw +hdajackretask/configure hdajackretask/Makefile -hdajackreteask/configure -hdajackreteask/hdajackretask +hdajackretask/README.generated.h +hdajackretask/hdajackretask hda-verb/Makefile hda-verb/configure hda-verb/hda-verb From c2963afb1912a144bc67002096e05bb0d0087c38 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Tue, 13 Nov 2012 14:31:13 +0100 Subject: [PATCH 080/166] Add foreign automake option to hdajackretask/Makefile.am Signed-off-by: Takashi Iwai --- hdajackretask/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hdajackretask/Makefile.am b/hdajackretask/Makefile.am index fec5a8a..3479b83 100644 --- a/hdajackretask/Makefile.am +++ b/hdajackretask/Makefile.am @@ -14,6 +14,8 @@ CLEANFILES = README.generated.h README.generated.h: sed 's/\\/\\\\/g;s/"/\\"/g;s/^/"/;s/$$/\\n"/;' README >$@ +AUTOMAKE_OPTIONS = foreign + alsa-dist: distdir @rm -rf ../distdir/hdajackretask @mkdir -p ../distdir/hdajackretask From 6391a860e8caf25210c5b9e6c8f0aa0ff60aa64f Mon Sep 17 00:00:00 2001 From: David Henningsson Date: Thu, 28 Feb 2013 22:01:08 +0100 Subject: [PATCH 081/166] hdajackretask: Fix "advanced override" bug The values were not correctly retreived from the comboboxes. Signed-off-by: David Henningsson Signed-off-by: Takashi Iwai --- hdajackretask/main-gtk.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/hdajackretask/main-gtk.c b/hdajackretask/main-gtk.c index 65d0f3a..4227669 100644 --- a/hdajackretask/main-gtk.c +++ b/hdajackretask/main-gtk.c @@ -183,14 +183,14 @@ static void update_user_pin_config(ui_data_t* ui) continue; if (ui->free_overrides) { - int i; + int j; int index; unsigned long val = 0; - for (i = 0; i < FREE_OVERRIDES_COUNT; i++) { - index = gtk_combo_box_get_active(GTK_COMBO_BOX(pin_ui->jacktype)); - if (index < 0) + for (j = 0; j < FREE_OVERRIDES_COUNT; j++) { + index = gtk_combo_box_get_active(GTK_COMBO_BOX(pin_ui->free_override_cb[j])); + if (index < 0) break; - val += get_free_override_list(i)[index].value; + val += get_free_override_list(j)[index].value; } if (index < 0) continue; From c416c1180d9fd4fc6f20dcd9064d698114b14ea5 Mon Sep 17 00:00:00 2001 From: David Henningsson Date: Mon, 4 Mar 2013 15:10:48 +0100 Subject: [PATCH 082/166] hdajackretask: Some more UI fixes - don't overwrite a set advanced override unless necessary - fix "not present" never selected - remove some trailing whitespaces Signed-off-by: David Henningsson Signed-off-by: Takashi Iwai --- hdajackretask/main-gtk.c | 124 ++++++++++++++++++------------ hdajackretask/sysfs-pin-configs.c | 4 +- 2 files changed, 75 insertions(+), 53 deletions(-) diff --git a/hdajackretask/main-gtk.c b/hdajackretask/main-gtk.c index 4227669..9101af4 100644 --- a/hdajackretask/main-gtk.c +++ b/hdajackretask/main-gtk.c @@ -5,19 +5,22 @@ #include #include #include +#include #include "sysfs-pin-configs.h" #include "apply-changes.h" +typedef struct ui_data_t ui_data_t; + typedef struct pin_ui_data_t { pin_configs_t* pin_config; typical_pins_t pins_info[32]; GtkWidget *frame, *override, *jacktype; - GtkWidget* free_override_cb[FREE_OVERRIDES_COUNT]; + ui_data_t* owner; } pin_ui_data_t; -typedef struct ui_data_t { +struct ui_data_t { GList* pin_ui_data; GtkWidget *main_window; GtkWidget *content_scroll_widget; @@ -25,22 +28,35 @@ typedef struct ui_data_t { GtkWidget *codec_selection_combo; codec_name_t* current_codec; - int sysfs_pincount; + int sysfs_pincount; codec_name_t sysfs_codec_names[128]; pin_configs_t sysfs_pins[32]; gboolean free_overrides; gboolean trust_codec; gboolean trust_defcfg; gboolean model_auto; -} ui_data_t; +}; -static void override_toggled(GtkWidget* sender, pin_ui_data_t* data) +static void update_user_pin_config(ui_data_t* ui, pin_configs_t* cfg); + +static void update_override_sensitive(GtkWidget* sender, pin_ui_data_t* data) { int i; gboolean checked = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sender)); gtk_widget_set_sensitive(data->jacktype, checked); for (i = 0; i < FREE_OVERRIDES_COUNT; i++) - gtk_widget_set_sensitive(data->free_override_cb[i], checked); + gtk_widget_set_sensitive(data->free_override_cb[i], checked); +} + +static void override_toggled(GtkWidget* sender, pin_ui_data_t* data) +{ + update_override_sensitive(sender, data); + update_user_pin_config(data->owner, data->pin_config); +} + +static void jacktype_changed(GtkWidget* sender, pin_ui_data_t* data) +{ + update_user_pin_config(data->owner, data->pin_config); } static GtkWidget* create_pin_ui(ui_data_t* ui, pin_configs_t* pin_cfg) @@ -56,7 +72,8 @@ static GtkWidget* create_pin_ui(ui_data_t* ui, pin_configs_t* pin_cfg) data = calloc(1, sizeof(pin_ui_data_t)); data->pin_config = pin_cfg; - + data->owner = ui; + { /* Frame */ gchar* d = get_config_description(pin_cfg->init_pin_config); gchar* c = g_strdup_printf("Pin ID: 0x%02x", pin_cfg->nid); @@ -93,6 +110,7 @@ static GtkWidget* create_pin_ui(ui_data_t* ui, pin_configs_t* pin_cfg) gtk_combo_box_set_active(GTK_COMBO_BOX(jacktype), index); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(override), pin_cfg->user_override); g_signal_connect(override, "toggled", G_CALLBACK(override_toggled), data); + g_signal_connect(jacktype, "changed", G_CALLBACK(jacktype_changed), data); gtk_container_add(box, override); gtk_container_add(GTK_CONTAINER(jacktype_box), jacktype); @@ -125,6 +143,7 @@ static GtkWidget* create_pin_ui(ui_data_t* ui, pin_configs_t* pin_cfg) } if (index >= 0) gtk_combo_box_set_active(GTK_COMBO_BOX(data->free_override_cb[i]), index); + g_signal_connect(data->free_override_cb[i], "changed", G_CALLBACK(jacktype_changed), data); } gtk_grid_attach(grid, gtk_label_new("Connectivity"), 0, 0, 1, 1); @@ -148,7 +167,7 @@ static GtkWidget* create_pin_ui(ui_data_t* ui, pin_configs_t* pin_cfg) if (ui->free_overrides) gtk_container_add(box, GTK_WIDGET(grid)); } - override_toggled(data->override, data); + update_override_sensitive(data->override, data); gtk_container_add(GTK_CONTAINER(result), GTK_WIDGET(box)); ui->pin_ui_data = g_list_prepend(ui->pin_ui_data, data); @@ -166,45 +185,48 @@ static void free_pin_ui_data(pin_ui_data_t* data) static gint pin_config_find(pin_ui_data_t* pin_ui, pin_configs_t* cfg) { - return pin_ui->pin_config == cfg ? 0 : 1; + return pin_ui->pin_config == cfg ? 0 : 1; } -static void update_user_pin_config(ui_data_t* ui) +static void update_user_pin_config(ui_data_t* ui, pin_configs_t* cfg) +{ + pin_ui_data_t* pin_ui; + GList *pos = g_list_find_custom(ui->pin_ui_data, cfg, (GCompareFunc) pin_config_find); + cfg->user_override = FALSE; + if (!pos) + return; + pin_ui = pos->data; + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pin_ui->override))) + return; + + if (ui->free_overrides) { + int j; + int index; + unsigned long val = 0; + for (j = 0; j < FREE_OVERRIDES_COUNT; j++) { + index = gtk_combo_box_get_active(GTK_COMBO_BOX(pin_ui->free_override_cb[j])); + if (index < 0) + break; + val += get_free_override_list(j)[index].value; + } + if (index < 0) + return; + cfg->user_pin_config = val; + } else { + int index; + index = gtk_combo_box_get_active(GTK_COMBO_BOX(pin_ui->jacktype)); + if (index < 0) + return; + cfg->user_pin_config = pin_ui->pins_info[index].pin_set; + } + cfg->user_override = TRUE; +} + +static void update_all_user_pin_config(ui_data_t* ui) { int i; - for (i = 0; i < ui->sysfs_pincount; i++) { - pin_ui_data_t* pin_ui; - GList *pos = g_list_find_custom(ui->pin_ui_data, &ui->sysfs_pins[i], (GCompareFunc) pin_config_find); - ui->sysfs_pins[i].user_override = FALSE; - if (!pos) - continue; - pin_ui = pos->data; - if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pin_ui->override))) - continue; - - if (ui->free_overrides) { - int j; - int index; - unsigned long val = 0; - for (j = 0; j < FREE_OVERRIDES_COUNT; j++) { - index = gtk_combo_box_get_active(GTK_COMBO_BOX(pin_ui->free_override_cb[j])); - if (index < 0) - break; - val += get_free_override_list(j)[index].value; - } - if (index < 0) - continue; - ui->sysfs_pins[i].user_pin_config = val; - } else { - int index; - index = gtk_combo_box_get_active(GTK_COMBO_BOX(pin_ui->jacktype)); - if (index < 0) - continue; - ui->sysfs_pins[i].user_pin_config = pin_ui->pins_info[index].pin_set; - } - ui->sysfs_pins[i].user_override = TRUE; - } - + for (i = 0; i < ui->sysfs_pincount; i++) + update_user_pin_config(ui, &ui->sysfs_pins[i]); } static gboolean validate_user_pin_config(ui_data_t* ui, GError** err) @@ -215,7 +237,7 @@ static gboolean validate_user_pin_config(ui_data_t* ui, GError** err) g_set_error(err, 0, 0, "You must first select a codec!"); return FALSE; } - update_user_pin_config(ui); + update_all_user_pin_config(ui); if (ui->free_overrides) return TRUE; @@ -325,7 +347,7 @@ static void resize_main_window(ui_data_t* ui) } } -static void update_codec_ui(ui_data_t* ui) +static void update_codec_ui(ui_data_t* ui, bool codec_change) { int codec_index = gtk_combo_box_get_active(GTK_COMBO_BOX(ui->codec_selection_combo)); int i; @@ -337,7 +359,8 @@ static void update_codec_ui(ui_data_t* ui) if (codec_index < 0) return; ui->current_codec = &ui->sysfs_codec_names[codec_index]; - ui->sysfs_pincount = get_pin_configs_list(ui->sysfs_pins, 32, ui->current_codec->card, ui->current_codec->device); + if (codec_change) + ui->sysfs_pincount = get_pin_configs_list(ui->sysfs_pins, 32, ui->current_codec->card, ui->current_codec->device); for (i = 0; i < ui->sysfs_pincount; i++) { GtkWidget *w = create_pin_ui(ui, &ui->sysfs_pins[i]); if (w) @@ -350,14 +373,14 @@ static void update_codec_ui(ui_data_t* ui) static void codec_selected(GtkComboBox* combo, gpointer user_data) { - update_codec_ui(user_data); + update_codec_ui(user_data, true); } static void showallpins_toggled(GtkWidget* sender, ui_data_t* ui_data) { gboolean checked = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sender)); ui_data->trust_defcfg = !checked; - update_codec_ui(ui_data); + update_codec_ui(ui_data, false); } static void automodel_toggled(GtkWidget* sender, ui_data_t* ui_data) @@ -367,9 +390,8 @@ static void automodel_toggled(GtkWidget* sender, ui_data_t* ui_data) static void free_override_toggled(GtkWidget* sender, ui_data_t* ui_data) { - update_user_pin_config(ui_data); ui_data->free_overrides = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sender)); - update_codec_ui(ui_data); + update_codec_ui(ui_data, false); } static const char* readme_text = @@ -517,7 +539,7 @@ int main(int argc, char *argv[]) ui = create_ui(); gtk_widget_show_all(ui->main_window); if (ui->codec_selection_combo) - update_codec_ui(ui); + update_codec_ui(ui, true); gtk_main(); return 0; } diff --git a/hdajackretask/sysfs-pin-configs.c b/hdajackretask/sysfs-pin-configs.c index cd2897e..4044989 100644 --- a/hdajackretask/sysfs-pin-configs.c +++ b/hdajackretask/sysfs-pin-configs.c @@ -460,7 +460,7 @@ static free_override_t channel_arr[] = { static free_override_t* type_order[FREE_OVERRIDES_COUNT] = { - pc_arr, location_arr, device_arr, jack_arr, + pc_arr, location_arr, device_arr, jack_arr, color_arr, no_presence_arr, group_nr_arr, channel_arr }; @@ -472,7 +472,7 @@ unsigned long get_free_override_mask(int type) AC_DEFCFG_DEVICE, AC_DEFCFG_CONN_TYPE, AC_DEFCFG_COLOR, - AC_DEFCFG_MISC & 1, + AC_DEFCFG_MISC & (AC_DEFCFG_MISC_NO_PRESENCE << AC_DEFCFG_MISC_SHIFT), AC_DEFCFG_DEF_ASSOC, AC_DEFCFG_SEQUENCE, }; From 4f0f87503239f40d688b55224ccc359b9c8e52c6 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 9 Apr 2013 11:10:02 +0200 Subject: [PATCH 083/166] ac3dec: Remove the ac3dec tool There may be some licencing issues for the name and decoder (it is not build in the Fedora distro anyway). Sources will stay in repos, but almost all current players are able to handle DD AC-3. Signed-off-by: Jaroslav Kysela --- Makefile | 2 +- ac3dec/COPYING | 340 ------------------ ac3dec/Changelog | 58 ---- ac3dec/Makefile.am | 22 -- ac3dec/README | 52 --- ac3dec/TODO | 22 -- ac3dec/ac3dec.c | 251 -------------- ac3dec/ac3spdif.c | 166 --------- ac3dec/autogen.sh | 55 --- ac3dec/configure.in | 30 -- ac3dec/gitcompile | 11 - ac3dec/libac3/Makefile.am | 15 - ac3dec/libac3/ac3.h | 63 ---- ac3dec/libac3/ac3_internal.h | 344 ------------------ ac3dec/libac3/bit_allocate.c | 494 -------------------------- ac3dec/libac3/bit_allocate.h | 24 -- ac3dec/libac3/bitstream.c | 133 ------- ac3dec/libac3/bitstream.h | 76 ---- ac3dec/libac3/coeff.c | 353 ------------------- ac3dec/libac3/coeff.h | 24 -- ac3dec/libac3/crc.c | 96 ----- ac3dec/libac3/crc.h | 27 -- ac3dec/libac3/debug.c | 58 ---- ac3dec/libac3/debug.h | 37 -- ac3dec/libac3/decode.c | 150 -------- ac3dec/libac3/decode.h | 22 -- ac3dec/libac3/dither.c | 115 ------ ac3dec/libac3/dither.h | 37 -- ac3dec/libac3/downmix.c | 557 ----------------------------- ac3dec/libac3/downmix.h | 28 -- ac3dec/libac3/exponent.c | 135 ------- ac3dec/libac3/exponent.h | 28 -- ac3dec/libac3/imdct.c | 479 ------------------------- ac3dec/libac3/imdct.h | 26 -- ac3dec/libac3/parse.c | 656 ----------------------------------- ac3dec/libac3/parse.h | 29 -- ac3dec/libac3/rematrix.c | 83 ----- ac3dec/libac3/rematrix.h | 25 -- ac3dec/libac3/sanity_check.c | 131 ------- ac3dec/libac3/sanity_check.h | 27 -- ac3dec/libac3/stats.c | 178 ---------- ac3dec/libac3/stats.h | 27 -- ac3dec/output.c | 224 ------------ ac3dec/output.h | 40 --- ac3dec/plot_spectrum.m | 17 - ac3dec/test/Makefile.am | 37 -- ac3dec/test/dither_test.c | 43 --- ac3dec/test/imdct_test.c | 38 -- ac3dec/test/timing.h | 14 - ac3dec/tools/Makefile.am | 12 - ac3dec/tools/extract_ac3.c | 314 ----------------- 51 files changed, 1 insertion(+), 6224 deletions(-) delete mode 100644 ac3dec/COPYING delete mode 100644 ac3dec/Changelog delete mode 100644 ac3dec/Makefile.am delete mode 100644 ac3dec/README delete mode 100644 ac3dec/TODO delete mode 100644 ac3dec/ac3dec.c delete mode 100644 ac3dec/ac3spdif.c delete mode 100644 ac3dec/autogen.sh delete mode 100644 ac3dec/configure.in delete mode 100755 ac3dec/gitcompile delete mode 100644 ac3dec/libac3/Makefile.am delete mode 100644 ac3dec/libac3/ac3.h delete mode 100644 ac3dec/libac3/ac3_internal.h delete mode 100644 ac3dec/libac3/bit_allocate.c delete mode 100644 ac3dec/libac3/bit_allocate.h delete mode 100644 ac3dec/libac3/bitstream.c delete mode 100644 ac3dec/libac3/bitstream.h delete mode 100644 ac3dec/libac3/coeff.c delete mode 100644 ac3dec/libac3/coeff.h delete mode 100644 ac3dec/libac3/crc.c delete mode 100644 ac3dec/libac3/crc.h delete mode 100644 ac3dec/libac3/debug.c delete mode 100644 ac3dec/libac3/debug.h delete mode 100644 ac3dec/libac3/decode.c delete mode 100644 ac3dec/libac3/decode.h delete mode 100644 ac3dec/libac3/dither.c delete mode 100644 ac3dec/libac3/dither.h delete mode 100644 ac3dec/libac3/downmix.c delete mode 100644 ac3dec/libac3/downmix.h delete mode 100644 ac3dec/libac3/exponent.c delete mode 100644 ac3dec/libac3/exponent.h delete mode 100644 ac3dec/libac3/imdct.c delete mode 100644 ac3dec/libac3/imdct.h delete mode 100644 ac3dec/libac3/parse.c delete mode 100644 ac3dec/libac3/parse.h delete mode 100644 ac3dec/libac3/rematrix.c delete mode 100644 ac3dec/libac3/rematrix.h delete mode 100644 ac3dec/libac3/sanity_check.c delete mode 100644 ac3dec/libac3/sanity_check.h delete mode 100644 ac3dec/libac3/stats.c delete mode 100644 ac3dec/libac3/stats.h delete mode 100644 ac3dec/output.c delete mode 100644 ac3dec/output.h delete mode 100644 ac3dec/plot_spectrum.m delete mode 100644 ac3dec/test/Makefile.am delete mode 100644 ac3dec/test/dither_test.c delete mode 100644 ac3dec/test/imdct_test.c delete mode 100644 ac3dec/test/timing.h delete mode 100644 ac3dec/tools/Makefile.am delete mode 100644 ac3dec/tools/extract_ac3.c diff --git a/Makefile b/Makefile index c01de06..cd2af64 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ VERSION = 1.0.26.1 TOP = . -SUBDIRS = ac3dec as10k1 envy24control hdsploader hdspconf hdspmixer \ +SUBDIRS = as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ us428control usx2yloader vxloader echomixer ld10k1 qlo10k1 \ hwmixvolume hdajackretask hda-verb diff --git a/ac3dec/COPYING b/ac3dec/COPYING deleted file mode 100644 index 5b6e7c6..0000000 --- a/ac3dec/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/ac3dec/Changelog b/ac3dec/Changelog deleted file mode 100644 index fba3daf..0000000 --- a/ac3dec/Changelog +++ /dev/null @@ -1,58 +0,0 @@ -ac3dec-0.6.1 Mon Mar 27 20:27:06 EST 2000 --Fix another 2.0 problem (rematrix was wrong). --Fix the never resync on a bad crc bug. - -ac3dec-0.6.0 Sat Mar 18 19:43:25 EST 2000 --New library interface --Fix bug wrt coupling channels that was causing sound quality problems. --Fix 2.0 mode problems (aka the I forgot to implement the phase flags bug). --All around speed improvements (almost twice as fast) --Improved robustness when fed bad data. The entire frame is checksummed before playback. - -ac3dec-0.5.6 Tue Nov 16 00:37:34 EST 1999 --Irix support --Alpha fixes --Minor performance enhancements to downmix and imdct --OpenBSD fixes --extract_ac3 can now read from stdin --Change output_linux to block on write instead of using the - ring buffer. Let me know if this causes/fixes any problems - -ac3dec-0.5.5 Wed Aug 25 15:36:44 EDT 1999 --Fixed a cut and paste bug (argh!) in parse.c which potentially - screwed up delta bit allocation info. --Martin Mueller informed me that I was missing - some corrections from the AC-3 errata document. It turns out that - I used an earlier version of the errata when I initially wrote ac3dec. - Fortunately the errata fix the outstanding bugs that I was pulling - my hair out on for a long time. Woohoo! Thanks Martin. Kudos to Dolby - Labs for keeping their documentation up to date as well. --stereo downmixing (downmix.c) is now in. Matrix encoded surround - (Dolby Prologic Surround) should work too. --clipping due to high level signals has been fixed. We normalize a - block of samples by its maximum absolute value if the max exceeds - the %100 digital level. This shouldn't be a problem, but for some - reason some channels have a dynamic range that exceeds [-1.0,1.0]. - I blame the encoder :) --Multiple track support in extract_ac3. Simply just give it the track - number you want [1,8] after the filename. - -ac3dec-0.5.4 Thu Jul 29 16:55:10 PDT 1999 --Fixed a stupid bug with the coupling channel that was causing - high frequencies to be attenuated. --Re-wrote the extract_ac3 tool. --Added to a tool to verify the checksums on a given AC3 stream. - (tools/verify_ac3) - -ac3dec-0.5.3 Mon Jul 12 10:45:56 PDT 1999 --Fixed problems related to streams with coupling channel enabled. --Minor performance enhancements - -ac3dec-0.5.2 Sun Jul 4 12:00:25 PDT 1999 --output_linux.c patch provided by Michael Holzt - -ac3dec-0.5.1 Wed Jun 30 17:48:52 PDT 1999 --Compiles and dies gracefully under Linux now. - -ac3dec-0.5.0 Wed Jun 23 11:06:06 EDT 1999 --First public release of ac3dec. diff --git a/ac3dec/Makefile.am b/ac3dec/Makefile.am deleted file mode 100644 index bc1b2a5..0000000 --- a/ac3dec/Makefile.am +++ /dev/null @@ -1,22 +0,0 @@ -# # Process this file with automake to produce Makefile.in. -AUTOMAKE_OPTIONS = 1.3 foreign - -bin_PROGRAMS = ac3dec - -ac3dec_LDADD= -L./libac3 -lac3 -lm - -noinst_HEADERS = output.h -ac3dec_SOURCES = ac3dec.c output.c ac3spdif.c -ac3dec_DEPENDENCIES = libac3/libac3.a - - -EXTRA_DIST = gitcompile README Changelog TODO plot_spectrum.m autogen.sh \ - depcomp - -SUBDIRS = libac3 tools test . - -alsa-dist: distdir - @rm -rf ../distdir/ac3dec - @mkdir -p ../distdir/ac3dec - @cp -RLpv $(distdir)/* ../distdir/ac3dec - @rm -rf $(distdir) diff --git a/ac3dec/README b/ac3dec/README deleted file mode 100644 index 19e3a49..0000000 --- a/ac3dec/README +++ /dev/null @@ -1,52 +0,0 @@ -ac3dec - a free AC-3 stream decoder - -Written by Aaron Holtzman (aholtzma@engr.uvic.ca) - -Contributors: - Michael Holzt - OSS output.c and misc errata - Jim Miller - IRIX output.c - Angelos Keromytis - OpenBSD fixes - Don Mahurin - stdin support for extract_ac3 - Takefumi SAYO - FreeBSD tweak - Charles M. Hannum - fixes - - -See the file COPYING for license details. - -The currently supported platforms are Linux, Solaris, IRIX, OpenBSD, and -FreeBSD. If you want support for other platforms, take a look at -output_*.c for an idea of what you need to do. - -This software is completely useless to 99.99 percent of users -out there. It is mostly of use to those interested in audio -coding research and evaluating codecs. It could theoretically -be used as a portion of a DVD playback system for unix systems. - -HOW TO COMPILE - -Building ac3dec should be easy. Here's how: - -./configure && make all - -USAGE - -To find AC-3 streams on the internet, use www.google.com and -search for "vob trailer". A vob is a "Video Object" which is -just an MPEG-2 stream. The site www.hollywood.com has a -few good MPEG-2s with AC-3 audio. The program tools/extract_ac3 -will take an MPEG-2 stream and spit out AC-3 audio to stdout if -it exists. You can easily pipe this data to the ac3 player like -this: - - ./tools/extract_ac3 foo.vob | ./ac3dec/ - -You can also get AC-3 streams on a DVD. Check out -http://www.linuxvideo.org for details. - -DEBUG OUTPUT - -You can get a whole pile of debug info by setting the environment -variable AC3_DEBUG=1. Be sure to pipe stderr to a file or you probably -won't get realtime playback. You can pipe stderr to a file like so: - - ./ac3dec foo.ac3 2> debug.out diff --git a/ac3dec/TODO b/ac3dec/TODO deleted file mode 100644 index 02e0894..0000000 --- a/ac3dec/TODO +++ /dev/null @@ -1,22 +0,0 @@ -- Detect hrtime on solaris and enable it via config.h -- Add multilevel debug output -- change the divides/moduluos in coeff_get_mantissa to table - lookups. Need to look at stats first though. -- rewrite imdct to use split 2/4 radix fft -- investigate strangeness in 256 point imdct (weird transients?) - - -DONE -- fix the bitstream interface to allow on aligned buffers - Feb 2000 -AH -- change dither.c, crc.c to use a lookup table - March 2000 -AH -- the output signal from the IMDCT sometimes is outside the rand - of [-1.0,1.0]. This is why there is the normalization pass in - output.c. Need to investigate and hopefully we can move the - normalization. - Feb 2000 -AH -- Mute frame on error. Feb 2000 -AH -- Revisit convert_to_float and use int->float with scaling - Feb 2000 -AH -- Use proper frame sizes in auxdata parsing - July 1999 - AH -- fix clipping in output (normalize to max digital output) - Aug 99 -AH -- Fix coupling channel support - July 1999 - AH -- Add delta bit allocation support - July 1999 - AH -- Add downmixing support - Sept 1999 - AH, Yeqing Deng diff --git a/ac3dec/ac3dec.c b/ac3dec/ac3dec.c deleted file mode 100644 index 89d7ce8..0000000 --- a/ac3dec/ac3dec.c +++ /dev/null @@ -1,251 +0,0 @@ -/* - * ac3dec.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - */ - - -#include -#include -#include -#include -#include -#include -#include -#include "config.h" - -#include "libac3/ac3.h" -#include "output.h" - -void init_spdif(void); -int output_spdif_zero(int frames); -int output_spdif_leadin(void); -int output_spdif(uint_8 *data_start, uint_8 *data_end, int quiet); - -static int end_flag = 0; -static int quiet = 0; - -static void help(void) -{ - printf("Usage: ac3dec [file] [[file]] ...\n"); - printf("\nAvailable options:\n"); - printf(" -h,--help this help\n"); - printf(" -v,--version print version of this program\n"); - printf(" -D,--device=NAME select PCM by NAME\n"); - printf(" -c,--card=ID select card for bellow modes\n"); - printf(" -4,--4ch four channels mode\n"); - printf(" -6,--6ch six channels mode\n"); - printf(" -C,--iec958c raw IEC958 (S/PDIF) consumer mode\n"); - printf(" -P,--iec958p raw IEC958 (S/PDIF) professional mode\n"); - printf(" -R,--iec958r raw IEC958 (S/PDIF) PCM\n"); - printf(" -H,--hdmi output to HDMI device\n"); - printf(" -Z,--zero=# add # zero-AC3-frames before stream\n"); - printf(" -q,--quiet quiet mode\n"); -} - -#define CHUNK_SIZE 2047 -uint_8 buf[CHUNK_SIZE]; -FILE *in_file; - -ssize_t fill_buffer(uint_8 **start,uint_8 **end) -{ - uint_32 bytes_read; - - *start = buf; - - bytes_read = fread(*start,1,CHUNK_SIZE,in_file); - - if (feof(in_file) || ferror(in_file) || bytes_read < CHUNK_SIZE) { - end_flag = 1; - return EOF; - } - - *end = *start + bytes_read; - return bytes_read; -} - -static void ac3dec_signal_handler(int signal) -{ - if (!quiet) - fprintf(stderr, "Aborted...\n"); - // it's important to close the PCM handle(s), because - // some driver settings have to be recovered - output_close(); - fclose(in_file); - exit(EXIT_FAILURE); -} - -int main(int argc,char *argv[]) -{ - struct option long_option[] = - { - {"help", 0, NULL, 'h'}, - {"version", 0, NULL, 'v'}, - {"device", 1, NULL, 'D'}, - {"4ch", 0, NULL, '4'}, - {"6ch", 0, NULL, '6'}, - {"card", 1, NULL, 'c'}, - {"iec958c", 0, NULL, 'C'}, - {"spdif", 0, NULL, 'C'}, - {"iec958p", 0, NULL, 'P'}, - {"iec958r", 0, NULL, 'R'}, - {"hdmi", 0, NULL, 'H'}, - {"zero", 1, NULL, 'Z'}, - {"quiet", 0, NULL, 'q'}, - {NULL, 0, NULL, 0}, - }; - ac3_config_t ac3_config; - output_t out_config; - int morehelp, loop = 0; - int zero = 0; - - bzero(&ac3_config, sizeof(ac3_config)); - ac3_config.fill_buffer_callback = fill_buffer; - ac3_config.num_output_ch = 2; - ac3_config.flags = 0; - bzero(&out_config, sizeof(out_config)); - out_config.pcm_name = NULL; - out_config.card = NULL; - out_config.bits = 16; - out_config.rate = 48000; - out_config.channels = 2; - out_config.spdif = SPDIF_NONE; - out_config.hdmi = 0; - - if (isatty(fileno(stdin)) && (argc == 1)) { - help(); - return 1; - } - - morehelp = 0; - while (1) { - int c; - - if ((c = getopt_long(argc, argv, "hvc:D:46HCPRZ:q", long_option, NULL)) < 0) - break; - switch (c) { - case 'h': - morehelp++; - break; - case 'v': - printf("ac3dec version " VERSION "\n"); - return 1; - case 'c': - out_config.card = strdup(optarg); - break; - case 'D': - out_config.pcm_name = optarg; - break; - case '4': - if (out_config.spdif == SPDIF_NONE) - ac3_config.num_output_ch = 4; - break; - case '6': - if (out_config.spdif == SPDIF_NONE) - ac3_config.num_output_ch = 6; - break; - case 'C': - ac3_config.num_output_ch = 2; - out_config.spdif = SPDIF_CON; - break; - case 'P': - ac3_config.num_output_ch = 2; - out_config.spdif = SPDIF_PRO; - break; - case 'R': - ac3_config.num_output_ch = 2; - out_config.spdif = SPDIF_PCM; - break; - case 'H': - out_config.hdmi = 1; - break; - case 'Z': - zero = atoi(optarg); - break; - case 'q': - ac3_config.flags |= AC3_QUIET; - out_config.quiet = 1; - quiet = 1; - break; - default: - fprintf(stderr, "\07Invalid switch or option needs an argument.\n"); - morehelp++; - } - } - out_config.channels = ac3_config.num_output_ch; - if (morehelp) { - help(); - return 1; - } - - while (1) { - if (argc - optind <= 0) { - if (loop || end_flag) - break; - in_file = stdin; - } else { - in_file = fopen(argv[optind],"r"); - if(!in_file) { - fprintf(stderr,"%s - Couldn't open file %s\n",strerror(errno),argv[optind]); - exit(EXIT_FAILURE); - } - optind++; - loop++; - } - if ((out_config.spdif == SPDIF_NONE) || (out_config.spdif == SPDIF_PCM)) { - ac3_frame_t *ac3_frame; - ac3_init(&ac3_config); - ac3_frame = ac3_decode_frame(); - out_config.rate = ac3_frame->sampling_rate; - if (output_open(&out_config) < 0) { - fprintf(stderr, "Output open failed\n"); - exit(EXIT_FAILURE); - } - signal(SIGINT, ac3dec_signal_handler); - signal(SIGTERM, ac3dec_signal_handler); - signal(SIGABRT, ac3dec_signal_handler); - do { - //Send the samples to the output device - output_play(ac3_frame->audio_data, 256 * 6); - } while((ac3_frame = ac3_decode_frame())); - } else { - uint_8 *start, *end; - init_spdif(); - if (output_open(&out_config) < 0) { - fprintf(stderr, "Output open failed\n"); - exit(EXIT_FAILURE); - } - signal(SIGINT, ac3dec_signal_handler); - signal(SIGTERM, ac3dec_signal_handler); - signal(SIGABRT, ac3dec_signal_handler); - if (zero > 0) - output_spdif_zero(zero); - else - output_spdif_leadin(); - while (fill_buffer(&start, &end) > 0) - if (output_spdif(start, end, quiet) < 0) - break; - } - output_close(); - fclose(in_file); - } - return EXIT_SUCCESS; -} diff --git a/ac3dec/ac3spdif.c b/ac3dec/ac3spdif.c deleted file mode 100644 index 3a568a4..0000000 --- a/ac3dec/ac3spdif.c +++ /dev/null @@ -1,166 +0,0 @@ -/***************************************************************************/ -/* This code has been fully inspired from various place */ -/* I will give their name later. May they be bless .... It works */ -/* */ -/* For the moment test it. */ -/* */ -/* 27-08-00 -- Ze'ev Maor -- fixed recovery from flase syncword detection */ -/* */ -/* 24-08-00 -- Ze'ev Maor -- Modified for integrtion with DXR3-OMS-plugin */ -/***************************************************************************/ - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "output.h" - -void swab(const void*, void*, size_t); - -#define BLOCK_SIZE 6144 - -static unsigned char buf[BLOCK_SIZE]; -static uint32_t sbuffer_size; -static syncinfo_t syncinfo; -static char *sbuffer; -static int done_banner; - -static uint32_t -buffer_syncframe(syncinfo_t *syncinfo, uint8_t **start, uint8_t *end) -{ - uint8_t *cur = *start; - uint16_t syncword = syncinfo->syncword; - uint32_t ret = 0; - - // - // Find an ac3 sync frame. - // - while(syncword != 0x0b77) - { - if(cur >= end) - goto done; - syncword = (syncword << 8) + *cur++; - } - - //need the next 3 bytes to decide how big the frame is - while(sbuffer_size < 3) - { - if(cur >= end) - goto done; - - sbuffer[sbuffer_size++] = *cur++; - } - - parse_syncinfo_data(syncinfo,sbuffer); - - while(sbuffer_size < (uint32_t)syncinfo->frame_size * 2 - 2) - { - if(cur >= end) - goto done; - - sbuffer[sbuffer_size++] = *cur++; - } - - crc_init(); - crc_process_frame(sbuffer,syncinfo->frame_size * 2 - 2); - - if(!crc_validate()) - { - //error_flag = 1; - fprintf(stderr,"** CRC failed - skipping frame **\n"); - syncword = 0xffff; - sbuffer_size = 0; - bzero(buf,BLOCK_SIZE); - - goto done; - } - // - //if we got to this point, we found a valid ac3 frame to decode - // - - //reset the syncword for next time - syncword = 0xffff; - sbuffer_size = 0; - ret = 1; - - done: - syncinfo->syncword = syncword; - *start = cur; - return ret; -} - -void -init_spdif(void) -{ - sbuffer_size = 0; - sbuffer = &buf[10]; - done_banner = 0; -} - -int -output_spdif_zero(int frames) -{ - int res; - - buf[0] = 0x72; buf[1] = 0xf8; // spdif syncword - buf[2] = 0x1f; buf[3] = 0x4e; // .............. - buf[4] = 0x00; // null frame (no data) - buf[5] = 7 << 5; // stream = 7 - buf[6] = 0x00; buf[7] = 0x00; // frame size - memset(&buf[8], 0, BLOCK_SIZE - 8); - while (frames-- > 0) { - res = output_play((short *)buf, BLOCK_SIZE / 2 / 2); /* 2 channels, 16-bit samples */ - if (res < 0) - return res; - } - return 0; -} - -int -output_spdif_leadin(void) -{ - memset(buf, 0, 8); - return output_play((short *)buf, 8); -} - -int -output_spdif(uint8_t *data_start, uint8_t *data_end, int quiet) -{ - int ret = 0, res; - - while(buffer_syncframe(&syncinfo, &data_start, data_end)) - { - buf[0] = 0x72; buf[1] = 0xf8; // spdif syncword - buf[2] = 0x1f; buf[3] = 0x4e; // .............. - buf[4] = 0x01; // AC3 data - buf[5] = buf[13] & 7; // bsmod, stream = 0 - buf[6] = (syncinfo.frame_size * 16) & 0xff; - buf[7] = ((syncinfo.frame_size * 16) >> 8) & 0xff; - buf[8] = 0x77; buf[9] = 0x0b; // AC3 syncwork - - if (!done_banner && !quiet) { - fprintf(stdout,"AC3 Stream "); - fprintf(stdout,"%2.1f KHz",syncinfo.sampling_rate * 1e-3); - fprintf(stdout,"%4d kbps",syncinfo.bit_rate); - fprintf(stdout,"\n"); - done_banner = 1; - } - -#ifndef _a_b_c_d_e_f /* WORDS_BIGENDIAN */ - // extract_ac3 seems to write swabbed data - swab(&buf[10], &buf[10], syncinfo.frame_size * 2 - 2); -#endif - res = output_play((short *)buf, BLOCK_SIZE / 2 / 2); /* 2 channels, 16-bit samples */ - ret = ret < 0 ? ret : res; - bzero(buf,BLOCK_SIZE); - } - return ret; -} diff --git a/ac3dec/autogen.sh b/ac3dec/autogen.sh deleted file mode 100644 index e538fa7..0000000 --- a/ac3dec/autogen.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/sh -# Run this to generate all the initial makefiles, etc. -# This was lifted from the Gimp, and adapted slightly by -# Raph Levien . - -DIE=0 - -PROG=ac3dec - -(autoconf --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "You must have autoconf installed to compile $PROG." - echo "Download the appropriate package for your distribution," - echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" - DIE=1 -} - -# Do we really need libtool? -#(libtool --version) < /dev/null > /dev/null 2>&1 || { -# echo -# echo "You must have libtool installed to compile $PROG." -# echo "Get ftp://ftp.gnu.org/pub/gnu/libtool-1.2.tar.gz" -# echo "(or a newer version if it is available)" -# DIE=1 -#} - -(automake --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "You must have automake installed to compile $PROG." - echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz" - echo "(or a newer version if it is available)" - DIE=1 -} - -if test "$DIE" -eq 1; then - exit 1 -fi - -if test -z "$*"; then - echo "I am going to run ./configure with no arguments - if you wish " - echo "to pass any to it, please specify them on the $0 command line." -fi - -for dir in . -do - echo processing $dir - (cd $dir; \ - aclocalinclude="$ACLOCAL_FLAGS"; \ - aclocal $aclocalinclude; \ - autoheader; automake --foreign -a; autoconf) -done -./configure "$@" - -echo -echo "Now type 'make' to compile $PROG." diff --git a/ac3dec/configure.in b/ac3dec/configure.in deleted file mode 100644 index 8d5d41b..0000000 --- a/ac3dec/configure.in +++ /dev/null @@ -1,30 +0,0 @@ -dnl Autoconf configuration script ac3dec -dnl -dnl Aaron Holtzman - May 1999 -dnl -AC_INIT(ac3dec.c) -AM_CONFIG_HEADER(config.h) -AC_CANONICAL_HOST -AC_PREREQ(2.13) -AM_INIT_AUTOMAKE(ac3dec, 0.6.1) - -AM_MAINTAINER_MODE -AC_PROG_CC -AC_PROG_GCC_TRADITIONAL -AC_PROG_RANLIB - -AC_C_BIGENDIAN - -AM_PATH_ALSA(1.0.0) - -dnl Set the appropriate architecture define -dnl case "$host" in -dnl i?86-*) AC_DEFINE(__i386__, 1, [Using i386 architecture]);; -dnl alpha*-*) AC_DEFINE(__alpha__, 1, [Using Alpha architecture]);; -dnl sparc-*) AC_DEFINE(__sparc__, 1, [Using SPARC architecture]);; -dnl ppc-*|powerpc-*) AC_DEFINE(__ppc__, 1, [Using PowerPC architecture]);; -dnl ia64-*) AC_DEFINE(__ia64__, 1, [Using IA-64 architecture]);; -dnl *) echo "$host is not currently supported by ac3dec"; exit 1;; -dnl esac - -AC_OUTPUT(libac3/Makefile tools/Makefile test/Makefile Makefile ) diff --git a/ac3dec/gitcompile b/ac3dec/gitcompile deleted file mode 100755 index 694d5c2..0000000 --- a/ac3dec/gitcompile +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -aclocal $ACLOCAL_FLAGS || exit 1 -autoheader || exit 1 -automake --add-missing --copy --foreign || exit 1 -touch depcomp || exit 1 -autoconf || exit 1 -./configure $* || exit 1 -if [ -z "$GITCOMPILE_NO_MAKE" ]; then - make || exit 1 -fi diff --git a/ac3dec/libac3/Makefile.am b/ac3dec/libac3/Makefile.am deleted file mode 100644 index 5d60a66..0000000 --- a/ac3dec/libac3/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -# # Process this file with automake to produce Makefile.in. -AUTOMAKE_OPTIONS = 1.3 foreign - -CFLAGS = -Wall -O1 -g - -noinst_LIBRARIES = libac3.a - -libac3_a_SOURCES = bitstream.c decode.c imdct.c coeff.c exponent.c stats.c\ - bit_allocate.c parse.c crc.c debug.c rematrix.c downmix.c dither.c \ - sanity_check.c - -noinst_HEADERS = ac3_internal.h bitstream.h decode.h imdct.h ac3.h stats.h coeff.h\ - exponent.h bit_allocate.h parse.h crc.h debug.h rematrix.h downmix.h dither.h \ - sanity_check.h - diff --git a/ac3dec/libac3/ac3.h b/ac3dec/libac3/ac3.h deleted file mode 100644 index d0ba1b7..0000000 --- a/ac3dec/libac3/ac3.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * ac3.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - */ - -#ifndef AARONS_TYPES -#define AARONS_TYPES -typedef unsigned long long uint_64; -typedef unsigned int uint_32; -typedef unsigned short uint_16; -typedef unsigned char uint_8; - -typedef signed long long sint_64; -typedef signed int sint_32; -typedef signed short sint_16; -typedef signed char sint_8; -#endif - -#define AC3_DOLBY_SURR_ENABLE 0x1 -#define AC3_3DNOW_ENABLE 0x2 -#define AC3_MMX_ENABLE 0x4 -#define AC3_ALTIVEC_ENABLE 0x8 -#define AC3_QUIET 0x10 - -typedef struct ac3_config_s -{ - //Bit flags that enable various things - uint_32 flags; - //Callback that points the decoder to new stream data - ssize_t (*fill_buffer_callback)(uint_8 **, uint_8 **); - //Number of discrete channels in final output (for downmixing) - uint_16 num_output_ch; - //Which channel of a dual mono stream to select - uint_16 dual_mono_ch_sel; -} ac3_config_t; - -typedef struct ac3_frame_s -{ - uint_32 sampling_rate; - sint_16 *audio_data; -} ac3_frame_t; - -void ac3_init(ac3_config_t *config); -ac3_frame_t* ac3_decode_frame(void); diff --git a/ac3dec/libac3/ac3_internal.h b/ac3dec/libac3/ac3_internal.h deleted file mode 100644 index 7a20c5b..0000000 --- a/ac3dec/libac3/ac3_internal.h +++ /dev/null @@ -1,344 +0,0 @@ -/* - * ac3_internal.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#ifndef __GNUC__ -#define inline -#endif - -/* Exponent strategy constants */ -#define EXP_REUSE (0) -#define EXP_D15 (1) -#define EXP_D25 (2) -#define EXP_D45 (3) - -/* Delta bit allocation constants */ -#define DELTA_BIT_REUSE (0) -#define DELTA_BIT_NEW (1) -#define DELTA_BIT_NONE (2) -#define DELTA_BIT_RESERVED (3) - -/* samples work structure */ -typedef float stream_samples_t[6][256]; - -/* global config structure */ -extern ac3_config_t ac3_config; -/* global error flag */ -extern uint_32 error_flag; - -/* Everything you wanted to know about band structure */ -/* - * The entire frequency domain is represented by 256 real - * floating point fourier coefficients. Only the lower 253 - * coefficients are actually utilized however. We use arrays - * of 256 to be efficient in some cases. - * - * The 5 full bandwidth channels (fbw) can have their higher - * frequencies coupled together. These coupled channels then - * share their high frequency components. - * - * This coupling band is broken up into 18 sub-bands starting - * at mantissa number 37. Each sub-band is 12 bins wide. - * - * There are 50 bit allocation sub-bands which cover the entire - * frequency range. The sub-bands are of non-uniform width, and - * approximate a 1/6 octave scale. - */ - -/* The following structures are filled in by their corresponding parse_* - * functions. See http://www.atsc.org/Standards/A52/a_52.pdf for - * full details on each field. Indented fields are used to denote - * conditional fields. - */ - -typedef struct syncinfo_s -{ - uint_32 magic; - /* Sync word == 0x0B77 */ - uint_16 syncword; - /* crc for the first 5/8 of the sync block */ - /* uint_16 crc1; */ - /* Stream Sampling Rate (kHz) 0 = 48, 1 = 44.1, 2 = 32, 3 = reserved */ - uint_16 fscod; - /* Frame size code */ - uint_16 frmsizecod; - - /* Information not in the AC-3 bitstream, but derived */ - /* Frame size in 16 bit words */ - uint_16 frame_size; - /* Bit rate in kilobits */ - uint_16 bit_rate; - /* sampling rate in hertz */ - uint_32 sampling_rate; - -} syncinfo_t; - -typedef struct bsi_s -{ - uint_32 magic; - /* Bit stream identification == 0x8 */ - uint_16 bsid; - /* Bit stream mode */ - uint_16 bsmod; - /* Audio coding mode */ - uint_16 acmod; - /* If we're using the centre channel then */ - /* centre mix level */ - uint_16 cmixlev; - /* If we're using the surround channel then */ - /* surround mix level */ - uint_16 surmixlev; - /* If we're in 2/0 mode then */ - /* Dolby surround mix level - NOT USED - */ - uint_16 dsurmod; - /* Low frequency effects on */ - uint_16 lfeon; - /* Dialogue Normalization level */ - uint_16 dialnorm; - /* Compression exists */ - uint_16 compre; - /* Compression level */ - uint_16 compr; - /* Language code exists */ - uint_16 langcode; - /* Language code */ - uint_16 langcod; - /* Audio production info exists*/ - uint_16 audprodie; - uint_16 mixlevel; - uint_16 roomtyp; - /* If we're in dual mono mode (acmod == 0) then extra stuff */ - uint_16 dialnorm2; - uint_16 compr2e; - uint_16 compr2; - uint_16 langcod2e; - uint_16 langcod2; - uint_16 audprodi2e; - uint_16 mixlevel2; - uint_16 roomtyp2; - /* Copyright bit */ - uint_16 copyrightb; - /* Original bit */ - uint_16 origbs; - /* Timecode 1 exists */ - uint_16 timecod1e; - /* Timecode 1 */ - uint_16 timecod1; - /* Timecode 2 exists */ - uint_16 timecod2e; - /* Timecode 2 */ - uint_16 timecod2; - /* Additional bit stream info exists */ - uint_16 addbsie; - /* Additional bit stream length - 1 (in bytes) */ - uint_16 addbsil; - /* Additional bit stream information (max 64 bytes) */ - uint_8 addbsi[64]; - - /* Information not in the AC-3 bitstream, but derived */ - /* Number of channels (excluding LFE) - * Derived from acmod */ - uint_16 nfchans; -} bsi_t; - - -/* more pain */ -typedef struct audblk_s -{ - uint_32 magic1; - /* block switch bit indexed by channel num */ - uint_16 blksw[5]; - /* dither enable bit indexed by channel num */ - uint_16 dithflag[5]; - /* dynamic range gain exists */ - uint_16 dynrnge; - /* dynamic range gain */ - uint_16 dynrng; - /* if acmod==0 then */ - /* dynamic range 2 gain exists */ - uint_16 dynrng2e; - /* dynamic range 2 gain */ - uint_16 dynrng2; - /* coupling strategy exists */ - uint_16 cplstre; - /* coupling in use */ - uint_16 cplinu; - /* channel coupled */ - uint_16 chincpl[5]; - /* if acmod==2 then */ - /* Phase flags in use */ - uint_16 phsflginu; - /* coupling begin frequency code */ - uint_16 cplbegf; - /* coupling end frequency code */ - uint_16 cplendf; - /* coupling band structure bits */ - uint_16 cplbndstrc[18]; - /* Do coupling co-ords exist for this channel? */ - uint_16 cplcoe[5]; - /* Master coupling co-ordinate */ - uint_16 mstrcplco[5]; - /* Per coupling band coupling co-ordinates */ - uint_16 cplcoexp[5][18]; - uint_16 cplcomant[5][18]; - /* Phase flags for dual mono */ - uint_16 phsflg[18]; - /* Is there a rematrixing strategy */ - uint_16 rematstr; - /* Rematrixing bits */ - uint_16 rematflg[4]; - /* Coupling exponent strategy */ - uint_16 cplexpstr; - /* Exponent strategy for full bandwidth channels */ - uint_16 chexpstr[5]; - /* Exponent strategy for lfe channel */ - uint_16 lfeexpstr; - /* Channel bandwidth for independent channels */ - uint_16 chbwcod[5]; - /* The absolute coupling exponent */ - uint_16 cplabsexp; - /* Coupling channel exponents (D15 mode gives 18 * 12 /3 encoded exponents */ - uint_16 cplexps[18 * 12 / 3]; - /* Sanity checking constant */ - uint_32 magic2; - /* fbw channel exponents */ - uint_16 exps[5][252 / 3]; - /* channel gain range */ - uint_16 gainrng[5]; - /* low frequency exponents */ - uint_16 lfeexps[3]; - - /* Bit allocation info */ - uint_16 baie; - /* Slow decay code */ - uint_16 sdcycod; - /* Fast decay code */ - uint_16 fdcycod; - /* Slow gain code */ - uint_16 sgaincod; - /* dB per bit code */ - uint_16 dbpbcod; - /* masking floor code */ - uint_16 floorcod; - - /* SNR offset info */ - uint_16 snroffste; - /* coarse SNR offset */ - uint_16 csnroffst; - /* coupling fine SNR offset */ - uint_16 cplfsnroffst; - /* coupling fast gain code */ - uint_16 cplfgaincod; - /* fbw fine SNR offset */ - uint_16 fsnroffst[5]; - /* fbw fast gain code */ - uint_16 fgaincod[5]; - /* lfe fine SNR offset */ - uint_16 lfefsnroffst; - /* lfe fast gain code */ - uint_16 lfefgaincod; - - /* Coupling leak info */ - uint_16 cplleake; - /* coupling fast leak initialization */ - uint_16 cplfleak; - /* coupling slow leak initialization */ - uint_16 cplsleak; - - /* delta bit allocation info */ - uint_16 deltbaie; - /* coupling delta bit allocation exists */ - uint_16 cpldeltbae; - /* fbw delta bit allocation exists */ - uint_16 deltbae[5]; - /* number of cpl delta bit segments */ - uint_16 cpldeltnseg; - /* coupling delta bit allocation offset */ - uint_16 cpldeltoffst[8]; - /* coupling delta bit allocation length */ - uint_16 cpldeltlen[8]; - /* coupling delta bit allocation length */ - uint_16 cpldeltba[8]; - /* number of delta bit segments */ - uint_16 deltnseg[5]; - /* fbw delta bit allocation offset */ - uint_16 deltoffst[5][8]; - /* fbw delta bit allocation length */ - uint_16 deltlen[5][8]; - /* fbw delta bit allocation length */ - uint_16 deltba[5][8]; - - /* skip length exists */ - uint_16 skiple; - /* skip length */ - uint_16 skipl; - - //Removed Feb 2000 -ah - /* channel mantissas */ - //uint_16 chmant[5][256]; - - /* coupling mantissas */ - uint_16 cplmant[256]; - - //Removed Feb 2000 -ah - /* coupling mantissas */ - //uint_16 lfemant[7]; - - - /* -- Information not in the bitstream, but derived thereof -- */ - - /* Number of coupling sub-bands */ - uint_16 ncplsubnd; - - /* Number of combined coupling sub-bands - * Derived from ncplsubnd and cplbndstrc */ - uint_16 ncplbnd; - - /* Number of exponent groups by channel - * Derived from strmant, endmant */ - uint_16 nchgrps[5]; - - /* Number of coupling exponent groups - * Derived from cplbegf, cplendf, cplexpstr */ - uint_16 ncplgrps; - - /* End mantissa numbers of fbw channels */ - uint_16 endmant[5]; - - /* Start and end mantissa numbers for the coupling channel */ - uint_16 cplstrtmant; - uint_16 cplendmant; - - /* Decoded exponent info */ - uint_16 fbw_exp[5][256]; - uint_16 cpl_exp[256]; - uint_16 lfe_exp[7]; - - /* Bit allocation pointer results */ - uint_16 fbw_bap[5][256]; - uint_16 cpl_bap[256]; - uint_16 lfe_bap[7]; - - uint_32 magic3; -} audblk_t; - - diff --git a/ac3dec/libac3/bit_allocate.c b/ac3dec/libac3/bit_allocate.c deleted file mode 100644 index 053e09c..0000000 --- a/ac3dec/libac3/bit_allocate.c +++ /dev/null @@ -1,494 +0,0 @@ -/* - * bit_allocate.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include -#include -#include "ac3.h" -#include "ac3_internal.h" - - - -static inline sint_16 logadd(sint_16 a,sint_16 b); -static sint_16 calc_lowcomp(sint_16 a,sint_16 b0,sint_16 b1,sint_16 bin); -static inline uint_16 min(sint_16 a,sint_16 b); -static inline uint_16 max(sint_16 a,sint_16 b); -static void ba_compute_psd(sint_16 start, sint_16 end, sint_16 exps[], - sint_16 psd[], sint_16 bndpsd[]); - -static void ba_compute_excitation(sint_16 start, sint_16 end,sint_16 fgain, - sint_16 fastleak, sint_16 slowleak, sint_16 is_lfe, sint_16 bndpsd[], - sint_16 excite[]); -static void ba_compute_mask(sint_16 start, sint_16 end, uint_16 fscod, - uint_16 deltbae, uint_16 deltnseg, uint_16 deltoffst[], uint_16 deltba[], - uint_16 deltlen[], sint_16 excite[], sint_16 mask[]); -static void ba_compute_bap(sint_16 start, sint_16 end, sint_16 snroffset, - sint_16 psd[], sint_16 mask[], sint_16 bap[]); - -/* Misc LUTs for bit allocation process */ - -static sint_16 slowdec[] = { 0x0f, 0x11, 0x13, 0x15 }; -static sint_16 fastdec[] = { 0x3f, 0x53, 0x67, 0x7b }; -static sint_16 slowgain[] = { 0x540, 0x4d8, 0x478, 0x410 }; -static sint_16 dbpbtab[] = { 0x000, 0x700, 0x900, 0xb00 }; - -static uint_16 floortab[] = { 0x2f0, 0x2b0, 0x270, 0x230, 0x1f0, 0x170, 0x0f0, 0xf800 }; -static sint_16 fastgain[] = { 0x080, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380, 0x400 }; - - -static sint_16 bndtab[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 31, - 34, 37, 40, 43, 46, 49, 55, 61, 67, 73, - 79, 85, 97, 109, 121, 133, 157, 181, 205, 229 }; - -static sint_16 bndsz[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, - 3, 3, 3, 3, 3, 6, 6, 6, 6, 6, - 6, 12, 12, 12, 12, 24, 24, 24, 24, 24 }; - -static sint_16 masktab[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 28, 28, 29, - 29, 29, 30, 30, 30, 31, 31, 31, 32, 32, 32, 33, 33, 33, 34, 34, - 34, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 37, 37, 37, - 37, 37, 37, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 40, - 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, - 41, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 0, 0, 0 }; - - -static sint_16 latab[] = { 0x0040, 0x003f, 0x003e, 0x003d, 0x003c, 0x003b, 0x003a, 0x0039, - 0x0038, 0x0037, 0x0036, 0x0035, 0x0034, 0x0034, 0x0033, 0x0032, - 0x0031, 0x0030, 0x002f, 0x002f, 0x002e, 0x002d, 0x002c, 0x002c, - 0x002b, 0x002a, 0x0029, 0x0029, 0x0028, 0x0027, 0x0026, 0x0026, - 0x0025, 0x0024, 0x0024, 0x0023, 0x0023, 0x0022, 0x0021, 0x0021, - 0x0020, 0x0020, 0x001f, 0x001e, 0x001e, 0x001d, 0x001d, 0x001c, - 0x001c, 0x001b, 0x001b, 0x001a, 0x001a, 0x0019, 0x0019, 0x0018, - 0x0018, 0x0017, 0x0017, 0x0016, 0x0016, 0x0015, 0x0015, 0x0015, - 0x0014, 0x0014, 0x0013, 0x0013, 0x0013, 0x0012, 0x0012, 0x0012, - 0x0011, 0x0011, 0x0011, 0x0010, 0x0010, 0x0010, 0x000f, 0x000f, - 0x000f, 0x000e, 0x000e, 0x000e, 0x000d, 0x000d, 0x000d, 0x000d, - 0x000c, 0x000c, 0x000c, 0x000c, 0x000b, 0x000b, 0x000b, 0x000b, - 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0009, 0x0009, 0x0009, - 0x0009, 0x0009, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, - 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0006, 0x0006, - 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0005, 0x0005, - 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0004, 0x0004, - 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, - 0x0004, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, - 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0002, - 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, - 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, - 0x0002, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, - 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, - 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, - 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, - 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000}; - -static sint_16 hth[][50] = {{ 0x04d0, 0x04d0, 0x0440, 0x0400, 0x03e0, 0x03c0, 0x03b0, 0x03b0, - 0x03a0, 0x03a0, 0x03a0, 0x03a0, 0x03a0, 0x0390, 0x0390, 0x0390, - 0x0380, 0x0380, 0x0370, 0x0370, 0x0360, 0x0360, 0x0350, 0x0350, - 0x0340, 0x0340, 0x0330, 0x0320, 0x0310, 0x0300, 0x02f0, 0x02f0, - 0x02f0, 0x02f0, 0x0300, 0x0310, 0x0340, 0x0390, 0x03e0, 0x0420, - 0x0460, 0x0490, 0x04a0, 0x0460, 0x0440, 0x0440, 0x0520, 0x0800, - 0x0840, 0x0840 }, - - { 0x04f0, 0x04f0, 0x0460, 0x0410, 0x03e0, 0x03d0, 0x03c0, 0x03b0, - 0x03b0, 0x03a0, 0x03a0, 0x03a0, 0x03a0, 0x03a0, 0x0390, 0x0390, - 0x0390, 0x0380, 0x0380, 0x0380, 0x0370, 0x0370, 0x0360, 0x0360, - 0x0350, 0x0350, 0x0340, 0x0340, 0x0320, 0x0310, 0x0300, 0x02f0, - 0x02f0, 0x02f0, 0x02f0, 0x0300, 0x0320, 0x0350, 0x0390, 0x03e0, - 0x0420, 0x0450, 0x04a0, 0x0490, 0x0460, 0x0440, 0x0480, 0x0630, - 0x0840, 0x0840 }, - - { 0x0580, 0x0580, 0x04b0, 0x0450, 0x0420, 0x03f0, 0x03e0, 0x03d0, - 0x03c0, 0x03b0, 0x03b0, 0x03b0, 0x03a0, 0x03a0, 0x03a0, 0x03a0, - 0x03a0, 0x03a0, 0x03a0, 0x03a0, 0x0390, 0x0390, 0x0390, 0x0390, - 0x0380, 0x0380, 0x0380, 0x0370, 0x0360, 0x0350, 0x0340, 0x0330, - 0x0320, 0x0310, 0x0300, 0x02f0, 0x02f0, 0x02f0, 0x0300, 0x0310, - 0x0330, 0x0350, 0x03c0, 0x0410, 0x0470, 0x04a0, 0x0460, 0x0440, - 0x0450, 0x04e0 }}; - - -static sint_16 baptab[] = { 0, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, - 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, - 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, - 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15 }; - -static sint_16 sdecay; -static sint_16 fdecay; -static sint_16 sgain; -static sint_16 dbknee; -static sint_16 floor; -static sint_16 psd[256]; -static sint_16 bndpsd[256]; -static sint_16 excite[256]; -static sint_16 mask[256]; - -static inline uint_16 -max(sint_16 a,sint_16 b) -{ - return (a > b ? a : b); -} - -static inline uint_16 -min(sint_16 a,sint_16 b) -{ - return (a < b ? a : b); -} - -static inline sint_16 -logadd(sint_16 a,sint_16 b) -{ - sint_16 c; - sint_16 address; - - c = a - b; - address = min((abs(c) >> 1), 255); - - if (c >= 0) - return(a + latab[address]); - else - return(b + latab[address]); -} - - -void bit_allocate(uint_16 fscod, bsi_t *bsi, audblk_t *audblk) -{ - uint_16 i; - sint_16 fgain; - sint_16 snroffset; - sint_16 start; - sint_16 end; - sint_16 fastleak; - sint_16 slowleak; - - /* Only perform bit_allocation if the exponents have changed or we - * have new sideband information */ - if (audblk->chexpstr[0] == 0 && audblk->chexpstr[1] == 0 && - audblk->chexpstr[2] == 0 && audblk->chexpstr[3] == 0 && - audblk->chexpstr[4] == 0 && audblk->cplexpstr == 0 && - audblk->lfeexpstr == 0 && audblk->baie == 0 && - audblk->snroffste == 0 && audblk->deltbaie == 0) - return; - - /* Do some setup before we do the bit alloc */ - sdecay = slowdec[audblk->sdcycod]; - fdecay = fastdec[audblk->fdcycod]; - sgain = slowgain[audblk->sgaincod]; - dbknee = dbpbtab[audblk->dbpbcod]; - floor = floortab[audblk->floorcod]; - - /* if all the SNR offset constants are zero then the whole block is zero */ - if(!audblk->csnroffst && !audblk->fsnroffst[0] && - !audblk->fsnroffst[1] && !audblk->fsnroffst[2] && - !audblk->fsnroffst[3] && !audblk->fsnroffst[4] && - !audblk->cplfsnroffst && !audblk->lfefsnroffst) - { - memset(audblk->fbw_bap,0,sizeof(uint_16) * 256 * 5); - memset(audblk->cpl_bap,0,sizeof(uint_16) * 256); - memset(audblk->lfe_bap,0,sizeof(uint_16) * 7); - return; - } - - - for(i = 0; i < bsi->nfchans; i++) - { - start = 0; - end = audblk->endmant[i] ; - fgain = fastgain[audblk->fgaincod[i]]; - snroffset = (((audblk->csnroffst - 15) << 4) + audblk->fsnroffst[i]) << 2 ; - fastleak = 0; - slowleak = 0; - - ba_compute_psd(start, end, audblk->fbw_exp[i], psd, bndpsd); - - ba_compute_excitation(start, end , fgain, fastleak, slowleak, 0, bndpsd, excite); - - ba_compute_mask(start, end, fscod, audblk->deltbae[i], audblk->deltnseg[i], - audblk->deltoffst[i], audblk->deltba[i], audblk->deltlen[i], excite, mask); - - ba_compute_bap(start, end, snroffset, psd, mask, audblk->fbw_bap[i]); - } - - if(audblk->cplinu) - { - start = audblk->cplstrtmant; - end = audblk->cplendmant; - fgain = fastgain[audblk->cplfgaincod]; - snroffset = (((audblk->csnroffst - 15) << 4) + audblk->cplfsnroffst) << 2 ; - fastleak = (audblk->cplfleak << 8) + 768; - slowleak = (audblk->cplsleak << 8) + 768; - - ba_compute_psd(start, end, audblk->cpl_exp, psd, bndpsd); - - ba_compute_excitation(start, end , fgain, fastleak, slowleak, 0, bndpsd, excite); - - ba_compute_mask(start, end, fscod, audblk->cpldeltbae, audblk->cpldeltnseg, - audblk->cpldeltoffst, audblk->cpldeltba, audblk->cpldeltlen, excite, mask); - - ba_compute_bap(start, end, snroffset, psd, mask, audblk->cpl_bap); - } - - if(bsi->lfeon) - { - start = 0; - end = 7; - fgain = fastgain[audblk->lfefgaincod]; - snroffset = (((audblk->csnroffst - 15) << 4) + audblk->lfefsnroffst) << 2 ; - fastleak = 0; - slowleak = 0; - - ba_compute_psd(start, end, audblk->lfe_exp, psd, bndpsd); - - ba_compute_excitation(start, end , fgain, fastleak, slowleak, 1, bndpsd, excite); - - /* Perform no delta bit allocation for lfe */ - ba_compute_mask(start, end, fscod, 2, 0, 0, 0, 0, excite, mask); - - ba_compute_bap(start, end, snroffset, psd, mask, audblk->lfe_bap); - } -} - - -static void ba_compute_psd(sint_16 start, sint_16 end, sint_16 exps[], - sint_16 psd[], sint_16 bndpsd[]) -{ - int bin,i,j,k; - sint_16 lastbin = 0; - - /* Map the exponents into dBs */ - for (bin=start; bin lastbin); -} - -static void ba_compute_excitation(sint_16 start, sint_16 end,sint_16 fgain, - sint_16 fastleak, sint_16 slowleak, sint_16 is_lfe, sint_16 bndpsd[], - sint_16 excite[]) -{ - int bin; - sint_16 bndstrt; - sint_16 bndend; - sint_16 lowcomp = 0; - sint_16 begin = 0; - - /* Compute excitation function */ - bndstrt = masktab[start]; - bndend = masktab[end - 1] + 1; - - if (bndstrt == 0) /* For fbw and lfe channels */ - { - lowcomp = calc_lowcomp(lowcomp, bndpsd[0], bndpsd[1], 0); - excite[0] = bndpsd[0] - fgain - lowcomp; - lowcomp = calc_lowcomp(lowcomp, bndpsd[1], bndpsd[2], 1); - excite[1] = bndpsd[1] - fgain - lowcomp; - begin = 7 ; - - /* Note: Do not call calc_lowcomp() for the last band of the lfe channel, (bin = 6) */ - for (bin = 2; bin < 7; bin++) - { - if (!(is_lfe && (bin == 6))) - lowcomp = calc_lowcomp(lowcomp, bndpsd[bin], bndpsd[bin+1], bin); - fastleak = bndpsd[bin] - fgain; - slowleak = bndpsd[bin] - sgain; - excite[bin] = fastleak - lowcomp; - - if (!(is_lfe && (bin == 6))) - { - if (bndpsd[bin] <= bndpsd[bin+1]) - { - begin = bin + 1 ; - break; - } - } - } - - for (bin = begin; bin < min(bndend, 22); bin++) - { - if (!(is_lfe && (bin == 6))) - lowcomp = calc_lowcomp(lowcomp, bndpsd[bin], bndpsd[bin+1], bin); - fastleak -= fdecay ; - fastleak = max(fastleak, bndpsd[bin] - fgain); - slowleak -= sdecay ; - slowleak = max(slowleak, bndpsd[bin] - sgain); - excite[bin] = max(fastleak - lowcomp, slowleak); - } - begin = 22; - } - else /* For coupling channel */ - { - begin = bndstrt; - } - - for (bin = begin; bin < bndend; bin++) - { - fastleak -= fdecay; - fastleak = max(fastleak, bndpsd[bin] - fgain); - slowleak -= sdecay; - slowleak = max(slowleak, bndpsd[bin] - sgain); - excite[bin] = max(fastleak, slowleak) ; - } -} - -static void ba_compute_mask(sint_16 start, sint_16 end, uint_16 fscod, - uint_16 deltbae, uint_16 deltnseg, uint_16 deltoffst[], uint_16 deltba[], - uint_16 deltlen[], sint_16 excite[], sint_16 mask[]) -{ - int bin,k; - sint_16 bndstrt; - sint_16 bndend; - sint_16 delta; - - bndstrt = masktab[start]; - bndend = masktab[end - 1] + 1; - - /* Compute the masking curve */ - - for (bin = bndstrt; bin < bndend; bin++) - { - if (bndpsd[bin] < dbknee) - { - excite[bin] += ((dbknee - bndpsd[bin]) >> 2); - } - mask[bin] = max(excite[bin], hth[fscod][bin]); - } - - /* Perform delta bit modulation if necessary */ - if ((deltbae == DELTA_BIT_REUSE) || (deltbae == DELTA_BIT_NEW)) - { - sint_16 band = 0; - sint_16 seg = 0; - - for (seg = 0; seg < deltnseg+1; seg++) - { - band += deltoffst[seg]; - if (deltba[seg] >= 4) - { - delta = (deltba[seg] - 3) << 7; - } - else - { - delta = (deltba[seg] - 4) << 7; - } - - for (k = 0; k < deltlen[seg]; k++) - { - mask[band] += delta; - band++; - } - } - } -} - -static void ba_compute_bap(sint_16 start, sint_16 end, sint_16 snroffset, - sint_16 psd[], sint_16 mask[], sint_16 bap[]) -{ - int i,j,k; - sint_16 lastbin = 0; - sint_16 address = 0; - - /* Compute the bit allocation pointer for each bin */ - i = start; - j = masktab[start]; - - do - { - lastbin = min(bndtab[j] + bndsz[j], end); - mask[j] -= snroffset; - mask[j] -= floor; - - if (mask[j] < 0) - mask[j] = 0; - - mask[j] &= 0x1fe0; - mask[j] += floor; - for (k = i; k < lastbin; k++) - { - address = (psd[i] - mask[j]) >> 5; - address = min(63, max(0, address)); - bap[i] = baptab[address]; - i++; - } - j++; - } while (end > lastbin); -} - -static sint_16 -calc_lowcomp(sint_16 a,sint_16 b0,sint_16 b1,sint_16 bin) -{ - - if (bin < 7) - { - if ((b0 + 256) == b1) - a = 384; - else if (b0 > b1) - a = max(0, a - 64); - } - else if (bin < 20) - { - if ((b0 + 256) == b1) - a = 320; - else if (b0 > b1) - a = max(0, a - 64) ; - } - else - a = max(0, a - 128); - - return(a); -} - diff --git a/ac3dec/libac3/bit_allocate.h b/ac3dec/libac3/bit_allocate.h deleted file mode 100644 index e48b0b2..0000000 --- a/ac3dec/libac3/bit_allocate.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * bit_allocate.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -void bit_allocate(uint_16 fscod, bsi_t *bsi, audblk_t *audblk); diff --git a/ac3dec/libac3/bitstream.c b/ac3dec/libac3/bitstream.c deleted file mode 100644 index 0e1dbc4..0000000 --- a/ac3dec/libac3/bitstream.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * bitstream.c - * - * Copyright (C) Aaron Holtzman - Dec 1999 - * - * This file is part of ac3dec, a free AC-3 audio decoder - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include -#include -#include - -#include "ac3.h" -#include "ac3_internal.h" -#include "bitstream.h" - -#define BUFFER_SIZE 4096 - -static uint_8 buffer[BUFFER_SIZE]; - -static uint_32 *buffer_start, *buffer_end; -static uint_8 *chunk_start, *chunk_end; - -uint_32 bits_left; -uint_32 current_word; - -ssize_t (*bitstream_fill_buffer)(uint_8**,uint_8**); - -int bitstream_get_byte(void) -{ - if(chunk_start == chunk_end) - if (bitstream_fill_buffer(&chunk_start,&chunk_end) <= 0) - return EOF; - - return (*chunk_start++); -} - -uint_8 *bitstream_get_buffer_start(void) -{ - return (uint_8 *) buffer_start; -} - -int -bitstream_buffer_frame(uint_32 frame_size) -{ - uint_32 bytes_read; - uint_32 num_bytes; - - bytes_read = 0; - - do - { - if(chunk_start > chunk_end) - printf("argh!\n"); - if(chunk_start == chunk_end) - if (bitstream_fill_buffer(&chunk_start,&chunk_end) <= 0) - return EOF; - - num_bytes = chunk_end - chunk_start; - - if(bytes_read + num_bytes > frame_size) - num_bytes = frame_size - bytes_read; - - memcpy(&buffer[bytes_read], chunk_start, num_bytes); - - bytes_read += num_bytes; - chunk_start += num_bytes; - } - while (bytes_read != frame_size); - - buffer_start = (uint_32 *) buffer; - buffer_end = (uint_32 *) (buffer + frame_size); - - bits_left = 0; - return 0; -} - - -static inline void -bitstream_fill_current() -{ - current_word = *buffer_start++; - current_word = swab32(current_word); -} - -// -// The fast paths for _get is in the -// bitstream.h header file so it can be inlined. -// -// The "bottom half" of this routine is suffixed _bh -// -// -ah -// - -uint_32 -bitstream_get_bh(uint_32 num_bits) -{ - uint_32 result; - - num_bits -= bits_left; - result = (current_word << (32 - bits_left)) >> (32 - bits_left); - - bitstream_fill_current(); - - if(num_bits != 0) - result = (result << num_bits) | (current_word >> (32 - num_bits)); - - bits_left = 32 - num_bits; - - return result; -} - -void -bitstream_init(ssize_t(*fill_function)(uint_8**,uint_8**)) -{ - // Setup the buffer fill callback - bitstream_fill_buffer = fill_function; -} diff --git a/ac3dec/libac3/bitstream.h b/ac3dec/libac3/bitstream.h deleted file mode 100644 index 5e0d8f0..0000000 --- a/ac3dec/libac3/bitstream.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * bitstream.h - * - * Copyright (C) Aaron Holtzman - Dec 1999 - * - * This file is part of ac3dec, a free AC-3 audio decoder - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -//My new and improved vego-matic endian swapping routine -//(stolen from the kernel) -#ifdef WORDS_BIGENDIAN - -# define swab32(x) (x) - -#else - -# if defined (__i386__) - -# define swab32(x) __i386_swab32(x) - static inline uint_32 __i386_swab32(uint_32 x) - { - __asm__("bswap %0" : "=r" (x) : "0" (x)); - return x; - } - -# else - -# define swab32(x)\ -((((uint_8*)&x)[0] << 24) | (((uint_8*)&x)[1] << 16) | \ - (((uint_8*)&x)[2] << 8) | (((uint_8*)&x)[3])) - -# endif -#endif - -extern uint_32 bits_left; -extern uint_32 current_word; - -void bitstream_init(ssize_t(*fill_function)(uint_8**,uint_8**)); - -int bitstream_get_byte(void); - -uint_8 *bitstream_get_buffer_start(void); -int bitstream_buffer_frame(uint_32 frame_size); - -uint_32 bitstream_get_bh(uint_32 num_bits); - -static inline uint_32 -bitstream_get(uint_32 num_bits) -{ - uint_32 result; - - if(num_bits < bits_left) - { - result = (current_word << (32 - bits_left)) >> (32 - num_bits); - bits_left -= num_bits; - return result; - } - - return bitstream_get_bh(num_bits); -} - diff --git a/ac3dec/libac3/coeff.c b/ac3dec/libac3/coeff.c deleted file mode 100644 index b9f03ff..0000000 --- a/ac3dec/libac3/coeff.c +++ /dev/null @@ -1,353 +0,0 @@ -/* - * coeff.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - - -#include -#include -#include "ac3.h" -#include "ac3_internal.h" - - -#include "decode.h" -#include "bitstream.h" -#include "dither.h" -#include "coeff.h" - -// -//Lookup tables of 0.15 two's complement quantization values -// -static const uint_16 q_1[3] = -{ - ( -2 << 15)/3, 0,( 2 << 15)/3 -}; - -static const uint_16 q_2[5] = -{ - ( -4 << 15)/5,( -2 << 15)/5, 0, - ( 2 << 15)/5,( 4 << 15)/5 -}; - -static const uint_16 q_3[7] = -{ - ( -6 << 15)/7,( -4 << 15)/7,( -2 << 15)/7, 0, - ( 2 << 15)/7,( 4 << 15)/7,( 6 << 15)/7 -}; - -static const uint_16 q_4[11] = -{ - (-10 << 15)/11,(-8 << 15)/11,(-6 << 15)/11, ( -4 << 15)/11,(-2 << 15)/11, 0, - ( 2 << 15)/11,( 4 << 15)/11,( 6 << 15)/11, ( 8 << 15)/11,(10 << 15)/11 -}; - -static const uint_16 q_5[15] = -{ - (-14 << 15)/15,(-12 << 15)/15,(-10 << 15)/15, - ( -8 << 15)/15,( -6 << 15)/15,( -4 << 15)/15, - ( -2 << 15)/15, 0 ,( 2 << 15)/15, - ( 4 << 15)/15,( 6 << 15)/15,( 8 << 15)/15, - ( 10 << 15)/15,( 12 << 15)/15,( 14 << 15)/15 -}; - -// -// Scale factors for convert_to_float -// - -static const uint_32 u32_scale_factors[25] = -{ - 0x38000000, //2 ^ -(0 + 15) - 0x37800000, //2 ^ -(1 + 15) - 0x37000000, //2 ^ -(2 + 15) - 0x36800000, //2 ^ -(3 + 15) - 0x36000000, //2 ^ -(4 + 15) - 0x35800000, //2 ^ -(5 + 15) - 0x35000000, //2 ^ -(6 + 15) - 0x34800000, //2 ^ -(7 + 15) - 0x34000000, //2 ^ -(8 + 15) - 0x33800000, //2 ^ -(9 + 15) - 0x33000000, //2 ^ -(10 + 15) - 0x32800000, //2 ^ -(11 + 15) - 0x32000000, //2 ^ -(12 + 15) - 0x31800000, //2 ^ -(13 + 15) - 0x31000000, //2 ^ -(14 + 15) - 0x30800000, //2 ^ -(15 + 15) - 0x30000000, //2 ^ -(16 + 15) - 0x2f800000, //2 ^ -(17 + 15) - 0x2f000000, //2 ^ -(18 + 15) - 0x2e800000, //2 ^ -(19 + 15) - 0x2e000000, //2 ^ -(20 + 15) - 0x2d800000, //2 ^ -(21 + 15) - 0x2d000000, //2 ^ -(22 + 15) - 0x2c800000, //2 ^ -(23 + 15) - 0x2c000000 //2 ^ -(24 + 15) -}; - -static float *scale_factor = (float*)u32_scale_factors; - -//These store the persistent state of the packed mantissas -static uint_16 m_1[3]; -static uint_16 m_2[3]; -static uint_16 m_4[2]; -static uint_16 m_1_pointer; -static uint_16 m_2_pointer; -static uint_16 m_4_pointer; - -//Conversion from bap to number of bits in the mantissas -//zeros account for cases 0,1,2,4 which are special cased -static uint_16 qnttztab[16] = { 0, 0, 0, 3, 0 , 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16}; - -static void coeff_reset(void); -static sint_16 coeff_get_mantissa(uint_16 bap, uint_16 dithflag); -static void coeff_uncouple_ch(float samples[],bsi_t *bsi,audblk_t *audblk,uint_32 ch); - -// -// Convert a 0.15 fixed point number into IEEE single -// precision floating point and scale by 2^-exp -// -static inline float -convert_to_float(uint_16 exp, sint_16 mantissa) -{ - float x; - - //the scale by 2^-15 is built into the scale factor table - x = mantissa * scale_factor[exp]; - - return x; -} - -void -coeff_unpack(bsi_t *bsi, audblk_t *audblk, stream_samples_t samples) -{ - uint_16 i,j; - uint_32 done_cpl = 0; - sint_16 mantissa; - - coeff_reset(); - - for(i=0; i< bsi->nfchans; i++) - { - for(j=0; j < audblk->endmant[i]; j++) - { - mantissa = coeff_get_mantissa(audblk->fbw_bap[i][j],audblk->dithflag[i]); - samples[i][j] = convert_to_float(audblk->fbw_exp[i][j],mantissa); - } - - if(audblk->cplinu && audblk->chincpl[i] && !(done_cpl)) - { - // ncplmant is equal to 12 * ncplsubnd - // Don't dither coupling channel until channel separation so that - // interchannel noise is uncorrelated - for(j=audblk->cplstrtmant; j < audblk->cplendmant; j++) - audblk->cplmant[j] = coeff_get_mantissa(audblk->cpl_bap[j],0); - done_cpl = 1; - } - } - - //uncouple the channel if necessary - if(audblk->cplinu) - { - for(i=0; i< bsi->nfchans; i++) - { - if(audblk->chincpl[i]) - coeff_uncouple_ch(samples[i],bsi,audblk,i); - } - - } - - if(bsi->lfeon) - { - // There are always 7 mantissas for lfe, no dither for lfe - for(j=0; j < 7 ; j++) - { - mantissa = coeff_get_mantissa(audblk->lfe_bap[j],0); - samples[5][j] = convert_to_float(audblk->lfe_exp[j],mantissa); - } - } -} - -// -//Fetch a mantissa from the bitstream -// -//The mantissa returned is a signed 0.15 fixed point number -// -static sint_16 -coeff_get_mantissa(uint_16 bap, uint_16 dithflag) -{ - uint_16 mantissa; - uint_16 group_code; - - //If the bap is 0-5 then we have special cases to take care of - switch(bap) - { - case 0: - if(dithflag) - mantissa = dither_gen(); - else - mantissa = 0; - break; - - case 1: - if(m_1_pointer > 2) - { - group_code = bitstream_get(5); - - if(group_code > 26) - goto error; - - m_1[0] = group_code / 9; - m_1[1] = (group_code % 9) / 3; - m_1[2] = (group_code % 9) % 3; - m_1_pointer = 0; - } - mantissa = m_1[m_1_pointer++]; - mantissa = q_1[mantissa]; - break; - case 2: - - if(m_2_pointer > 2) - { - group_code = bitstream_get(7); - - if(group_code > 124) - goto error; - - m_2[0] = group_code / 25; - m_2[1] = (group_code % 25) / 5 ; - m_2[2] = (group_code % 25) % 5 ; - m_2_pointer = 0; - } - mantissa = m_2[m_2_pointer++]; - mantissa = q_2[mantissa]; - break; - - case 3: - mantissa = bitstream_get(3); - - if(mantissa > 6) - goto error; - - mantissa = q_3[mantissa]; - break; - - case 4: - if(m_4_pointer > 1) - { - group_code = bitstream_get(7); - - if(group_code > 120) - goto error; - - m_4[0] = group_code / 11; - m_4[1] = group_code % 11; - m_4_pointer = 0; - } - mantissa = m_4[m_4_pointer++]; - mantissa = q_4[mantissa]; - break; - - case 5: - mantissa = bitstream_get(4); - - if(mantissa > 14) - goto error; - - mantissa = q_5[mantissa]; - break; - - default: - mantissa = bitstream_get(qnttztab[bap]); - mantissa <<= 16 - qnttztab[bap]; - } - - return mantissa; - - - -error: - if(!error_flag) - fprintf(stderr,"** Invalid mantissa - skipping frame **\n"); - error_flag = 1; - - return 0; -} - -// -// Reset the mantissa state -// -static void -coeff_reset(void) -{ - m_1[2] = m_1[1] = m_1[0] = 0; - m_2[2] = m_2[1] = m_2[0] = 0; - m_4[1] = m_4[0] = 0; - m_1_pointer = m_2_pointer = m_4_pointer = 3; -} - -// -// Uncouple the coupling channel into a fbw channel -// -static void -coeff_uncouple_ch(float samples[],bsi_t *bsi,audblk_t *audblk,uint_32 ch) -{ - uint_32 bnd = 0; - uint_32 sub_bnd = 0; - uint_32 i,j; - float cpl_coord = 1.0; - uint_32 cpl_exp_tmp; - uint_32 cpl_mant_tmp; - sint_16 mantissa; - - - for(i=audblk->cplstrtmant;icplendmant;) - { - if(!audblk->cplbndstrc[sub_bnd++]) - { - cpl_exp_tmp = audblk->cplcoexp[ch][bnd] + 3 * audblk->mstrcplco[ch]; - if(audblk->cplcoexp[ch][bnd] == 15) - cpl_mant_tmp = (audblk->cplcomant[ch][bnd]) << 11; - else - cpl_mant_tmp = ((0x10) | audblk->cplcomant[ch][bnd]) << 10; - - cpl_coord = convert_to_float(cpl_exp_tmp,cpl_mant_tmp) * 8.0f; - - //Invert the phase for the right channel if necessary - if(bsi->acmod == 0x2 && audblk->phsflginu && ch == 1 && audblk->phsflg[bnd]) - cpl_coord *= -1; - - bnd++; - } - - for(j=0;j < 12; j++) - { - //Get new dither values for each channel if necessary, so - //the channels are uncorrelated - if(audblk->dithflag[ch] && audblk->cpl_bap[i] == 0) - mantissa = dither_gen(); - else - mantissa = audblk->cplmant[i]; - - samples[i] = cpl_coord * convert_to_float(audblk->cpl_exp[i],mantissa); - - i++; - } - } -} diff --git a/ac3dec/libac3/coeff.h b/ac3dec/libac3/coeff.h deleted file mode 100644 index dc822a9..0000000 --- a/ac3dec/libac3/coeff.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * coeff.h - * - * Copyright (C) Aaron Holtzman - Feb 2000 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -void coeff_unpack(bsi_t *bsi, audblk_t *audblk,stream_samples_t samples); diff --git a/ac3dec/libac3/crc.c b/ac3dec/libac3/crc.c deleted file mode 100644 index 3210ce7..0000000 --- a/ac3dec/libac3/crc.c +++ /dev/null @@ -1,96 +0,0 @@ -/* - * crc.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include -#include -#include "ac3.h" -#include "ac3_internal.h" - -#include - -#include "crc.h" - -static const uint_16 crc_lut[256] = -{ - 0x0000,0x8005,0x800f,0x000a,0x801b,0x001e,0x0014,0x8011, - 0x8033,0x0036,0x003c,0x8039,0x0028,0x802d,0x8027,0x0022, - 0x8063,0x0066,0x006c,0x8069,0x0078,0x807d,0x8077,0x0072, - 0x0050,0x8055,0x805f,0x005a,0x804b,0x004e,0x0044,0x8041, - 0x80c3,0x00c6,0x00cc,0x80c9,0x00d8,0x80dd,0x80d7,0x00d2, - 0x00f0,0x80f5,0x80ff,0x00fa,0x80eb,0x00ee,0x00e4,0x80e1, - 0x00a0,0x80a5,0x80af,0x00aa,0x80bb,0x00be,0x00b4,0x80b1, - 0x8093,0x0096,0x009c,0x8099,0x0088,0x808d,0x8087,0x0082, - 0x8183,0x0186,0x018c,0x8189,0x0198,0x819d,0x8197,0x0192, - 0x01b0,0x81b5,0x81bf,0x01ba,0x81ab,0x01ae,0x01a4,0x81a1, - 0x01e0,0x81e5,0x81ef,0x01ea,0x81fb,0x01fe,0x01f4,0x81f1, - 0x81d3,0x01d6,0x01dc,0x81d9,0x01c8,0x81cd,0x81c7,0x01c2, - 0x0140,0x8145,0x814f,0x014a,0x815b,0x015e,0x0154,0x8151, - 0x8173,0x0176,0x017c,0x8179,0x0168,0x816d,0x8167,0x0162, - 0x8123,0x0126,0x012c,0x8129,0x0138,0x813d,0x8137,0x0132, - 0x0110,0x8115,0x811f,0x011a,0x810b,0x010e,0x0104,0x8101, - 0x8303,0x0306,0x030c,0x8309,0x0318,0x831d,0x8317,0x0312, - 0x0330,0x8335,0x833f,0x033a,0x832b,0x032e,0x0324,0x8321, - 0x0360,0x8365,0x836f,0x036a,0x837b,0x037e,0x0374,0x8371, - 0x8353,0x0356,0x035c,0x8359,0x0348,0x834d,0x8347,0x0342, - 0x03c0,0x83c5,0x83cf,0x03ca,0x83db,0x03de,0x03d4,0x83d1, - 0x83f3,0x03f6,0x03fc,0x83f9,0x03e8,0x83ed,0x83e7,0x03e2, - 0x83a3,0x03a6,0x03ac,0x83a9,0x03b8,0x83bd,0x83b7,0x03b2, - 0x0390,0x8395,0x839f,0x039a,0x838b,0x038e,0x0384,0x8381, - 0x0280,0x8285,0x828f,0x028a,0x829b,0x029e,0x0294,0x8291, - 0x82b3,0x02b6,0x02bc,0x82b9,0x02a8,0x82ad,0x82a7,0x02a2, - 0x82e3,0x02e6,0x02ec,0x82e9,0x02f8,0x82fd,0x82f7,0x02f2, - 0x02d0,0x82d5,0x82df,0x02da,0x82cb,0x02ce,0x02c4,0x82c1, - 0x8243,0x0246,0x024c,0x8249,0x0258,0x825d,0x8257,0x0252, - 0x0270,0x8275,0x827f,0x027a,0x826b,0x026e,0x0264,0x8261, - 0x0220,0x8225,0x822f,0x022a,0x823b,0x023e,0x0234,0x8231, - 0x8213,0x0216,0x021c,0x8219,0x0208,0x820d,0x8207,0x0202 -}; - -static uint_16 state; - -void -crc_init(void) -{ - state = 0; -} - - -inline void crc_process_byte(uint_8 data) -{ - state = crc_lut[data ^ (state>>8)] ^ (state<<8); -} - -void -crc_process_frame(uint_8 *data,uint_32 num_bytes) -{ - uint_32 i; - - for(i=0;i -#include "debug.h" - -static int debug_level = -1; - -// Determine is debug output is required. -// We could potentially have multiple levels of debug info -int debug_is_on(void) -{ - char *env_var; - - if(debug_level < 0) - { - env_var = getenv("AC3_DEBUG"); - - if (env_var) - { - debug_level = 1; - } - else - debug_level = 0; - } - - return debug_level; -} - -//If you don't have gcc, then ya don't get debug output -#ifndef __GNUC__ -void dprintf(char fmt[],...) -{ - int foo = 0; -} -#endif - diff --git a/ac3dec/libac3/debug.h b/ac3dec/libac3/debug.h deleted file mode 100644 index f45cb5b..0000000 --- a/ac3dec/libac3/debug.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * - * debug.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -int debug_is_on(void); - -#ifdef __GNUC__ -#define dprintf(format,args...)\ -{\ - if (debug_is_on())\ - {\ - fprintf(stderr,format,## args);\ - }\ -} -#else -void dprintf(char fmt[],...); -#endif diff --git a/ac3dec/libac3/decode.c b/ac3dec/libac3/decode.c deleted file mode 100644 index 9875919..0000000 --- a/ac3dec/libac3/decode.c +++ /dev/null @@ -1,150 +0,0 @@ -/* - * decode.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include -#include -#include "ac3.h" -#include "ac3_internal.h" -#include "bitstream.h" -#include "imdct.h" -#include "exponent.h" -#include "coeff.h" -#include "bit_allocate.h" -#include "parse.h" -#include "crc.h" -#include "stats.h" -#include "rematrix.h" -#include "sanity_check.h" -#include "downmix.h" -#include "debug.h" - -//our global config structure -ac3_config_t ac3_config; -uint_32 error_flag = 0; - -static audblk_t audblk; -static bsi_t bsi; -static syncinfo_t syncinfo; -static uint_32 frame_count = 0; -static uint_32 done_banner; -static ac3_frame_t frame; - -//the floating point samples for one audblk -static stream_samples_t samples; - -//the integer samples for the entire frame (with enough space for 2 ch out) -//if this size change, be sure to change the size when muting -static sint_16 s16_samples[6 * 6 * 256]; - -void -ac3_init(ac3_config_t *config) -{ - memcpy(&ac3_config,config,sizeof(ac3_config_t)); - - bitstream_init(config->fill_buffer_callback); - imdct_init(); - sanity_check_init(&syncinfo,&bsi,&audblk); - - frame.audio_data = s16_samples; -} - -ac3_frame_t* -ac3_decode_frame(void) -{ - uint_32 i; - - //find a syncframe and parse - if (parse_syncinfo(&syncinfo) < 0) - return NULL; - if(error_flag) - goto error; - - dprintf("(decode) begin frame %d\n",frame_count++); - frame.sampling_rate = syncinfo.sampling_rate; - - parse_bsi(&bsi); - - if(!done_banner && !(ac3_config.flags & AC3_QUIET)) - { - stats_print_banner(&syncinfo,&bsi); - done_banner = 1; - } - - for(i=0; i < 6; i++) - { - //Initialize freq/time sample storage - memset(samples,0,sizeof(float) * 256 * (bsi.nfchans + bsi.lfeon)); - - // Extract most of the audblk info from the bitstream - // (minus the mantissas - parse_audblk(&bsi,&audblk); - - // Take the differential exponent data and turn it into - // absolute exponents - exponent_unpack(&bsi,&audblk); - if(error_flag) - goto error; - - // Figure out how many bits per mantissa - bit_allocate(syncinfo.fscod,&bsi,&audblk); - - // Extract the mantissas from the stream and - // generate floating point frequency coefficients - coeff_unpack(&bsi,&audblk,samples); - if(error_flag) - goto error; - - if(bsi.acmod == 0x2) - rematrix(&audblk,samples); - - // Convert the frequency samples into time samples - imdct(&bsi,&audblk,samples); - - // Downmix into the requested number of channels - // and convert floating point to sint_16 - downmix(&bsi,samples,&s16_samples[i * ac3_config.num_output_ch * 256]); - - sanity_check(&syncinfo,&bsi,&audblk); - if(error_flag) - goto error; - } - parse_auxdata(&syncinfo); - - return &frame; - -error: - //mute the frame - memset(s16_samples,0,sizeof(sint_16) * 256 * 2 * 6); - - error_flag = 0; - return &frame; - -} diff --git a/ac3dec/libac3/decode.h b/ac3dec/libac3/decode.h deleted file mode 100644 index bb84a11..0000000 --- a/ac3dec/libac3/decode.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * decode.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ diff --git a/ac3dec/libac3/dither.c b/ac3dec/libac3/dither.c deleted file mode 100644 index 31e74f6..0000000 --- a/ac3dec/libac3/dither.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - * dither.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - - -#include -#include -#include "ac3.h" -#include "ac3_internal.h" - - -#include "dither.h" - - -const uint_16 dither_lut[256] = -{ - 0x0000, 0xa011, 0xe033, 0x4022, 0x6077, 0xc066, 0x8044, 0x2055, - 0xc0ee, 0x60ff, 0x20dd, 0x80cc, 0xa099, 0x0088, 0x40aa, 0xe0bb, - 0x21cd, 0x81dc, 0xc1fe, 0x61ef, 0x41ba, 0xe1ab, 0xa189, 0x0198, - 0xe123, 0x4132, 0x0110, 0xa101, 0x8154, 0x2145, 0x6167, 0xc176, - 0x439a, 0xe38b, 0xa3a9, 0x03b8, 0x23ed, 0x83fc, 0xc3de, 0x63cf, - 0x8374, 0x2365, 0x6347, 0xc356, 0xe303, 0x4312, 0x0330, 0xa321, - 0x6257, 0xc246, 0x8264, 0x2275, 0x0220, 0xa231, 0xe213, 0x4202, - 0xa2b9, 0x02a8, 0x428a, 0xe29b, 0xc2ce, 0x62df, 0x22fd, 0x82ec, - 0x8734, 0x2725, 0x6707, 0xc716, 0xe743, 0x4752, 0x0770, 0xa761, - 0x47da, 0xe7cb, 0xa7e9, 0x07f8, 0x27ad, 0x87bc, 0xc79e, 0x678f, - 0xa6f9, 0x06e8, 0x46ca, 0xe6db, 0xc68e, 0x669f, 0x26bd, 0x86ac, - 0x6617, 0xc606, 0x8624, 0x2635, 0x0660, 0xa671, 0xe653, 0x4642, - 0xc4ae, 0x64bf, 0x249d, 0x848c, 0xa4d9, 0x04c8, 0x44ea, 0xe4fb, - 0x0440, 0xa451, 0xe473, 0x4462, 0x6437, 0xc426, 0x8404, 0x2415, - 0xe563, 0x4572, 0x0550, 0xa541, 0x8514, 0x2505, 0x6527, 0xc536, - 0x258d, 0x859c, 0xc5be, 0x65af, 0x45fa, 0xe5eb, 0xa5c9, 0x05d8, - 0xae79, 0x0e68, 0x4e4a, 0xee5b, 0xce0e, 0x6e1f, 0x2e3d, 0x8e2c, - 0x6e97, 0xce86, 0x8ea4, 0x2eb5, 0x0ee0, 0xaef1, 0xeed3, 0x4ec2, - 0x8fb4, 0x2fa5, 0x6f87, 0xcf96, 0xefc3, 0x4fd2, 0x0ff0, 0xafe1, - 0x4f5a, 0xef4b, 0xaf69, 0x0f78, 0x2f2d, 0x8f3c, 0xcf1e, 0x6f0f, - 0xede3, 0x4df2, 0x0dd0, 0xadc1, 0x8d94, 0x2d85, 0x6da7, 0xcdb6, - 0x2d0d, 0x8d1c, 0xcd3e, 0x6d2f, 0x4d7a, 0xed6b, 0xad49, 0x0d58, - 0xcc2e, 0x6c3f, 0x2c1d, 0x8c0c, 0xac59, 0x0c48, 0x4c6a, 0xec7b, - 0x0cc0, 0xacd1, 0xecf3, 0x4ce2, 0x6cb7, 0xcca6, 0x8c84, 0x2c95, - 0x294d, 0x895c, 0xc97e, 0x696f, 0x493a, 0xe92b, 0xa909, 0x0918, - 0xe9a3, 0x49b2, 0x0990, 0xa981, 0x89d4, 0x29c5, 0x69e7, 0xc9f6, - 0x0880, 0xa891, 0xe8b3, 0x48a2, 0x68f7, 0xc8e6, 0x88c4, 0x28d5, - 0xc86e, 0x687f, 0x285d, 0x884c, 0xa819, 0x0808, 0x482a, 0xe83b, - 0x6ad7, 0xcac6, 0x8ae4, 0x2af5, 0x0aa0, 0xaab1, 0xea93, 0x4a82, - 0xaa39, 0x0a28, 0x4a0a, 0xea1b, 0xca4e, 0x6a5f, 0x2a7d, 0x8a6c, - 0x4b1a, 0xeb0b, 0xab29, 0x0b38, 0x2b6d, 0x8b7c, 0xcb5e, 0x6b4f, - 0x8bf4, 0x2be5, 0x6bc7, 0xcbd6, 0xeb83, 0x4b92, 0x0bb0, 0xaba1 -}; - -uint_16 lfsr_state = 1; - -// -// see dither_gen (inline-able) in dither.h -// - -#if 0 - -// -// this is the old dither_gen with is much slower than the new inlined -// lut version and is still here because it's easier to understand. -// - -/* - * Generate eight bits of pseudo-entropy using a 16 bit linear - * feedback shift register (LFSR). The primitive polynomial used - * is 1 + x^4 + x^14 + x^16. - * - * The distribution is uniform, over the range [-0.707,0.707] - * - */ - -uint_16 dither_gen(void) -{ - int i; - uint_32 state; - - //explicitly bring the state into a local var as gcc > 3.0? - //doesn't know how to optimize out the stores - state = lfsr_state; - - //Generate eight pseudo random bits - for(i=0;i<8;i++) - { - state <<= 1; - - if(state & 0x10000) - state ^= 0xa011; - } - - lfsr_state = state; - - return (((((sint_32)state<<8)>>8) * (sint_32) (0.707106 * 256.0))>>16); -} - -#endif diff --git a/ac3dec/libac3/dither.h b/ac3dec/libac3/dither.h deleted file mode 100644 index 6d68e1b..0000000 --- a/ac3dec/libac3/dither.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * dither.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - - -extern uint_16 lfsr_state; -extern const uint_16 dither_lut[256]; - -static inline uint_16 dither_gen(void) -{ - sint_16 state; - - state = dither_lut[lfsr_state >> 8] ^ (lfsr_state << 8); - - lfsr_state = (uint_16) state; - - return ((state * (sint_32) (0.707106 * 256.0))>>8); -} diff --git a/ac3dec/libac3/downmix.c b/ac3dec/libac3/downmix.c deleted file mode 100644 index 18271f1..0000000 --- a/ac3dec/libac3/downmix.c +++ /dev/null @@ -1,557 +0,0 @@ -/* - * - * downmix.c - * - * Copyright (C) Aaron Holtzman - Sept 1999 - * - * Originally based on code by Yuqing Deng. - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - */ - -#include -#include -#include -#include "ac3.h" -#include "ac3_internal.h" - - -#include "decode.h" -#include "downmix.h" -#include "debug.h" - - -//Pre-scaled downmix coefficients -static float cmixlev_lut[4] = { 0.2928, 0.2468, 0.2071, 0.2468 }; -static float smixlev_lut[4] = { 0.2928, 0.2071, 0.0 , 0.2071 }; - -static void -downmix_3f_2r_to_2ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) -{ - uint_32 j; - float right_tmp; - float left_tmp; - float clev,slev; - float *centre = 0, *left = 0, *right = 0, *left_sur = 0, *right_sur = 0; - - left = samples[0]; - centre = samples[1]; - right = samples[2]; - left_sur = samples[3]; - right_sur = samples[4]; - - clev = cmixlev_lut[bsi->cmixlev]; - slev = smixlev_lut[bsi->surmixlev]; - - for (j = 0; j < 256; j++) - { - left_tmp = 0.4142f * *left++ + clev * *centre + slev * *left_sur++; - right_tmp= 0.4142f * *right++ + clev * *centre++ + slev * *right_sur++; - - s16_samples[j * 2 ] = (sint_16) (left_tmp * 32767.0f); - s16_samples[j * 2 + 1] = (sint_16) (right_tmp * 32767.0f); - // printf("[0] = %.6f, [1] = %.6f\n", left_tmp, right_tmp); - } -} - -static void -downmix_3f_2r_to_4ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) -{ - uint_32 j; - float right_tmp, left_tmp, rear_right_tmp, rear_left_tmp; - float clev,slev; - float *centre = 0, *left = 0, *right = 0, *left_sur = 0, *right_sur = 0; - - left = samples[0]; - centre = samples[1]; - right = samples[2]; - left_sur = samples[3]; - right_sur = samples[4]; - - clev = cmixlev_lut[bsi->cmixlev]; - slev = smixlev_lut[bsi->surmixlev]; - - for (j = 0; j < 256; j++) - { - left_tmp = 0.4142f * *left++ + clev * *centre; - right_tmp= 0.4142f * *right++ + clev * *centre++; - rear_left_tmp = 0.4142f * *left_sur++; - rear_right_tmp = 0.4142f * *right_sur++; - - s16_samples[j * 4 ] = (sint_16) (left_tmp * 32767.0f); - s16_samples[j * 4 + 1] = (sint_16) (right_tmp * 32767.0f); - s16_samples[j * 4 + 2] = (sint_16) (rear_left_tmp * 32767.0f); - s16_samples[j * 4 + 3] = (sint_16) (rear_right_tmp * 32767.0f); -#if 0 - printf("[0] = %.6f, [1] = %.6f, [2] = %.6f, [3] = %.6f\n", - left_tmp, right_tmp, rear_left_tmp, rear_right_tmp); -#endif - } -} - -static void -downmix_3f_2r_to_6ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) -{ - uint_32 j; - float right_tmp, centre_tmp, left_tmp, rear_right_tmp, rear_left_tmp, lfe_tmp; - float clev,slev; - float *centre = 0, *left = 0, *right = 0, *left_sur = 0, *right_sur = 0, *lfe = 0; - - left = samples[0]; - centre = samples[1]; - right = samples[2]; - left_sur = samples[3]; - right_sur = samples[4]; - lfe = samples[5]; - - clev = cmixlev_lut[bsi->cmixlev]; - slev = smixlev_lut[bsi->surmixlev]; - - for (j = 0; j < 256; j++) - { - left_tmp = 0.4142f * *left++; - right_tmp= 0.4142f * *right++; - centre_tmp = 0.4142f * *centre++; - rear_left_tmp = 0.4142f * *left_sur++; - rear_right_tmp = 0.4142f * *right_sur++; - lfe_tmp = bsi->lfeon ? 0.4142f * *lfe++ : (float)0.0; - - s16_samples[j * 6 ] = (sint_16) (left_tmp * 32767.0f); - s16_samples[j * 6 + 1] = (sint_16) (right_tmp * 32767.0f); - s16_samples[j * 6 + 2] = (sint_16) (rear_left_tmp * 32767.0f); - s16_samples[j * 6 + 3] = (sint_16) (rear_right_tmp * 32767.0f); - s16_samples[j * 6 + 4] = (sint_16) (centre_tmp * 32767.0f); - s16_samples[j * 6 + 5] = (sint_16) (lfe_tmp * 32767.0f); -#if 0 - printf("[0] = %.6f, [1] = %.6f, [2] = %.6f, [3] = %.6f, [4] = %.6f, [5] = %.6f\n", - left_tmp, right_tmp, rear_left_tmp, rear_right_tmp, - centre_tmp, lfe_tmp); -#endif - } -} - -static void -downmix_2f_2r_to_2ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) -{ - uint_32 j; - float right_tmp; - float left_tmp; - float slev; - float *left = 0, *right = 0, *left_sur = 0, *right_sur = 0; - - left = samples[0]; - right = samples[1]; - left_sur = samples[2]; - right_sur = samples[3]; - - slev = smixlev_lut[bsi->surmixlev]; - - for (j = 0; j < 256; j++) - { - left_tmp = 0.4142f * *left++ + slev * *left_sur++; - right_tmp= 0.4142f * *right++ + slev * *right_sur++; - - s16_samples[j * 2 ] = (sint_16) (left_tmp * 32767.0f); - s16_samples[j * 2 + 1] = (sint_16) (right_tmp * 32767.0f); - } -} - -static void -downmix_3f_1r_to_2ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) -{ - uint_32 j; - float right_tmp; - float left_tmp; - float clev,slev; - float *centre = 0, *left = 0, *right = 0, *sur = 0; - - left = samples[0]; - centre = samples[1]; - right = samples[2]; - //Mono surround - sur = samples[3]; - - clev = cmixlev_lut[bsi->cmixlev]; - slev = smixlev_lut[bsi->surmixlev]; - - for (j = 0; j < 256; j++) - { - left_tmp = 0.4142f * *left++ + clev * *centre++ + slev * *sur; - right_tmp= 0.4142f * *right++ + clev * *centre + slev * *sur++; - - s16_samples[j * 2 ] = (sint_16) (left_tmp * 32767.0f); - s16_samples[j * 2 + 1] = (sint_16) (right_tmp * 32767.0f); - } -} - - -static void -downmix_2f_1r_to_2ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) -{ - uint_32 j; - float right_tmp; - float left_tmp; - float slev; - float *left = 0, *right = 0, *sur = 0; - - left = samples[0]; - right = samples[1]; - //Mono surround - sur = samples[2]; - - slev = smixlev_lut[bsi->surmixlev]; - - for (j = 0; j < 256; j++) - { - left_tmp = 0.4142f * *left++ + slev * *sur; - right_tmp= 0.4142f * *right++ + slev * *sur++; - - s16_samples[j * 2 ] = (sint_16) (left_tmp * 32767.0f); - s16_samples[j * 2 + 1] = (sint_16) (right_tmp * 32767.0f); - } -} - -static void -downmix_3f_0r_to_2ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) -{ - uint_32 j; - float right_tmp; - float left_tmp; - float clev; - float *centre = 0, *left = 0, *right = 0; - - left = samples[0]; - centre = samples[1]; - right = samples[2]; - - clev = cmixlev_lut[bsi->cmixlev]; - - for (j = 0; j < 256; j++) - { - left_tmp = 0.4142f * *left++ + clev * *centre; - right_tmp= 0.4142f * *right++ + clev * *centre++; - - s16_samples[j * 2 ] = (sint_16) (left_tmp * 32767.0f); - s16_samples[j * 2 + 1] = (sint_16) (right_tmp * 32767.0f); - } -} - -static void -downmix_2f_0r_to_6ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) -{ - uint_32 j; - float *left = 0, *right = 0; - - left = samples[0]; - right = samples[1]; - - for (j = 0; j < 256; j++) - { - s16_samples[j * 6 ] = (sint_16) (*left++ * 32767.0f); - s16_samples[j * 6 + 1] = (sint_16) (*right++ * 32767.0f); - } //FIXME enable output on surround channels, too. -} - -static void -downmix_2f_0r_to_2ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) -{ - uint_32 j; - float *left = 0, *right = 0; - - left = samples[0]; - right = samples[1]; - - for (j = 0; j < 256; j++) - { - s16_samples[j * 2 ] = (sint_16) (*left++ * 32767.0f); - s16_samples[j * 2 + 1] = (sint_16) (*right++ * 32767.0f); - } -} - -static void -downmix_1f_0r_to_2ch(float *centre,sint_16 *s16_samples) -{ - uint_32 j; - float tmp; - - //Mono program! - - for (j = 0; j < 256; j++) - { - tmp = 32767.0f * 0.7071f * *centre++; - - s16_samples[j * 2 ] = s16_samples[j * 2 + 1] = (sint_16) tmp; - } -} - -// -// Downmix into 2 or 4 channels (4 ch isn't in quite yet) -// -// The downmix function names have the following format -// -// downmix_Xf_Yr_to_[2|4|6]ch[_dolby] -// -// where X = number of front channels -// Y = number of rear channels -// [2|4] = number of output channels -// [_dolby] = with or without dolby surround mix -// - -void downmix(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) -{ - if(bsi->acmod > 7) - dprintf("(downmix) invalid acmod number\n"); - - // - //There are two main cases, with or without Dolby Surround - // - if(ac3_config.flags & AC3_DOLBY_SURR_ENABLE) - { - fprintf(stderr,"Dolby Surround Mixes not currently enabled\n"); - exit(1); - } - - //Non-Dolby surround downmixes - switch(bsi->acmod) - { - // 3/2 - case 7: - switch (ac3_config.num_output_ch) { - case 2: - downmix_3f_2r_to_2ch(bsi,samples,s16_samples); - break; - case 4: - downmix_3f_2r_to_4ch(bsi,samples,s16_samples); - break; - case 6: - downmix_3f_2r_to_6ch(bsi,samples,s16_samples); - break; - default: - fprintf(stderr,"unsupported 3/2 channels %d\n", ac3_config.num_output_ch); - exit(1); - } - break; - - // 2/2 - case 6: - if (ac3_config.num_output_ch != 2) { - fprintf(stderr,"unsupported 2/2 channels %d\n", ac3_config.num_output_ch); - exit(1); - } - downmix_2f_2r_to_2ch(bsi,samples,s16_samples); - break; - - // 3/1 - case 5: - if (ac3_config.num_output_ch != 2) { - fprintf(stderr,"unsupported 3/1 channels %d\n", ac3_config.num_output_ch); - exit(1); - } - downmix_3f_1r_to_2ch(bsi,samples,s16_samples); - break; - - // 2/1 - case 4: - if (ac3_config.num_output_ch != 2) { - fprintf(stderr,"unsupported 2/1 channels %d\n", ac3_config.num_output_ch); - exit(1); - } - downmix_2f_1r_to_2ch(bsi,samples,s16_samples); - break; - - // 3/0 - case 3: - if (ac3_config.num_output_ch != 2) { - fprintf(stderr,"unsupported 3/0 channels %d\n", ac3_config.num_output_ch); - exit(1); - } - downmix_3f_0r_to_2ch(bsi,samples,s16_samples); - break; - - // 2/0 - 2f_0r_to_6ch not really, but allows -D pcm.surround51:1 with 2/0 and 3/2 input (VDR e.g.) - case 2: - switch (ac3_config.num_output_ch) { - case 2: - downmix_2f_0r_to_2ch(bsi,samples,s16_samples); - break; - case 6: - downmix_2f_0r_to_6ch(bsi,samples,s16_samples); - break; - default: - fprintf(stderr,"unsupported 2/0 channels %d\n", ac3_config.num_output_ch); - exit(1); - } - break; - - // 1/0 - case 1: - if (ac3_config.num_output_ch != 2) { - fprintf(stderr,"unsupported 1/0 channels %d\n", ac3_config.num_output_ch); - exit(1); - } - downmix_1f_0r_to_2ch(samples[0],s16_samples); - break; - - // 1+1 - case 0: - if (ac3_config.num_output_ch != 2) { - fprintf(stderr,"unsupported 1/1 channels %d\n", ac3_config.num_output_ch); - exit(1); - } - downmix_1f_0r_to_2ch(samples[ac3_config.dual_mono_ch_sel],s16_samples); - break; - } -} - - - -#if 0 - - //the dolby mixes lay here for the time being - switch(bsi->acmod) - { - // 3/2 - case 7: - left = samples[0]; - centre = samples[1]; - right = samples[2]; - left_sur = samples[3]; - right_sur = samples[4]; - - for (j = 0; j < 256; j++) - { - right_tmp = 0.2265f * *left_sur++ + 0.2265f * *right_sur++; - left_tmp = -1 * right_tmp; - right_tmp += 0.3204f * *right++ + 0.2265f * *centre; - left_tmp += 0.3204f * *left++ + 0.2265f * *centre++; - - samples[1][j] = right_tmp; - samples[0][j] = left_tmp; - } - - break; - - // 2/2 - case 6: - left = samples[0]; - right = samples[1]; - left_sur = samples[2]; - right_sur = samples[3]; - - for (j = 0; j < 256; j++) - { - right_tmp = 0.2265f * *left_sur++ + 0.2265f * *right_sur++; - left_tmp = -1 * right_tmp; - right_tmp += 0.3204f * *right++; - left_tmp += 0.3204f * *left++ ; - - samples[1][j] = right_tmp; - samples[0][j] = left_tmp; - } - break; - - // 3/1 - case 5: - left = samples[0]; - centre = samples[1]; - right = samples[2]; - //Mono surround - right_sur = samples[3]; - - for (j = 0; j < 256; j++) - { - right_tmp = 0.2265f * *right_sur++; - left_tmp = -1 * right_tmp; - right_tmp += 0.3204f * *right++ + 0.2265f * *centre; - left_tmp += 0.3204f * *left++ + 0.2265f * *centre++; - - samples[1][j] = right_tmp; - samples[0][j] = left_tmp; - } - break; - - // 2/1 - case 4: - left = samples[0]; - right = samples[1]; - //Mono surround - right_sur = samples[2]; - - for (j = 0; j < 256; j++) - { - right_tmp = 0.2265f * *right_sur++; - left_tmp = -1 * right_tmp; - right_tmp += 0.3204f * *right++; - left_tmp += 0.3204f * *left++; - - samples[1][j] = right_tmp; - samples[0][j] = left_tmp; - } - break; - - // 3/0 - case 3: - left = samples[0]; - centre = samples[1]; - right = samples[2]; - - for (j = 0; j < 256; j++) - { - right_tmp = 0.3204f * *right++ + 0.2265f * *centre; - left_tmp = 0.3204f * *left++ + 0.2265f * *centre++; - - samples[1][j] = right_tmp; - samples[0][j] = left_tmp; - } - break; - - // 2/0 - case 2: - //Do nothing! - break; - - // 1/0 - case 1: - //Mono program! - right = samples[0]; - - for (j = 0; j < 256; j++) - { - right_tmp = 0.7071f * *right++; - - samples[1][j] = right_tmp; - samples[0][j] = right_tmp; - } - - break; - - // 1+1 - case 0: - //Dual mono, output selected by user - right = samples[ac3_config.dual_mono_ch_sel]; - - for (j = 0; j < 256; j++) - { - right_tmp = 0.7071f * *right++; - - samples[1][j] = right_tmp; - samples[0][j] = right_tmp; - } - break; -#endif diff --git a/ac3dec/libac3/downmix.h b/ac3dec/libac3/downmix.h deleted file mode 100644 index 7537c62..0000000 --- a/ac3dec/libac3/downmix.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * - * downmix.h - * - * Copyright (C) Aaron Holtzman - Sept 1999 - * - * Originally based on code by Yeqing Deng. - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - */ - -void downmix(bsi_t* bsi, stream_samples_t stream_samples,sint_16 *s16_samples); diff --git a/ac3dec/libac3/exponent.c b/ac3dec/libac3/exponent.c deleted file mode 100644 index 98111a5..0000000 --- a/ac3dec/libac3/exponent.c +++ /dev/null @@ -1,135 +0,0 @@ -/* - * exponent.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - - -#include -#include -#include "ac3.h" -#include "ac3_internal.h" - - -#include "decode.h" -#include "exponent.h" - - -static void exp_unpack_ch(uint_16 type,uint_16 expstr,uint_16 ngrps,uint_16 initial_exp, - uint_16 exps[], uint_16 *dest); - -void -exponent_unpack( bsi_t *bsi, audblk_t *audblk) -{ - uint_16 i; - - for(i=0; i< bsi->nfchans; i++) - exp_unpack_ch(UNPACK_FBW, audblk->chexpstr[i], audblk->nchgrps[i], audblk->exps[i][0], - &audblk->exps[i][1], audblk->fbw_exp[i]); - - if(audblk->cplinu) - exp_unpack_ch(UNPACK_CPL, audblk->cplexpstr, audblk->ncplgrps, audblk->cplabsexp << 1, - audblk->cplexps, &audblk->cpl_exp[audblk->cplstrtmant]); - - if(bsi->lfeon) - exp_unpack_ch(UNPACK_LFE, audblk->lfeexpstr, 2, audblk->lfeexps[0], - &audblk->lfeexps[1], audblk->lfe_exp); -} - - -static void -exp_unpack_ch(uint_16 type,uint_16 expstr,uint_16 ngrps,uint_16 initial_exp, - uint_16 exps[], uint_16 *dest) -{ - uint_16 i,j; - sint_16 exp_acc; - sint_16 exp_1,exp_2,exp_3; - - if(expstr == EXP_REUSE) - return; - - /* Handle the initial absolute exponent */ - exp_acc = initial_exp; - j = 0; - - /* In the case of a fbw channel then the initial absolute values is - * also an exponent */ - if(type != UNPACK_CPL) - dest[j++] = exp_acc; - - /* Loop through the groups and fill the dest array appropriately */ - for(i=0; i< ngrps; i++) - { - if(exps[i] > 124) - goto error; - - exp_1 = exps[i] / 25; - exp_2 = (exps[i] - (exp_1 * 25)) / 5; - exp_3 = exps[i] - (exp_1 * 25) - (exp_2 * 5) ; - - exp_acc += (exp_1 - 2); - - switch(expstr) - { - case EXP_D45: - dest[j++] = exp_acc; - dest[j++] = exp_acc; - case EXP_D25: - dest[j++] = exp_acc; - case EXP_D15: - dest[j++] = exp_acc; - } - - exp_acc += (exp_2 - 2); - - switch(expstr) - { - case EXP_D45: - dest[j++] = exp_acc; - dest[j++] = exp_acc; - case EXP_D25: - dest[j++] = exp_acc; - case EXP_D15: - dest[j++] = exp_acc; - } - - exp_acc += (exp_3 - 2); - - switch(expstr) - { - case EXP_D45: - dest[j++] = exp_acc; - dest[j++] = exp_acc; - case EXP_D25: - dest[j++] = exp_acc; - case EXP_D15: - dest[j++] = exp_acc; - } - } - - return; - - goto error; -error: - if(!error_flag) - fprintf(stderr,"** Invalid exponent - skipping frame **\n"); - error_flag = 1; -} - diff --git a/ac3dec/libac3/exponent.h b/ac3dec/libac3/exponent.h deleted file mode 100644 index 06c59db..0000000 --- a/ac3dec/libac3/exponent.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * exponent.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#define UNPACK_FBW 1 -#define UNPACK_CPL 2 -#define UNPACK_LFE 4 - -void exponent_unpack( bsi_t *bsi, audblk_t *audblk); diff --git a/ac3dec/libac3/imdct.c b/ac3dec/libac3/imdct.c deleted file mode 100644 index 6fa0e2a..0000000 --- a/ac3dec/libac3/imdct.c +++ /dev/null @@ -1,479 +0,0 @@ -/* - * imdct.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - */ - -#include -#include -#include -#include "ac3.h" -#include "ac3_internal.h" - - -#include "decode.h" -#include "imdct.h" - -void imdct_do_256(float data[],float delay[]); -void imdct_do_512(float data[],float delay[]); - -typedef struct complex_s -{ - float real; - float imag; -} complex_t; - - -#define N 512 - - -/* 128 point bit-reverse LUT */ -static uint_8 bit_reverse_512[] = { - 0x00, 0x40, 0x20, 0x60, 0x10, 0x50, 0x30, 0x70, - 0x08, 0x48, 0x28, 0x68, 0x18, 0x58, 0x38, 0x78, - 0x04, 0x44, 0x24, 0x64, 0x14, 0x54, 0x34, 0x74, - 0x0c, 0x4c, 0x2c, 0x6c, 0x1c, 0x5c, 0x3c, 0x7c, - 0x02, 0x42, 0x22, 0x62, 0x12, 0x52, 0x32, 0x72, - 0x0a, 0x4a, 0x2a, 0x6a, 0x1a, 0x5a, 0x3a, 0x7a, - 0x06, 0x46, 0x26, 0x66, 0x16, 0x56, 0x36, 0x76, - 0x0e, 0x4e, 0x2e, 0x6e, 0x1e, 0x5e, 0x3e, 0x7e, - 0x01, 0x41, 0x21, 0x61, 0x11, 0x51, 0x31, 0x71, - 0x09, 0x49, 0x29, 0x69, 0x19, 0x59, 0x39, 0x79, - 0x05, 0x45, 0x25, 0x65, 0x15, 0x55, 0x35, 0x75, - 0x0d, 0x4d, 0x2d, 0x6d, 0x1d, 0x5d, 0x3d, 0x7d, - 0x03, 0x43, 0x23, 0x63, 0x13, 0x53, 0x33, 0x73, - 0x0b, 0x4b, 0x2b, 0x6b, 0x1b, 0x5b, 0x3b, 0x7b, - 0x07, 0x47, 0x27, 0x67, 0x17, 0x57, 0x37, 0x77, - 0x0f, 0x4f, 0x2f, 0x6f, 0x1f, 0x5f, 0x3f, 0x7f}; - -static uint_8 bit_reverse_256[] = { - 0x00, 0x20, 0x10, 0x30, 0x08, 0x28, 0x18, 0x38, - 0x04, 0x24, 0x14, 0x34, 0x0c, 0x2c, 0x1c, 0x3c, - 0x02, 0x22, 0x12, 0x32, 0x0a, 0x2a, 0x1a, 0x3a, - 0x06, 0x26, 0x16, 0x36, 0x0e, 0x2e, 0x1e, 0x3e, - 0x01, 0x21, 0x11, 0x31, 0x09, 0x29, 0x19, 0x39, - 0x05, 0x25, 0x15, 0x35, 0x0d, 0x2d, 0x1d, 0x3d, - 0x03, 0x23, 0x13, 0x33, 0x0b, 0x2b, 0x1b, 0x3b, - 0x07, 0x27, 0x17, 0x37, 0x0f, 0x2f, 0x1f, 0x3f}; - -static complex_t buf[128]; - -/* Twiddle factor LUT */ -static complex_t *w[7]; -static complex_t w_1[1]; -static complex_t w_2[2]; -static complex_t w_4[4]; -static complex_t w_8[8]; -static complex_t w_16[16]; -static complex_t w_32[32]; -static complex_t w_64[64]; - -/* Twiddle factors for IMDCT */ -static float xcos1[128]; -static float xsin1[128]; -static float xcos2[64]; -static float xsin2[64]; - -/* Delay buffer for time domain interleaving */ -static float delay[6][256]; - -/* Windowing function for Modified DCT - Thank you acroread */ -static float window[] = { - 0.00014, 0.00024, 0.00037, 0.00051, 0.00067, 0.00086, 0.00107, 0.00130, - 0.00157, 0.00187, 0.00220, 0.00256, 0.00297, 0.00341, 0.00390, 0.00443, - 0.00501, 0.00564, 0.00632, 0.00706, 0.00785, 0.00871, 0.00962, 0.01061, - 0.01166, 0.01279, 0.01399, 0.01526, 0.01662, 0.01806, 0.01959, 0.02121, - 0.02292, 0.02472, 0.02662, 0.02863, 0.03073, 0.03294, 0.03527, 0.03770, - 0.04025, 0.04292, 0.04571, 0.04862, 0.05165, 0.05481, 0.05810, 0.06153, - 0.06508, 0.06878, 0.07261, 0.07658, 0.08069, 0.08495, 0.08935, 0.09389, - 0.09859, 0.10343, 0.10842, 0.11356, 0.11885, 0.12429, 0.12988, 0.13563, - 0.14152, 0.14757, 0.15376, 0.16011, 0.16661, 0.17325, 0.18005, 0.18699, - 0.19407, 0.20130, 0.20867, 0.21618, 0.22382, 0.23161, 0.23952, 0.24757, - 0.25574, 0.26404, 0.27246, 0.28100, 0.28965, 0.29841, 0.30729, 0.31626, - 0.32533, 0.33450, 0.34376, 0.35311, 0.36253, 0.37204, 0.38161, 0.39126, - 0.40096, 0.41072, 0.42054, 0.43040, 0.44030, 0.45023, 0.46020, 0.47019, - 0.48020, 0.49022, 0.50025, 0.51028, 0.52031, 0.53033, 0.54033, 0.55031, - 0.56026, 0.57019, 0.58007, 0.58991, 0.59970, 0.60944, 0.61912, 0.62873, - 0.63827, 0.64774, 0.65713, 0.66643, 0.67564, 0.68476, 0.69377, 0.70269, - 0.71150, 0.72019, 0.72877, 0.73723, 0.74557, 0.75378, 0.76186, 0.76981, - 0.77762, 0.78530, 0.79283, 0.80022, 0.80747, 0.81457, 0.82151, 0.82831, - 0.83496, 0.84145, 0.84779, 0.85398, 0.86001, 0.86588, 0.87160, 0.87716, - 0.88257, 0.88782, 0.89291, 0.89785, 0.90264, 0.90728, 0.91176, 0.91610, - 0.92028, 0.92432, 0.92822, 0.93197, 0.93558, 0.93906, 0.94240, 0.94560, - 0.94867, 0.95162, 0.95444, 0.95713, 0.95971, 0.96217, 0.96451, 0.96674, - 0.96887, 0.97089, 0.97281, 0.97463, 0.97635, 0.97799, 0.97953, 0.98099, - 0.98236, 0.98366, 0.98488, 0.98602, 0.98710, 0.98811, 0.98905, 0.98994, - 0.99076, 0.99153, 0.99225, 0.99291, 0.99353, 0.99411, 0.99464, 0.99513, - 0.99558, 0.99600, 0.99639, 0.99674, 0.99706, 0.99736, 0.99763, 0.99788, - 0.99811, 0.99831, 0.99850, 0.99867, 0.99882, 0.99895, 0.99908, 0.99919, - 0.99929, 0.99938, 0.99946, 0.99953, 0.99959, 0.99965, 0.99969, 0.99974, - 0.99978, 0.99981, 0.99984, 0.99986, 0.99988, 0.99990, 0.99992, 0.99993, - 0.99994, 0.99995, 0.99996, 0.99997, 0.99998, 0.99998, 0.99998, 0.99999, - 0.99999, 0.99999, 0.99999, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, - 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000 }; - - -static inline void swap_cmplx(complex_t *a, complex_t *b) -{ - complex_t tmp; - - tmp = *a; - *a = *b; - *b = tmp; -} - - - -static inline complex_t cmplx_mult(complex_t a, complex_t b) -{ - complex_t ret; - - ret.real = a.real * b.real - a.imag * b.imag; - ret.imag = a.real * b.imag + a.imag * b.real; - - return ret; -} - -void imdct_init(void) -{ - int i,k; - complex_t angle_step; - complex_t current_angle; - - /* Twiddle factors to turn IFFT into IMDCT */ - for( i=0; i < 128; i++) - { - xcos1[i] = -cos(2.0f * M_PI * (8*i+1)/(8*N)) ; - xsin1[i] = -sin(2.0f * M_PI * (8*i+1)/(8*N)) ; - } - - /* More twiddle factors to turn IFFT into IMDCT */ - for( i=0; i < 64; i++) - { - xcos2[i] = -cos(2.0f * M_PI * (8*i+1)/(4*N)) ; - xsin2[i] = -sin(2.0f * M_PI * (8*i+1)/(4*N)) ; - } - - /* Canonical twiddle factors for FFT */ - w[0] = w_1; - w[1] = w_2; - w[2] = w_4; - w[3] = w_8; - w[4] = w_16; - w[5] = w_32; - w[6] = w_64; - - for( i = 0; i < 7; i++) - { - angle_step.real = cos(-2.0 * M_PI / (1 << (i+1))); - angle_step.imag = sin(-2.0 * M_PI / (1 << (i+1))); - - current_angle.real = 1.0; - current_angle.imag = 0.0; - - for (k = 0; k < 1 << i; k++) - { - w[i][k] = current_angle; - current_angle = cmplx_mult(current_angle,angle_step); - } - } -} - -void -imdct_do_512(float data[],float delay[]) -{ - int i,k; - int p,q; - int m; - int two_m; - int two_m_plus_one; - - float tmp_a_i; - float tmp_a_r; - float tmp_b_i; - float tmp_b_r; - - float *data_ptr; - float *delay_ptr; - float *window_ptr; - - // - // 512 IMDCT with source and dest data in 'data' - // - - // Pre IFFT complex multiply plus IFFT cmplx conjugate - for( i=0; i < 128; i++) - { - /* z[i] = (X[256-2*i-1] + j * X[2*i]) * (xcos1[i] + j * xsin1[i]) ; */ - buf[i].real = (data[256-2*i-1] * xcos1[i]) - (data[2*i] * xsin1[i]); - buf[i].imag = -1.0 * ((data[2*i] * xcos1[i]) + (data[256-2*i-1] * xsin1[i])); - } - - //Bit reversed shuffling - for(i=0; i<128; i++) - { - k = bit_reverse_512[i]; - if (k < i) - swap_cmplx(&buf[i],&buf[k]); - } - - /* FFT Merge */ - for (m=0; m < 7; m++) - { - if(m) - two_m = (1 << m); - else - two_m = 1; - - two_m_plus_one = (1 << (m+1)); - - for(k = 0; k < two_m; k++) - { - for(i = 0; i < 128; i += two_m_plus_one) - { - p = k + i; - q = p + two_m; - tmp_a_r = buf[p].real; - tmp_a_i = buf[p].imag; - tmp_b_r = buf[q].real * w[m][k].real - buf[q].imag * w[m][k].imag; - tmp_b_i = buf[q].imag * w[m][k].real + buf[q].real * w[m][k].imag; - buf[p].real = tmp_a_r + tmp_b_r; - buf[p].imag = tmp_a_i + tmp_b_i; - buf[q].real = tmp_a_r - tmp_b_r; - buf[q].imag = tmp_a_i - tmp_b_i; - - } - } - } - - /* Post IFFT complex multiply plus IFFT complex conjugate*/ - for( i=0; i < 128; i++) - { - /* y[n] = z[n] * (xcos1[n] + j * xsin1[n]) ; */ - tmp_a_r = buf[i].real; - tmp_a_i = -1.0 * buf[i].imag; - buf[i].real =(tmp_a_r * xcos1[i]) - (tmp_a_i * xsin1[i]); - buf[i].imag =(tmp_a_r * xsin1[i]) + (tmp_a_i * xcos1[i]); - } - - data_ptr = data; - delay_ptr = delay; - window_ptr = window; - - /* Window and convert to real valued signal */ - for(i=0; i< 64; i++) - { - *data_ptr++ = 2.0f * (-buf[64+i].imag * *window_ptr++ + *delay_ptr++); - *data_ptr++ = 2.0f * ( buf[64-i-1].real * *window_ptr++ + *delay_ptr++); - } - - for(i=0; i< 64; i++) - { - *data_ptr++ = 2.0f * (-buf[i].real * *window_ptr++ + *delay_ptr++); - *data_ptr++ = 2.0f * ( buf[128-i-1].imag * *window_ptr++ + *delay_ptr++); - } - - /* The trailing edge of the window goes into the delay line */ - delay_ptr = delay; - - for(i=0; i< 64; i++) - { - *delay_ptr++ = -buf[64+i].real * *--window_ptr; - *delay_ptr++ = buf[64-i-1].imag * *--window_ptr; - } - - for(i=0; i<64; i++) - { - *delay_ptr++ = buf[i].imag * *--window_ptr; - *delay_ptr++ = -buf[128-i-1].real * *--window_ptr; - } -} - -void -imdct_do_256(float data[],float delay[]) -{ - int i,k; - int p,q; - int m; - int two_m; - int two_m_plus_one; - - float tmp_a_i; - float tmp_a_r; - float tmp_b_i; - float tmp_b_r; - - float *data_ptr; - float *delay_ptr; - float *window_ptr; - - complex_t *buf_1, *buf_2; - - buf_1 = &buf[0]; - buf_2 = &buf[64]; - - /* Pre IFFT complex multiply plus IFFT cmplx conjugate */ - for(k=0; k<64; k++) - { - /* X1[k] = X[2*k] */ - /* X2[k] = X[2*k+1] */ - - p = 2 * (128-2*k-1); - q = 2 * (2 * k); - - /* Z1[k] = (X1[128-2*k-1] + j * X1[2*k]) * (xcos2[k] + j * xsin2[k]); */ - buf_1[k].real = data[p] * xcos2[k] - data[q] * xsin2[k]; - buf_1[k].imag = -1.0f * (data[q] * xcos2[k] + data[p] * xsin2[k]); - /* Z2[k] = (X2[128-2*k-1] + j * X2[2*k]) * (xcos2[k] + j * xsin2[k]); */ - buf_2[k].real = data[p + 1] * xcos2[k] - data[q + 1] * xsin2[k]; - buf_2[k].imag = -1.0f * ( data[q + 1] * xcos2[k] + data[p + 1] * xsin2[k]); - } - - //IFFT Bit reversed shuffling - for(i=0; i<64; i++) - { - k = bit_reverse_256[i]; - if (k < i) - { - swap_cmplx(&buf_1[i],&buf_1[k]); - swap_cmplx(&buf_2[i],&buf_2[k]); - } - } - - /* FFT Merge */ - for (m=0; m < 6; m++) - { - two_m = (1 << m); - two_m_plus_one = (1 << (m+1)); - - //FIXME - if(m) - two_m = (1 << m); - else - two_m = 1; - - for(k = 0; k < two_m; k++) - { - for(i = 0; i < 64; i += two_m_plus_one) - { - p = k + i; - q = p + two_m; - //Do block 1 - tmp_a_r = buf_1[p].real; - tmp_a_i = buf_1[p].imag; - tmp_b_r = buf_1[q].real * w[m][k].real - buf_1[q].imag * w[m][k].imag; - tmp_b_i = buf_1[q].imag * w[m][k].real + buf_1[q].real * w[m][k].imag; - buf_1[p].real = tmp_a_r + tmp_b_r; - buf_1[p].imag = tmp_a_i + tmp_b_i; - buf_1[q].real = tmp_a_r - tmp_b_r; - buf_1[q].imag = tmp_a_i - tmp_b_i; - - //Do block 2 - tmp_a_r = buf_2[p].real; - tmp_a_i = buf_2[p].imag; - tmp_b_r = buf_2[q].real * w[m][k].real - buf_2[q].imag * w[m][k].imag; - tmp_b_i = buf_2[q].imag * w[m][k].real + buf_2[q].real * w[m][k].imag; - buf_2[p].real = tmp_a_r + tmp_b_r; - buf_2[p].imag = tmp_a_i + tmp_b_i; - buf_2[q].real = tmp_a_r - tmp_b_r; - buf_2[q].imag = tmp_a_i - tmp_b_i; - - } - } - } - - /* Post IFFT complex multiply */ - for( i=0; i < 64; i++) - { - /* y1[n] = z1[n] * (xcos2[n] + j * xs in2[n]) ; */ - tmp_a_r = buf_1[i].real; - tmp_a_i = -buf_1[i].imag; - buf_1[i].real =(tmp_a_r * xcos2[i]) - (tmp_a_i * xsin2[i]); - buf_1[i].imag =(tmp_a_r * xsin2[i]) + (tmp_a_i * xcos2[i]); - /* y2[n] = z2[n] * (xcos2[n] + j * xsin2[n]) ; */ - tmp_a_r = buf_2[i].real; - tmp_a_i = -buf_2[i].imag; - buf_2[i].real =(tmp_a_r * xcos2[i]) - (tmp_a_i * xsin2[i]); - buf_2[i].imag =(tmp_a_r * xsin2[i]) + (tmp_a_i * xcos2[i]); - } - - data_ptr = data; - delay_ptr = delay; - window_ptr = window; - - /* Window and convert to real valued signal */ - for(i=0; i< 64; i++) - { - *data_ptr++ = 2.0f * (-buf_1[i].imag * *window_ptr++ + *delay_ptr++); - *data_ptr++ = 2.0f * ( buf_1[64-i-1].real * *window_ptr++ + *delay_ptr++); - } - - for(i=0; i< 64; i++) - { - *data_ptr++ = 2.0f * (-buf_1[i].real * *window_ptr++ + *delay_ptr++); - *data_ptr++ = 2.0f * ( buf_1[64-i-1].imag * *window_ptr++ + *delay_ptr++); - } - - delay_ptr = delay; - - for(i=0; i< 64; i++) - { - *delay_ptr++ = -buf_2[i].real * *--window_ptr; - *delay_ptr++ = buf_2[64-i-1].imag * *--window_ptr; - } - - for(i=0; i< 64; i++) - { - *delay_ptr++ = buf_2[i].imag * *--window_ptr; - *delay_ptr++ = -buf_2[64-i-1].real * *--window_ptr; - } -} - -//FIXME remove - for timing code -///#include -//FIXME remove - -void -imdct(bsi_t *bsi,audblk_t *audblk, stream_samples_t samples) { - int i; - - //handy timing code - //struct timeval start,end; - - //gettimeofday(&start,0); - - for(i=0; infchans;i++) - { - if(audblk->blksw[i]) - imdct_do_256(samples[i],delay[i]); - else - imdct_do_512(samples[i],delay[i]); - } - //gettimeofday(&end,0); - //printf("imdct %ld us\n",(end.tv_sec - start.tv_sec) * 1000000 + - //end.tv_usec - start.tv_usec); - - //XXX We don't bother with the IMDCT for the LFE as it's currently - //unused. - //if (bsi->lfeon) - // imdct_do_512(coeffs->lfe,samples->channel[5],delay[5]); - // -} diff --git a/ac3dec/libac3/imdct.h b/ac3dec/libac3/imdct.h deleted file mode 100644 index 750aa87..0000000 --- a/ac3dec/libac3/imdct.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * imdct.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - */ - -void imdct(bsi_t *bsi,audblk_t *audblk, stream_samples_t samples); -void imdct_init(void); diff --git a/ac3dec/libac3/parse.c b/ac3dec/libac3/parse.c deleted file mode 100644 index 19e8965..0000000 --- a/ac3dec/libac3/parse.c +++ /dev/null @@ -1,656 +0,0 @@ -/* - * parse.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - */ - -#include -#include -#include -#include "ac3.h" -#include "ac3_internal.h" - - -#include "bitstream.h" -#include "stats.h" -#include "debug.h" -#include "crc.h" -#include "parse.h" - -/* Misc LUT */ -static const uint_16 nfchans[8] = {2,1,2,3,3,4,4,5}; - -struct frmsize_s -{ - uint_16 bit_rate; - uint_16 frm_size[3]; -}; - -static const struct frmsize_s frmsizecod_tbl[64] = -{ - { 32 ,{64 ,69 ,96 } }, - { 32 ,{64 ,70 ,96 } }, - { 40 ,{80 ,87 ,120 } }, - { 40 ,{80 ,88 ,120 } }, - { 48 ,{96 ,104 ,144 } }, - { 48 ,{96 ,105 ,144 } }, - { 56 ,{112 ,121 ,168 } }, - { 56 ,{112 ,122 ,168 } }, - { 64 ,{128 ,139 ,192 } }, - { 64 ,{128 ,140 ,192 } }, - { 80 ,{160 ,174 ,240 } }, - { 80 ,{160 ,175 ,240 } }, - { 96 ,{192 ,208 ,288 } }, - { 96 ,{192 ,209 ,288 } }, - { 112 ,{224 ,243 ,336 } }, - { 112 ,{224 ,244 ,336 } }, - { 128 ,{256 ,278 ,384 } }, - { 128 ,{256 ,279 ,384 } }, - { 160 ,{320 ,348 ,480 } }, - { 160 ,{320 ,349 ,480 } }, - { 192 ,{384 ,417 ,576 } }, - { 192 ,{384 ,418 ,576 } }, - { 224 ,{448 ,487 ,672 } }, - { 224 ,{448 ,488 ,672 } }, - { 256 ,{512 ,557 ,768 } }, - { 256 ,{512 ,558 ,768 } }, - { 320 ,{640 ,696 ,960 } }, - { 320 ,{640 ,697 ,960 } }, - { 384 ,{768 ,835 ,1152 } }, - { 384 ,{768 ,836 ,1152 } }, - { 448 ,{896 ,975 ,1344 } }, - { 448 ,{896 ,976 ,1344 } }, - { 512 ,{1024 ,1114 ,1536 } }, - { 512 ,{1024 ,1115 ,1536 } }, - { 576 ,{1152 ,1253 ,1728 } }, - { 576 ,{1152 ,1254 ,1728 } }, - { 640 ,{1280 ,1393 ,1920 } }, - { 640 ,{1280 ,1394 ,1920 } } -}; - -void -parse_syncinfo_data(syncinfo_t *syncinfo, uint_8 *data) -{ - // Get the sampling rate - syncinfo->fscod = (data[2] >> 6) & 0x3; - - if(syncinfo->fscod == 3) - { - //invalid sampling rate code - error_flag = 1; - return; - } - else if(syncinfo->fscod == 2) - syncinfo->sampling_rate = 32000; - else if(syncinfo->fscod == 1) - syncinfo->sampling_rate = 44100; - else - syncinfo->sampling_rate = 48000; - - // Get the frame size code - syncinfo->frmsizecod = data[2] & 0x3f; - - // Calculate the frame size and bitrate - syncinfo->frame_size = - frmsizecod_tbl[syncinfo->frmsizecod].frm_size[syncinfo->fscod]; - syncinfo->bit_rate = frmsizecod_tbl[syncinfo->frmsizecod].bit_rate; -} - -/* Parse a syncinfo structure, minus the sync word */ -int -parse_syncinfo(syncinfo_t *syncinfo) -{ - int byte, idx; - uint_8 data[3]; - uint_16 sync_word = 0; - uint_32 time_out = 1<<16; - - - // - // Find a ac3 sync frame. Time out if we read 64k without finding - // one. - // - while(time_out--) - { - byte = bitstream_get_byte(); - if (byte < 0) - return -ENOENT; - sync_word = (sync_word << 8) + byte; - - if(sync_word == 0x0b77) - break; - } - - // - // We need to read in the entire syncinfo struct (0x0b77 + 24 bits) - // in order to determine how big the frame is - // - for (idx = 0; idx < 3; idx++) { - byte = bitstream_get_byte(); - if (byte < 0) - return -ENOENT; - data[idx] = byte; - } - - parse_syncinfo_data(syncinfo, data); - - // Buffer the entire syncframe - if (bitstream_buffer_frame(syncinfo->frame_size * 2 - 5) < 0) - return -ENOENT; - - // Check the crc over the entire frame - crc_init(); - - crc_process_byte(data[0]); - crc_process_byte(data[1]); - crc_process_byte(data[2]); - crc_process_frame(bitstream_get_buffer_start(),syncinfo->frame_size * 2 - 5); - - if(!crc_validate()) - { - error_flag = 1; - fprintf(stderr,"** CRC failed - skipping frame **\n"); - return 0; - } - - if (!(ac3_config.flags & AC3_QUIET)) - stats_print_syncinfo(syncinfo); - return 0; -} - -/* - * This routine fills a bsi struct from the AC3 stream - */ - -void -parse_bsi(bsi_t *bsi) -{ - uint_32 i; - - /* Check the AC-3 version number */ - bsi->bsid = bitstream_get(5); - - /* Get the audio service provided by the steram */ - bsi->bsmod = bitstream_get(3); - - /* Get the audio coding mode (ie how many channels)*/ - bsi->acmod = bitstream_get(3); - /* Predecode the number of full bandwidth channels as we use this - * number a lot */ - bsi->nfchans = nfchans[bsi->acmod]; - - /* If it is in use, get the centre channel mix level */ - if ((bsi->acmod & 0x1) && (bsi->acmod != 0x1)) - bsi->cmixlev = bitstream_get(2); - - /* If it is in use, get the surround channel mix level */ - if (bsi->acmod & 0x4) - bsi->surmixlev = bitstream_get(2); - - /* Get the dolby surround mode if in 2/0 mode */ - if(bsi->acmod == 0x2) - bsi->dsurmod= bitstream_get(2); - - /* Is the low frequency effects channel on? */ - bsi->lfeon = bitstream_get(1); - - /* Get the dialogue normalization level */ - bsi->dialnorm = bitstream_get(5); - - /* Does compression gain exist? */ - bsi->compre = bitstream_get(1); - if (bsi->compre) - { - /* Get compression gain */ - bsi->compr = bitstream_get(8); - } - - /* Does language code exist? */ - bsi->langcode = bitstream_get(1); - if (bsi->langcode) - { - /* Get langauge code */ - bsi->langcod = bitstream_get(8); - } - - /* Does audio production info exist? */ - bsi->audprodie = bitstream_get(1); - if (bsi->audprodie) - { - /* Get mix level */ - bsi->mixlevel = bitstream_get(5); - - /* Get room type */ - bsi->roomtyp = bitstream_get(2); - } - - /* If we're in dual mono mode then get some extra info */ - if (bsi->acmod ==0) - { - /* Get the dialogue normalization level two */ - bsi->dialnorm2 = bitstream_get(5); - - /* Does compression gain two exist? */ - bsi->compr2e = bitstream_get(1); - if (bsi->compr2e) - { - /* Get compression gain two */ - bsi->compr2 = bitstream_get(8); - } - - /* Does language code two exist? */ - bsi->langcod2e = bitstream_get(1); - if (bsi->langcod2e) - { - /* Get langauge code two */ - bsi->langcod2 = bitstream_get(8); - } - - /* Does audio production info two exist? */ - bsi->audprodi2e = bitstream_get(1); - if (bsi->audprodi2e) - { - /* Get mix level two */ - bsi->mixlevel2 = bitstream_get(5); - - /* Get room type two */ - bsi->roomtyp2 = bitstream_get(2); - } - } - - /* Get the copyright bit */ - bsi->copyrightb = bitstream_get(1); - - /* Get the original bit */ - bsi->origbs = bitstream_get(1); - - /* Does timecode one exist? */ - bsi->timecod1e = bitstream_get(1); - - if(bsi->timecod1e) - bsi->timecod1 = bitstream_get(14); - - /* Does timecode two exist? */ - bsi->timecod2e = bitstream_get(1); - - if(bsi->timecod2e) - bsi->timecod2 = bitstream_get(14); - - /* Does addition info exist? */ - bsi->addbsie = bitstream_get(1); - - if(bsi->addbsie) - { - /* Get how much info is there */ - bsi->addbsil = bitstream_get(6); - - /* Get the additional info */ - for(i=0;i<(bsi->addbsil + 1);i++) - bsi->addbsi[i] = bitstream_get(8); - } - - if (!(ac3_config.flags & AC3_QUIET)) - stats_print_bsi(bsi); -} - -/* More pain inducing parsing */ -void -parse_audblk(bsi_t *bsi,audblk_t *audblk) -{ - int i,j; - - for (i=0;i < bsi->nfchans; i++) - { - /* Is this channel an interleaved 256 + 256 block ? */ - audblk->blksw[i] = bitstream_get(1); - } - - for (i=0;i < bsi->nfchans; i++) - { - /* Should we dither this channel? */ - audblk->dithflag[i] = bitstream_get(1); - } - - /* Does dynamic range control exist? */ - audblk->dynrnge = bitstream_get(1); - if (audblk->dynrnge) - { - /* Get dynamic range info */ - audblk->dynrng = bitstream_get(8); - } - - /* If we're in dual mono mode then get the second channel DR info */ - if (bsi->acmod == 0) - { - /* Does dynamic range control two exist? */ - audblk->dynrng2e = bitstream_get(1); - if (audblk->dynrng2e) - { - /* Get dynamic range info */ - audblk->dynrng2 = bitstream_get(8); - } - } - - /* Does coupling strategy exist? */ - audblk->cplstre = bitstream_get(1); - if (audblk->cplstre) - { - /* Is coupling turned on? */ - audblk->cplinu = bitstream_get(1); - if(audblk->cplinu) - { - for(i=0;i < bsi->nfchans; i++) - audblk->chincpl[i] = bitstream_get(1); - if(bsi->acmod == 0x2) - audblk->phsflginu = bitstream_get(1); - audblk->cplbegf = bitstream_get(4); - audblk->cplendf = bitstream_get(4); - audblk->ncplsubnd = (audblk->cplendf + 2) - audblk->cplbegf + 1; - - /* Calculate the start and end bins of the coupling channel */ - audblk->cplstrtmant = (audblk->cplbegf * 12) + 37 ; - audblk->cplendmant = ((audblk->cplendf + 3) * 12) + 37; - - /* The number of combined subbands is ncplsubnd minus each combined - * band */ - audblk->ncplbnd = audblk->ncplsubnd; - - for(i=1; i< audblk->ncplsubnd; i++) - { - audblk->cplbndstrc[i] = bitstream_get(1); - audblk->ncplbnd -= audblk->cplbndstrc[i]; - } - } - } - - if(audblk->cplinu) - { - /* Loop through all the channels and get their coupling co-ords */ - for(i=0;i < bsi->nfchans;i++) - { - if(!audblk->chincpl[i]) - continue; - - /* Is there new coupling co-ordinate info? */ - audblk->cplcoe[i] = bitstream_get(1); - - if(audblk->cplcoe[i]) - { - audblk->mstrcplco[i] = bitstream_get(2); - for(j=0;j < audblk->ncplbnd; j++) - { - audblk->cplcoexp[i][j] = bitstream_get(4); - audblk->cplcomant[i][j] = bitstream_get(4); - } - } - } - - /* If we're in dual mono mode, there's going to be some phase info */ - if( (bsi->acmod == 0x2) && audblk->phsflginu && - (audblk->cplcoe[0] || audblk->cplcoe[1])) - { - for(j=0;j < audblk->ncplbnd; j++) - audblk->phsflg[j] = bitstream_get(1); - - } - } - - /* If we're in dual mono mode, there may be a rematrix strategy */ - if(bsi->acmod == 0x2) - { - audblk->rematstr = bitstream_get(1); - if(audblk->rematstr) - { - if (audblk->cplinu == 0) - { - for(i = 0; i < 4; i++) - audblk->rematflg[i] = bitstream_get(1); - } - if((audblk->cplbegf > 2) && audblk->cplinu) - { - for(i = 0; i < 4; i++) - audblk->rematflg[i] = bitstream_get(1); - } - if((audblk->cplbegf <= 2) && audblk->cplinu) - { - for(i = 0; i < 3; i++) - audblk->rematflg[i] = bitstream_get(1); - } - if((audblk->cplbegf == 0) && audblk->cplinu) - for(i = 0; i < 2; i++) - audblk->rematflg[i] = bitstream_get(1); - - } - } - - if (audblk->cplinu) - { - /* Get the coupling channel exponent strategy */ - audblk->cplexpstr = bitstream_get(2); - audblk->ncplgrps = (audblk->cplendmant - audblk->cplstrtmant) / - (3 << (audblk->cplexpstr-1)); - } - - for(i = 0; i < bsi->nfchans; i++) - audblk->chexpstr[i] = bitstream_get(2); - - /* Get the exponent strategy for lfe channel */ - if(bsi->lfeon) - audblk->lfeexpstr = bitstream_get(1); - - /* Determine the bandwidths of all the fbw channels */ - for(i = 0; i < bsi->nfchans; i++) - { - uint_16 grp_size; - - if(audblk->chexpstr[i] != EXP_REUSE) - { - if (audblk->cplinu && audblk->chincpl[i]) - { - audblk->endmant[i] = audblk->cplstrtmant; - } - else - { - audblk->chbwcod[i] = bitstream_get(6); - audblk->endmant[i] = ((audblk->chbwcod[i] + 12) * 3) + 37; - } - - /* Calculate the number of exponent groups to fetch */ - grp_size = 3 * (1 << (audblk->chexpstr[i] - 1)); - audblk->nchgrps[i] = (audblk->endmant[i] - 1 + (grp_size - 3)) / grp_size; - } - } - - /* Get the coupling exponents if they exist */ - if(audblk->cplinu && (audblk->cplexpstr != EXP_REUSE)) - { - audblk->cplabsexp = bitstream_get(4); - for(i=0;i< audblk->ncplgrps;i++) - audblk->cplexps[i] = bitstream_get(7); - } - - /* Get the fwb channel exponents */ - for(i=0;i < bsi->nfchans; i++) - { - if(audblk->chexpstr[i] != EXP_REUSE) - { - audblk->exps[i][0] = bitstream_get(4); - for(j=1;j<=audblk->nchgrps[i];j++) - audblk->exps[i][j] = bitstream_get(7); - audblk->gainrng[i] = bitstream_get(2); - } - } - - /* Get the lfe channel exponents */ - if(bsi->lfeon && (audblk->lfeexpstr != EXP_REUSE)) - { - audblk->lfeexps[0] = bitstream_get(4); - audblk->lfeexps[1] = bitstream_get(7); - audblk->lfeexps[2] = bitstream_get(7); - } - - /* Get the parametric bit allocation parameters */ - audblk->baie = bitstream_get(1); - - if(audblk->baie) - { - audblk->sdcycod = bitstream_get(2); - audblk->fdcycod = bitstream_get(2); - audblk->sgaincod = bitstream_get(2); - audblk->dbpbcod = bitstream_get(2); - audblk->floorcod = bitstream_get(3); - } - - /* Get the SNR off set info if it exists */ - audblk->snroffste = bitstream_get(1); - - if(audblk->snroffste) - { - audblk->csnroffst = bitstream_get(6); - - if(audblk->cplinu) - { - audblk->cplfsnroffst = bitstream_get(4); - audblk->cplfgaincod = bitstream_get(3); - } - - for(i = 0;i < bsi->nfchans; i++) - { - audblk->fsnroffst[i] = bitstream_get(4); - audblk->fgaincod[i] = bitstream_get(3); - } - if(bsi->lfeon) - { - - audblk->lfefsnroffst = bitstream_get(4); - audblk->lfefgaincod = bitstream_get(3); - } - } - - /* Get coupling leakage info if it exists */ - if(audblk->cplinu) - { - audblk->cplleake = bitstream_get(1); - - if(audblk->cplleake) - { - audblk->cplfleak = bitstream_get(3); - audblk->cplsleak = bitstream_get(3); - } - } - - /* Get the delta bit alloaction info */ - audblk->deltbaie = bitstream_get(1); - - if(audblk->deltbaie) - { - if(audblk->cplinu) - audblk->cpldeltbae = bitstream_get(2); - - for(i = 0;i < bsi->nfchans; i++) - audblk->deltbae[i] = bitstream_get(2); - - if (audblk->cplinu && (audblk->cpldeltbae == DELTA_BIT_NEW)) - { - audblk->cpldeltnseg = bitstream_get(3); - for(i = 0;i < audblk->cpldeltnseg + 1; i++) - { - audblk->cpldeltoffst[i] = bitstream_get(5); - audblk->cpldeltlen[i] = bitstream_get(4); - audblk->cpldeltba[i] = bitstream_get(3); - } - } - - for(i = 0;i < bsi->nfchans; i++) - { - if (audblk->deltbae[i] == DELTA_BIT_NEW) - { - audblk->deltnseg[i] = bitstream_get(3); - for(j = 0; j < audblk->deltnseg[i] + 1; j++) - { - audblk->deltoffst[i][j] = bitstream_get(5); - audblk->deltlen[i][j] = bitstream_get(4); - audblk->deltba[i][j] = bitstream_get(3); - } - } - } - } - - /* Check to see if there's any dummy info to get */ - if((audblk->skiple = bitstream_get(1))) - { - uint_16 skip_data; - - audblk->skipl = bitstream_get(9); - //XXX remove - //fprintf(stderr,"(parse) skipping %d bytes\n",audblk->skipl); - - for(i = 0; i < audblk->skipl ; i++) - { - skip_data = bitstream_get(8); - //XXX remove - //fprintf(stderr,"skipped data %2x\n",skip_data); - //if(skip_data != 0) - //{ - //dprintf("(parse) Invalid skipped data %2x\n",skip_data); - //exit(1); - //} - } - } - - if (!(ac3_config.flags & AC3_QUIET)) - stats_print_audblk(bsi,audblk); -} - -void -parse_auxdata(syncinfo_t *syncinfo) -{ - //FIXME keep this now that we don't really need it? -#if 0 - int i; - int skip_length; - uint_16 crc; - uint_16 auxdatae; - - skip_length = (syncinfo->frame_size * 16) - bitstream_get_total_bits() - 17 - 1; - - //XXX remove - //dprintf("(auxdata) skipping %d auxbits\n",skip_length); - - for(i=0; i < skip_length; i++) - //printf("Skipped bit %i\n",(uint_16)bitstream_get(1)); - bitstream_get(1); - - //get the auxdata exists bit - auxdatae = bitstream_get(1); - - //XXX remove - //dprintf("auxdatae = %i\n",auxdatae); - - //Skip the CRC reserved bit - bitstream_get(1); - - //Get the crc - crc = bitstream_get(16); -#endif -} - - diff --git a/ac3dec/libac3/parse.h b/ac3dec/libac3/parse.h deleted file mode 100644 index 187c714..0000000 --- a/ac3dec/libac3/parse.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * parse.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -void parse_syncinfo_data(syncinfo_t *syncinfo, uint_8 *data); -int parse_syncinfo(syncinfo_t *syncinfo); -void parse_audblk(bsi_t *bsi,audblk_t *audblk); -void parse_bsi(bsi_t *bsi); -void parse_auxdata(syncinfo_t *syncinfo); - diff --git a/ac3dec/libac3/rematrix.c b/ac3dec/libac3/rematrix.c deleted file mode 100644 index caa7094..0000000 --- a/ac3dec/libac3/rematrix.c +++ /dev/null @@ -1,83 +0,0 @@ -/* - * rematrix.c - * - * Copyright (C) Aaron Holtzman - July 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - */ - -#include -#include -#include "ac3.h" -#include "ac3_internal.h" - - -#include "decode.h" -#include "rematrix.h" - -struct rematrix_band_s -{ - uint_32 start; - uint_32 end; -}; - -struct rematrix_band_s rematrix_band[] = { {13,24}, {25,36}, {37 ,60}, {61,252}}; - -static inline uint_32 min(uint_32 a,uint_32 b); - -static inline uint_32 -min(uint_32 a,uint_32 b) -{ - return (a < b ? a : b); -} - -/* This routine simply does stereo rematixing for the 2 channel - * stereo mode */ -void rematrix(audblk_t *audblk, stream_samples_t samples) -{ - uint_32 num_bands; - uint_32 start; - uint_32 end; - uint_32 i,j; - float left,right; - - if(!audblk->cplinu || audblk->cplbegf > 2) - num_bands = 4; - else if (audblk->cplbegf > 0) - num_bands = 3; - else - num_bands = 2; - - for(i=0;i < num_bands; i++) - { - if(!audblk->rematflg[i]) - continue; - - start = rematrix_band[i].start; - end = min(rematrix_band[i].end ,12 * audblk->cplbegf + 36); - - for(j=start;j < end; j++) - { - left = samples[0][j] + samples[1][j]; - right = samples[0][j] - samples[1][j]; - samples[0][j] = left; - samples[1][j] = right; - } - } -} diff --git a/ac3dec/libac3/rematrix.h b/ac3dec/libac3/rematrix.h deleted file mode 100644 index 0be6528..0000000 --- a/ac3dec/libac3/rematrix.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * rematrix.h - * - * Copyright (C) Aaron Holtzman - July 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - */ - -void rematrix(audblk_t *audblk, stream_samples_t samples); diff --git a/ac3dec/libac3/sanity_check.c b/ac3dec/libac3/sanity_check.c deleted file mode 100644 index 461f20e..0000000 --- a/ac3dec/libac3/sanity_check.c +++ /dev/null @@ -1,131 +0,0 @@ -/* - * sanity_check.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include -#include -#include "ac3.h" -#include "ac3_internal.h" -#include "sanity_check.h" - - -void -sanity_check_init(syncinfo_t *syncinfo, bsi_t *bsi, audblk_t *audblk) -{ - syncinfo->magic = AC3_MAGIC_NUMBER; - bsi->magic = AC3_MAGIC_NUMBER; - audblk->magic1 = AC3_MAGIC_NUMBER; - audblk->magic2 = AC3_MAGIC_NUMBER; - audblk->magic3 = AC3_MAGIC_NUMBER; -} - -void -sanity_check(syncinfo_t *syncinfo, bsi_t *bsi, audblk_t *audblk) -{ - int i; - - if(syncinfo->magic != AC3_MAGIC_NUMBER) - { - fprintf(stderr,"\n** Sanity check failed -- syncinfo magic number **"); - error_flag = 1; - } - - if(bsi->magic != AC3_MAGIC_NUMBER) - { - fprintf(stderr,"\n** Sanity check failed -- bsi magic number **"); - error_flag = 1; - } - - if(audblk->magic1 != AC3_MAGIC_NUMBER) - { - fprintf(stderr,"\n** Sanity check failed -- audblk magic number 1 **"); - error_flag = 1; - } - - if(audblk->magic2 != AC3_MAGIC_NUMBER) - { - fprintf(stderr,"\n** Sanity check failed -- audblk magic number 2 **"); - error_flag = 1; - } - - if(audblk->magic3 != AC3_MAGIC_NUMBER) - { - fprintf(stderr,"\n** Sanity check failed -- audblk magic number 3 **"); - error_flag = 1; - } - - for(i = 0;i < 5 ; i++) - { - if (audblk->fbw_exp[i][255] !=0 || audblk->fbw_exp[i][254] !=0 || - audblk->fbw_exp[i][253] !=0) - { - fprintf(stderr,"\n** Sanity check failed -- fbw_exp out of bounds **"); - error_flag = 1; - } - - if (audblk->fbw_bap[i][255] !=0 || audblk->fbw_bap[i][254] !=0 || - audblk->fbw_bap[i][253] !=0) - { - fprintf(stderr,"\n** Sanity check failed -- fbw_bap out of bounds **"); - error_flag = 1; - } - - } - - if (audblk->cpl_exp[255] !=0 || audblk->cpl_exp[254] !=0 || - audblk->cpl_exp[253] !=0) - { - fprintf(stderr,"\n** Sanity check failed -- cpl_exp out of bounds **"); - error_flag = 1; - } - - if (audblk->cpl_bap[255] !=0 || audblk->cpl_bap[254] !=0 || - audblk->cpl_bap[253] !=0) - { - fprintf(stderr,"\n** Sanity check failed -- cpl_bap out of bounds **"); - error_flag = 1; - } - - if (audblk->cplmant[255] !=0 || audblk->cplmant[254] !=0 || - audblk->cplmant[253] !=0) - { - fprintf(stderr,"\n** Sanity check failed -- cpl_mant out of bounds **"); - error_flag = 1; - } - - if ((audblk->cplinu == 1) && (audblk->cplbegf > (audblk->cplendf+2))) - { - fprintf(stderr,"\n** Sanity check failed -- cpl params inconsistent **"); - error_flag = 1; - } - - for(i=0; i < bsi->nfchans; i++) - { - if((audblk->chincpl[i] == 0) && (audblk->chbwcod[i] > 60)) - { - fprintf(stderr,"\n** Sanity check failed -- chbwcod too big **"); - error_flag = 1; - } - } - - return; -} diff --git a/ac3dec/libac3/sanity_check.h b/ac3dec/libac3/sanity_check.h deleted file mode 100644 index c4ca63a..0000000 --- a/ac3dec/libac3/sanity_check.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * sanity_check.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#define AC3_MAGIC_NUMBER 0xdeadbeef - -void sanity_check_init(syncinfo_t *syncinfo, bsi_t *bsi, audblk_t *audblk); -void sanity_check(syncinfo_t *syncinfo, bsi_t *bsi, audblk_t *audblk); diff --git a/ac3dec/libac3/stats.c b/ac3dec/libac3/stats.c deleted file mode 100644 index d8a8417..0000000 --- a/ac3dec/libac3/stats.c +++ /dev/null @@ -1,178 +0,0 @@ -/* - * stats.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include -#include -#include "config.h" -#include "ac3.h" -#include "ac3_internal.h" - - -#include "decode.h" -#include "stats.h" -#include "debug.h" - - -static const char *service_ids[8] = -{ - "CM","ME","VI","HI", - "D", "C","E", "VO" -}; - -struct mixlev_s -{ - float clev; - char *desc; -}; - -static const struct mixlev_s cmixlev_tbl[4] = -{ - {0.707, "(-3.0 dB)"}, {0.595, "(-4.5 dB)"}, - {0.500, "(-6.0 dB)"}, {1.0, "Invalid"} -}; - -static const struct mixlev_s smixlev_tbl[4] = -{ - {0.707, "(-3.0 dB)"}, {0.500, "(-6.0 dB)"}, - { 0.0, "off "}, { 1.0, "Invalid"} -}; - -static const char *language[128] = -{ - "unknown", "Albanian", "Breton", "Catalan", "Croatian", "Welsh", "Czech", "Danish", - "German", "English", "Spanish", "Esperanto", "Estonian", "Basque", "Faroese", "French", - "Frisian", "Irish", "Gaelic", "Galician", "Icelandic", "Italian", "Lappish", "Latin", - "Latvian", "Luxembourgian", "Lithuanian", "Hungarian", "Maltese", "Dutch", "Norwegian", "Occitan", - "Polish", "Portugese", "Romanian", "Romansh", "Serbian", "Slovak", "Slovene", "Finnish", - "Swedish", "Turkish", "Flemish", "Walloon", "0x2c", "0x2d", "0x2e", "0x2f", - "0x30", "0x31", "0x32", "0x33", "0x34", "0x35", "0x36", "0x37", - "0x38", "0x39", "0x3a", "0x3b", "0x3c", "0x3d", "0x3e", "0x3f", - "background", "0x41", "0x42", "0x43", "0x44", "Zulu", "Vietnamese", "Uzbek", - "Urdu", "Ukrainian", "Thai", "Telugu", "Tatar", "Tamil", "Tadzhik", "Swahili", - "Sranan Tongo", "Somali", "Sinhalese", "Shona", "Serbo-Croat", "Ruthenian", "Russian", "Quechua", - "Pustu", "Punjabi", "Persian", "Papamiento", "Oriya", "Nepali", "Ndebele", "Marathi", - "Moldavian", "Malaysian", "Malagasay", "Macedonian", "Laotian", "Korean", "Khmer", "Kazakh", - "Kannada", "Japanese", "Indonesian", "Hindi", "Hebrew", "Hausa", "Gurani", "Gujurati", - "Greek", "Georgian", "Fulani", "Dari", "Churash", "Chinese", "Burmese", "Bulgarian", - "Bengali", "Belorussian", "Bambora", "Azerbijani", "Assamese", "Armenian", "Arabic", "Amharic" -}; - -void stats_print_banner(syncinfo_t *syncinfo,bsi_t *bsi) -{ - // fprintf(stdout,PACKAGE"-"VERSION" (C) 2000 Aaron Holtzman (aholtzma@ess.engr.uvic.ca)\n"); - - fprintf(stdout,"%d.%d Mode ",bsi->nfchans,bsi->lfeon); - fprintf(stdout,"%2.1f KHz",syncinfo->sampling_rate * 1e-3); - fprintf(stdout,"%4d kbps ",syncinfo->bit_rate); - if (bsi->langcode && (bsi->langcod < 128)) - fprintf(stdout,"%s ", language[bsi->langcod]); - - switch(bsi->bsmod) - { - case 0: - fprintf(stdout,"Complete Main Audio Service"); - break; - case 1: - fprintf(stdout,"Music and Effects Audio Service"); - case 2: - fprintf(stdout,"Visually Impaired Audio Service"); - break; - case 3: - fprintf(stdout,"Hearing Impaired Audio Service"); - break; - case 4: - fprintf(stdout,"Dialogue Audio Service"); - break; - case 5: - fprintf(stdout,"Commentary Audio Service"); - break; - case 6: - fprintf(stdout,"Emergency Audio Service"); - break; - case 7: - fprintf(stdout,"Voice Over Audio Service"); - break; - } - fprintf(stdout,"\n"); -} - -void stats_print_syncinfo(syncinfo_t *syncinfo) -{ - dprintf("(syncinfo) "); - - switch (syncinfo->fscod) - { - case 2: - dprintf("32 KHz "); - break; - case 1: - dprintf("44.1 KHz "); - break; - case 0: - dprintf("48 KHz "); - break; - default: - dprintf("Invalid sampling rate "); - break; - } - - dprintf("%4d kbps %4d words per frame\n",syncinfo->bit_rate, - syncinfo->frame_size); - -} - -void stats_print_bsi(bsi_t *bsi) -{ - dprintf("(bsi) "); - dprintf("%s",service_ids[bsi->bsmod]); - dprintf(" %d.%d Mode ",bsi->nfchans,bsi->lfeon); - if ((bsi->acmod & 0x1) && (bsi->acmod != 0x1)) - dprintf(" Centre Mix Level %s ",cmixlev_tbl[bsi->cmixlev].desc); - if (bsi->acmod & 0x4) - dprintf(" Sur Mix Level %s ",smixlev_tbl[bsi->cmixlev].desc); - dprintf("\n"); - -} - -char *exp_strat_tbl[4] = {"R ","D15 ","D25 ","D45 "}; - -void stats_print_audblk(bsi_t *bsi,audblk_t *audblk) -{ - uint_32 i; - - dprintf("(audblk) "); - dprintf("%s ",audblk->cplinu ? "cpl on " : "cpl off"); - dprintf("%s ",audblk->baie? "bai " : " "); - dprintf("%s ",audblk->snroffste? "snroffst " : " "); - dprintf("%s ",audblk->deltbaie? "deltba " : " "); - dprintf("%s ",audblk->phsflginu? "phsflg " : " "); - dprintf("(%s %s %s %s %s) ",exp_strat_tbl[audblk->chexpstr[0]], - exp_strat_tbl[audblk->chexpstr[1]],exp_strat_tbl[audblk->chexpstr[2]], - exp_strat_tbl[audblk->chexpstr[3]],exp_strat_tbl[audblk->chexpstr[4]]); - dprintf("["); - for(i=0;infchans;i++) - dprintf("%1d",audblk->blksw[i]); - dprintf("]"); - - dprintf("\n"); -} diff --git a/ac3dec/libac3/stats.h b/ac3dec/libac3/stats.h deleted file mode 100644 index 8a9ecb6..0000000 --- a/ac3dec/libac3/stats.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * stats.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -void stats_print_syncinfo(syncinfo_t *syncinfo); -void stats_print_bsi(bsi_t *bsi); -void stats_print_audblk(bsi_t *bsi,audblk_t *audblk); -void stats_print_banner(syncinfo_t *syncinfo,bsi_t *bsi); diff --git a/ac3dec/output.c b/ac3dec/output.c deleted file mode 100644 index 5f707f8..0000000 --- a/ac3dec/output.c +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Copyright (c) by Jaroslav Kysela - * - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#include -#include -#include -#include -#include -#include -#include - -typedef signed short sint_16; -typedef unsigned int uint_32; - -#include "output.h" - -static output_t out_config; -static snd_pcm_t *pcm; - -/* - * open the audio device for writing to - */ -int output_open(output_t *output) -{ - const char *pcm_name = output->pcm_name; - char devstr[128]; - const char *basedev; - snd_pcm_hw_params_t *params; - unsigned int rate, buffer_time, period_time, tmp; - snd_pcm_format_t format = output->bits == 16 ? SND_PCM_FORMAT_S16 : SND_PCM_FORMAT_U8; - int err, step; - snd_pcm_hw_params_alloca(¶ms); - - out_config = *output; - - /* - * Open the device driver - */ - if (pcm_name == NULL) { - switch (output->channels) { - case 1: - case 2: - if (output->spdif != SPDIF_NONE) { - unsigned char s[4]; - if (output->spdif == SPDIF_PRO) { - s[0] = (IEC958_AES0_PROFESSIONAL | - IEC958_AES0_NONAUDIO | - IEC958_AES0_PRO_EMPHASIS_NONE | - IEC958_AES0_PRO_FS_48000); - s[1] = (IEC958_AES1_PRO_MODE_NOTID | - IEC958_AES1_PRO_USERBITS_NOTID); - s[2] = IEC958_AES2_PRO_WORDLEN_NOTID; - s[3] = 0; - } else { - s[0] = IEC958_AES0_CON_EMPHASIS_NONE; - if (output->spdif == SPDIF_CON) - s[0] |= IEC958_AES0_NONAUDIO; - s[1] = (IEC958_AES1_CON_ORIGINAL | - IEC958_AES1_CON_PCM_CODER); - s[2] = 0; - s[3] = IEC958_AES3_CON_FS_48000; - } - if (output->hdmi) - basedev = "hdmi"; - else - basedev = "iec958"; - sprintf(devstr, "plug:%s:{" - "AES0 0x%x AES1 0x%x " - "AES2 0x%x AES3 0x%x", - basedev, - s[0], s[1], s[2], s[3]); - if (out_config.card) - sprintf(devstr + strlen(devstr), - " CARD %s", out_config.card); - strcat(devstr, "}"); - format = SND_PCM_FORMAT_S16_LE; - } else { - if (out_config.card) - sprintf(devstr, "plughw:%s", out_config.card); - else - sprintf(devstr, "default"); - } - break; - case 4: - strcpy(devstr, "plug:surround40"); - if (out_config.card) - sprintf(devstr + strlen(devstr), ":{CARD %s}", out_config.card); - break; - case 6: - strcpy(devstr, "plug:surround51"); - if (out_config.card) - sprintf(devstr + strlen(devstr), ":{CARD %s}", out_config.card); - break; - default: - fprintf(stderr, "%d channels are not supported\n", output->channels); - return -EINVAL; - } - pcm_name = devstr; - } - if (!output->quiet) - fprintf(stdout, "Using PCM device '%s'\n", pcm_name); - if ((err = snd_pcm_open(&pcm, pcm_name, SND_PCM_STREAM_PLAYBACK, 0)) < 0) { - fprintf(stderr, "snd_pcm_open: %s\n", snd_strerror(err)); - return err; - } - err = snd_pcm_hw_params_any(pcm, params); - if (err < 0) { - fprintf(stderr, "Broken configuration for this PCM: no configurations available"); - goto __close; - } - /* set interleaved access */ - err = snd_pcm_hw_params_set_access(pcm, params, - SND_PCM_ACCESS_RW_INTERLEAVED); - if (err < 0) { - fprintf(stderr, "Access type not available\n"); - goto __close; - } - err = snd_pcm_hw_params_set_format(pcm, params, format); - if (err < 0) { - fprintf(stderr, "Sample format non available\n"); - goto __close; - } - err = snd_pcm_hw_params_set_channels(pcm, params, output->channels); - if (err < 0) { - fprintf(stderr, "Channels count non available\n"); - goto __close; - } - rate = output->rate; - err = snd_pcm_hw_params_set_rate_near(pcm, params, &rate, 0); - if (err < 0) { - fprintf(stderr, "Rate not available\n"); - goto __close; - } - buffer_time = 500000; - err = snd_pcm_hw_params_set_buffer_time_near(pcm, params, &buffer_time, 0); - if (err < 0) { - fprintf(stderr, "Buffer time not available\n"); - goto __close; - } - step = 2; - period_time = 10000 * 2; - do { - period_time /= 2; - tmp = period_time; - err = snd_pcm_hw_params_set_period_time_near(pcm, params, &tmp, 0); - if (err < 0) { - fprintf(stderr, "Period time not available\n"); - goto __close; - } - if (tmp == period_time) { - period_time /= 3; - tmp = period_time; - err = snd_pcm_hw_params_set_period_time_near(pcm, params, &tmp, 0); - if (tmp == period_time) - period_time = 10000 * 2; - } - } while (buffer_time == period_time && period_time > 10000); - if (buffer_time == period_time) { - fprintf(stderr, "Buffer time and period time match, could not use\n"); - goto __close; - } - if ((err = snd_pcm_hw_params(pcm, params)) < 0) { - fprintf(stderr, "PCM hw_params failed: %s\n", snd_strerror(err)); - goto __close; - } - - return 0; - - __close: - snd_pcm_close(pcm); - pcm = NULL; - return err; -} - -/* - * play the sample to the already opened file descriptor - */ -int output_play(sint_16* output_samples, uint_32 num_frames) -{ - snd_pcm_sframes_t res = 0; - - do { - if (res == -EPIPE) /* underrun */ - res = snd_pcm_prepare(pcm); - else if (res == -ESTRPIPE) { /* suspend */ - while ((res = snd_pcm_resume(pcm)) == -EAGAIN) - sleep(1); - if (res < 0) - res = snd_pcm_prepare(pcm); - } - res = res < 0 ? res : snd_pcm_writei(pcm, (void *)output_samples, num_frames); - if (res > 0) { - output_samples += out_config.channels * res; - num_frames -= res; - } - } while (res == -EPIPE || num_frames > 0); - if (res < 0) - fprintf(stderr, "writei returned error: %s\n", snd_strerror(res)); - return res < 0 ? (int)res : 0; -} - - -void -output_close(void) -{ - snd_pcm_close(pcm); -} diff --git a/ac3dec/output.h b/ac3dec/output.h deleted file mode 100644 index 95e535f..0000000 --- a/ac3dec/output.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * - * output.h - * - * Based on original code by Angus Mackay (amackay@gus.ml.org) - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -typedef struct { - const char *pcm_name; - char *card; - int bits; - int rate; - int channels; - unsigned int quiet: 1; - unsigned int hdmi: 1; - enum {SPDIF_NONE = 0, SPDIF_CON, SPDIF_PRO, SPDIF_PCM} spdif; -} output_t; - -int output_open(output_t *output); -int output_play(sint_16* output_samples, uint_32 num_bytes); -void output_close(void); diff --git a/ac3dec/plot_spectrum.m b/ac3dec/plot_spectrum.m deleted file mode 100644 index 43f4806..0000000 --- a/ac3dec/plot_spectrum.m +++ /dev/null @@ -1,17 +0,0 @@ - -window_size = 2048; -f = 0:48000/window_size:48000 * (1 - 1/window_size); -w = transpose(hamming(1536)); -n = size(foo,1); - -spectrum = zeros(1,window_size); - -for i = [1:n] - data = w .* foo(i,:); - spectrum = spectrum + abs(fft(data,window_size)); -end - -plot(f,10*log10(spectrum/max(spectrum))); -grid; -axis([0 24000 -40 0]); - diff --git a/ac3dec/test/Makefile.am b/ac3dec/test/Makefile.am deleted file mode 100644 index ffed19e..0000000 --- a/ac3dec/test/Makefile.am +++ /dev/null @@ -1,37 +0,0 @@ -INCLUDES = -I../libac3 -noinst_PROGRAMS = imdct_test dither_test -#noinst_PROGRAMS = bitstream_test imdct_test imdct_timing uncouple_timing\ - #crc_timing -noinst_HEADERS = timing.h - -#bitstream_test_SOURCES = bitstream_test.c -#bitstream_test_LDADD = ../bitstream.o ../crc.o -# -dither_test_SOURCES = dither_test.c -dither_test_LDADD = ../libac3/dither.o - -imdct_test_SOURCES = imdct_test.c -imdct_test_LDADD = ../libac3/imdct.o -lm -# -#imdct_timing_SOURCES = imdct_timing.c timing.c -#imdct_timing_LDADD = ../imdct.o -lm -# -#uncouple_timing_SOURCES = uncouple_timing.c timing.c -#uncouple_timing_LDADD = ../uncouple.o ../dither.o -lm -# -#crc_timing_SOURCES = crc_timing.c timing.c -#crc_timing_LDADD = ../crc.o -lm - -check: -# rm -f bitstream_test.out -# ./bitstream_test > bitstream_test.out -# diff bitstream_test.out bitstream_test.out.ref -# rm -f imdct_test.out -# ./imdct_test > imdct_test.out -# diff imdct_test.out imdct_test.out.ref - rm -f dither_test.out - ./dither_test > dither_test.out - diff dither_test.out dither_test.out.ref - -clean: - rm -f *.out diff --git a/ac3dec/test/dither_test.c b/ac3dec/test/dither_test.c deleted file mode 100644 index e45dc71..0000000 --- a/ac3dec/test/dither_test.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * dither_test.c - * - * Aaron Holtzman - May 1999 - * - */ - -#include -#include -#include "ac3.h" -#include "ac3_internal.h" -#include "dither.h" - -#include -#include - -int main(void) -{ - int i,j,foo; - struct timeval start,end; - - /* - for(i=0;i < 65538 ;i++) - //printf("%04x\n",dither_gen()); - printf("%f\n",((sint_16)dither_gen())/ 32768.0); - printf("\n"); - */ - - - - for(j=0;j < 10 ;j++) - { - gettimeofday(&start,0); - for(i=0;i < 10000 ;i++) - { - foo = dither_gen(); - } - gettimeofday(&end,0); - printf("%f us\n",((end.tv_sec - start.tv_sec) * 1000000 + - (end.tv_usec - start.tv_usec))/10000.0); - } - -} diff --git a/ac3dec/test/imdct_test.c b/ac3dec/test/imdct_test.c deleted file mode 100644 index 12572d1..0000000 --- a/ac3dec/test/imdct_test.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * imdct_test.c - * - * Aaron Holtzman - May 1999 - * - */ - -#include -#include -#include "ac3.h" -#include "ac3_internal.h" -#include "imdct.h" - -static stream_samples_t samples; -static bsi_t bsi; -static audblk_t audblk; - -int main(void) -{ - int i; - - samples[0][20] = 0.4; - samples[0][40] = 0.4; - samples[0][30] = 1.0; - - - imdct_init(); - bsi.nfchans = 1; - - imdct(&bsi,&audblk,samples); - - - for(i=0;i<256;i++) - printf("%1.8f\n",samples[0][i]); - - return 0; - -} diff --git a/ac3dec/test/timing.h b/ac3dec/test/timing.h deleted file mode 100644 index 9d8da62..0000000 --- a/ac3dec/test/timing.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - * timing.h - * - * Aaron Holtzman - May 1999 - * - */ - -//uint_64 get_time(void); -uint_64 timing_init(void); - -void timing_test_2(void (*func)(void*,void*),void *arg_1,void *arg_2,char name[]); -void timing_test_3(void (*func)(void*,void*,void*),void *arg_1,void *arg_2,void *arg_3,char name[]); -double timing_once_3(void (*func)(void*,void*,void*),void *arg_1,void *arg_2,void *arg_3); - diff --git a/ac3dec/tools/Makefile.am b/ac3dec/tools/Makefile.am deleted file mode 100644 index 9dc32b4..0000000 --- a/ac3dec/tools/Makefile.am +++ /dev/null @@ -1,12 +0,0 @@ -# # Process this file with automake to produce Makefile.in. -AUTOMAKE_OPTIONS = 1.3 foreign - -CFLAGS = -Wall -O3 -g - -bin_PROGRAMS = extract_ac3 - - -extract_ac3_SOURCES = extract_ac3.c -#verify is broken right now -#verify_ac3_SOURCES = verify_ac3.c -#verify_ac3_LDADD = ../parse.o ../bitstream.o ../crc.o ../debug.o ../stats.o diff --git a/ac3dec/tools/extract_ac3.c b/ac3dec/tools/extract_ac3.c deleted file mode 100644 index e14cf5c..0000000 --- a/ac3dec/tools/extract_ac3.c +++ /dev/null @@ -1,314 +0,0 @@ -/* - * extract_ac3.c - * - * Copyright (C) Aaron Holtzman - June 1999 - * - * Extracts an AC-3 audio stream from an MPEG-2 system stream - * and writes it to stdout - * - * Ideas and bitstream syntax info borrowed from code written - * by Nathan Laredo - * - * Multiple track support by Yuqing Deng - * - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -/* Audio track to play */ -static unsigned char track_code = 0x80; -static unsigned char track_table[8] = -{ - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87 -}; - -#define BUFSIZE 512 /* needs to be as big as biggest header */ -static int vobf; -static unsigned char buf[BUFSIZE]; -static unsigned char *cur_pos; -static unsigned char *end_pos; - -void file_init(char file_name[]) -{ - if(file_name[0] == '-' && file_name[1] == '\0') - { - vobf = STDIN_FILENO; - } - else if ((vobf = open(file_name, O_RDONLY)) < 0) - { - fprintf(stderr,"File not found\n"); - exit(1); - } - cur_pos = buf; - end_pos = buf; -} - -inline void increment_position(long x) -{ - if(cur_pos + x <= end_pos) - { - cur_pos += x; - if(cur_pos == end_pos) - { - cur_pos = buf; - end_pos = buf; - } - } - else - { - long size = 0; - x -= (long)(end_pos - cur_pos); -#ifdef SEEK_PIPES - if(lseek(vobf, x, SEEK_CUR) < 0) - { - fprintf(stderr, "Error: unexpected end of stream\n"); - exit(1); - } -#else - while(x) - { - size = (x > BUFSIZE) ? BUFSIZE : x; - if(read(vobf, buf, size) < size) - { - fprintf(stderr, "Error: unexpected end of stream\n"); - exit(1); - } - x-=size; - } -#endif - cur_pos = buf; - end_pos = buf; - } -} - -inline static void load_next_bytes(long count) -{ - if(cur_pos + count <= end_pos) - return; - if(cur_pos + count > buf + BUFSIZE - 1 ) - { - printf ("No buffer space to read %ld bytes\n", count); - exit(1); - } - - count -= (long)(end_pos - cur_pos); - if(read(vobf, end_pos, count) < count) - { - fprintf(stderr, "Error: unexpected end of stream\n"); - exit(1); - } - end_pos += count; -} - -inline int next_24_bits(long x) -{ - load_next_bytes(3); - if (cur_pos[0] != ((x >> 16) & 0xff)) - return 0; - if (cur_pos[1] != ((x >> 8) & 0xff)) - return 0; - if (cur_pos[2] != ((x ) & 0xff)) - return 0; - - return 1; -} - -inline int next_32_bits(long x) -{ - load_next_bytes(4); - if (cur_pos[0] != ((x >> 24) & 0xff)) - return 0; - if (cur_pos[1] != ((x >> 16) & 0xff)) - return 0; - if (cur_pos[2] != ((x >> 8) & 0xff)) - return 0; - if (cur_pos[3] != ((x ) & 0xff)) - return 0; - - return 1; -} - -void read_write_next_bytes(long count, int outfd) -{ - long size; - size = (long)(end_pos - cur_pos); - if(size > count) - { - write(outfd, cur_pos, count); - cur_pos +=count; - if(cur_pos == end_pos) - { - cur_pos = buf; - end_pos = buf; - } - return; - } - else if(size > 0) - { - write(outfd, cur_pos, size); - } - - while(count) - { - size = (count > BUFSIZE) ? BUFSIZE : count; - if(read(vobf, buf, size) < size || - write(outfd, buf, size) < size) - { - fprintf(stderr, "Error: unexpected end of stream\n"); - } - count -= size; - } - cur_pos = buf; - end_pos = buf; -} - -void parse_pes(void) -{ - unsigned long data_length; - unsigned long header_length; - - load_next_bytes(9); - - //The header length is the PES_header_data_length byte plus 6 for the packet - //start code and packet size, 3 for the PES_header_data_length and two - //misc bytes, and finally 4 bytes for the mystery AC3 packet tag - header_length = cur_pos[8] + 6 + 3 + 4 ; - data_length =(cur_pos[4]<<8) + cur_pos[5]; - - - //If we have AC-3 audio then output it - if(cur_pos[3] == 0xbd) - { - load_next_bytes(header_length); -#if 0 - //Debugging printfs - fprintf(stderr,"start of pes curpos[] = %02x%02x%02x%02x\n", - cur_pos[0],cur_pos[1],cur_pos[2],cur_pos[3]); - fprintf(stderr,"header_length = %d data_length = %x\n", - header_length, data_length); - fprintf(stderr,"extra crap 0x%02x%02x%02x%02x data size 0x%0lx\n",cur_pos[header_length-4], - cur_pos[header_length-3],cur_pos[header_length-2],cur_pos[header_length-1],data_length); -#endif - - //Only extract the track we want - if((cur_pos[header_length-4] == track_code )) - { - increment_position(header_length); - read_write_next_bytes(data_length - header_length + 6, STDOUT_FILENO); - - } - else - { - increment_position(data_length + 6); - } - } - else - { - //The packet size is data_length plus 6 bytes to account for the - //packet start code and the data_length itself. - increment_position(data_length + 6); - } -} - -void parse_pack(void) -{ - unsigned long skip_length; - - // Deal with the pack header - // The first 13 bytes are junk. The fourteenth byte - // contains the number of stuff bytes - load_next_bytes(14); - skip_length = cur_pos[13] & 0x7; - increment_position(14 + skip_length); - - // Deal with the system header if it exists - if(next_32_bits(0x000001bb)) - { - // Bytes 5 and 6 contain the length of the header minus 6 - load_next_bytes(6); - skip_length = (cur_pos[4] << 8) + cur_pos[5]; - increment_position(6 + skip_length); - } - - while(next_24_bits(0x000001) && !next_32_bits(0x000001ba)) - { - parse_pes(); - } -} - -int main(int argc, char *argv[]) -{ - int track = 0; - - if (argc < 2) { - fprintf(stderr, "usage: %s mpeg_stream [track number]\n", argv[0]); - exit(1); - } - - if (argc == 3) - { - track = strtol(argv[2], NULL, 0); - fprintf(stderr,"Extracting track %d\n",track); - } - - if (track < 0 || track > 7) - { - fprintf(stderr, "Invalid track number: %d\n", track); - exit(1); - } - - track_code = track_table[track]; - - - - file_init(argv[1]); - - if(!next_32_bits(0x000001ba)) - { - fprintf(stderr, "Non-program streams not handled - exiting\n\n"); - exit(1); - } - - do - { - parse_pack(); - } - while(next_32_bits(0x000001ba)); - - fprintf(stderr,"curpos[] = %x%x%x%x\n",cur_pos[0],cur_pos[1],cur_pos[2],cur_pos[3]); - - if(!next_32_bits(0x000001b9)) - { - fprintf(stderr, "Error: expected end of stream code\n"); - exit(1); - } - - if(vobf != STDIN_FILENO) close(vobf); - return 0; -} From 4bf54c5003af304e9da8ef40475a481086d80d85 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 11 Apr 2013 13:43:07 +0200 Subject: [PATCH 084/166] Release v1.0.27 Signed-off-by: Jaroslav Kysela --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index cd2af64..2457a1c 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION = 1.0.26.1 +VERSION = 1.0.27 TOP = . SUBDIRS = as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ From 2fcce932b6393aadca8a1d1a97030b1161226303 Mon Sep 17 00:00:00 2001 From: Elimar Riesebieter Date: Wed, 15 May 2013 19:19:05 +0200 Subject: [PATCH 085/166] Add a distclean target to example Makefile. Signed-off-by: Jordi Mallach Signed-off-by: Takashi Iwai --- as10k1/examples/Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/as10k1/examples/Makefile b/as10k1/examples/Makefile index 1a36345..6ab8200 100644 --- a/as10k1/examples/Makefile +++ b/as10k1/examples/Makefile @@ -12,6 +12,8 @@ dsp: $(TARGETS) clean: rm -f *~ *.emu10k1 +distclean: clean + install: distdir: From c1fdd7594b1a4bdcba396c0e34568cd918beeb70 Mon Sep 17 00:00:00 2001 From: Jordi Mallach Date: Wed, 15 May 2013 19:19:08 +0200 Subject: [PATCH 086/166] =?UTF-8?q?Fix=20spelling=20of=20=E2=80=9Csuccessf?= =?UTF-8?q?ully=E2=80=9D.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [additionally fixed a typo of "Crative" -- tiwai] Signed-off-by: Jordi Mallach Signed-off-by: Takashi Iwai --- hda-verb/hda-verb.c | 3 --- sb16_csp/cspctl.1 | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/hda-verb/hda-verb.c b/hda-verb/hda-verb.c index bd746ad..95a935a 100644 --- a/hda-verb/hda-verb.c +++ b/hda-verb/hda-verb.c @@ -13,9 +13,6 @@ #include #include #include -#ifndef __PPC__ -#include -#endif #include #include diff --git a/sb16_csp/cspctl.1 b/sb16_csp/cspctl.1 index 71c4b52..10249f8 100644 --- a/sb16_csp/cspctl.1 +++ b/sb16_csp/cspctl.1 @@ -9,11 +9,11 @@ command [\-options] .SH DESCRIPTION .B cspctl -is a simple CSP microcode loader for Crative Sound Blaster 16ASP and some Sound Blaster AWE32 sound cards with Creative Signal Processor (CSP) chip (CT1748A) installed. +is a simple CSP microcode loader for Creative Sound Blaster 16ASP and some Sound Blaster AWE32 sound cards with Creative Signal Processor (CSP) chip (CT1748A) installed. .B cspctl can also be used as a post-install function to .I snd\-sb16\-csp -module to load default codec at module installation. If CSP chip is succesfully detected and initialized, it will be installed as a hardware dependant device +module to load default codec at module installation. If CSP chip is successfully detected and initialized, it will be installed as a hardware dependent device .I hwC0D2 into /dev/snd directory. Currently, following codecs can be loaded to CSP device: .IP "" 4 From a17282503f4ceb62f66eb5a28726fd096af0a70b Mon Sep 17 00:00:00 2001 From: Elimar Riesebieter Date: Wed, 15 May 2013 19:19:07 +0200 Subject: [PATCH 087/166] Fix bashisms. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The “function†builtin is a bashism that can be simply omitted with no behaviour change, if parentheses are supplied. Signed-off-by: Jordi Mallach Signed-off-by: Takashi Iwai --- ld10k1/setup/init_live.in | 64 +++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/ld10k1/setup/init_live.in b/ld10k1/setup/init_live.in index 70d30c8..5e6580f 100644 --- a/ld10k1/setup/init_live.in +++ b/ld10k1/setup/init_live.in @@ -46,7 +46,7 @@ std_playback=playback std_capture=capture #std_capture=capture_noswitch -function log +log { local level=$1 @@ -57,7 +57,7 @@ function log fi } -function runlo10k1 +runlo10k1 { log 2 $LO10K1 "$@" @@ -71,7 +71,7 @@ function runlo10k1 fi } -function rename +rename { port=$1 name=$2 @@ -81,7 +81,7 @@ function rename runlo10k1 --renam "$port=$name" } -function connect +connect { from=$1 op=$2 @@ -92,7 +92,7 @@ function connect runlo10k1 --conadd "$from$op$to" } -function copy +copy { local name=$1 local port=$2 @@ -105,7 +105,7 @@ function copy connect "PIN($name Copy)" '=' "$port" } -function volume +volume { local name=$1 local port=$2 @@ -120,7 +120,7 @@ function volume connect "PIN($name Volume)" '=' "$port" } -function master_volume +master_volume { local name=$1 local port=$2 @@ -135,7 +135,7 @@ function master_volume connect "$port" '=' "PIN($name Volume)" } -function switch +switch { local name=$1 local port=$2 @@ -150,7 +150,7 @@ function switch connect "PIN($name Switch)" '>' "$port" } -function switch_2x2 +switch_2x2 { local name=$1 local port1=$2 @@ -166,7 +166,7 @@ function switch_2x2 connect "PIN($name Switch,2,3)" '>' "$port2" } -function switch_5x2 +switch_5x2 { local name=$1 local port1=$2 @@ -182,7 +182,7 @@ function switch_5x2 connect "PIN($name Switch,5,6,7,8,9)" '>' "$port2" } -function master_switch +master_switch { local name=$1 local port=$2 @@ -197,7 +197,7 @@ function master_switch connect "PIN($name Switch)" '=' "$port" } -function playback +playback { name=$1 port=$2 @@ -211,7 +211,7 @@ function playback add_output "POUT($name Playback Volume)" } -function playback_noswitch +playback_noswitch { name=$1 port=$2 @@ -224,7 +224,7 @@ function playback_noswitch add_output "POUT($name Playback Volume)" } -function capture +capture { name=$1 port=$2 @@ -238,7 +238,7 @@ function capture connect "POUT($name Capture Volume)" '>' "OUT(OUT_PCM_Capture_Left,OUT_PCM_Capture_Right)" } -function capture_noswitch +capture_noswitch { name=$1 port=$2 @@ -251,7 +251,7 @@ function capture_noswitch connect "POUT($name Capture Volume)" '>' "OUT(OUT_PCM_Capture_Left,OUT_PCM_Capture_Right)" } -function master +master { local name=$1 local port=$2 @@ -264,48 +264,48 @@ function master master_switch "$name Playback" "POUT($name Playback Volume)" 1 $index } -function dump_patches +dump_patches { - num=$1 + max=$(( ${1} - 1 )) + line=$(seq -s ' ' 0 $max) - for (( i=0; $i < $num; i=$i+1 )); do - p=$(( $i + 100)) - runlo10k1 --debug $p + for i in ${line}; do + p=$(( $i + 100)) + runlo10k1 --debug $p done - exit } -function add_output +add_output { local port=$1 $add_output_func "$port" } -function add_output_tone_2 +add_output_tone_2 { local port=$1 connect "$port" '>' "PIN(Tone Control,0,1)" } -function add_output_simple_2 +add_output_simple_2 { local port=$1 connect "$port" '>' "PIN(Wave Simple Stereo To 51,0,1)" } -function add_output_prologic_2 +add_output_prologic_2 { local port=$1 connect "$port" '>' "PIN(Wave Prologic,0,1)" } -function add_output_switched_2 +add_output_switched_2 { local port=$1 @@ -314,7 +314,7 @@ function add_output_switched_2 } -function simple_stereo_to_51 +simple_stereo_to_51 { local name=$1 local control=$2 @@ -330,7 +330,7 @@ function simple_stereo_to_51 fi } -function prologic +prologic { local name=$1 local control=$2 @@ -351,7 +351,7 @@ function prologic connect "POUT($name Prologic)" '=' "PIN($name Multi Volume,0,1,2,3,4,5)" } -function tone +tone { local name=$1 local port=$2 @@ -364,7 +364,7 @@ function tone runlo10k1 -n --ctrl "c-bass0,bass1,bass2,bass3,bass4:$name - Bass,t-$name - Bass:2,v-$name - Bass:1,c-treble0,treble1,treble2,treble3,treble4:$name - Treble,t-$name - Treble:3,v-$name - Treble:1,c-toneonoff:$name - Switch,t-$name - Switch:4" --patch_name "${name}" -a tone.emu10k1 } -function multi_playback +multi_playback { local name=$1 local port=$2 @@ -383,7 +383,7 @@ function multi_playback connect "POUT($name Multi Volume)" '>' "PIN(Tone Control)" } -function fxbus +fxbus { local name=$1 local enable_pcm_fx89=$2 From e79e2011efcfb15aa80bf40f5c98b30a5a282dde Mon Sep 17 00:00:00 2001 From: Jordi Mallach Date: Wed, 15 May 2013 19:19:09 +0200 Subject: [PATCH 088/166] Fix build errors caused by -Werror=format-security. When compiled with hardening-flags enabled, ld10k1 fails to build due to a pair of unsafe printf usages that trigger -Werror=format-security. Signed-off-by: Jordi Mallach Signed-off-by: Takashi Iwai --- ld10k1/src/ld10k1.c | 2 +- ld10k1/src/lo10k1.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ld10k1/src/ld10k1.c b/ld10k1/src/ld10k1.c index 7359f13..e31c5af 100644 --- a/ld10k1/src/ld10k1.c +++ b/ld10k1/src/ld10k1.c @@ -62,7 +62,7 @@ static void vlog(const char *label, const char *fmt, va_list va) localtime(&tp)); fprintf(out, "%s %s", timestr, label); } else - fprintf(out, label); + fprintf(out, "%s", label); vfprintf(out, fmt, va); fprintf(out, "\n"); fflush(out); diff --git a/ld10k1/src/lo10k1.c b/ld10k1/src/lo10k1.c index 3d04405..962c3ef 100644 --- a/ld10k1/src/lo10k1.c +++ b/ld10k1/src/lo10k1.c @@ -868,7 +868,7 @@ err: void debug_print(char *str) { - printf(str); + printf("%s", str); } static int debug(int deb) From 472c414744dfaa04903f8b5dc2cebbab1b4b93d5 Mon Sep 17 00:00:00 2001 From: Jordi Mallach Date: Wed, 15 May 2013 19:19:11 +0200 Subject: [PATCH 089/166] Add AM_MAINTAINER_MODE([enable]) macro to all configure scripts. Signed-off-by: Jordi Mallach Signed-off-by: Takashi Iwai --- as10k1/configure.in | 1 + echomixer/configure.in | 1 + envy24control/configure.in | 1 + hda-verb/configure.ac | 2 +- hdajackretask/configure.in | 1 + hdspconf/configure.in | 1 + hdsploader/configure.in | 1 + hdspmixer/configure.in | 1 + hwmixvolume/configure.ac | 1 + ld10k1/configure.in | 1 + mixartloader/configure.in | 1 + pcxhrloader/configure.in | 1 + qlo10k1/configure.in | 1 + rmedigicontrol/configure.in | 1 + sb16_csp/configure.in | 1 + sscape_ctl/configure.in | 1 + us428control/configure.in | 1 + usx2yloader/configure.in | 1 + vxloader/configure.in | 1 + 19 files changed, 19 insertions(+), 1 deletion(-) diff --git a/as10k1/configure.in b/as10k1/configure.in index 37e9e6c..1855eea 100644 --- a/as10k1/configure.in +++ b/as10k1/configure.in @@ -1,5 +1,6 @@ AC_INIT(as10k1.c) AM_INIT_AUTOMAKE(as10k1, A0.99) +AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC diff --git a/echomixer/configure.in b/echomixer/configure.in index 9228924..b4c50f1 100644 --- a/echomixer/configure.in +++ b/echomixer/configure.in @@ -1,5 +1,6 @@ AC_INIT(echomixer.c) AM_INIT_AUTOMAKE(echomixer, 1.0.5) +AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC diff --git a/envy24control/configure.in b/envy24control/configure.in index d42aee8..6a7b23a 100644 --- a/envy24control/configure.in +++ b/envy24control/configure.in @@ -1,5 +1,6 @@ AC_INIT(envy24control.c) AM_INIT_AUTOMAKE(envy24control, 0.6.0) +AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC diff --git a/hda-verb/configure.ac b/hda-verb/configure.ac index 94ca73b..21349b8 100644 --- a/hda-verb/configure.ac +++ b/hda-verb/configure.ac @@ -1,7 +1,7 @@ AC_INIT(hda-verb.c) AM_INIT_AUTOMAKE(hda-verb, 0.4) +AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC - AC_OUTPUT(Makefile) diff --git a/hdajackretask/configure.in b/hdajackretask/configure.in index f839af3..050c731 100644 --- a/hdajackretask/configure.in +++ b/hdajackretask/configure.in @@ -1,6 +1,7 @@ AC_INIT([hdajackretask], [0.20120413]) AC_CONFIG_SRCDIR([main-gtk.c]) AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC diff --git a/hdspconf/configure.in b/hdspconf/configure.in index a32ff5f..37a18de 100644 --- a/hdspconf/configure.in +++ b/hdspconf/configure.in @@ -1,5 +1,6 @@ AC_INIT(src/hdspconf.cxx) AM_INIT_AUTOMAKE(hdspconf, 1.4) +AM_MAINTAINER_MODE([enable]) AC_PROG_CXX AC_PROG_MAKE_SET diff --git a/hdsploader/configure.in b/hdsploader/configure.in index 4801124..b530e9c 100644 --- a/hdsploader/configure.in +++ b/hdsploader/configure.in @@ -1,5 +1,6 @@ AC_INIT(hdsploader.c) AM_INIT_AUTOMAKE(hdsploader, 1.2) +AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC diff --git a/hdspmixer/configure.in b/hdspmixer/configure.in index e47a97d..5e2295b 100644 --- a/hdspmixer/configure.in +++ b/hdspmixer/configure.in @@ -1,5 +1,6 @@ AC_INIT(src/hdspmixer.cxx) AM_INIT_AUTOMAKE(hdspmixer, 1.11) +AM_MAINTAINER_MODE([enable]) AC_PROG_CXX AC_PROG_MAKE_SET diff --git a/hwmixvolume/configure.ac b/hwmixvolume/configure.ac index ad318ad..5572412 100644 --- a/hwmixvolume/configure.ac +++ b/hwmixvolume/configure.ac @@ -1,6 +1,7 @@ dnl Process this file with autoconf to produce a configure script. AC_INIT([hwmixvolume], [0.9]) AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) AC_CONFIG_SRCDIR([hwmixvolume]) AC_PROG_INSTALL AC_OUTPUT([Makefile]) diff --git a/ld10k1/configure.in b/ld10k1/configure.in index b04fa34..6249e03 100644 --- a/ld10k1/configure.in +++ b/ld10k1/configure.in @@ -1,6 +1,7 @@ AC_INIT(src/ld10k1.c) AM_INIT_AUTOMAKE(ld10k1, 0.1.8p1) AC_CONFIG_MACRO_DIR([m4]) +AM_MAINTAINER_MODE([enable]) AC_CONFIG_HEADERS(config.h) AC_PROG_CC diff --git a/mixartloader/configure.in b/mixartloader/configure.in index e5d14f8..6ad5ca7 100644 --- a/mixartloader/configure.in +++ b/mixartloader/configure.in @@ -1,5 +1,6 @@ AC_INIT(mixartloader.c) AM_INIT_AUTOMAKE(mixartloader, 1.0) +AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC diff --git a/pcxhrloader/configure.in b/pcxhrloader/configure.in index 0565dcf..b8ee5d1 100644 --- a/pcxhrloader/configure.in +++ b/pcxhrloader/configure.in @@ -1,5 +1,6 @@ AC_INIT(pcxhrloader.c) AM_INIT_AUTOMAKE(pcxhrloader, 1.0) +AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC diff --git a/qlo10k1/configure.in b/qlo10k1/configure.in index da6ea97..574754e 100644 --- a/qlo10k1/configure.in +++ b/qlo10k1/configure.in @@ -1,5 +1,6 @@ AC_INIT(src/main.cpp) AM_INIT_AUTOMAKE(qlo10k1, 0.1.2p1) +AM_MAINTAINER_MODE([enable]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_HEADERS(config.h) AC_PROG_CXX diff --git a/rmedigicontrol/configure.in b/rmedigicontrol/configure.in index bc4c605..bf8c3f4 100644 --- a/rmedigicontrol/configure.in +++ b/rmedigicontrol/configure.in @@ -1,5 +1,6 @@ AC_INIT(rmedigicontrol.c) AM_INIT_AUTOMAKE(rmedigicontrol, 0.3.5a) +AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC diff --git a/sb16_csp/configure.in b/sb16_csp/configure.in index d0b90ca..5e04236 100644 --- a/sb16_csp/configure.in +++ b/sb16_csp/configure.in @@ -1,5 +1,6 @@ AC_INIT(cspctl.c) AM_INIT_AUTOMAKE(cspctl, 0.2.0) +AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC diff --git a/sscape_ctl/configure.in b/sscape_ctl/configure.in index 282a56b..98eed8b 100644 --- a/sscape_ctl/configure.in +++ b/sscape_ctl/configure.in @@ -1,5 +1,6 @@ AC_INIT(sscape_ctl.c) AM_INIT_AUTOMAKE(sscape_ctl, 0.1.0) +AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC diff --git a/us428control/configure.in b/us428control/configure.in index 66aff9e..031ef3e 100644 --- a/us428control/configure.in +++ b/us428control/configure.in @@ -1,5 +1,6 @@ AC_INIT(us428control.cc) AM_INIT_AUTOMAKE(us428control, 0.4.6) +AM_MAINTAINER_MODE([enable]) AC_PROG_CXX AC_PROG_INSTALL AC_HEADER_STDC diff --git a/usx2yloader/configure.in b/usx2yloader/configure.in index e91f28a..800e6e0 100644 --- a/usx2yloader/configure.in +++ b/usx2yloader/configure.in @@ -1,5 +1,6 @@ AC_INIT(usx2yloader.c) AM_INIT_AUTOMAKE(usx2yloader, 0.3) +AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC diff --git a/vxloader/configure.in b/vxloader/configure.in index e3597ba..2035af3 100644 --- a/vxloader/configure.in +++ b/vxloader/configure.in @@ -1,5 +1,6 @@ AC_INIT(vxloader.c) AM_INIT_AUTOMAKE(vxloader, 1.0) +AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC From 772fbde91c00c8f9517e67e2f5401d28e9aa88d4 Mon Sep 17 00:00:00 2001 From: David Henningsson Date: Thu, 13 Jun 2013 16:26:43 +0200 Subject: [PATCH 090/166] hdajackretask: Fix killing PulseAudio on newer PulseAudio versions The standard configuration directory for PulseAudio has changed, I think since 3.0. Adjust the directory lookup mechanism to match. Signed-off-by: David Henningsson Signed-off-by: Jaroslav Kysela --- hdajackretask/apply-changes.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/hdajackretask/apply-changes.c b/hdajackretask/apply-changes.c index eda404e..840f649 100644 --- a/hdajackretask/apply-changes.c +++ b/hdajackretask/apply-changes.c @@ -97,7 +97,20 @@ gboolean run_sudo_script(const gchar* script_name, GError** err) static gchar* get_pulseaudio_client_conf() { - return g_strdup_printf("%s/.pulse/client.conf", g_get_home_dir()); + /* Reference: See src/pulsecore/core-util.c in pulseaudio */ + gchar* fname; + gchar* dir = g_strdup_printf("%s/.pulse", g_get_home_dir()); + if (access(dir, F_OK) < 0) { + const gchar* xch = g_getenv("XDG_CONFIG_HOME"); + g_free(dir); + if (xch) + dir = g_strdup_printf("%s/pulse", xch); + else + dir = g_strdup_printf("%s/.config/pulse", g_get_home_dir()); + } + fname = g_strdup_printf("%s/client.conf", dir); + g_free(dir); + return fname; } static gboolean kill_pulseaudio(gboolean* was_killed, int card, GError** err) From f3c2688f9d1220cde0a66732985b286b5875f1d5 Mon Sep 17 00:00:00 2001 From: Adrian Knoth Date: Sat, 4 Jan 2014 21:38:23 +0100 Subject: [PATCH 091/166] hdspmixer: Add support for RME AIO AEB boards AIO allows to connect Analogue Extension Boards (4in/4out). Provide those channels in hdspmixer, too. The channel maps were copied from the driver, hence the changed casing in the comments. Signed-off-by: Adrian Knoth Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerCard.cxx | 18 ++++---- hdspmixer/src/HDSPMixerOutput.cxx | 42 ++++++++++-------- hdspmixer/src/HDSPMixerSelector.cxx | 24 ++++++---- hdspmixer/src/HDSPMixerWindow.cxx | 12 ++--- hdspmixer/src/channelmap.cxx | 68 +++++++++++++++++------------ hdspmixer/src/channelmap.h | 6 +-- 6 files changed, 96 insertions(+), 74 deletions(-) diff --git a/hdspmixer/src/HDSPMixerCard.cxx b/hdspmixer/src/HDSPMixerCard.cxx index 78b88b6..ce40ba7 100644 --- a/hdspmixer/src/HDSPMixerCard.cxx +++ b/hdspmixer/src/HDSPMixerCard.cxx @@ -348,9 +348,9 @@ void HDSPMixerCard::adjustSettings() { switch (speed_mode) { case 0: // SS - channels_input = 14; - channels_playback = 16; - channels_output = 16; /* SS 2xAnalog+2xAES+2xSPDIF+4xADAT+2xHeadphones */ + channels_input = 18; + channels_playback = 20; + channels_output = 20; /* SS 2xAnalog+2xAES+2xSPDIF+8xADAT+2xHeadphones+4xAEB */ channel_map_input = channel_map_aio_in_ss; channel_map_playback = channel_map_aio_out_ss; dest_map = dest_map_aio_ss; @@ -358,9 +358,9 @@ void HDSPMixerCard::adjustSettings() { meter_map_playback = channel_map_aio_out_ss; break; case 1: // DS - channels_input = 10; - channels_playback = 12; - channels_output = 12; /* DS 2xAnalog+2xAES+2xSPDIF+4xADAT(SMUX)+2xHeadphones */ + channels_input = 14; + channels_playback = 16; + channels_output = 16; /* DS 2xAnalog+2xAES+2xSPDIF+4xADAT(SMUX)+2xHeadphones+4xAEB */ channel_map_input = channel_map_aio_in_ds; channel_map_playback = channel_map_aio_out_ds; dest_map = dest_map_aio_ds; @@ -368,9 +368,9 @@ void HDSPMixerCard::adjustSettings() { meter_map_playback = channel_map_aio_out_ds; break; case 2: // QS - channels_input = 8; - channels_playback = 10; - channels_output = 10; /* QS 2xAnalog+2xAES+2xSPDIF+2xADAT(SMUX)+2xHeadphones */ + channels_input = 12; + channels_playback = 14; + channels_output = 14; /* QS 2xAnalog+2xAES+2xSPDIF+2xADAT(SMUX)+2xHeadphones+4xAEB */ channel_map_input = channel_map_aio_in_qs; channel_map_playback = channel_map_aio_out_qs; dest_map = dest_map_aio_qs; diff --git a/hdspmixer/src/HDSPMixerOutput.cxx b/hdspmixer/src/HDSPMixerOutput.cxx index 5a88f41..0053fe0 100644 --- a/hdspmixer/src/HDSPMixerOutput.cxx +++ b/hdspmixer/src/HDSPMixerOutput.cxx @@ -87,51 +87,57 @@ static char const *labels_rpm_input[5] = { "Mic" }; -static char const *labels_aio_ss_input[14] = { - "AN 1", "AN 2", - "SP.L", "SP.R", - "AES.L", "AES.R", - "A 1", "A 2", "A 3", "A 4", - "A 5", "A 6", "A 7", "A 8" -}; - -static char const *labels_aio_ss_playback[16] = { +static char const *labels_aio_ss_input[18] = { "AN 1", "AN 2", "SP.L", "SP.R", "AES.L", "AES.R", "A 1", "A 2", "A 3", "A 4", "A 5", "A 6", "A 7", "A 8", - "PH.L", "PH.R" + "AEB 1", "AEB 2", "AEB 3," "AEB 4" }; -static char const *labels_aio_ds_input[10] = { - "AN 1", "AN 2", +static char const *labels_aio_ss_playback[20] = { + "AN 1", "AN 2", "SP.L", "SP.R", "AES.L", "AES.R", - "A 1", "A 2", "A 3", "A 4" + "A 1", "A 2", "A 3", "A 4", + "A 5", "A 6", "A 7", "A 8", + "PH.L", "PH.R", + "AEB 1", "AEB 2", "AEB 3", "AEB 4" }; -static char const *labels_aio_ds_playback[12] = { +static char const *labels_aio_ds_input[14] = { "AN 1", "AN 2", "SP.L", "SP.R", "AES.L", "AES.R", "A 1", "A 2", "A 3", "A 4", - "PH.L", "PH.R" + "AEB 1", "AEB 2", "AEB 3", "AEB 4" +}; + +static char const *labels_aio_ds_playback[16] = { + "AN 1", "AN 2", + "SP.L", "SP.R", + "AES.L", "AES.R", + "A 1", "A 2", "A 3", "A 4", + "PH.L", "PH.R", + "AEB 1", "AEB 2", "AEB 3", "AEB 4" }; -static char const *labels_aio_qs_input[8] = { +static char const *labels_aio_qs_input[12] = { "AN 1", "AN 2", "SP.L", "SP.R", "AES.L", "AES.R", - "A 1", "A 2" + "A 1", "A 2", + "AEB 1", "AEB 2", "AEB 3", "AEB 4" }; -static char const *labels_aio_qs_playback[10] = { +static char const *labels_aio_qs_playback[14] = { "AN 1", "AN 2", "SP.L", "SP.R", "AES.L", "AES.R", "A 1", "A 2", "PH.L", "PH.R", + "AEB 1", "AEB 2", "AEB 3", "AEB 4" }; diff --git a/hdspmixer/src/HDSPMixerSelector.cxx b/hdspmixer/src/HDSPMixerSelector.cxx index 084c80d..3dcbad3 100644 --- a/hdspmixer/src/HDSPMixerSelector.cxx +++ b/hdspmixer/src/HDSPMixerSelector.cxx @@ -81,28 +81,34 @@ static char const *destinations_raydat_qs[6] = { }; -static char const *destinations_aio_ss[8] = { +static char const *destinations_aio_ss[10] = { "AN 1+2", "AES", "SPDIF", "A 1+2", "A 3+4", "A 5+6", "A 7+8", - "Phones" + "Phones", + "AEB 1+2", + "AEB 3+4" }; -static char const *destinations_aio_ds[6] = { +static char const *destinations_aio_ds[8] = { "AN 1+2", "AES", "SPDIF", "A 1+2", "A 3+4", - "Phones" + "Phones", + "AEB 1+2", + "AEB 3+4" }; -static char const *destinations_aio_qs[5] = { +static char const *destinations_aio_qs[7] = { "AN 1+2", "AES", "SPDIF", "A 1+2", - "Phones" + "Phones", + "AEB 1+2", + "AEB 3+4" }; static char const *destinations_mf_ss[10] = { @@ -318,15 +324,15 @@ void HDSPMixerSelector::setLabels() } else if (HDSPeAIO == type) { switch (sm) { case 0: - max_dest = 8; + max_dest = 10; destinations = destinations_aio_ss; break; case 1: - max_dest = 6; + max_dest = 8; destinations = destinations_aio_ds; break; case 2: - max_dest = 5; + max_dest = 7; destinations = destinations_aio_qs; break; } diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index e1fe18c..342efb2 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -753,12 +753,12 @@ void HDSPMixerWindow::restoreDefaults(int card) num_modes = 3; break; case HDSPeAIO: - chnls[0] = 14; - chnls[1] = 10; - chnls[2] = 8; - maxdest[0] = 8; - maxdest[1] = 6; - maxdest[2] = 5; + chnls[0] = 18; + chnls[1] = 14; + chnls[2] = 12; + maxdest[0] = 10; + maxdest[1] = 8; + maxdest[2] = 7; num_modes = 3; break; case HDSPeRayDAT: diff --git a/hdspmixer/src/channelmap.cxx b/hdspmixer/src/channelmap.cxx index e3ca15c..b7bdded 100644 --- a/hdspmixer/src/channelmap.cxx +++ b/hdspmixer/src/channelmap.cxx @@ -247,38 +247,44 @@ char channel_map_raydat_qs[HDSPM_MAX_CHANNELS] = { // HDSPe AIO -char dest_map_aio_ss[8] = { +char dest_map_aio_ss[10] = { 0, // Analogue 8, // AES 10, // SPDIF 12, 14, 16, 18, // ADAT - 6 // Phones + 6, // Phones + 2, // AEB 1+2 + 4 // AEB 3+4 }; -char dest_map_aio_ds[6] = { +char dest_map_aio_ds[8] = { 0, // Analogue 8, // AES 10, // SPDIF 12, 16, // ADAT - 6 // Phones + 6, // Phones + 2, // AEB 1+2 + 4 // AEB 3+4 }; -char dest_map_aio_qs[5] = { +char dest_map_aio_qs[7] = { 0, // Analogue 8, // AES 10, // SPDIF 12, // ADAT - 6 // Phone + 6, // Phone + 2, // AEB 1+2 + 4 // AEB 3+4 }; char channel_map_aio_in_ss[HDSPM_MAX_CHANNELS] = { 0, 1, /* line in */ - 8, 9, /* AES in, */ - 10, 11, /* SPDIF in */ + 8, 9, /* aes in, */ + 10, 11, /* spdif in */ 12, 13, 14, 15, 16, 17, 18, 19, /* ADAT in */ - -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, + 2, 3, 4, 5, /* AEB */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -288,11 +294,12 @@ char channel_map_aio_in_ss[HDSPM_MAX_CHANNELS] = { char channel_map_aio_out_ss[HDSPM_MAX_CHANNELS] = { 0, 1, /* line out */ - 8, 9, /* AES out */ - 10, 11, /* SPDIF out */ + 8, 9, /* aes out */ + 10, 11, /* spdif out */ 12, 13, 14, 15, 16, 17, 18, 19, /* ADAT out */ 6, 7, /* phone out */ - -1, -1, -1, -1, -1, -1, -1, -1, + 2, 3, 4, 5, /* AEB */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -302,10 +309,11 @@ char channel_map_aio_out_ss[HDSPM_MAX_CHANNELS] = { char channel_map_aio_in_ds[HDSPM_MAX_CHANNELS] = { 0, 1, /* line in */ - 8, 9, /* AES in */ - 10, 11, /* SPDIF in */ - 12, 14, 16, 18, /* ADAT in */ - -1, -1, -1, -1, -1, -1, + 8, 9, /* aes in */ + 10, 11, /* spdif in */ + 12, 14, 16, 18, /* adat in */ + 2, 3, 4, 5, /* AEB */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -316,11 +324,11 @@ char channel_map_aio_in_ds[HDSPM_MAX_CHANNELS] = { char channel_map_aio_out_ds[HDSPM_MAX_CHANNELS] = { 0, 1, /* line out */ - 8, 9, /* AES out */ - 10, 11, /* SPDIF out */ - 12, 14, 16, 18, /* ADAT out */ + 8, 9, /* aes out */ + 10, 11, /* spdif out */ + 12, 14, 16, 18, /* adat out */ 6, 7, /* phone out */ - -1, -1, -1, -1, + 2, 3, 4, 5, /* AEB */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -331,10 +339,11 @@ char channel_map_aio_out_ds[HDSPM_MAX_CHANNELS] = { char channel_map_aio_in_qs[HDSPM_MAX_CHANNELS] = { 0, 1, /* line in */ - 8, 9, /* AES in */ - 10, 11, /* SPDIF in */ - 12, 16, /* ADAT in */ - -1, -1, -1, -1, -1, -1, -1, -1, + 8, 9, /* aes in */ + 10, 11, /* spdif in */ + 12, 16, /* adat in */ + 2, 3, 4, 5, /* AEB */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -345,11 +354,12 @@ char channel_map_aio_in_qs[HDSPM_MAX_CHANNELS] = { char channel_map_aio_out_qs[HDSPM_MAX_CHANNELS] = { 0, 1, /* line out */ - 8, 9, /* AES out */ - 10, 11, /* SPDIF out */ - 12, 16, /* ADAT out */ + 8, 9, /* aes out */ + 10, 11, /* spdif out */ + 12, 16, /* adat out */ 6, 7, /* phone out */ - -1, -1, -1, -1, -1, -1, + 2, 3, 4, 5, /* AEB */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, diff --git a/hdspmixer/src/channelmap.h b/hdspmixer/src/channelmap.h index 51b69ce..854e5a1 100644 --- a/hdspmixer/src/channelmap.h +++ b/hdspmixer/src/channelmap.h @@ -112,12 +112,12 @@ extern char channel_map_raydat_qs[HDSPM_MAX_CHANNELS]; // HDSPe AIO -extern char dest_map_aio_ss[8]; +extern char dest_map_aio_ss[10]; -extern char dest_map_aio_ds[6]; +extern char dest_map_aio_ds[8]; -extern char dest_map_aio_qs[5]; +extern char dest_map_aio_qs[7]; extern char channel_map_aio_in_ss[HDSPM_MAX_CHANNELS]; From ab0104736c98465de9a9b70d42123a48e112c44f Mon Sep 17 00:00:00 2001 From: David Henningsson Date: Tue, 27 May 2014 09:12:36 +0200 Subject: [PATCH 092/166] hdajackretask: Make sure codecs do not show up twice under 3.15 kernel On a 3.15 based kernel, both "hdaudioC*D*" and "hwC*D*" shows up under /sys/class/sound, and pointing to the same object. Make sure we only match on the hwC*D* name to avoid duplicate entries. Signed-off-by: David Henningsson Signed-off-by: Takashi Iwai --- hdajackretask/sysfs-pin-configs.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hdajackretask/sysfs-pin-configs.c b/hdajackretask/sysfs-pin-configs.c index 4044989..5bae0f9 100644 --- a/hdajackretask/sysfs-pin-configs.c +++ b/hdajackretask/sysfs-pin-configs.c @@ -20,8 +20,10 @@ int get_codec_name_list(codec_name_t* names, int entries) const gchar* dirname = g_dir_read_name(sysdir); if (!dirname) break; + /* Split e g "hwC0D1" into "hw", "0" and "1" */ cd = g_strsplit_set(dirname, "CD", 9); ok = g_strv_length(cd) == 3; + ok &= strcmp(cd[0], "hw") == 0; if (ok) { gchar* filetest = g_strdup_printf("/sys/class/sound/%s/init_pin_configs", dirname); ok = g_file_test(filetest, G_FILE_TEST_IS_REGULAR); From 07896d3d164b6d6a6699450ca43272b61526fb78 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 12 Jun 2014 11:28:22 +0200 Subject: [PATCH 093/166] Modernize configure.ac --- as10k1/{configure.in => configure.ac} | 6 +++--- echomixer/{configure.in => configure.ac} | 6 +++--- envy24control/{configure.in => configure.ac} | 6 +++--- hda-verb/configure.ac | 4 ++-- hdajackretask/{configure.in => configure.ac} | 0 hdspconf/{configure.in => configure.ac} | 4 ++-- hdsploader/{configure.in => configure.ac} | 4 ++-- hdspmixer/{configure.in => configure.ac} | 4 ++-- hwmixvolume/configure.ac | 2 +- ld10k1/INSTALL | 8 ++++---- ld10k1/{configure.in => configure.ac} | 4 ++-- ld10k1/include/Makefile.am | 2 +- sb16_csp/configure.in => mixartloader/configure.ac | 4 ++-- mixartloader/configure.in | 12 ------------ vxloader/configure.in => pcxhrloader/configure.ac | 4 ++-- qlo10k1/INSTALL | 8 ++++---- qlo10k1/config.h.in | 2 +- qlo10k1/{configure.in => configure.ac} | 4 ++-- rmedigicontrol/{configure.in => configure.ac} | 4 ++-- pcxhrloader/configure.in => sb16_csp/configure.ac | 4 ++-- seq/sbiload/{configure.in => configure.ac} | 4 ++-- sscape_ctl/{configure.in => configure.ac} | 4 ++-- us428control/{configure.in => configure.ac} | 4 ++-- usx2yloader/{configure.in => configure.ac} | 4 ++-- vxloader/configure.ac | 12 ++++++++++++ 25 files changed, 60 insertions(+), 60 deletions(-) rename as10k1/{configure.in => configure.ac} (71%) rename echomixer/{configure.in => configure.ac} (72%) rename envy24control/{configure.in => configure.ac} (70%) rename hdajackretask/{configure.in => configure.ac} (100%) rename hdspconf/{configure.in => configure.ac} (94%) rename hdsploader/{configure.in => configure.ac} (75%) rename hdspmixer/{configure.in => configure.ac} (94%) rename ld10k1/{configure.in => configure.ac} (96%) rename sb16_csp/configure.in => mixartloader/configure.ac (77%) delete mode 100644 mixartloader/configure.in rename vxloader/configure.in => pcxhrloader/configure.ac (76%) rename qlo10k1/{configure.in => configure.ac} (93%) rename rmedigicontrol/{configure.in => configure.ac} (69%) rename pcxhrloader/configure.in => sb16_csp/configure.ac (74%) rename seq/sbiload/{configure.in => configure.ac} (73%) rename sscape_ctl/{configure.in => configure.ac} (74%) rename us428control/{configure.in => configure.ac} (73%) rename usx2yloader/{configure.in => configure.ac} (77%) create mode 100644 vxloader/configure.ac diff --git a/as10k1/configure.in b/as10k1/configure.ac similarity index 71% rename from as10k1/configure.in rename to as10k1/configure.ac index 1855eea..0c35cba 100644 --- a/as10k1/configure.in +++ b/as10k1/configure.ac @@ -1,9 +1,9 @@ -AC_INIT(as10k1.c) -AM_INIT_AUTOMAKE(as10k1, A0.99) -AM_MAINTAINER_MODE([enable]) +AC_INIT(as10k1.c, A0.99) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" diff --git a/echomixer/configure.in b/echomixer/configure.ac similarity index 72% rename from echomixer/configure.in rename to echomixer/configure.ac index b4c50f1..769c829 100644 --- a/echomixer/configure.in +++ b/echomixer/configure.ac @@ -1,9 +1,9 @@ -AC_INIT(echomixer.c) -AM_INIT_AUTOMAKE(echomixer, 1.0.5) -AM_MAINTAINER_MODE([enable]) +AC_INIT(echomixer.c, 1.0.5) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) PKG_CHECK_MODULES(ECHOMIXER, gtk+-2.0 alsa >= 1.0.0) diff --git a/envy24control/configure.in b/envy24control/configure.ac similarity index 70% rename from envy24control/configure.in rename to envy24control/configure.ac index 6a7b23a..08dcdd8 100644 --- a/envy24control/configure.in +++ b/envy24control/configure.ac @@ -1,9 +1,9 @@ -AC_INIT(envy24control.c) -AM_INIT_AUTOMAKE(envy24control, 0.6.0) -AM_MAINTAINER_MODE([enable]) +AC_INIT(envy24control.c, 0.6.0) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) PKG_CHECK_MODULES(ENVY24CONTROL, gtk+-2.0 alsa >= 0.9.0) diff --git a/hda-verb/configure.ac b/hda-verb/configure.ac index 21349b8..663efbd 100644 --- a/hda-verb/configure.ac +++ b/hda-verb/configure.ac @@ -1,5 +1,5 @@ -AC_INIT(hda-verb.c) -AM_INIT_AUTOMAKE(hda-verb, 0.4) +AC_INIT(hda-verb, 0.4) +AM_INIT_AUTOMAKE AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL diff --git a/hdajackretask/configure.in b/hdajackretask/configure.ac similarity index 100% rename from hdajackretask/configure.in rename to hdajackretask/configure.ac diff --git a/hdspconf/configure.in b/hdspconf/configure.ac similarity index 94% rename from hdspconf/configure.in rename to hdspconf/configure.ac index 37a18de..f0b0c95 100644 --- a/hdspconf/configure.in +++ b/hdspconf/configure.ac @@ -1,5 +1,5 @@ -AC_INIT(src/hdspconf.cxx) -AM_INIT_AUTOMAKE(hdspconf, 1.4) +AC_INIT(hdspconf, 1.4) +AM_INIT_AUTOMAKE AM_MAINTAINER_MODE([enable]) AC_PROG_CXX diff --git a/hdsploader/configure.in b/hdsploader/configure.ac similarity index 75% rename from hdsploader/configure.in rename to hdsploader/configure.ac index b530e9c..0ada4e6 100644 --- a/hdsploader/configure.in +++ b/hdsploader/configure.ac @@ -1,5 +1,5 @@ -AC_INIT(hdsploader.c) -AM_INIT_AUTOMAKE(hdsploader, 1.2) +AC_INIT(hdsploader, 1.2) +AM_INIT_AUTOMAKE AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL diff --git a/hdspmixer/configure.in b/hdspmixer/configure.ac similarity index 94% rename from hdspmixer/configure.in rename to hdspmixer/configure.ac index 5e2295b..0b32dba 100644 --- a/hdspmixer/configure.in +++ b/hdspmixer/configure.ac @@ -1,5 +1,5 @@ -AC_INIT(src/hdspmixer.cxx) -AM_INIT_AUTOMAKE(hdspmixer, 1.11) +AC_INIT(hdspmixer, 1.11) +AM_INIT_AUTOMAKE AM_MAINTAINER_MODE([enable]) AC_PROG_CXX diff --git a/hwmixvolume/configure.ac b/hwmixvolume/configure.ac index 5572412..09d5f09 100644 --- a/hwmixvolume/configure.ac +++ b/hwmixvolume/configure.ac @@ -1,5 +1,5 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT([hwmixvolume], [0.9]) +AC_INIT(hwmixvolume, 0.9) AM_INIT_AUTOMAKE AM_MAINTAINER_MODE([enable]) AC_CONFIG_SRCDIR([hwmixvolume]) diff --git a/ld10k1/INSTALL b/ld10k1/INSTALL index a1e89e1..007e939 100644 --- a/ld10k1/INSTALL +++ b/ld10k1/INSTALL @@ -1,7 +1,7 @@ Installation Instructions ************************* -Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation, +Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, @@ -309,9 +309,10 @@ causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to -an Autoconf bug. Until the bug is fixed you can use this workaround: +an Autoconf limitation. Until the limitation is lifted, you can use +this workaround: - CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== @@ -367,4 +368,3 @@ operates. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. - diff --git a/ld10k1/configure.in b/ld10k1/configure.ac similarity index 96% rename from ld10k1/configure.in rename to ld10k1/configure.ac index 6249e03..276b24e 100644 --- a/ld10k1/configure.in +++ b/ld10k1/configure.ac @@ -1,5 +1,5 @@ -AC_INIT(src/ld10k1.c) -AM_INIT_AUTOMAKE(ld10k1, 0.1.8p1) +AC_INIT(ld10k1, 0.1.8p1) +AM_INIT_AUTOMAKE AC_CONFIG_MACRO_DIR([m4]) AM_MAINTAINER_MODE([enable]) diff --git a/ld10k1/include/Makefile.am b/ld10k1/include/Makefile.am index f9e8bc9..eba10f0 100644 --- a/ld10k1/include/Makefile.am +++ b/ld10k1/include/Makefile.am @@ -9,7 +9,7 @@ CLEANFILES = stamp-vh version.h lo10k1 version.h: stamp-vh @: -stamp-vh: $(top_builddir)/configure.in +stamp-vh: $(top_builddir)/configure.ac @echo "/*" > ver.tmp @echo " * version.h" >> ver.tmp @echo " */" >> ver.tmp diff --git a/sb16_csp/configure.in b/mixartloader/configure.ac similarity index 77% rename from sb16_csp/configure.in rename to mixartloader/configure.ac index 5e04236..448b581 100644 --- a/sb16_csp/configure.in +++ b/mixartloader/configure.ac @@ -1,5 +1,5 @@ -AC_INIT(cspctl.c) -AM_INIT_AUTOMAKE(cspctl, 0.2.0) +AC_INIT(mixartloader, 1.0) +AM_INIT_AUTOMAKE AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL diff --git a/mixartloader/configure.in b/mixartloader/configure.in deleted file mode 100644 index 6ad5ca7..0000000 --- a/mixartloader/configure.in +++ /dev/null @@ -1,12 +0,0 @@ -AC_INIT(mixartloader.c) -AM_INIT_AUTOMAKE(mixartloader, 1.0) -AM_MAINTAINER_MODE([enable]) -AC_PROG_CC -AC_PROG_INSTALL -AC_HEADER_STDC -AM_PATH_ALSA(1.0.0) - -CFLAGS="$CFLAGS $ALSA_CFLAGS" -LDFLAGS="$LDFLAGS $ALSA_LIBS" - -AC_OUTPUT(Makefile) diff --git a/vxloader/configure.in b/pcxhrloader/configure.ac similarity index 76% rename from vxloader/configure.in rename to pcxhrloader/configure.ac index 2035af3..c41c87d 100644 --- a/vxloader/configure.in +++ b/pcxhrloader/configure.ac @@ -1,5 +1,5 @@ -AC_INIT(vxloader.c) -AM_INIT_AUTOMAKE(vxloader, 1.0) +AC_INIT(pcxhrloader, 1.0) +AM_INIT_AUTOMAKE AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL diff --git a/qlo10k1/INSTALL b/qlo10k1/INSTALL index a1e89e1..007e939 100644 --- a/qlo10k1/INSTALL +++ b/qlo10k1/INSTALL @@ -1,7 +1,7 @@ Installation Instructions ************************* -Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation, +Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, @@ -309,9 +309,10 @@ causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to -an Autoconf bug. Until the bug is fixed you can use this workaround: +an Autoconf limitation. Until the limitation is lifted, you can use +this workaround: - CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== @@ -367,4 +368,3 @@ operates. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. - diff --git a/qlo10k1/config.h.in b/qlo10k1/config.h.in index f0b12a9..497de12 100644 --- a/qlo10k1/config.h.in +++ b/qlo10k1/config.h.in @@ -1,4 +1,4 @@ -/* config.h.in. Generated from configure.in by autoheader. */ +/* config.h.in. Generated from configure.ac by autoheader. */ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD diff --git a/qlo10k1/configure.in b/qlo10k1/configure.ac similarity index 93% rename from qlo10k1/configure.in rename to qlo10k1/configure.ac index 574754e..6e698d4 100644 --- a/qlo10k1/configure.in +++ b/qlo10k1/configure.ac @@ -1,5 +1,5 @@ -AC_INIT(src/main.cpp) -AM_INIT_AUTOMAKE(qlo10k1, 0.1.2p1) +AC_INIT(qlo10k1, 0.1.2p1) +AM_INIT_AUTOMAKE AM_MAINTAINER_MODE([enable]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_HEADERS(config.h) diff --git a/rmedigicontrol/configure.in b/rmedigicontrol/configure.ac similarity index 69% rename from rmedigicontrol/configure.in rename to rmedigicontrol/configure.ac index bf8c3f4..9c38754 100644 --- a/rmedigicontrol/configure.in +++ b/rmedigicontrol/configure.ac @@ -1,5 +1,5 @@ -AC_INIT(rmedigicontrol.c) -AM_INIT_AUTOMAKE(rmedigicontrol, 0.3.5a) +AC_INIT(rmedigicontrol, 0.3.5a) +AM_INIT_AUTOMAKE AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL diff --git a/pcxhrloader/configure.in b/sb16_csp/configure.ac similarity index 74% rename from pcxhrloader/configure.in rename to sb16_csp/configure.ac index b8ee5d1..76d035e 100644 --- a/pcxhrloader/configure.in +++ b/sb16_csp/configure.ac @@ -1,5 +1,5 @@ -AC_INIT(pcxhrloader.c) -AM_INIT_AUTOMAKE(pcxhrloader, 1.0) +AC_INIT(cspctl, 0.2.0) +AM_INIT_AUTOMAKE AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL diff --git a/seq/sbiload/configure.in b/seq/sbiload/configure.ac similarity index 73% rename from seq/sbiload/configure.in rename to seq/sbiload/configure.ac index fd01843..87b3449 100644 --- a/seq/sbiload/configure.in +++ b/seq/sbiload/configure.ac @@ -1,5 +1,5 @@ -AC_INIT(sbiload.c) -AM_INIT_AUTOMAKE(sbiload, 0.4.0) +AC_INIT(sbiload, 0.4.0) +AM_INIT_AUTOMAKE AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC diff --git a/sscape_ctl/configure.in b/sscape_ctl/configure.ac similarity index 74% rename from sscape_ctl/configure.in rename to sscape_ctl/configure.ac index 98eed8b..c1c048f 100644 --- a/sscape_ctl/configure.in +++ b/sscape_ctl/configure.ac @@ -1,5 +1,5 @@ -AC_INIT(sscape_ctl.c) -AM_INIT_AUTOMAKE(sscape_ctl, 0.1.0) +AC_INIT(sscape_ctl, 0.1.0) +AM_INIT_AUTOMAKE AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL diff --git a/us428control/configure.in b/us428control/configure.ac similarity index 73% rename from us428control/configure.in rename to us428control/configure.ac index 031ef3e..f3f5814 100644 --- a/us428control/configure.in +++ b/us428control/configure.ac @@ -1,5 +1,5 @@ -AC_INIT(us428control.cc) -AM_INIT_AUTOMAKE(us428control, 0.4.6) +AC_INIT(us428control, 0.4.6) +AM_INIT_AUTOMAKE AM_MAINTAINER_MODE([enable]) AC_PROG_CXX AC_PROG_INSTALL diff --git a/usx2yloader/configure.in b/usx2yloader/configure.ac similarity index 77% rename from usx2yloader/configure.in rename to usx2yloader/configure.ac index 800e6e0..c789a4b 100644 --- a/usx2yloader/configure.in +++ b/usx2yloader/configure.ac @@ -1,5 +1,5 @@ -AC_INIT(usx2yloader.c) -AM_INIT_AUTOMAKE(usx2yloader, 0.3) +AC_INIT(usx2yloader, 0.3) +AM_INIT_AUTOMAKE AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL diff --git a/vxloader/configure.ac b/vxloader/configure.ac new file mode 100644 index 0000000..21e9c95 --- /dev/null +++ b/vxloader/configure.ac @@ -0,0 +1,12 @@ +AC_INIT(vxloader, 1.0) +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) +AC_PROG_CC +AC_PROG_INSTALL +AC_HEADER_STDC +AM_PATH_ALSA(1.0.0) + +CFLAGS="$CFLAGS $ALSA_CFLAGS" +LDFLAGS="$LDFLAGS $ALSA_LIBS" + +AC_OUTPUT(Makefile) From 1e7b6189d8fd273b38e508acb2bef70c3b2e84f3 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Fri, 13 Jun 2014 11:26:43 +0200 Subject: [PATCH 094/166] qlo10k1: packing fix (configure.ac) --- qlo10k1/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qlo10k1/Makefile.am b/qlo10k1/Makefile.am index ef522bf..b34b93a 100644 --- a/qlo10k1/Makefile.am +++ b/qlo10k1/Makefile.am @@ -1,6 +1,6 @@ SUBDIRS = src -EXTRA_DIST = gitcompile COPYING configure.in README NEWS AUTHORS TODO \ +EXTRA_DIST = gitcompile COPYING configure.ac README NEWS AUTHORS TODO \ INSTALL ChangeLog alsa-dist: distdir From c3eb62540f188592af9eb748dcfb4bed7640df03 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Fri, 13 Jun 2014 11:28:13 +0200 Subject: [PATCH 095/166] Release v1.0.28 Signed-off-by: Jaroslav Kysela --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 2457a1c..b2da046 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION = 1.0.27 +VERSION = 1.0.28 TOP = . SUBDIRS = as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ From 406f80c9685d5021363cfb52afa708132b77b222 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Fri, 27 Jun 2014 16:48:33 +0200 Subject: [PATCH 096/166] ld10k1: Fix missing parentheses for functions The commit a1728250 removes bash-specific "function" but the necessary parentheses are missing. Signed-off-by: Takashi Iwai --- ld10k1/setup/init_live.in | 54 +++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/ld10k1/setup/init_live.in b/ld10k1/setup/init_live.in index 5e6580f..7100061 100644 --- a/ld10k1/setup/init_live.in +++ b/ld10k1/setup/init_live.in @@ -46,7 +46,7 @@ std_playback=playback std_capture=capture #std_capture=capture_noswitch -log +log () { local level=$1 @@ -57,7 +57,7 @@ log fi } -runlo10k1 +runlo10k1 () { log 2 $LO10K1 "$@" @@ -71,7 +71,7 @@ runlo10k1 fi } -rename +rename () { port=$1 name=$2 @@ -81,7 +81,7 @@ rename runlo10k1 --renam "$port=$name" } -connect +connect () { from=$1 op=$2 @@ -92,7 +92,7 @@ connect runlo10k1 --conadd "$from$op$to" } -copy +copy () { local name=$1 local port=$2 @@ -105,7 +105,7 @@ copy connect "PIN($name Copy)" '=' "$port" } -volume +volume () { local name=$1 local port=$2 @@ -120,7 +120,7 @@ volume connect "PIN($name Volume)" '=' "$port" } -master_volume +master_volume () { local name=$1 local port=$2 @@ -135,7 +135,7 @@ master_volume connect "$port" '=' "PIN($name Volume)" } -switch +switch () { local name=$1 local port=$2 @@ -150,7 +150,7 @@ switch connect "PIN($name Switch)" '>' "$port" } -switch_2x2 +switch_2x2 () { local name=$1 local port1=$2 @@ -166,7 +166,7 @@ switch_2x2 connect "PIN($name Switch,2,3)" '>' "$port2" } -switch_5x2 +switch_5x2 () { local name=$1 local port1=$2 @@ -182,7 +182,7 @@ switch_5x2 connect "PIN($name Switch,5,6,7,8,9)" '>' "$port2" } -master_switch +master_switch () { local name=$1 local port=$2 @@ -197,7 +197,7 @@ master_switch connect "PIN($name Switch)" '=' "$port" } -playback +playback () { name=$1 port=$2 @@ -211,7 +211,7 @@ playback add_output "POUT($name Playback Volume)" } -playback_noswitch +playback_noswitch () { name=$1 port=$2 @@ -224,7 +224,7 @@ playback_noswitch add_output "POUT($name Playback Volume)" } -capture +capture () { name=$1 port=$2 @@ -238,7 +238,7 @@ capture connect "POUT($name Capture Volume)" '>' "OUT(OUT_PCM_Capture_Left,OUT_PCM_Capture_Right)" } -capture_noswitch +capture_noswitch () { name=$1 port=$2 @@ -251,7 +251,7 @@ capture_noswitch connect "POUT($name Capture Volume)" '>' "OUT(OUT_PCM_Capture_Left,OUT_PCM_Capture_Right)" } -master +master () { local name=$1 local port=$2 @@ -264,7 +264,7 @@ master master_switch "$name Playback" "POUT($name Playback Volume)" 1 $index } -dump_patches +dump_patches () { max=$(( ${1} - 1 )) line=$(seq -s ' ' 0 $max) @@ -277,35 +277,35 @@ dump_patches exit } -add_output +add_output () { local port=$1 $add_output_func "$port" } -add_output_tone_2 +add_output_tone_2 () { local port=$1 connect "$port" '>' "PIN(Tone Control,0,1)" } -add_output_simple_2 +add_output_simple_2 () { local port=$1 connect "$port" '>' "PIN(Wave Simple Stereo To 51,0,1)" } -add_output_prologic_2 +add_output_prologic_2 () { local port=$1 connect "$port" '>' "PIN(Wave Prologic,0,1)" } -add_output_switched_2 +add_output_switched_2 () { local port=$1 @@ -314,7 +314,7 @@ add_output_switched_2 } -simple_stereo_to_51 +simple_stereo_to_51 () { local name=$1 local control=$2 @@ -330,7 +330,7 @@ simple_stereo_to_51 fi } -prologic +prologic () { local name=$1 local control=$2 @@ -351,7 +351,7 @@ prologic connect "POUT($name Prologic)" '=' "PIN($name Multi Volume,0,1,2,3,4,5)" } -tone +tone () { local name=$1 local port=$2 @@ -364,7 +364,7 @@ tone runlo10k1 -n --ctrl "c-bass0,bass1,bass2,bass3,bass4:$name - Bass,t-$name - Bass:2,v-$name - Bass:1,c-treble0,treble1,treble2,treble3,treble4:$name - Treble,t-$name - Treble:3,v-$name - Treble:1,c-toneonoff:$name - Switch,t-$name - Switch:4" --patch_name "${name}" -a tone.emu10k1 } -multi_playback +multi_playback () { local name=$1 local port=$2 @@ -383,7 +383,7 @@ multi_playback connect "POUT($name Multi Volume)" '>' "PIN(Tone Control)" } -fxbus +fxbus () { local name=$1 local enable_pcm_fx89=$2 From eb6408a79195f23abd4f3c425c7c371f472389dc Mon Sep 17 00:00:00 2001 From: David Henningsson Date: Fri, 1 Aug 2014 16:20:30 +0200 Subject: [PATCH 097/166] hdajackretask: Add "hints" functionality The kernel driver has some hints you can send to it that changes parser behaviour. This patch exposes that functionality to the user. (This patch also includes minor fixes for documentation, GTK warnings and whitespace.) Signed-off-by: David Henningsson Signed-off-by: Takashi Iwai --- hdajackretask/Makefile.am | 2 +- hdajackretask/README | 12 +-- hdajackretask/apply-changes.c | 48 ++++++---- hdajackretask/apply-changes.h | 4 +- hdajackretask/main-gtk.c | 144 ++++++++++++++++++++++++++++-- hdajackretask/sysfs-pin-configs.c | 28 +++++- hdajackretask/sysfs-pin-configs.h | 4 + 7 files changed, 209 insertions(+), 33 deletions(-) diff --git a/hdajackretask/Makefile.am b/hdajackretask/Makefile.am index 3479b83..e313159 100644 --- a/hdajackretask/Makefile.am +++ b/hdajackretask/Makefile.am @@ -1,5 +1,5 @@ EXTRA_DIST = gitcompile README -AM_CFLAGS = @GTK3_CFLAGS@ +AM_CFLAGS = @GTK3_CFLAGS@ -Wno-deprecated-declarations bin_PROGRAMS = hdajackretask man_MANS = hdajackretask_SOURCES = main-gtk.c sysfs-pin-configs.c apply-changes.c diff --git a/hdajackretask/README b/hdajackretask/README index 68f62b1..209e332 100644 --- a/hdajackretask/README +++ b/hdajackretask/README @@ -1,12 +1,12 @@ -Documentation for hda-jack-retask -================================= +Documentation for hdajackretask +=============================== Most HDA Intel soundcards are to some degree retaskable, i e can be used for more than one thing. This tool is a GUI to make it easy to retask your jacks - e g, turn your Mic jack into an extra Headphone, or why not make them both line outs and connect them to your surround receiver? Quickstart ========== -Start the application "hda-jack-retask" from the command line. +Start the application "hdajackretask" from the command line. Select a codec in the top bar; some people have only one - if you have more than one, one is the "main" one, and the rest are probably HDMI codecs. All jacks (and other inputs/outputs) are shown under "Pin configuration". To override one of your jacks, click the "Override" checkbox for that pin and select the desired function. @@ -44,9 +44,11 @@ Options Your BIOS is responsible for setting up what pins on the codec that are actually connected to something and which ones are not. Sometimes BIOS is buggy, and will not show all your jacks. If you have a jack your BIOS says you haven't, you can try enabling random pins and see if it works. * Set Model=auto -Some codecs, especially older ones, are hard-coded to use a specific model, and thus will not care about your overrides. In many cases and with a reasonably new kernel, the auto parser now works well for these codecs as well. You can force the auto parser to be used by checking this box. In some cases, though, the explicit model is there for a reason, if so, you're stuck. +Some codecs, especially older ones and on kernels 3.8 and below, are hard-coded to use a specific model, and thus will not care about your overrides. In many cases and with a reasonably new kernel, the auto parser now works well for these codecs as well. You can force the auto parser to be used by checking this box. In some cases, though, the explicit model is there for a reason, if so, you're stuck. * Advanced override This is for the experts only. It makes you select each configuration field individually, instead of just a few predefined values that make sense. Note that most combinations here are invalid in one way or the other, so you should probably not mess with this unless you have read and understood the "Configuration Default" section of the HD Audio specification. (Which, at the time of this writing, is available here: -http://www.intel.com/content/dam/doc/product-specification/high-definition-audio-specification.pdf ) +http://www.intel.com/content/dam/www/public/us/en/documents/product-specifications/high-definition-audio-specification.pdf ) + * Parser hints +This enables you to send special "hints" to the driver that causes parsing to behave differently. Leave them at the "default" setting unless you have read the driver documentation. ( Which, at the time of this writing, is available here: https://www.kernel.org/doc/Documentation/sound/alsa/HD-Audio.txt - see the "Hint strings" section. ) diff --git a/hdajackretask/apply-changes.c b/hdajackretask/apply-changes.c index 840f649..aa291ce 100644 --- a/hdajackretask/apply-changes.c +++ b/hdajackretask/apply-changes.c @@ -15,6 +15,11 @@ static gchar* tempdir = NULL; static gchar* scriptfile = NULL; static gchar* errorfile = NULL; +static GQuark quark() +{ + return g_quark_from_static_string("hda-jack-retask-error"); +} + static gboolean ensure_tempdir(GError** err) { if (!tempdir) { @@ -29,10 +34,10 @@ static gboolean ensure_tempdir(GError** err) } static gboolean create_reconfig_script(pin_configs_t* pins, int entries, int card, int device, - const char* model, GError** err) + const char* model, const char* hints, GError** err) { gchar* hwdir = g_strdup_printf("/sys/class/sound/hwC%dD%d", card, device); - gchar destbuf[120*40] = "#!/bin/sh\n"; + gchar destbuf[150*40] = "#!/bin/sh\n"; int bufleft = sizeof(destbuf) - strlen(destbuf); gboolean ok = FALSE; gchar* s = destbuf + strlen(destbuf); @@ -44,9 +49,16 @@ static gboolean create_reconfig_script(pin_configs_t* pins, int entries, int car int l = g_snprintf(s, bufleft, "echo \"%s\" | tee %s/modelname 2>>%s\n", model, hwdir, errorfile); bufleft-=l; - s+=l; + s+=l; } - + + if (hints) { + int l = g_snprintf(s, bufleft, "echo \"%s\" | tee %s/hints 2>>%s\n", + hints, hwdir, errorfile); + bufleft-=l; + s+=l; + } + while (entries) { int l = g_snprintf(s, bufleft, "echo \"0x%02x 0x%08x\" | tee %s/user_pin_configs 2>>%s\n", pins->nid, (unsigned int) actual_pin_config(pins), hwdir, errorfile); @@ -57,7 +69,7 @@ static gboolean create_reconfig_script(pin_configs_t* pins, int entries, int car } if (bufleft < g_snprintf(s, bufleft, "echo 1 | tee %s/reconfig 2>>%s", hwdir, errorfile)) { - g_set_error(err, 0, 0, "Bug in %s:%d!", __FILE__, __LINE__); + g_set_error(err, quark(), 0, "Bug in %s:%d!", __FILE__, __LINE__); goto cleanup; } @@ -85,7 +97,7 @@ gboolean run_sudo_script(const gchar* script_name, GError** err) g_chmod(script_name, 0755); g_spawn_command_line_sync(cmdline, NULL, NULL, &exit_status, NULL); if (errorfile && g_file_get_contents(errorfile, &errfilecontents, &errlen, NULL) && errlen) { - g_set_error(err, 0, 0, "%s", errfilecontents); + g_set_error(err, quark(), 0, "%s", errfilecontents); ok = FALSE; } else ok = TRUE; @@ -130,7 +142,7 @@ static gboolean kill_pulseaudio(gboolean* was_killed, int card, GError** err) clientconf = get_pulseaudio_client_conf(); if (!(ok = !g_file_test(clientconf, G_FILE_TEST_EXISTS))) { - g_set_error(err, 0, 0, "Cannot block PulseAudio from respawning:\n" + g_set_error(err, quark(), 0, "Cannot block PulseAudio from respawning:\n" "Please either remove '%s' or kill PulseAudio manually.", clientconf); goto cleanup; } @@ -153,7 +165,7 @@ static gboolean restore_pulseaudio(gboolean was_killed, GError** err) { gchar* clientconf = get_pulseaudio_client_conf(); if (was_killed && g_unlink(clientconf) != 0) { - g_set_error(err, 0, 0, "%s", g_strerror(errno)); + g_set_error(err, quark(), 0, "%s", g_strerror(errno)); g_free(clientconf); return FALSE; } @@ -162,7 +174,7 @@ static gboolean restore_pulseaudio(gboolean was_killed, GError** err) } gboolean apply_changes_reconfig(pin_configs_t* pins, int entries, int card, int device, - const char* model, GError** err) + const char* model, const char* hints, GError** err) { gboolean result = FALSE; // gchar* script_name = NULL; @@ -172,7 +184,7 @@ gboolean apply_changes_reconfig(pin_configs_t* pins, int entries, int card, int if (!kill_pulseaudio(&pa_killed, card, err)) goto cleanup; /* Create script */ - if (!create_reconfig_script(pins, entries, card, device, model, err)) + if (!create_reconfig_script(pins, entries, card, device, model, hints, err)) goto cleanup; /* Run script as root */ if (!run_sudo_script(scriptfile, err)) @@ -187,10 +199,10 @@ cleanup: } static gboolean create_firmware_file(pin_configs_t* pins, int entries, int card, int device, - const char* model, GError** err) + const char* model, const char* hints, GError** err) { gboolean ok; - gchar destbuf[40*40] = ""; + gchar destbuf[40*40+40*24] = ""; gchar* s = destbuf; gchar* filename = g_strdup_printf("%s/hda-jack-retask.fw", tempdir); unsigned int address, codec_vendorid, codec_ssid; @@ -216,6 +228,12 @@ static gboolean create_firmware_file(pin_configs_t* pins, int entries, int card, s+=l; } + if (hints) { + int l = g_snprintf(s, bufleft, "\n[hints]\n%s\n", hints); + bufleft-=l; + s+=l; + } + ok = g_file_set_contents(filename, destbuf, -1, err); g_free(filename); return ok; @@ -238,14 +256,14 @@ static const gchar* install_script = "mv %s/hda-jack-retask.conf /etc/modprobe.d/hda-jack-retask.conf 2>>%s\n"; gboolean apply_changes_boot(pin_configs_t* pins, int entries, int card, int device, - const char* model, GError** err) + const char* model, const char* hints, GError** err) { gchar *s; if (!ensure_tempdir(err)) return FALSE; - if (!create_firmware_file(pins, entries, card, device, model, err)) + if (!create_firmware_file(pins, entries, card, device, model, hints, err)) return FALSE; /* Create hda-jack-retask.conf */ @@ -277,7 +295,7 @@ gboolean reset_changes_boot(GError** err) if ((g_file_test("/etc/modprobe.d/hda-jack-retask.conf", G_FILE_TEST_EXISTS) == 0) && (g_file_test("/lib/firmware/hda-jack-retask.fw", G_FILE_TEST_EXISTS) == 0)) { - g_set_error(err, 0, 0, "No boot override is currently installed, nothing to remove."); + g_set_error(err, quark(), 0, "No boot override is currently installed, nothing to remove."); return FALSE; } diff --git a/hdajackretask/apply-changes.h b/hdajackretask/apply-changes.h index 2507a6a..e08d66d 100644 --- a/hdajackretask/apply-changes.h +++ b/hdajackretask/apply-changes.h @@ -5,10 +5,10 @@ #include gboolean apply_changes_reconfig(pin_configs_t* pins, int entries, int card, int device, - const char* model, GError** err); + const char* model, const char* hints, GError** err); gboolean apply_changes_boot(pin_configs_t* pins, int entries, int card, int device, - const char* model, GError** err); + const char* model, const char* hints, GError** err); gboolean reset_changes_boot(); #endif diff --git a/hdajackretask/main-gtk.c b/hdajackretask/main-gtk.c index 9101af4..f5ff6e4 100644 --- a/hdajackretask/main-gtk.c +++ b/hdajackretask/main-gtk.c @@ -20,6 +20,13 @@ typedef struct pin_ui_data_t { ui_data_t* owner; } pin_ui_data_t; +typedef struct hints_ui_data_t { + gboolean visible; + GtkWidget *frame; + GtkListStore *store; + gchar *values; +} hints_ui_data_t; + struct ui_data_t { GList* pin_ui_data; GtkWidget *main_window; @@ -35,6 +42,8 @@ struct ui_data_t { gboolean trust_codec; gboolean trust_defcfg; gboolean model_auto; + + hints_ui_data_t hints; }; static void update_user_pin_config(ui_data_t* ui, pin_configs_t* cfg); @@ -229,14 +238,44 @@ static void update_all_user_pin_config(ui_data_t* ui) update_user_pin_config(ui, &ui->sysfs_pins[i]); } +static gboolean update_one_hint(GtkTreeModel *model, GtkTreePath *path, + GtkTreeIter *iter, gpointer userdata) +{ + gchar *name, *value; + ui_data_t *ui = userdata; + gtk_tree_model_get(GTK_TREE_MODEL(ui->hints.store), iter, 0, &name, 1, &value, -1); + if (g_strcmp0(value, "default")) { + gchar *s = g_strconcat(name, "=", value, "\n", ui->hints.values, NULL); + g_free(ui->hints.values); + ui->hints.values = s; + } + g_free(name); + g_free(value); + return FALSE; +} + +static void update_hints(ui_data_t* ui) +{ + g_free(ui->hints.values); + ui->hints.values = NULL; + if (ui->hints.visible) + gtk_tree_model_foreach(GTK_TREE_MODEL(ui->hints.store), update_one_hint, ui); +} + +static GQuark quark() +{ + return g_quark_from_static_string("hda-jack-retask-error"); +} + static gboolean validate_user_pin_config(ui_data_t* ui, GError** err) { int i; if (!ui->current_codec) { - g_set_error(err, 0, 0, "You must first select a codec!"); + g_set_error(err, quark(), 0, "You must first select a codec!"); return FALSE; } + update_hints(ui); update_all_user_pin_config(ui); if (ui->free_overrides) return TRUE; @@ -249,21 +288,44 @@ static gboolean validate_user_pin_config(ui_data_t* ui, GError** err) if ((v & 0xf0) != 0x10) continue; if (((v & 0xf) != 0) && !find_pin_channel_match(ui->sysfs_pins, ui->sysfs_pincount, v & 0xf0)) { - g_set_error(err, 0, 0, "This surround setup also requires a \"front\" channel override."); + g_set_error(err, quark(), 0, "This surround setup also requires a \"front\" channel override."); return FALSE; } if (((v & 0xf) >= 3) && !find_pin_channel_match(ui->sysfs_pins, ui->sysfs_pincount, 2 + (v & 0xf0))) { - g_set_error(err, 0, 0, "This surround setup also requires a \"back\" channel override."); + g_set_error(err, quark(), 0, "This surround setup also requires a \"back\" channel override."); return FALSE; } if ((v & 0xf) >= 3 && !find_pin_channel_match(ui->sysfs_pins, ui->sysfs_pincount, 1 + (v & 0xf0))) { - g_set_error(err, 0, 0, "This surround setup also requires a \"Center/LFE\" channel override."); + g_set_error(err, quark(), 0, "This surround setup also requires a \"Center/LFE\" channel override."); return FALSE; } } return TRUE; } +static gboolean update_tree_one_hint(GtkTreeModel *model, GtkTreePath *path, + GtkTreeIter *iter, gpointer userdata) +{ + gchar *name; + ui_data_t *ui = userdata; + gtk_tree_model_get(GTK_TREE_MODEL(ui->hints.store), iter, 0, &name, -1); + gchar *s = strstr(ui->hints.values, name); + if (!s) { + g_free(name); + gtk_list_store_set(ui->hints.store, iter, 1, "default", -1); + return FALSE; + } + s += strlen(name); + while (*s == ' ' || *s == '=') s++; + gchar *s2 = s; + while (*s != '\n' && *s != '\0') s++; + s2 = g_strndup(s2, s - s2); + gtk_list_store_set(ui->hints.store, iter, 1, s2, -1); + g_free(s2); + g_free(name); + return FALSE; +} + static void show_action_result(ui_data_t* ui, GError* err, const gchar* ok_msg) { GtkWidget* dialog; @@ -285,7 +347,7 @@ static void apply_now_clicked(GtkButton* button, gpointer user_data) if (ok) apply_changes_reconfig(ui->sysfs_pins, ui->sysfs_pincount, ui->current_codec->card, ui->current_codec->device, - ui->model_auto ? "auto" : NULL, &err); + ui->model_auto ? "auto" : NULL, ui->hints.values, &err); show_action_result(ui, err, "Ok, now go ahead and test to see if it actually worked!\n" "(Remember, this stuff is still experimental.)"); @@ -299,8 +361,8 @@ static void apply_boot_clicked(GtkButton* button, gpointer user_data) if (ok) apply_changes_boot(ui->sysfs_pins, ui->sysfs_pincount, ui->current_codec->card, ui->current_codec->device, - ui->model_auto ? "auto" : NULL, &err); - show_action_result(ui, err, + ui->model_auto ? "auto" : NULL, ui->hints.values, &err); + show_action_result(ui, err, "Ok, now reboot to test to see if it actually worked!\n" "(Remember, this stuff is still experimental.)"); } @@ -359,15 +421,24 @@ static void update_codec_ui(ui_data_t* ui, bool codec_change) if (codec_index < 0) return; ui->current_codec = &ui->sysfs_codec_names[codec_index]; - if (codec_change) + if (codec_change) { ui->sysfs_pincount = get_pin_configs_list(ui->sysfs_pins, 32, ui->current_codec->card, ui->current_codec->device); + ui->hints.values = get_hint_overrides(ui->current_codec->card, ui->current_codec->device); + gtk_tree_model_foreach(GTK_TREE_MODEL(ui->hints.store), update_tree_one_hint, ui); + } for (i = 0; i < ui->sysfs_pincount; i++) { GtkWidget *w = create_pin_ui(ui, &ui->sysfs_pins[i]); if (w) gtk_container_add(GTK_CONTAINER(ui->content_inner_box), w); } - + gtk_widget_show_all(GTK_WIDGET(ui->content_inner_box)); + + if (ui->hints.visible) + gtk_widget_show_all(ui->hints.frame); + else + gtk_widget_hide(ui->hints.frame); + resize_main_window(ui); } @@ -394,6 +465,32 @@ static void free_override_toggled(GtkWidget* sender, ui_data_t* ui_data) update_codec_ui(ui_data, false); } +static void hints_toggled(GtkWidget* sender, ui_data_t* ui_data) +{ + ui_data->hints.visible = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sender)); + update_codec_ui(ui_data, false); +} + +static void hints_row_activated(GtkTreeView *tree_view, GtkTreePath *path, + GtkTreeViewColumn *column, ui_data_t* ui_data) +{ + GtkTreeIter iter; + gchar *value; + const gchar *newvalue = "default"; + + gtk_tree_model_get_iter(GTK_TREE_MODEL(ui_data->hints.store), &iter, path); + gtk_tree_model_get(GTK_TREE_MODEL(ui_data->hints.store), &iter, 1, &value, -1); + + if (!g_strcmp0(value, "default")) + newvalue = "yes"; + else if (!g_strcmp0(value, "yes")) + newvalue = "no"; + gtk_list_store_set(ui_data->hints.store, &iter, 1, newvalue, -1); + + g_free(value); +} + + static const char* readme_text = #include "README.generated.h" ; @@ -480,6 +577,31 @@ static ui_data_t* create_ui() gtk_box_set_child_packing(GTK_BOX(toplevel_2ndbox), frame, TRUE, TRUE, 2, GTK_PACK_START); } + /* Create hints */ + { + GtkWidget* frame = gtk_frame_new("Hints"); + ui->hints.frame = frame; + + GtkListStore *store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); + ui->hints.store = store; + const gchar** names = get_standard_hint_names(); + for (; *names; names++) { + GtkTreeIter iter; + gtk_list_store_append(store, &iter); + gtk_list_store_set(store, &iter, 0, *names, 1, "default", -1); + } + + GtkWidget *tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); + gtk_tree_view_append_column(GTK_TREE_VIEW(tree), gtk_tree_view_column_new_with_attributes + ("Name", gtk_cell_renderer_text_new(), "text", 0, NULL)); + gtk_tree_view_append_column(GTK_TREE_VIEW(tree), gtk_tree_view_column_new_with_attributes + ("Value", gtk_cell_renderer_text_new(), "text", 1, NULL)); + g_signal_connect(tree, "row-activated", G_CALLBACK(hints_row_activated), ui); + + gtk_container_add(GTK_CONTAINER(frame), tree); + gtk_container_add(toplevel_2ndbox, frame); + } + /* Create settings */ { GtkWidget* frame = gtk_frame_new("Options"); @@ -498,6 +620,10 @@ static ui_data_t* create_ui() g_signal_connect(check, "toggled", G_CALLBACK(free_override_toggled), ui); gtk_container_add(box, check); + check = gtk_check_button_new_with_label("Parser hints"); + g_signal_connect(check, "toggled", G_CALLBACK(hints_toggled), ui); + gtk_container_add(box, check); + gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(box)); gtk_container_add(rightside_box, frame); } diff --git a/hdajackretask/sysfs-pin-configs.c b/hdajackretask/sysfs-pin-configs.c index 5bae0f9..592ffe2 100644 --- a/hdajackretask/sysfs-pin-configs.c +++ b/hdajackretask/sysfs-pin-configs.c @@ -7,6 +7,21 @@ #include "sysfs-pin-configs.h" #include "apply-changes.h" +const gchar *hint_names[25] = { +"jack_detect", "inv_jack_detect", "trigger_sense", "inv_eapd", +"pcm_format_first", "sticky_stream", "spdif_status_reset", +"pin_amp_workaround", "single_adc_amp", "auto_mute", "auto_mic", +"line_in_auto_switch", "auto_mute_via_amp", "need_dac_fix", "primary_hp", +"multi_io", "multi_cap_vol", "inv_dmic_split", "indep_hp", +"add_stereo_mix_input", "add_jack_modes", "power_down_unused", "add_hp_mic", +"hp_mic_detect", NULL }; + +const gchar** get_standard_hint_names() +{ + return hint_names; +} + + int get_codec_name_list(codec_name_t* names, int entries) { GDir* sysdir = g_dir_open("/sys/class/sound", 0, NULL); @@ -117,6 +132,16 @@ static void get_pin_caps(pin_configs_t* pins, int entries, int card, int device) g_free(contents); } +gchar *get_hint_overrides(int card, int device) +{ + gchar* filename = g_strdup_printf("/sys/class/sound/hwC%dD%d/hints", card, device); + gchar* contents = NULL; + int ok = g_file_get_contents(filename, &contents, NULL, NULL); + g_free(filename); + if (!ok) + return NULL; + return contents; +} static void read_pin_overrides(pin_configs_t* pins, int entries, int card, int device, gboolean is_user) { @@ -126,7 +151,7 @@ static void read_pin_overrides(pin_configs_t* pins, int entries, int card, int d int count = 0; int ok = g_file_get_contents(filename, &contents, NULL, NULL); g_free(filename); - if (!ok) + if (!ok) return; line_iterator = lines = g_strsplit(contents, "\n", entries); while (count < entries && *line_iterator) { @@ -151,6 +176,7 @@ static void read_pin_overrides(pin_configs_t* pins, int entries, int card, int d g_strfreev(line); } g_strfreev(lines); + g_free(contents); } int get_pin_configs_list(pin_configs_t* pins, int entries, int card, int device) diff --git a/hdajackretask/sysfs-pin-configs.h b/hdajackretask/sysfs-pin-configs.h index 9a0a902..d198f8b 100644 --- a/hdajackretask/sysfs-pin-configs.h +++ b/hdajackretask/sysfs-pin-configs.h @@ -48,6 +48,10 @@ gchar* get_config_description(unsigned long config); gchar* get_caps_description(unsigned long pin_caps); +const gchar** get_standard_hint_names(); +gchar *get_hint_overrides(int card, int device); + + /* 0 = Jack, 1 = N/A, 2 = Internal, 3 = Both (?!) */ int get_port_conn(unsigned long config); From 7a7d94a031b6b3c605c47de2779b0e03442a8d30 Mon Sep 17 00:00:00 2001 From: David Henningsson Date: Mon, 6 Oct 2014 15:30:03 +0200 Subject: [PATCH 098/166] Add a small "hdajacksensetest" helper I previously had a small python script doing the same thing, but it depended on hda-analyzer, which always breaks when something new is added to the codec proc file. I got tired and rewrote it as a small C program instead, which I hope will be a useful addition to alsa-tools. Signed-off-by: David Henningsson Signed-off-by: Takashi Iwai --- Makefile | 2 +- hdajacksensetest/Makefile.am | 12 +++ hdajacksensetest/configure.ac | 10 ++ hdajacksensetest/gitcompile | 13 +++ hdajacksensetest/hdajacksensetest.c | 146 ++++++++++++++++++++++++++++ 5 files changed, 182 insertions(+), 1 deletion(-) create mode 100644 hdajacksensetest/Makefile.am create mode 100644 hdajacksensetest/configure.ac create mode 100755 hdajacksensetest/gitcompile create mode 100644 hdajacksensetest/hdajacksensetest.c diff --git a/Makefile b/Makefile index b2da046..72f95e2 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ TOP = . SUBDIRS = as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ us428control usx2yloader vxloader echomixer ld10k1 qlo10k1 \ - hwmixvolume hdajackretask hda-verb + hwmixvolume hdajackretask hda-verb hdajacksensetest all: @for i in $(SUBDIRS); do \ diff --git a/hdajacksensetest/Makefile.am b/hdajacksensetest/Makefile.am new file mode 100644 index 0000000..795373c --- /dev/null +++ b/hdajacksensetest/Makefile.am @@ -0,0 +1,12 @@ +MYNAME = hdajacksensetest +AUTOMAKE_OPTIONS = foreign +bin_PROGRAMS = hdajacksensetest +AM_CFLAGS = @GLIB_CFLAGS@ -I "../hdajackretask/" -I "../hda-verb/" +hdajacksensetest_SOURCES = hdajacksensetest.c ../hdajackretask/sysfs-pin-configs.c +hdajacksensetest_LDADD = @GLIB_LIBS@ + +alsa-dist: distdir + @rm -rf ../distdir/$(MYNAME) + @mkdir -p ../distdir/$(MYNAME) + @cp -RLpv $(distdir)/* ../distdir/$(MYNAME) + @rm -rf $(distdir) diff --git a/hdajacksensetest/configure.ac b/hdajacksensetest/configure.ac new file mode 100644 index 0000000..fa9ae8e --- /dev/null +++ b/hdajacksensetest/configure.ac @@ -0,0 +1,10 @@ +AC_INIT(hdajacksensetest, 0.20141006) +AM_INIT_AUTOMAKE(subdir-objects) +AM_MAINTAINER_MODE([enable]) +AC_PROG_CC +AC_PROG_INSTALL +AC_HEADER_STDC + +PKG_CHECK_MODULES([GLIB], [glib-2.0]) + +AC_OUTPUT(Makefile) diff --git a/hdajacksensetest/gitcompile b/hdajacksensetest/gitcompile new file mode 100755 index 0000000..58328bd --- /dev/null +++ b/hdajacksensetest/gitcompile @@ -0,0 +1,13 @@ +#!/bin/bash + +aclocal $ACLOCAL_FLAGS || exit 1 +automake --foreign --add-missing || exit 1 +autoconf || exit 1 +export CFLAGS='-O2 -Wall -pipe -g' +echo "CFLAGS=$CFLAGS" +echo "./configure $@" +./configure $@ || exit 1 +unset CFLAGS +if [ -z "$GITCOMPILE_NO_MAKE" ]; then + make || exit 1 +fi diff --git a/hdajacksensetest/hdajacksensetest.c b/hdajacksensetest/hdajacksensetest.c new file mode 100644 index 0000000..cb8d9cd --- /dev/null +++ b/hdajacksensetest/hdajacksensetest.c @@ -0,0 +1,146 @@ +/* + * Checks the current pin/jack status of the codec + * + * Copyright (c) 2014 David Henningsson, Canonical Ltd. + * (With some minor pieces copy-pasted from hda-verb by Takashi Iwai) + * + * Licensed under GPL v2 or later. + */ + + +#include +#include +#include +#include +#include +#include +#include "sysfs-pin-configs.h" + +#include +#include +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; +#include "hda_hwdep.h" + +gint card_index, codec_index; +gboolean try_all_pins, set_pin_sense; + +static GOptionEntry arg_entries[] = +{ + { "card", 'c', 0, G_OPTION_ARG_INT, &card_index, "card index (as can be seen in /proc/asound/cards)", "X" }, + { "codec", 'd', 0, G_OPTION_ARG_INT, &codec_index, "codec device index (as can be seen in /proc/asound/cardX/codecY)", "Y" }, + { "allpins", 'a', 0, G_OPTION_ARG_NONE, &try_all_pins, "try all pins, even those who (probably) does not have a physical jack", NULL }, + { "setpinsense", 's', 0, G_OPTION_ARG_NONE, &set_pin_sense, "execute 'Set pin sense' before the pin sense is measured", NULL }, + { NULL } +}; + +static void parse_command_line(int argc, char **argv) +{ + GError *error = NULL; + GOptionContext *context = g_option_context_new("- check current jack/pin sense"); + g_option_context_add_main_entries(context, arg_entries, NULL); + if (!g_option_context_parse (context, &argc, &argv, &error)) { + fprintf(stderr, "Option parsing failed: %s\n", error->message); + exit(1); + } + g_option_context_free(context); +} + + +static gboolean should_check_pin(pin_configs_t *pin) +{ + unsigned long defcfg = actual_pin_config(pin); + if (try_all_pins) + return TRUE; + if (get_port_conn(defcfg) != 0) + return FALSE; // Not a jack + if (defcfg & (1 << 8)) // Jack has NO_PRESENCE set + return FALSE; + return TRUE; +} + +int fd; + +static void codec_open() +{ + char filename[64]; + int version = 0; + + snprintf(filename, 64, "/dev/snd/hwC%dD%d", card_index, codec_index); + fd = open(filename, O_RDWR); + if (fd < 0) { + if (errno == EACCES) + fprintf(stderr, "Permission error (hint: this program usually requires root)\n"); + else + fprintf(stderr, "Ioctl call failed with error %d\n", errno); + exit(1); + } + + if (ioctl(fd, HDA_IOCTL_PVERSION, &version) < 0) { + fprintf(stderr, "Ioctl call failed with error %d\n", errno); + fprintf(stderr, "Looks like an invalid hwdep device...\n"); + close(fd); + exit(1); + } + if (version < HDA_HWDEP_VERSION) { + fprintf(stderr, "Invalid version number 0x%x\n", version); + fprintf(stderr, "Looks like an invalid hwdep device...\n"); + close(fd); + exit(1); + } +} + +static unsigned long codec_rw(int nid, int verb, int param) +{ + struct hda_verb_ioctl val; + + val.verb = HDA_VERB(nid, verb, param); + if (ioctl(fd, HDA_IOCTL_VERB_WRITE, &val) < 0) { + fprintf(stderr, "Ioctl call failed with error %d\n", errno); + close(fd); + exit(1); + } + return val.res; +} + +#define AC_VERB_GET_PIN_SENSE 0x0f09 +#define AC_VERB_SET_PIN_SENSE 0x709 + +#define MAX_PINS 32 + +pin_configs_t pin_configs[MAX_PINS]; + +int main(int argc, char **argv) +{ + int pin_count, i; + + parse_command_line(argc, argv); + pin_count = get_pin_configs_list(pin_configs, MAX_PINS, card_index, codec_index); + if (pin_count == 0) { + fprintf(stderr, "No pins found for card %d codec %d, did you pick the right one?\n", card_index, codec_index); + exit(1); + } + + codec_open(); + + if (set_pin_sense) { + for (i = 0; i < pin_count; i++) + if (should_check_pin(&pin_configs[i])) { + codec_rw(pin_configs[i].nid, AC_VERB_SET_PIN_SENSE, 0); + } + sleep(1); + } + + for (i = 0; i < pin_count; i++) + if (should_check_pin(&pin_configs[i])) { + gchar *desc = get_config_description(actual_pin_config(&pin_configs[i])); + unsigned long present = codec_rw(pin_configs[i].nid, AC_VERB_GET_PIN_SENSE, 0); + printf("Pin 0x%.2x (%s): present = %s\n", pin_configs[i].nid, desc, present & 0x80000000 ? "Yes" : "No"); + g_free(desc); + } + + close(fd); + return 0; +} From 9dca16c1fca2294b200d67b54be68ea124e6f394 Mon Sep 17 00:00:00 2001 From: David Henningsson Date: Tue, 13 Jan 2015 09:12:29 +0100 Subject: [PATCH 099/166] hdajackretask: Add dock hp/mic/line to simple options This allows for simpler setting of dock headphone, dock mic, dock line out and dock line in. Also improve detection a bit so that an existing dock headphone shows up as such and not as regular headphone. Signed-off-by: David Henningsson Signed-off-by: Takashi Iwai --- hdajackretask/sysfs-pin-configs.c | 32 +++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/hdajackretask/sysfs-pin-configs.c b/hdajackretask/sysfs-pin-configs.c index 592ffe2..693842f 100644 --- a/hdajackretask/sysfs-pin-configs.c +++ b/hdajackretask/sysfs-pin-configs.c @@ -289,6 +289,8 @@ unsigned long actual_pin_config(pin_configs_t* pins) #define AC_DEFCFG_DEVICE_SHIFT 20 #define AC_DEFCFG_LOCATION (0x3f<<24) #define AC_DEFCFG_LOCATION_SHIFT 24 +#define AC_DEFCFG_GROSSLOC (0x3<<28) +#define AC_DEFCFG_GROSSLOC_SHIFT 28 #define AC_DEFCFG_PORT_CONN (0x3<<30) #define AC_DEFCFG_PORT_CONN_SHIFT 30 @@ -594,21 +596,27 @@ static gboolean disabled_caps(unsigned long pin_caps, unsigned long wid_caps) return TRUE; } +#define DEFAULT_MASK (AC_DEFCFG_PORT_CONN | AC_DEFCFG_GROSSLOC | AC_DEFCFG_DEVICE) + static typical_pins_t simple_typical_pins[] = { - {"Headphone", headphone_caps, 0x0321403f, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE, }, - {"Microphone", extmic_caps, 0x03a19020, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE,}, - {"Line out (Front)", lineout_caps, 0x01014410, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE | AC_DEFCFG_SEQUENCE,}, - {"Line out (Center/LFE)", lineout_caps, 0x01014411, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE | AC_DEFCFG_SEQUENCE,}, - {"Line out (Back)", lineout_caps, 0x01014412, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE | AC_DEFCFG_SEQUENCE,}, - {"Line out (Side)", lineout_caps, 0x01014413, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE | AC_DEFCFG_SEQUENCE,}, - {"Line in", linein_caps, 0x0181344f, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE,}, - {"Internal speaker", lineout_caps, 0x90170150, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE | AC_DEFCFG_SEQUENCE, }, - {"Internal speaker (LFE)", lineout_caps, 0x90170151, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE | AC_DEFCFG_SEQUENCE, }, - {"Internal speaker (Back)", lineout_caps, 0x90170152, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE | AC_DEFCFG_SEQUENCE, }, - {"Internal mic", intmic_caps, 0x90a60160, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE,}, - {"HDMI", hdmi_caps, 0x18560070, AC_DEFCFG_PORT_CONN | AC_DEFCFG_LOCATION,}, + {"Headphone", headphone_caps, 0x0321403f, DEFAULT_MASK, }, + {"Microphone", extmic_caps, 0x03a19020, DEFAULT_MASK,}, + {"Line out (Front)", lineout_caps, 0x01014010, DEFAULT_MASK | AC_DEFCFG_SEQUENCE,}, + {"Line out (Center/LFE)", lineout_caps, 0x01014011, DEFAULT_MASK | AC_DEFCFG_SEQUENCE,}, + {"Line out (Back)", lineout_caps, 0x01014012, DEFAULT_MASK | AC_DEFCFG_SEQUENCE,}, + {"Line out (Side)", lineout_caps, 0x01014013, DEFAULT_MASK | AC_DEFCFG_SEQUENCE,}, + {"Line in", linein_caps, 0x0181304f, DEFAULT_MASK,}, + {"Internal speaker", lineout_caps, 0x90170150, DEFAULT_MASK | AC_DEFCFG_SEQUENCE, }, + {"Internal speaker (LFE)", lineout_caps, 0x90170151, DEFAULT_MASK | AC_DEFCFG_SEQUENCE, }, + {"Internal speaker (Back)", lineout_caps, 0x90170152, DEFAULT_MASK | AC_DEFCFG_SEQUENCE, }, + {"Internal mic", intmic_caps, 0x90a60160, DEFAULT_MASK,}, + {"HDMI / DisplayPort", hdmi_caps, 0x18560070, AC_DEFCFG_PORT_CONN | AC_DEFCFG_LOCATION,}, {"SPDIF out", spdifout_caps, 0x014b1180, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE,}, {"SPDIF in", spdifin_caps, 0x01cb6190, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE,}, + {"Dock Headphone", headphone_caps, 0x222140af, DEFAULT_MASK, }, + {"Dock Microphone", extmic_caps, 0x22a190a0, DEFAULT_MASK,}, + {"Dock Line out", lineout_caps, 0x220140b0, DEFAULT_MASK | AC_DEFCFG_SEQUENCE,}, + {"Dock Line in", linein_caps, 0x228130bf, DEFAULT_MASK,}, {"Not connected", disabled_caps, 0x40f000f0, AC_DEFCFG_PORT_CONN,}, {} }; From 42b826d59f99545f7fe8ee0974a6826a55731b0c Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 26 Feb 2015 13:35:49 +0100 Subject: [PATCH 100/166] Release v1.0.29 Signed-off-by: Jaroslav Kysela --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 72f95e2..dd8898a 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION = 1.0.28 +VERSION = 1.0.29 TOP = . SUBDIRS = as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ From 471ba9b3cfd6242a8670ef6e4f4b876241b0b89e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Aulery?= Date: Wed, 25 Mar 2015 18:38:53 +0100 Subject: [PATCH 101/166] cspctl.1: remove ".LO" macro. This macro don't exist for manpages syntax. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Aulery Signed-off-by: Takashi Iwai --- sb16_csp/cspctl.1 | 1 - 1 file changed, 1 deletion(-) diff --git a/sb16_csp/cspctl.1 b/sb16_csp/cspctl.1 index 10249f8..e9ccf6d 100644 --- a/sb16_csp/cspctl.1 +++ b/sb16_csp/cspctl.1 @@ -1,5 +1,4 @@ .TH cspctl 1 "April 27, 2000" -.LO 1 .SH NAME cspctl \- Sound Blaster 16 ASP/CSP control program From 8a241fa7db659de7066270515f1390a5e7904443 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Fri, 2 Oct 2015 12:38:33 +0200 Subject: [PATCH 102/166] Add some hdajacksensetest/* files to .gitignore Signed-off-by: Takashi Iwai --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 93127b4..3b1f302 100644 --- a/.gitignore +++ b/.gitignore @@ -123,6 +123,9 @@ hdajackretask/configure hdajackretask/Makefile hdajackretask/README.generated.h hdajackretask/hdajackretask +hdajacksensetest/Makefile +hdajacksensetest/configure +hdajacksensetest/hdajacksensetest hda-verb/Makefile hda-verb/configure hda-verb/hda-verb From ed9c1b7b4e82e3ea07044ed019f5bf3862bde60a Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Fri, 2 Oct 2015 12:41:02 +0200 Subject: [PATCH 103/166] Add */compile to .gitignore Recent autotools give more garbages. Signed-off-by: Takashi Iwai --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 3b1f302..120b234 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,7 @@ autom4te.cache stamp-h1 version distdir +*/compile ac3dec/Makefile ac3dec/ac3dec @@ -62,7 +63,6 @@ hdsploader/configure hwmixvolume/Makefile hwmixvolume/configure ld10k1/Makefile -ld10k1/compile ld10k1/ld10k1d ld10k1/configure ld10k1/m4/ From 44f37501714a6f61fc44d36b9d9f1a5cff805696 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 27 Oct 2015 14:34:05 +0100 Subject: [PATCH 104/166] Release v1.1.0 Signed-off-by: Jaroslav Kysela --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index dd8898a..42423ed 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION = 1.0.29 +VERSION = 1.1.0 TOP = . SUBDIRS = as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ From 70118f5f93a4179a0df61925e64baf873f126be0 Mon Sep 17 00:00:00 2001 From: Michel Normand Date: Mon, 20 Jun 2016 15:26:06 +0200 Subject: [PATCH 105/166] gcc6 narrowing error gcc6 narrowing error compiling for PowerPC archi === [ 51s] Cus428Midi.cc: At global scope: [ 51s] Cus428Midi.cc:83:1: error: narrowing conversion of '-1' from 'int' to 'char' inside { } [-Wnarrowing] [ 51s] }; === proposed patch as suggested in https://gcc.gnu.org/gcc-6/porting_to.html Signed-off-by: Michel Normand Signed-off-by: Takashi Iwai --- hdspmixer/src/channelmap.cxx | 158 +++++++++++++++++------------------ us428control/Cus428Midi.cc | 30 +++---- 2 files changed, 94 insertions(+), 94 deletions(-) diff --git a/hdspmixer/src/channelmap.cxx b/hdspmixer/src/channelmap.cxx index b7bdded..bfb136d 100644 --- a/hdspmixer/src/channelmap.cxx +++ b/hdspmixer/src/channelmap.cxx @@ -55,7 +55,7 @@ char channel_map_mf_ss[26] = { 16, 17, 18, 19, 20, 21, 22, 23, /* ADAT */ 24, 25, /* SPDIF */ 26, 27, /* Phones L+R, only a destination channel */ - -1, -1, -1, -1, -1, -1 + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1 }; // Digiface/Multiface @@ -65,13 +65,13 @@ char meter_map_ds[26] = { 16, 17, 18, 19, /* ADAT on Multiface, ADAT3 on Digiface */ 24, 25, /* SPDIF */ 26, 27, /* Headphones */ - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1 }; char channel_map_ds[26] = { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 24, 25, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1 }; char dest_map_ds[8] = { @@ -84,10 +84,10 @@ char dest_map_rpm[3] = { }; char channel_map_rpm[26] = { - 0, 1, 2, 3, 4, 5, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1 + 0, 1, 2, 3, 4, 5, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1 }; // HDSP 9652 @@ -158,21 +158,21 @@ char channel_map_unity_ds[HDSPM_MAX_CHANNELS] = { 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, }; char channel_map_unity_qs[HDSPM_MAX_CHANNELS] = { 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, }; // HDSPe RayDAT @@ -208,10 +208,10 @@ char channel_map_raydat_ss[HDSPM_MAX_CHANNELS] = { 28, 29, 30, 31, 32, 33, 34, 35, /* ADAT 4 */ 0, 1, /* AES */ 2, 3, /* SPDIF */ - -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, + (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, }; char channel_map_raydat_ds[HDSPM_MAX_CHANNELS] = { @@ -221,12 +221,12 @@ char channel_map_raydat_ds[HDSPM_MAX_CHANNELS] = { 16, 17, 18, 19, /* ADAT 4 */ 0, 1, /* AES */ 2, 3, /* SPDIF */ - -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, + (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, }; char channel_map_raydat_qs[HDSPM_MAX_CHANNELS] = { @@ -236,13 +236,13 @@ char channel_map_raydat_qs[HDSPM_MAX_CHANNELS] = { 10, 11, /* ADAT 4 */ 0, 1, /* AES */ 2, 3, /* SPDIF */ - -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, + (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, }; // HDSPe AIO @@ -284,12 +284,12 @@ char channel_map_aio_in_ss[HDSPM_MAX_CHANNELS] = { 10, 11, /* spdif in */ 12, 13, 14, 15, 16, 17, 18, 19, /* ADAT in */ 2, 3, 4, 5, /* AEB */ - -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, }; char channel_map_aio_out_ss[HDSPM_MAX_CHANNELS] = { @@ -299,12 +299,12 @@ char channel_map_aio_out_ss[HDSPM_MAX_CHANNELS] = { 12, 13, 14, 15, 16, 17, 18, 19, /* ADAT out */ 6, 7, /* phone out */ 2, 3, 4, 5, /* AEB */ - -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, + (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, }; char channel_map_aio_in_ds[HDSPM_MAX_CHANNELS] = { @@ -313,13 +313,13 @@ char channel_map_aio_in_ds[HDSPM_MAX_CHANNELS] = { 10, 11, /* spdif in */ 12, 14, 16, 18, /* adat in */ 2, 3, 4, 5, /* AEB */ - -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1 + (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1 }; char channel_map_aio_out_ds[HDSPM_MAX_CHANNELS] = { @@ -329,12 +329,12 @@ char channel_map_aio_out_ds[HDSPM_MAX_CHANNELS] = { 12, 14, 16, 18, /* adat out */ 6, 7, /* phone out */ 2, 3, 4, 5, /* AEB */ - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1 + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1 }; char channel_map_aio_in_qs[HDSPM_MAX_CHANNELS] = { @@ -343,13 +343,13 @@ char channel_map_aio_in_qs[HDSPM_MAX_CHANNELS] = { 10, 11, /* spdif in */ 12, 16, /* adat in */ 2, 3, 4, 5, /* AEB */ - -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1 + (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1 }; char channel_map_aio_out_qs[HDSPM_MAX_CHANNELS] = { @@ -359,13 +359,13 @@ char channel_map_aio_out_qs[HDSPM_MAX_CHANNELS] = { 12, 16, /* adat out */ 6, 7, /* phone out */ 2, 3, 4, 5, /* AEB */ - -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1 + (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1 }; // HDSP AES32 and HDSPe AES @@ -383,11 +383,11 @@ char channel_map_aes32[HDSPM_MAX_CHANNELS] = { 10, 11, /* AES 6 */ 12, 13, /* AES 7 */ 14, 15, /* AES 8 */ - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1 + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1 }; diff --git a/us428control/Cus428Midi.cc b/us428control/Cus428Midi.cc index b9e6783..374eb29 100644 --- a/us428control/Cus428Midi.cc +++ b/us428control/Cus428Midi.cc @@ -32,22 +32,22 @@ char Cus428Midi::KnobParam[] = { 0x2A, 0x29, 0x28, - -1, + (char)-1, 0x10, 0x11, 0x18, 0x19, 0x1A, - -1, - -1, - -1, - -1, + (char)-1, + (char)-1, + (char)-1, + (char)-1, 0x2C, 0x2D, 0x2E, 0x2F, - -1, - -1, + (char)-1, + (char)-1, 0x20, 0x21, 0x22, @@ -64,14 +64,14 @@ char Cus428Midi::KnobParam[] = { 5, 6, 7, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, + (char)-1, + (char)-1, + (char)-1, + (char)-1, + (char)-1, + (char)-1, + (char)-1, + (char)-1, 0x30, 0x31, 0x32, From b01cf309bd040a5922c989150900e0005336807c Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 20 Dec 2016 10:12:29 +0100 Subject: [PATCH 106/166] Release v1.1.3 Signed-off-by: Jaroslav Kysela --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 42423ed..8a47f0c 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION = 1.1.0 +VERSION = 1.1.3 TOP = . SUBDIRS = as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ From e9268227476c08fcefe58f24709ae433c0ab0a45 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Tue, 22 Aug 2017 14:38:10 +0200 Subject: [PATCH 107/166] as10k1: Drop superfluous inline prefix output_tram_line() has a superfluous inline prefix and this interferes the build with clang. Let's drop it. Signed-off-by: Takashi Iwai --- as10k1/as10k1.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/as10k1/as10k1.c b/as10k1/as10k1.c index 96af0c3..e226051 100644 --- a/as10k1/as10k1.c +++ b/as10k1/as10k1.c @@ -366,8 +366,8 @@ void as_exit(const char *message) exit(1); } -inline void output_tram_line( struct list_head *line_head, int type){ - +void output_tram_line(struct list_head *line_head, int type) +{ struct tram *tram_sym; struct list_head *entry; From f0ffe1b732f80abd29cbb319e1feeaa37be5a0a6 Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Sat, 4 Nov 2017 11:28:35 +0900 Subject: [PATCH 108/166] echomixer: obsolete usage of dimension information In current implementation for a series of echoaudio drivers, some control element set delivers information to use element values for multi-dimensional array. Essentially, ALSA control interface of asound.h has no common way to parse the information. As a result, the drivers forces 'echomixer' application to parse the information by several ways. This issue was reported by a commit 51db452df07b ('Revert "ALSA: echoaudio: purge contradictions between dimension matrix members and total number of members"') to Linux kernel. As a result of discussion at Linux miniconference 2017, usage of 'dimen' member of 'struct snd_ctl_elem_info' is going to be deprecated for future removal. According to the above decision, this commit obsoletes usage of 'dimen' information in 'echomixer' application. In a series of echoaudio drivers, a control element set named as 'Channels info' includes duplicated information of the dimension information on value array. Additionally, some of dimension information have fixed values. This commit utilizes them to obsolete usage of dimension information. This patch is tested with Echo Gina 3G. Signed-off-by: Takashi Sakamoto Signed-off-by: Takashi Iwai --- echomixer/echomixer.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/echomixer/echomixer.c b/echomixer/echomixer.c index 54d1520..ac9b51a 100644 --- a/echomixer/echomixer.c +++ b/echomixer/echomixer.c @@ -525,6 +525,25 @@ void GetChannels(void) { nLOut=snd_ctl_elem_value_get_integer(control, 2); // Number of output channels fdOut=snd_ctl_elem_value_get_integer(control, 3); // First digital out nPOut=snd_ctl_elem_value_get_integer(control, 4); // Number of virtual output channels (==nLOut on non-vmixer cards) + + mixerControl.outputs = nLOut; + mixerControl.inputs = nIn; + + if (vmixerId) { + vmixerControl.outputs = nLOut; + vmixerControl.inputs = nPOut; + + /* For outputs and inputs. */ + metersStreams = 2; + } else { + /* For outputs, inputs and system outputs. */ + metersStreams = 3; + } + + /* For the number of channels. */ + metersNumber = 16; + /* For each of levels and peaks. */ + metersTypes = 2; } ClockMask=snd_ctl_elem_value_get_integer(control, 5); // Bitmask of available input clocks } @@ -1712,15 +1731,11 @@ int OpenControls(const char *card, const char *cardname) { if (!mixerId) { mixerId=numid; CTLID_DEBUG(("First Mixer id=%d\n", mixerId)); - mixerControl.outputs=snd_ctl_elem_info_get_dimension(info, 0); - mixerControl.inputs=snd_ctl_elem_info_get_dimension(info, 1); } } else if (!strcmp("VMixer Volume", snd_ctl_elem_id_get_name(id))) { if (!vmixerId) { vmixerId=vmixerControl.id=numid; CTLID_DEBUG(("First Vmixer id=%d\n", vmixerId)); - vmixerControl.outputs=snd_ctl_elem_info_get_dimension(info, 0); - vmixerControl.inputs=snd_ctl_elem_info_get_dimension(info, 1); } } else if (!strcmp("PCM Playback Volume", snd_ctl_elem_id_get_name(id))) { pcmoutId=pcmoutControl.id=numid; @@ -1789,9 +1804,6 @@ int OpenControls(const char *card, const char *cardname) { CTLID_DEBUG(("VU-meter switch id=%d\n", numid)); } else if (!strcmp("VU-meters", snd_ctl_elem_id_get_name(id))) { vumetersId=numid; - metersStreams=snd_ctl_elem_info_get_dimension(info, 0); // 2 or 3: output, input and (vmixer cards only) pcm - metersNumber=snd_ctl_elem_info_get_dimension(info, 1); // Number of channels - metersTypes=snd_ctl_elem_info_get_dimension(info, 2); // 2: level and peak CTLID_DEBUG(("VU-meters id=%d\n", numid)); } else if (!strcmp("Channels info", snd_ctl_elem_id_get_name(id))) { channelsId=numid; From 3f45efedad0230ebe24778a14af09cd2a84fdf70 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 14 Nov 2017 08:52:10 +0100 Subject: [PATCH 109/166] Release v1.1.5 Signed-off-by: Jaroslav Kysela --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 8a47f0c..8497281 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION = 1.1.3 +VERSION = 1.1.5 TOP = . SUBDIRS = as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ From 2639ca055e30859de41cc60545d02b50880ae604 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 14 Nov 2017 10:52:50 +0100 Subject: [PATCH 110/166] hwmixvolume: use python2 directly Signed-off-by: Jaroslav Kysela --- hwmixvolume/hwmixvolume | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hwmixvolume/hwmixvolume b/hwmixvolume/hwmixvolume index f25062b..ef80bc8 100755 --- a/hwmixvolume/hwmixvolume +++ b/hwmixvolume/hwmixvolume @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/python2 # hwmixvolume - ALSA hardware mixer volume control applet # Copyright (c) 2009-2010 Clemens Ladisch From 38f7504af220737b8f503aff821f6bb17d30308a Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 14 Nov 2017 14:46:35 +0100 Subject: [PATCH 111/166] Change FSF address (Franklin Street) Signed-off-by: Jaroslav Kysela --- as10k1/COPYING | 4 ++-- echomixer/COPYING | 4 ++-- echomixer/echomixer.c | 2 +- envy24control/COPYING | 4 ++-- envy24control/driverevents.c | 2 +- envy24control/envy24control.c | 2 +- envy24control/hardware.c | 2 +- envy24control/levelmeters.c | 2 +- envy24control/midi.c | 2 +- envy24control/mixer.c | 2 +- envy24control/patchbay.c | 2 +- envy24control/profiles.c | 2 +- envy24control/strstr_icase_blank.c | 2 +- envy24control/volume.c | 2 +- hda-verb/hda_hwdep.h | 2 +- hdspconf/COPYING | 4 ++-- hdsploader/COPYING | 4 ++-- hdspmixer/COPYING | 4 ++-- ld10k1/COPYING | 4 ++-- ld10k1/COPYING.LIB | 4 ++-- ld10k1/contrib/emu10k1MIDIEffects/freberv.asm | 2 +- ld10k1/contrib/emu10k1MIDIEffects/fv-basstreble.inc | 2 +- ld10k1/contrib/emu10k1MIDIEffects/fv-controls.inc | 2 +- ld10k1/contrib/emu10k1MIDIEffects/fv-filters-reduced.inc | 2 +- ld10k1/contrib/emu10k1MIDIEffects/fv-filters.inc | 2 +- ld10k1/contrib/emu10k1MIDIEffects/fv-routes.inc | 2 +- ld10k1/include/comm.h | 2 +- ld10k1/include/ld10k1_error.h | 2 +- ld10k1/include/ld10k1_fnc.h | 2 +- ld10k1/include/liblo10k1.h | 2 +- ld10k1/include/liblo10k1ef.h | 2 +- ld10k1/include/liblo10k1lf.h | 2 +- ld10k1/include/lo10k1.h | 2 +- ld10k1/src/comm.c | 2 +- ld10k1/src/dl10k1.c | 2 +- ld10k1/src/ld10k1.c | 2 +- ld10k1/src/ld10k1.h | 2 +- ld10k1/src/ld10k1_debug.c | 2 +- ld10k1/src/ld10k1_debug.h | 2 +- ld10k1/src/ld10k1_driver.c | 2 +- ld10k1/src/ld10k1_driver.h | 2 +- ld10k1/src/ld10k1_dump.c | 2 +- ld10k1/src/ld10k1_dump.h | 2 +- ld10k1/src/ld10k1_dump_file.h | 2 +- ld10k1/src/ld10k1_fnc.c | 2 +- ld10k1/src/ld10k1_fnc1.c | 2 +- ld10k1/src/ld10k1_fnc1.h | 2 +- ld10k1/src/ld10k1_fnc_int.h | 2 +- ld10k1/src/ld10k1_mixer.c | 2 +- ld10k1/src/ld10k1_mixer.h | 2 +- ld10k1/src/ld10k1_tram.c | 2 +- ld10k1/src/ld10k1_tram.h | 2 +- ld10k1/src/liblo10k1.c | 2 +- ld10k1/src/liblo10k1ef.c | 2 +- ld10k1/src/liblo10k1lf.c | 2 +- ld10k1/src/lo10k1.c | 2 +- mixartloader/mixartloader.c | 2 +- pcxhrloader/pcxhrloader.c | 2 +- qlo10k1/COPYING | 4 ++-- qlo10k1/src/aboutdialog.cpp | 2 +- qlo10k1/src/aboutdialog.h | 2 +- qlo10k1/src/connectionwizard.cpp | 2 +- qlo10k1/src/connectionwizard.h | 2 +- qlo10k1/src/custom_colors.h | 2 +- qlo10k1/src/filecontroldialog.cpp | 2 +- qlo10k1/src/filecontroldialog.h | 2 +- qlo10k1/src/icons/routing_effect.xpm | 2 +- qlo10k1/src/icons/routing_effect_stack.xpm | 2 +- qlo10k1/src/icons/routing_fx.xpm | 2 +- qlo10k1/src/icons/routing_in.xpm | 2 +- qlo10k1/src/icons/routing_normal.xpm | 2 +- qlo10k1/src/icons/routing_out.xpm | 2 +- qlo10k1/src/icons/routing_route.xpm | 2 +- qlo10k1/src/icons/routing_zoom_minus.xpm | 2 +- qlo10k1/src/icons/routing_zoom_plus.xpm | 2 +- qlo10k1/src/ld10k1file.cpp | 2 +- qlo10k1/src/ld10k1file.h | 2 +- qlo10k1/src/loadpatchdialog.cpp | 2 +- qlo10k1/src/loadpatchdialog.h | 2 +- qlo10k1/src/main.cpp | 2 +- qlo10k1/src/mainwnd.cpp | 2 +- qlo10k1/src/mainwnd.h | 2 +- qlo10k1/src/newiodialog.cpp | 2 +- qlo10k1/src/newiodialog.h | 2 +- qlo10k1/src/patchdialog.cpp | 2 +- qlo10k1/src/patchdialog.h | 2 +- qlo10k1/src/preferences.cpp | 2 +- qlo10k1/src/preferences.h | 2 +- qlo10k1/src/routingwidget.cpp | 2 +- qlo10k1/src/routingwidget.h | 2 +- qlo10k1/src/routingwidget_menu.cpp | 2 +- qlo10k1/src/routingwidget_new.cpp | 2 +- qlo10k1/src/strglobal.cpp | 2 +- qlo10k1/src/strglobal.h | 2 +- qlo10k1/src/strparam.cpp | 2 +- qlo10k1/src/strparam.h | 2 +- qlo10k1/src/structure.cpp | 2 +- qlo10k1/src/structure.h | 2 +- qlo10k1/src/structure_aa.cpp | 2 +- qlo10k1/src/structure_io.cpp | 2 +- qlo10k1/src/structure_io.h | 2 +- qlo10k1/src/structure_link.cpp | 2 +- qlo10k1/src/structure_link.h | 2 +- qlo10k1/src/structure_patch.cpp | 2 +- qlo10k1/src/structure_patch.h | 2 +- qlo10k1/src/transformpatchdialog.cpp | 2 +- qlo10k1/src/transformpatchdialog.h | 2 +- rmedigicontrol/COPYING | 4 ++-- sb16_csp/COPYING | 4 ++-- sb16_csp/cspctl.c | 2 +- seq/sbiload/COPYING | 4 ++-- seq/sbiload/sbiload.c | 2 +- sscape_ctl/sscape_ctl.c | 2 +- us428control/Cus428Midi.cc | 2 +- us428control/Cus428Midi.h | 2 +- us428control/Cus428State.cc | 2 +- us428control/Cus428State.h | 2 +- us428control/Cus428_ctls.cc | 2 +- us428control/Cus428_ctls.h | 2 +- us428control/us428control.cc | 2 +- us428control/usbus428ctldefs.h | 2 +- usx2yloader/usx2yloader.c | 2 +- vxloader/vxloader.c | 2 +- 123 files changed, 135 insertions(+), 135 deletions(-) diff --git a/as10k1/COPYING b/as10k1/COPYING index 5b6e7c6..b74ec10 100644 --- a/as10k1/COPYING +++ b/as10k1/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/echomixer/COPYING b/echomixer/COPYING index d60c31a..623b625 100644 --- a/echomixer/COPYING +++ b/echomixer/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/echomixer/echomixer.c b/echomixer/echomixer.c index ac9b51a..4946a5d 100644 --- a/echomixer/echomixer.c +++ b/echomixer/echomixer.c @@ -13,7 +13,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #define EM_VERSION "%s Echomixer v" VERSION diff --git a/envy24control/COPYING b/envy24control/COPYING index 5b6e7c6..c13faf0 100644 --- a/envy24control/COPYING +++ b/envy24control/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/envy24control/driverevents.c b/envy24control/driverevents.c index a05cc35..377363d 100644 --- a/envy24control/driverevents.c +++ b/envy24control/driverevents.c @@ -14,7 +14,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ******************************************************************************/ #include "envy24control.h" diff --git a/envy24control/envy24control.c b/envy24control/envy24control.c index 0b2749e..107a843 100644 --- a/envy24control/envy24control.c +++ b/envy24control/envy24control.c @@ -24,7 +24,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ******************************************************************************/ #include "envy24control.h" diff --git a/envy24control/hardware.c b/envy24control/hardware.c index 73e3f0a..7e0094e 100644 --- a/envy24control/hardware.c +++ b/envy24control/hardware.c @@ -14,7 +14,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ******************************************************************************/ #include "envy24control.h" diff --git a/envy24control/levelmeters.c b/envy24control/levelmeters.c index fa44979..24e00db 100644 --- a/envy24control/levelmeters.c +++ b/envy24control/levelmeters.c @@ -14,7 +14,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ******************************************************************************/ #include "envy24control.h" diff --git a/envy24control/midi.c b/envy24control/midi.c index 327f6cf..ff12537 100644 --- a/envy24control/midi.c +++ b/envy24control/midi.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ******************************************************************************/ #include diff --git a/envy24control/mixer.c b/envy24control/mixer.c index f2b4e9a..dd42681 100644 --- a/envy24control/mixer.c +++ b/envy24control/mixer.c @@ -14,7 +14,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ******************************************************************************/ #include "envy24control.h" diff --git a/envy24control/patchbay.c b/envy24control/patchbay.c index 88f697d..89bdf72 100644 --- a/envy24control/patchbay.c +++ b/envy24control/patchbay.c @@ -14,7 +14,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ******************************************************************************/ #include "envy24control.h" diff --git a/envy24control/profiles.c b/envy24control/profiles.c index 443e475..8e23bfd 100644 --- a/envy24control/profiles.c +++ b/envy24control/profiles.c @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/envy24control/strstr_icase_blank.c b/envy24control/strstr_icase_blank.c index 4c325cf..8078d2a 100644 --- a/envy24control/strstr_icase_blank.c +++ b/envy24control/strstr_icase_blank.c @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/envy24control/volume.c b/envy24control/volume.c index 4386e35..471f9ce 100644 --- a/envy24control/volume.c +++ b/envy24control/volume.c @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "envy24control.h" diff --git a/hda-verb/hda_hwdep.h b/hda-verb/hda_hwdep.h index 1c0034e..c603724 100644 --- a/hda-verb/hda_hwdep.h +++ b/hda-verb/hda_hwdep.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __SOUND_HDA_HWDEP_H diff --git a/hdspconf/COPYING b/hdspconf/COPYING index d60c31a..623b625 100644 --- a/hdspconf/COPYING +++ b/hdspconf/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/hdsploader/COPYING b/hdsploader/COPYING index d60c31a..623b625 100644 --- a/hdsploader/COPYING +++ b/hdsploader/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/hdspmixer/COPYING b/hdspmixer/COPYING index d60c31a..623b625 100644 --- a/hdspmixer/COPYING +++ b/hdspmixer/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/ld10k1/COPYING b/ld10k1/COPYING index d60c31a..623b625 100644 --- a/ld10k1/COPYING +++ b/ld10k1/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/ld10k1/COPYING.LIB b/ld10k1/COPYING.LIB index b1e3f5a..ae23fcf 100644 --- a/ld10k1/COPYING.LIB +++ b/ld10k1/COPYING.LIB @@ -2,7 +2,7 @@ Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -485,7 +485,7 @@ convey the exclusion of warranty; and each file should have at least the You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/ld10k1/contrib/emu10k1MIDIEffects/freberv.asm b/ld10k1/contrib/emu10k1MIDIEffects/freberv.asm index 3fe1b9e..a7f91b1 100644 --- a/ld10k1/contrib/emu10k1MIDIEffects/freberv.asm +++ b/ld10k1/contrib/emu10k1MIDIEffects/freberv.asm @@ -15,7 +15,7 @@ ;; ;; You should have received a copy of the GNU General Public License ;; along with this program; if not, write to the Free Software -;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ;; ;; $Id: fv10k1.m4,v 1.1 2001/09/28 01:56:20 dbertrand Exp $ diff --git a/ld10k1/contrib/emu10k1MIDIEffects/fv-basstreble.inc b/ld10k1/contrib/emu10k1MIDIEffects/fv-basstreble.inc index e727673..d4d7216 100644 --- a/ld10k1/contrib/emu10k1MIDIEffects/fv-basstreble.inc +++ b/ld10k1/contrib/emu10k1MIDIEffects/fv-basstreble.inc @@ -16,7 +16,7 @@ ;; ;; You should have received a copy of the GNU General Public License ;; along with this program; if not, write to the Free Software -;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ;; ;; $Id: fv-basstreble.inc,v 1.1 2001/09/28 01:56:20 dbertrand Exp $ diff --git a/ld10k1/contrib/emu10k1MIDIEffects/fv-controls.inc b/ld10k1/contrib/emu10k1MIDIEffects/fv-controls.inc index d2ac8cb..749a4b1 100644 --- a/ld10k1/contrib/emu10k1MIDIEffects/fv-controls.inc +++ b/ld10k1/contrib/emu10k1MIDIEffects/fv-controls.inc @@ -15,7 +15,7 @@ ;; ;; You should have received a copy of the GNU General Public License ;; along with this program; if not, write to the Free Software -;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ;; ;; $Id: fv-controls.inc,v 1.1 2001/09/28 01:56:20 dbertrand Exp $ diff --git a/ld10k1/contrib/emu10k1MIDIEffects/fv-filters-reduced.inc b/ld10k1/contrib/emu10k1MIDIEffects/fv-filters-reduced.inc index e7357cd..bd50b2f 100644 --- a/ld10k1/contrib/emu10k1MIDIEffects/fv-filters-reduced.inc +++ b/ld10k1/contrib/emu10k1MIDIEffects/fv-filters-reduced.inc @@ -15,7 +15,7 @@ ;; ;; You should have received a copy of the GNU General Public License ;; along with this program; if not, write to the Free Software -;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ;; ;; $Id: fv-filters.m4,v 1.1 2001/09/28 01:56:20 dbertrand Exp $ diff --git a/ld10k1/contrib/emu10k1MIDIEffects/fv-filters.inc b/ld10k1/contrib/emu10k1MIDIEffects/fv-filters.inc index 12ee8a0..84c2b06 100644 --- a/ld10k1/contrib/emu10k1MIDIEffects/fv-filters.inc +++ b/ld10k1/contrib/emu10k1MIDIEffects/fv-filters.inc @@ -15,7 +15,7 @@ ;; ;; You should have received a copy of the GNU General Public License ;; along with this program; if not, write to the Free Software -;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ;; ;; $Id: fv-filters.m4,v 1.1 2001/09/28 01:56:20 dbertrand Exp $ diff --git a/ld10k1/contrib/emu10k1MIDIEffects/fv-routes.inc b/ld10k1/contrib/emu10k1MIDIEffects/fv-routes.inc index a45a9cb..a4ea931 100644 --- a/ld10k1/contrib/emu10k1MIDIEffects/fv-routes.inc +++ b/ld10k1/contrib/emu10k1MIDIEffects/fv-routes.inc @@ -15,7 +15,7 @@ ;; ;; You should have received a copy of the GNU General Public License ;; along with this program; if not, write to the Free Software -;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ;; ;; $Id: fv-routes.inc,v 1.1 2001/09/28 01:56:20 dbertrand Exp $ diff --git a/ld10k1/include/comm.h b/ld10k1/include/comm.h index 2293aaa..e8f2458 100644 --- a/ld10k1/include/comm.h +++ b/ld10k1/include/comm.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/include/ld10k1_error.h b/ld10k1/include/ld10k1_error.h index a36ba78..9f7d455 100644 --- a/ld10k1/include/ld10k1_error.h +++ b/ld10k1/include/ld10k1_error.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/include/ld10k1_fnc.h b/ld10k1/include/ld10k1_fnc.h index b027336..c296ac6 100644 --- a/ld10k1/include/ld10k1_fnc.h +++ b/ld10k1/include/ld10k1_fnc.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/include/liblo10k1.h b/ld10k1/include/liblo10k1.h index 9f57850..2cc12c0 100644 --- a/ld10k1/include/liblo10k1.h +++ b/ld10k1/include/liblo10k1.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/include/liblo10k1ef.h b/ld10k1/include/liblo10k1ef.h index fb95025..8c233e3 100644 --- a/ld10k1/include/liblo10k1ef.h +++ b/ld10k1/include/liblo10k1ef.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/include/liblo10k1lf.h b/ld10k1/include/liblo10k1lf.h index c51bb44..3207321 100644 --- a/ld10k1/include/liblo10k1lf.h +++ b/ld10k1/include/liblo10k1lf.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/include/lo10k1.h b/ld10k1/include/lo10k1.h index 67a8af1..d3ab084 100644 --- a/ld10k1/include/lo10k1.h +++ b/ld10k1/include/lo10k1.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/comm.c b/ld10k1/src/comm.c index f010e20..a9d2965 100644 --- a/ld10k1/src/comm.c +++ b/ld10k1/src/comm.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/dl10k1.c b/ld10k1/src/dl10k1.c index 7ca3f43..42d54a1 100644 --- a/ld10k1/src/dl10k1.c +++ b/ld10k1/src/dl10k1.c @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1.c b/ld10k1/src/ld10k1.c index e31c5af..b0b5a9b 100644 --- a/ld10k1/src/ld10k1.c +++ b/ld10k1/src/ld10k1.c @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1.h b/ld10k1/src/ld10k1.h index aa10304..7654e82 100644 --- a/ld10k1/src/ld10k1.h +++ b/ld10k1/src/ld10k1.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_debug.c b/ld10k1/src/ld10k1_debug.c index 6ba0ec6..2b98160 100644 --- a/ld10k1/src/ld10k1_debug.c +++ b/ld10k1/src/ld10k1_debug.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_debug.h b/ld10k1/src/ld10k1_debug.h index 519eab3..aa015c1 100644 --- a/ld10k1/src/ld10k1_debug.h +++ b/ld10k1/src/ld10k1_debug.h @@ -14,7 +14,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_driver.c b/ld10k1/src/ld10k1_driver.c index c22418e..38ee873 100644 --- a/ld10k1/src/ld10k1_driver.c +++ b/ld10k1/src/ld10k1_driver.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_driver.h b/ld10k1/src/ld10k1_driver.h index 2a3bc4d..13b2840 100644 --- a/ld10k1/src/ld10k1_driver.h +++ b/ld10k1/src/ld10k1_driver.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_dump.c b/ld10k1/src/ld10k1_dump.c index f2167b0..f4cab49 100644 --- a/ld10k1/src/ld10k1_dump.c +++ b/ld10k1/src/ld10k1_dump.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_dump.h b/ld10k1/src/ld10k1_dump.h index f5e50ef..bf04c8c 100644 --- a/ld10k1/src/ld10k1_dump.h +++ b/ld10k1/src/ld10k1_dump.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_dump_file.h b/ld10k1/src/ld10k1_dump_file.h index 6a2a5fb..aa4a6be 100644 --- a/ld10k1/src/ld10k1_dump_file.h +++ b/ld10k1/src/ld10k1_dump_file.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_fnc.c b/ld10k1/src/ld10k1_fnc.c index bf4c28a..c88f4c0 100644 --- a/ld10k1/src/ld10k1_fnc.c +++ b/ld10k1/src/ld10k1_fnc.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_fnc1.c b/ld10k1/src/ld10k1_fnc1.c index ff8010a..343584c 100644 --- a/ld10k1/src/ld10k1_fnc1.c +++ b/ld10k1/src/ld10k1_fnc1.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_fnc1.h b/ld10k1/src/ld10k1_fnc1.h index 696abc8..81e1714 100644 --- a/ld10k1/src/ld10k1_fnc1.h +++ b/ld10k1/src/ld10k1_fnc1.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_fnc_int.h b/ld10k1/src/ld10k1_fnc_int.h index b7e4af7..d5961d0 100644 --- a/ld10k1/src/ld10k1_fnc_int.h +++ b/ld10k1/src/ld10k1_fnc_int.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_mixer.c b/ld10k1/src/ld10k1_mixer.c index 772b98c..20db26e 100644 --- a/ld10k1/src/ld10k1_mixer.c +++ b/ld10k1/src/ld10k1_mixer.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_mixer.h b/ld10k1/src/ld10k1_mixer.h index e1251bc..50b86ce 100644 --- a/ld10k1/src/ld10k1_mixer.h +++ b/ld10k1/src/ld10k1_mixer.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_tram.c b/ld10k1/src/ld10k1_tram.c index 840f552..1272ca3 100644 --- a/ld10k1/src/ld10k1_tram.c +++ b/ld10k1/src/ld10k1_tram.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_tram.h b/ld10k1/src/ld10k1_tram.h index 380f8e0..871282a 100644 --- a/ld10k1/src/ld10k1_tram.h +++ b/ld10k1/src/ld10k1_tram.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/liblo10k1.c b/ld10k1/src/liblo10k1.c index 8861876..afe37a4 100644 --- a/ld10k1/src/liblo10k1.c +++ b/ld10k1/src/liblo10k1.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/liblo10k1ef.c b/ld10k1/src/liblo10k1ef.c index c01ac58..84fda78 100644 --- a/ld10k1/src/liblo10k1ef.c +++ b/ld10k1/src/liblo10k1ef.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/liblo10k1lf.c b/ld10k1/src/liblo10k1lf.c index 3cb1ffc..132d3fe 100644 --- a/ld10k1/src/liblo10k1lf.c +++ b/ld10k1/src/liblo10k1lf.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/lo10k1.c b/ld10k1/src/lo10k1.c index 962c3ef..93a9369 100644 --- a/ld10k1/src/lo10k1.c +++ b/ld10k1/src/lo10k1.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/mixartloader/mixartloader.c b/mixartloader/mixartloader.c index 663ca32..f34ed58 100644 --- a/mixartloader/mixartloader.c +++ b/mixartloader/mixartloader.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include diff --git a/pcxhrloader/pcxhrloader.c b/pcxhrloader/pcxhrloader.c index a5ef079..de9420e 100644 --- a/pcxhrloader/pcxhrloader.c +++ b/pcxhrloader/pcxhrloader.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include diff --git a/qlo10k1/COPYING b/qlo10k1/COPYING index 5b6e7c6..c13faf0 100644 --- a/qlo10k1/COPYING +++ b/qlo10k1/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/qlo10k1/src/aboutdialog.cpp b/qlo10k1/src/aboutdialog.cpp index ab34666..a32b488 100644 --- a/qlo10k1/src/aboutdialog.cpp +++ b/qlo10k1/src/aboutdialog.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/aboutdialog.h b/qlo10k1/src/aboutdialog.h index b72ca18..3f29622 100644 --- a/qlo10k1/src/aboutdialog.h +++ b/qlo10k1/src/aboutdialog.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/connectionwizard.cpp b/qlo10k1/src/connectionwizard.cpp index 25aef79..6c3a8fd 100644 --- a/qlo10k1/src/connectionwizard.cpp +++ b/qlo10k1/src/connectionwizard.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/connectionwizard.h b/qlo10k1/src/connectionwizard.h index 0db31ec..d04fa38 100644 --- a/qlo10k1/src/connectionwizard.h +++ b/qlo10k1/src/connectionwizard.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/custom_colors.h b/qlo10k1/src/custom_colors.h index 6acef2f..62f8aaf 100644 --- a/qlo10k1/src/custom_colors.h +++ b/qlo10k1/src/custom_colors.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/filecontroldialog.cpp b/qlo10k1/src/filecontroldialog.cpp index 3776f6d..37fae6a 100644 --- a/qlo10k1/src/filecontroldialog.cpp +++ b/qlo10k1/src/filecontroldialog.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/filecontroldialog.h b/qlo10k1/src/filecontroldialog.h index 7a69230..c4591b6 100644 --- a/qlo10k1/src/filecontroldialog.h +++ b/qlo10k1/src/filecontroldialog.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/icons/routing_effect.xpm b/qlo10k1/src/icons/routing_effect.xpm index a83c5f1..e0f7961 100644 --- a/qlo10k1/src/icons/routing_effect.xpm +++ b/qlo10k1/src/icons/routing_effect.xpm @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/icons/routing_effect_stack.xpm b/qlo10k1/src/icons/routing_effect_stack.xpm index 0a1ed97..7a207e1 100644 --- a/qlo10k1/src/icons/routing_effect_stack.xpm +++ b/qlo10k1/src/icons/routing_effect_stack.xpm @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/icons/routing_fx.xpm b/qlo10k1/src/icons/routing_fx.xpm index a8becfa..958625f 100644 --- a/qlo10k1/src/icons/routing_fx.xpm +++ b/qlo10k1/src/icons/routing_fx.xpm @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/icons/routing_in.xpm b/qlo10k1/src/icons/routing_in.xpm index 7f0858a..7ba3940 100644 --- a/qlo10k1/src/icons/routing_in.xpm +++ b/qlo10k1/src/icons/routing_in.xpm @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/icons/routing_normal.xpm b/qlo10k1/src/icons/routing_normal.xpm index 2eaf424..3336ef1 100644 --- a/qlo10k1/src/icons/routing_normal.xpm +++ b/qlo10k1/src/icons/routing_normal.xpm @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/icons/routing_out.xpm b/qlo10k1/src/icons/routing_out.xpm index 8a9fb22..bde1fd0 100644 --- a/qlo10k1/src/icons/routing_out.xpm +++ b/qlo10k1/src/icons/routing_out.xpm @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/icons/routing_route.xpm b/qlo10k1/src/icons/routing_route.xpm index a771bbe..d7b6cfe 100644 --- a/qlo10k1/src/icons/routing_route.xpm +++ b/qlo10k1/src/icons/routing_route.xpm @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/icons/routing_zoom_minus.xpm b/qlo10k1/src/icons/routing_zoom_minus.xpm index 0fc331b..baa0ea3 100644 --- a/qlo10k1/src/icons/routing_zoom_minus.xpm +++ b/qlo10k1/src/icons/routing_zoom_minus.xpm @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/icons/routing_zoom_plus.xpm b/qlo10k1/src/icons/routing_zoom_plus.xpm index a694cde..f5aabc9 100644 --- a/qlo10k1/src/icons/routing_zoom_plus.xpm +++ b/qlo10k1/src/icons/routing_zoom_plus.xpm @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/ld10k1file.cpp b/qlo10k1/src/ld10k1file.cpp index c85e709..ecb4870 100644 --- a/qlo10k1/src/ld10k1file.cpp +++ b/qlo10k1/src/ld10k1file.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/ld10k1file.h b/qlo10k1/src/ld10k1file.h index c22f0bd..068b8d0 100644 --- a/qlo10k1/src/ld10k1file.h +++ b/qlo10k1/src/ld10k1file.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/loadpatchdialog.cpp b/qlo10k1/src/loadpatchdialog.cpp index 5cf6721..f3d9a8e 100644 --- a/qlo10k1/src/loadpatchdialog.cpp +++ b/qlo10k1/src/loadpatchdialog.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/loadpatchdialog.h b/qlo10k1/src/loadpatchdialog.h index 832a029..6522c55 100644 --- a/qlo10k1/src/loadpatchdialog.h +++ b/qlo10k1/src/loadpatchdialog.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/main.cpp b/qlo10k1/src/main.cpp index b156d57..61c0c5a 100644 --- a/qlo10k1/src/main.cpp +++ b/qlo10k1/src/main.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/mainwnd.cpp b/qlo10k1/src/mainwnd.cpp index c7372ba..0f6fd6e 100644 --- a/qlo10k1/src/mainwnd.cpp +++ b/qlo10k1/src/mainwnd.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/mainwnd.h b/qlo10k1/src/mainwnd.h index 50eec11..4b4aba7 100644 --- a/qlo10k1/src/mainwnd.h +++ b/qlo10k1/src/mainwnd.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/newiodialog.cpp b/qlo10k1/src/newiodialog.cpp index 81453a9..58cfcba 100644 --- a/qlo10k1/src/newiodialog.cpp +++ b/qlo10k1/src/newiodialog.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/newiodialog.h b/qlo10k1/src/newiodialog.h index 29df240..c33081b 100644 --- a/qlo10k1/src/newiodialog.h +++ b/qlo10k1/src/newiodialog.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/patchdialog.cpp b/qlo10k1/src/patchdialog.cpp index 035c763..81ea7d2 100644 --- a/qlo10k1/src/patchdialog.cpp +++ b/qlo10k1/src/patchdialog.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/patchdialog.h b/qlo10k1/src/patchdialog.h index adbf891..3aa82be 100644 --- a/qlo10k1/src/patchdialog.h +++ b/qlo10k1/src/patchdialog.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/preferences.cpp b/qlo10k1/src/preferences.cpp index 913a28b..d7a78e1 100644 --- a/qlo10k1/src/preferences.cpp +++ b/qlo10k1/src/preferences.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/preferences.h b/qlo10k1/src/preferences.h index 640672d..94dd6cd 100644 --- a/qlo10k1/src/preferences.h +++ b/qlo10k1/src/preferences.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/routingwidget.cpp b/qlo10k1/src/routingwidget.cpp index ef96cf9..9af85eb 100644 --- a/qlo10k1/src/routingwidget.cpp +++ b/qlo10k1/src/routingwidget.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/routingwidget.h b/qlo10k1/src/routingwidget.h index 9e4b6a8..c9bff50 100644 --- a/qlo10k1/src/routingwidget.h +++ b/qlo10k1/src/routingwidget.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/routingwidget_menu.cpp b/qlo10k1/src/routingwidget_menu.cpp index dc913ee..b2dd0e2 100644 --- a/qlo10k1/src/routingwidget_menu.cpp +++ b/qlo10k1/src/routingwidget_menu.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/routingwidget_new.cpp b/qlo10k1/src/routingwidget_new.cpp index 34d708b..ca7273f 100644 --- a/qlo10k1/src/routingwidget_new.cpp +++ b/qlo10k1/src/routingwidget_new.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/strglobal.cpp b/qlo10k1/src/strglobal.cpp index e5bc7d9..2682702 100644 --- a/qlo10k1/src/strglobal.cpp +++ b/qlo10k1/src/strglobal.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/strglobal.h b/qlo10k1/src/strglobal.h index d988de5..9a6b118 100644 --- a/qlo10k1/src/strglobal.h +++ b/qlo10k1/src/strglobal.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/strparam.cpp b/qlo10k1/src/strparam.cpp index b042d75..83066bc 100644 --- a/qlo10k1/src/strparam.cpp +++ b/qlo10k1/src/strparam.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/strparam.h b/qlo10k1/src/strparam.h index 7ceef2c..5c1678e 100644 --- a/qlo10k1/src/strparam.h +++ b/qlo10k1/src/strparam.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/structure.cpp b/qlo10k1/src/structure.cpp index 57d5c6e..034d707 100644 --- a/qlo10k1/src/structure.cpp +++ b/qlo10k1/src/structure.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/structure.h b/qlo10k1/src/structure.h index 3342fa0..380ee17 100644 --- a/qlo10k1/src/structure.h +++ b/qlo10k1/src/structure.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/structure_aa.cpp b/qlo10k1/src/structure_aa.cpp index d0bddb9..277a089 100644 --- a/qlo10k1/src/structure_aa.cpp +++ b/qlo10k1/src/structure_aa.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/structure_io.cpp b/qlo10k1/src/structure_io.cpp index 466b023..61df365 100644 --- a/qlo10k1/src/structure_io.cpp +++ b/qlo10k1/src/structure_io.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/structure_io.h b/qlo10k1/src/structure_io.h index 728647c..c9fa5aa 100644 --- a/qlo10k1/src/structure_io.h +++ b/qlo10k1/src/structure_io.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/structure_link.cpp b/qlo10k1/src/structure_link.cpp index bd7e7bb..381fff6 100644 --- a/qlo10k1/src/structure_link.cpp +++ b/qlo10k1/src/structure_link.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/structure_link.h b/qlo10k1/src/structure_link.h index dc5c00f..d6f27ca 100644 --- a/qlo10k1/src/structure_link.h +++ b/qlo10k1/src/structure_link.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/structure_patch.cpp b/qlo10k1/src/structure_patch.cpp index 0fa1871..7d1041a 100644 --- a/qlo10k1/src/structure_patch.cpp +++ b/qlo10k1/src/structure_patch.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/structure_patch.h b/qlo10k1/src/structure_patch.h index 1e66336..00efbe7 100644 --- a/qlo10k1/src/structure_patch.h +++ b/qlo10k1/src/structure_patch.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/transformpatchdialog.cpp b/qlo10k1/src/transformpatchdialog.cpp index 9313053..05c171a 100644 --- a/qlo10k1/src/transformpatchdialog.cpp +++ b/qlo10k1/src/transformpatchdialog.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/transformpatchdialog.h b/qlo10k1/src/transformpatchdialog.h index 8962180..88a1603 100644 --- a/qlo10k1/src/transformpatchdialog.h +++ b/qlo10k1/src/transformpatchdialog.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/rmedigicontrol/COPYING b/rmedigicontrol/COPYING index 5b6e7c6..c13faf0 100644 --- a/rmedigicontrol/COPYING +++ b/rmedigicontrol/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/sb16_csp/COPYING b/sb16_csp/COPYING index 5b6e7c6..c13faf0 100644 --- a/sb16_csp/COPYING +++ b/sb16_csp/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/sb16_csp/cspctl.c b/sb16_csp/cspctl.c index 3fd1d3f..d29fa12 100644 --- a/sb16_csp/cspctl.c +++ b/sb16_csp/cspctl.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/seq/sbiload/COPYING b/seq/sbiload/COPYING index 5b6e7c6..c13faf0 100644 --- a/seq/sbiload/COPYING +++ b/seq/sbiload/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/seq/sbiload/sbiload.c b/seq/sbiload/sbiload.c index 7465a82..2315974 100644 --- a/seq/sbiload/sbiload.c +++ b/seq/sbiload/sbiload.c @@ -14,7 +14,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * * Oct. 2007 - Takashi Iwai diff --git a/sscape_ctl/sscape_ctl.c b/sscape_ctl/sscape_ctl.c index 0bea604..4239757 100644 --- a/sscape_ctl/sscape_ctl.c +++ b/sscape_ctl/sscape_ctl.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include diff --git a/us428control/Cus428Midi.cc b/us428control/Cus428Midi.cc index 374eb29..455ee90 100644 --- a/us428control/Cus428Midi.cc +++ b/us428control/Cus428Midi.cc @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include diff --git a/us428control/Cus428Midi.h b/us428control/Cus428Midi.h index 63c91e7..1c1a220 100644 --- a/us428control/Cus428Midi.h +++ b/us428control/Cus428Midi.h @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "Cus428State.h" diff --git a/us428control/Cus428State.cc b/us428control/Cus428State.cc index 280c21d..70131bc 100644 --- a/us428control/Cus428State.cc +++ b/us428control/Cus428State.cc @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include diff --git a/us428control/Cus428State.h b/us428control/Cus428State.h index 657e656..af08096 100644 --- a/us428control/Cus428State.h +++ b/us428control/Cus428State.h @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef Cus428State_h diff --git a/us428control/Cus428_ctls.cc b/us428control/Cus428_ctls.cc index 3d59aba..bfac10f 100644 --- a/us428control/Cus428_ctls.cc +++ b/us428control/Cus428_ctls.cc @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include diff --git a/us428control/Cus428_ctls.h b/us428control/Cus428_ctls.h index 29da790..695f342 100644 --- a/us428control/Cus428_ctls.h +++ b/us428control/Cus428_ctls.h @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef Cus428_ctls_h diff --git a/us428control/us428control.cc b/us428control/us428control.cc index 3163402..e839bf4 100644 --- a/us428control/us428control.cc +++ b/us428control/us428control.cc @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include diff --git a/us428control/usbus428ctldefs.h b/us428control/usbus428ctldefs.h index 1063bae..f698e38 100644 --- a/us428control/usbus428ctldefs.h +++ b/us428control/usbus428ctldefs.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef __cplusplus diff --git a/usx2yloader/usx2yloader.c b/usx2yloader/usx2yloader.c index ab76acc..61583c2 100644 --- a/usx2yloader/usx2yloader.c +++ b/usx2yloader/usx2yloader.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include diff --git a/vxloader/vxloader.c b/vxloader/vxloader.c index 6539674..69d654d 100644 --- a/vxloader/vxloader.c +++ b/vxloader/vxloader.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include From 089e69d8800c9068bb6bfd11679153fadf31a618 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 14 Nov 2017 17:37:58 +0100 Subject: [PATCH 112/166] hdspconf, hdspmixer: validate the .desktop files Signed-off-by: Jaroslav Kysela --- hdspconf/hdspconf.desktop | 6 ++---- hdspmixer/hdspmixer.desktop | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/hdspconf/hdspconf.desktop b/hdspconf/hdspconf.desktop index 732745c..3ce6429 100644 --- a/hdspconf/hdspconf.desktop +++ b/hdspconf/hdspconf.desktop @@ -1,10 +1,8 @@ [Desktop Entry] -Encoding=UTF-8 Name=HDSPConf Comment=Hammerfall DSP control application Exec=hdspconf -FilePattern=hdspconf -Icon=hdspconf.png +Icon=hdspconf Terminal=false Type=Application -Categories=Application;AudioVideo; +Categories=AudioVideo; diff --git a/hdspmixer/hdspmixer.desktop b/hdspmixer/hdspmixer.desktop index eb5615e..4cfee66 100644 --- a/hdspmixer/hdspmixer.desktop +++ b/hdspmixer/hdspmixer.desktop @@ -1,10 +1,8 @@ [Desktop Entry] -Encoding=UTF-8 Name=HDSPMixer Comment=Hammerfall DSP matrix mixer control GUI Exec=hdspmixer -FilePattern=hdspmixer -Icon=hdspmixer.png +Icon=hdspmixer Terminal=false Type=Application -Categories=Application;AudioVideo; +Categories=AudioVideo; From fc8858cae3250a8c1416dc1301ebc3bcaed9da89 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Wed, 15 Nov 2017 09:55:15 +0100 Subject: [PATCH 113/166] hdajackretask: add .desktop and icon files Signed-off-by: Jaroslav Kysela --- .gitignore | 1 + hdajackretask/Makefile.am | 2 +- hdajackretask/configure.ac | 2 +- hdajackretask/desktop/Makefile.am | 36 ++++++++++++++++++ hdajackretask/desktop/hdajackretask.desktop | 8 ++++ .../hicolor_apps_128x128_hdajackretask.png | Bin 0 -> 5180 bytes .../hicolor_apps_256x256_hdajackretask.png | Bin 0 -> 12414 bytes .../hicolor_apps_48x48_hdajackretask.png | Bin 0 -> 1705 bytes 8 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 hdajackretask/desktop/Makefile.am create mode 100644 hdajackretask/desktop/hdajackretask.desktop create mode 100644 hdajackretask/desktop/hicolor_apps_128x128_hdajackretask.png create mode 100644 hdajackretask/desktop/hicolor_apps_256x256_hdajackretask.png create mode 100644 hdajackretask/desktop/hicolor_apps_48x48_hdajackretask.png diff --git a/.gitignore b/.gitignore index 120b234..c5debca 100644 --- a/.gitignore +++ b/.gitignore @@ -123,6 +123,7 @@ hdajackretask/configure hdajackretask/Makefile hdajackretask/README.generated.h hdajackretask/hdajackretask +hdajackretask/desktop/Makefile hdajacksensetest/Makefile hdajacksensetest/configure hdajacksensetest/hdajacksensetest diff --git a/hdajackretask/Makefile.am b/hdajackretask/Makefile.am index e313159..a9f0a67 100644 --- a/hdajackretask/Makefile.am +++ b/hdajackretask/Makefile.am @@ -1,3 +1,4 @@ +SUBDIRS = desktop EXTRA_DIST = gitcompile README AM_CFLAGS = @GTK3_CFLAGS@ -Wno-deprecated-declarations bin_PROGRAMS = hdajackretask @@ -21,4 +22,3 @@ alsa-dist: distdir @mkdir -p ../distdir/hdajackretask @cp -RLpv $(distdir)/* ../distdir/hdajackretask @rm -rf $(distdir) - diff --git a/hdajackretask/configure.ac b/hdajackretask/configure.ac index 050c731..f836306 100644 --- a/hdajackretask/configure.ac +++ b/hdajackretask/configure.ac @@ -8,4 +8,4 @@ AC_HEADER_STDC PKG_CHECK_MODULES(GTK3, gtk+-3.0) -AC_OUTPUT(Makefile) +AC_OUTPUT(Makefile desktop/Makefile) diff --git a/hdajackretask/desktop/Makefile.am b/hdajackretask/desktop/Makefile.am new file mode 100644 index 0000000..263d892 --- /dev/null +++ b/hdajackretask/desktop/Makefile.am @@ -0,0 +1,36 @@ +APPNAME = hdajackretask + +desktopdir = $(datadir)/applications +desktop_DATA = $(APPNAME).desktop + +public_icons = \ + hicolor_apps_48x48_$(APPNAME).png \ + hicolor_apps_128x128_$(APPNAME).png \ + hicolor_apps_256x256_$(APPNAME).png + +EXTRA_DIST = \ + $(public_icons) \ + $(desktop_DATA) + +install-icons: + for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + mkdir -p $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT; \ + $(INSTALL_DATA) $(srcdir)/$$icon $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +uninstall-icons: + -for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + rm -f $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +install-data-local: install-icons + +uninstall-local: uninstall-icons diff --git a/hdajackretask/desktop/hdajackretask.desktop b/hdajackretask/desktop/hdajackretask.desktop new file mode 100644 index 0000000..f45ba06 --- /dev/null +++ b/hdajackretask/desktop/hdajackretask.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=HDAJackRetask +GenericName=Retask the audio jacks for the HDA sound driver +Exec=hdajackretask +Terminal=false +Type=Application +Categories=AudioVideo; +Version=0.9.4 diff --git a/hdajackretask/desktop/hicolor_apps_128x128_hdajackretask.png b/hdajackretask/desktop/hicolor_apps_128x128_hdajackretask.png new file mode 100644 index 0000000000000000000000000000000000000000..b95d433e8456fa2f080f8bcb115598abfa78eeec GIT binary patch literal 5180 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4mJh`hQoG=rx_STm_1z_Ln>~)om)9a#C6*7 z{a5d_%QQ7SV4NhUk->DbOI~y)>rrmmqoLvDw(jo7xsQL1b9Ya>bFq*u-SuK=+1{{n z+1R^+M@36RL|8dhN<|_#Y%+GTJk64twK)4<$BLCJR;+oqX4RWluh#vkwfp;W&8eOf zD=PHk_Edbl$K4^Q?A9Y;m~;ff5N$Cl6yL(}hLMN;8`D14Nl&lrnB2hLP|mPYdIv{^ z><{q=A7<3C@}ALbxNv0K|1!qS4cfCdPYh>{E;70BFPg`v>!lRe_m(%8uf*#X6lzNE z(Es2&uh-}AS@v7ZoiolwzTmHkPuQ>4XxZxX@~6}~jXU_wKB zIRkUUSHrXayAD?U+F~ePAyvU0!C1o7#;BgndFN(To$Q6>no=_u+}H~4Dm|FNcB+(V z9goI#;TM9JWw#`ye?MPcHNm9KxS?usjO~ZgV3SSK8*XPkF|C~Pe!=n{KCtW=;nS0H1-_`S?wdee}9`*O*Wu;e9iC0YxR=M$Q)!Mi1 z#IIFre`!f(_tsTxKe6lEwqIZE7iB#$c3XPiCE)&q2rh<#Iam4bDzEr_Zka^PR=3vW zt|8B57N7gBJ%#b#*%!^`%BwbSKg#gmp(QD`yv6?Cn+mCf&X2$KyEoi>RWs$_Dz|s? zsWJ6(iOTW35vn1NKIykg3SRp?t8j1pMxF$zqG|3oPOPooo*Q3Z^8B5q^5F|yDGhqZ zzRu!!9h({R{^pItxzao1^JA{NUOhDPH^21W_}_h@oC$x|&DFURW}Nj&YUcu>74NL$ zW~$K8`W%hV>9JOTlYeimK0LN%e^B;@t01Fgy`@RJiAD$Gz0-!WBCXu3#m}!> zdH#~7I%9Or@!bnVh5iZM|F~`8wzL1c?y9^D31$6om?OS?QsLeW8`}@(u+^rYQT^L^ z_2@PO#^A{Ym09-f!rxw;JeP9KDM8TS+|(prZuLKz2TJbdN4}V{;?adv`Hj-knAqJv zoJu^fd|J`o#S)wh9~KqX#*4^KZaK+tef`8cJJNnGK5&h}aNDi&J({{xJ}j<1{<+cq znUdXsQ?aEhw|;dz(7_Q`yMC+G4Z&8H7x`yZ{U&NR#ZSEV;YQ~t{sZNEb_Yz;kzUFR0QF3Vq!_C8!wxM}MiJGRt<#Sxqvy#B8cNn@7f z&UwOr;?CP$R;3TU3a86)dNWA`{OJ3>;(bM@k!p?k{g3n9-@fVPjn4C#F8BR~rq~qG z_x`MA4-+1UW`8-)8ElZ#UUord)}>4P8Tc-HAKox+&&LDO*SL~1`uO&;KJ}lm7?M)21p)tHAH2i{2i9`PXeak1{px4%zFD5Qq| zva;=+%yRC^=a}U86+AnxXhd^=xf1NKuJ7#<_aiSFZog+x-yM{b?RMxs@12Q{zqw7R zESKT6$lDd9Qq+;(Aiww{(1o>ziKGbLZH#MhRXUnCp+~HlC`yTtU z#BJ-z;#~ZG+K!+Z-meW=@;U2QEIp(a`;Fm>-=f@SvAv%ToI8DW-2}_6?5F;}&*#$k zEmDv;Pj=pgU8lClEY1`x=+ZtK?(6eIxKX`fpQT*om8p-o{^sPLeW6z8z3lLD<8>n6 z@?!NLL_TP-nf*O`ZS>Q<8^b~!;&WK~t}L!jJYn>oeaBCs`0kTSw2$V6cWHku*h_V)Bj&RVU(x(!P<7} zJ(tGas{%8w+BV8(KH|AD|N5(yN%Q1(1`0oo`@1+dhsm#C=?{%Vw9=cr->F=n$ z=DGakzY`C!OHf#G#dluivTleByc#5VU}{pY_R)nb z)qCeWwZ5l!|Kqvd2cg1SnznLCy!R?B;d@lReTrSf>sU>(m#>q1-~W%%`+Gx6sifxk zZDvu2!m0yr%eTHwa2DSFklU7Z*{_m$+D9{L-*aT2t3NRH(XR+57j@okJA(cQJl(wG zM}T(w)oW}2HZI-w*tfsqhwWFP^GDXM6ESOa zk9r#|W9)F*_@GdD*Iy34l%0pl_w??2+^he|bo0qApU)RB{SkVg_*uz^Ld&ngt5X@8 z1?60JZoj=d`EH~67VW6#Om6=Vr{txn20n}VZCO3P-t7#-+07|7Y*RfBZd>QewCz`4 zd7Q@~^_t_-&0SSyhIghaohT~b^R+VX48z&u9R3SxB;z=D{Ox&PA^*GY`ix+=^iAfu z%NV3+{7mn62h9=o zZupemv~I=T-^s-`lUVFZmlhOH*}lF1eBsg`&O86zTQ%cJq!%a|Nlcl4Z=Fo@vzu(I zEYAJc^GmGcMm1R3jVkE%CIU z!QrWkCOnZ+4!C#4Iq;*z-oU(HLZXac+`G!&P}P*P0|2NNc^# zP2S19>_zH=*niPR%(i}oOJ_)a`nvqJ-D~+rH~Sl2fBm#2CD1n;Qko=Xf&oUuKCntF{gfzHs zI`FCVfZ&1u(?7m2KYTst#XGN!H_P|@TOoU3!GdW#;U@P#%CYMiy|aJmRT$WJozJzB zi}ma4c8&k1&T7aXoctvuJGnc|!ThpIA*1@FnN2FGJUjif&lUHImtQV^F_T5z*p6qa zi&dmsi+{$mEqmu4-x0JY-L{(XLyCi`b;IXa&A1P;>wO!PEH6!cl-$kcs93nVL0US% z;`gFEPu?5NP!lb=%>Q(XkR~(B)6H|;cJwUVYx4L;*+<*JxXn)wG2{l^+mxi68548*cNj)>$|QK6-CKLy z*!k45=p*}0_#Z9r332v#Z>09+x%8qb4A&PcMF&}Mi*ki=%wsvDqww5((>lGYFZQ1e z`c%eT{d{xfW9xguEbRMhx~Cqs=KS3|VUe%UK9ha>W#0uX=v>naaNt4AnO!{Yz zrY-!Bem^nGY)@-o_f#*cn0lt*Nm9UaQH6%v9QUT_vVMG?^;c!7t9N);bIhSU036)N804Pm@fa4?=YL>+A6;GJa3fI?Y0#cY<51n%OSmsVX6b8(wW@( z$E*Ga7){n<^eI|;BPH|K=Ejz5!fmg%@j1^t_}z3#grmgOmD2xjEPj7!x%s-@SI=`V zZ)@My)|lyN$g`n+X{uXm)Z<-OjvwE`{bGuGjAmR;!pZFlE0k-Gzg|!}<8Pp}8T*1g zZ81iB8<{p5N1pHKi`{O2_LfHd{F4lwNva2|F3py@+o7Q|)2IH|Rn@eH>$(?r+?l#) z!Q$&Nny&&j{?g{WG2x=)V)hI+$rbmCKdHXMZe+BdA`SMvBmmpHp1Vp3JL!A7yGz>;ZMUGQXIcU zBJZF5$+u?1Y{%^q*DrUAgioI!sau`R*->w)<*j)(w|c_{nW;Ap#iWU630TQYZ8L8T zkoNky=Z)>99fJ4+S?RzgeWV&v~2nt)J^e&Iif8=(%;#du`XW z3|7mD?)UlBWlQI{q-w}YEM;N%5q;?#uWbM)=jW566}uh(EQyPaiEQHACc1F>sg56- zhkJK&Swv`eBs)*rKmW{x&nl+^L@kAG$pvJeHC}IW>Bi}RK9#hYrXuqStma>|zdY;v z{-rgBbKV%Y*k28PB5=CSh;i!LE!ToBY|oHV{iK++@5SQhtDKqM?d>cI&Rf5;D&>H2 z@fV>D`#L-8RZnfc=29Qtbv5-2%iqA2@3|~(9{D~Hahf9-pu@bRK>EYy3CC2n>?`2? zP!YWTd!X8lr>QpY&D*?7@3&bx{waQ-#dT+SXA<`(rI57O7cJkNciP#sH{#IOeU)c; z4|uN=Nx$^TK*A#Yb$olq%jn)ua&_WQ=LAoYcfIoOXZ1oEhu5Wtz1}@}XnpT;iduin zYp;v_5{((sg|)9woSPKu^(fw_?Ae8hhBFsOvQ0CsIWFz7?e(?Rbt2lyM&S(16W(t7 z*QI?l*s#-kHM7a}7xj!&-)gt=t`n&~_GB#s=L73|D&0RO%$;TGmYu?I|Km5txDEUE z-J1Gn_KYo46&atgocYavG-WLV+l6y7&rU{4cYG6gHiPlhj34RD_4&27r=}*A`&C42NXM6UaoSGElbBrs2;r_>S zN}p})GMwuF&0sv${iF6IpU>WF7L#<{w5KzC(~REy#Z$rXQ~>9jhELI}do#Y+=bim+ zx*{iaYRkf1{NJ2hg+mt`t+_g_ndJue(~rM*UOTmYa+!F1?u3qr|)m!T643jsC@s18Pi3Q*(Ex>GKHooTs`nK~Hg@RZ@4x>v^Tv=;j*UQBe{qMt)+URbl8v={ZoT1B_&0Zj49m~9 zj#8F+iy8Kxb}DIzOqt)(Di+8cpn1{ZCtIJwZ=3tVU#}QgT$g!feb2;bvUbk8hRXkn zA%3aC_Zj}L`(3v0-n6!zRwOTV}Y$UDes>b;UiUI`P^!yFLHR zj<)>R9#Q+r_UCi%H=Umjn7!tleAIS}(2dqJcN(+YMF{KB<4da5>-F+3=0XRH2I9Un?sbkN9WqRC|1PdFOxY zvmu<1*?aPy9E;_Z(Y%}98(IX7ctUkZxsQ<%m{`KDUX6ux>cj7do_b~UqE*0d{IdNvU#hM5< z17>Yy>#wg5e485+dk>mue&z;Gh@$k z?0m31L@aFPW5q|ien+hCUQ{5Q`8sHdq?w%YtJ>aEM~oKpv$=&lXHfDxbaVQ$ldm#o z>8)QCz*ceNMe_=!S#lYO6mia%^8m8LujU;8O|_Ns;7?(CiUM&Yc&oW4zEGgIq@FWWM2 zkNCTpw=^Mr-OFvZrzRdbcjs44u=y93O|}8s7XD#TUv%!2rOZ~%LiMcKm+JoAn{lsk zhsJ{SLFtV4Og$Tzg$n#1B-f`E4P?j zJHWf7-^lZb314e-z;o00SqtLlFFSE|^NNm(%uml6MQC@2R!M%EYUZZX_cBuC+m+he p;rz?i2g)6W549mNS`NoEboy<`JiGOSD+2=qgQu&X%Q~loCIGFrCSm{p literal 0 HcmV?d00001 diff --git a/hdajackretask/desktop/hicolor_apps_256x256_hdajackretask.png b/hdajackretask/desktop/hicolor_apps_256x256_hdajackretask.png new file mode 100644 index 0000000000000000000000000000000000000000..686215f8080fa8ad1ec6616600bcd34a05006969 GIT binary patch literal 12414 zcmeAS@N?(olHy`uVBq!ia0y~yU}OMc4mJh`hM1xiX$%Ys44y8IAr-gY&MluKdiCpp z{ku;e(vn@WYQZO+j?^RRhwm-w+^C)P#y0DZYmaHx8`Wb+n2rgVZcOUz+^c@WTjooo zprnXPSCdk1VtL~I_x;7;*T3Gi{`_rgW&Zi^pKtd6xVLAfb@@BX;`ck3H!RZVA{rSk z)jF2D+U#w1X0lX<+5gZf76Hk}GSw3pHrQ>@yC9yyvX8-zg=xXPp8KMOQiltJ7@8Zl zHa>K)PYC@S$)8~Pf!9Fz2iJ@|tFO+NFLnj_n6a8MZ(}zzOE&9qJ@ESg%K`Q{#(h`U zwInz2H&h-FS}c3`-!x|K#+?T$613mCE#;6&h_m5V?hC#hul!-FcUF>{mE zxBZ=+BNw1AyWC6eCC?wGA2#P7Z~c1TB4KOag_+I`yU&)a2$=g*v!JanT9rSCZBN{R zjkkW~&#Tl7(_v>m-F0PVWaMlJ}8hq z?>N99tE|5Jp@(~Liu%U<_lsba`av)mWP;Lr4&p_sTo%I_v3+y-j6)(N>F060vPCf(eN4$3F%U(Kf-s2{p(62LH{JVmm zbl0U>QV;9}kDV8Kpk%zSIMJX$%E0>3j=THsSecxfcGBk4=KA>D9<{)=Tg6{igx@NN zZ7KX5*cO>-H%-Rhb;q~sl>t_+k0(x;oyqhsW1!@At%sKtWxu)+zM=Z-)*ME;&?RMm&cs~a`n4i$j&+g7 zqviS8f6NbbC~bRwSU~kdN2HyG?DP$9_c?dnnJ24sCNBB4a)I}WE%m>Zwx^43&MSUv zle5m~LZW0}ZT33JAGMvgN*OLZkl0>+WTWwQ&Wlme(^ka(b-wj=+bPHPC0sj>80x7_ z+fiHo$c*FIxx-&G-J92I7vBEH6UcOXg-wZtmF2Y6z7Fq&wy)nDX>|M8oAr;c%zVwn zt;0Ll+vbq$`?8W}v$gnT`~J#4e%LZ&OQE~F^z&mYjs43^zFe8HrO^0IT<3iW)nz3z zId;my6VKQcE|Bt+N}9aZ_tAwDQV-($wtCIkP+4WFJh98`_=0xl6?wgp(fx<_=~fiW zNZq(;_}AVtZSKyQj}P8&I>uQd@~y0=d2RBwYl(c(2c8#ZJP7c9{HpP4@{bScQMX<% zwqulS)s{^*>#KROf%(ZB;R&x7*dO@xlilM;$ekUhKmA;0#r(qH#v9xI<6HLnN7}7F zecanDoHc)ibk3P`B`5OE z$N107F6s%@nSXri1INcvTT6X+m%l$OHTU(5Ydd<>#cB_W`|>K}9rj8Mep>NTSLg8W zm3mv5PPlkKY`#(WcY#aN;$7>StFK?F`+sxdUbasc4(+`2>+PCXt!K4ET(qWyDDC_- zXW21Z`<#ePUe3E_UZ1Y>pjGvArpNN=^L*2$-^|rL+3t3xRWgOo=LUO)N#5SC*P@i; zUkAn7YF#eZzVve0tW~RQ_Z+B?JG%5yOMU%=n3V0$tK%X+$)=x~d210%o8qz8J1*We zvd(02d#;tf(@)XvTv28~(5{g1=*2?Wt5#(-J`d`AvLi&v(&gwfC6@ZXAxb|DKO{sy zWWTX3Tfgk}wdGIiA7`;_%Z)Zu%>3%Lt8GToPn&5s%Vu3VyIEPLjO&A&)%ZFFh14~xhq8-PJQ}WRru!Q_SfRBrQalY{-{p% z@bgfe#2mWhl-mdPB|<0JCn(HPUi4?#xAxEvafW->&bPkyf3nwF2Dyzjc0CeeFaMl< zqj|Rc-2BOB{mU4dLX;{!wI+syKm5T}_dP_ZQZq<9$)qfO{`?P#hbLXrU(0B?d+WO! zi~j}v+~KgUxr%Wnue!8Surq2(Mzx(LE=njS%lf6{TLkqj7KDfR_ z=;Y>!r!G9-{#<6gUgU*e_59rrzubSeqoiI&wWob#s2r~KUTVYDvA|5;`F26Ap3!KW_rMxMWUx??tkQNUH@Cz?ptA^{eteN zyQ@DHHrB8lkZDS}voiB@<>JL3mp+*5b9rU&>s{ye*Ixa)?^Q_X)ZV*~iXSlPe|R4n zsI%%qxua9rdRDVjUu))@Tq(YD=A_QQM6(%e+Z5z>Dpf0n{hP&e|1Q@YiFQeb1E*8U z*1zS6k(#`5v+=atdEck$R+?ItJ}P)nb!3xNt7&6(Q0J5VL7gf5qGuOz{4YE3*&}Is z@2A3ZFMCf%ao3;b{`hOgolml258G{?-8|FIG^5jY%BPS=8&xZ&C1;gOHHiOMt~fPz z{>evselrCJcRtAvb>UX}a&@Ikk%!jA8o3J2m5(NyFEiDRPK+#{AN?rW{zlJQA0LH& zKJTBKa&9kEww;)@f9VsKC9k~H-sRq%8TVj6{~xB4QkMlj{#ng%eVNcn|KQFiQCiz7 zh5zw36nacJr^mX(<=5t8OSdsBxIcTTgQf&S%+nwL{3CnLF4AmJd%$zLeE*`7YgZ@U zC|-Uw{nD4X2g~;!s6TTiW}XAj+`t^oZ07mPgiac+blJ4MtHAG2z3~UJf*{59m$xsw zHjQzI^rYGQZ-iEaxvlxV&FkiQCCwk7-Rw3$_~I6nlkO!n$&IW0-`0iynV8J1gZ<(*WN%Z@DrIIxHl>8fFlQ*2u@xK(wb7A+y zwP$mFz2SQxqW@v~$`0$_-?pc%ye3!wXIYt6kNTbi_k}%$K8ZZ~GPP5`_ibWSW9xs( zgei~Z_!;C*e{cQ#_U<=^f~`+?pX*@Ve&J?Qxyh{CYJW~onAPwy$L|&EzlUiPQi466 zNIaMvqEtDhtJ3Y@eY2?^b&U~QH;evzdO|O_`tgtGv~=%@NebLL$JeIKt6Vtmp`1t1 zt-!wIJe`&g;z?`_n@SDkEH0$g7)q7LFUsHT`n2dl&YRonx}x#&ClW7|x&1kle|FLT zFoyrk-##(b&*Q55lz!senR9P{{4DwW=U+;W$y?KFYhSVcTVv*Z>}21~BV3!8$oSS} z#g#Zty7KP5#CnG0#{b$^Hfw~a-H|)M?V(pUoz4E5&5@Wzvvw&S+jqOsg@v`SZXVmm zUB{MfOcndPLuBRaZ~FQl#LFEH%Cr4B+|&KdqBEA|&Lh@;b3&9V#S1E|XB%DT{^KLL zz-{J7iL@hoISuvvPZzOmGMaSqyTF4(9LM|Jd0w1-x{Sdf`_1nOxu)XtrBXkZ8;f?G z3NU8)rV#b@;p7v=rc*LJvnRVUh11~u5d2Ry{ggv z_MH6u2M;HhFYjKy_rUhv(-S)m2j2Lc!*tKMe!YUH>+(;Jb!=nLoJmSPvcvq+pWWFl zX8$B_F3r+A2;r=YW$zIx_DjNk)OM544%&vpO9-+zf$~1 zeZil7+DU8f?P0lljYFn?Z<}kRW`md>%ekHvKR=yRNq$hd)q}atf62Q&(~q9FW6=A^ z^nbpn+Mnf$ZoBf{{`kq0tXy@S`_D5o<8|j76cxWs+plme?RJIr3GP4a&bI=xkG)-~ zcuH;lp2iy+;xw-nYo(da;T1f;o431UZ}y3^UU%*_-ao5jzV6(kbl;B9Ukdskrcc>; z;k(No4gJNnq1kpO*?$VBeZKFo@W2$d_`e(PG-13htfe!UY-p#a@ zbAF~~y=QjDv|S2mQzMtp&6(n8cD3@7+v9%MHQPc{Ufv0IVSLGAbCWOiJNpAJ{SVO+Gjrg zJ$vQWvGscn$oC6*vj%*ev0!>}!~N8cn^O-|=zr+%eE7G|DW4&_-e4ntgTn~9;jb9ceyO{ z8?mA@Q{x`k-*qeea%|pz#-uIIOS~CWFVBAOqw+~xdhspc1Fdln_6I-Oc3mMl>Ga+M z`6nLQR440OTs~xdU|ZaS>)U_6tveC6p?6~3gZ-MAGj{Tw1^(JjKm%~X{L7SeGlRH(q=kvNv%KW!> zj?m<)#`$Ky|Jw6ge$kJ()2O`Wzx~tW3wL#CHQeAnW~2W>pXHiDRgN?7q>R*Ak;2mt z^CXlXxq1Al#FvR1OK-%q{Z@E-+h`)&GM7S|Al3y(0tJ1{H#gcp{8p6h%m3hEh*D*} z)HP3>$FMZEAy}Dec5XMS4%<}HI@c3o!)!Eo}06x(x`jB9Lt`m zUMl|mFW27n++lp>p5UJE*Gg-qy9I64Ud3=KPSEEo)Bouw^bRiSuz$_`=Vpk$l;Gm+ z|DPU+Q*6K6_d~4Zp_jofo#w+6n(~;ZnWo)-le6jc*6lne6DwN9e|+}7@olc4JX^TM zTOR!n?JhR=x8Ja3m;cUGuPz6toAOe`wl!L*L>@c7>`|U(%l_q&-*>mv z3tpVGciWuvTVH?N&?gqkFm)BnrDMBuOCRLB_&1sfRA^51__vj%kk$VIUuT}1me$#> zihXyLV*CSH11@$gILZA-ctVb8e(J}|lN&l$x_p|Fw8eO;M_k+9f3dGMf8ULqQ&xSv zoO|zq|8DLbS`B@RIPQICs`pk=P+#T$&mkd3YhsP^R1ZGQ1t0PoMIM)Y)DwC$g?F9g z0ck6(5XKT0*87%31yN>@CJK1w*&e6*1q;dwP zlbQ=wFuj=I^*~wW`lCFT@6GR9RX$YMPxV+g|M)W>1)JILTH_x0d#X+fUFlL3qcw5P zTrU-S4$XB|Oqw>YX9a4kVz62x6!DJrU-2{Dp9-6JCEP?ehipJOL>oR zYUUh&7^eT>_{_DHPMTe^bj#fPp1_qhKwPYAho zbBVOQe8uf2fAjl4s86seKX-V~0sD)8ev7B@aqY60>hbQvvpb<3>N>e8-7MmBty~B8_huyTZISNxfzOlyfTdt9_*md>)?ldlc>1ZeJxrO3! zKdrjgx`Z-#wFj|0XSQbWPye{t_Uxty7QwF%sQ#HdVaf8pPUk9DiT_y3T$*Opx7OLK zZfijIZlQ}VwU<^gi0l@skkvdi^X!*8g`muzZ$p$UPZZvHxI?&v>CRKuy4#DC_!TbJ zhpA5SQYkn6A1Ap|G4XL~?Wt7^BHM*B4E)UZHXL_qS>LL)gz3|o5GBiFA@4K)e!I`b z`Ka)tU69}^UE>KyAB(?qu3`$<6wVZSz}F*fpm zFMKNY4_{1p?Dvi7|FQ{YIet65KYw!zyqhR-P1 zB=?`m%5neQP8%(3-7et#tl)u*LgSU7J!@s3?hj?u@M2SpIeCWV*t3Tvj2lv~JdhDy z`oqfLO5u&pxCi%F`Fn{r1Vy+SNbHdBe3Jcs$HsNPWv~DBWqEq}Jolf>f?H2JLcy2#j6eGdB@LBS6;g7`&Xv@hL65x zHSnL@^Zfpy#c>bb2QSh4AvtMgrNt&u$)ov;1Pe>&G49F8(VA?viD`wCkjoslKWq|L z&VBZA(>iUFv#dFaaoGp12Y#E170(^ z*<2rHv(ul~Ip{BbbME9rRncSK9yh)`K3X$v=?zwigk|sgpGW>M{MK}N;u~ZBM}F38 zxA_0CeQ;;O;b%mpOtE|58l~trpVEwUrB}N}x ztw6>Sx1t;84PXD!W8D*0{=gx*;3nhUcW2bUD{YgM_HLNF=fM4QKGXM~NUG`aR-Kf; zT*z}Z|9 z<^Mlk*#2W#CnBe84p&T+VJ9SAvC*ZdjIkuYaNVgpfOj>KAQXZ*hHN+=KTCKmTex$V=(g z(JB^6#AHKi)kJA&T?*o+!Ubn#QX< zVeVSyTZXfDuC0l@D~R2{HZ{*mQMAC!B`6|4Z=Im2?^X9S zu}@pOO2Q7=-_QsMU-iNAz^u3j`o(jWi*I^dtY+VLkNdIRgBtx0_W8y8_Dr)^JeFyOtc%JvKdE?|3-O1)g`WtR& zHyl4Ba{O4*kxABKg?CP>&t^7fNDO8XWa1hR%T{?_1?P^bPh3Z{&BNp z^PkyC^R};E_P{pofqY)%_x+uBXWYn$OFJ*R@b+%$=oS{~&5VLSibnQq=WoaseD5&b z`eWismroCP=Fe}aR)07}iL?In8MV&aurc9Rr5@K;b>M%=%u z@&9S1El;^Vvz@W6{@h-%sAx;(>fSvPET4C>{MhRJ zBVS|Thvta#+|&)fn5$R3sNesNU-+No0neiu{o+6Nn|J+QXw&yHdBWfC2XE|^nm%J@ zVlk)u@%w_wyLw+gHe=qf_P4!Z_Ov#k{`b-wb}!zSF-`rfY{ZYYEn3|4`55r*BVim9T8ep3?6y^Sw{nqu)CB<2&E@OqrEC zVeN6Bf4ZL=&o-FlGnv|!D}w88|#vh;=fJU#@thcaBB_58)79Q_aL&waRU zxMTIthL)G-Oltp3{P{lTLGkC9eLSbd=6I>JE9Gr;e_pkJy>8@(mztZGr>xSx;gQIE zb<@*QqvfgbjV_n_`kR@4G@J>Idd`?Vd2V^UVqxkGTlT`8Z#oX`pIv#`;`-kM_i}4L z1$RDS^LUZJzAUDyRd7d|v3G`1*TelM#GaTu*q>W271a4;S;zg__22G&-t_F*mqKIp z@Y)+2mb?vT{kk`weYb+!exExzIVxwDhA=pvG0~rF|4;XrnSl5;lgoGRN$#87Rc*Z@ zsI|UU<=>&Ft!DC`FaJii-T%*1v5mubZo5SBey2w+H7T$2H-DS=;qKCIi>hZ&wsB=L zZ_eozz8`h$&FzlYMY}(9KRe7ZEi_E&p%Uk^R2P!yqC*#e19fqzj9sRks|J zxtGoGSiDB|x{IOjiLgvHwy9B!C7Wx^&6mx6xoO6?Hw?lJ(G#WW_5QtJ{U`i$*Mgf? zHJZ&vuM($C(4P4;T>glBaT<*cD z-gR0NZCXAk%34g-e0=#-8oFrY`I`vohgfeD8-TLEa6vdk(})E#Fq%c)#aI{uYsH z%k5WddEMUxH1`C($ewZ}LHWXJp+|OirsO@FRcUOnzgKzd4ciFysX>e;%<)#&F6STJ zU>tk-&r4Ao#)_5?Pu5gdHrlV9lXr^yk7sVH!c>oIN{yMO&-QCe&ORJ=;KE7XufNv@ zMw@ThwyI0gmp8_++$vu;mgSL#nES4T`?=aHnLLz#|DAb5VC7YD^J`@_=9`67?WcO& zW5|&zx}odgx^&ZV?mudE8WOjw;`gVnHgcHLd23UhPk!cxOVMv=`*?gMM z@a>tD6Th}!YN?N3@?%N&$piVDdM{`v=O~_cK6!EDGKW8RKK*nl>Pa};&NQQINlu=3 z%-&bqcm-R$g#N{KT)qEPZeolF@FjHD)pWmjd6{b&!@Z}+k6K3+ zJDjoFv^{cG%AX)8te>&9G}y@c_R@(73nras zn58?HbJAzqyw~-!nSMmK@_s7x_^Kk#U)5M|FWYbOD1LtC$>O>*x2kqN{oKm8Q+pK? zL-pDpUnh1f-BHl?^z%)R&>3Epzw^6Y&hGqigZq#3iyeC$)4t!bGps7ib$XVfpm6Q~ z`A3Tw?zw-OxqT^nL5Po4vGbCY3bl93oh~&>zTZ{ z@W$T;bLRDPKQY#P@v?7r#PTDuk;yGK!rl{>OrDy=Sg)FLcRrim7p8iyuC-Eu{#-HB zteL74%>Vfwki8lu#QMSNo5${O4L{8y>EsDaJ=<=cmY!-bE4cH?&lYjJy{EbV%ntd+ z_%UhknT0Z5TPI(YuXcN2GGTia&(9Es&l|7%z3x|G(`^;H!L{Q=;oHMnE{7c z_&%tZ`dj{^_>t*Hzb(7F^~Bqky-%#SoP6f|#4z8{cb>GppeNtNl?N8Kr#z`#dgApz z^9gU~`pjvbQn{|BG%32Bhk-%B60{cJf6ASCbGaM-?maMntNH`p&%@F=7gAA69&E)A~Ix z_t@(T6CUR;YuIPf8rNO!)Fsj8x>(mu>El0_io#RZ)-cauebeqz*n0Q;!;psa^;#3( zwEQrABVY95W88!L%Zlcj);78eHcKn&PhmZvb7boe*Ck$I*{!#^IgM^f8EWvE&%fF> zXFJ!*zzRFok|6DC+wSll;B@id`Ne3G^E>CuGrN7;zdHZm{iQch&)3O`Mm;&=K}92fKYru`}@UD|Ub zM9Grjrh3^@{dm5fPfY)Fr{3LDr1&TxOe0O%&SbsV=VhzBFHB@tzS%VI&^!GJ+@H@{ z)w?X^*njdVf06*#>ezw~u6oBE5}r0yy^*t?y;e0n=<_{XciV^QS!@@a(o^n#X89z1 z(}eqERrUIx<*pOGRQ%nyS;XGql)1gFW&5P^DrHx{KF3M-*35eP{ytltdkuG*_zPEw zYSs(Wrkz^vsWLfRH_0SN_S&tU9m3`_{i2&#eDCC6`z7kBHSx~80`&^LLpaqW%&gf7qj+DD`J#fUg$3!S+4PwT`qpK#?r-4j&!K2J0{ z7a#KLgqP~1(zLtwN>45*#yvP65E-&*VX)6_(HDz<&XZQ+_#deC$E$k9HNB3nxBvSb zI$SQ#`0m=hAgxT!1&8K)^ttF9S+^) zSCzefJi7IEiGMMB9c;em(xydR4krVD>{dLexb9AmuIirY+5I4s+<&ZYl%9A% zU0l4f@&BT4GZt|z*mOhqWXhXIocbU1udWLUVGOx;yFT{K)QqSZZ6bdIL_!%vRsO^_ zrvE5hG}&j)Bi4W6x01WG8csd(I%Iri-fPx>!M8#|{HovYx#vg~-Dvh`6miwGc*PN7 z^Dw^s!!4H06QT59@nUwD}$jh}OA^Iy^13`=+!~cg`Euf2Uz)$oE_+ zEB~l7Nj)y`3R{5Vq5XnFk8YnXj1V@s!TqQ5Rx&8K+<)v=nA%m;2n$b_1g)8(!}{Q14sq9mpCGd8l5YpyWhiK0|s|zGfCE zeBbv?(JIgVd6u~?%PU{iujG>632yy1j{iju3`GC&8LwWKWxCr>xl(p^C}WDhY*N7M zR+V#W%=0hhCw=+$Kf9&$zlHvX`Jp#gcYUCq6gEt z8tsPDjrZGS%4UoIIKKMM6kF#B9p_BDO7^Nf(0H&f$@gIQ$%zNTT?OhI-W|A{mT92V ze`x>QieqY1#6ffV$@z?n&vi$7pZm_5O{|2xxvv#IkpEtN7n;X3!AF3UbvHHP!d!o3f+T`79Q zvZgaf^gY*`mN#WzJ1YKFC0IPlm{!j9mi@wIpZ3LE`}=d={`7FYbMrux+3^x)wpp1o z+21g}5%~D$`%JUDclxR=b(=oKFFh20t%T_v8(&|+o011&Dcrwgj~AY9)O_}y@$*f! z1Lu1tMQT5>(q_(|X=rD8-#q4pd`h-6Qr_c*7Eg>-i>! z_WH8@cFb;@(f;bu6pqtfg>eu5N2jjHS;@H0G&@)NxnklSU)CIV;YoJ?)=YTpr`~^i zk}2zsiJcu&FaO%MWbU*dIx`vfG)4T&J$BBwq1;$9JgD=D-GTeg>pmJ5oH%>`+@;d` zpPMWTwkBKtNq^9!wC#CmO8M!uf_GgKhvfSg^F9bMPTjWAectjvff9T*FJ`>;VK&RK zmG)Gfv|8D1@4>|9-63)VA9Uq619ZG+(^{rR1m z2WAMBJZqoJH(=ufBd>qvg^>Eo3ULR1#iT*?pM0O^4sjgO2e$@ znSJle)ZCrx_K7s)zTMB$nbXDnUAfWG{^6y6*>Z_#T6%R)S^tSlox5o{SE1PIO=mvD zbp%GM&rmH{Bie8_!brN4wSzle;hdBGqaXL0Z|urGzv1bH+J<-E!~2*#qV`EkAO04X z{&Nre!(*?Sv>UA6^l|nFMLh4!iA>B9y>Gl}o%Hcc`xb^8)`b8Ct~uhtaNh|#@iK*`(vIiOM3Bo zhT^e}A-`)>Hs}dwPmf~!a^PL2xnbMfpOR|f54JY9ZH&sDzTt8GbJl+$Q)hN1)gJfJ z?_;~Cdf<%C`=uFN3+yjg9)4a}Hfd%>(tF38twrZIJdXRqRKMnw_ff+;AD6{S9sZ_w zIF38HVx_2q{AnJAZTV-nT3xTLELi_9vAwoWB{x8e|MuZ{FB|P2CdvGBUPouKCd_s| z-~IZs{MMrLetWaCV%v4t_&zZ0_e@=?6glzf^TIsirC|)dd}~F$cZFVWc{?}mG3!5T zEp^e;)2E$(9HVvq+p$@JS*#!Cx>|qj$@c%ZzV6|rWhH5UuT07Nw_W^)`0Abz6ZuHH z_g;xkPl}haRezk*@4c2`pIY&OLlbt`{rx^o_uc0ghvwf3v5VMNaql?q*Y;I4AvW6# zZrSY+Zl2O*^+xqY(W!tb{hH@%>O30n%<4_rGefHK=AD-{w*t<;yZbx9S#LUl)5>D?e58$yb7C&D8epOBh$0d&mzG~mP605&& ztg#anQ?_av`enQK_!h~f@dnbp8S*c`49XrgWayM+H z<-IMc!P3d$&715$tX#U$|JZ`s?H2d`EnlHi5|LxJ@Mud&pO(ShiElk_&*)ux{n67t zw&_K&TbVb#pS?16^CPpVL0zY^+-?~6_L`rRc^TES^8aeSNGaj#=hm18|MTgc=iYac z`_{=*C(1h48rQEjy6|x4JwrP=%}=+tNqJi4XP;N^c<-BY^W?=JKRuWxCTT5s+4n8O z(SK>{dzr^i(zwDsck3q0zRh5Bo9>+c?`om2aRYDng*HbIH>GIneaii=VpBJz%PzQQ z7$?WhCi3Ce-wA79YT5ojAKWi@CxLbYupSeqt<1!C7KGV&XHjZap z%vEsr?8K6kbswwjKlX%dF)~Ssn(B6{<9YDvZ)R+hN>1F*wYnzCJ>5mZzFgsCL2;y5 z$V~C8YX#SRXZv{5>wFjQgj)>jX8%4@Qng*iy0|Cua(n4BQ>$ZB1^W68`kpbLS9tn- z^=6sX?8>c0`+E!K9@kuVSLc0?!z8J;yBV7+jr$E`qjE292z|C&%J}pT;cvS8w$+!v zyb-2U6eIRni+4|xh{#>Wn^7?*|E%T8;h)ngao9g+Xk9eX@S28~odnySp1auw*Z1o;2wQoj zm$C90-_pA;d$YwNIA=|AnC68|52RAGt>qto)jYCudAj@C3v+wY&TdtnKFc)NTz0Y7 z#2b=@qH*({M*L;4XqHe>Slbnt&c{;M7xFk#_9Op`gZ|q5x=z~?#27D65IOHJxZdcA z*YRZ86!vU^q%ZH<--PHoyb`EsWSO^h&zmI2P#^2ftAD<3%2`@smK)obqp8O%)uVJF lB(96-<@v}ey(B;XU-|Jw%r=GQl?)6F44$rjF6*2UngIG@G-Ln( literal 0 HcmV?d00001 diff --git a/hdajackretask/desktop/hicolor_apps_48x48_hdajackretask.png b/hdajackretask/desktop/hicolor_apps_48x48_hdajackretask.png new file mode 100644 index 0000000000000000000000000000000000000000..875456cc22e12577225caa2c4fd17d5c98cafbf5 GIT binary patch literal 1705 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?Fo9f;OK&; z6@|R({P%E_9#m)T6=e(*yrO4(-u~A_pJU(Stl#?da;ncf^W^SZ>+f@a&wW3y@$I&| zR+|syu!}H1XX-sL|A7C2xelrNjD8I28Gjw-r#*PH&LWs=58EGxGmPgL(-`J6*fTAz zI@lonp11t|J61JIrW?bNZ=RxGBnv7$giyl}$xNXy1-e~q0}vu5sZXRKw^PioT7{x$W#(V`V!F4Qc%zc~M+#Dmt3 zXABX1A2#cb{GI+mFS^c*K8L}e~YxXHM0yG8hcwaI1P2Oih6u1uVK zechUjy!_r*x8!fgd}XU+oz*aF!^F+k*WWF#nf!J-SA^&RrPnjqUeEX>$FzP+-%f9z za;Heg#8o@@e(mAdrYUA^EBut%laAOE(^53yH*#ZMhV+qSFdmXvRfwN-LHE=uV*+O@Ot|}ruCe{_3zhGXKy>H zIQtE&4WA674O`5MUvUB#zZ-9SV3ELOAZ&5s>)!ayk((8kXI}X}E9Snn&<>Z4dk$JH zJ7%@afca1D0mcJ7*T0)FZ?zJS-W+SZoNtNcrwI&tB8oPdvc^si)L*YT!@4Z$IM0N8 zKTmz#d+nXZ{yj5GedHe~c(!;gh+Fl^^g)s3_OK;|Yj5{Hk$8T9VS$Tg4fls~ei==X z?f#5W4A;NzUB5P2t!tP1&VAbrR9=4z56Wh&W4^Up$m!^#|K(e(?{~e*sul?HRMkE5 z`}Er6JjQz>toEt0lh-x)Gu{jP_cKUB$|>a2ei;oWIi`0^a%|tG|GG0RWLe2)UZ1c> zvp8kAViumcwW4&}D%pfh7XMQha7nCOQ$I!MZo>`%tH9l{tTpmV#?QRMa?UXQN$`9k zy6*ke$m4I8OjyG(Pt0I8LwWF~+BX+{zs0&b)Ow_tFnw-(y-4N^XdzK0_P_;USw7IVR`dc`Q2HfucMo<6evg<-K`8_{kzC%h1N5tiI=Vx z#fUw4uF0ZbTD#sg>Q&SO+uVB0GqaC6VU@f&*e`#bkWTD+aS`0jjF&Vog+tM~t3?{)l|q41jIplgQP|BJs?uj1GjG^=j!>*~k< zxY-{$t=NAh!}>$3N#!!rj;QQU4Y}+O1Rh4P*UUKkVCSMWOER`d?$Aj7{(eHpj4A9N zf?2C>|7Z5hO)5=i?k*|5rSvvV*KXZ)m&+{wBwo)j>)aX>J@?wI)lA~6MCw)vJ$YBy ztj-|)LSt$Atw@Ir^`4Qrk53rhk2t<(BKwD>lejNC-Qrrx_w2au2Qh);YNw^x!vEg1 zC_0lB8&Z@T+~8X><>%p?Mfdztl%&`F^4W1}mCUv;9h*Kqx~4GW;jg%2Ihh;oiI>DK z-dnQmm4?`_-oE{lopLYA?|*aa&b=i0dtWa9vDvst|E+K;v#3{HNc&4IH_FsqPwkIar{CE5Qan?GoPNM|K+jo~{ hUgGZD?RRe3uUWzTpVcyJ69WSSgQu&X%Q~loCIE` Date: Wed, 15 Nov 2017 10:24:14 +0100 Subject: [PATCH 114/166] hdspmixer: move .desktop and icon files to desktop, use modern destination for icons Signed-off-by: Jaroslav Kysela --- .gitignore | 1 + hdspmixer/Makefile.am | 7 ++-- hdspmixer/configure.ac | 21 +---------- hdspmixer/desktop/Makefile.am | 34 ++++++++++++++++++ hdspmixer/{ => desktop}/hdspmixer.desktop | 0 .../hicolor_apps_48x48_hdspmixer.png} | Bin hdspmixer/pixmaps/Makefile.am | 3 +- 7 files changed, 39 insertions(+), 27 deletions(-) create mode 100644 hdspmixer/desktop/Makefile.am rename hdspmixer/{ => desktop}/hdspmixer.desktop (100%) rename hdspmixer/{pixmaps/hdspmixer.png => desktop/hicolor_apps_48x48_hdspmixer.png} (100%) diff --git a/.gitignore b/.gitignore index c5debca..f765810 100644 --- a/.gitignore +++ b/.gitignore @@ -57,6 +57,7 @@ hdspmixer/Makefile hdspmixer/configure hdspmixer/src/hdspmixer hdspmixer/pixmaps/Makefile +hdspmixer/desktop/Makefile hdspmixer/src/Makefile hdsploader/Makefile hdsploader/configure diff --git a/hdspmixer/Makefile.am b/hdspmixer/Makefile.am index 86a759c..85c1177 100644 --- a/hdspmixer/Makefile.am +++ b/hdspmixer/Makefile.am @@ -1,8 +1,5 @@ -EXTRA_DIST = gitcompile hdspmixer.desktop depcomp -SUBDIRS = src pixmaps - -desktopdir = $(DESKTOP_DIR) -desktop_DATA = hdspmixer.desktop +EXTRA_DIST = gitcompile depcomp +SUBDIRS = src pixmaps desktop alsa-dist: distdir @rm -rf ../distdir/hdspmixer diff --git a/hdspmixer/configure.ac b/hdspmixer/configure.ac index 0b32dba..167e4f4 100644 --- a/hdspmixer/configure.ac +++ b/hdspmixer/configure.ac @@ -9,25 +9,6 @@ AC_PATH_X AM_PATH_ALSA(1.0.0) -dnl desktop install -AC_ARG_WITH(desktop-dir, - [ --with-desktop-dir specify the path to install desktop file], - [desktopdir="$withval"], [desktopdir=""]) -if test -z "$desktopdir"; then - desktopdir=$datadir/applications -fi -DESKTOP_DIR="$desktopdir" -AC_SUBST(DESKTOP_DIR) - -AC_ARG_WITH(pixmap-dir, - [ --with-pixmap-dir specify the path to install desktop pixmap file], - [pixmapdir="$withval"], [pixmapdir=""]) -if test -z "$pixmapdir"; then - pixmapdir=$datadir/pixmaps -fi -PIXMAP_DIR="$pixmapdir" -AC_SUBST(PIXMAP_DIR) - dnl library check AC_PATH_PROG(FLTK_CONFIG, fltk-config, no) if test "$FLTK_CONFIG" = "no" && ! test "`hostname -f`" = "alsa.alsa-project.org"; then @@ -39,4 +20,4 @@ FLTK_LIBS="`$FLTK_CONFIG --ldflags`" CXXFLAGS="$CXXFLAGS $ALSA_CFLAGS $FLTK_CXXFLAGS" LIBS="$LIBS $ALSA_LIBS $FLTK_LIBS" -AC_OUTPUT(Makefile src/Makefile pixmaps/Makefile) +AC_OUTPUT(Makefile src/Makefile pixmaps/Makefile desktop/Makefile) diff --git a/hdspmixer/desktop/Makefile.am b/hdspmixer/desktop/Makefile.am new file mode 100644 index 0000000..adafcd8 --- /dev/null +++ b/hdspmixer/desktop/Makefile.am @@ -0,0 +1,34 @@ +APPNAME = hdspmixer + +desktopdir = $(datadir)/applications +desktop_DATA = $(APPNAME).desktop + +public_icons = \ + hicolor_apps_48x48_$(APPNAME).png + +EXTRA_DIST = \ + $(public_icons) \ + $(desktop_DATA) + +install-icons: + for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + mkdir -p $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT; \ + $(INSTALL_DATA) $(srcdir)/$$icon $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +uninstall-icons: + -for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + rm -f $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +install-data-local: install-icons + +uninstall-local: uninstall-icons diff --git a/hdspmixer/hdspmixer.desktop b/hdspmixer/desktop/hdspmixer.desktop similarity index 100% rename from hdspmixer/hdspmixer.desktop rename to hdspmixer/desktop/hdspmixer.desktop diff --git a/hdspmixer/pixmaps/hdspmixer.png b/hdspmixer/desktop/hicolor_apps_48x48_hdspmixer.png similarity index 100% rename from hdspmixer/pixmaps/hdspmixer.png rename to hdspmixer/desktop/hicolor_apps_48x48_hdspmixer.png diff --git a/hdspmixer/pixmaps/Makefile.am b/hdspmixer/pixmaps/Makefile.am index c81fc95..c1cdf2c 100644 --- a/hdspmixer/pixmaps/Makefile.am +++ b/hdspmixer/pixmaps/Makefile.am @@ -1,4 +1,3 @@ pixmapdir = $(PIXMAP_DIR) -pixmap_DATA = hdspmixer.png -EXTRA_DIST = $(wildcard *.xpm) hdspmixer.png +EXTRA_DIST = $(wildcard *.xpm) From ecf4884564e570a96d21d9cb637a903311e73b02 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Wed, 15 Nov 2017 10:43:48 +0100 Subject: [PATCH 115/166] hdspconf: move .desktop and icon files to desktop, use modern destination for icons Signed-off-by: Jaroslav Kysela --- .gitignore | 1 + hdspconf/Makefile.am | 7 ++-- hdspconf/configure.ac | 2 +- hdspconf/desktop/Makefile.am | 34 ++++++++++++++++++ hdspconf/{ => desktop}/hdspconf.desktop | 0 .../hicolor_apps_48x48_hdspconf.png} | Bin hdspconf/pixmaps/Makefile.am | 5 +-- 7 files changed, 39 insertions(+), 10 deletions(-) create mode 100644 hdspconf/desktop/Makefile.am rename hdspconf/{ => desktop}/hdspconf.desktop (100%) rename hdspconf/{pixmaps/hdspconf.png => desktop/hicolor_apps_48x48_hdspconf.png} (100%) diff --git a/.gitignore b/.gitignore index f765810..57c5d65 100644 --- a/.gitignore +++ b/.gitignore @@ -53,6 +53,7 @@ hdspconf/configure hdspconf/src/hdspconf hdspconf/src/Makefile hdspconf/pixmaps/Makefile +hdspconf/desktop/Makefile hdspmixer/Makefile hdspmixer/configure hdspmixer/src/hdspmixer diff --git a/hdspconf/Makefile.am b/hdspconf/Makefile.am index e4a4bd8..3fdfb34 100644 --- a/hdspconf/Makefile.am +++ b/hdspconf/Makefile.am @@ -1,8 +1,5 @@ -EXTRA_DIST = gitcompile hdspconf.desktop depcomp -SUBDIRS = src pixmaps - -desktopdir = $(DESKTOP_DIR) -desktop_DATA = hdspconf.desktop +EXTRA_DIST = gitcompile depcomp +SUBDIRS = src pixmaps desktop alsa-dist: distdir @rm -rf ../distdir/hdspconf diff --git a/hdspconf/configure.ac b/hdspconf/configure.ac index f0b0c95..e11d481 100644 --- a/hdspconf/configure.ac +++ b/hdspconf/configure.ac @@ -39,4 +39,4 @@ FLTK_LIBS=`$FLTK_CONFIG $fltk_config_args --ldflags` CXXFLAGS="$CXXFLAGS $ALSA_CFLAGS $FLTK_CXXFLAGS" LIBS="$LIBS $ALSA_LIBS $FLTK_LIBS" -AC_OUTPUT(Makefile src/Makefile pixmaps/Makefile) +AC_OUTPUT(Makefile src/Makefile pixmaps/Makefile desktop/Makefile) diff --git a/hdspconf/desktop/Makefile.am b/hdspconf/desktop/Makefile.am new file mode 100644 index 0000000..c143498 --- /dev/null +++ b/hdspconf/desktop/Makefile.am @@ -0,0 +1,34 @@ +APPNAME = hdspconf + +desktopdir = $(datadir)/applications +desktop_DATA = $(APPNAME).desktop + +public_icons = \ + hicolor_apps_48x48_$(APPNAME).png + +EXTRA_DIST = \ + $(public_icons) \ + $(desktop_DATA) + +install-icons: + for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + mkdir -p $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT; \ + $(INSTALL_DATA) $(srcdir)/$$icon $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +uninstall-icons: + -for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + rm -f $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +install-data-local: install-icons + +uninstall-local: uninstall-icons diff --git a/hdspconf/hdspconf.desktop b/hdspconf/desktop/hdspconf.desktop similarity index 100% rename from hdspconf/hdspconf.desktop rename to hdspconf/desktop/hdspconf.desktop diff --git a/hdspconf/pixmaps/hdspconf.png b/hdspconf/desktop/hicolor_apps_48x48_hdspconf.png similarity index 100% rename from hdspconf/pixmaps/hdspconf.png rename to hdspconf/desktop/hicolor_apps_48x48_hdspconf.png diff --git a/hdspconf/pixmaps/Makefile.am b/hdspconf/pixmaps/Makefile.am index d8b3822..7278f3b 100644 --- a/hdspconf/pixmaps/Makefile.am +++ b/hdspconf/pixmaps/Makefile.am @@ -1,4 +1 @@ -pixmapdir = $(PIXMAP_DIR) -pixmap_DATA = hdspconf.png - -EXTRA_DIST = $(wildcard *.xpm) hdspconf.png +EXTRA_DIST = $(wildcard *.xpm) From 46eb8fb6090c9e2be56d2430b87b3efc476e9b31 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Wed, 15 Nov 2017 11:05:11 +0100 Subject: [PATCH 116/166] echomixer: add .desktop and icon files Signed-off-by: Jaroslav Kysela --- echomixer/Makefile.am | 1 + echomixer/configure.ac | 2 +- echomixer/desktop/Makefile.am | 34 ++++++++++++++++++ echomixer/desktop/echomixer.desktop | 10 ++++++ .../desktop/hicolor_apps_48x48_echomixer.png | Bin 0 -> 841 bytes 5 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 echomixer/desktop/Makefile.am create mode 100644 echomixer/desktop/echomixer.desktop create mode 100644 echomixer/desktop/hicolor_apps_48x48_echomixer.png diff --git a/echomixer/Makefile.am b/echomixer/Makefile.am index ee08822..beae8fc 100644 --- a/echomixer/Makefile.am +++ b/echomixer/Makefile.am @@ -1,3 +1,4 @@ +SUBDIRS = desktop AM_CFLAGS = @ECHOMIXER_CFLAGS@ bin_PROGRAMS = echomixer man_MANS = diff --git a/echomixer/configure.ac b/echomixer/configure.ac index 769c829..c360442 100644 --- a/echomixer/configure.ac +++ b/echomixer/configure.ac @@ -7,4 +7,4 @@ AM_MAINTAINER_MODE([enable]) PKG_CHECK_MODULES(ECHOMIXER, gtk+-2.0 alsa >= 1.0.0) -AC_OUTPUT(Makefile) +AC_OUTPUT(Makefile desktop/Makefile) diff --git a/echomixer/desktop/Makefile.am b/echomixer/desktop/Makefile.am new file mode 100644 index 0000000..3314702 --- /dev/null +++ b/echomixer/desktop/Makefile.am @@ -0,0 +1,34 @@ +APPNAME = echomixer + +desktopdir = $(datadir)/applications +desktop_DATA = $(APPNAME).desktop + +public_icons = \ + hicolor_apps_48x48_$(APPNAME).png + +EXTRA_DIST = \ + $(public_icons) \ + $(desktop_DATA) + +install-icons: + for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + mkdir -p $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT; \ + $(INSTALL_DATA) $(srcdir)/$$icon $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +uninstall-icons: + -for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + rm -f $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +install-data-local: install-icons + +uninstall-local: uninstall-icons diff --git a/echomixer/desktop/echomixer.desktop b/echomixer/desktop/echomixer.desktop new file mode 100644 index 0000000..80753f9 --- /dev/null +++ b/echomixer/desktop/echomixer.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Echomixer +GenericName=Control Echo Digital Audio sound cards +Comment=Mixer and GUI control utility for Echo Digital Audio sound cards +Exec=echomixer +Icon=echomixer +Terminal=false +Type=Application +Categories=AudioVideo; +Version=0.9.4 diff --git a/echomixer/desktop/hicolor_apps_48x48_echomixer.png b/echomixer/desktop/hicolor_apps_48x48_echomixer.png new file mode 100644 index 0000000000000000000000000000000000000000..48c4b92a7ba27f9b9d5d43197a6ad4791adab1b8 GIT binary patch literal 841 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FRrek3O`Ffd*7ba4#HxOa8d*=*rJ zk)!pWCz`}>^R-Ws(hYOn*j1>Q_v%#Zi}?@dKlc(4yrcPInU(H2MECSjZPT zw)dDd@;g1z`{0(}<-5Wj``sJMjBIL72n9a)G%-dTIgqsvCP*GXO z#4eRu!WAK4Z?JA6^WTkJK^Lw#oM1b4gk7I8zOnLw=#D(D>z&W_Z?pgARG%Pvsp=B@ z&EtJJMMcwACRtu9%YHq-Ek#qd(J$`I-UzSz>$N8ahD+^a$jF>>amoQrf0Mb@%Y5DR zPd8UjYO#|1tLD8{dG!g+9F8ehEH}xnJSMte-NvaN-7|lxuHCA|7x9So*M`84ZO7DR zwcm0P-YL51;W}=SM)3(}#ZIIYZQRD&w6;ZP1IvHi#`8O7{1Q$zoO^DEKWJ=QRsJc+1rHMf=<2327cnZA1B<=3p;vP+#c+C-N zJ;d^y%atK&>4c4~X6&ymrHZ3>yft|l*0wk4L`7}a-BV`CXLa5_-J8-O{5^Z>>Z3{T wJ-6P{e*Rhc&(>4%i^N#2G(GV7_K$bPdhN8+Gu$H>7#J8lUHx3vIVCg!0Lid)w*UYD literal 0 HcmV?d00001 From 39a388e01b15c7a9d420c31bc946e6ec23d4fbe3 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Wed, 15 Nov 2017 11:09:04 +0100 Subject: [PATCH 117/166] envy24control: add .desktop and icon files Signed-off-by: Jaroslav Kysela --- .gitignore | 2 ++ envy24control/Makefile.am | 1 + envy24control/configure.ac | 2 +- envy24control/desktop/Makefile.am | 34 ++++++++++++++++++ envy24control/desktop/envy24control.desktop | 10 ++++++ .../hicolor_apps_48x48_envy24control.png | Bin 0 -> 945 bytes 6 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 envy24control/desktop/Makefile.am create mode 100644 envy24control/desktop/envy24control.desktop create mode 100644 envy24control/desktop/hicolor_apps_48x48_envy24control.png diff --git a/.gitignore b/.gitignore index 57c5d65..e72c2e5 100644 --- a/.gitignore +++ b/.gitignore @@ -46,8 +46,10 @@ as10k1/configure echomixer/echomixer echomixer/Makefile echomixer/configure +echomixer/desktop/Makefile envy24control/Makefile envy24control/configure +envy24control/desktop/Makefile hdspconf/Makefile hdspconf/configure hdspconf/src/hdspconf diff --git a/envy24control/Makefile.am b/envy24control/Makefile.am index aaa50ee..72ced31 100644 --- a/envy24control/Makefile.am +++ b/envy24control/Makefile.am @@ -1,3 +1,4 @@ +SUBDIRS = desktop AM_CFLAGS = @ENVY24CONTROL_CFLAGS@ bin_PROGRAMS = envy24control man_MANS = envy24control.1 diff --git a/envy24control/configure.ac b/envy24control/configure.ac index 08dcdd8..776f290 100644 --- a/envy24control/configure.ac +++ b/envy24control/configure.ac @@ -7,4 +7,4 @@ AM_MAINTAINER_MODE([enable]) PKG_CHECK_MODULES(ENVY24CONTROL, gtk+-2.0 alsa >= 0.9.0) -AC_OUTPUT(Makefile) +AC_OUTPUT(Makefile desktop/Makefile) diff --git a/envy24control/desktop/Makefile.am b/envy24control/desktop/Makefile.am new file mode 100644 index 0000000..0a6d6ca --- /dev/null +++ b/envy24control/desktop/Makefile.am @@ -0,0 +1,34 @@ +APPNAME = envy24control + +desktopdir = $(datadir)/applications +desktop_DATA = $(APPNAME).desktop + +public_icons = \ + hicolor_apps_48x48_$(APPNAME).png + +EXTRA_DIST = \ + $(public_icons) \ + $(desktop_DATA) + +install-icons: + for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + mkdir -p $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT; \ + $(INSTALL_DATA) $(srcdir)/$$icon $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +uninstall-icons: + -for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + rm -f $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +install-data-local: install-icons + +uninstall-local: uninstall-icons diff --git a/envy24control/desktop/envy24control.desktop b/envy24control/desktop/envy24control.desktop new file mode 100644 index 0000000..391c647 --- /dev/null +++ b/envy24control/desktop/envy24control.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Envy24 Control +GenericName=Envy24 Control Utility +Comment=Mixer and GUI control utility for Envy24-based sound cards +Exec=envy24control +Icon=envy24control +Terminal=false +Type=Application +Categories=AudioVideo; +Version=0.9.4 diff --git a/envy24control/desktop/hicolor_apps_48x48_envy24control.png b/envy24control/desktop/hicolor_apps_48x48_envy24control.png new file mode 100644 index 0000000000000000000000000000000000000000..73c47d67a25ee245181731883e709d0f7f5f4c15 GIT binary patch literal 945 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4kiW$h8qca7Z?~AI14-?iy0V1R2djV4l`cO z-FlaSfq}im)7O>#ItQPqz6}3{{WS~>%mJP*jv*0;-_G>S7V(rg{y#MKu5E6Qq~{{F zq$#}`5$*6le33t4{jhUp8(z7XCQfpJh{CxVqYSoYuD=UAkT=)O;>*cHF>8*I&1CDJm$t8!(Gjs3Wh6| z9c4IrYf_hS@SGD39gR^RUof3CS-Jkol#n^aIf;cbfvdx|cts0u=MK@E9&cA)mGf`O zV+-Bx^BZq#AIm;RD=qrGmwsD%vh8|s z?=daGw;W{_PG4gDkDgsN< Date: Wed, 15 Nov 2017 11:13:04 +0100 Subject: [PATCH 118/166] hwmixvolume: add .desktop and icon files Resized version of public domain clipart found here: http://www.openclipart.org/detail/17428 Signed-off-by: Jaroslav Kysela --- .gitignore | 1 + hwmixvolume/Makefile.am | 3 +- hwmixvolume/configure.ac | 2 +- hwmixvolume/desktop/Makefile.am | 36 ++++++++++++++++++ .../hicolor_apps_128x128_hwmixvolume.png | Bin 0 -> 4822 bytes .../hicolor_apps_256x256_hwmixvolume.png | Bin 0 -> 10069 bytes .../hicolor_apps_48x48_hwmixvolume.png | Bin 0 -> 1928 bytes hwmixvolume/desktop/hwmixvolume.desktop | 9 +++++ 8 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 hwmixvolume/desktop/Makefile.am create mode 100644 hwmixvolume/desktop/hicolor_apps_128x128_hwmixvolume.png create mode 100644 hwmixvolume/desktop/hicolor_apps_256x256_hwmixvolume.png create mode 100644 hwmixvolume/desktop/hicolor_apps_48x48_hwmixvolume.png create mode 100644 hwmixvolume/desktop/hwmixvolume.desktop diff --git a/.gitignore b/.gitignore index e72c2e5..0909477 100644 --- a/.gitignore +++ b/.gitignore @@ -66,6 +66,7 @@ hdsploader/Makefile hdsploader/configure hwmixvolume/Makefile hwmixvolume/configure +hwmixvolume/desktop/Makefile ld10k1/Makefile ld10k1/ld10k1d ld10k1/configure diff --git a/hwmixvolume/Makefile.am b/hwmixvolume/Makefile.am index 38690eb..0437723 100644 --- a/hwmixvolume/Makefile.am +++ b/hwmixvolume/Makefile.am @@ -1,4 +1,5 @@ -# # Process this file with automake to procude Makefile.in. +# Process this file with automake to produce Makefile.in. +SUBDIRS = desktop bin_SCRIPTS = hwmixvolume #man_MANS = EXTRA_DIST = gitcompile hwmixvolume diff --git a/hwmixvolume/configure.ac b/hwmixvolume/configure.ac index 09d5f09..84f8473 100644 --- a/hwmixvolume/configure.ac +++ b/hwmixvolume/configure.ac @@ -4,4 +4,4 @@ AM_INIT_AUTOMAKE AM_MAINTAINER_MODE([enable]) AC_CONFIG_SRCDIR([hwmixvolume]) AC_PROG_INSTALL -AC_OUTPUT([Makefile]) +AC_OUTPUT([Makefile desktop/Makefile]) diff --git a/hwmixvolume/desktop/Makefile.am b/hwmixvolume/desktop/Makefile.am new file mode 100644 index 0000000..d15b5e5 --- /dev/null +++ b/hwmixvolume/desktop/Makefile.am @@ -0,0 +1,36 @@ +APPNAME = hwmixvolume + +desktopdir = $(datadir)/applications +desktop_DATA = $(APPNAME).desktop + +public_icons = \ + hicolor_apps_256x256_$(APPNAME).png \ + hicolor_apps_128x128_$(APPNAME).png \ + hicolor_apps_48x48_$(APPNAME).png + +EXTRA_DIST = \ + $(public_icons) \ + $(desktop_DATA) + +install-icons: + for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + mkdir -p $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT; \ + $(INSTALL_DATA) $(srcdir)/$$icon $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +uninstall-icons: + -for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + rm -f $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +install-data-local: install-icons + +uninstall-local: uninstall-icons diff --git a/hwmixvolume/desktop/hicolor_apps_128x128_hwmixvolume.png b/hwmixvolume/desktop/hicolor_apps_128x128_hwmixvolume.png new file mode 100644 index 0000000000000000000000000000000000000000..c131adc2bf1298321885971eed4b07194e72cd8b GIT binary patch literal 4822 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4mJh`hQoG=rx_T8=6bp~hE&{oJ2$&PCVcAg z`t9<@i|0w&rm1)<-?o@G$6{NvugpXTjz)n=zBe3tI0Gsw>!S)3B2Uysthn{$@VoZ4 zUK6MDDxTK6qULZg&6(phZ=`-ghbPmvGTG>9@tah=x25dW&Aj(_$8X0?Lf*#L&O}I^ zH2%B()udg^cjw=?`(J%-=koWq;RT#~e$D>B(z@Ws5AmGanG=KJcv%=4yH&Y4`x<5l zJesjeYpwM4xX*9c|2;a)eDmCSjWf^dzT}+#@blw))!>(654(PIskaMkHdd{<9`Mf{(iaS$2t-liDFIba=*xsrLrE_D`yVHC30T28(_PmgPwb z`SGEmB*e9FHz)Uv7FqYCD6x|vvpOSs9$qY5GG)c8N#c!*J|0;dbn1P_Tz}iY9wu`2 z7U4`0(|mU<>zX=|P3iQZ6|1@yX>hnI&h$x|xlDUS>*pr{A)@oow=dGTv8`7rAtk42 z^IzsUcExbIDYl6&svt6d(QR8wzmP|tJ3~n_5Hys-?ivcZ%v--=~+P zq}W}V+%4nrz=E&szJG44?8K+1GxPG&4qrXHCjRn~mG3soynf>(cxukShTPk?k38;w z`@(^Q>uZt27RUIixM^xc>U#HR<*4*GucRS8vz;qsr%d`GtLX z-~9hSj`#HTUffb-`TF{rV}*0pT-TWXN#uU{VKo!q$Jck46@GgY8U7gp^RC6ME9yydp;hwH?lA&m|53dvYlzW)50vN{WT9+WsX1GwKe-g zmCekpZp)fO4>CNQmDSeXW^w0QoBHXaH$lOc=o7~D{qw`8TT&QYIf7P-^gVuZ^|X-F zhUez{A3B%cIrz(T_09ShC)QLnPV=m|ZWiCVYSor^x2I445E|-wxwJ*#$m7D6+q!ew z6=q`U<8oT`M1;w1(3-_7XZ0Elq z!1vIC@AdL*%8XLdio|w~)#)Ya)5jt+Ep`nh~vsz=Ge68v{n#8*GUryr5q#pv^k>8xAt=Hh1 zmZ`M#Otf0mLe^*8vDa7jyKL|kHnLf=NP~x;*Z20SpDl?JS6ZARSr=qV?cKZg#9U9IBFV~Cw{_9s2 z&;I!j7cOi%B`Gg|{QdXmzKd9|*Y@QG%Xb!hJ0tmJrAFd1-^(U!>})Gmt~@wv`Lr2+ z%U9-SB&1YG_+H*LZS8BTyUYE9?_Vf5sh{4uqUNx{idO0J*H=|Sh~glUhWHHDd0 zWKP{I|8Du$ZO$dv%99fxeqgqFQSnhpz~s;Cqrwa8Pwe+U{<<_Iti-hF^}5*??u7`< zD&Q3;i~N4!@; zUiMe&tjuQ=6N`R&?F^&Dt|(uSF4W=+wV+t&8uy*s|4M@P&;A=v`>=C!RdBFff}{ZIJa|`t^<7|GhmjcS|X#M{Bc)vfJ4F zIh+5X`*z(ioL%QkKAgCJ`%dNcHxE*!j*gNBx12Lb#BM5a+f3*QE-s zCCpNrZ5Hoe9WCu~p|m&t{g1n@*JHjfU9G;noiih5-<)~x@`R!`9r$!`+e6vaM%=&t z{H%Gu{X_6GuOgN`4h>9BmD+;BO2x0L7IGZ95|o`ZPpvC$_NyDERWBoB%pF|>C&o0% ztHd&i2(DaGz!`9^J`ooh8BoP7SxEt;&Wn6|bp)zk9t?zs=Y zPf~1%WMi2SB=qU$j;{|Kl@1@aSSixT%)Uc+ZrjQyKIOX6X0n^61_jmsv6y$xkDPJFL^A-^J&i5o`OYo(t);#v-{f9x)|EYV(o#Fi!^iiQ+nn;= zEuZq%RQu=d{KiCvqM)CuLOZv=_`ZMn+~}w}51n<>1Q;JJwYSxt=~M9hxBS9YT1WQT zmbM%cbaQhH5cyDPGAn$)&0Mv6g)(+O?#*7gezuHg&DB?Ge)BSvgX;S}Kc9T$5x4%l zM?wm*dcr1qdwP$4s64h}t>r~4KwpLaZhK^J2jOdZ`KbZ^@c}%4%+!lEY0tv^;4NRG&hEdR#h9% z4+x%Yo;b(ojb+S6mJc_~cH4bXJYsxaA-=Zs8z;Z*leQ(nr@Tsh4|g41u$cMcl_N)PGbu8-xgPz(;`{L9h0x%`_oVX{ z9Nu&x=J>}`iVO`}EO)n^-E4lhWu?ZF%bDx;KV-YbC);G2z2d{qAIsm@JYSS;w=b1j zTUuK1K-W}l%j#Dma>pHu=N{AUXSlr0m19rPB9G3z+dq~iF~l8rJR|WtUh&A6_j1P_ zOQUN$zcIyttFZ&E-VEY;jHsL`;*4o(wE^8CpUzHUTX$n~f4W_B#FK*Zi{9IFW*__Y ztGn;&^=o3wH#t4HsDJLi)R*7gQQrfu9^LGmwQAL=9)@X0t=I1@tFnLa-9PP>4%4KS zBIa@Rf4}@Ybzpn5x6OQ4-}8!!mE;Hz=bAd7b4T4_wprn84?X|7DfhIP&*}>8 zs=e!%wjTRc)l_F6{eGYH?i0*@_jXr)F1c%8dEQp#x$$pLM)`|d{+yoiXOjBTGc&48 z#b-=Ay4>zppoy#Q@cvf?9wvJ$nsEC)BdOIO^!(yGwvB_z9`;c z%zt=y?rpuQ*VVfvqkME+?sCgog-_u0P@OE%*4Vw2@pxfC=vIZ^m<{|2OOKpP-BrGi z-*kSn}>SC+FnsO^sw> zZfvUUj;yWmRhH{de)izya^J}b1{UiJ8AC%qvN!LXI^R#Y+wJ3%o65UBtmE=su`)GC zz3=gZ&sEQLEav(>{#fN1@3g~-!>_EQ;O;VCo^RicFWjHMacaw<#8=9KeR8%|`8OR! zT^H_N-CZhecH#Q%(=SeV9NRSARq0CG;VtrZHtSggoC>z=om(nxW?*9B@qcIW=99Le z-#wC*m;22-v-_Q>sOXXBGs^Ur9(nyWY1Yfgs5CJ~wMU#S0wH0cXJ5X&J&iTU&)#KQ zajSq#cK&e#o>{YIr`xs&G+n$H*e7pm^?st|=}i{b?)in5mR{S$&dz3GXR<{h(9!p@ zMcoq)(K`FH+1FCm{=TT}{z)r7G}K0pe`7?BUvFe=Z10pw89IjA^^bL!=15BlhSMMzN>h{ZD-sGVoWI6NniBC^wEc3koAZJqgny)`Ma%LS$%zFK*Xx)?6_K#J2 zD{Adzj%(grbN^`D6d~8pkH2ap+8lMn4xch?%ABQkeck*RiPiNPDS7e^fg*in^PU|` zXpoMIs(AWz`tvJH`Qh8Ar7A8xV!$J#c|XYVUBLUMYW|{C^XJdWO8J?w`d1s(jOW@1}hY(>PNyYyY0_ zaVEZxZ>+q0MCfErVZ)j3%Qv?j&R)yDF?V+L_B>S)uAOFoxw?4nZBFH07|`)=p`g{S zs!e*q3mGCWmmd@2jLWVSe(7OX^nPzn&Gp?yTv z`>?@|m(ONbzSrHpV5Js&e`&#@&FrCP-x>VcGta(rF0|WSp;w)J(@b0W>zeq@QlX)R zGVQ|0`-`{jp1p6M-KCXNygQV(m1wGN-MZCfntpm|vGG@4UXR<$mam`xt?!)W{>vT; zFU6^x8is6cWD@`SfWu;Yu9w} z!ITNAoi1I*&)Hts6pNkSR9qw%>iSUn{-0fo7(>|p-j}nr|JT1WW<|EtUuWenygZ7k zSFVKwOMZE5UQRFA7Z1@ zQlTyXbF%*%n+ZNk&4V87N((x5a?Ol9_e90T&J7M6dds^tYU9o?TyMXjR@k`p?~i1E zS>M^$qQ1LM*Q>3O`+J3%|K9yMh5}z6+^>0ii);RS%kQC67kpT%67cZ%%iFE~W~Kk{ z^v}zdw6p(qH%04j-t{^0FW1IB`do2u1$X=V``>n+-*T>tHRjc$>vg|x@A{u>{fqT< zS=5p#;mnNFZrxh0m$s_X-NA>WFeY@$-`Uq?jBZeaib literal 0 HcmV?d00001 diff --git a/hwmixvolume/desktop/hicolor_apps_256x256_hwmixvolume.png b/hwmixvolume/desktop/hicolor_apps_256x256_hwmixvolume.png new file mode 100644 index 0000000000000000000000000000000000000000..57d6d0a837b514a799888028fe95d57f84ff0b18 GIT binary patch literal 10069 zcmeAS@N?(olHy`uVBq!ia0y~yU}OMc4mJh`hM1xiX$%Ys44y8IAr-gY&dn@|IbQnw zf9U(KZSUOlZ!k8g9Hbk@wSV=W%lgI2$I)Q!4*4=ZDc&<59@kg=v*v!X;$CBr# ze9|=*KH8aTy;1mhmu}<~SI?3R-6bATBAx||<`Wb+8g59xsD1x^)idS>HHV~3hP%EC ze*Zi7P_f}%UF`Z-ckA!&3N7tc^p>f4`*m$|-2H7SMq5KJe?2N>z!=~ta3p2|LkZgv z(a@JBtJ=1`I<=|)o6XkuI>|ogzCOy?Ccmd_-O5KdUVg5Z=vJ?@p6YdXzQ;1Rbtls5 z1Dh0nJ%RCe>+AOCi-Z>#vE#ISzfpHqwF)_=Et=#kT|S7PAy z%unFEkI0giMFkPM)0DSf75)GC<=^vl6NDKpDjrP#e)rX@pMeHaw_Viy1wIG!c)i{B zSzB7n{{P3l)$3Ax8R|Y<;{Si|Ie(q2hv!xwfzL9>Bu?Eu_rC5W|Nb9`=CC|4f4?`p z{#nxLi5@1`9Ol_M>gePj$kTlpcXda}<>U4{j~gd5TKstyovpX+j>YUtCc>fWjygU* zZi{o)tiS#1%D?k-PDU`q{rn!jt-S2(oC_s$vnD8rS*%+1LOM+M{*NEa?J7T>yZ&Qt zy~Xd@k4s~1Yu!)$;9O*I!6bI)g-f^ooDPqRwpz-t=kG7a)9mtdv;CF@v8^&|($Ele z2#^2&QIqw+tU4KG*1Q?PF ztltz&n|3I1`=PKPrtD71IfWjYj;H%N4!x{pWMhjJ?>Lgg;kt;U?eGUSrw{DT2?-Bu z?3)yp9(lBD*532~&wXwWVc2o)-p3-lYhSq)6AUB*f&=?rahac*!*?Rk&||;5Q$w0U z$DyT1lH59v_N*#0w|L$#MdAzV1#^p*dyS4SoSs~HEi1>>@}J{?;@7v=@2|+u%gjBo z^y6!%1)I+Fwz-;W6k95`G{_Y89uw;-<~wHDvQAm7TXCX?!}TqNOpXHFoaZbi=iOwOs;VV%Uh`24opkzGd9nZK`%Y5S+Be`|M@;S+9$zzV-pQ$3b_V{W+hSTcsy z;biB-*G%2nt2gAFRGQ)I#-X^dKQey7Dy>HwC90~c3=9ky-d_-4sG=&hyOelVTkB3-!zI=BM)r=Hy>@oF- zy&Mo8-(Men6r*%V5F&_58MX?-uNgsd#XZJuo(!d*N#Vrv!>*BD|NoKwuR{}86t8==byXp!)T`H*-f<`MJS>nn-Y0YL z!UKh!KUfUA{kCpf$9G%4PC{*R<{5)ok5BcMZ7KhH&XXl1)U&|hoaL?!m3Omr)~@!H z-oI$oj-r=BarIwAf9#1fs%x6@v|!iz?c(eI{&}9Uzf$;=heE)0)-ZFuqrXIZi~n<- zQ8Zkk$Fglre6P`T=EXOgM9zJD?c9E$cPb^t8C8NtZdSOyjq+UITYKzue;Oi z_u)kK`-j`@{#UM8WwmRMI9sS|))}osYd9K~y^h$u$S^k|$ZOC4bJmrnb&4!+%B)3P zJpAEnCnr)L3!&5!>IZMBNnUky`;-nyOqWj`(U9kuqF%L~auGR(F zw{~!)_1w*q_{7k$XT`w}!eX55$8A@$H8c86=jL%x5pvX;dTM9-h0@nzTSB;29c18K zu<8u&?yW2re|&NL*^`=8`1bA8I<{uU{g!1q&-M1*&1*mXmW}zr=PE%S7KPRYrff&{ z$WDK~t1m%;Vg7mcQWqYtHP;G_({^r{%I`mC$KId-j*#$a>0!@&_8&>yzO?>Z)!q+0 zJWt-Voe|@X(Gx%P(BO}qyig~Lr0vEBM-=3`dF}Uqw1~+w?{Q1+n*AOD zL#ORDjuM|RF?6P{+mspk`ED;>y*X3W)D#$#XWp{z@bk}(UY?t|k1)w=8obzLw@2MA z@IlGWqHng%&CSVHIoWO>cV@CWcy-=7)%7K+{@9Iz_w!Q^n@IH*?23_)l5sJbsd8AI z%a7yHMv0m@{X2Q)Q)F1q|E{XOJa5w!htQqUmwRoDgc?p6rCaSfXW4%K_1RZHj;5F$ zPB6G|&T)}OOF}_`K-g+gHs><_2U0IyODi)7iRP&9XRwdY77=z=z+7Ml+AS{XAdWZhrn8hADlWx6ei~ypws|e)!>+f`oMuUS0}I zT}pgDG%0i)73OF^Y%uezL7FE^(8?=2{#tN7zFc+Xay3KwneFM>+vhLRNa(pJ$Fyh# z=a0Vz>7EP{$sR`@C;v03U7^>kc;LrSz6T z``BjBW_Z%nb;|3@w=V&&g^zITwY4pZ0pOux(9nR3>rpz?Ox;#_~d+r?(zgXYb17ygI*1nC_YR|)* zU}3SV*U$ehE1y1f;oh~nulJU!$Q(Nry86>TqkfizGJmEwOP5+kCLgevzul0*HE_bE zEo*X=cAnmSp>)H7kC*!|UcP_-3O?n%1y8x`amKx40NA>RyS+-Q6d9dwY)Ni`e)euRUM# z|Fiu+G41AJb^k}@-`~6EhK3%@FOwAg8_p-^;vF5m>+bgan@w~1?IJ|J`^z2RP@g^P z(lPr}zxV&-wc53d>({>ekKb-*K9+wPA6F~dSvl{ehBm*&^BpyRt8V>p|G8l$XLF>@ zvw18D^A>Ax`Ni)rc$ocO&OUB~ZR4`nJ1$-{e3-57H(&2Z*>w}%d>K2Nh2bS1=9VXz zNO>}F-D71jc=B0MfXnyCuLbABComnbbPq26yk!0M`@2FvBtM*|Ice#aYMT$w72nHo z9@s0!aISFU($rINhhBddk4f-(C?mcuX6Bc#jSCm4Sla`8C~FPsj%{_g*C-pM_Snksfk&Muo{|K#&T29bSC1}%#(YTgg(2u_}< z;=${#)M~AILgG>9ktz9|;*JVaSQuuM%~~(8oYA;5`$eTy)2q13y30?!r?A%iS7Bgr zoWLN!;>hG6z{1JkD6n`%2rD=HLQajQ=99Mrs~6`n_!|`bedl3!*{I{)amING<+3Xe z1TkEre*{U_Nqu9&GXxb)?o@8aKID3>38|K5ot5w<@Y z{}_Es;D58Bxxc00QO9GoyhV~{Ej0ZXd0KM!rk2MZPW>GE=ezw+?V7*K<6FPgF~uzW zAjruu(fHQBE2igu>|gNL?BCS?CX4TVcU#1I+IMwv&^qz?|J7?=f2w!AAE0j<#OPpT z=O6v_#;VCLs`Lh4(O54-A%;iuHaNw%X~h{YJ|A=F>6~evLErtE9Gv>Fu{HNt{C0#yZ67>;^LB(7osnf9@nsey%)fs?^;0>cG?29PNnTueeL46Z$F zy%0SmFG4tBN#Ma5%6I9-md2w`n)-RRNA5ah+7 zcsiQC#0F5 zb8#|EeB5?X#DUQ+z@I_s^TAt2I;SgdzL{mZp1ZF_V8e91!xtydKW_a$VEXfE5mnJT zUX8Z9XKyIGdAh^JDWPW~gTT%guO!62>o}!5iyvsX{`L9?lX|tq{d&hH%@NOcz8qC? zVgB@04`LdmzdgKNznlNojGT16WI?^c<`H^-iT%RPo)zc%0ZW^X=lo-fDk z@1ouxoAv+c?r~nL!r0dl$CdtRz6O*zxr{feoB4p zk+ph#|9}6rKm7jf|9pX@#OLt~A{#2ZmLG0j|M%?ljWH%l$C5HkbdGP|nyW5Y(4b$2TAeAeq5zL_)lhg#R zH%oVFr~A+6G&`=Y@bu8RgC24RYC_Y_31;y>D&PN$$ENy^#n%&-HK#wy)(HPMUjH6_|5oFUVuCgw=QGELCzJo{SiK<8n1L029_Q>JClt|x|wu%4V)_BIg~(_uD(TcuIL4L*M6l`Ccw~8gqKeb-9R* zjBPBtv-M&woBWvmLooQ!gE#m3Mee?vIXlwA={(<2hK@x`cee+sPGAr?>Xoi;dryVI zWulUyg^L^mCqv+zXZr2pY=R&$t_B501xAG~VMPfOEA^=?4H|wWydA-9B|;2~JXjs3 zdrV>gnPJ7k5M;svR;bzT3ewXR$iUzs#301bWW&(J(x72f;v2-Hz$|tp&mq?9!z7_K z22z1U<4K`nc4)LPct>0k=*%Pgb(>qmMsS_O`n0z1=H1k>iN$?nf;GE8f3p zxu54gdx{5ZbAZLmXEpBLo=YZe5!s=@;=r_F*WHR|uR?Qvd~jZ{yZX@gwKE<`RWJWN zDf{}eno4DckdOzL`eZ9gzh<@6*cAvhReIa#DXMTDXcA{oWRZ%|+w)=Xdq%nQ6^S=C zFz$G7=h4kNK}bi6_1s+MTel7fS^oY5Qb>^m7gMucI>`&*w?o%;;~!s8T#- zYiWVN{`+@$JP$WiN;4~n?P6fike1o=_jmk1)gRB!&aAf+IPo%O!sor;6O1ku-uZlq z*&|R^r-G4zA$1L7{Znn@-vt(Pvc*|N7#Aoqa60T;v1U#@lf#+&APytf0iTyI7mDcx zskAb9Fcf^%+FEc?iy@Se(_vkIo8pOoo(#_n8yU71Ok8x~jSeS+Qi+MrMJ|T9m99(; z2@|4rcm#SfcrZk`vu`b!m}C|#E3%crgJI43{-_-u8>2Ki9Gn@rn8b9;*xN696f+*x zW!NH>;<)&=RZrW)`OU^ximo0gvg3K+qxa+Gu|uK^QQW&8bRI1+(R<0tuw~1t9hc_( zJm=TUH6@}bdLQp=yCwlH&I2}Y?M^g_?O{$o^eT1zlKT3j^<5!GoA1sQ;|>U(y!+qI zZEB4h{@Wjz;l*U2?|EUP0k`Zi371zw{~l%MA4p)>wc9dGXS&7pC8?hh|D3jep635y zQdQ&ne+Tb7c06fX|M<{c-KDM$tc??7l)kC$`?yuxqU=?rOx=FD+1nVj!(ZIkQP{JW zx#MVK0EfgUhJOqfZl<2fij?6?IRDN#;_?rpwl*b=mYjlCZHAkE%x-tA&8HT-9C~|W z$FKUt^Xs_2RD~%ElqgQzaws;8Z~k>|&I2J#7TyiNR!ux_*tYE)-;d^np6g@Zl_dxI zo;_mw_tMfGm5;67Y%@4@w|2vfb%$Q}Doce1XslG=4riF;xoJ+5w2;IF`v>gD+Y4@~ zl*AtY``Y|bQt{`O_u(R}$L(r_*S>u_Ij;Eet*tjUl|64+Uz_yZxZ>*P_Xe|kJdQND z@H~joTw$fks34Y8(@;F`U%a2e)6?#8v(N3GVY1mcIe~TF=ZVW0ITy`n4`;1TFENk- zH@gCRm>fUg|NXSKyyWy(WT5kbY zZH7Gat$L0+C5!^e$3Ge0eEh!T*}ejks~!^=p760LyePQy@34Q}q@V4gs?U`K?r!7l z4C$Ju)Wo8o&U8S+?#8C4-=^F%-^Vy};Xy-&M?0Svgy!U?3a_YoZ@Xb_wBq~y@;CO?-ni<|&U2(dNnpQxMmBR)^yYaoS9TYx*KI3SUsr7t zkhxLNk!iyG2#5CT-TNcAa+&TfOH3^{f5pZgSoB$KhK$|ZrHd9ZIXgQ~SX{|)>Qvi* z-hR~!7w_`sPI}nP@<2=1b>{8b@C1Jbjg{+XLEFK9 zbv&!ITtY*w_~!^P&A+pqzrFse_6y;jlcKH%@5|bDW$2i_+-klyzF&Qs?(Wy0XDv(o z-6xx2RmvqH)6y9xA*90aS)t-!MAc6H;{^u-9@ZRMY1vvVu`E(@h1RK-`P1j{*NZ!f zC_FhX1a3TIw5BN%m=Ju!q|-K1QSINE2lFB}s@v#(`mN8$I6+8kbLFY+QzCR&%Wo{V z`gUQ8=Ztl6VkMiI4J3Pm_Z`nLn7|;i=P&aL9sT*AY^SEC3b3j%u!XkXOqun`R&Tj+ z?LMc4iY*PBx0IavZt69jWOcl1%_0i={KGh@W^uoHP}A*#x6G_=1W$Vf?I!(cEBoatz};(yvok@Wawgy zy}q&T>MG9o=>1utj%Mr!;*9@&<=x%M^Ta)w z0ve8e_$X`rj_cQzu<+#T&itZZ_P($F^KtjTZOO00bXKj@1oyrCZU0%UQB{5XFYaAg za;3BL!K1ZlUiZ$i&EfyMdey2Q=i`3~-K+W@`=!z*BW908f9;!O53vgUfY7);{rZ2O ze_Z|jURkI+@$#oUsd3B#WHRd>9{@T>raR24s9Ws114{xR)l+e~XEPph^s&!s=d z7+%cCZ8~ux`LuYYFvGc@w&njhllCpv;9{z?ub8)N>E~CB9I@@IR$V#8V#vwXthheg z_>&gH#|oLyt5;d~|7cN2yXwfrIQ{nA>lVIotPO^3_vXn(tPRV0n{!1y)Y0)_$<7Ox z@6NsMnpqjoq0-WDGwI|y@dFYFV6?;^c8&)wJ)uekF0 ziP=x)D9`kGa#hdG`eaR!e;CuRTDy?2(A2N9u17@$%x*5do3`0w(5if3Ct7M~O3VR>-kV4vIMn?2{gee?X@pR#*jc6PQP56h?c_RG`X^_?^0 zzUZl`+SJIv6M3uqtb}v8JNv5atW9=xRZlh^FL?FjWMwwPa=SkQ+TrWZy{gq-)n)qn z+C#VO*L%umSMS=rG5PtqHBwnxQxCQEN?)w{TNStHqiUEo8ynlEWNu@f_gmhJ1@#!m zOujf{>JiCK7pAb;y4iYb7Ok?lex=3s_qWDkyXSI_9F1%FZCgJ3`hKojxnYXX-o1M( zDz2|v!?QXh^ysq)QMo|^ABEr0pOVeUSsWBN0<_)ktqRNK4l{Oi`kFI(m_E&4p;iQcUGkuoz#&Z~^M*C?qIC&j;#2ImB*_MaX zBG$gtpShZYrN+)8M(@a?i)%FBofKAIuu5y1PHfjx?J$O*v@JWEiu(dIT4v|w?znP? z$2Cx_MbY4xK(|}rn-hXJa?ErxGa9a@HJ{lKE-Cu>v#;-kQrrCQfK8nOOzQpe?MAoW ztqx1A`#(onhHK&Gy|UqYv8PV|oqaZK1sk)|!Gvq`4BJmny?6J7gtLax-j0F;6n9VrzY)uHqa~UU&J2}~>Pw+}rug^4%Wq9{K z*0y1hf>`&%TUS?a-j~0xL3r_ojc@N=Gt+-xf2D3xC(EIQ0b$lNx=wj@2>Q=5Y*W1d z#nE-1=hH7=st>qxX|*`G@?FwsJ)C%CQQ(d{@79s|c9z%}1(=$eMU6+2JeQ55W}IhWaZcPZmyf|AwbV4H z%sR=EW6B0YN5SQ%Sv@%CuMGPy!oa{T09p%he*1#h;6*sYQQ&)e^hEG%V z)TvVm`nta5XPBM;^?Zs+%L$FGowr5s)vUID+dl>8s$VqR=bwL`efsIvpmyeIlO`pK zx7#o$&6CDYNo_xb4tn-e{k#a}XhaPU>C zcY=vTo9OaAGGVJtpI=s;Q_RA|=%KlAmDU_T^#c-1rd%kMofwc|alT>7l>CMr;$i&J znJ+E)O=Y;2F25fkXLEhkt5=1;vz;Dt)HEizHNNR#bqE!S*>kP!?CY?lyv4r{^FO{Y zJ3lSg^?r#nbL@3N9=6L~t5;}w%{_PfnEfyNy>-bQVS+duDmo5b1-P0$=tOR|2` ziKm~HN5>$>07nPwFql z4x6B$peBFYzh8Fnt>3w{^w{mi=}))cdGVs@dcF0gl~Ozve@?1*|C_+tbYlAS-$(B4 z-QGLH@JnUe1#1J7$JvDm&(Z}7&Rs0|$d&Z*HmC3$J@I)}zcObnQtpsRGLZOiCf&Y! zlA*fn&n88a?OU3P&7>I4=v6`g!aXB})>DnH(wR&b>_w3M`<$IU1__#e@@afLx-`CxeKDIxXnzG~SZT4f5 zr(*g_Bo=JhB9eW5eY-$X#cu=M3yK{*JoB}=%<}H_xXaa++^Lvv*rvVK{9@5&<}Rb@ zTiJ#9cE2@$)2{#b!$-&X2L;=>-fg(Oq42EN44-3Lta{fy+I{6tkM?vu$IB+S?l=pS zFL-TrMoswI{d)VbwUNc)>e8LZ3ceL_FZy_7j&+cxs@b~OpEA|Izczn8t9w14=|mJ8 zkEZH0-ME&g-eSG8rBZqv!86*6zuqz}xx0(C?dR;W*$ST$zsxDtkvkc;b;Z7a>&`?3 zd2PA##wES{{u-sf!ii=xKV1F)>ClG-f0x$(_*a^*u)}8d>K98`LZ&7ky>v7pD4aJ| zUS8nI9Oj;d>vv1<-Md%f#ryX1433j2LUTSh`G+}*O!epQylwgGOq%hjQ>OzXBRgm9 zvI+?ccjhwG%dq?P=Kh|mz0z~wdi|QO5Fj&X+Xp)vE&|V|iTz4_La}$hljHIGISfDot!ymuWKF zK_|lEc>ph)gs<9^DN_#QZ9kl1fwq zstIRa2GxK6zpq+NsyqK&YAT0fz_X$S%Qi7xeVQi`BI?9(;gaH_h{T@8;?JwNA_Vd~ptGjcGe=sRl{B<;m&uzUM z)?~C?Sg&1{Z?~wb7&k-b!`SIXbAG!Ba9=)<|9$hz#I;j6+>=2IPFS5JKCue)9Xs&z z!|RN!L`+tG+(_ei5WbZObz=?@xL(~}q$zBjzarkgk4yzr9 z(tQrah1`t3mj(Qn3G}PCZGUYv?fYi&rBe#5z2mF@1^d6*t{bKFUZ^4d@23SzpQgE& z+e|D8ye#OFn5ez+%bpMO|82>e6K?lyy1M;d{ck6jXJ41@Z4(Ig)q;oN%r=Ux4O55?nWeA_!S?#o){ z{d?B$UH#pCVMd9tB{Pd5e|4?Llv_E^!%cN6>%QMpU!S5PX8d>3^|*gO*VV0mfBT`w z8^PEYTjJ&`yxX{Xy@pI!_tU?-R(0jq{Mwn`fBr=DjJM+P*5%tC{did%-*r^@yn67; z-p&-QTF*-?O($IW`%BLGEZcUo@>~#NJG|b@x!!I*Prgy_IuZBN{j#hU%Po-g>%!y RbOr_n22WQ%mvv4FO#oa=nQ8z4 literal 0 HcmV?d00001 diff --git a/hwmixvolume/desktop/hicolor_apps_48x48_hwmixvolume.png b/hwmixvolume/desktop/hicolor_apps_48x48_hwmixvolume.png new file mode 100644 index 0000000000000000000000000000000000000000..41c366d4dbf4bc89d67b9a735ff49f79913a8466 GIT binary patch literal 1928 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FV@UPU;4Vbv4!(`FVhd2D@EZI0W=grpd*KNP^@V|~-FI!zccU^Y* zlEqWs&8#llXI%X3%*>r!57LkOmx(!l-qT^jo0FV;nRn@x{Kxz1U$u(QKfOx$xc@gX z@2C4CCo+ffX*WeMrZk^e6X3OQ>nhueUa=o)|99tEn%GCF>=E7erDS7ivH8B|jVG#3 z_jT$_F5h%#)(jVy0Ix(>zLsNuE{INCZ@m6>$b^LQczyHZ$0~mBe?RH`^T4dyr{aP& z_Q%f6wXV!4nDAP-e5d*3+4DEwFKg`CI_=(B+muIo`TIYzwK_4bHJ$f7mxEnMa2+4N zv66m2 zqr={l)3Wv{&rQqAdEvrx3Rw&Ot`b_+{L}YFhf=cG-p#WPEDYbg(B^t><;PdgvcF1P ziCW)Pf0bbk$Nq|+sd;zz#de4A^7*$NKlbD9>-E>oqK!8sKYl!??(NoTKjb+MT)Dg3 zCv|g-lw_n}gHUU-N#2uB55ID@xw~In=;rPhd|yx`Z_(SZBDv}MYFX7Gg>#S zVEHtYY5KQ##fhFp`j*ZAR~-M{AFC4VvH9oTb8R~lOSPh&?tFYnP3yR`+WyIp!{^tv zPB3cU_lxyZ%b$tH3^KJ}Ie!1&!~WVMID1Vex9MV!NVzh(H122)kDy7H7X7^0XXEkv zve4agN0oHMx(`kW|M@#6N7rNh(M4k36CWL)q`j7t!O>ubzg|O^wd-mR%h&7ImxYGk z+~%stDzP%-?m?YUmKd624vW4OFfBe696g}5s|Mu?aX1VHfZx2{)d-r8)%xF8o*fO}DD5>cy{M_KW+K=KZ**Xmfn|9R0h? z&nV1%^da%Zn--t6k1=Ix&DTC%j9u|+ZkXnxRqf~Qb5GmaQutAc|4`SKTPC}vaVZJ7 z2I%RY?Z35w{n1k+=k58I-~RsM>vQ4luAKSvo*nr4Ip*EVhgI(EZ!KoI9I#2a5GB~4 zarF7R*vF@j_bp^&d$4qR#jmsGfr}Tfm?+41{PCX$H`70QFWtt#(QD(NbdjThqfV>! z-ZtJ#nHp2IPM=qg&RghU-R<_NVJq|95Yy1#=gw^TyGCQG$Ugp!5=S0oos`|Nbt=w8-SQTI-|TH7_q1mz0+p+Rk-9^0Py4%d=3+)(4BGupfEG%~tocCC~B4GKMXN z4}L$WoO++vBX9AYXZ9ymtovja7yqy8I;wQjrAdLqqrBw9`Gtye%vvs(vKrjHdUWMV z&0YF25B6O9qsU`vU~u4~vb)C9B8y`=F$@e*Ein-vmr$wVXf+1pKV9v`;TWoJ&~5+vgA@f^Q4ncR-Nj8SJbWR zKKoMUysA&0Y`=bs&*J4}smi!-SC)I-zB*Cpga480&T^#avhIQu2{7+MRN7>XubglJd&RZa&xkxcV5Oy=(Inp)c)kVApc|Hu6yxoRxI_}vv7))?DxO(_kVa)eDgoE_}3JjyyH`@FfcGM Nc)I$ztaD0e0s!FYzuo`< literal 0 HcmV?d00001 diff --git a/hwmixvolume/desktop/hwmixvolume.desktop b/hwmixvolume/desktop/hwmixvolume.desktop new file mode 100644 index 0000000..70d03fb --- /dev/null +++ b/hwmixvolume/desktop/hwmixvolume.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Hwmixvolume +GenericName=Control the volume of individual streams on sound cards that use hardware mixing +Exec=hwmixvolume +Icon=hwmixvolume +Terminal=false +Type=Application +Categories=AudioVideo; +Version=0.9.4 From c92440aad8a96f487f9f459c9658dcd642c24f50 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Wed, 15 Nov 2017 11:16:48 +0100 Subject: [PATCH 119/166] Makefile: fix version file creation Signed-off-by: Jaroslav Kysela --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 8497281..0d63532 100644 --- a/Makefile +++ b/Makefile @@ -29,7 +29,7 @@ install: done alsa-dist: - @echo $(VERSION) >> $(TOP)/version + @echo $(VERSION) > $(TOP)/version @mkdir -p $(TOP)/distdir @for i in $(SUBDIRS); do \ cd $(TOP)/$$i; echo $(TOP)/$$i; \ From a18c3445256cf642f866d04df8d4b16808025900 Mon Sep 17 00:00:00 2001 From: Tanu Kaskinen Date: Mon, 20 Nov 2017 19:05:28 +0200 Subject: [PATCH 120/166] hdajacksensetest: add gitcompile to EXTRA_DIST The gitcompile script is used from the top-level Makefile, so it needs to be included in the tarball. Signed-off-by: Tanu Kaskinen Signed-off-by: Takashi Iwai --- hdajacksensetest/Makefile.am | 1 + 1 file changed, 1 insertion(+) diff --git a/hdajacksensetest/Makefile.am b/hdajacksensetest/Makefile.am index 795373c..893b4e1 100644 --- a/hdajacksensetest/Makefile.am +++ b/hdajacksensetest/Makefile.am @@ -1,3 +1,4 @@ +EXTRA_DIST = gitcompile MYNAME = hdajacksensetest AUTOMAKE_OPTIONS = foreign bin_PROGRAMS = hdajacksensetest From 66e74b6878679759e041a9b42b7a7d3ed6dc94ea Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 3 Apr 2018 09:01:37 +0200 Subject: [PATCH 121/166] Release v1.1.6 Signed-off-by: Jaroslav Kysela --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 0d63532..c32bf25 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION = 1.1.5 +VERSION = 1.1.6 TOP = . SUBDIRS = as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ From a861bdabf02cd9bfb3ec7c0571c563c0fa14adfb Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Tue, 24 Apr 2018 12:24:32 -0700 Subject: [PATCH 122/166] us428control: Fix clang -Wreserved-user-defined-literal warnings | us428control.cc:66:18: error: invalid suffix on literal; C++11 requires a space between literal and identifier [-Wreserved-user-defined-literal] | printf("usage: "PROGNAME" [-v verbosity_level 0..2] [-c card] [-D device] [-u usb-device] [-m mode]\n"); | ^ Signed-off-by: Khem Raj Signed-off-by: Takashi Iwai --- us428control/us428control.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/us428control/us428control.cc b/us428control/us428control.cc index e839bf4..8cb3c42 100644 --- a/us428control/us428control.cc +++ b/us428control/us428control.cc @@ -63,7 +63,7 @@ static void usage(void) { printf("Tascam US-428 Control\n"); printf("version %s\n", VERSION); - printf("usage: "PROGNAME" [-v verbosity_level 0..2] [-c card] [-D device] [-u usb-device] [-m mode]\n"); + printf("usage: " PROGNAME " [-v verbosity_level 0..2] [-c card] [-D device] [-u usb-device] [-m mode]\n"); printf("mode is one of (us224, us428, mixxx)\n"); } /* From 235d9c5e8381518b0a8661786e7e0cbdd1bbcd01 Mon Sep 17 00:00:00 2001 From: Ross Burton Date: Tue, 12 Jun 2018 13:24:34 +0100 Subject: [PATCH 123/166] ld10k1: define _GNU_SOURCE and use sighandler_t __sighandler_t is a glibc internal type which doesn't exist in musl. By using AC_USE_SYSTEM_EXTENSIONS to get _GNU_SOURCE defined, both glibc and musl then expose sighandler_t. Signed-off-by: Ross Burton Signed-off-by: Takashi Iwai --- ld10k1/configure.ac | 1 + ld10k1/src/ld10k1_fnc1.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ld10k1/configure.ac b/ld10k1/configure.ac index 276b24e..f48ca31 100644 --- a/ld10k1/configure.ac +++ b/ld10k1/configure.ac @@ -4,6 +4,7 @@ AC_CONFIG_MACRO_DIR([m4]) AM_MAINTAINER_MODE([enable]) AC_CONFIG_HEADERS(config.h) +AC_USE_SYSTEM_EXTENSIONS AC_PROG_CC AC_PROG_LD AC_PROG_INSTALL diff --git a/ld10k1/src/ld10k1_fnc1.c b/ld10k1/src/ld10k1_fnc1.c index 343584c..ddc43c6 100644 --- a/ld10k1/src/ld10k1_fnc1.c +++ b/ld10k1/src/ld10k1_fnc1.c @@ -179,7 +179,7 @@ int main_loop(comm_param *param, int audigy, const char *card_id, int tram_size, { fd_set active_fd_set/*, read_fd_set*/; int i, j, res = 0; - __sighandler_t old_sig_pipe; + sighandler_t old_sig_pipe; int main_sock = 0; int data_sock = 0; From 50e9ac4e81fa6efbdff3f34e9a1385e16ad7479b Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Tue, 18 Sep 2018 15:42:31 +0200 Subject: [PATCH 124/166] hwmixvolume: use four spaces instead of one tab for indent This is the recommended coding style for all Python programs, as specified in PEP-0008[1]. [1] https://www.python.org/dev/peps/pep-0008/ Signed-off-by: Emmanuel Gil Peyrot Reviewed-by: Takashi Sakamoto Signed-off-by: Takashi Iwai --- hwmixvolume/hwmixvolume | 482 ++++++++++++++++++++-------------------- 1 file changed, 241 insertions(+), 241 deletions(-) diff --git a/hwmixvolume/hwmixvolume b/hwmixvolume/hwmixvolume index ef80bc8..038bcb3 100755 --- a/hwmixvolume/hwmixvolume +++ b/hwmixvolume/hwmixvolume @@ -26,285 +26,285 @@ EVENT_INFO = alsahcontrol.event_mask['INFO'] EVENT_REMOVE = alsahcontrol.event_mask_remove class Stream: - def __init__(self, element, parent): - self.element = element - self.element.set_callback(self) - self.parent = parent - self.label = None - self.scales = [] - self.adjustments = [] - self.callback(self.element, EVENT_INFO) + def __init__(self, element, parent): + self.element = element + self.element.set_callback(self) + self.parent = parent + self.label = None + self.scales = [] + self.adjustments = [] + self.callback(self.element, EVENT_INFO) - def destroy(self): - self.deactivate() + def destroy(self): + self.deactivate() - def callback(self, e, mask): - if mask == EVENT_REMOVE: - self.deactivate() - elif (mask & EVENT_INFO) != 0: - info = alsahcontrol.Info(self.element) - if info.is_inactive: - self.deactivate() - else: - self.activate() - elif (mask & EVENT_VALUE) != 0: - self.update_scales_from_ctl() + def callback(self, e, mask): + if mask == EVENT_REMOVE: + self.deactivate() + elif (mask & EVENT_INFO) != 0: + info = alsahcontrol.Info(self.element) + if info.is_inactive: + self.deactivate() + else: + self.activate() + elif (mask & EVENT_VALUE) != 0: + self.update_scales_from_ctl() - def activate(self): - if self.label: - return - info = alsahcontrol.Info(self.element) - value = alsahcontrol.Value(self.element) - value.read() - values = value.get_tuple(TYPE_INTEGER, info.count) - self.label = gtk.Label(self.get_label(info)) - self.label.set_single_line_mode(True) - self.parent.scales_vbox.pack_start(self.label, expand=False) - for i in range(info.count): - adj = gtk.Adjustment(value=values[i], - lower=info.min, upper=info.max, - step_incr=1, - page_incr=(info.max-info.min+1)/8) - adj.connect('value-changed', self.update_ctl_from_scale, i) - scale = gtk.HScale(adj) - scale.set_draw_value(False) - self.parent.scales_vbox.pack_start(scale, expand=False) - self.scales.append(scale) - self.adjustments.append(adj) - self.parent.scales_vbox.show_all() - self.parent.update_msg_label() + def activate(self): + if self.label: + return + info = alsahcontrol.Info(self.element) + value = alsahcontrol.Value(self.element) + value.read() + values = value.get_tuple(TYPE_INTEGER, info.count) + self.label = gtk.Label(self.get_label(info)) + self.label.set_single_line_mode(True) + self.parent.scales_vbox.pack_start(self.label, expand=False) + for i in range(info.count): + adj = gtk.Adjustment(value=values[i], + lower=info.min, upper=info.max, + step_incr=1, + page_incr=(info.max-info.min+1)/8) + adj.connect('value-changed', self.update_ctl_from_scale, i) + scale = gtk.HScale(adj) + scale.set_draw_value(False) + self.parent.scales_vbox.pack_start(scale, expand=False) + self.scales.append(scale) + self.adjustments.append(adj) + self.parent.scales_vbox.show_all() + self.parent.update_msg_label() - def deactivate(self): - if not self.label: - return - self.label.destroy() - for s in self.scales: - s.destroy() - self.label = None - self.scales = [] - self.adjustments = [] - self.parent.update_msg_label() + def deactivate(self): + if not self.label: + return + self.label.destroy() + for s in self.scales: + s.destroy() + self.label = None + self.scales = [] + self.adjustments = [] + self.parent.update_msg_label() - def update_scales_from_ctl(self): - if not self.label: - return - count = len(self.adjustments) - value = alsahcontrol.Value(self.element) - value.read() - values = value.get_tuple(TYPE_INTEGER, count) - for i in range(count): - self.adjustments[i].set_value(values[i]) + def update_scales_from_ctl(self): + if not self.label: + return + count = len(self.adjustments) + value = alsahcontrol.Value(self.element) + value.read() + values = value.get_tuple(TYPE_INTEGER, count) + for i in range(count): + self.adjustments[i].set_value(values[i]) - def update_ctl_from_scale(self, adj, index): - scale_value = adj.get_value() - value_to_set = int(round(adj.get_value())) - count = len(self.adjustments) - value = alsahcontrol.Value(self.element) - if self.parent.lock_check.get_active(): - values = [value_to_set for i in range(count)] - else: - value.read() - values = value.get_array(TYPE_INTEGER, count) - values[index] = value_to_set - value.set_array(TYPE_INTEGER, values) - value.write() - if value_to_set != scale_value: - adj.set_value(value_to_set) + def update_ctl_from_scale(self, adj, index): + scale_value = adj.get_value() + value_to_set = int(round(adj.get_value())) + count = len(self.adjustments) + value = alsahcontrol.Value(self.element) + if self.parent.lock_check.get_active(): + values = [value_to_set for i in range(count)] + else: + value.read() + values = value.get_array(TYPE_INTEGER, count) + values[index] = value_to_set + value.set_array(TYPE_INTEGER, values) + value.write() + if value_to_set != scale_value: + adj.set_value(value_to_set) - def get_label(self, info): - pid = self.get_pid(info) - if pid: - cmdline = self.get_pid_cmdline(pid) - if cmdline: - return cmdline - else: - return "PID %d" % pid - else: - name = info.name - if name[-7:] == " Volume": - name = name[:-7] - if name[-9:] == " Playback": - name = name[:-9] - return name + def get_label(self, info): + pid = self.get_pid(info) + if pid: + cmdline = self.get_pid_cmdline(pid) + if cmdline: + return cmdline + else: + return "PID %d" % pid + else: + name = info.name + if name[-7:] == " Volume": + name = name[:-7] + if name[-9:] == " Playback": + name = name[:-9] + return name - def get_pid(self, info): - card = self.parent.current_card - device = info.device - subdevice = info.subdevice - if subdevice == 0: - subdevice = info.index - filename = "/proc/asound/card%d/pcm%dp/sub%d/status" % (card, device, subdevice) - try: - f = open(filename, "r") - except IOError: - return None - try: - for line in f.readlines(): - if line[:9] == "owner_pid": - return int(line.split(':')[1].strip()) - finally: - f.close() - return None + def get_pid(self, info): + card = self.parent.current_card + device = info.device + subdevice = info.subdevice + if subdevice == 0: + subdevice = info.index + filename = "/proc/asound/card%d/pcm%dp/sub%d/status" % (card, device, subdevice) + try: + f = open(filename, "r") + except IOError: + return None + try: + for line in f.readlines(): + if line[:9] == "owner_pid": + return int(line.split(':')[1].strip()) + finally: + f.close() + return None - def get_pid_cmdline(self, pid): - try: - f = open("/proc/%d/cmdline" % pid, "r") - except IOError: - return None - try: - cmdline = f.read() - finally: - f.close() - return cmdline.replace('\x00', ' ').strip() + def get_pid_cmdline(self, pid): + try: + f = open("/proc/%d/cmdline" % pid, "r") + except IOError: + return None + try: + cmdline = f.read() + finally: + f.close() + return cmdline.replace('\x00', ' ').strip() class MixerWindow(gtk.Window): - card_numbers = alsacard.card_list() - current_card = -1 - hcontrol = None - scales_vbox = None - msg_label = None - streams = [] - hctl_sources = [] + card_numbers = alsacard.card_list() + current_card = -1 + hcontrol = None + scales_vbox = None + msg_label = None + streams = [] + hctl_sources = [] - def __init__(self): - gtk.Window.__init__(self) - self.connect('destroy', lambda w: gtk.main_quit()) - self.set_title("Hardware Mixer Volumes") + def __init__(self): + gtk.Window.__init__(self) + self.connect('destroy', lambda w: gtk.main_quit()) + self.set_title("Hardware Mixer Volumes") - vbox = gtk.VBox() - self.add(vbox) + vbox = gtk.VBox() + self.add(vbox) - hbox = gtk.HBox() - vbox.pack_start(hbox, expand=False) + hbox = gtk.HBox() + vbox.pack_start(hbox, expand=False) - label = gtk.Label("_Sound Card: ") - label.set_use_underline(True) - hbox.pack_start(label, expand=False) + label = gtk.Label("_Sound Card: ") + label.set_use_underline(True) + hbox.pack_start(label, expand=False) - combo = gtk.combo_box_new_text() - for i in self.card_numbers: - str = "%d: %s" % (i, alsacard.card_get_name(i)) - combo.append_text(str) - if len(self.card_numbers) > 0: - combo.set_active(0) - combo.connect('changed', lambda c: self.change_card(self.card_numbers[combo.get_active()])) - hbox.pack_start(combo) - label.set_mnemonic_widget(combo) + combo = gtk.combo_box_new_text() + for i in self.card_numbers: + str = "%d: %s" % (i, alsacard.card_get_name(i)) + combo.append_text(str) + if len(self.card_numbers) > 0: + combo.set_active(0) + combo.connect('changed', lambda c: self.change_card(self.card_numbers[combo.get_active()])) + hbox.pack_start(combo) + label.set_mnemonic_widget(combo) - self.lock_check = gtk.CheckButton(label="_Lock Channels") - self.lock_check.set_active(True) - vbox.pack_start(self.lock_check, expand=False) + self.lock_check = gtk.CheckButton(label="_Lock Channels") + self.lock_check.set_active(True) + vbox.pack_start(self.lock_check, expand=False) - scrollwin = gtk.ScrolledWindow() - scrollwin.set_policy(hscrollbar_policy=gtk.POLICY_NEVER, vscrollbar_policy=gtk.POLICY_AUTOMATIC) - scrollwin.set_shadow_type(gtk.SHADOW_NONE) - vbox.pack_start(scrollwin) + scrollwin = gtk.ScrolledWindow() + scrollwin.set_policy(hscrollbar_policy=gtk.POLICY_NEVER, vscrollbar_policy=gtk.POLICY_AUTOMATIC) + scrollwin.set_shadow_type(gtk.SHADOW_NONE) + vbox.pack_start(scrollwin) - self.scales_vbox = gtk.VBox() - scrollwin.add_with_viewport(self.scales_vbox) + self.scales_vbox = gtk.VBox() + scrollwin.add_with_viewport(self.scales_vbox) - label = gtk.Label() - label.set_single_line_mode(True) - line_height = label.size_request()[1] - label.destroy() - scale = gtk.HScale() - scale.set_draw_value(False) - line_height += scale.size_request()[1] - scale.destroy() - # always have space for at least four sliders - scrollwin.set_size_request(width=-1, height=line_height*4+4) + label = gtk.Label() + label.set_single_line_mode(True) + line_height = label.size_request()[1] + label.destroy() + scale = gtk.HScale() + scale.set_draw_value(False) + line_height += scale.size_request()[1] + scale.destroy() + # always have space for at least four sliders + scrollwin.set_size_request(width=-1, height=line_height*4+4) - # TODO: select the default card or the first card with stream controls - if len(self.card_numbers) > 0: - self.change_card(self.card_numbers[0]) - self.update_msg_label() + # TODO: select the default card or the first card with stream controls + if len(self.card_numbers) > 0: + self.change_card(self.card_numbers[0]) + self.update_msg_label() - self.show_all() + self.show_all() - def change_card(self, cardnum): - for s in self.hctl_sources: - gobject.source_remove(s) - self.hctl_sources = [] + def change_card(self, cardnum): + for s in self.hctl_sources: + gobject.source_remove(s) + self.hctl_sources = [] - self.hcontrol = self.open_hcontrol_for_card(cardnum) + self.hcontrol = self.open_hcontrol_for_card(cardnum) - for s in self.streams: - s.destroy() - self.streams = [] + for s in self.streams: + s.destroy() + self.streams = [] - self.current_card = cardnum + self.current_card = cardnum - if not self.hcontrol: - self.update_msg_label() - return + if not self.hcontrol: + self.update_msg_label() + return - for id in self.hcontrol.list(): - if not self.is_stream_elem(id): - continue - elem = alsahcontrol.Element(self.hcontrol, id[0]) - info = alsahcontrol.Info(elem) - if not self.is_stream_info(info): - continue - stream = Stream(elem, self) - self.streams.append(stream) + for id in self.hcontrol.list(): + if not self.is_stream_elem(id): + continue + elem = alsahcontrol.Element(self.hcontrol, id[0]) + info = alsahcontrol.Info(elem) + if not self.is_stream_info(info): + continue + stream = Stream(elem, self) + self.streams.append(stream) - for fd,condition in self.hcontrol.poll_fds: - self.hctl_sources.append(gobject.io_add_watch(fd, condition, self.hctl_io_callback)) + for fd,condition in self.hcontrol.poll_fds: + self.hctl_sources.append(gobject.io_add_watch(fd, condition, self.hctl_io_callback)) - self.update_msg_label() + self.update_msg_label() - self.scales_vbox.show_all() + self.scales_vbox.show_all() - def update_msg_label(self): - needs_msg = len(self.scales_vbox.get_children()) < 2 - has_msg = self.msg_label - if has_msg and not needs_msg: - self.msg_label.destroy() - self.msg_label = None - elif needs_msg: - if len(self.streams) > 0: - msg = "There are no open streams." - else: - msg = "This card does not have stream controls." - if not has_msg: - self.msg_label = gtk.Label(msg) - self.scales_vbox.pack_start(self.msg_label) - self.scales_vbox.show_all() - elif self.msg_label.get_text() != msg: - self.msg_label.set_text(msg) + def update_msg_label(self): + needs_msg = len(self.scales_vbox.get_children()) < 2 + has_msg = self.msg_label + if has_msg and not needs_msg: + self.msg_label.destroy() + self.msg_label = None + elif needs_msg: + if len(self.streams) > 0: + msg = "There are no open streams." + else: + msg = "This card does not have stream controls." + if not has_msg: + self.msg_label = gtk.Label(msg) + self.scales_vbox.pack_start(self.msg_label) + self.scales_vbox.show_all() + elif self.msg_label.get_text() != msg: + self.msg_label.set_text(msg) - def open_hcontrol_for_card(self, cardnum): - devname = "hw:CARD=" + str(cardnum) - try: - hc = alsahcontrol.HControl(name=devname, - mode=alsahcontrol.open_mode['NONBLOCK']) - except: - # TODO: alsa error msg - dlg = gtk.MessageDialog(self, - gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, - gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, - "Cannot open sound card control device.") - dlg.run() - dlg.destroy() - return None - return hc + def open_hcontrol_for_card(self, cardnum): + devname = "hw:CARD=" + str(cardnum) + try: + hc = alsahcontrol.HControl(name=devname, + mode=alsahcontrol.open_mode['NONBLOCK']) + except: + # TODO: alsa error msg + dlg = gtk.MessageDialog(self, + gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, + gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, + "Cannot open sound card control device.") + dlg.run() + dlg.destroy() + return None + return hc - def is_stream_elem(self, id): - return ((id[1] == INTF_PCM and - id[4] in ("PCM Playback Volume", "EMU10K1 PCM Volume")) or - (id[1] == INTF_MIXER and - id[4] == "VIA DXS Playback Volume")) + def is_stream_elem(self, id): + return ((id[1] == INTF_PCM and + id[4] in ("PCM Playback Volume", "EMU10K1 PCM Volume")) or + (id[1] == INTF_MIXER and + id[4] == "VIA DXS Playback Volume")) - def is_stream_info(self, info): - return info.is_readable and info.is_writable and info.type == TYPE_INTEGER + def is_stream_info(self, info): + return info.is_readable and info.is_writable and info.type == TYPE_INTEGER - def hctl_io_callback(self, source, condition): - self.hcontrol.handle_events() - return True + def hctl_io_callback(self, source, condition): + self.hcontrol.handle_events() + return True def main(): - MixerWindow() - gtk.main() + MixerWindow() + gtk.main() main() From 0a9ad5c1e1abb86839f3de80bf4564c97fc54510 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Tue, 18 Sep 2018 15:42:32 +0200 Subject: [PATCH 125/166] hwmixvolume: replace PyGTK with gobject-introspection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This doesn’t work yet, we require Gtk 3.0 rather than 2.0 and the API changed quite a lot, so this is but a preparatory patch. This is done so that we can get rid of GTK+ 2 which has been EOL for many years already, and to add Python 3 support because Python 2 will very soon be EOL as well. Signed-off-by: Emmanuel Gil Peyrot Reviewed-by: Takashi Sakamoto Signed-off-by: Takashi Iwai --- hwmixvolume/hwmixvolume | 53 ++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/hwmixvolume/hwmixvolume b/hwmixvolume/hwmixvolume index 038bcb3..64d232c 100755 --- a/hwmixvolume/hwmixvolume +++ b/hwmixvolume/hwmixvolume @@ -15,7 +15,10 @@ # OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. -import gobject, gtk +import gi +gi.require_version('GLib', '2.0') +gi.require_version('Gtk', '3.0') +from gi.repository import GLib, Gtk from pyalsa import alsacard, alsahcontrol INTF_PCM = alsahcontrol.interface_id['PCM'] @@ -57,16 +60,16 @@ class Stream: value = alsahcontrol.Value(self.element) value.read() values = value.get_tuple(TYPE_INTEGER, info.count) - self.label = gtk.Label(self.get_label(info)) + self.label = Gtk.Label(self.get_label(info)) self.label.set_single_line_mode(True) self.parent.scales_vbox.pack_start(self.label, expand=False) for i in range(info.count): - adj = gtk.Adjustment(value=values[i], + adj = Gtk.Adjustment(value=values[i], lower=info.min, upper=info.max, step_incr=1, page_incr=(info.max-info.min+1)/8) adj.connect('value-changed', self.update_ctl_from_scale, i) - scale = gtk.HScale(adj) + scale = Gtk.HScale(adj) scale.set_draw_value(False) self.parent.scales_vbox.pack_start(scale, expand=False) self.scales.append(scale) @@ -157,7 +160,7 @@ class Stream: f.close() return cmdline.replace('\x00', ' ').strip() -class MixerWindow(gtk.Window): +class MixerWindow(Gtk.Window): card_numbers = alsacard.card_list() current_card = -1 hcontrol = None @@ -167,21 +170,21 @@ class MixerWindow(gtk.Window): hctl_sources = [] def __init__(self): - gtk.Window.__init__(self) - self.connect('destroy', lambda w: gtk.main_quit()) + Gtk.Window.__init__(self) + self.connect('destroy', lambda w: Gtk.main_quit()) self.set_title("Hardware Mixer Volumes") - vbox = gtk.VBox() + vbox = Gtk.VBox() self.add(vbox) - hbox = gtk.HBox() + hbox = Gtk.HBox() vbox.pack_start(hbox, expand=False) - label = gtk.Label("_Sound Card: ") + label = Gtk.Label("_Sound Card: ") label.set_use_underline(True) hbox.pack_start(label, expand=False) - combo = gtk.combo_box_new_text() + combo = Gtk.combo_box_new_text() for i in self.card_numbers: str = "%d: %s" % (i, alsacard.card_get_name(i)) combo.append_text(str) @@ -191,23 +194,23 @@ class MixerWindow(gtk.Window): hbox.pack_start(combo) label.set_mnemonic_widget(combo) - self.lock_check = gtk.CheckButton(label="_Lock Channels") + self.lock_check = Gtk.CheckButton(label="_Lock Channels") self.lock_check.set_active(True) vbox.pack_start(self.lock_check, expand=False) - scrollwin = gtk.ScrolledWindow() - scrollwin.set_policy(hscrollbar_policy=gtk.POLICY_NEVER, vscrollbar_policy=gtk.POLICY_AUTOMATIC) - scrollwin.set_shadow_type(gtk.SHADOW_NONE) + scrollwin = Gtk.ScrolledWindow() + scrollwin.set_policy(hscrollbar_policy=Gtk.POLICY_NEVER, vscrollbar_policy=Gtk.POLICY_AUTOMATIC) + scrollwin.set_shadow_type(Gtk.SHADOW_NONE) vbox.pack_start(scrollwin) - self.scales_vbox = gtk.VBox() + self.scales_vbox = Gtk.VBox() scrollwin.add_with_viewport(self.scales_vbox) - label = gtk.Label() + label = Gtk.Label() label.set_single_line_mode(True) line_height = label.size_request()[1] label.destroy() - scale = gtk.HScale() + scale = Gtk.HScale() scale.set_draw_value(False) line_height += scale.size_request()[1] scale.destroy() @@ -223,7 +226,7 @@ class MixerWindow(gtk.Window): def change_card(self, cardnum): for s in self.hctl_sources: - gobject.source_remove(s) + GLib.source_remove(s) self.hctl_sources = [] self.hcontrol = self.open_hcontrol_for_card(cardnum) @@ -249,7 +252,7 @@ class MixerWindow(gtk.Window): self.streams.append(stream) for fd,condition in self.hcontrol.poll_fds: - self.hctl_sources.append(gobject.io_add_watch(fd, condition, self.hctl_io_callback)) + self.hctl_sources.append(GLib.io_add_watch(fd, condition, self.hctl_io_callback)) self.update_msg_label() @@ -267,7 +270,7 @@ class MixerWindow(gtk.Window): else: msg = "This card does not have stream controls." if not has_msg: - self.msg_label = gtk.Label(msg) + self.msg_label = Gtk.Label(msg) self.scales_vbox.pack_start(self.msg_label) self.scales_vbox.show_all() elif self.msg_label.get_text() != msg: @@ -280,9 +283,9 @@ class MixerWindow(gtk.Window): mode=alsahcontrol.open_mode['NONBLOCK']) except: # TODO: alsa error msg - dlg = gtk.MessageDialog(self, - gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, - gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, + dlg = Gtk.MessageDialog(self, + Gtk.DIALOG_MODAL | Gtk.DIALOG_DESTROY_WITH_PARENT, + Gtk.MESSAGE_ERROR, Gtk.BUTTONS_OK, "Cannot open sound card control device.") dlg.run() dlg.destroy() @@ -304,7 +307,7 @@ class MixerWindow(gtk.Window): def main(): MixerWindow() - gtk.main() + Gtk.main() main() From a21dda3d8667bdd594254ec590d0282b1e30e014 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Tue, 18 Sep 2018 15:42:33 +0200 Subject: [PATCH 126/166] =?UTF-8?q?hwmixvolume:=20switch=20to=20GTK+=C2=A0?= =?UTF-8?q?3.0=20and=20GLib=C2=A02.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This replaces VBox and HBox with Grid (using Gtk.Orientation), HScale with Scale, creates labels with mnemonics, set hexpand and vexpand properly, use the correct enum container classes, use the correct getter for size request, and finally update to the correct GLib watch function. Signed-off-by: Emmanuel Gil Peyrot Reviewed-by: Takashi Sakamoto Signed-off-by: Takashi Iwai --- hwmixvolume/hwmixvolume | 58 ++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/hwmixvolume/hwmixvolume b/hwmixvolume/hwmixvolume index 64d232c..8e0b6b8 100755 --- a/hwmixvolume/hwmixvolume +++ b/hwmixvolume/hwmixvolume @@ -60,18 +60,18 @@ class Stream: value = alsahcontrol.Value(self.element) value.read() values = value.get_tuple(TYPE_INTEGER, info.count) - self.label = Gtk.Label(self.get_label(info)) + self.label = Gtk.Label.new(self.get_label(info)) self.label.set_single_line_mode(True) - self.parent.scales_vbox.pack_start(self.label, expand=False) + self.parent.scales_vbox.add(self.label) for i in range(info.count): adj = Gtk.Adjustment(value=values[i], lower=info.min, upper=info.max, step_incr=1, page_incr=(info.max-info.min+1)/8) adj.connect('value-changed', self.update_ctl_from_scale, i) - scale = Gtk.HScale(adj) + scale = Gtk.Scale(orientation=Gtk.Orientation.HORIZONTAL, adjustment=adj) scale.set_draw_value(False) - self.parent.scales_vbox.pack_start(scale, expand=False) + self.parent.scales_vbox.add(scale) self.scales.append(scale) self.adjustments.append(adj) self.parent.scales_vbox.show_all() @@ -174,45 +174,48 @@ class MixerWindow(Gtk.Window): self.connect('destroy', lambda w: Gtk.main_quit()) self.set_title("Hardware Mixer Volumes") - vbox = Gtk.VBox() + vbox = Gtk.Grid() + vbox.set_orientation(Gtk.Orientation.VERTICAL) self.add(vbox) - hbox = Gtk.HBox() - vbox.pack_start(hbox, expand=False) + hbox = Gtk.Grid() + vbox.add(hbox) - label = Gtk.Label("_Sound Card: ") - label.set_use_underline(True) - hbox.pack_start(label, expand=False) + label = Gtk.Label.new_with_mnemonic("_Sound Card: ") + hbox.add(label) - combo = Gtk.combo_box_new_text() + combo = Gtk.ComboBoxText() + combo.set_hexpand(True) for i in self.card_numbers: str = "%d: %s" % (i, alsacard.card_get_name(i)) combo.append_text(str) if len(self.card_numbers) > 0: combo.set_active(0) combo.connect('changed', lambda c: self.change_card(self.card_numbers[combo.get_active()])) - hbox.pack_start(combo) + hbox.add(combo) label.set_mnemonic_widget(combo) - self.lock_check = Gtk.CheckButton(label="_Lock Channels") + self.lock_check = Gtk.CheckButton.new_with_mnemonic(label="_Lock Channels") self.lock_check.set_active(True) - vbox.pack_start(self.lock_check, expand=False) + vbox.add(self.lock_check) scrollwin = Gtk.ScrolledWindow() - scrollwin.set_policy(hscrollbar_policy=Gtk.POLICY_NEVER, vscrollbar_policy=Gtk.POLICY_AUTOMATIC) - scrollwin.set_shadow_type(Gtk.SHADOW_NONE) - vbox.pack_start(scrollwin) + scrollwin.set_policy(hscrollbar_policy=Gtk.PolicyType.NEVER, vscrollbar_policy=Gtk.PolicyType.AUTOMATIC) + scrollwin.set_shadow_type(Gtk.ShadowType.NONE) + scrollwin.set_vexpand(True) + vbox.add(scrollwin) - self.scales_vbox = Gtk.VBox() - scrollwin.add_with_viewport(self.scales_vbox) + self.scales_vbox = Gtk.Grid() + self.scales_vbox.set_orientation(Gtk.Orientation.VERTICAL) + scrollwin.add(self.scales_vbox) label = Gtk.Label() label.set_single_line_mode(True) - line_height = label.size_request()[1] + line_height = max(label.get_size_request().height, 0) label.destroy() - scale = Gtk.HScale() + scale = Gtk.Scale(orientation=Gtk.Orientation.HORIZONTAL) scale.set_draw_value(False) - line_height += scale.size_request()[1] + line_height += max(scale.get_size_request().height, 0) scale.destroy() # always have space for at least four sliders scrollwin.set_size_request(width=-1, height=line_height*4+4) @@ -252,7 +255,7 @@ class MixerWindow(Gtk.Window): self.streams.append(stream) for fd,condition in self.hcontrol.poll_fds: - self.hctl_sources.append(GLib.io_add_watch(fd, condition, self.hctl_io_callback)) + self.hctl_sources.append(GLib.io_add_watch(fd, 0, GLib.IOCondition(condition), self.hctl_io_callback)) self.update_msg_label() @@ -270,8 +273,9 @@ class MixerWindow(Gtk.Window): else: msg = "This card does not have stream controls." if not has_msg: - self.msg_label = Gtk.Label(msg) - self.scales_vbox.pack_start(self.msg_label) + self.msg_label = Gtk.Label.new(msg) + self.msg_label.set_vexpand(True) + self.scales_vbox.add(self.msg_label) self.scales_vbox.show_all() elif self.msg_label.get_text() != msg: self.msg_label.set_text(msg) @@ -284,8 +288,8 @@ class MixerWindow(Gtk.Window): except: # TODO: alsa error msg dlg = Gtk.MessageDialog(self, - Gtk.DIALOG_MODAL | Gtk.DIALOG_DESTROY_WITH_PARENT, - Gtk.MESSAGE_ERROR, Gtk.BUTTONS_OK, + Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, + Gtk.MessageType.ERROR, Gtk.ButtonsType.OK, "Cannot open sound card control device.") dlg.run() dlg.destroy() From 213b28a5aa71ffbd77443e17d805743f39f50821 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Tue, 18 Sep 2018 15:42:34 +0200 Subject: [PATCH 127/166] hwmixvolume: use a with context to open files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This feature has been added in Python 2.5 and automatically closes an open file once the context exits. Signed-off-by: Emmanuel Gil Peyrot Reviewed-by: Takashi Sakamoto Signed-off-by: Takashi Iwai --- hwmixvolume/hwmixvolume | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/hwmixvolume/hwmixvolume b/hwmixvolume/hwmixvolume index 8e0b6b8..7f8ba8e 100755 --- a/hwmixvolume/hwmixvolume +++ b/hwmixvolume/hwmixvolume @@ -138,26 +138,20 @@ class Stream: subdevice = info.index filename = "/proc/asound/card%d/pcm%dp/sub%d/status" % (card, device, subdevice) try: - f = open(filename, "r") + with open(filename, "r") as f: + for line in f: + if line[:9] == "owner_pid": + return int(line.split(':')[1].strip()) except IOError: return None - try: - for line in f.readlines(): - if line[:9] == "owner_pid": - return int(line.split(':')[1].strip()) - finally: - f.close() return None def get_pid_cmdline(self, pid): try: - f = open("/proc/%d/cmdline" % pid, "r") + with open("/proc/%d/cmdline" % pid, "r") as f: + cmdline = f.read() except IOError: return None - try: - cmdline = f.read() - finally: - f.close() return cmdline.replace('\x00', ' ').strip() class MixerWindow(Gtk.Window): From fb043847de869cf4d82049e2ac0937819fab78f5 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Tue, 18 Sep 2018 15:42:35 +0200 Subject: [PATCH 128/166] hwmixvolume: switch the shebang to python MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This signifies that this code is now compatible with both Python 2 and Python 3, as per PEP-0394[1]. [1] https://www.python.org/dev/peps/pep-0394/ Signed-off-by: Emmanuel Gil Peyrot Reviewed-by: Takashi Sakamoto Signed-off-by: Takashi Iwai --- hwmixvolume/hwmixvolume | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hwmixvolume/hwmixvolume b/hwmixvolume/hwmixvolume index 7f8ba8e..4804a9b 100755 --- a/hwmixvolume/hwmixvolume +++ b/hwmixvolume/hwmixvolume @@ -1,4 +1,4 @@ -#!/usr/bin/python2 +#!/usr/bin/env python # hwmixvolume - ALSA hardware mixer volume control applet # Copyright (c) 2009-2010 Clemens Ladisch From 88bd30b7325eecc6076f4b860cec35c051f591e4 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Tue, 18 Sep 2018 15:42:36 +0200 Subject: [PATCH 129/166] hwmixvolume: add my copyright Signed-off-by: Emmanuel Gil Peyrot Reviewed-by: Takashi Sakamoto Signed-off-by: Takashi Iwai --- hwmixvolume/hwmixvolume | 1 + 1 file changed, 1 insertion(+) diff --git a/hwmixvolume/hwmixvolume b/hwmixvolume/hwmixvolume index 4804a9b..871c2c5 100755 --- a/hwmixvolume/hwmixvolume +++ b/hwmixvolume/hwmixvolume @@ -2,6 +2,7 @@ # hwmixvolume - ALSA hardware mixer volume control applet # Copyright (c) 2009-2010 Clemens Ladisch +# Copyright (c) 2018 Emmanuel Gil Peyrot # # Permission to use, copy, modify, and/or distribute this software for any # purpose with or without fee is hereby granted, provided that the above From dc733d6b0845d22896e3fec3f35e6f1e706987a3 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Tue, 18 Sep 2018 15:42:37 +0200 Subject: [PATCH 130/166] hwmixvolume: mention the new dependencies in the README Signed-off-by: Emmanuel Gil Peyrot Reviewed-by: Takashi Sakamoto Signed-off-by: Takashi Iwai --- hwmixvolume/README | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hwmixvolume/README b/hwmixvolume/README index 9884ec2..56c7554 100644 --- a/hwmixvolume/README +++ b/hwmixvolume/README @@ -8,7 +8,8 @@ that use hardware mixing, i.e., those based on the following chips: * Yamaha DS-1 (YMF-724/740/744/754) (driver: snd-ymfpci) -This tool requires Python, pygtk, and alsa-pyton 1.0.22 or later. +This tool requires Python, PyGObject, GTK+ 3.0 or later, and alsa-python 1.0.22 +or later. It is recommended to use at least Linux kernel 2.6.32 or alsa-driver 1.0.22; otherwise, the name of the program that is using a stream cannot be shown. From 9ed2ebaaa7e12306f38e425632a480233232b5ab Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 16 Oct 2018 10:08:36 +0200 Subject: [PATCH 131/166] Release v1.1.7 Signed-off-by: Jaroslav Kysela --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c32bf25..fe29bce 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION = 1.1.6 +VERSION = 1.1.7 TOP = . SUBDIRS = as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ From 534e7fac808a891af0ccdd72c47cc9b1ccfde460 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Fri, 20 Dec 2019 16:40:43 +0100 Subject: [PATCH 132/166] hdspmixer: Use __u32 and __u64 for RMS array types Some variable types are referring to the field in ioctl struct, which are actually __u32 or __u64 instead of uint32_t or uint64_t. This inconsistency may result in the compile error. Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerWindow.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index 342efb2..9efc25d 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -35,8 +35,8 @@ static void readregisters_cb(void *arg) hdsp_peak_rms_t hdsp_peak_rms; struct hdspm_peak_rms hdspm_peak_rms; bool isMADI = false; - uint32_t *input_peaks, *playback_peaks, *output_peaks; - uint64_t *input_rms, *playback_rms, *output_rms; + __u32 *input_peaks, *playback_peaks, *output_peaks; + __u64 *input_rms, *playback_rms, *output_rms; HDSPMixerWindow *w = (HDSPMixerWindow *)arg; From 82979c32e4d6cabb826221daeedac8b01789da07 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Wed, 19 Feb 2020 10:35:44 +0100 Subject: [PATCH 133/166] Release v1.2.2 Signed-off-by: Jaroslav Kysela --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index fe29bce..acd6285 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION = 1.1.7 +VERSION = 1.2.2 TOP = . SUBDIRS = as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ From c0e69055fade319638a79604bd3ed1f37ff764f4 Mon Sep 17 00:00:00 2001 From: Jasmin Fazlic Date: Sun, 7 Feb 2021 15:50:47 +0100 Subject: [PATCH 134/166] hdspmixer: enhance saving of presets Changing the version in the file header would make a preset file not readable by older versions of the tool. If we just append new data always at the end of the save procedure we should have no problems reading them with different versions, as they all just read to a certain point and ignore the rest of the file. This patch implements the logic to save the presets first to a file called file_name.tmp and appends any extra data that would come after in a possibly present file_name file. Any data written by newer versions would remain in the preset file and from now on no old version should remove data written by newer versions. Also since we write to a temporary file and rename afterwards an extra feature is gained of not corrupting the preset should we crash. Signed-off-by: Jasmin Fazlic Signed-off-by: Takashi Iwai --- hdspmixer/src/HDSPMixerWindow.cxx | 94 ++++++++++++++++++++----------- 1 file changed, 62 insertions(+), 32 deletions(-) diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index 9efc25d..3b3d668 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -353,18 +353,25 @@ void HDSPMixerWindow::save() sizeof(inputs->strips[0]->data[0][0][0]->fader_pos) / sizeof(inputs->strips[0]->data[0][0][0]->fader_pos[0])); + FILE *in,*out; - FILE *file; + /* We want to append any existing extra data that might got written by a + * newer version to this file, therefore write our data to file_name.tmp + * and append the old data. Also this way we would not corrupt the file + * should we crash. + */ + std::string const tmp = file_name + std::string(".tmp"); + char const * const tmpc = tmp.c_str(); - if ((file = fopen(file_name, "w")) == NULL) { - fl_alert("Error opening file %s for saving", file_name); + if ((out = fopen(tmpc, "w")) == NULL) { + fl_alert("Error opening file %s for saving", tmpc); } if (dirty) { inputs->buttons->presets->save_preset(current_preset+1); } /* since hdspmixer 1.11, we also store the meter level settings. Indicate * the new on-disk structure via a small header */ - if (fwrite((void *)&header, sizeof(char), sizeof(header), file) != + if (fwrite((void *)&header, sizeof(char), sizeof(header), out) != sizeof(header)) { goto save_error; } @@ -374,99 +381,122 @@ void HDSPMixerWindow::save() for (int preset = 0; preset < 8; ++preset) { for (int channel = 0; channel < HDSP_MAX_CHANNELS; ++channel) { /* inputs pans and volumes */ - if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), pan_array_size, file) != pan_array_size) { + if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), pan_array_size, out) != pan_array_size) { goto save_error; } - if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->fader_pos[0]), sizeof(int), pan_array_size, file) != pan_array_size) { + if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->fader_pos[0]), sizeof(int), pan_array_size, out) != pan_array_size) { goto save_error; } /* playbacks pans and volumes */ - if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), pan_array_size, file) != pan_array_size) { + if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), pan_array_size, out) != pan_array_size) { goto save_error; } - if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->fader_pos[0]), sizeof(int), pan_array_size, file) != pan_array_size) { + if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->fader_pos[0]), sizeof(int), pan_array_size, out) != pan_array_size) { goto save_error; } /* inputs mute/solo/dest */ - if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->mute), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->mute), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->solo), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->solo), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->dest), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->dest), sizeof(int), 1, out) != 1) { goto save_error; } /* playbacks mute/solo/dest */ - if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->mute), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->mute), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->solo), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->solo), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->dest), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->dest), sizeof(int), 1, out) != 1) { goto save_error; } /* outputs volumes */ - if (fwrite((void *)&(outputs->strips[channel]->data[card][speed][preset]->fader_pos), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(outputs->strips[channel]->data[card][speed][preset]->fader_pos), sizeof(int), 1, out) != 1) { goto save_error; } } /* Lineouts */ - if (fwrite((void *)&(outputs->strips[HDSP_MAX_CHANNELS]->data[card][speed][preset]->fader_pos), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(outputs->strips[HDSP_MAX_CHANNELS]->data[card][speed][preset]->fader_pos), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(outputs->strips[HDSP_MAX_CHANNELS+1]->data[card][speed][preset]->fader_pos), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(outputs->strips[HDSP_MAX_CHANNELS+1]->data[card][speed][preset]->fader_pos), sizeof(int), 1, out) != 1) { goto save_error; } /* Global settings */ - if (fwrite((void *)&(data[card][speed][preset]->input), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(data[card][speed][preset]->input), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(data[card][speed][preset]->output), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(data[card][speed][preset]->output), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(data[card][speed][preset]->playback), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(data[card][speed][preset]->playback), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(data[card][speed][preset]->submix), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(data[card][speed][preset]->submix), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(data[card][speed][preset]->submix_value), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(data[card][speed][preset]->submix_value), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(data[card][speed][preset]->solo), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(data[card][speed][preset]->solo), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(data[card][speed][preset]->mute), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(data[card][speed][preset]->mute), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(data[card][speed][preset]->last_destination), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(data[card][speed][preset]->last_destination), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(data[card][speed][preset]->rmsplus3), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(data[card][speed][preset]->rmsplus3), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(data[card][speed][preset]->numbers), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(data[card][speed][preset]->numbers), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(data[card][speed][preset]->over), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(data[card][speed][preset]->over), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(data[card][speed][preset]->level), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(data[card][speed][preset]->level), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(data[card][speed][preset]->rate), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(data[card][speed][preset]->rate), sizeof(int), 1, out) != 1) { goto save_error; } } } } - fclose(file); + + /* If the file we want to write already exists it could be possible that it + * was saved with a newer version. If that is the case we just append its + * content to the new output file and that way ensure that we don't lose any + * data the new version wrote. + */ + if ((in = fopen(file_name, "r")) != NULL) { + if (!fseek(in, ftell(out), SEEK_SET)) { + char buff[512]; + size_t read; + while ((read = fread(&buff, sizeof(char), sizeof(buff), in)) != 0) + fwrite(buff, sizeof(char), read, out); + if (ferror(in) || ferror(out)) + fl_alert("Error appending %s to %s", file_name, tmpc); + } + fclose(in); + } + + fclose(out); + + if (rename(tmpc, file_name)) + fl_alert("Error renaming %s to %s", tmpc, file_name); + ::remove(tmpc); + return; save_error: - fclose(file); + fclose(out); fl_alert("Error saving presets to file %s", file_name); return; } From 3e4fd7dffbf40b2997075320ce24aaae1b97f328 Mon Sep 17 00:00:00 2001 From: Jasmin Fazlic Date: Sun, 7 Feb 2021 15:50:48 +0100 Subject: [PATCH 135/166] hdspmixer: add output loopback buttons This patch adds "LPBK" buttons to the output strip channels allowing to toggle the hardware output loopback state. Efforts were made to hide the buttons for not yet enabled devices but due to difficulties in implementation was cancelled for the time being. Should it be a no-go efforts should be made to fix this and hide them, although I would think fixing the driver for other devices would be an effort with much more merit. This is currently only enabled for HDSP9632 devices with following driver patch: https://github.com/tiwai/sound/commit/da2a040ee7cfe1dd57d5bec7906cb979c5787a86 We check whether the system has the kernel patch applied by calling `HDSPMixerCard::supportsLoopback()` and if not these buttons remain gray (off) and do nothing when clicked. Signed-off-by: Jasmin Fazlic Signed-off-by: Takashi Iwai --- hdspmixer/pixmaps/loopback.xpm | 69 ++++ hdspmixer/pixmaps/output.xpm | 498 +++++++++++++++----------- hdspmixer/pixmaps/output_r.xpm | 498 +++++++++++++++----------- hdspmixer/src/HDSPMixerCard.cxx | 34 ++ hdspmixer/src/HDSPMixerCard.h | 2 + hdspmixer/src/HDSPMixerLoopback.cxx | 133 +++++++ hdspmixer/src/HDSPMixerLoopback.h | 48 +++ hdspmixer/src/HDSPMixerOutput.cxx | 1 + hdspmixer/src/HDSPMixerOutput.h | 3 + hdspmixer/src/HDSPMixerOutputData.h | 1 + hdspmixer/src/HDSPMixerOutputs.cxx | 4 +- hdspmixer/src/HDSPMixerPresetData.cxx | 1 + hdspmixer/src/HDSPMixerPresetData.h | 1 + hdspmixer/src/HDSPMixerPresets.cxx | 2 + hdspmixer/src/HDSPMixerWindow.cxx | 68 ++++ hdspmixer/src/Makefile.am | 2 + hdspmixer/src/defines.h | 2 +- hdspmixer/src/pixmaps.cxx | 1 + hdspmixer/src/pixmaps.h | 1 + 19 files changed, 931 insertions(+), 438 deletions(-) create mode 100644 hdspmixer/pixmaps/loopback.xpm create mode 100644 hdspmixer/src/HDSPMixerLoopback.cxx create mode 100644 hdspmixer/src/HDSPMixerLoopback.h diff --git a/hdspmixer/pixmaps/loopback.xpm b/hdspmixer/pixmaps/loopback.xpm new file mode 100644 index 0000000..a327467 --- /dev/null +++ b/hdspmixer/pixmaps/loopback.xpm @@ -0,0 +1,69 @@ +/* XPM */ +char const * loopback_xpm[] = { +"34 15 51 1", +" c None", +". c #2E3038", +"+ c #FFFB7C", +"@ c #FDF97B", +"# c #2E2D11", +"$ c #000000", +"% c #383716", +"& c #898740", +"* c #F1EE75", +"= c #22210A", +"- c #727034", +"; c #E2DE6D", +"> c #D5D267", +", c #787637", +"' c #FBF77A", +") c #AAA750", +"! c #ABA851", +"~ c #CDC962", +"{ c #83813C", +"] c #C8C560", +"^ c #84823D", +"/ c #F7F378", +"( c #949145", +"_ c #B7B457", +": c #949245", +"< c #353414", +"[ c #87853F", +"} c #F1ED75", +"| c #3B3A17", +"1 c #DFDB6C", +"2 c #161505", +"3 c #4B4A20", +"4 c #E5E16E", +"5 c #FEFA7C", +"6 c #E8E470", +"7 c #535124", +"8 c #FAF679", +"9 c #E7E370", +"0 c #66642E", +"a c #E4E06E", +"b c #F6F277", +"c c #EAE671", +"d c #E0DC6C", +"e c #B9B658", +"f c #5F5D2A", +"g c #EDE973", +"h c #69672F", +"i c #DDD96A", +"j c #333342", +"k c #32323E", +"l c #313136", +"..................................", +".++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++.", +".+++@#++++@$$%&*@$$=-;+@#++>,*+++.", +".+++@#++++@#+')!@#+@~{+@#+]^/++++.", +".+++@#++++@#+'!!@#+@~(+@#_:'+++++.", +".+++@#++++@$$<[}@$$$|1+@234++++++.", +".+++@#++++@#++++@#+5678@#90a+++++.", +".+++@#++++@#++++@#+59#b@#+c0d++++.", +".+++@$$$$e@#++++@$$2f]+@#++ghi+++.", +".++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++.", +"..jklllllllllkj....jklllllllllkj.."}; diff --git a/hdspmixer/pixmaps/output.xpm b/hdspmixer/pixmaps/output.xpm index 8f7cd65..c827b1c 100644 --- a/hdspmixer/pixmaps/output.xpm +++ b/hdspmixer/pixmaps/output.xpm @@ -1,220 +1,282 @@ /* XPM */ char const * output_xpm[] = { -"36 208 9 1", -" c #595966", -". c #2E3038", -"+ c #000000", -"@ c #474951", -"# c #404044", -"$ c #7A7A8F", -"% c #27272B", -"& c #616176", -"* c #737384", -" ", -" .................................. ", -" .................................. ", -" .................................. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" ..................++++++++++...... ", -" .@@@@@@@#$@@@.....++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" .@@@@@@@#$@@@.....++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" .@@@@@@@#$@@@.....++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" .@@@@@@@#$@@@.....++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" .@@@@@@@#$@@@.....++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" .@@@@@@@#$@@@.....++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" .@@@@@@@#$@@@.....++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" .@@@@@@@#$@@@.....++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" .@@@@@@@#$@@@.....++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ..................++++++++++...... ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" ..******************************.. ", -" ..******************************.. ", -" ..******************************.. ", -" ..******************************.. ", -" ..******************************.. ", -" ..******************************.. ", -" ..******************************.. ", -" ..******************************.. ", -" ..******************************.. ", -" ..******************************.. ", -" ..******************************.. ", -" ..******************************.. ", -" .................................. ", -" .................................. ", -" .................................. ", -" "}; +"36 224 55 1", +" c None", +". c #595966", +"+ c #2E3038", +"@ c #000000", +"# c #474951", +"$ c #404044", +"% c #7A7A8F", +"& c #27272B", +"* c #616176", +"= c #737384", +"- c #757585", +"; c #D4D4D4", +"> c #D6D6D6", +", c #D3D3D4", +"' c #C3C3C6", +") c #848491", +"! c #D5D5D5", +"~ c #CACACB", +"{ c #93939C", +"] c #9D9DA5", +"^ c #C8C8CA", +"/ c #787888", +"( c #B6B6BA", +"_ c #A3A3AA", +": c #C5C5C7", +"< c #A7A7AE", +"[ c #C4C4C6", +"} c #7D7D8C", +"| c #797989", +"1 c #C0C0C2", +"2 c #AFAFB4", +"3 c #BFBFC2", +"4 c #D3D3D3", +"5 c #95959F", +"6 c #D5D5D6", +"7 c #D1D1D2", +"8 c #91919B", +"9 c #757586", +"0 c #8E8E99", +"a c #D1D1D1", +"b c #8F8F99", +"c c #CBCBCD", +"d c #92929C", +"e c #7F7F8D", +"f c #8C8C97", +"g c #96969F", +"h c #AFAFB5", +"i c #CECECF", +"j c #A6A6AD", +"k c #8A8A96", +"l c #CCCCCD", +"m c #9898A1", +"n c #333342", +"o c #32323E", +"p c #313136", +"....................................", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++++++++++++@@@@@@@@@@++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +"....................................", +".++++++++++++++++++++++++++++++++++.", +".+================================+.", +".+================================+.", +".+================================+.", +".+===-;====->>,')->>!~{=-;==]^)===+.", +".+===-;====-;=/((-;=-_:=-;=<[}====+.", +".+===-;====-;=|((-;=-_1=-;23/=====+.", +".+===-;====->>,[)->>>45=-678======+.", +".+===-;====-;====-;=90a|-;bcd=====+.", +".+===-;====-;====-;=9b;e-;=fcg====+.", +".+===->>>>h-;====->>6ij=-;==klm===+.", +".+================================+.", +".+================================+.", +".+================================+.", +".++nopppppppppon++++nopppppppppon++.", +"...................................."}; diff --git a/hdspmixer/pixmaps/output_r.xpm b/hdspmixer/pixmaps/output_r.xpm index ab2ca99..51b1984 100644 --- a/hdspmixer/pixmaps/output_r.xpm +++ b/hdspmixer/pixmaps/output_r.xpm @@ -1,220 +1,282 @@ /* XPM */ char const * output_r_xpm[] = { -"36 208 9 1", -" c #595966", -". c #2E3038", -"+ c #000000", -"@ c #474951", -"# c #404044", -"$ c #7A7A8F", -"% c #27272B", -"& c #616176", -"* c #737384", -" ", -" .................................. ", -" .................................. ", -" .................................. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" ..................++++++++++...... ", -" .@@@@@@@#$@@@.....++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" .@@@@@@@#$@@@.....++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" .@@@@@@@#$@@@.....++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" .@@@@@@@#$@@@.....++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" .@@@@@@@#$@@@.....++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" .@@@@@@@#$@@@.....++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" .@@@@@@@#$@@@.....++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" .@@@@@@@#$@@@.....++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" .@@@@@@@#$@@@.....++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ........%&........++++++++++...... ", -" ..................++++++++++...... ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" ..++++++++++++++++++++++++++++++.. ", -" .................................. ", -" .................................. ", -" .................................. ", -" .................................. ", -" ..******************************.. ", -" ..******************************.. ", -" ..******************************.. ", -" ..******************************.. ", -" ..******************************.. ", -" ..******************************.. ", -" ..******************************.. ", -" ..******************************.. ", -" ..******************************.. ", -" ..******************************.. ", -" ..******************************.. ", -" ..******************************.. ", -" .................................. ", -" .................................. ", -" .................................. ", -" "}; +"36 224 55 1", +" c None", +". c #595966", +"+ c #2E3038", +"@ c #000000", +"# c #474951", +"$ c #404044", +"% c #7A7A8F", +"& c #27272B", +"* c #616176", +"= c #737384", +"- c #757585", +"; c #D4D4D4", +"> c #D6D6D6", +", c #D3D3D4", +"' c #C3C3C6", +") c #848491", +"! c #D5D5D5", +"~ c #CACACB", +"{ c #93939C", +"] c #9D9DA5", +"^ c #C8C8CA", +"/ c #787888", +"( c #B6B6BA", +"_ c #A3A3AA", +": c #C5C5C7", +"< c #A7A7AE", +"[ c #C4C4C6", +"} c #7D7D8C", +"| c #797989", +"1 c #C0C0C2", +"2 c #AFAFB4", +"3 c #BFBFC2", +"4 c #D3D3D3", +"5 c #95959F", +"6 c #D5D5D6", +"7 c #D1D1D2", +"8 c #91919B", +"9 c #757586", +"0 c #8E8E99", +"a c #D1D1D1", +"b c #8F8F99", +"c c #CBCBCD", +"d c #92929C", +"e c #7F7F8D", +"f c #8C8C97", +"g c #96969F", +"h c #AFAFB5", +"i c #CECECF", +"j c #A6A6AD", +"k c #8A8A96", +"l c #CCCCCD", +"m c #9898A1", +"n c #333342", +"o c #32323E", +"p c #313136", +"....................................", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++++++++++++@@@@@@@@@@++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +"....................................", +".++++++++++++++++++++++++++++++++++.", +".+================================+.", +".+================================+.", +".+================================+.", +".+===-;====->>,')->>!~{=-;==]^)===+.", +".+===-;====-;=/((-;=-_:=-;=<[}====+.", +".+===-;====-;=|((-;=-_1=-;23/=====+.", +".+===-;====->>,[)->>>45=-678======+.", +".+===-;====-;====-;=90a|-;bcd=====+.", +".+===-;====-;====-;=9b;e-;=fcg====+.", +".+===->>>>h-;====->>6ij=-;==klm===+.", +".+================================+.", +".+================================+.", +".+================================+.", +".++nopppppppppon++++nopppppppppon++.", +"...................................."}; diff --git a/hdspmixer/src/HDSPMixerCard.cxx b/hdspmixer/src/HDSPMixerCard.cxx index ce40ba7..72232c8 100644 --- a/hdspmixer/src/HDSPMixerCard.cxx +++ b/hdspmixer/src/HDSPMixerCard.cxx @@ -231,6 +231,8 @@ void HDSPMixerCard::adjustSettings() { /* should never happen */ break; } + + max_channels = sizeof(channel_map_mf_ss); } if (type == Digiface) { @@ -253,6 +255,8 @@ void HDSPMixerCard::adjustSettings() { /* should never happen */ break; } + + max_channels = sizeof(channel_map_df_ss); } if (type == RPM) { @@ -263,6 +267,8 @@ void HDSPMixerCard::adjustSettings() { channel_map_input = channel_map_playback = channel_map_rpm; dest_map = dest_map_rpm; meter_map_input = meter_map_playback = channel_map_rpm; + + max_channels = sizeof(channel_map_rpm); } @@ -286,6 +292,8 @@ void HDSPMixerCard::adjustSettings() { /* should never happen */ break; } + + max_channels = sizeof(channel_map_df_ss); } if (type == H9632) { @@ -312,6 +320,8 @@ void HDSPMixerCard::adjustSettings() { meter_map_input = meter_map_playback = channel_map_h9632_qs; break; } + + max_channels = sizeof(channel_map_h9632_ss); } if (HDSPeMADI == type) { @@ -341,6 +351,7 @@ void HDSPMixerCard::adjustSettings() { break; } + max_channels = sizeof(channel_map_unity_ss); } if (HDSPeAIO == type) { @@ -379,6 +390,7 @@ void HDSPMixerCard::adjustSettings() { break; } + max_channels = sizeof(channel_map_aio_out_ss); } if (HDSP_AES == type) { @@ -394,6 +406,7 @@ void HDSPMixerCard::adjustSettings() { meter_map_input = channel_map_aes32; meter_map_playback = channel_map_aes32; + max_channels = sizeof(channel_map_aes32); } if (HDSPeRayDAT == type) { @@ -426,6 +439,7 @@ void HDSPMixerCard::adjustSettings() { break; } + max_channels = sizeof(channel_map_raydat_ss); } window_width = (channels_playback+2)*STRIP_WIDTH; @@ -545,3 +559,23 @@ int HDSPMixerCard::initializeCard(HDSPMixerWindow *w) return 0; } +int HDSPMixerCard::supportsLoopback() const +{ + int err = 0; + snd_ctl_elem_value_t *elemval; + snd_ctl_elem_id_t * elemid; + snd_ctl_t *handle; + snd_ctl_elem_value_alloca(&elemval); + snd_ctl_elem_id_alloca(&elemid); + if ((err = snd_ctl_open(&handle, name, SND_CTL_NONBLOCK)) < 0) + return err; + + snd_ctl_elem_id_set_name(elemid, "Output Loopback"); + snd_ctl_elem_id_set_interface(elemid, SND_CTL_ELEM_IFACE_HWDEP); + snd_ctl_elem_id_set_index(elemid, 0); + snd_ctl_elem_value_set_id(elemval, elemid); + err = snd_ctl_elem_read(handle, elemval); + snd_ctl_close(handle); + + return err; +} diff --git a/hdspmixer/src/HDSPMixerCard.h b/hdspmixer/src/HDSPMixerCard.h index faaeefa..eecfca3 100644 --- a/hdspmixer/src/HDSPMixerCard.h +++ b/hdspmixer/src/HDSPMixerCard.h @@ -52,6 +52,7 @@ public: HDSPMixerCard(int cardtype, int id, char *shortname); int channels_input, channels_playback, window_width, window_height, card_id; int channels_output; + int max_channels; int type; int last_preset; /* Last activated preset before switching to another card */ int last_dirty; /* Last dirty flag before switching to another card */ @@ -68,6 +69,7 @@ public: void adjustSettings(); void getAeb(); hdsp_9632_aeb_t h9632_aeb; + int supportsLoopback() const; }; #endif diff --git a/hdspmixer/src/HDSPMixerLoopback.cxx b/hdspmixer/src/HDSPMixerLoopback.cxx new file mode 100644 index 0000000..fcfec2a --- /dev/null +++ b/hdspmixer/src/HDSPMixerLoopback.cxx @@ -0,0 +1,133 @@ +/* + * HDSPMixer + * + * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#pragma implementation +#include "HDSPMixerLoopback.h" + +HDSPMixerLoopback::HDSPMixerLoopback(int x, int y, int idx):Fl_Widget(x, y, 34, 15) +{ + basew = (HDSPMixerWindow *)window(); + index = idx; +} + +void HDSPMixerLoopback::draw() +{ + if (_loopback == 1) + fl_draw_pixmap(loopback_xpm, x(), y()); +} + +int HDSPMixerLoopback::get() +{ + auto const card { basew->cards[basew->current_card] }; + + if (card->supportsLoopback() != 0) + return -1; + + if (index >= card->max_channels) + return -1; + + int err; + snd_ctl_elem_value_t *elemval; + snd_ctl_elem_id_t * elemid; + snd_ctl_t *handle; + snd_ctl_elem_value_alloca(&elemval); + snd_ctl_elem_id_alloca(&elemid); + char const * const name = basew->cards[basew->current_card]->name; + if ((err = snd_ctl_open(&handle, name, SND_CTL_NONBLOCK)) < 0) { + fprintf(stderr, "Error accessing ctl interface on card %s\n.", name); + return -1; + } + + snd_ctl_elem_id_set_name(elemid, "Output Loopback"); + snd_ctl_elem_id_set_interface(elemid, SND_CTL_ELEM_IFACE_HWDEP); + snd_ctl_elem_id_set_index(elemid, index); + snd_ctl_elem_value_set_id(elemval, elemid); + if ((err = snd_ctl_elem_read(handle, elemval)) < 0) + fprintf(stderr, "cannot read loopback: %d\n", err); + else + _loopback = snd_ctl_elem_value_get_integer(elemval, 0); + + snd_ctl_close(handle); + + return _loopback; +} + +void HDSPMixerLoopback::set(int l) +{ + auto const card { basew->cards[basew->current_card] }; + + if (card->supportsLoopback() != 0) + return; + + if (index >= card->max_channels) + return; + + if (l != _loopback) { + int err; + + snd_ctl_elem_id_t *id; + snd_ctl_elem_value_t *ctl; + snd_ctl_t *handle; + + snd_ctl_elem_value_alloca(&ctl); + snd_ctl_elem_id_alloca(&id); + snd_ctl_elem_id_set_name(id, "Output Loopback"); + snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP); + snd_ctl_elem_id_set_device(id, 0); + snd_ctl_elem_id_set_index(id, index); + snd_ctl_elem_value_set_id(ctl, id); + + if ((err = snd_ctl_open( + &handle, basew->cards[basew->current_card]->name, SND_CTL_NONBLOCK)) < 0) { + fprintf(stderr, "Alsa error 1: %s\n", snd_strerror(err)); + return; + } + + snd_ctl_elem_value_set_integer(ctl, 0, l); + if ((err = snd_ctl_elem_write(handle, ctl)) < 0) { + fprintf(stderr, "Alsa error 2: %s\n", snd_strerror(err)); + snd_ctl_close(handle); + return; + } + + _loopback = l; + + snd_ctl_close(handle); + + redraw(); + } +} + +int HDSPMixerLoopback::handle(int e) +{ + int button3 = Fl::event_button3(); + switch (e) { + case FL_PUSH: + set(!_loopback); + if (button3) + relative->set(_loopback); + basew->checkState(); + redraw(); + return 1; + default: + return Fl_Widget::handle(e); + } +} + diff --git a/hdspmixer/src/HDSPMixerLoopback.h b/hdspmixer/src/HDSPMixerLoopback.h new file mode 100644 index 0000000..07f1f0c --- /dev/null +++ b/hdspmixer/src/HDSPMixerLoopback.h @@ -0,0 +1,48 @@ +/* + * HDSPMixer + * + * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#pragma interface +#ifndef HDSPMixerLoopback_H +#define HDSPMixerLoopback_H + +#include +#include +#include "HDSPMixerWindow.h" +#include "pixmaps.h" + +class HDSPMixerWindow; + +class HDSPMixerLoopback:public Fl_Widget +{ +private: + HDSPMixerWindow *basew; + int _loopback{-1}; +public: + HDSPMixerLoopback *relative; + int index; + HDSPMixerLoopback(int x, int y, int idx); + void draw(); + int handle(int e); + int get(); + void set(int l); +}; + +#endif + diff --git a/hdspmixer/src/HDSPMixerOutput.cxx b/hdspmixer/src/HDSPMixerOutput.cxx index 0053fe0..7f80a74 100644 --- a/hdspmixer/src/HDSPMixerOutput.cxx +++ b/hdspmixer/src/HDSPMixerOutput.cxx @@ -204,6 +204,7 @@ HDSPMixerOutput::HDSPMixerOutput(int x, int y, int w, int h, int num):Fl_Group(x peak = new HDSPMixerPeak(x+3, y+4, 0); gain = new HDSPMixerGain(x+3, y+175, 0); meter = new HDSPMixerMeter(x+20, y+27, false, peak); + loopback = new HDSPMixerLoopback(x+1, y+208, out_num); end(); } diff --git a/hdspmixer/src/HDSPMixerOutput.h b/hdspmixer/src/HDSPMixerOutput.h index 6278cfd..1e04ae5 100644 --- a/hdspmixer/src/HDSPMixerOutput.h +++ b/hdspmixer/src/HDSPMixerOutput.h @@ -27,6 +27,7 @@ #include #include #include "HDSPMixerFader.h" +#include "HDSPMixerLoopback.h" #include "HDSPMixerPeak.h" #include "HDSPMixerGain.h" #include "HDSPMixerMeter.h" @@ -36,6 +37,7 @@ class HDSPMixerFader; class HDSPMixerGain; +class HDSPMixerLoopback; class HDSPMixerPeak; class HDSPMixerMeter; class HDSPMixerOutputData; @@ -56,6 +58,7 @@ public: HDSPMixerFader *fader; HDSPMixerGain *gain; HDSPMixerMeter *meter; + HDSPMixerLoopback *loopback; HDSPMixerOutput(int x, int y, int w, int h, int out); void draw(); void draw_background(); diff --git a/hdspmixer/src/HDSPMixerOutputData.h b/hdspmixer/src/HDSPMixerOutputData.h index 885047b..75b9109 100644 --- a/hdspmixer/src/HDSPMixerOutputData.h +++ b/hdspmixer/src/HDSPMixerOutputData.h @@ -26,6 +26,7 @@ class HDSPMixerOutputData { public: int fader_pos; + int loopback; HDSPMixerOutputData(); }; diff --git a/hdspmixer/src/HDSPMixerOutputs.cxx b/hdspmixer/src/HDSPMixerOutputs.cxx index 0b4e7f4..342685d 100644 --- a/hdspmixer/src/HDSPMixerOutputs.cxx +++ b/hdspmixer/src/HDSPMixerOutputs.cxx @@ -25,13 +25,15 @@ HDSPMixerOutputs::HDSPMixerOutputs(int x, int y, int w, int h, int nchans):Fl_Gr { int i; for (i = 0; i < HDSP_MAX_CHANNELS+2; i += 2) { - strips[i] = new HDSPMixerOutput((i*STRIP_WIDTH), y, STRIP_WIDTH, SMALLSTRIP_HEIGHT, i); + strips[i] = new HDSPMixerOutput((i*STRIP_WIDTH), y, STRIP_WIDTH, SMALLSTRIP_HEIGHT, i); strips[i+1] = new HDSPMixerOutput(((i+1)*STRIP_WIDTH), y, STRIP_WIDTH, SMALLSTRIP_HEIGHT, i+1); /* Setup linked stereo channels */ strips[i]->fader->relative = strips[i+1]->fader; strips[i+1]->fader->relative = strips[i]->fader; strips[i]->fader->gain = strips[i]->gain; strips[i+1]->fader->gain = strips[i+1]->gain; + strips[i]->loopback->relative = strips[i+1]->loopback; + strips[i+1]->loopback->relative = strips[i]->loopback; } empty_aebo[0] = new HDSPMixerEmpty((nchans-6)*STRIP_WIDTH, y, 2*STRIP_WIDTH, SMALLSTRIP_HEIGHT, 0); diff --git a/hdspmixer/src/HDSPMixerPresetData.cxx b/hdspmixer/src/HDSPMixerPresetData.cxx index 276d101..6359732 100644 --- a/hdspmixer/src/HDSPMixerPresetData.cxx +++ b/hdspmixer/src/HDSPMixerPresetData.cxx @@ -36,5 +36,6 @@ HDSPMixerPresetData::HDSPMixerPresetData() over = 3; level = 0; rate = 1; + loopback = 0; } diff --git a/hdspmixer/src/HDSPMixerPresetData.h b/hdspmixer/src/HDSPMixerPresetData.h index 58536d3..3b46b92 100644 --- a/hdspmixer/src/HDSPMixerPresetData.h +++ b/hdspmixer/src/HDSPMixerPresetData.h @@ -38,6 +38,7 @@ public: int over; int rate; int rmsplus3; + int loopback; HDSPMixerPresetData(); }; diff --git a/hdspmixer/src/HDSPMixerPresets.cxx b/hdspmixer/src/HDSPMixerPresets.cxx index aeeb9c9..82654d9 100644 --- a/hdspmixer/src/HDSPMixerPresets.cxx +++ b/hdspmixer/src/HDSPMixerPresets.cxx @@ -143,6 +143,7 @@ void HDSPMixerPresets::save_preset(int prst) { basew->playbacks->strips[i]->data[card][speed][p]->dest = basew->playbacks->strips[i]->targets->selected; basew->outputs->strips[i]->data[card][speed][p]->fader_pos = basew->outputs->strips[i]->fader->pos[0]; + basew->outputs->strips[i]->data[card][speed][p]->loopback = basew->outputs->strips[i]->loopback->get(); } /* Line outs */ basew->outputs->strips[HDSP_MAX_CHANNELS]->data[card][speed][p]->fader_pos = basew->outputs->strips[HDSP_MAX_CHANNELS]->fader->pos[0]; @@ -188,6 +189,7 @@ void HDSPMixerPresets::restore_preset(int prst) { basew->playbacks->strips[i]->targets->selected = basew->playbacks->strips[i]->data[card][speed][p]->dest; basew->outputs->strips[i]->fader->pos[0] = basew->outputs->strips[i]->data[card][speed][p]->fader_pos; + basew->outputs->strips[i]->loopback->set(basew->outputs->strips[i]->data[card][speed][p]->loopback); } /* Line outs */ basew->outputs->strips[HDSP_MAX_CHANNELS]->fader->pos[0] = basew->outputs->strips[HDSP_MAX_CHANNELS+1]->data[card][speed][p]->fader_pos; diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index 3b3d668..4a911c1 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -471,6 +471,29 @@ void HDSPMixerWindow::save() } } + /* Output loopback data */ + for (int channel = 0; channel < HDSP_MAX_CHANNELS; ++channel) { + auto const strip = outputs->strips[channel]; + + for (int card = 0; card < MAX_CARDS; ++card) { + auto const data = strip->data[card]; + + for (int speed = 0; speed < 3; ++speed) { + auto const spd = data[speed]; + + for (int preset = 0; preset < 8; ++preset) { + auto const data = spd[preset]; + + if (fwrite((void *)&(data->loopback), + sizeof(int), + 1, + out) != 1) + goto save_error; + } + } + } + } + /* If the file we want to write already exists it could be possible that it * was saved with a newer version. If that is the case we just append its * content to the new output file and that way ensure that we don't lose any @@ -519,6 +542,7 @@ void HDSPMixerWindow::load() bool ondisk_v1 = false; int pan_array_size = 14; /* old (pre 1.0.24) HDSP_MAX_DEST */ int channels_per_card = 26; /* old (pre 1.0.24) HDSP_MAX_CHANNELS */ + bool res = true; if (fread(&buffer, sizeof(char), sizeof(buffer), file) != sizeof(buffer)) { goto load_error; @@ -647,6 +671,46 @@ void HDSPMixerWindow::load() } } } + + /* Output loopback data */ + for (int channel = 0; channel < HDSP_MAX_CHANNELS; ++channel) { + auto const strip = outputs->strips[channel]; + + for (int card = 0; card < MAX_CARDS; ++card) { + auto const data = strip->data[card]; + + for (int speed = 0; speed < 3; ++speed) { + auto const spd = data[speed]; + + for (int preset = 0; preset < 8; ++preset) { + auto const data = spd[preset]; + + /* TODO: Somewhere we get a value of 5 from, investigate + * this another day. For now just reset it here and + * continue looping to reset the value. + */ + data->loopback = 0; + + if (feof(file)) { + res = true; + continue; + } + + if (ferror(file)) { + res = false; + continue; + } + + if (fread((void *)&(data->loopback), sizeof(int), 1, file) != 1) + res = false; + } + } + } + } + + if (!res) + goto load_error; + fclose(file); setTitleWithFilename(); resetMixer(); @@ -844,6 +908,8 @@ void HDSPMixerWindow::restoreDefaults(int card) } outputs->strips[i]->data[card][speed][preset]->fader_pos = (preset != 4) ? 137*CF : 0; outputs->strips[i+1]->data[card][speed][preset]->fader_pos = (preset != 4) ? 137*CF : 0; + outputs->strips[i]->data[card][speed][preset]->loopback = 0; + outputs->strips[i+1]->data[card][speed][preset]->loopback = 0; if (preset == 3 || preset == 7) { inputs->strips[i]->data[card][speed][preset]->mute = 1; inputs->strips[i+1]->data[card][speed][preset]->mute = 1; @@ -1051,6 +1117,8 @@ void HDSPMixerWindow::checkState() /* Outputs row */ if (outputs->strips[i]->data[current_card][speed][p]->fader_pos != outputs->strips[i]->fader->pos[0]) corrupt++; + if (outputs->strips[i]->data[current_card][speed][p]->loopback != outputs->strips[i]->loopback->get()) + corrupt++; } /* Global settings */ diff --git a/hdspmixer/src/Makefile.am b/hdspmixer/src/Makefile.am index e80a8ac..ebc4c3c 100644 --- a/hdspmixer/src/Makefile.am +++ b/hdspmixer/src/Makefile.am @@ -15,6 +15,8 @@ hdspmixer_SOURCES = \ HDSPMixerEmpty.h \ HDSPMixerOutput.cxx \ HDSPMixerOutput.h \ + HDSPMixerLoopback.cxx \ + HDSPMixerLoopback.h \ HDSPMixerIOMixer.cxx \ HDSPMixerIOMixer.h \ HDSPMixerSelector.cxx \ diff --git a/hdspmixer/src/defines.h b/hdspmixer/src/defines.h index af5c382..e76141b 100644 --- a/hdspmixer/src/defines.h +++ b/hdspmixer/src/defines.h @@ -34,7 +34,7 @@ #define STRIP_WIDTH 36 #define FULLSTRIP_HEIGHT 253 -#define SMALLSTRIP_HEIGHT 208 +#define SMALLSTRIP_HEIGHT 224 #define MENU_HEIGHT 20 #define MIN_WIDTH 2*STRIP_WIDTH diff --git a/hdspmixer/src/pixmaps.cxx b/hdspmixer/src/pixmaps.cxx index 2f7c589..34f8834 100644 --- a/hdspmixer/src/pixmaps.cxx +++ b/hdspmixer/src/pixmaps.cxx @@ -47,6 +47,7 @@ #include "../pixmaps/over.xpm" #include "../pixmaps/peak.xpm" #include "../pixmaps/solo.xpm" +#include "../pixmaps/loopback.xpm" #include "../pixmaps/iomixer_r.xpm" #include "../pixmaps/output_r.xpm" #include "../pixmaps/matrix_black.xpm" diff --git a/hdspmixer/src/pixmaps.h b/hdspmixer/src/pixmaps.h index b980a62..3548ba3 100644 --- a/hdspmixer/src/pixmaps.h +++ b/hdspmixer/src/pixmaps.h @@ -49,6 +49,7 @@ extern char const * output_xpm[]; extern char const * over_xpm[]; extern char const * peak_xpm[]; extern char const * solo_xpm[]; +extern char const * loopback_xpm[]; extern char const * iomixer_r_xpm[]; extern char const * output_r_xpm[]; extern char const * matrix_white_xpm[]; From 78e579b3e30076be9e69c410434621b205318dfb Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 27 May 2021 19:18:38 +0200 Subject: [PATCH 136/166] Release v1.2.5 Signed-off-by: Jaroslav Kysela --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index acd6285..e646c43 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION = 1.2.2 +VERSION = 1.2.5 TOP = . SUBDIRS = as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ From 5b9c2cb399b988772f5d260e44c62248d839e4de Mon Sep 17 00:00:00 2001 From: Frank Dana Date: Mon, 17 Aug 2020 19:33:14 -0400 Subject: [PATCH 137/166] hdajackretask: Update kernel doc URL in README As of THIS writing, the documentation has been rearranged, and the "Hint strings" section now resides at the updated URL Fixes: https://github.com/alsa-project/alsa-tools/pull/2 Signed-off-by: Frank Dana Signed-off-by: Jaroslav Kysela --- hdajackretask/README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hdajackretask/README b/hdajackretask/README index 209e332..bd6244b 100644 --- a/hdajackretask/README +++ b/hdajackretask/README @@ -51,4 +51,4 @@ This is for the experts only. It makes you select each configuration field indiv http://www.intel.com/content/dam/www/public/us/en/documents/product-specifications/high-definition-audio-specification.pdf ) * Parser hints -This enables you to send special "hints" to the driver that causes parsing to behave differently. Leave them at the "default" setting unless you have read the driver documentation. ( Which, at the time of this writing, is available here: https://www.kernel.org/doc/Documentation/sound/alsa/HD-Audio.txt - see the "Hint strings" section. ) +This enables you to send special "hints" to the driver that causes parsing to behave differently. Leave them at the "default" setting unless you have read the driver documentation. ( Which, at the time of this writing, is available here: https://www.kernel.org/doc/Documentation/sound/hd-audio/notes.rst - see the "Hint strings" section. ) From 8c8d6941f21ea68894ce7fd13e92b3ac9f16dc8a Mon Sep 17 00:00:00 2001 From: wynnfeng Date: Sun, 29 Jan 2023 20:47:53 +0800 Subject: [PATCH 138/166] hdspmixer: fix core dump Initialize the name pointer to NULL. Fixes: https://github.com/alsa-project/alsa-tools/pull/14 Signed-off-by: wynnfeng Signed-off-by: Jaroslav Kysela --- hdspmixer/src/hdspmixer.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hdspmixer/src/hdspmixer.cxx b/hdspmixer/src/hdspmixer.cxx index 9c0a3c4..a33a75e 100644 --- a/hdspmixer/src/hdspmixer.cxx +++ b/hdspmixer/src/hdspmixer.cxx @@ -39,7 +39,7 @@ int main(int argc, char **argv) { HDSPMixerWindow *window; HDSPMixerCard *hdsp_cards[3]; - char *name, *shortname; + char *name = NULL, *shortname; int card; int cards = 0; From 4bfaf097e07a96bc61d95d913ec2ec2990b4b8a2 Mon Sep 17 00:00:00 2001 From: Mazunki Hoksaas Date: Mon, 4 Sep 2023 14:50:02 +0200 Subject: [PATCH 139/166] echomixer: fix clang-16 incompatible-function-pointer Closes: https://github.com/alsa-project/alsa-tools/pull/17 Signed-off-by: Mazunki Hoksaas Signed-off-by: Jaroslav Kysela --- echomixer/echomixer.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/echomixer/echomixer.c b/echomixer/echomixer.c index 4946a5d..80124ba 100644 --- a/echomixer/echomixer.c +++ b/echomixer/echomixer.c @@ -2105,7 +2105,7 @@ printf("components = %s\n", snd_ctl_card_info_get_components(hw_info));*/ for (i=0; i Date: Thu, 12 Oct 2023 09:02:53 +0000 Subject: [PATCH 140/166] as10k1: make (extern) declarations and definition of macro_depth All `extern` declarations refer to it as `unsigned int`, but the actual definition is a signed integer. Reported by CBMC's goto-cc compiler, which performs type-aware linking. Closes: https://github.com/alsa-project/alsa-tools/pull/19 Signed-off-by: Michael Tautschnig Signed-off-by: Jaroslav Kysela --- as10k1/as10k1.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/as10k1/as10k1.h b/as10k1/as10k1.h index b897f3b..1713963 100644 --- a/as10k1/as10k1.h +++ b/as10k1/as10k1.h @@ -55,6 +55,6 @@ int tram_table_count=0; int gpr_constant_count=0; char patch_name[PATCH_NAME_SIZE]="NO_NAME"; -int macro_depth=0; +unsigned int macro_depth=0; From d349d20c127b373148b3c8cbb9170de4dd7213a9 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 25 Jan 2024 13:25:04 +0100 Subject: [PATCH 141/166] hdajackretask: add support for pipewire stop/start Link: https://github.com/alsa-project/alsa-tools/issues/21 Signed-off-by: Jaroslav Kysela --- hdajackretask/apply-changes.c | 117 ++++++++++++++++++++++++++-------- 1 file changed, 91 insertions(+), 26 deletions(-) diff --git a/hdajackretask/apply-changes.c b/hdajackretask/apply-changes.c index aa291ce..0d558f7 100644 --- a/hdajackretask/apply-changes.c +++ b/hdajackretask/apply-changes.c @@ -15,6 +15,15 @@ static gchar* tempdir = NULL; static gchar* scriptfile = NULL; static gchar* errorfile = NULL; +struct soundserver { + enum { + PULSEAUDIO, + PIPEWIRE + } type; + gboolean was_killed; + gchar *user; +}; + static GQuark quark() { return g_quark_from_static_string("hda-jack-retask-error"); @@ -125,33 +134,73 @@ static gchar* get_pulseaudio_client_conf() return fname; } -static gboolean kill_pulseaudio(gboolean* was_killed, int card, GError** err) +static gboolean call_systemctl(gchar* user, gchar* operation, gchar *unit, GError **err) +{ + gchar* s; + gboolean ok; + + if (getuid() == 0) { + // special case for root + // XDG_RUNTIME_DIR setup seems to be mandatory for Fedora, may differ for other distros + s = g_strdup_printf("runuser -l %s -c 'XDG_RUNTIME_DIR=/var/run/user/$(id -u) systemctl --user %s %s'", user, operation, unit); + } else { + s = g_strdup_printf("systemctl --user %s %s", operation, unit); + } + ok = g_spawn_command_line_sync(s, NULL, NULL, NULL, err); + g_free(s); + return ok; +} + +static gboolean kill_soundserver(struct soundserver* state, int card, GError** err) { gchar* fuser = NULL, *fuser2 = NULL; gchar* s = NULL; gchar* clientconf = NULL; gboolean ok; - *was_killed = FALSE; + char *p; + state->type = PULSEAUDIO; + state->was_killed = FALSE; + state->user = NULL; /* Is PA having a lock on the sound card? */ s = g_strdup_printf("fuser -v /dev/snd/controlC%d", card); /* Due to some bug in fuser, stdout and stderr output is unclear. Better check both. */ if (!(ok = g_spawn_command_line_sync(s, &fuser, &fuser2, NULL, err))) goto cleanup; - if ((ok = strstr(fuser, "pulseaudio") == NULL && strstr(fuser2, "pulseaudio") == NULL)) - goto cleanup; // PulseAudio not locking the sound card + if (strstr(fuser, "pulseaudio") != NULL || strstr(fuser2, "pulseaudio") != NULL) { + clientconf = get_pulseaudio_client_conf(); + if (!(ok = !g_file_test(clientconf, G_FILE_TEST_EXISTS))) { + g_set_error(err, quark(), 0, "Cannot block PulseAudio from respawning:\n" + "Please either remove '%s' or kill PulseAudio manually.", clientconf); + goto cleanup; + } + + if (!(ok = g_file_set_contents(clientconf, "autospawn=no\n", -1, err))) + goto cleanup; + state->was_killed = TRUE; + ok = g_spawn_command_line_sync("pulseaudio -k", NULL, NULL, NULL, err); + } else if ((p = strstr(fuser, "wireplumber")) != NULL || (p = strstr(fuser2, "wireplumber")) != NULL) { + *p = '\0'; + while (p != fuser && p != fuser2 && *p != '\n') + p--; + if (*p == '\n') + p++; + + GRegex *regex; + GMatchInfo *match_info; - clientconf = get_pulseaudio_client_conf(); - if (!(ok = !g_file_test(clientconf, G_FILE_TEST_EXISTS))) { - g_set_error(err, quark(), 0, "Cannot block PulseAudio from respawning:\n" - "Please either remove '%s' or kill PulseAudio manually.", clientconf); - goto cleanup; + regex = g_regex_new (" ([a-zA-Z0-9_-]+) ", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL); + g_regex_match (regex, p, 0, &match_info); + if (g_match_info_matches (match_info)) + state->user = g_match_info_fetch (match_info, 1); + g_match_info_free (match_info); + g_regex_unref (regex); + + state->type = PIPEWIRE; + ok = call_systemctl(state->user, "stop", "wireplumber.service", err); + state->was_killed = ok; + } else { + // Sound server not locking the sound card } - - if (!(ok = g_file_set_contents(clientconf, "autospawn=no\n", -1, err))) - goto cleanup; - - *was_killed = TRUE; - ok = g_spawn_command_line_sync("pulseaudio -k", NULL, NULL, NULL, err); cleanup: g_free(clientconf); @@ -161,16 +210,32 @@ cleanup: return ok; } -static gboolean restore_pulseaudio(gboolean was_killed, GError** err) +static gboolean restore_soundserver(struct soundserver* state, GError** err) { - gchar* clientconf = get_pulseaudio_client_conf(); - if (was_killed && g_unlink(clientconf) != 0) { - g_set_error(err, quark(), 0, "%s", g_strerror(errno)); - g_free(clientconf); - return FALSE; + gboolean ok = FALSE; + switch (state->type) { + case PULSEAUDIO: + gchar* clientconf = get_pulseaudio_client_conf(); + if (state->was_killed && g_unlink(clientconf) != 0) { + g_set_error(err, quark(), 0, "%s", g_strerror(errno)); + g_free(clientconf); + goto cleanup; + } + g_free(clientconf); + ok = TRUE; + break; + case PIPEWIRE: + if (state->was_killed) + ok = call_systemctl(state->user, "start", "wireplumber.service", err); + else + ok = TRUE; + break; } - g_free(clientconf); - return TRUE; + +cleanup: + g_free(state->user); + state->user = NULL; + return ok; } gboolean apply_changes_reconfig(pin_configs_t* pins, int entries, int card, int device, @@ -178,10 +243,10 @@ gboolean apply_changes_reconfig(pin_configs_t* pins, int entries, int card, int { gboolean result = FALSE; // gchar* script_name = NULL; - gboolean pa_killed = FALSE; + struct soundserver state = { 0 }; /* Check for users of the sound card */ /* Kill pulseaudio if necessary (and possible) */ - if (!kill_pulseaudio(&pa_killed, card, err)) + if (!kill_soundserver(&state, card, err)) goto cleanup; /* Create script */ if (!create_reconfig_script(pins, entries, card, device, model, hints, err)) @@ -191,7 +256,7 @@ gboolean apply_changes_reconfig(pin_configs_t* pins, int entries, int card, int goto cleanup; result = TRUE; cleanup: - if (!restore_pulseaudio(pa_killed, result ? err : NULL)) { + if (!restore_soundserver(&state, result ? err : NULL)) { result = FALSE; } // g_free(script_name); From aa2dc9b4323f50bb0a13ed01e7e605532c4ab639 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 25 Jan 2024 13:27:03 +0100 Subject: [PATCH 142/166] hdajackretask: limit the help window size to something safe (1600x1000) for the help screen If more monitors are present in the system, the window is too big and information cannot be visible correctly. Fixes: https://github.com/alsa-project/alsa-tools/issues/20 Signed-off-by: Jaroslav Kysela --- hdajackretask/main-gtk.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hdajackretask/main-gtk.c b/hdajackretask/main-gtk.c index f5ff6e4..c561f57 100644 --- a/hdajackretask/main-gtk.c +++ b/hdajackretask/main-gtk.c @@ -519,7 +519,7 @@ static void documentation_clicked(GtkWidget* sender, ui_data_t* ui) int neww = screen ? (gdk_screen_get_width(screen)*3)/4 : 800; int newh = screen ? (gdk_screen_get_height(screen)*3)/4 : 600; - gtk_window_set_default_size(GTK_WINDOW(dlg), neww, newh); + gtk_window_set_default_size(GTK_WINDOW(dlg), MIN(1600, neww), MIN(1000, newh)); } gtk_dialog_run(dlg); From cb85b257b4ee352d7830e603482daeb7fe2ecc36 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 29 Jan 2024 13:57:31 +0100 Subject: [PATCH 143/166] Release v1.2.11 Signed-off-by: Jaroslav Kysela --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index e646c43..1b3d4ab 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION = 1.2.5 +VERSION = 1.2.11 TOP = . SUBDIRS = as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ From 54b5913cd53f361ee84cb5f7412f7801e5d7b1c9 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Fri, 2 Feb 2024 17:19:47 +0100 Subject: [PATCH 144/166] hdajackretask: Fix build with gcc7 The old compiler doesn't allow a variable declaration inside switch block. Fixes: d349d20c127b ("hdajackretask: add support for pipewire stop/start") Signed-off-by: Takashi Iwai --- hdajackretask/apply-changes.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hdajackretask/apply-changes.c b/hdajackretask/apply-changes.c index 0d558f7..381ccf2 100644 --- a/hdajackretask/apply-changes.c +++ b/hdajackretask/apply-changes.c @@ -213,9 +213,11 @@ cleanup: static gboolean restore_soundserver(struct soundserver* state, GError** err) { gboolean ok = FALSE; + gchar* clientconf; + switch (state->type) { case PULSEAUDIO: - gchar* clientconf = get_pulseaudio_client_conf(); + clientconf = get_pulseaudio_client_conf(); if (state->was_killed && g_unlink(clientconf) != 0) { g_set_error(err, quark(), 0, "%s", g_strerror(errno)); g_free(clientconf); From 97092591e03fa01a7b3b38ecf120fc28f437b9ca Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Sun, 26 Jan 2025 12:40:23 +0100 Subject: [PATCH 145/166] envy24control: fix cast warnings and string array overflows Signed-off-by: Jaroslav Kysela --- envy24control/config.c | 2 +- envy24control/envy24control.c | 4 ++-- envy24control/levelmeters.c | 2 +- envy24control/new_process.c | 6 +++--- envy24control/profiles.c | 13 ++++++------- envy24control/profiles.h | 2 +- envy24control/strstr_icase_blank.c | 7 ++++++- 7 files changed, 20 insertions(+), 16 deletions(-) diff --git a/envy24control/config.c b/envy24control/config.c index 6933eef..c27cf27 100644 --- a/envy24control/config.c +++ b/envy24control/config.c @@ -46,7 +46,7 @@ void config_close() void config_set_stereo(GtkWidget *but, gpointer data) { - gint i=(gint)data; + gint i=GPOINTER_TO_INT(data); config_stereo[i]=GTK_TOGGLE_BUTTON(but)->active; } diff --git a/envy24control/envy24control.c b/envy24control/envy24control.c index 107a843..bce41eb 100644 --- a/envy24control/envy24control.c +++ b/envy24control/envy24control.c @@ -249,7 +249,7 @@ static void create_mixer_frame(GtkWidget *box, int stream) gtk_box_pack_end(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); /* gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), TRUE); */ gtk_signal_connect(GTK_OBJECT(toggle), "toggled", - GTK_SIGNAL_FUNC(config_set_stereo), (gpointer)stream-1); + GTK_SIGNAL_FUNC(config_set_stereo), GINT_TO_POINTER(stream-1)); hbox = gtk_hbox_new(TRUE, 6); gtk_widget_show(hbox); @@ -2176,7 +2176,7 @@ int main(int argc, char **argv) if (! name) { /* probe cards */ - static char cardname[8]; + static char cardname[16]; /* FIXME: hardcoded max number of cards */ for (card_number = 0; card_number < 8; card_number++) { sprintf(cardname, "hw:%d", card_number); diff --git a/envy24control/levelmeters.c b/envy24control/levelmeters.c index 24e00db..5933721 100644 --- a/envy24control/levelmeters.c +++ b/envy24control/levelmeters.c @@ -65,7 +65,7 @@ static GdkGC *get_pen(int idx, int nRed, int nGreen, int nBlue) return gc; } -static int get_index(gchar *name) +static int get_index(const gchar *name) { int result; diff --git a/envy24control/new_process.c b/envy24control/new_process.c index 7ea89a6..2168489 100644 --- a/envy24control/new_process.c +++ b/envy24control/new_process.c @@ -20,9 +20,9 @@ int new_process(char * const cmd_line[MAX_PARAM]) struct stat file_status; /* memory for storage of function pointers from the signal handling routines */ - void (*int_stat)(); - void (*quit_stat)(); - void (*usr2_stat)(); + void (*int_stat)(int); + void (*quit_stat)(int); + void (*usr2_stat)(int); /* * check command file diff --git a/envy24control/profiles.c b/envy24control/profiles.c index 8e23bfd..17a418c 100644 --- a/envy24control/profiles.c +++ b/envy24control/profiles.c @@ -54,9 +54,9 @@ void subst_tilde_in_filename(char * const filename) if ((pos_after_tilde = strchr(filename, '~')) != NULL) { pos_after_tilde++; - strncpy(new_filename, getenv("HOME"), MAX_FILE_NAME_LENGTH); - strncpy(new_filename + strlen(new_filename), pos_after_tilde, MAX_FILE_NAME_LENGTH - strlen(new_filename)); - new_filename[MAX_FILE_NAME_LENGTH - 1] = '\0'; + strncpy(new_filename, getenv("HOME"), sizeof(new_filename) - 1); + strncpy(new_filename + strlen(new_filename), pos_after_tilde, sizeof(new_filename) - strlen(new_filename) - 1); + new_filename[sizeof(new_filename) - 1] = '\0'; strncpy(filename, new_filename, MAX_FILE_NAME_LENGTH); } } @@ -522,7 +522,7 @@ int reorganize_profiles(char * const buffer, const int max_length) { int profile_number, card_number, card_number_max; int res; - int pos_profile_begin, pos_profile_end, pos_card_begin, pos_card_end, pos_name_header; + int pos_profile_begin, pos_card_begin, pos_card_end, pos_name_header; int pos_alsa_section_begin, pos_after_alsa_section; char header[MAX_SEARCH_FIELD_LENGTH]; void *buffer_copy = NULL; @@ -547,7 +547,6 @@ int reorganize_profiles(char * const buffer, const int max_length) compose_search_string(header, PROFILE_HEADER_TEMPL, profile_or_card_number_as_str, place_holder, MAX_SEARCH_FIELD_LENGTH); header[MAX_SEARCH_FIELD_LENGTH - 1] = '\0'; snprintf(buffer_copy + strlen(buffer_copy), max_length - strlen(buffer_copy), "%s\n", header); - pos_profile_end = get_profile_end(buffer, profile_number); /* search max card number in profile */ card_number_max = get_max_card_number_in_profile(buffer, profile_number); for (card_number = 0; card_number <= card_number_max; card_number++) @@ -641,9 +640,9 @@ int save_restore_alsactl_settings(char * const tmpfile, const int card_number, c void compose_tmpfile_name(char * const tmpfile, const char * const cfgfile) { - strncpy(tmpfile, cfgfile, MAX_FILE_NAME_LENGTH); + strncpy(tmpfile, cfgfile, MAX_FILE_NAME_LENGTH - 1); tmpfile[MAX_FILE_NAME_LENGTH - 1] = '\0'; - strncpy(tmpfile + strlen(tmpfile), "_alsactl_tmp", MAX_FILE_NAME_LENGTH - strlen(tmpfile)); + strncpy(tmpfile + strlen(tmpfile), "_alsactl_tmp", MAX_FILE_NAME_LENGTH - strlen(tmpfile) - 1); tmpfile[MAX_FILE_NAME_LENGTH - 1] = '\0'; } diff --git a/envy24control/profiles.h b/envy24control/profiles.h index 2063bff..b586291 100644 --- a/envy24control/profiles.h +++ b/envy24control/profiles.h @@ -44,7 +44,7 @@ #define MAX_PROFILE_SIZE 32768 #define MAX_SEARCH_FIELD_LENGTH 1024 #define MAX_FILE_NAME_LENGTH 1024 -#define MAX_NUM_STR_LENGTH 10 +#define MAX_NUM_STR_LENGTH 11 #define TOKEN_SEP "|" #define SEP_CHAR ' ' diff --git a/envy24control/strstr_icase_blank.c b/envy24control/strstr_icase_blank.c index 8078d2a..6b7c500 100644 --- a/envy24control/strstr_icase_blank.c +++ b/envy24control/strstr_icase_blank.c @@ -48,6 +48,7 @@ int strstr_icase_blank(const char * const string1, const char * const string2) char search_string[MAX_SEARCH_FIELD_LENGTH]; char *pstr; int pos_first_non_blank; + size_t len; strncpy(search_string, string2, MAX_SEARCH_FIELD_LENGTH); search_string[MAX_SEARCH_FIELD_LENGTH - 1] = '\0'; @@ -84,7 +85,11 @@ int strstr_icase_blank(const char * const string1, const char * const string2) } } } - strncpy(search_string, cmp_line, strlen(search_string)); + len = strlen(search_string); + if (len > sizeof(search_string) - 1) + len = sizeof(search_string) - 1; + strncpy(search_string, cmp_line, len); + search_string[len] = '\0'; position = 0; while (position < strlen(string1)) From 787857d61a434b6afd6241106ea792f408e4cb59 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Sun, 26 Jan 2025 13:05:40 +0100 Subject: [PATCH 146/166] as10k1: fix gcc warnings Signed-off-by: Jaroslav Kysela --- as10k1/as10k1.c | 14 +++++++++----- as10k1/assemble.c | 7 ++----- as10k1/macro.c | 5 +---- as10k1/parse.c | 3 ++- as10k1/parse.h | 5 ++++- 5 files changed, 18 insertions(+), 16 deletions(-) diff --git a/as10k1/as10k1.c b/as10k1/as10k1.c index e226051..079f1c2 100644 --- a/as10k1/as10k1.c +++ b/as10k1/as10k1.c @@ -244,6 +244,7 @@ void asm_open(char *name) struct stat st; char *next; int backup_line_num,backup_file_num; + size_t rsize; @@ -284,8 +285,10 @@ void asm_open(char *name) buff[i].mem_end = buff[i].mem_start+st.st_size; - read(fd, buff[i].mem_start, st.st_size); + rsize = read(fd, buff[i].mem_start, st.st_size); close(fd); + if (rsize != st.st_size) + as_exit("short read from input file\n"); #ifdef DEBUG printf("File %s opened:\n",name); @@ -383,13 +386,14 @@ void output_tram_line(struct list_head *line_head, int type) val = __cpu_to_le32(tram_sym->data.value); fwrite(&val,sizeof(u32),1,fp); if(listing){ - if(type==TYPE_TRAM_ADDR_READ) + if(type==TYPE_TRAM_ADDR_READ) { fprintf(listfile,"\tRead"); - else + } else { fprintf(listfile,"\tWrite"); + } - fprintf(listfile,": 0x3%02x/0x2%02x (%s), offset 0x%07x\n",tram_sym->data.address,tram_sym->data.address, - (prev_sym((&tram_sym->list)))->data.name,tram_sym->data.value); + fprintf(listfile,": 0x3%02x/0x2%02x (%s), offset 0x%07x\n",tram_sym->data.address,tram_sym->data.address, + (prev_sym((&tram_sym->list)))->data.name,tram_sym->data.value); } } diff --git a/as10k1/assemble.c b/as10k1/assemble.c index 4508973..ced57c7 100644 --- a/as10k1/assemble.c +++ b/as10k1/assemble.c @@ -22,6 +22,7 @@ #include"types.h" #include"proto.h" +#include"parse.h" extern int dbg_opt; extern FILE *listfile; @@ -45,7 +46,6 @@ void op(int op, int z,int w,int x,int y) int w0, w1; extern int dsp_code[DSP_CODE_SIZE]; extern int ip; - extern char op_codes[35][9]; extern char listtemp[60]; if (ip >= 0x200) as_exit("to many instructions"); @@ -306,7 +306,6 @@ void add_symbol(char *name, u16 type, u16 address, u32 value) extern int gpr_input_count,gpr_output_count,gpr_static_count,gpr_dynamic_count,gpr_control_count,gpr_constant_count; struct sym *sym; - struct tram *tmp_ptr; extern struct list_head sym_head; extern struct delay tram_delay[MAX_TANK_ADDR]; extern struct lookup tram_lookup[MAX_TANK_ADDR]; @@ -356,10 +355,8 @@ void add_symbol(char *name, u16 type, u16 address, u32 value) else tram_delay[tmp].write++; }else{ - tmp_ptr=(struct tram *)sym; list_add_tail(&(((struct tram *)sym)->tram) , &(tram_lookup[tmp].tram) ); - tmp_ptr=(struct tram *)sym; - if(type== TYPE_TRAM_ADDR_READ) + if(type== TYPE_TRAM_ADDR_READ) tram_lookup[tmp].read++; else tram_lookup[tmp].write++; diff --git a/as10k1/macro.c b/as10k1/macro.c index a01ad6f..70e4ef9 100644 --- a/as10k1/macro.c +++ b/as10k1/macro.c @@ -72,14 +72,11 @@ void new_macro(char *symbol, char *line, char *operand) void macro_expand(int macnum,char *operand ) { char *line,*next; - int done=0,i,old; + int done=0,old; extern unsigned int macro_depth; extern int macro_line_num; char string[MAX_LINE_LENGTH]; - //initialize macro use: - i=0; - if(macro_depth+1> MAX_MAC_DEPTH) as_exit("Error exceeded maximum number of recursive macro calls"); diff --git a/as10k1/parse.c b/as10k1/parse.c index 8523717..02d4f5e 100644 --- a/as10k1/parse.c +++ b/as10k1/parse.c @@ -18,6 +18,7 @@ #include #include #include"types.h" +#define DECLARE_OP_CODES #include"parse.h" #include"proto.h" @@ -87,7 +88,7 @@ int parse( char line_string[MAX_LINE_LENGTH], char *line) if((tmp=ismacro(op_name_ptr)) != -1 ){ if(defmacro==0) macro_expand(tmp,strtok(NULL,"")); - return(0); + return(0); } if( (op_num=op_decode(op_name_ptr))==-1) { diff --git a/as10k1/parse.h b/as10k1/parse.h index be71daa..b79ed8b 100644 --- a/as10k1/parse.h +++ b/as10k1/parse.h @@ -63,7 +63,9 @@ enum foo { }; - +#ifndef DECLARE_OP_CODES +extern char op_codes[NUM_OPS+1][9]; +#else char op_codes[NUM_OPS+1][9]= { "MACS", @@ -110,6 +112,7 @@ char op_codes[NUM_OPS+1][9]= "con", "NotAnOp" }; +#endif //extern int file_num,source_line_num From 6549725ec59eafb24e9f8d9ddacbf33305524fd3 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Sun, 26 Jan 2025 13:12:05 +0100 Subject: [PATCH 147/166] hdspconf: fix gcc warnings (const) Signed-off-by: Jaroslav Kysela --- hdspconf/src/HC_AboutText.h | 2 +- hdspconf/src/HC_Aeb.cxx | 2 +- hdspconf/src/HC_SpdifOut.cxx | 2 +- hdspconf/src/HC_SyncCheck.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/hdspconf/src/HC_AboutText.h b/hdspconf/src/HC_AboutText.h index 2a76c40..1b579e5 100644 --- a/hdspconf/src/HC_AboutText.h +++ b/hdspconf/src/HC_AboutText.h @@ -32,7 +32,7 @@ public: HC_AboutText(int x, int y, int w, int h); void draw(); private: - char *text; + const char *text; }; #endif diff --git a/hdspconf/src/HC_Aeb.cxx b/hdspconf/src/HC_Aeb.cxx index d7a98d6..6df4848 100644 --- a/hdspconf/src/HC_Aeb.cxx +++ b/hdspconf/src/HC_Aeb.cxx @@ -21,7 +21,7 @@ #pragma implementation #include "HC_Aeb.h" -static void setAebStatus(char *ctl_name, int val, int card_index) +static void setAebStatus(const char *ctl_name, int val, int card_index) { int err; char card_name[6]; diff --git a/hdspconf/src/HC_SpdifOut.cxx b/hdspconf/src/HC_SpdifOut.cxx index 71c7bfe..674140b 100644 --- a/hdspconf/src/HC_SpdifOut.cxx +++ b/hdspconf/src/HC_SpdifOut.cxx @@ -21,7 +21,7 @@ #pragma implementation #include "HC_SpdifOut.h" -static void setSpdifBit(char *ctl_name, int val, int card_index) +static void setSpdifBit(const char *ctl_name, int val, int card_index) { int err; char card_name[6]; diff --git a/hdspconf/src/HC_SyncCheck.h b/hdspconf/src/HC_SyncCheck.h index 6aa6d13..c79d21f 100644 --- a/hdspconf/src/HC_SyncCheck.h +++ b/hdspconf/src/HC_SyncCheck.h @@ -51,7 +51,7 @@ public: void setAdatSyncStatus(unsigned char s); void setWCStatus(unsigned char s); private: - char *adat_name; + const char *adat_name; int h_step; Fl_Box_Draw_F *draw_box; }; From 9cb754084ba073342491704078f68e62f38fda7f Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Sun, 26 Jan 2025 13:16:53 +0100 Subject: [PATCH 148/166] mixartloader: fix gcc warnings (string truncation) Signed-off-by: Jaroslav Kysela --- mixartloader/mixartloader.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mixartloader/mixartloader.c b/mixartloader/mixartloader.c index f34ed58..19a1615 100644 --- a/mixartloader/mixartloader.c +++ b/mixartloader/mixartloader.c @@ -89,7 +89,8 @@ static int get_file_name(const char *key, unsigned int idx, char *fname) for (p = buf + len; *p && isspace(*p); p++) ; if (*p == '/') { - strncpy(fname, p, MAX_PATH); + strncpy(fname, p, MAX_PATH - 1); + fname[MAX_PATH - 1] = '\0'; } else { snprintf(fname, MAX_PATH, "%s/%s", DATAPATH, p); } From 48128777e0f528d3aaf3eca65f9d16a393901c63 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Sun, 26 Jan 2025 13:19:59 +0100 Subject: [PATCH 149/166] pcxhrloader: fix gcc warnings (string truncation) Signed-off-by: Jaroslav Kysela --- pcxhrloader/pcxhrloader.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pcxhrloader/pcxhrloader.c b/pcxhrloader/pcxhrloader.c index de9420e..5cd1845 100644 --- a/pcxhrloader/pcxhrloader.c +++ b/pcxhrloader/pcxhrloader.c @@ -89,7 +89,8 @@ static int get_file_name(const char *key, unsigned int idx, char *fname) for (p = buf + len; *p && isspace(*p); p++) ; if (*p == '/') { - strncpy(fname, p, MAX_PATH); + strncpy(fname, p, MAX_PATH - 1); + fname[MAX_PATH - 1] = '\0'; } else { snprintf(fname, MAX_PATH, "%s/%s", DATAPATH, p); } From a2a0167ed9e91ad2c427fae31dc89daa4022b0cc Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Sun, 26 Jan 2025 13:21:13 +0100 Subject: [PATCH 150/166] rmedigicontrol: fix gcc warnings (string size) Signed-off-by: Jaroslav Kysela --- rmedigicontrol/rmedigicontrol.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rmedigicontrol/rmedigicontrol.c b/rmedigicontrol/rmedigicontrol.c index 973299b..1119637 100644 --- a/rmedigicontrol/rmedigicontrol.c +++ b/rmedigicontrol/rmedigicontrol.c @@ -29,7 +29,7 @@ void destroy(GtkWidget *widget,gpointer data) int main(int argc, char *argv[]) { int card; - char name[8],*err; + char name[16],*err; snd_ctl_card_info_t *hw_info; card_type_t type; From 3bd780896e7f0316fa0b36e4445888546d3396cd Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 27 Jan 2025 09:28:53 +0100 Subject: [PATCH 151/166] usx2yloader: fix gcc warnings (string size) Signed-off-by: Jaroslav Kysela --- usx2yloader/usx2yloader.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/usx2yloader/usx2yloader.c b/usx2yloader/usx2yloader.c index 61583c2..363cbdc 100644 --- a/usx2yloader/usx2yloader.c +++ b/usx2yloader/usx2yloader.c @@ -225,7 +225,8 @@ static int get_file_name(const char *key, unsigned int idx, char *fname) for (p = buf + len; *p && isspace(*p); p++) ; if (*p == '/') { - strncpy(fname, p, MAX_PATH); + strncpy(fname, p, MAX_PATH - 1); + fname[MAX_PATH - 1] = '\0'; } else { snprintf(fname, MAX_PATH, "%s/%s", DATAPATH, p); } From cd9ee08dcb504822ac24f09c823b89f8391095f2 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 27 Jan 2025 09:29:37 +0100 Subject: [PATCH 152/166] vxloader: fix gcc warnings (string size) Signed-off-by: Jaroslav Kysela --- vxloader/vxloader.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vxloader/vxloader.c b/vxloader/vxloader.c index 69d654d..cc62e1e 100644 --- a/vxloader/vxloader.c +++ b/vxloader/vxloader.c @@ -214,7 +214,8 @@ static int get_file_name(const char *key, unsigned int idx, char *fname) for (p = buf + len; *p && isspace(*p); p++) ; if (*p == '/') { - strncpy(fname, p, MAX_PATH); + strncpy(fname, p, MAX_PATH - 1); + fname[MAX_PATH - 1] = '\0'; } else { snprintf(fname, MAX_PATH, "%s/%s", DATAPATH, p); } From 2420b2a6dfe33ae90cfa7b5bb1de04c008366ff9 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 27 Jan 2025 09:34:38 +0100 Subject: [PATCH 153/166] echomixer: fix various gcc warnings Signed-off-by: Jaroslav Kysela --- echomixer/echomixer.c | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/echomixer/echomixer.c b/echomixer/echomixer.c index 80124ba..adc10e1 100644 --- a/echomixer/echomixer.c +++ b/echomixer/echomixer.c @@ -629,9 +629,7 @@ gint DrawMixer(gpointer unused) { int OutPeak[ECHO_MAXAUDIOOUTPUTS]; int VirLevel[ECHO_MAXAUDIOOUTPUTS]; int VirPeak[ECHO_MAXAUDIOOUTPUTS]; - static int InClip[ECHO_MAXAUDIOINPUTS]; - static int OutClip[ECHO_MAXAUDIOOUTPUTS]; - char str[8]; + char str[16]; int i, o, dB; GdkColor Grid={0x787878, 0, 0, 0}; GdkColor Labels={0x9694C4, 0, 0, 0}; @@ -647,13 +645,8 @@ gint DrawMixer(gpointer unused) { update_rect.height = Mixheight; GetVUmeters(InLevel, InPeak, OutLevel, OutPeak, VirLevel, VirPeak); - if (!gc) { + if (!gc) gc=gdk_gc_new(gtk_widget_get_parent_window(Mixdarea)); - for (i=0; istyle->black_gc, TRUE, 0, 0, Mixwidth, Mixheight); @@ -1693,7 +1686,7 @@ void ToggleWindow(GtkWidget *widget, gpointer window) { // Scan all controls and sets up the structures needed to access them. int OpenControls(const char *card, const char *cardname) { int err, i, o; - int numid, count, items, item; + int numid, items, item; snd_hctl_t *handle; snd_hctl_elem_t *elem; snd_ctl_elem_id_t *id; @@ -1726,7 +1719,6 @@ int OpenControls(const char *card, const char *cardname) { continue; snd_hctl_elem_get_id(elem, id); numid=snd_ctl_elem_id_get_numid(id); - count=snd_ctl_elem_info_get_count(info); if (!strcmp("Monitor Mixer Volume", snd_ctl_elem_id_get_name(id))) { if (!mixerId) { mixerId=numid; @@ -1879,7 +1871,7 @@ int main(int argc, char *argv[]) { GtkWidget *label, *menu, *menuitem; GSList *bgroup; int err, i, o, n, cardnum, value; - char hwname[8], cardname[32], load, save; + char hwname[16], cardname[32], load, save; snd_ctl_card_info_t *hw_info; load=save=1; @@ -1900,8 +1892,8 @@ int main(int argc, char *argv[]) { } if ((err=snd_ctl_card_info(ctlhandle, hw_info))>=0) { if (!strncmp(snd_ctl_card_info_get_driver(hw_info), "Echo_", 5)) { - strncpy(card, hwname, 7); - hwname[7]=0; + strncpy(card, hwname, sizeof(hwname)-1); + card[sizeof(hwname)-1]=0; strncpy(cardname, snd_ctl_card_info_get_name(hw_info), 31); cardname[31]=0; strncpy(cardId, snd_ctl_card_info_get_name(hw_info), 15); From 90c2aa263906492bd511d929feeb14ddf162d02d Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 27 Jan 2025 09:42:39 +0100 Subject: [PATCH 154/166] ld10k1: fix various gcc warnings Signed-off-by: Jaroslav Kysela --- ld10k1/src/dl10k1.c | 2 +- ld10k1/src/ld10k1.c | 8 ++++---- ld10k1/src/ld10k1_driver.c | 4 ++-- ld10k1/src/ld10k1_fnc.c | 2 +- ld10k1/src/ld10k1_fnc1.c | 3 --- ld10k1/src/lo10k1.c | 14 +++++++------- 6 files changed, 15 insertions(+), 18 deletions(-) diff --git a/ld10k1/src/dl10k1.c b/ld10k1/src/dl10k1.c index 42d54a1..b2f3a54 100644 --- a/ld10k1/src/dl10k1.c +++ b/ld10k1/src/dl10k1.c @@ -354,7 +354,7 @@ int dump_load(int audigy, char *file_name) fctrl = (ld10k1_ctl_dump_t *)ptr; memset(ctrl, 0, sizeof(emu10k1_fx8010_control_gpr_t) * header->ctl_count); for (i = 0; i < header->ctl_count; i++) { - strcpy(ctrl[i].id.name, fctrl[i].name); + strcpy((char *)ctrl[i].id.name, fctrl[i].name); ctrl[i].id.iface = EMU10K1_CTL_ELEM_IFACE_MIXER; ctrl[i].id.index = fctrl[i].index; ctrl[i].vcount = fctrl[i].vcount; diff --git a/ld10k1/src/ld10k1.c b/ld10k1/src/ld10k1.c index b0b5a9b..97be2c0 100644 --- a/ld10k1/src/ld10k1.c +++ b/ld10k1/src/ld10k1.c @@ -77,7 +77,7 @@ void error(const char *fmt, ...) va_end(va); } -static void log(const char *fmt, ...) +static void alog(const char *fmt, ...) { va_list va; @@ -116,7 +116,7 @@ static void cleanup() { if (pidpath[0]) unlink(pidpath); - log("Exiting daemon"); + alog("Exiting daemon"); } static void term_handler(int i) @@ -247,7 +247,7 @@ int main(int argc, char *argv[]) pidfile = fopen(pidpath, "wt"); if (!pidfile) { - log("%s: pidfile (%s)\n", strerror(errno), pidpath); + alog("%s: pidfile (%s)\n", strerror(errno), pidpath); return 1; } @@ -263,7 +263,7 @@ int main(int argc, char *argv[]) dup2(fileno(logfile), fileno(stdout)); } - log("Starting daemon"); + alog("Starting daemon"); } params.type = uses_pipe ? COMM_TYPE_LOCAL : COMM_TYPE_IP; diff --git a/ld10k1/src/ld10k1_driver.c b/ld10k1/src/ld10k1_driver.c index 38ee873..05b1415 100644 --- a/ld10k1/src/ld10k1_driver.c +++ b/ld10k1/src/ld10k1_driver.c @@ -199,7 +199,7 @@ int ld10k1_update_driver(ld10k1_dsp_mgr_t *dsp_mgr) if (!add_ctrl) return LD10K1_ERR_NO_MEM; for (i = 0, item = dsp_mgr->add_ctl_list; item != NULL; item = item->next, i++) { - strcpy(add_ctrl[i].id.name, item->ctl.name); + strcpy((char *)add_ctrl[i].id.name, item->ctl.name); add_ctrl[i].id.iface = EMU10K1_CTL_ELEM_IFACE_MIXER; add_ctrl[i].id.index = item->ctl.index; add_ctrl[i].vcount = item->ctl.vcount; @@ -225,7 +225,7 @@ int ld10k1_update_driver(ld10k1_dsp_mgr_t *dsp_mgr) if (!del_ids) return LD10K1_ERR_NO_MEM; for (i = 0, item = dsp_mgr->del_ctl_list; item != NULL; item = item->next, i++) { - strcpy(del_ids[i].name, item->ctl.name); + strcpy((char *)del_ids[i].name, item->ctl.name); del_ids[i].iface = EMU10K1_CTL_ELEM_IFACE_MIXER; del_ids[i].index = item->ctl.index; } diff --git a/ld10k1/src/ld10k1_fnc.c b/ld10k1/src/ld10k1_fnc.c index c88f4c0..7e99d55 100644 --- a/ld10k1/src/ld10k1_fnc.c +++ b/ld10k1/src/ld10k1_fnc.c @@ -2152,7 +2152,7 @@ int ld10k1_conn_point_add(ld10k1_dsp_mgr_t *dsp_mgr, ld10k1_conn_point_t *point, int allocgprcount = 0; int allocinstrcount = 0; unsigned int reserved[2]; - unsigned int res[2]; + int res[2]; int reservedcount = 0; int usedreserved = 0; diff --git a/ld10k1/src/ld10k1_fnc1.c b/ld10k1/src/ld10k1_fnc1.c index ddc43c6..c3ea754 100644 --- a/ld10k1/src/ld10k1_fnc1.c +++ b/ld10k1/src/ld10k1_fnc1.c @@ -792,12 +792,9 @@ int ld10k1_fnc_name_find(int data_conn, int op, int size) int ld10k1_fnc_name_rename(int data_conn, int op, int size) { ld10k1_fnc_name_t name_info; - int ret; int err; ld10k1_patch_t *patch; - ret = -1; - if ((err = receive_msg_data(data_conn, &name_info, sizeof(ld10k1_fnc_name_t))) < 0) return err; diff --git a/ld10k1/src/lo10k1.c b/ld10k1/src/lo10k1.c index 93a9369..c1223cb 100644 --- a/ld10k1/src/lo10k1.c +++ b/ld10k1/src/lo10k1.c @@ -473,8 +473,9 @@ static int transfer_patch(int udin, char *ctrl_opt, liblo10k1_emu_patch_t *ep, l if (*ctrl_opt != ',') { error("wrong ctrl option format - wrong separator beetwen subfunctions"); return 1; - } else - *ctrl_opt++; + } else { + ctrl_opt++; + } } } @@ -691,8 +692,9 @@ static int transfer_native_patch(liblo10k1_dsp_patch_t *p, char *ctrl_opt) if (*ctrl_opt != ',') { error("wrong ctrl option format - wrong separator beetwen subfunctions"); return 1; - } else - *ctrl_opt++; + } else { + ctrl_opt++; + } } } @@ -1466,7 +1468,6 @@ int main(int argc, char *argv[]) int opt_list; int opt_setup; - int opt_info; int opt_add; int opt_del; int opt_con_add; @@ -1526,7 +1527,6 @@ int main(int argc, char *argv[]) opt_add = 0; opt_del = 0; opt_list_patch = NULL; - opt_info = 0; opt_con_add = 0; opt_con_del = 0; opt_debug = 0; @@ -1618,7 +1618,7 @@ int main(int argc, char *argv[]) opt_list_patch = optarg; break; case 'i': - opt_info = 1; + /* nothing */ break; case 'q': opt_con_add = 1; From 5eaadd15bda4cf0424ee2470a6d304a0c2ce10cb Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 27 Jan 2025 11:02:21 +0100 Subject: [PATCH 155/166] hdajackretask: fix reset_changes_boot() declaration Signed-off-by: Jaroslav Kysela --- hdajackretask/apply-changes.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hdajackretask/apply-changes.h b/hdajackretask/apply-changes.h index e08d66d..e431a0d 100644 --- a/hdajackretask/apply-changes.h +++ b/hdajackretask/apply-changes.h @@ -9,7 +9,7 @@ gboolean apply_changes_reconfig(pin_configs_t* pins, int entries, int card, int gboolean apply_changes_boot(pin_configs_t* pins, int entries, int card, int device, const char* model, const char* hints, GError** err); -gboolean reset_changes_boot(); +gboolean reset_changes_boot(GError ** err); #endif From 6d2d5004567a986e6b59dc0cd62e66c886d02d52 Mon Sep 17 00:00:00 2001 From: Andreas Persson Date: Sun, 23 Mar 2025 10:00:10 +0100 Subject: [PATCH 156/166] envy24control: fix spdif output settings The S/PDIF Output Settings in envy24control had some bugs: wrong bits were set when user changed "Stream" under "Professional" or any of the settings under "Consumer". Closes: https://github.com/alsa-project/alsa-tools/pull/28 Signed-off-by: Andreas Persson Signed-off-by: Jaroslav Kysela --- envy24control/hardware.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/envy24control/hardware.c b/envy24control/hardware.c index 7e0094e..b15df56 100644 --- a/envy24control/hardware.c +++ b/envy24control/hardware.c @@ -455,9 +455,9 @@ void profi_stream_toggled(GtkWidget *togglebutton, gpointer data) return; iec958.status[1] &= ~IEC958_AES1_PRO_MODE; if (!strcmp(str, "NOTID")) { - iec958.status[0] |= IEC958_AES1_PRO_MODE_STEREOPHONIC; + iec958.status[1] |= IEC958_AES1_PRO_MODE_NOTID; } else if (!strcmp(str, "Stereo")) { - iec958.status[0] |= IEC958_AES1_PRO_MODE_NOTID; + iec958.status[1] |= IEC958_AES1_PRO_MODE_STEREOPHONIC; } snd_ctl_elem_value_set_iec958(spdif_output, &iec958); spdif_output_write(); @@ -500,7 +500,7 @@ void consumer_copyright_toggled(GtkWidget *togglebutton, gpointer data) if (!strcmp(str, "Copyright")) { iec958.status[0] &= ~IEC958_AES0_CON_NOT_COPYRIGHT; } else if (!strcmp(str, "Permitted")) { - iec958.status[1] |= IEC958_AES0_CON_NOT_COPYRIGHT; + iec958.status[0] |= IEC958_AES0_CON_NOT_COPYRIGHT; } snd_ctl_elem_value_set_iec958(spdif_output, &iec958); spdif_output_write(); @@ -517,9 +517,9 @@ void consumer_copy_toggled(GtkWidget *togglebutton, gpointer data) if (iec958.status[0] & IEC958_AES0_PROFESSIONAL) return; if (!strcmp(str, "1st")) { - iec958.status[0] |= IEC958_AES1_CON_ORIGINAL; - } else if (!strcmp(str, "Original")) { iec958.status[1] &= ~IEC958_AES1_CON_ORIGINAL; + } else if (!strcmp(str, "Original")) { + iec958.status[1] |= IEC958_AES1_CON_ORIGINAL; } snd_ctl_elem_value_set_iec958(spdif_output, &iec958); spdif_output_write(); @@ -539,7 +539,7 @@ void consumer_emphasis_toggled(GtkWidget *togglebutton, gpointer data) if (!strcmp(str, "No")) { iec958.status[0] |= IEC958_AES0_CON_EMPHASIS_NONE; } else if (!strcmp(str, "5015")) { - iec958.status[1] |= ~IEC958_AES0_CON_EMPHASIS_5015; + iec958.status[0] |= IEC958_AES0_CON_EMPHASIS_5015; } snd_ctl_elem_value_set_iec958(spdif_output, &iec958); spdif_output_write(); @@ -555,15 +555,15 @@ void consumer_category_toggled(GtkWidget *togglebutton, gpointer data) return; if (iec958.status[0] & IEC958_AES0_PROFESSIONAL) return; - iec958.status[0] &= ~IEC958_AES1_CON_CATEGORY; + iec958.status[1] &= ~IEC958_AES1_CON_CATEGORY; if (!strcmp(str, "DAT")) { - iec958.status[0] |= IEC958_AES1_CON_DAT; + iec958.status[1] |= IEC958_AES1_CON_DAT; } else if (!strcmp(str, "PCM")) { - iec958.status[0] |= IEC958_AES1_CON_PCM_CODER; + iec958.status[1] |= IEC958_AES1_CON_PCM_CODER; } else if (!strcmp(str, "CD")) { - iec958.status[0] |= IEC958_AES1_CON_IEC908_CD; + iec958.status[1] |= IEC958_AES1_CON_IEC908_CD; } else if (!strcmp(str, "General")) { - iec958.status[0] |= IEC958_AES1_CON_GENERAL; + iec958.status[1] |= IEC958_AES1_CON_GENERAL; } snd_ctl_elem_value_set_iec958(spdif_output, &iec958); spdif_output_write(); From 4522439faf51fb749d39c7b0cb2c3f10f79c1c65 Mon Sep 17 00:00:00 2001 From: Andreas Persson Date: Sun, 23 Mar 2025 13:56:29 +0100 Subject: [PATCH 157/166] envy24control: simplify code by using gtk_widget_show_all Remove all gtk_widget_show calls and replace it with just one gtk_widget_show_all. This makes the code shorter and it will also help a future port to GTK 4, where gtk_widget_show is gone. Closes: https://github.com/alsa-project/alsa-tools/pull/29 Signed-off-by: Andreas Persson Signed-off-by: Jaroslav Kysela --- envy24control/envy24control.c | 241 +++------------------------------- 1 file changed, 17 insertions(+), 224 deletions(-) diff --git a/envy24control/envy24control.c b/envy24control/envy24control.c index bce41eb..a7e40f0 100644 --- a/envy24control/envy24control.c +++ b/envy24control/envy24control.c @@ -171,24 +171,20 @@ static void create_mixer_frame(GtkWidget *box, int stream) } frame = gtk_frame_new(str); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 2); vbox = gtk_vbox_new(FALSE, 6); - gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 2); hbox = gtk_hbox_new(FALSE, 2); - gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); adj = gtk_adjustment_new(96, 0, 96, 1, 16, 0); mixer_adj[stream-1][0] = adj; vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj)); mixer_vscale[stream-1][0] = vscale; - gtk_widget_show(vscale); gtk_box_pack_start(GTK_BOX(hbox), vscale, TRUE, FALSE, 0); gtk_scale_set_value_pos(GTK_SCALE(vscale), GTK_POS_BOTTOM); gtk_scale_set_digits(GTK_SCALE(vscale), 0); @@ -197,14 +193,12 @@ static void create_mixer_frame(GtkWidget *box, int stream) (gpointer)(long)((stream << 16) + 0)); vbox1 = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox1); gtk_box_pack_start(GTK_BOX(hbox), vbox1, FALSE, FALSE, 0); drawing = gtk_drawing_area_new(); mixer_drawing[stream-1] = drawing; sprintf(drawname, "Mixer%i", stream); gtk_widget_set_name(drawing, drawname); - gtk_widget_show(drawing); gtk_signal_connect(GTK_OBJECT(drawing), "expose_event", GTK_SIGNAL_FUNC(level_meters_expose_event), NULL); gtk_signal_connect(GTK_OBJECT(drawing), "configure_event", @@ -214,14 +208,12 @@ static void create_mixer_frame(GtkWidget *box, int stream) gtk_box_pack_start(GTK_BOX(vbox1), drawing, FALSE, FALSE, 1); label = gtk_label_new(""); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox1), label, TRUE, TRUE, 2); adj = gtk_adjustment_new(96, 0, 96, 1, 16, 0); mixer_adj[stream-1][1] = adj; vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj)); mixer_vscale[stream-1][1] = vscale; - gtk_widget_show(vscale); gtk_box_pack_start(GTK_BOX(hbox), vscale, TRUE, FALSE, 0); gtk_scale_set_value_pos(GTK_SCALE(vscale), GTK_POS_BOTTOM); gtk_scale_set_digits(GTK_SCALE(vscale), 0); @@ -230,34 +222,28 @@ static void create_mixer_frame(GtkWidget *box, int stream) (gpointer)(long)((stream << 16) + 1)); hbox = gtk_hbox_new(TRUE, 0); - gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, FALSE, 0); label = gtk_label_new("Left"); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0); label = gtk_label_new("Right"); gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0); toggle = gtk_toggle_button_new_with_label("L/R Gang"); mixer_stereo_toggle[stream-1] = toggle; - gtk_widget_show(toggle); gtk_box_pack_end(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); /* gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), TRUE); */ gtk_signal_connect(GTK_OBJECT(toggle), "toggled", GTK_SIGNAL_FUNC(config_set_stereo), GINT_TO_POINTER(stream-1)); hbox = gtk_hbox_new(TRUE, 6); - gtk_widget_show(hbox); gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); toggle = gtk_toggle_button_new_with_label("Mute"); mixer_mute_toggle[stream-1][0] = toggle; - gtk_widget_show(toggle); gtk_box_pack_start(GTK_BOX(hbox), toggle, FALSE, TRUE, 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), TRUE); gtk_signal_connect(GTK_OBJECT(toggle), "toggled", @@ -266,7 +252,6 @@ static void create_mixer_frame(GtkWidget *box, int stream) toggle = gtk_toggle_button_new_with_label("Mute"); mixer_mute_toggle[stream-1][1] = toggle; - gtk_widget_show(toggle); gtk_box_pack_start(GTK_BOX(hbox), toggle, FALSE, TRUE, 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), TRUE); gtk_signal_connect(GTK_OBJECT(toggle), "toggled", @@ -287,32 +272,26 @@ static void create_inputs_mixer(GtkWidget *main, GtkWidget *notebook, int page) hbox = gtk_hbox_new(FALSE, 3); - gtk_widget_show(hbox); gtk_container_add(GTK_CONTAINER(notebook), hbox); label = gtk_label_new("Monitor Inputs"); - gtk_widget_show(label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook),page), label); /* build scrolling area */ scrolledwindow = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_show(scrolledwindow); gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); viewport = gtk_viewport_new(NULL, NULL); - gtk_widget_show(viewport); gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(viewport), vbox); hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); for(stream = (MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + 1); \ @@ -338,32 +317,26 @@ static void create_pcms_mixer(GtkWidget *main, GtkWidget *notebook, int page) int stream; hbox = gtk_hbox_new(FALSE, 3); - gtk_widget_show(hbox); gtk_container_add(GTK_CONTAINER(notebook), hbox); label = gtk_label_new("Monitor PCMs"); - gtk_widget_show(label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook),page), label); /* build scrolling area */ scrolledwindow = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_show(scrolledwindow); gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); viewport = gtk_viewport_new(NULL, NULL); - gtk_widget_show(viewport); gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(viewport), vbox); hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); for(stream = 1; stream <= pcm_output_channels; stream ++) { @@ -437,20 +410,17 @@ static void create_router_frame(GtkWidget *box, int stream, int pos) } frame = gtk_frame_new(str); - gtk_widget_show(frame); gtk_box_pack_start (GTK_BOX(box), frame, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); vbox = gtk_vbox_new(TRUE, 0); - gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, str1); router_radio[stream-1][0] = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)patchbay_toggled, @@ -458,11 +428,9 @@ static void create_router_frame(GtkWidget *box, int stream, int pos) hseparator = gtk_hseparator_new(); - gtk_widget_show(hseparator); gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, TRUE, 0); label = gtk_label_new(""); - gtk_widget_show(label); /* the digital mixer can only be routed to HW1/2 or SPDIF1/2 */ if( (stream <= 2) /* hw1/2 */ || @@ -471,7 +439,6 @@ static void create_router_frame(GtkWidget *box, int stream, int pos) radiobutton = gtk_radio_button_new_with_label(group, stream & 1 ? "Digital Mix L" : "Digital Mix R"); router_radio[stream-1][1] = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", @@ -480,13 +447,11 @@ static void create_router_frame(GtkWidget *box, int stream, int pos) } else { label = gtk_label_new(""); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); } hseparator = gtk_hseparator_new(); - gtk_widget_show(hseparator); gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, TRUE, 0); @@ -494,7 +459,6 @@ static void create_router_frame(GtkWidget *box, int stream, int pos) radiobutton = gtk_radio_button_new_with_label(group, table[idx]); router_radio[stream-1][2+idx] = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", @@ -512,23 +476,19 @@ static void create_router(GtkWidget *main, GtkWidget *notebook, int page) int stream, pos; scrolledwindow = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_show(scrolledwindow); gtk_container_add(GTK_CONTAINER(notebook), scrolledwindow); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); label = gtk_label_new("Patchbay / Router"); - gtk_widget_show(label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), label); viewport = gtk_viewport_new(NULL, NULL); - gtk_widget_show(viewport); gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport); hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); gtk_container_add(GTK_CONTAINER(viewport), hbox); pos = 0; @@ -551,12 +511,10 @@ static void create_master_clock(GtkWidget *box) GSList *group = NULL; frame = gtk_frame_new("Master Clock"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 4); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); @@ -564,7 +522,6 @@ static void create_master_clock(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Int 22050"); hw_master_clock_xtal_22050 = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)internal_clock_toggled, @@ -574,7 +531,6 @@ static void create_master_clock(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Int 32000"); hw_master_clock_xtal_32000 = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)internal_clock_toggled, @@ -584,7 +540,6 @@ static void create_master_clock(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Int 44100"); hw_master_clock_xtal_44100 = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)internal_clock_toggled, @@ -594,7 +549,6 @@ static void create_master_clock(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Int 48000"); hw_master_clock_xtal_48000 = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)internal_clock_toggled, @@ -604,7 +558,6 @@ static void create_master_clock(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Int 88200"); hw_master_clock_xtal_88200 = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)internal_clock_toggled, @@ -614,7 +567,6 @@ static void create_master_clock(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Int 96000"); hw_master_clock_xtal_96000 = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)internal_clock_toggled, @@ -625,7 +577,6 @@ static void create_master_clock(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "S/PDIF In"); hw_master_clock_spdif_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)internal_clock_toggled, @@ -640,7 +591,6 @@ static void create_master_clock(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Word Clock"); hw_master_clock_word_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)internal_clock_toggled, @@ -648,7 +598,6 @@ static void create_master_clock(GtkWidget *box) label = gtk_label_new("Locked"); hw_master_clock_status_label = label; - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0); } @@ -659,17 +608,14 @@ static void create_rate_state(GtkWidget *box) GtkWidget *check; frame = gtk_frame_new("Rate State"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0); hbox = gtk_hbox_new(TRUE, 0); - gtk_widget_show(hbox); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_container_set_border_width(GTK_CONTAINER(hbox), 6); check = gtk_check_button_new_with_label("Locked"); hw_rate_locking_check = check; - gtk_widget_show(check); gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(check), "toggled", (GtkSignalFunc)rate_locking_toggled, @@ -678,7 +624,6 @@ static void create_rate_state(GtkWidget *box) check = gtk_check_button_new_with_label("Reset"); hw_rate_reset_check = check; - gtk_widget_show(check); gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(check), "toggled", (GtkSignalFunc)rate_reset_toggled, @@ -692,12 +637,10 @@ static void create_actual_rate(GtkWidget *box) GtkWidget *label; frame = gtk_frame_new("Actual Rate"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0); label = gtk_label_new(""); hw_master_clock_actual_rate_label = label; - gtk_widget_show(label); gtk_container_add(GTK_CONTAINER(frame), label); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); gtk_misc_set_padding(GTK_MISC(label), 6, 6); @@ -712,23 +655,19 @@ static void create_volume_change(GtkWidget *box) GtkWidget *label; frame = gtk_frame_new("Volume Change"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0); hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_container_set_border_width(GTK_CONTAINER(hbox), 6); label = gtk_label_new("Rate"); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); spinbutton_adj = gtk_adjustment_new(16, 0, 255, 1, 10, 10); hw_volume_change_adj = spinbutton_adj; spinbutton = gtk_spin_button_new(GTK_ADJUSTMENT(spinbutton_adj), 1, 0); - gtk_widget_show(spinbutton); gtk_box_pack_start(GTK_BOX(hbox), spinbutton, TRUE, FALSE, 0); gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spinbutton), TRUE); gtk_signal_connect(GTK_OBJECT(spinbutton_adj), "value_changed", @@ -744,12 +683,10 @@ static void create_spdif_output_settings_profi_data(GtkWidget *box) GSList *group = NULL; frame = gtk_frame_new("Data Mode"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); @@ -757,7 +694,6 @@ static void create_spdif_output_settings_profi_data(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Non-audio"); hw_spdif_profi_nonaudio_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)profi_data_toggled, @@ -766,7 +702,6 @@ static void create_spdif_output_settings_profi_data(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Audio"); hw_spdif_profi_audio_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)profi_data_toggled, @@ -781,19 +716,16 @@ static void create_spdif_output_settings_profi_stream(GtkWidget *box) GSList *group = NULL; frame = gtk_frame_new("Stream"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "Stereophonic"); hw_profi_stream_stereo_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)profi_stream_toggled, @@ -802,7 +734,6 @@ static void create_spdif_output_settings_profi_stream(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Not indicated"); hw_profi_stream_notid_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)profi_stream_toggled, @@ -817,12 +748,10 @@ static void create_spdif_output_settings_profi_emphasis(GtkWidget *box) GSList *group = NULL; frame = gtk_frame_new("Emphasis"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); @@ -830,7 +759,6 @@ static void create_spdif_output_settings_profi_emphasis(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "No emphasis"); hw_profi_emphasis_none_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)profi_emphasis_toggled, @@ -839,7 +767,6 @@ static void create_spdif_output_settings_profi_emphasis(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "50/15us"); hw_profi_emphasis_5015_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)profi_emphasis_toggled, @@ -848,7 +775,6 @@ static void create_spdif_output_settings_profi_emphasis(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "CCITT J.17"); hw_profi_emphasis_ccitt_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)profi_emphasis_toggled, @@ -857,7 +783,6 @@ static void create_spdif_output_settings_profi_emphasis(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Not indicated"); hw_profi_emphasis_notid_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)profi_emphasis_toggled, @@ -871,17 +796,14 @@ static void create_spdif_output_settings_profi(GtkWidget *notebook, int page) GtkWidget *label; hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); gtk_container_add(GTK_CONTAINER(notebook), hbox); label = gtk_label_new("Professional"); - gtk_widget_show(label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), label); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); @@ -889,7 +811,6 @@ static void create_spdif_output_settings_profi(GtkWidget *notebook, int page) create_spdif_output_settings_profi_stream(vbox); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); @@ -904,11 +825,9 @@ static void create_spdif_output_settings_consumer_copyright(GtkWidget *box) GSList *group = NULL; frame = gtk_frame_new("Copyright"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); @@ -916,7 +835,6 @@ static void create_spdif_output_settings_consumer_copyright(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Copyrighted"); hw_consumer_copyright_on_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)consumer_copyright_toggled, @@ -925,7 +843,6 @@ static void create_spdif_output_settings_consumer_copyright(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Copy permitted"); hw_consumer_copyright_off_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)consumer_copyright_toggled, @@ -940,11 +857,9 @@ static void create_spdif_output_settings_consumer_copy(GtkWidget *box) GSList *group = NULL; frame = gtk_frame_new("Copy"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); @@ -952,7 +867,6 @@ static void create_spdif_output_settings_consumer_copy(GtkWidget *box) "1-st generation"); hw_consumer_copy_1st_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)consumer_copy_toggled, @@ -961,7 +875,6 @@ static void create_spdif_output_settings_consumer_copy(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Original"); hw_consumer_copy_original_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)consumer_copy_toggled, @@ -976,18 +889,15 @@ static void create_spdif_output_settings_consumer_emphasis(GtkWidget *box) GSList *group = NULL; frame = gtk_frame_new("Emphasis"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "No emphasis"); hw_consumer_emphasis_none_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)consumer_emphasis_toggled, @@ -996,7 +906,6 @@ static void create_spdif_output_settings_consumer_emphasis(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "50/15us"); hw_consumer_emphasis_5015_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)consumer_emphasis_toggled, @@ -1011,18 +920,15 @@ static void create_spdif_output_settings_consumer_category(GtkWidget *box) GSList *group = NULL; frame = gtk_frame_new("Category"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "DAT"); hw_consumer_category_dat_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)consumer_category_toggled, @@ -1031,7 +937,6 @@ static void create_spdif_output_settings_consumer_category(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "PCM encoder"); hw_consumer_category_pcm_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)consumer_category_toggled, @@ -1040,7 +945,6 @@ static void create_spdif_output_settings_consumer_category(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "CD (ICE-908)"); hw_consumer_category_cd_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)consumer_category_toggled, @@ -1049,7 +953,6 @@ static void create_spdif_output_settings_consumer_category(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "General"); hw_consumer_category_general_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)consumer_category_toggled, @@ -1063,18 +966,15 @@ static void create_spdif_output_settings_consumer(GtkWidget *notebook, int page) GtkWidget *label; hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); gtk_container_add(GTK_CONTAINER(notebook), hbox); gtk_container_set_border_width(GTK_CONTAINER(hbox), 6); label = gtk_label_new("Consumer"); - gtk_widget_show(label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), label); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); @@ -1082,14 +982,12 @@ static void create_spdif_output_settings_consumer(GtkWidget *notebook, int page) create_spdif_output_settings_consumer_copy(vbox); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); create_spdif_output_settings_consumer_emphasis(vbox); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); @@ -1106,24 +1004,20 @@ static void create_spdif_output_settings(GtkWidget *box) GSList *group = NULL; frame = gtk_frame_new("S/PDIF Output Settings"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); radiobutton = gtk_radio_button_new_with_label(NULL, "Professional"); hw_spdif_professional_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(hbox), radiobutton, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(radiobutton), 6); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", @@ -1133,7 +1027,6 @@ static void create_spdif_output_settings(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Consumer"); hw_spdif_consumer_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(hbox), radiobutton, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(radiobutton), 6); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", @@ -1143,7 +1036,6 @@ static void create_spdif_output_settings(GtkWidget *box) notebook = gtk_notebook_new(); hw_spdif_output_notebook = notebook; - gtk_widget_show(notebook); gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0); @@ -1157,25 +1049,18 @@ static void create_spdif_input_select(GtkWidget *box) GtkWidget *vbox; GtkWidget *radiobutton; GSList *group = NULL; - int hide = 1; - - if((card_eeprom.subvendor == ICE1712_SUBDEVICE_DELTADIO2496) || (card_is_dmx6fire)) - hide = 0; frame = gtk_frame_new("Digital Input"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "Coaxial"); hw_spdif_input_coaxial_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)spdif_input_toggled, @@ -1184,24 +1069,20 @@ static void create_spdif_input_select(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Optical"); hw_spdif_input_optical_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)spdif_input_toggled, (gpointer)"Optical"); - radiobutton = gtk_radio_button_new_with_label(group, "Internal CD"); - hw_spdif_switch_off_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - if(card_is_dmx6fire) - gtk_widget_show(radiobutton); - gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)spdif_input_toggled, - (gpointer)"Off"); - - if(hide) - gtk_widget_hide_all(frame); + if (card_is_dmx6fire) { + radiobutton = gtk_radio_button_new_with_label(group, "Internal CD"); + hw_spdif_switch_off_radio = radiobutton; + group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", + (GtkSignalFunc)spdif_input_toggled, + (gpointer)"Off"); + } } @@ -1211,25 +1092,18 @@ static void create_phono_input(GtkWidget *box) GtkWidget *vbox; GtkWidget *radiobutton; GSList *group = NULL; - int hide = 1; - - if(card_is_dmx6fire) - hide = 0; frame = gtk_frame_new("Phono Input Switch"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 7); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "Phono"); hw_phono_input_on_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)phono_input_toggled, @@ -1238,14 +1112,10 @@ static void create_phono_input(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Mic"); hw_phono_input_off_radio = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)phono_input_toggled, (gpointer)"Mic"); - - if(hide) - gtk_widget_hide_all(frame); } static void create_input_interface(GtkWidget *box) @@ -1254,25 +1124,18 @@ static void create_input_interface(GtkWidget *box) GtkWidget *vbox; GtkWidget *radiobutton; GSList *group = NULL; - int hide = 1; - - if (card_is_dmx6fire) - hide = 0; frame = gtk_frame_new("Line In Selector"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 4); //gtk_container_set_border_width(GTK_CONTAINER(frame), 6); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "Internal"); input_interface_internal = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)analog_input_select_toggled, @@ -1281,7 +1144,6 @@ static void create_input_interface(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Front Input"); input_interface_front_input = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)analog_input_select_toggled, @@ -1290,7 +1152,6 @@ static void create_input_interface(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Rear Input"); input_interface_rear_input = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)analog_input_select_toggled, @@ -1299,14 +1160,10 @@ static void create_input_interface(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Wavetable"); input_interface_wavetable = radiobutton; group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)analog_input_select_toggled, (gpointer)"Wave Table"); - - if(hide) - gtk_widget_hide_all(frame); } static void create_hardware(GtkWidget *main, GtkWidget *notebook, int page) @@ -1322,60 +1179,54 @@ static void create_hardware(GtkWidget *main, GtkWidget *notebook, int page) GtkWidget *hseparator; hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); gtk_container_add(GTK_CONTAINER(notebook), hbox); label = gtk_label_new("Hardware Settings"); - gtk_widget_show(label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), label); /* Build scrolling area */ scrolledwindow = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_show(scrolledwindow); gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); viewport = gtk_viewport_new(NULL, NULL); - gtk_widget_show(viewport); gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport); /* Outer box */ hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); gtk_container_add(GTK_CONTAINER(viewport), hbox); /* Create boxes for controls */ vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 6); hbox1 = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox1); gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 0); hseparator = gtk_hseparator_new(); - gtk_widget_show(hseparator); gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, FALSE, 2); hbox2 = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox2); gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 0); create_master_clock(hbox1); vbox1 = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox1); gtk_box_pack_start(GTK_BOX(hbox1), vbox1, FALSE, FALSE, 20); create_rate_state(vbox1); create_actual_rate(vbox1); create_volume_change(vbox1); - create_input_interface(hbox2); - create_phono_input(hbox2); - create_spdif_input_select(hbox2); + if (card_is_dmx6fire) { + create_input_interface(hbox2); + create_phono_input(hbox2); + } + if ((card_eeprom.subvendor == ICE1712_SUBDEVICE_DELTADIO2496) || (card_is_dmx6fire)) { + create_spdif_input_select(hbox2); + } create_spdif_output_settings(hbox); } @@ -1388,56 +1239,46 @@ static void create_about(GtkWidget *main, GtkWidget *notebook, int page) GtkWidget *viewport; hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); gtk_container_add(GTK_CONTAINER(notebook), hbox); label = gtk_label_new("About"); - gtk_widget_show(label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), label); /* build scrolling area */ scrolledwindow = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_show(scrolledwindow); gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); viewport = gtk_viewport_new(NULL, NULL); - gtk_widget_show(viewport); gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(viewport), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); /* Create text as labels */ label = gtk_label_new(""); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 6); /* create first line */ label = gtk_label_new("Envy24 Control Utility " VERSION); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6); /* create second line */ label = gtk_label_new("A GTK Tool for Envy24 PCI Audio Chip"); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6); /* create third line */ label = gtk_label_new("Copyright(c) 2000 by Jaroslav Kysela "); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6); label = gtk_label_new(""); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 6); } @@ -1473,11 +1314,9 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) scrolledwindow = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_show(scrolledwindow); gtk_container_add(GTK_CONTAINER(notebook), scrolledwindow); label = gtk_label_new("Analog Volume"); - gtk_widget_show(label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), label); @@ -1485,11 +1324,9 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); viewport = gtk_viewport_new(NULL, NULL); - gtk_widget_show(viewport); gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport); hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); gtk_container_add(GTK_CONTAINER(viewport), hbox); /* create DAC */ @@ -1497,20 +1334,17 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) char name[32]; sprintf(name, "DAC %d", i); frame = gtk_frame_new(name); - gtk_widget_show(frame); //gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); /* Add friendly labels for DMX 6Fires */ if(card_is_dmx6fire && (i < 6)){ label = gtk_label_new(dmx6fire_outputs[i]); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6); } @@ -1518,7 +1352,6 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) av_dac_volume_adj[i] = adj; vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj)); gtk_scale_set_draw_value(GTK_SCALE(vscale), FALSE); - gtk_widget_show(vscale); gtk_box_pack_start(GTK_BOX(vbox), vscale, TRUE, TRUE, 6); gtk_scale_set_digits(GTK_SCALE(vscale), 0); gtk_signal_connect(GTK_OBJECT(adj), "value_changed", @@ -1527,7 +1360,6 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) label = gtk_label_new("000"); av_dac_volume_label[i] =(GtkLabel *)label; - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6); @@ -1538,7 +1370,6 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) radiobutton = gtk_radio_button_new_with_label(group, envy_dac_sense_enum_name(j)); av_dac_sense_radio[i][j] = radiobutton; - gtk_widget_show(radiobutton); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)dac_sense_toggled, (gpointer)(long)((i << 8) + j)); @@ -1553,20 +1384,17 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) char name[32]; sprintf(name, "ADC %d", i); frame = gtk_frame_new(name); - gtk_widget_show(frame); //gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); /* Add friendly labels for DMX 6Fires */ if(card_is_dmx6fire && (i < 6)){ label = gtk_label_new(dmx6fire_inputs[i]); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6); } @@ -1574,7 +1402,6 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) av_adc_volume_adj[i] = adj; vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj)); gtk_scale_set_draw_value(GTK_SCALE(vscale), FALSE); - gtk_widget_show(vscale); gtk_box_pack_start(GTK_BOX(vbox), vscale, TRUE, TRUE, 6); gtk_scale_set_value_pos(GTK_SCALE(vscale), GTK_POS_BOTTOM); gtk_scale_set_digits(GTK_SCALE(vscale), 0); @@ -1584,7 +1411,6 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) label = gtk_label_new("000"); av_adc_volume_label[i] =(GtkLabel *)label; - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6); if (i >= envy_adc_senses()) @@ -1594,7 +1420,6 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) radiobutton = gtk_radio_button_new_with_label(group, envy_adc_sense_enum_name(j)); av_adc_sense_radio[i][j] = radiobutton; - gtk_widget_show(radiobutton); gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", (GtkSignalFunc)adc_sense_toggled, (gpointer)(long)((i << 8) + j)); @@ -1609,20 +1434,17 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) char name[32]; sprintf(name, "IPGA %d", i); frame = gtk_frame_new(name); - gtk_widget_show(frame); //gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); /* Add friendly labels for DMX 6Fires */ if(card_is_dmx6fire && (i < 6)){ label = gtk_label_new(dmx6fire_inputs[i]); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6); } @@ -1630,7 +1452,6 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) av_ipga_volume_adj[i] = adj; vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj)); gtk_scale_set_draw_value(GTK_SCALE(vscale), FALSE); - gtk_widget_show(vscale); gtk_box_pack_start(GTK_BOX(vbox), vscale, TRUE, TRUE, 6); gtk_scale_set_value_pos(GTK_SCALE(vscale), GTK_POS_BOTTOM); gtk_scale_set_digits(GTK_SCALE(vscale), 0); @@ -1640,7 +1461,6 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) label = gtk_label_new("000"); av_ipga_volume_label[i] = (GtkLabel *)label; - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6); } } @@ -1789,10 +1609,7 @@ static GtkWidget *toggle_button_entry(const GtkWidget *parent, const gchar *prof (gpointer) entry_label); gtk_box_pack_start(GTK_BOX (box), entry_label, FALSE, FALSE, 20); - gtk_widget_show(entry_label); - gtk_widget_show(box); gtk_container_add(GTK_CONTAINER (toggle_button), box); - gtk_widget_show(toggle_button); return (toggle_button); } @@ -1817,29 +1634,24 @@ static void create_profiles(GtkWidget *main, GtkWidget *notebook, int page) gint max_digits; hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); gtk_container_add(GTK_CONTAINER(notebook), hbox); label = gtk_label_new("Profiles"); - gtk_widget_show(label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), label); /* build scrolling area */ scrolledwindow = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_show(scrolledwindow); gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); viewport = gtk_viewport_new(NULL, NULL); - gtk_widget_show(viewport); gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport); hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); gtk_container_add(GTK_CONTAINER(viewport), hbox); gtk_container_set_border_width(GTK_CONTAINER(hbox), 0); @@ -1853,39 +1665,32 @@ static void create_profiles(GtkWidget *main, GtkWidget *notebook, int page) profiles_toggle_buttons[index].toggle_button = toggle_button_entry(window, profile_name, index); gtk_box_pack_start(GTK_BOX (vbox1), profiles_toggle_buttons[index].toggle_button, FALSE, FALSE, 0); } - gtk_widget_show(vbox1); gtk_container_border_width(GTK_CONTAINER(vbox1), 6); vbox2 = gtk_vbutton_box_new(); - gtk_widget_show(vbox2); gtk_container_border_width(GTK_CONTAINER(vbox2), 50); hbox1 = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox1); gtk_box_pack_start(GTK_BOX(vbox2), hbox1, FALSE, FALSE, 20); label_card_nr = gtk_label_new("Card Number:"); - gtk_widget_show(label_card_nr); gtk_box_pack_start(GTK_BOX(hbox1), label_card_nr, FALSE, FALSE, 20); gtk_label_set_justify(GTK_LABEL(label_card_nr), GTK_JUSTIFY_LEFT); card_button_adj = gtk_adjustment_new(16, 0, MAX_CARD_NUMBERS - 1, 1, 10, 10); card_number_adj = card_button_adj; card_button = gtk_spin_button_new(GTK_ADJUSTMENT (card_button_adj), 1, 0); - gtk_widget_show(card_button); gtk_box_pack_start(GTK_BOX (hbox1), card_button, TRUE, FALSE, 0); gtk_spin_button_set_numeric(GTK_SPIN_BUTTON (card_button), TRUE); gtk_adjustment_set_value(GTK_ADJUSTMENT (card_button_adj), card_number); delete_button = gtk_toggle_button_new_with_label("Delete card from profiles"); - gtk_widget_show(delete_button); gtk_box_pack_start(GTK_BOX (vbox2), delete_button, FALSE, FALSE, 20); gtk_signal_connect(GTK_OBJECT (delete_button), "toggled", GTK_SIGNAL_FUNC (delete_card_number), NULL); save_button = gtk_toggle_button_new_with_label("Save active profile"); - gtk_widget_show(save_button); gtk_box_pack_end(GTK_BOX (vbox2), save_button, FALSE, FALSE, 20); gtk_signal_connect(GTK_OBJECT (save_button), "toggled", GTK_SIGNAL_FUNC (save_active_profile), @@ -1933,26 +1738,21 @@ static void create_outer(GtkWidget *main) /* Create digital mixer frame */ vbox = gtk_vbox_new(FALSE, 1); - gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(main), vbox, FALSE, FALSE, 0); label = gtk_label_new(" Rt-clk Menu >>"); //gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 3); frame = gtk_frame_new("Digital Mixer"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); /* Create controls in the digital mixer frame */ vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(frame), vbox); hbox1 = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox1); gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 6); drawing = gtk_drawing_area_new(); @@ -1969,26 +1769,21 @@ static void create_outer(GtkWidget *main) gtk_signal_connect(GTK_OBJECT(drawing), "configure_event", (GtkSignalFunc)level_meters_configure_event, NULL); gtk_widget_set_events(drawing, GDK_EXPOSURE_MASK); - gtk_widget_show(drawing); hbox1 = gtk_hbox_new(TRUE, 0); - gtk_widget_show(hbox1); gtk_box_pack_start(GTK_BOX(vbox), hbox1, TRUE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox1), 6); label = gtk_label_new("Left"); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, TRUE, 0); label = gtk_label_new("Right"); gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, TRUE, 0); mixer_clear_peaks_button = gtk_button_new_with_label("Reset Peaks"); - gtk_widget_show(mixer_clear_peaks_button); gtk_box_pack_start(GTK_BOX(vbox), mixer_clear_peaks_button, TRUE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(mixer_clear_peaks_button), 4); gtk_signal_connect(GTK_OBJECT(mixer_clear_peaks_button), "clicked", @@ -2265,7 +2060,6 @@ int main(int argc, char **argv) gtk_window_set_default_size(GTK_WINDOW(window), wwidth, 300); outerbox = gtk_hbox_new(FALSE, 3); - gtk_widget_show(outerbox); gtk_container_add(GTK_CONTAINER(window), outerbox); create_outer(outerbox); @@ -2274,7 +2068,6 @@ int main(int argc, char **argv) notebook = gtk_notebook_new(); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), TRUE); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook)); - gtk_widget_show(notebook); gtk_container_add(GTK_CONTAINER(outerbox), notebook); page = 0; @@ -2310,7 +2103,7 @@ int main(int argc, char **argv) gtk_timeout_add(100, rate_reset_status_timeout_callback, NULL); - gtk_widget_show(window); + gtk_widget_show_all(window); level_meters_postinit(); mixer_postinit(); From dcf1b94682368ef8b8479b0efd1fe90f8b065bc7 Mon Sep 17 00:00:00 2001 From: Andreas Persson Date: Sat, 29 Mar 2025 07:16:31 +0100 Subject: [PATCH 158/166] envy24control: fix control callback for spdif output Update S/PDIF Output Settings GUI when settings change. Closes: https://github.com/alsa-project/alsa-tools/pull/30 Signed-off-by: Andreas Persson Signed-off-by: Jaroslav Kysela --- envy24control/driverevents.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/envy24control/driverevents.c b/envy24control/driverevents.c index 377363d..397affa 100644 --- a/envy24control/driverevents.c +++ b/envy24control/driverevents.c @@ -81,6 +81,10 @@ void control_input_callback(gpointer data, gint source, GdkInputCondition condit else if (!strcmp(name, "Input Sensitivity Switch")) adc_sense_update(index); break; + case SND_CTL_ELEM_IFACE_PCM: + if (!strcmp(name, "IEC958 Playback Default")) + spdif_output_update(); + break; default: break; } From 037ae73ab346511cf63e446865ea618e0d98bb54 Mon Sep 17 00:00:00 2001 From: Andreas Persson Date: Sat, 29 Mar 2025 08:28:32 +0100 Subject: [PATCH 159/166] envy24control: fix crash when using system profiles file envy24control crashed if you tried to start it with -f /etc/envy24control/profiles.conf. Closes: https://github.com/alsa-project/alsa-tools/pull/32 Signed-off-by: Andreas Persson Signed-off-by: Jaroslav Kysela --- envy24control/profiles.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/envy24control/profiles.c b/envy24control/profiles.c index 17a418c..6dbe7d1 100644 --- a/envy24control/profiles.c +++ b/envy24control/profiles.c @@ -78,7 +78,9 @@ int which_cfgfile(char ** const cfgfile) (inputFile = fopen(SYS_PROFILERC, "r")) == NULL) { res = -ENOENT; } else { - fclose(inputFile); + if (inputFile != NULL) { + fclose(inputFile); + } *cfgfile = SYS_PROFILERC; res = EXIT_SUCCESS; } From 337768effadc01a7ea100b5c6afac5397b9bc24f Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 8 Apr 2025 15:25:44 +0200 Subject: [PATCH 160/166] github: actions - create initial build.yaml Signed-off-by: Jaroslav Kysela --- .github/workflows/build.yml | 142 ++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..8c770f6 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,142 @@ +name: Build alsa-tools + +on: [push, pull_request] + +jobs: + fedora_latest_build: + runs-on: ubuntu-latest + container: + image: fedora:latest + env: + QTDIR: /usr/lib64/qt-3.3 + steps: + - name: Prepare environment + run: | + dnf -y upgrade + dnf -y install @development-tools gcc-c++ libtool bzip2 gtk2-devel gtk3-devel fltk-devel qt3-devel + + - name: Checkout alsa-lib + uses: actions/checkout@v4 + with: + repository: alsa-project/alsa-lib + ref: master + path: alsa-lib + - name: Configure alsa-lib + run: | + cd alsa-lib + head -5 configure.ac + libtoolize --force --copy --automake + aclocal + autoheader + automake --foreign --copy --add-missing + autoconf + export CFLAGS="-O2 -Wall -W -Wunused-const-variable=0 -pipe -g" + ./configure + echo "Version: $(cat version)" + - name: Build alsa-lib + run: | + cd alsa-lib + make + - name: Install alsa-lib + run: | + cd alsa-lib + make install + + - name: Checkout + uses: actions/checkout@v4 + with: + path: alsa-tools + - name: Checkout all tags + run: | + cd alsa-tools + git fetch --prune --tags --force + git fetch --prune --unshallow --force + - name: Modify version + run: | + cd alsa-tools + mv Makefile Makefile.old + version=$(git describe | sed -e 's/v//') + if test -z "$version"; then version=$(git describe --tags | sed -e 's/v//'); fi + if test -z "$version"; then version1=$(grep "VERSION = .*" Makefile.old | cut -d ' ' -f 3); version2=$(git rev-parse --short HEAD); version="${version1}-g${version2}"; fi + echo "Version: ${version}" + sed -r "s/VERSION = .*/VERSION = ${version}/" < Makefile.old > Makefile + grep "VERSION =" Makefile + - name: Compile and install as10k1 (dependency) + run: | + cd alsa-tools/as10k1 + ./gitcompile --prefix=/usr + make install + - name: Compile and install ld10k1 (dependency) + run: | + cd alsa-tools/ld10k1 + ./gitcompile --prefix=/usr + make install + - name: Configure and build + run: | + cd alsa-tools + ./gitcompile + - name: Create package + run: | + cd alsa-tools + make alsa-dist + mkdir ../artifacts + mv alsa-tools*.tar.bz2 ../artifacts + - name: Archive package + uses: actions/upload-artifact@v4 + with: + name: alsa-tools-test-package + path: artifacts/ + + ubuntu_last_build: + runs-on: ubuntu-latest + container: + image: ubuntu:latest + steps: + - name: Prepare + run: | + export DEBIAN_FRONTEND=noninteractive + apt-get update + apt-get -y install apt-utils + apt-get -y full-upgrade + apt-get install -y git build-essential pkg-config m4 autoconf automake libtool ibgtk2.0-dev libgtk-3-dev libfltk1.3-dev + + - name: Checkout alsa-lib + uses: actions/checkout@v4 + with: + repository: alsa-project/alsa-lib + ref: master + - name: Configure alsa-lib + run: | + libtoolize --force --copy --automake + aclocal + autoheader + automake --foreign --copy --add-missing + autoconf + export CFLAGS="-O2 -Wall -W -Wunused-const-variable=0 -pipe -g" + ./configure + - name: Build alsa-lib + run: | + make + - name: Install alsa-lib + run: | + make install + + - name: Checkout + uses: actions/checkout@v4 + - name: Remove qlo10k1 + run: | + mv Makefile Makefile.old + sed -e 's/qlo10k1//' < Makefile.old > Makefile + - name: Compile and install as10k1 (dependency) + run: | + cd as10k1 + ./gitcompile --prefix=/usr + make install + - name: Compile and install ld10k1 (dependency) + run: | + cd ld10k1 + ./gitcompile --prefix=/usr + make install + - name: Configure and build + run: | + ./gitcompile From 52e64810471910354d04527ee679688709db313b Mon Sep 17 00:00:00 2001 From: Andreas Persson Date: Sat, 29 Mar 2025 08:37:01 +0100 Subject: [PATCH 161/166] envy24control: fix file descriptor leaks in profiles File descriptors were leaked when "Save active profile" was pressed. Add the missing calls to close. Closes: https://github.com/alsa-project/alsa-tools/pull/33 Signed-off-by: Andreas Persson Signed-off-by: Jaroslav Kysela --- envy24control/profiles.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/envy24control/profiles.c b/envy24control/profiles.c index 6dbe7d1..a67ef0c 100644 --- a/envy24control/profiles.c +++ b/envy24control/profiles.c @@ -1146,13 +1146,16 @@ int save_restore(const char * const operation, const int profile_number, const i fprintf(stderr, "Cannot save settings for card '%d' in profile '%d'.\n", card_number, profile_number); return -errno; } + close(res); unlink(cfgfile); } else { + close(res); if ((res = open(cfgfile, O_RDWR | 0400000 /* O_NOFOLLOW */, FILE_CREA_MODE)) < 0) { fprintf(stderr, "Cannot open configuration file '%s' for writing.\n", cfgfile); fprintf(stderr, "Cannot save settings for card '%d' in profile '%d'.\n", card_number, profile_number); return -errno; } + close(res); } res = save_profile(profile_number, card_number, profile_name, cfgfile); } else if (!strcmp(operation, ALSACTL_OP_RESTORE)) { From 65a201fed6e54d9ab7d22269d971a0afa048152a Mon Sep 17 00:00:00 2001 From: Andreas Persson Date: Sat, 29 Mar 2025 13:20:15 +0100 Subject: [PATCH 162/166] envy24control: fix memory access errors in profiles Fix two memory errors in the profiles parser: an invalid read and a "source and destination overlap in strncpy" warning. When the profiles page is initialized it fetches the profile names from the profiles file. When a profile wasn't defined in the file, the parser made invalid reads outside the buffer. Closes: https://github.com/alsa-project/alsa-tools/pull/34 Signed-off-by: Andreas Persson Signed-off-by: Jaroslav Kysela --- envy24control/profiles.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/envy24control/profiles.c b/envy24control/profiles.c index a67ef0c..9e5cde1 100644 --- a/envy24control/profiles.c +++ b/envy24control/profiles.c @@ -96,7 +96,9 @@ int get_file_size(const char * const filename) { struct stat file_status; - strncpy(filename_without_tilde, filename, MAX_FILE_NAME_LENGTH); + if (filename_without_tilde != filename) { + strncpy(filename_without_tilde, filename, MAX_FILE_NAME_LENGTH); + } filename_without_tilde[MAX_FILE_NAME_LENGTH - 1] = '\0'; subst_tilde_in_filename(filename_without_tilde); if (stat(filename_without_tilde, &file_status) < 0) { @@ -472,7 +474,8 @@ int get_pos_name_header_from_card(const char * const buffer, const int profile_n char place_holder; int pos_card_begin, pos_card_end, pos_name_header; - pos_card_begin = get_card_begin(buffer, profile_number, card_number); + if ((pos_card_begin = get_card_begin(buffer, profile_number, card_number)) < 0) + return pos_card_begin; pos_card_end = get_card_end(buffer, profile_number, card_number); place_holder = PLACE_HOLDER_STR; strncpy(header, PROFILE_NAME_TEMPL, MAX_SEARCH_FIELD_LENGTH); From 837033a108297e0207b91a3725e811b7a67ddbe8 Mon Sep 17 00:00:00 2001 From: Andreas Persson Date: Fri, 28 Mar 2025 21:40:08 +0100 Subject: [PATCH 163/166] envy24control: fix GtkSpinButton runtime warnings Change the parameters to gtk_adjustment_new to get rid of this runtime warning from GTK: GtkSpinButton: setting an adjustment with non-zero page size is deprecated The change is also important when envy24control is ported to GTK 3, as the spin buttons will stop working if it's not done. Closes: https://github.com/alsa-project/alsa-tools/pull/31 Signed-off-by: Andreas Persson Signed-off-by: Jaroslav Kysela --- envy24control/envy24control.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/envy24control/envy24control.c b/envy24control/envy24control.c index a7e40f0..419e88a 100644 --- a/envy24control/envy24control.c +++ b/envy24control/envy24control.c @@ -665,7 +665,7 @@ static void create_volume_change(GtkWidget *box) gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); - spinbutton_adj = gtk_adjustment_new(16, 0, 255, 1, 10, 10); + spinbutton_adj = gtk_adjustment_new(16, 0, 255, 1, 10, 0); hw_volume_change_adj = spinbutton_adj; spinbutton = gtk_spin_button_new(GTK_ADJUSTMENT(spinbutton_adj), 1, 0); gtk_box_pack_start(GTK_BOX(hbox), spinbutton, TRUE, FALSE, 0); @@ -1677,7 +1677,7 @@ static void create_profiles(GtkWidget *main, GtkWidget *notebook, int page) gtk_box_pack_start(GTK_BOX(hbox1), label_card_nr, FALSE, FALSE, 20); gtk_label_set_justify(GTK_LABEL(label_card_nr), GTK_JUSTIFY_LEFT); - card_button_adj = gtk_adjustment_new(16, 0, MAX_CARD_NUMBERS - 1, 1, 10, 10); + card_button_adj = gtk_adjustment_new(16, 0, MAX_CARD_NUMBERS - 1, 1, 10, 0); card_number_adj = card_button_adj; card_button = gtk_spin_button_new(GTK_ADJUSTMENT (card_button_adj), 1, 0); gtk_box_pack_start(GTK_BOX (hbox1), card_button, TRUE, FALSE, 0); From 32495631b153ced38d757006a32d91dca9a8838b Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Wed, 9 Apr 2025 11:57:26 +0200 Subject: [PATCH 164/166] hdspmixer: correct string delimiter in labels_aio_ss_input Closes: https://github.com/alsa-project/alsa-tools/issues/10 Signed-off-by: Jaroslav Kysela --- hdspmixer/src/HDSPMixerOutput.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hdspmixer/src/HDSPMixerOutput.cxx b/hdspmixer/src/HDSPMixerOutput.cxx index 7f80a74..8b4db34 100644 --- a/hdspmixer/src/HDSPMixerOutput.cxx +++ b/hdspmixer/src/HDSPMixerOutput.cxx @@ -93,7 +93,7 @@ static char const *labels_aio_ss_input[18] = { "AES.L", "AES.R", "A 1", "A 2", "A 3", "A 4", "A 5", "A 6", "A 7", "A 8", - "AEB 1", "AEB 2", "AEB 3," "AEB 4" + "AEB 1", "AEB 2", "AEB 3", "AEB 4" }; static char const *labels_aio_ss_playback[20] = { From ddc93b66b4a26b7879af96452e32f155b4bbc0e9 Mon Sep 17 00:00:00 2001 From: Andreas Persson Date: Wed, 9 Apr 2025 12:25:09 +0200 Subject: [PATCH 165/166] envy24control: port to GTK 3 Closes: https://github.com/alsa-project/alsa-tools/pull/35 Signed-off-by: Andreas Persson Signed-off-by: Jaroslav Kysela --- envy24control/config.c | 2 +- envy24control/configure.ac | 2 +- envy24control/driverevents.c | 7 +- envy24control/envy24control.c | 725 +++++++++++++++++----------------- envy24control/envy24control.h | 16 +- envy24control/hardware.c | 19 +- envy24control/levelmeters.c | 283 +++++++------ envy24control/midi.c | 3 +- envy24control/midi.h | 2 +- envy24control/mixer.c | 8 +- envy24control/patchbay.c | 2 +- envy24control/volume.c | 6 +- 12 files changed, 541 insertions(+), 534 deletions(-) diff --git a/envy24control/config.c b/envy24control/config.c index c27cf27..f3ce2c9 100644 --- a/envy24control/config.c +++ b/envy24control/config.c @@ -47,7 +47,7 @@ void config_close() void config_set_stereo(GtkWidget *but, gpointer data) { gint i=GPOINTER_TO_INT(data); - config_stereo[i]=GTK_TOGGLE_BUTTON(but)->active; + config_stereo[i]=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(but)); } void config_restore_stereo() diff --git a/envy24control/configure.ac b/envy24control/configure.ac index 776f290..dfb21bd 100644 --- a/envy24control/configure.ac +++ b/envy24control/configure.ac @@ -5,6 +5,6 @@ AC_HEADER_STDC AM_INIT_AUTOMAKE AM_MAINTAINER_MODE([enable]) -PKG_CHECK_MODULES(ENVY24CONTROL, gtk+-2.0 alsa >= 0.9.0) +PKG_CHECK_MODULES(ENVY24CONTROL, gtk+-3.0 alsa >= 0.9.0) AC_OUTPUT(Makefile desktop/Makefile) diff --git a/envy24control/driverevents.c b/envy24control/driverevents.c index 397affa..cdc56ab 100644 --- a/envy24control/driverevents.c +++ b/envy24control/driverevents.c @@ -19,7 +19,7 @@ #include "envy24control.h" -void control_input_callback(gpointer data, gint source, GdkInputCondition condition) +gboolean control_input_callback(GIOChannel *source, GIOCondition condition, gpointer data) { snd_ctl_t *ctl = (snd_ctl_t *)data; snd_ctl_event_t *ev; @@ -29,12 +29,12 @@ void control_input_callback(gpointer data, gint source, GdkInputCondition condit snd_ctl_event_alloca(&ev); if (snd_ctl_read(ctl, ev) < 0) - return; + return TRUE; name = snd_ctl_event_elem_get_name(ev); index = snd_ctl_event_elem_get_index(ev); mask = snd_ctl_event_elem_get_mask(ev); if (! (mask & (SND_CTL_EVENT_MASK_VALUE | SND_CTL_EVENT_MASK_INFO))) - return; + return TRUE; switch (snd_ctl_event_elem_get_interface(ev)) { case SND_CTL_ELEM_IFACE_MIXER: @@ -88,5 +88,6 @@ void control_input_callback(gpointer data, gint source, GdkInputCondition condit default: break; } + return TRUE; } diff --git a/envy24control/envy24control.c b/envy24control/envy24control.c index 419e88a..bf6864f 100644 --- a/envy24control/envy24control.c +++ b/envy24control/envy24control.c @@ -45,7 +45,7 @@ GtkWidget *window; GtkWidget *mixer_mix_drawing; GtkWidget *mixer_clear_peaks_button; GtkWidget *mixer_drawing[20]; -GtkObject *mixer_adj[20][2]; +GtkAdjustment *mixer_adj[20][2]; GtkWidget *mixer_vscale[20][2]; GtkWidget *mixer_mute_toggle[20][2]; GtkWidget *mixer_stereo_toggle[20]; @@ -71,7 +71,7 @@ GtkWidget *hw_clock_state_reset; GtkWidget *hw_rate_locking_check; GtkWidget *hw_rate_reset_check; -GtkObject *hw_volume_change_adj; +GtkAdjustment *hw_volume_change_adj; GtkWidget *hw_volume_change_spin; GtkWidget *hw_spdif_profi_nonaudio_radio; @@ -115,9 +115,9 @@ GtkWidget *input_interface_wavetable; GtkWidget *hw_phono_input_on_radio; GtkWidget *hw_phono_input_off_radio; -GtkObject *av_dac_volume_adj[10]; -GtkObject *av_adc_volume_adj[10]; -GtkObject *av_ipga_volume_adj[10]; +GtkAdjustment *av_dac_volume_adj[10]; +GtkAdjustment *av_adc_volume_adj[10]; +GtkAdjustment *av_ipga_volume_adj[10]; GtkLabel *av_dac_volume_label[10]; GtkLabel *av_adc_volume_label[10]; GtkLabel *av_ipga_volume_label[10]; @@ -130,7 +130,7 @@ struct profile_button { } profiles_toggle_buttons[MAX_PROFILES]; GtkWidget *active_button = NULL; -GtkObject *card_number_adj; +GtkAdjustment *card_number_adj; static void create_mixer_frame(GtkWidget *box, int stream) @@ -139,7 +139,7 @@ static void create_mixer_frame(GtkWidget *box, int stream) GtkWidget *vbox1; GtkWidget *hbox; GtkWidget *frame; - GtkObject *adj; + GtkAdjustment *adj; GtkWidget *vscale; GtkWidget *drawing; GtkWidget *label; @@ -174,37 +174,35 @@ static void create_mixer_frame(GtkWidget *box, int stream) gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 2); - vbox = gtk_vbox_new(FALSE, 6); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 2); - hbox = gtk_hbox_new(FALSE, 2); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); adj = gtk_adjustment_new(96, 0, 96, 1, 16, 0); mixer_adj[stream-1][0] = adj; - vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj)); + vscale = gtk_scale_new(GTK_ORIENTATION_VERTICAL, adj); mixer_vscale[stream-1][0] = vscale; gtk_box_pack_start(GTK_BOX(hbox), vscale, TRUE, FALSE, 0); gtk_scale_set_value_pos(GTK_SCALE(vscale), GTK_POS_BOTTOM); gtk_scale_set_digits(GTK_SCALE(vscale), 0); - gtk_signal_connect(GTK_OBJECT(adj), "value_changed", - GTK_SIGNAL_FUNC(mixer_adjust), - (gpointer)(long)((stream << 16) + 0)); + g_signal_connect(adj, "value_changed", + G_CALLBACK(mixer_adjust), + (gpointer)(long)((stream << 16) + 0)); - vbox1 = gtk_vbox_new(FALSE, 0); + vbox1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start(GTK_BOX(hbox), vbox1, FALSE, FALSE, 0); drawing = gtk_drawing_area_new(); mixer_drawing[stream-1] = drawing; sprintf(drawname, "Mixer%i", stream); gtk_widget_set_name(drawing, drawname); - gtk_signal_connect(GTK_OBJECT(drawing), "expose_event", - GTK_SIGNAL_FUNC(level_meters_expose_event), NULL); - gtk_signal_connect(GTK_OBJECT(drawing), "configure_event", - GTK_SIGNAL_FUNC(level_meters_configure_event), NULL); + g_signal_connect(drawing, "draw", + G_CALLBACK(level_meters_draw_callback), NULL); gtk_widget_set_events(drawing, GDK_EXPOSURE_MASK); - gtk_widget_set_usize(drawing, 36, (60 * tall_equal_mixer_ht + 204)); + gtk_widget_set_size_request(drawing, 36, (60 * tall_equal_mixer_ht + 204)); gtk_box_pack_start(GTK_BOX(vbox1), drawing, FALSE, FALSE, 1); label = gtk_label_new(""); @@ -212,51 +210,55 @@ static void create_mixer_frame(GtkWidget *box, int stream) adj = gtk_adjustment_new(96, 0, 96, 1, 16, 0); mixer_adj[stream-1][1] = adj; - vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj)); + vscale = gtk_scale_new(GTK_ORIENTATION_VERTICAL, adj); mixer_vscale[stream-1][1] = vscale; gtk_box_pack_start(GTK_BOX(hbox), vscale, TRUE, FALSE, 0); gtk_scale_set_value_pos(GTK_SCALE(vscale), GTK_POS_BOTTOM); gtk_scale_set_digits(GTK_SCALE(vscale), 0); - gtk_signal_connect(GTK_OBJECT(adj), "value_changed", - GTK_SIGNAL_FUNC(mixer_adjust), - (gpointer)(long)((stream << 16) + 1)); + g_signal_connect(adj, "value_changed", + G_CALLBACK(mixer_adjust), + (gpointer)(long)((stream << 16) + 1)); - hbox = gtk_hbox_new(TRUE, 0); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous(GTK_BOX(hbox), TRUE); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, FALSE, 0); label = gtk_label_new("Left"); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + gtk_widget_set_halign(label, GTK_ALIGN_START); + gtk_widget_set_valign(label, GTK_ALIGN_CENTER); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0); label = gtk_label_new("Right"); - gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); + gtk_widget_set_halign(label, GTK_ALIGN_END); + gtk_widget_set_valign(label, GTK_ALIGN_CENTER); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0); toggle = gtk_toggle_button_new_with_label("L/R Gang"); mixer_stereo_toggle[stream-1] = toggle; gtk_box_pack_end(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); /* gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), TRUE); */ - gtk_signal_connect(GTK_OBJECT(toggle), "toggled", - GTK_SIGNAL_FUNC(config_set_stereo), GINT_TO_POINTER(stream-1)); + g_signal_connect(toggle, "toggled", + G_CALLBACK(config_set_stereo), GINT_TO_POINTER(stream-1)); - hbox = gtk_hbox_new(TRUE, 6); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6); + gtk_box_set_homogeneous(GTK_BOX(hbox), TRUE); gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); toggle = gtk_toggle_button_new_with_label("Mute"); mixer_mute_toggle[stream-1][0] = toggle; gtk_box_pack_start(GTK_BOX(hbox), toggle, FALSE, TRUE, 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), TRUE); - gtk_signal_connect(GTK_OBJECT(toggle), "toggled", - GTK_SIGNAL_FUNC(mixer_toggled_mute), - (gpointer)(long)((stream << 16) + 0)); + g_signal_connect(toggle, "toggled", + G_CALLBACK(mixer_toggled_mute), + (gpointer)(long)((stream << 16) + 0)); toggle = gtk_toggle_button_new_with_label("Mute"); mixer_mute_toggle[stream-1][1] = toggle; gtk_box_pack_start(GTK_BOX(hbox), toggle, FALSE, TRUE, 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), TRUE); - gtk_signal_connect(GTK_OBJECT(toggle), "toggled", - GTK_SIGNAL_FUNC(mixer_toggled_mute), - (gpointer)(long)((stream << 16) + 1)); + g_signal_connect(toggle, "toggled", + G_CALLBACK(mixer_toggled_mute), + (gpointer)(long)((stream << 16) + 1)); } @@ -271,7 +273,7 @@ static void create_inputs_mixer(GtkWidget *main, GtkWidget *notebook, int page) int stream; - hbox = gtk_hbox_new(FALSE, 3); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3); gtk_container_add(GTK_CONTAINER(notebook), hbox); label = gtk_label_new("Monitor Inputs"); @@ -288,10 +290,10 @@ static void create_inputs_mixer(GtkWidget *main, GtkWidget *notebook, int page) viewport = gtk_viewport_new(NULL, NULL); gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(viewport), vbox); - hbox = gtk_hbox_new(FALSE, 0); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); for(stream = (MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + 1); \ @@ -316,7 +318,7 @@ static void create_pcms_mixer(GtkWidget *main, GtkWidget *notebook, int page) GtkWidget *viewport; int stream; - hbox = gtk_hbox_new(FALSE, 3); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3); gtk_container_add(GTK_CONTAINER(notebook), hbox); label = gtk_label_new("Monitor PCMs"); @@ -333,10 +335,10 @@ static void create_pcms_mixer(GtkWidget *main, GtkWidget *notebook, int page) viewport = gtk_viewport_new(NULL, NULL); gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(viewport), vbox); - hbox = gtk_hbox_new(FALSE, 0); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); for(stream = 1; stream <= pcm_output_channels; stream ++) { @@ -414,21 +416,22 @@ static void create_router_frame(GtkWidget *box, int stream, int pos) gtk_container_set_border_width(GTK_CONTAINER(frame), 6); - vbox = gtk_vbox_new(TRUE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); + gtk_box_set_homogeneous(GTK_BOX(vbox), TRUE); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, str1); router_radio[stream-1][0] = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)patchbay_toggled, - (gpointer)(long)((stream << 16) + 0)); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(patchbay_toggled), + (gpointer)(long)((stream << 16) + 0)); - hseparator = gtk_hseparator_new(); - gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, TRUE, 0); + hseparator = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL); + gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, FALSE, 0); label = gtk_label_new(""); @@ -438,12 +441,12 @@ static void create_router_frame(GtkWidget *box, int stream, int pos) ) { radiobutton = gtk_radio_button_new_with_label(group, stream & 1 ? "Digital Mix L" : "Digital Mix R"); router_radio[stream-1][1] = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)patchbay_toggled, - (gpointer)(long)((stream << 16) + 1)); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(patchbay_toggled), + (gpointer)(long)((stream << 16) + 1)); } else { label = gtk_label_new(""); @@ -451,19 +454,19 @@ static void create_router_frame(GtkWidget *box, int stream, int pos) } - hseparator = gtk_hseparator_new(); - gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, TRUE, 0); + hseparator = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL); + gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, FALSE, 0); for(idx = 2 - spdif_channels; idx < input_channels + 2; idx++) { radiobutton = gtk_radio_button_new_with_label(group, table[idx]); router_radio[stream-1][2+idx] = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)patchbay_toggled, - (gpointer)(long)((stream << 16) + 2 + idx)); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(patchbay_toggled), + (gpointer)(long)((stream << 16) + 2 + idx)); } } @@ -488,7 +491,7 @@ static void create_router(GtkWidget *main, GtkWidget *notebook, int page) viewport = gtk_viewport_new(NULL, NULL); gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport); - hbox = gtk_hbox_new(FALSE, 0); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add(GTK_CONTAINER(viewport), hbox); pos = 0; @@ -514,73 +517,73 @@ static void create_master_clock(GtkWidget *box) gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 4); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "Int 22050"); hw_master_clock_xtal_22050 = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)internal_clock_toggled, - (gpointer)"22050"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(internal_clock_toggled), + (gpointer)"22050"); radiobutton = gtk_radio_button_new_with_label(group, "Int 32000"); hw_master_clock_xtal_32000 = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)internal_clock_toggled, - (gpointer)"32000"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(internal_clock_toggled), + (gpointer)"32000"); radiobutton = gtk_radio_button_new_with_label(group, "Int 44100"); hw_master_clock_xtal_44100 = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)internal_clock_toggled, - (gpointer)"44100"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(internal_clock_toggled), + (gpointer)"44100"); radiobutton = gtk_radio_button_new_with_label(group, "Int 48000"); hw_master_clock_xtal_48000 = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)internal_clock_toggled, - (gpointer)"48000"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(internal_clock_toggled), + (gpointer)"48000"); radiobutton = gtk_radio_button_new_with_label(group, "Int 88200"); hw_master_clock_xtal_88200 = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)internal_clock_toggled, - (gpointer)"88200"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(internal_clock_toggled), + (gpointer)"88200"); radiobutton = gtk_radio_button_new_with_label(group, "Int 96000"); hw_master_clock_xtal_96000 = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)internal_clock_toggled, - (gpointer)"96000"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(internal_clock_toggled), + (gpointer)"96000"); radiobutton = gtk_radio_button_new_with_label(group, "S/PDIF In"); hw_master_clock_spdif_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)internal_clock_toggled, - (gpointer)"SPDIF"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(internal_clock_toggled), + (gpointer)"SPDIF"); @@ -590,11 +593,11 @@ static void create_master_clock(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Word Clock"); hw_master_clock_word_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)internal_clock_toggled, - (gpointer)"WordClock"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(internal_clock_toggled), + (gpointer)"WordClock"); label = gtk_label_new("Locked"); hw_master_clock_status_label = label; @@ -610,24 +613,25 @@ static void create_rate_state(GtkWidget *box) frame = gtk_frame_new("Rate State"); gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0); - hbox = gtk_hbox_new(TRUE, 0); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous(GTK_BOX(hbox), TRUE); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_container_set_border_width(GTK_CONTAINER(hbox), 6); check = gtk_check_button_new_with_label("Locked"); hw_rate_locking_check = check; gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(check), "toggled", - (GtkSignalFunc)rate_locking_toggled, - (gpointer)"locked"); + g_signal_connect(check, "toggled", + G_CALLBACK(rate_locking_toggled), + (gpointer)"locked"); check = gtk_check_button_new_with_label("Reset"); hw_rate_reset_check = check; gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(check), "toggled", - (GtkSignalFunc)rate_reset_toggled, - (gpointer)"reset"); + g_signal_connect(check, "toggled", + G_CALLBACK(rate_reset_toggled), + (gpointer)"reset"); } @@ -643,21 +647,24 @@ static void create_actual_rate(GtkWidget *box) hw_master_clock_actual_rate_label = label; gtk_container_add(GTK_CONTAINER(frame), label); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); - gtk_misc_set_padding(GTK_MISC(label), 6, 6); + gtk_widget_set_margin_start(label, 6); + gtk_widget_set_margin_end(label, 6); + gtk_widget_set_margin_top(label, 6); + gtk_widget_set_margin_bottom(label, 6); } static void create_volume_change(GtkWidget *box) { GtkWidget *frame; GtkWidget *hbox; - GtkObject *spinbutton_adj; + GtkAdjustment *spinbutton_adj; GtkWidget *spinbutton; GtkWidget *label; frame = gtk_frame_new("Volume Change"); gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0); - hbox = gtk_hbox_new(FALSE, 0); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_container_set_border_width(GTK_CONTAINER(hbox), 6); @@ -667,11 +674,12 @@ static void create_volume_change(GtkWidget *box) spinbutton_adj = gtk_adjustment_new(16, 0, 255, 1, 10, 0); hw_volume_change_adj = spinbutton_adj; - spinbutton = gtk_spin_button_new(GTK_ADJUSTMENT(spinbutton_adj), 1, 0); + spinbutton = gtk_spin_button_new(spinbutton_adj, 1, 0); gtk_box_pack_start(GTK_BOX(hbox), spinbutton, TRUE, FALSE, 0); + gtk_widget_set_valign(spinbutton, GTK_ALIGN_CENTER); gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spinbutton), TRUE); - gtk_signal_connect(GTK_OBJECT(spinbutton_adj), "value_changed", - GTK_SIGNAL_FUNC(volume_change_rate_adj), NULL); + g_signal_connect(spinbutton_adj, "value_changed", + G_CALLBACK(volume_change_rate_adj), NULL); } @@ -686,26 +694,26 @@ static void create_spdif_output_settings_profi_data(GtkWidget *box) gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "Non-audio"); hw_spdif_profi_nonaudio_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)profi_data_toggled, - (gpointer)"Non-audio"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(profi_data_toggled), + (gpointer)"Non-audio"); radiobutton = gtk_radio_button_new_with_label(group, "Audio"); hw_spdif_profi_audio_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)profi_data_toggled, - (gpointer)"Audio"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(profi_data_toggled), + (gpointer)"Audio"); } static void create_spdif_output_settings_profi_stream(GtkWidget *box) @@ -719,25 +727,25 @@ static void create_spdif_output_settings_profi_stream(GtkWidget *box) gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "Stereophonic"); hw_profi_stream_stereo_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)profi_stream_toggled, - (gpointer)"Stereo"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(profi_stream_toggled), + (gpointer)"Stereo"); radiobutton = gtk_radio_button_new_with_label(group, "Not indicated"); hw_profi_stream_notid_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)profi_stream_toggled, - (gpointer)"NOTID"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(profi_stream_toggled), + (gpointer)"NOTID"); } static void create_spdif_output_settings_profi_emphasis(GtkWidget *box) @@ -751,42 +759,42 @@ static void create_spdif_output_settings_profi_emphasis(GtkWidget *box) gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "No emphasis"); hw_profi_emphasis_none_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)profi_emphasis_toggled, - (gpointer)"No"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(profi_emphasis_toggled), + (gpointer)"No"); radiobutton = gtk_radio_button_new_with_label(group, "50/15us"); hw_profi_emphasis_5015_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)profi_emphasis_toggled, - (gpointer)"5015"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(profi_emphasis_toggled), + (gpointer)"5015"); radiobutton = gtk_radio_button_new_with_label(group, "CCITT J.17"); hw_profi_emphasis_ccitt_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)profi_emphasis_toggled, - (gpointer)"CCITT"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(profi_emphasis_toggled), + (gpointer)"CCITT"); radiobutton = gtk_radio_button_new_with_label(group, "Not indicated"); hw_profi_emphasis_notid_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)profi_emphasis_toggled, - (gpointer)"NOTID"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(profi_emphasis_toggled), + (gpointer)"NOTID"); } static void create_spdif_output_settings_profi(GtkWidget *notebook, int page) @@ -795,7 +803,7 @@ static void create_spdif_output_settings_profi(GtkWidget *notebook, int page) GtkWidget *vbox; GtkWidget *label; - hbox = gtk_hbox_new(FALSE, 0); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add(GTK_CONTAINER(notebook), hbox); label = gtk_label_new("Professional"); @@ -803,14 +811,14 @@ static void create_spdif_output_settings_profi(GtkWidget *notebook, int page) gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), label); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); create_spdif_output_settings_profi_data(vbox); create_spdif_output_settings_profi_stream(vbox); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); @@ -827,26 +835,26 @@ static void create_spdif_output_settings_consumer_copyright(GtkWidget *box) frame = gtk_frame_new("Copyright"); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "Copyrighted"); hw_consumer_copyright_on_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)consumer_copyright_toggled, - (gpointer)"Copyright"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(consumer_copyright_toggled), + (gpointer)"Copyright"); radiobutton = gtk_radio_button_new_with_label(group, "Copy permitted"); hw_consumer_copyright_off_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)consumer_copyright_toggled, - (gpointer)"Permitted"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(consumer_copyright_toggled), + (gpointer)"Permitted"); } static void create_spdif_output_settings_consumer_copy(GtkWidget *box) @@ -859,26 +867,26 @@ static void create_spdif_output_settings_consumer_copy(GtkWidget *box) frame = gtk_frame_new("Copy"); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "1-st generation"); hw_consumer_copy_1st_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)consumer_copy_toggled, - (gpointer)"1st"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(consumer_copy_toggled), + (gpointer)"1st"); radiobutton = gtk_radio_button_new_with_label(group, "Original"); hw_consumer_copy_original_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)consumer_copy_toggled, - (gpointer)"Original"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(consumer_copy_toggled), + (gpointer)"Original"); } static void create_spdif_output_settings_consumer_emphasis(GtkWidget *box) @@ -891,25 +899,25 @@ static void create_spdif_output_settings_consumer_emphasis(GtkWidget *box) frame = gtk_frame_new("Emphasis"); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "No emphasis"); hw_consumer_emphasis_none_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)consumer_emphasis_toggled, - (gpointer)"No"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(consumer_emphasis_toggled), + (gpointer)"No"); radiobutton = gtk_radio_button_new_with_label(group, "50/15us"); hw_consumer_emphasis_5015_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)consumer_emphasis_toggled, - (gpointer)"5015"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(consumer_emphasis_toggled), + (gpointer)"5015"); } static void create_spdif_output_settings_consumer_category(GtkWidget *box) @@ -922,41 +930,41 @@ static void create_spdif_output_settings_consumer_category(GtkWidget *box) frame = gtk_frame_new("Category"); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "DAT"); hw_consumer_category_dat_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)consumer_category_toggled, - (gpointer)"DAT"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(consumer_category_toggled), + (gpointer)"DAT"); radiobutton = gtk_radio_button_new_with_label(group, "PCM encoder"); hw_consumer_category_pcm_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)consumer_category_toggled, - (gpointer)"PCM"); + g_signal_connect(G_OBJECT(radiobutton), "toggled", + G_CALLBACK(consumer_category_toggled), + (gpointer)"PCM"); radiobutton = gtk_radio_button_new_with_label(group, "CD (ICE-908)"); hw_consumer_category_cd_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)consumer_category_toggled, - (gpointer)"CD"); + g_signal_connect(G_OBJECT(radiobutton), "toggled", + G_CALLBACK(consumer_category_toggled), + (gpointer)"CD"); radiobutton = gtk_radio_button_new_with_label(group, "General"); hw_consumer_category_general_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)consumer_category_toggled, - (gpointer)"General"); + g_signal_connect(G_OBJECT(radiobutton), "toggled", + G_CALLBACK(consumer_category_toggled), + (gpointer)"General"); } static void create_spdif_output_settings_consumer(GtkWidget *notebook, int page) @@ -965,7 +973,7 @@ static void create_spdif_output_settings_consumer(GtkWidget *notebook, int page) GtkWidget *hbox; GtkWidget *label; - hbox = gtk_hbox_new(FALSE, 0); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add(GTK_CONTAINER(notebook), hbox); gtk_container_set_border_width(GTK_CONTAINER(hbox), 6); @@ -974,20 +982,20 @@ static void create_spdif_output_settings_consumer(GtkWidget *notebook, int page) gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), label); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); create_spdif_output_settings_consumer_copyright(vbox); create_spdif_output_settings_consumer_copy(vbox); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); create_spdif_output_settings_consumer_emphasis(vbox); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); @@ -1008,30 +1016,30 @@ static void create_spdif_output_settings(GtkWidget *box) gtk_container_set_border_width(GTK_CONTAINER(frame), 6); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); - hbox = gtk_hbox_new(FALSE, 0); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); radiobutton = gtk_radio_button_new_with_label(NULL, "Professional"); hw_spdif_professional_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(hbox), radiobutton, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(radiobutton), 6); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)spdif_output_toggled, - (gpointer)"Professional"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(spdif_output_toggled), + (gpointer)"Professional"); radiobutton = gtk_radio_button_new_with_label(group, "Consumer"); hw_spdif_consumer_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(hbox), radiobutton, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(radiobutton), 6); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)spdif_output_toggled, - (gpointer)"Consumer"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(spdif_output_toggled), + (gpointer)"Consumer"); notebook = gtk_notebook_new(); @@ -1054,34 +1062,34 @@ static void create_spdif_input_select(GtkWidget *box) gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "Coaxial"); hw_spdif_input_coaxial_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)spdif_input_toggled, - (gpointer)"Coaxial"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(spdif_input_toggled), + (gpointer)"Coaxial"); radiobutton = gtk_radio_button_new_with_label(group, "Optical"); hw_spdif_input_optical_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)spdif_input_toggled, - (gpointer)"Optical"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(spdif_input_toggled), + (gpointer)"Optical"); if (card_is_dmx6fire) { radiobutton = gtk_radio_button_new_with_label(group, "Internal CD"); hw_spdif_switch_off_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)spdif_input_toggled, - (gpointer)"Off"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(spdif_input_toggled), + (gpointer)"Off"); } } @@ -1097,25 +1105,25 @@ static void create_phono_input(GtkWidget *box) gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 7); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "Phono"); hw_phono_input_on_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)phono_input_toggled, - (gpointer)"Phono"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(phono_input_toggled), + (gpointer)"Phono"); radiobutton = gtk_radio_button_new_with_label(group, "Mic"); hw_phono_input_off_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)phono_input_toggled, - (gpointer)"Mic"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(phono_input_toggled), + (gpointer)"Mic"); } static void create_input_interface(GtkWidget *box) @@ -1129,41 +1137,41 @@ static void create_input_interface(GtkWidget *box) gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 4); //gtk_container_set_border_width(GTK_CONTAINER(frame), 6); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "Internal"); input_interface_internal = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)analog_input_select_toggled, - (gpointer)"Internal"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(analog_input_select_toggled), + (gpointer)"Internal"); radiobutton = gtk_radio_button_new_with_label(group, "Front Input"); input_interface_front_input = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)analog_input_select_toggled, - (gpointer)"Front Input"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(analog_input_select_toggled), + (gpointer)"Front Input"); radiobutton = gtk_radio_button_new_with_label(group, "Rear Input"); input_interface_rear_input = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)analog_input_select_toggled, - (gpointer)"Rear Input"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(analog_input_select_toggled), + (gpointer)"Rear Input"); radiobutton = gtk_radio_button_new_with_label(group, "Wavetable"); input_interface_wavetable = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)analog_input_select_toggled, - (gpointer)"Wave Table"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(analog_input_select_toggled), + (gpointer)"Wave Table"); } static void create_hardware(GtkWidget *main, GtkWidget *notebook, int page) @@ -1178,7 +1186,7 @@ static void create_hardware(GtkWidget *main, GtkWidget *notebook, int page) GtkWidget *viewport; GtkWidget *hseparator; - hbox = gtk_hbox_new(FALSE, 0); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add(GTK_CONTAINER(notebook), hbox); label = gtk_label_new("Hardware Settings"); @@ -1196,25 +1204,25 @@ static void create_hardware(GtkWidget *main, GtkWidget *notebook, int page) gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport); /* Outer box */ - hbox = gtk_hbox_new(FALSE, 0); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add(GTK_CONTAINER(viewport), hbox); /* Create boxes for controls */ - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 6); - hbox1 = gtk_hbox_new(FALSE, 0); + hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 0); - hseparator = gtk_hseparator_new(); + hseparator = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL); gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, FALSE, 2); - hbox2 = gtk_hbox_new(FALSE, 0); + hbox2 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 0); create_master_clock(hbox1); - vbox1 = gtk_vbox_new(FALSE, 0); + vbox1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start(GTK_BOX(hbox1), vbox1, FALSE, FALSE, 20); create_rate_state(vbox1); @@ -1238,7 +1246,7 @@ static void create_about(GtkWidget *main, GtkWidget *notebook, int page) GtkWidget *scrolledwindow; GtkWidget *viewport; - hbox = gtk_hbox_new(FALSE, 0); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add(GTK_CONTAINER(notebook), hbox); label = gtk_label_new("About"); @@ -1256,7 +1264,7 @@ static void create_about(GtkWidget *main, GtkWidget *notebook, int page) gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(viewport), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); @@ -1288,7 +1296,7 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) GtkWidget *hbox; GtkWidget *vbox; GtkWidget *frame; - GtkObject *adj; + GtkAdjustment *adj; GtkWidget *vscale; GtkWidget *radiobutton; GSList *group; @@ -1326,7 +1334,7 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) viewport = gtk_viewport_new(NULL, NULL); gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport); - hbox = gtk_hbox_new(FALSE, 0); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add(GTK_CONTAINER(viewport), hbox); /* create DAC */ @@ -1338,7 +1346,7 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); @@ -1350,13 +1358,13 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) adj = gtk_adjustment_new(0, -(envy_dac_max()), 0, 1, 16, 0); av_dac_volume_adj[i] = adj; - vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj)); + vscale = gtk_scale_new(GTK_ORIENTATION_VERTICAL, adj); gtk_scale_set_draw_value(GTK_SCALE(vscale), FALSE); gtk_box_pack_start(GTK_BOX(vbox), vscale, TRUE, TRUE, 6); gtk_scale_set_digits(GTK_SCALE(vscale), 0); - gtk_signal_connect(GTK_OBJECT(adj), "value_changed", - GTK_SIGNAL_FUNC(dac_volume_adjust), - (gpointer)(long)(i)); + g_signal_connect(adj, "value_changed", + G_CALLBACK(dac_volume_adjust), + (gpointer)(long)(i)); label = gtk_label_new("000"); av_dac_volume_label[i] =(GtkLabel *)label; @@ -1370,12 +1378,12 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) radiobutton = gtk_radio_button_new_with_label(group, envy_dac_sense_enum_name(j)); av_dac_sense_radio[i][j] = radiobutton; - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)dac_sense_toggled, - (gpointer)(long)((i << 8) + j)); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(dac_sense_toggled), + (gpointer)(long)((i << 8) + j)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, TRUE, 0); - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); } } @@ -1388,7 +1396,7 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); @@ -1400,14 +1408,14 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) adj = gtk_adjustment_new(0, -(envy_adc_max()), 0, 1, 16, 0); av_adc_volume_adj[i] = adj; - vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj)); + vscale = gtk_scale_new(GTK_ORIENTATION_VERTICAL, adj); gtk_scale_set_draw_value(GTK_SCALE(vscale), FALSE); gtk_box_pack_start(GTK_BOX(vbox), vscale, TRUE, TRUE, 6); gtk_scale_set_value_pos(GTK_SCALE(vscale), GTK_POS_BOTTOM); gtk_scale_set_digits(GTK_SCALE(vscale), 0); - gtk_signal_connect(GTK_OBJECT(adj), "value_changed", - GTK_SIGNAL_FUNC(adc_volume_adjust), - (gpointer)(long)(i)); + g_signal_connect(adj, "value_changed", + G_CALLBACK(adc_volume_adjust), + (gpointer)(long)(i)); label = gtk_label_new("000"); av_adc_volume_label[i] =(GtkLabel *)label; @@ -1420,12 +1428,12 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) radiobutton = gtk_radio_button_new_with_label(group, envy_adc_sense_enum_name(j)); av_adc_sense_radio[i][j] = radiobutton; - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)adc_sense_toggled, - (gpointer)(long)((i << 8) + j)); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(adc_sense_toggled), + (gpointer)(long)((i << 8) + j)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, TRUE, 0); - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); } } @@ -1438,7 +1446,7 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); @@ -1450,14 +1458,14 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) adj = gtk_adjustment_new(0, -36, 0, 1, 16, 0); av_ipga_volume_adj[i] = adj; - vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj)); + vscale = gtk_scale_new(GTK_ORIENTATION_VERTICAL, adj); gtk_scale_set_draw_value(GTK_SCALE(vscale), FALSE); gtk_box_pack_start(GTK_BOX(vbox), vscale, TRUE, TRUE, 6); gtk_scale_set_value_pos(GTK_SCALE(vscale), GTK_POS_BOTTOM); gtk_scale_set_digits(GTK_SCALE(vscale), 0); - gtk_signal_connect(GTK_OBJECT(adj), "value_changed", - GTK_SIGNAL_FUNC(ipga_volume_adjust), - (gpointer)(long)(i)); + g_signal_connect(adj, "value_changed", + G_CALLBACK(ipga_volume_adjust), + (gpointer)(long)(i)); label = gtk_label_new("000"); av_ipga_volume_label[i] = (GtkLabel *)label; @@ -1491,19 +1499,19 @@ int delete_card_number(GtkWidget *delete_button) gint card_nr; gint index; - if (!(GTK_TOGGLE_BUTTON (delete_button)->active)) + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (delete_button))) return EXIT_SUCCESS; - card_nr = GTK_ADJUSTMENT (card_number_adj)->value; + card_nr = gtk_adjustment_get_value(card_number_adj); if ((card_nr < 0) || (card_nr >= MAX_CARD_NUMBERS)) { fprintf(stderr, "card number not in [0 ... %d]\n", MAX_CARD_NUMBERS - 1); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (delete_button), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (delete_button), FALSE); return -EINVAL; } res = delete_card(card_number, profiles_file_name); if (res < 0) { - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (delete_button), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (delete_button), FALSE); return res; } if (card_nr == card_number) { @@ -1513,7 +1521,7 @@ int delete_card_number(GtkWidget *delete_button) } } - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (delete_button), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (delete_button), FALSE); return EXIT_SUCCESS; } @@ -1532,18 +1540,18 @@ int save_active_profile(GtkWidget *save_button) gint res; gint index; - if (!(GTK_TOGGLE_BUTTON (save_button)->active)) + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (save_button))) return EXIT_SUCCESS; if ((index = index_active_profile()) >= 0) { res = save_restore(ALSACTL_OP_STORE, index + 1, card_number, profiles_file_name, \ gtk_entry_get_text(GTK_ENTRY (profiles_toggle_buttons[index].entry))); } else { fprintf(stderr, "No active profile found.\n"); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (save_button), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (save_button), FALSE); return -EXIT_FAILURE; } - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (save_button), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (save_button), FALSE); return res; } @@ -1554,21 +1562,21 @@ void entry_toggle_editable(GtkWidget *toggle_button, GtkWidget *entry) gint profile_number; if (active_button == toggle_button) { - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (toggle_button), TRUE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (toggle_button), TRUE); gtk_editable_set_editable(GTK_EDITABLE (entry), TRUE); gtk_widget_grab_focus(entry); return; - } else if (GTK_TOGGLE_BUTTON (toggle_button)->active) { + } else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (toggle_button))) { active_button = toggle_button; } - gtk_editable_set_editable(GTK_EDITABLE (entry), GTK_TOGGLE_BUTTON (toggle_button)->active); - if (GTK_TOGGLE_BUTTON (toggle_button)->active) { + gtk_editable_set_editable(GTK_EDITABLE (entry), gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (toggle_button))); + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (toggle_button))) { gtk_widget_grab_focus(entry); profile_number = NOTFOUND; for (index = 0; index < MAX_PROFILES; index++) { if (profiles_toggle_buttons[index].toggle_button != toggle_button) { - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (profiles_toggle_buttons[index].toggle_button), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (profiles_toggle_buttons[index].toggle_button), FALSE); } else { profile_number = index + 1; } @@ -1591,21 +1599,21 @@ static GtkWidget *toggle_button_entry(const GtkWidget *parent, const gchar *prof GtkWidget *entry_label; GtkWidget *toggle_button; - box = gtk_hbox_new(FALSE, 0); + box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); toggle_button = gtk_toggle_button_new(); - gtk_container_border_width(GTK_CONTAINER(toggle_button), 3); + gtk_container_set_border_width(GTK_CONTAINER(toggle_button), 3); profiles_toggle_buttons[index].entry = entry_label = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY (entry_label), MAX_PROFILE_NAME_LENGTH); gtk_entry_set_text(GTK_ENTRY (entry_label), profile_name); /* only the active profile can be modified */ gtk_editable_set_editable(GTK_EDITABLE (entry_label), FALSE); - gtk_signal_connect(GTK_OBJECT (entry_label), "activate", - GTK_SIGNAL_FUNC (enter_callback), + g_signal_connect(entry_label, "activate", + G_CALLBACK (enter_callback), (gpointer) entry_label); - gtk_signal_connect(GTK_OBJECT (toggle_button), "toggled", - GTK_SIGNAL_FUNC (entry_toggle_editable), + g_signal_connect(toggle_button, "toggled", + G_CALLBACK (entry_toggle_editable), (gpointer) entry_label); gtk_box_pack_start(GTK_BOX (box), entry_label, FALSE, FALSE, 20); @@ -1623,7 +1631,7 @@ static void create_profiles(GtkWidget *main, GtkWidget *notebook, int page) GtkWidget *hbox1; GtkWidget *save_button; GtkWidget *delete_button; - GtkObject *card_button_adj; + GtkAdjustment *card_button_adj; GtkWidget *card_button; GtkWidget *scrolledwindow; GtkWidget *viewport; @@ -1633,7 +1641,7 @@ static void create_profiles(GtkWidget *main, GtkWidget *notebook, int page) gint max_profiles; gint max_digits; - hbox = gtk_hbox_new(FALSE, 0); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add(GTK_CONTAINER(notebook), hbox); @@ -1651,26 +1659,25 @@ static void create_profiles(GtkWidget *main, GtkWidget *notebook, int page) viewport = gtk_viewport_new(NULL, NULL); gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport); - hbox = gtk_hbox_new(FALSE, 0); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add(GTK_CONTAINER(viewport), hbox); gtk_container_set_border_width(GTK_CONTAINER(hbox), 0); /* Create button boxes */ - vbox1 = gtk_vbutton_box_new(); + vbox1 = gtk_button_box_new(GTK_ORIENTATION_VERTICAL); - gtk_vbutton_box_set_spacing_default(0); for (index = 0; index < MAX_PROFILES; index++) { profile_name = get_profile_name(index + 1, card_number, profiles_file_name); profiles_toggle_buttons[index].toggle_button = toggle_button_entry(window, profile_name, index); gtk_box_pack_start(GTK_BOX (vbox1), profiles_toggle_buttons[index].toggle_button, FALSE, FALSE, 0); } - gtk_container_border_width(GTK_CONTAINER(vbox1), 6); + gtk_container_set_border_width(GTK_CONTAINER(vbox1), 6); - vbox2 = gtk_vbutton_box_new(); - gtk_container_border_width(GTK_CONTAINER(vbox2), 50); + vbox2 = gtk_button_box_new(GTK_ORIENTATION_VERTICAL); + gtk_container_set_border_width(GTK_CONTAINER(vbox2), 50); - hbox1 = gtk_hbox_new(FALSE, 0); + hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(vbox2), hbox1, FALSE, FALSE, 20); label_card_nr = gtk_label_new("Card Number:"); @@ -1679,25 +1686,27 @@ static void create_profiles(GtkWidget *main, GtkWidget *notebook, int page) card_button_adj = gtk_adjustment_new(16, 0, MAX_CARD_NUMBERS - 1, 1, 10, 0); card_number_adj = card_button_adj; - card_button = gtk_spin_button_new(GTK_ADJUSTMENT (card_button_adj), 1, 0); + card_button = gtk_spin_button_new(card_button_adj, 1, 0); gtk_box_pack_start(GTK_BOX (hbox1), card_button, TRUE, FALSE, 0); gtk_spin_button_set_numeric(GTK_SPIN_BUTTON (card_button), TRUE); - gtk_adjustment_set_value(GTK_ADJUSTMENT (card_button_adj), card_number); + gtk_adjustment_set_value(card_button_adj, card_number); delete_button = gtk_toggle_button_new_with_label("Delete card from profiles"); gtk_box_pack_start(GTK_BOX (vbox2), delete_button, FALSE, FALSE, 20); - gtk_signal_connect(GTK_OBJECT (delete_button), "toggled", - GTK_SIGNAL_FUNC (delete_card_number), + g_signal_connect(delete_button, "toggled", + G_CALLBACK (delete_card_number), NULL); save_button = gtk_toggle_button_new_with_label("Save active profile"); gtk_box_pack_end(GTK_BOX (vbox2), save_button, FALSE, FALSE, 20); - gtk_signal_connect(GTK_OBJECT (save_button), "toggled", - GTK_SIGNAL_FUNC (save_active_profile), + g_signal_connect(save_button, "toggled", + G_CALLBACK (save_active_profile), NULL); gtk_container_add(GTK_CONTAINER(hbox), vbox1); + gtk_widget_set_hexpand(vbox1, TRUE); gtk_container_add(GTK_CONTAINER(hbox), vbox2); + gtk_widget_set_hexpand(vbox2, TRUE); if (default_profile != NULL) { @@ -1720,7 +1729,7 @@ static void create_profiles(GtkWidget *main, GtkWidget *notebook, int page) profile_number = get_profile_number(default_profile, card_number, profiles_file_name); } if ((profile_number > 0) && (profile_number <= MAX_PROFILES)) { - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (profiles_toggle_buttons[profile_number - 1].toggle_button), TRUE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (profiles_toggle_buttons[profile_number - 1].toggle_button), TRUE); } else { fprintf(stderr, "Cannot find profile '%s' for card '%d'.\n", default_profile, card_number); } @@ -1737,11 +1746,12 @@ static void create_outer(GtkWidget *main) GtkWidget *drawing; /* Create digital mixer frame */ - vbox = gtk_vbox_new(FALSE, 1); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 1); gtk_box_pack_start(GTK_BOX(main), vbox, FALSE, FALSE, 0); label = gtk_label_new(" Rt-clk Menu >>"); - //gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + //gtk_widget_set_halign(label, GTK_ALIGN_START); + //gtk_widget_set_valign(label, GTK_ALIGN_CENTER); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 3); frame = gtk_frame_new("Digital Mixer"); gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, TRUE, 0); @@ -1749,10 +1759,10 @@ static void create_outer(GtkWidget *main) /* Create controls in the digital mixer frame */ - vbox = gtk_vbox_new(FALSE, 0); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); - hbox1 = gtk_hbox_new(FALSE, 0); + hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 6); drawing = gtk_drawing_area_new(); @@ -1760,55 +1770,37 @@ static void create_outer(GtkWidget *main) gtk_widget_set_name(drawing, "DigitalMixer"); gtk_box_pack_start(GTK_BOX(hbox1), drawing, TRUE, FALSE, 6); if (tall_equal_mixer_ht > 1 ) { - gtk_widget_set_usize(drawing, 60, 264 + 60 * (tall_equal_mixer_ht - 1)); + gtk_widget_set_size_request(drawing, 60, 264 + 60 * (tall_equal_mixer_ht - 1)); } else { - gtk_widget_set_usize(drawing, 60, 264); + gtk_widget_set_size_request(drawing, 60, 264); } - gtk_signal_connect(GTK_OBJECT(drawing), "expose_event", - (GtkSignalFunc)level_meters_expose_event, NULL); - gtk_signal_connect(GTK_OBJECT(drawing), "configure_event", - (GtkSignalFunc)level_meters_configure_event, NULL); + g_signal_connect(drawing, "draw", + G_CALLBACK(level_meters_draw_callback), NULL); gtk_widget_set_events(drawing, GDK_EXPOSURE_MASK); - hbox1 = gtk_hbox_new(TRUE, 0); + hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous(GTK_BOX(hbox1), TRUE); gtk_box_pack_start(GTK_BOX(vbox), hbox1, TRUE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox1), 6); label = gtk_label_new("Left"); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + gtk_widget_set_halign(label, GTK_ALIGN_START); + gtk_widget_set_valign(label, GTK_ALIGN_CENTER); gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, TRUE, 0); label = gtk_label_new("Right"); - gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); + gtk_widget_set_halign(label, GTK_ALIGN_END); + gtk_widget_set_valign(label, GTK_ALIGN_CENTER); gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, TRUE, 0); mixer_clear_peaks_button = gtk_button_new_with_label("Reset Peaks"); gtk_box_pack_start(GTK_BOX(vbox), mixer_clear_peaks_button, TRUE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(mixer_clear_peaks_button), 4); - gtk_signal_connect(GTK_OBJECT(mixer_clear_peaks_button), "clicked", - GTK_SIGNAL_FUNC(level_meters_reset_peaks), NULL); + g_signal_connect(mixer_clear_peaks_button, "clicked", + G_CALLBACK(level_meters_reset_peaks), NULL); }/* End create_outer */ -static void create_blank(GtkWidget *main, GtkWidget *notebook, int page) -{ -/* This is a little workaround for a problem with the pop-up menu. - For some reason the label of the last page is not accessed by the menu - so all it shows is 'page 7'. Here a blank extra page is created, unseen, - which seems to satisfy gtk, and we see the menu last page label correct. AH 12.7.2005 */ - - GtkWidget *label; - GtkWidget *hbox; - - hbox = gtk_hbox_new(FALSE, 0); - gtk_container_add(GTK_CONTAINER(notebook), hbox); - - label = gtk_label_new("Blank"); - gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), - gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), - label); -} - static void usage(void) { fprintf(stderr, "usage: envy24control [-c card#] [-D control-name] [-o num-outputs] [-i num-inputs] [-p num-pcm-outputs] [-s num-spdif-in/outs] [-v] [-f profiles-file] [profile name|profile id] [-m channel-num] [-w initial-window-width] [-t height-num]\n"); @@ -1830,6 +1822,7 @@ int main(int argc, char **argv) { GtkWidget *notebook; GtkWidget *outerbox; + GtkCssProvider *provider; char *name, tmpname[8], title[128]; int i, c, err; snd_ctl_card_info_t *hw_info; @@ -2047,19 +2040,29 @@ int main(int argc, char **argv) fprintf(stderr, "using\t --- input_channels: %i\n\t --- output_channels: %i\n\t --- pcm_output_channels: %i\n\t --- spdif in/out channels: %i\n", \ input_channels, output_channels, pcm_output_channels, spdif_channels); + /* Reduce button padding so the mixers don't get so wide */ + provider = gtk_css_provider_new(); + gtk_css_provider_load_from_data(provider, + "button { padding-left: 6px; padding-right: 6px; }", + -1, NULL); + gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), + GTK_STYLE_PROVIDER(provider), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + g_object_unref(provider); + /* Make the title */ sprintf(title, "Envy24 Control Utility %s (%s)", VERSION, snd_ctl_card_info_get_longname(hw_info)); /* Create the main window */ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), title); - gtk_signal_connect(GTK_OBJECT (window), "delete_event", - (GtkSignalFunc) gtk_main_quit, NULL); + g_signal_connect(window, "delete_event", + G_CALLBACK(gtk_main_quit), NULL); signal(SIGINT, (void *)gtk_main_quit); gtk_window_set_default_size(GTK_WINDOW(window), wwidth, 300); - outerbox = gtk_hbox_new(FALSE, 3); + outerbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3); gtk_container_add(GTK_CONTAINER(window), outerbox); create_outer(outerbox); @@ -2068,7 +2071,7 @@ int main(int argc, char **argv) notebook = gtk_notebook_new(); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), TRUE); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook)); - gtk_container_add(GTK_CONTAINER(outerbox), notebook); + gtk_box_pack_start(GTK_BOX(outerbox), notebook, TRUE, TRUE, 0); page = 0; @@ -2080,27 +2083,31 @@ int main(int argc, char **argv) create_analog_volume(outerbox, notebook, page++); create_profiles(outerbox, notebook, page++); create_about(outerbox, notebook, page++); - create_blank(outerbox, notebook, page++); npfds = snd_ctl_poll_descriptors_count(ctl); if (npfds > 0) { pfds = alloca(sizeof(*pfds) * npfds); npfds = snd_ctl_poll_descriptors(ctl, pfds, npfds); - for (i = 0; i < npfds; i++) - gdk_input_add(pfds[i].fd, - GDK_INPUT_READ, - control_input_callback, - ctl); + for (i = 0; i < npfds; i++) { + GIOChannel *channel = g_io_channel_unix_new(pfds[i].fd); + g_io_add_watch(channel, + G_IO_IN, + control_input_callback, + ctl); + g_io_channel_unref(channel); + } snd_ctl_subscribe_events(ctl, 1); } if (midi_fd >= 0) { - gdk_input_add(midi_fd, GDK_INPUT_READ, midi_process, NULL); + GIOChannel *channel = g_io_channel_unix_new(midi_fd); + g_io_add_watch(channel, G_IO_IN, midi_process, NULL); + g_io_channel_unref(channel); } - gtk_timeout_add(40, level_meters_timeout_callback, NULL); - gtk_timeout_add(100, master_clock_status_timeout_callback, NULL); - gtk_timeout_add(100, internal_clock_status_timeout_callback, NULL); - gtk_timeout_add(100, rate_locking_status_timeout_callback, NULL); - gtk_timeout_add(100, rate_reset_status_timeout_callback, NULL); + g_timeout_add(40, level_meters_timeout_callback, NULL); + g_timeout_add(100, master_clock_status_timeout_callback, NULL); + g_timeout_add(100, internal_clock_status_timeout_callback, NULL); + g_timeout_add(100, rate_locking_status_timeout_callback, NULL); + g_timeout_add(100, rate_reset_status_timeout_callback, NULL); gtk_widget_show_all(window); diff --git a/envy24control/envy24control.h b/envy24control/envy24control.h index f5c1e39..0f887e7 100644 --- a/envy24control/envy24control.h +++ b/envy24control/envy24control.h @@ -85,7 +85,7 @@ extern ice1712_eeprom_t card_eeprom; extern GtkWidget *mixer_mix_drawing; extern GtkWidget *mixer_clear_peaks_button; extern GtkWidget *mixer_drawing[20]; -extern GtkObject *mixer_adj[20][2]; +extern GtkAdjustment *mixer_adj[20][2]; extern GtkWidget *mixer_vscale[20][2]; extern GtkWidget *mixer_solo_toggle[20][2]; extern GtkWidget *mixer_mute_toggle[20][2]; @@ -108,7 +108,7 @@ extern GtkWidget *hw_master_clock_actual_rate_label; extern GtkWidget *hw_rate_locking_check; extern GtkWidget *hw_rate_reset_check; -extern GtkObject *hw_volume_change_adj; +extern GtkAdjustment *hw_volume_change_adj; extern GtkWidget *hw_volume_change_spin; extern GtkWidget *hw_spdif_profi_nonaudio_radio; @@ -151,9 +151,9 @@ extern GtkWidget *input_interface_internal; extern GtkWidget *input_interface_front_input; extern GtkWidget *input_interface_rear_input; extern GtkWidget *input_interface_wavetable; -extern GtkObject *av_dac_volume_adj[]; -extern GtkObject *av_adc_volume_adj[]; -extern GtkObject *av_ipga_volume_adj[]; +extern GtkAdjustment *av_dac_volume_adj[]; +extern GtkAdjustment *av_adc_volume_adj[]; +extern GtkAdjustment *av_ipga_volume_adj[]; extern GtkLabel *av_dac_volume_label[]; extern GtkLabel *av_adc_volume_label[]; extern GtkLabel *av_ipga_volume_label[]; @@ -163,8 +163,7 @@ extern GtkWidget *av_adc_sense_radio[][4]; /* flags */ extern int card_is_dmx6fire; -gint level_meters_configure_event(GtkWidget *widget, GdkEventConfigure *event); -gint level_meters_expose_event(GtkWidget *widget, GdkEventExpose *event); +gboolean level_meters_draw_callback(GtkWidget *widget, cairo_t *cr, gpointer data); gint level_meters_timeout_callback(gpointer data); void level_meters_reset_peaks(GtkButton *button, gpointer data); void level_meters_init(void); @@ -238,6 +237,5 @@ void ipga_volume_adjust(GtkAdjustment *adj, gpointer data); void dac_sense_toggled(GtkWidget *togglebutton, gpointer data); void adc_sense_toggled(GtkWidget *togglebutton, gpointer data); -void control_input_callback(gpointer data, gint source, GdkInputCondition condition); -void mixer_input_callback(gpointer data, gint source, GdkInputCondition condition); +gboolean control_input_callback(GIOChannel *gio, GIOCondition condition, gpointer data); diff --git a/envy24control/hardware.c b/envy24control/hardware.c index b15df56..8db95c5 100644 --- a/envy24control/hardware.c +++ b/envy24control/hardware.c @@ -39,7 +39,14 @@ static inline int is_update_needed(void); static int is_active(GtkWidget *widget) { - return GTK_TOGGLE_BUTTON(widget)->active ? 1 : 0; + return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ? 1 : 0; +} + +static void label_set(GtkWidget* widget, const char* str) +{ + const char* old = gtk_label_get_text(GTK_LABEL(widget)); + if (strcmp(old, str)) + gtk_label_set_text(GTK_LABEL(widget), str); } void master_clock_update(void) @@ -170,8 +177,8 @@ gint master_clock_status_timeout_callback(gpointer data) snd_ctl_elem_value_set_name(sw, "Word Clock Status"); if ((err = snd_ctl_elem_read(ctl, sw)) < 0) g_print("Unable to determine word clock status: %s\n", snd_strerror(err)); - gtk_label_set_text(GTK_LABEL(hw_master_clock_status_label), - snd_ctl_elem_value_get_boolean(sw, 0) ? "No signal" : "Locked"); + label_set(hw_master_clock_status_label, + snd_ctl_elem_value_get_boolean(sw, 0) ? "No signal" : "Locked"); return TRUE; } @@ -246,7 +253,7 @@ gint internal_clock_status_timeout_callback(gpointer data) } } } - gtk_label_set_text(GTK_LABEL(hw_master_clock_actual_rate_label), label); + label_set(hw_master_clock_actual_rate_label, label); return TRUE; } @@ -354,7 +361,7 @@ void volume_change_rate_adj(GtkAdjustment *adj, gpointer data) { int err; - snd_ctl_elem_value_set_integer(volume_rate, 0, adj->value); + snd_ctl_elem_value_set_integer(volume_rate, 0, gtk_adjustment_get_value(adj)); if ((err = snd_ctl_elem_write(ctl, volume_rate)) < 0) g_print("Unable to write volume change rate: %s\n", snd_strerror(err)); } @@ -598,7 +605,7 @@ void spdif_output_toggled(GtkWidget *togglebutton, gpointer data) page = 1; } spdif_output_write(); - gtk_notebook_set_page(GTK_NOTEBOOK(hw_spdif_output_notebook), page); + gtk_notebook_set_current_page(GTK_NOTEBOOK(hw_spdif_output_notebook), page); spdif_output_update(); } } diff --git a/envy24control/levelmeters.c b/envy24control/levelmeters.c index 5933721..c053995 100644 --- a/envy24control/levelmeters.c +++ b/envy24control/levelmeters.c @@ -19,13 +19,13 @@ #include "envy24control.h" -static GdkGC *penGreenShadow[21] = { NULL, }; -static GdkGC *penGreenLight[21] = { NULL, }; -static GdkGC *penOrangeShadow[21] = { NULL, }; -static GdkGC *penOrangeLight[21] = { NULL, }; -static GdkGC *penRedShadow[21] = { NULL, }; -static GdkGC *penRedLight[21] = { NULL, }; -static GdkPixmap *pixmap[21] = { NULL, }; +static GdkRGBA *penGreenShadow = NULL; +static GdkRGBA *penGreenLight = NULL; +static GdkRGBA *penOrangeShadow = NULL; +static GdkRGBA *penOrangeLight = NULL; +static GdkRGBA *penRedShadow = NULL; +static GdkRGBA *penRedLight = NULL; +static int level[22] = { 0 }; static snd_ctl_elem_value_t *peaks; extern int input_channels, output_channels, pcm_output_channels, spdif_channels, view_spdif_playback; @@ -50,19 +50,16 @@ static void get_levels(int idx, int *l1, int *l2) } } -static GdkGC *get_pen(int idx, int nRed, int nGreen, int nBlue) +static GdkRGBA *get_pen(int nRed, int nGreen, int nBlue) { - GdkColor *c; - GdkGC *gc; + GdkRGBA *c; - c = (GdkColor *)g_malloc(sizeof(GdkColor)); - c->red = nRed; - c->green = nGreen; - c->blue = nBlue; - gdk_color_alloc(gdk_colormap_get_system(), c); - gc = gdk_gc_new(pixmap[idx]); - gdk_gc_set_foreground(gc, c); - return gc; + c = (GdkRGBA *)g_malloc(sizeof(GdkRGBA)); + c->red = nRed / 65535.0; + c->green = nGreen / 65535.0; + c->blue = nBlue / 65535.0; + c->alpha = 1.0; + return c; } static int get_index(const gchar *name) @@ -79,7 +76,7 @@ static int get_index(const gchar *name) return result; } -static void redraw_meters(int idx, int width, int height, int level1, int level2) +static void redraw_meters(int idx, int width, int height, int level1, int level2, cairo_t *cr) { int stereo = idx == 0; int segment_width = stereo ? (width / 2) - 8 : width - 12; @@ -90,167 +87,156 @@ static void redraw_meters(int idx, int width, int height, int level1, int level2 int seg; int segs_on1 = ((segments * level1) + 128) / 255; int segs_on2 = ((segments * level2) + 128) / 255; + int end_seg; + GdkRectangle clip; // g_print("segs_on1 = %i (%i), segs_on2 = %i (%i)\n", segs_on1, level1, segs_on2, level2); - for (seg = 0; seg < green_segments; seg++) { - gdk_draw_rectangle(pixmap[idx], - segs_on1 > 0 ? penGreenLight[idx] : penGreenShadow[idx], - TRUE, - 6, 3 + ((segments - seg - 1) * 4), - segment_width, - 3); - if (stereo) - gdk_draw_rectangle(pixmap[idx], - segs_on2 > 0 ? penGreenLight[idx] : penGreenShadow[idx], - TRUE, - 2 + (width / 2), - 3 + ((segments - seg - 1) * 4), - segment_width, - 3); + cairo_rectangle(cr, 0, 0, width, height); + cairo_fill(cr); + + gdk_cairo_get_clip_rectangle(cr, &clip); + seg = segments - (clip.y + clip.height) / 4; + if (seg < 0) + seg = 0; + segs_on1 -= seg; + segs_on2 -= seg; + end_seg = segments - (clip.y - 2) / 4; + + for (; seg < green_segments && seg < end_seg; seg++) { + gdk_cairo_set_source_rgba(cr, + segs_on1 > 0 ? penGreenLight : penGreenShadow); + cairo_rectangle(cr, + 6, 3 + ((segments - seg - 1) * 4), + segment_width, + 3); + cairo_fill(cr); + if (stereo) { + gdk_cairo_set_source_rgba(cr, + segs_on2 > 0 ? penGreenLight : penGreenShadow); + cairo_rectangle(cr, + 2 + (width / 2), + 3 + ((segments - seg - 1) * 4), + segment_width, + 3); + cairo_fill(cr); + } segs_on1--; segs_on2--; } - for (seg = green_segments; seg < green_segments + orange_segments; seg++) { - gdk_draw_rectangle(pixmap[idx], - segs_on1 > 0 ? penOrangeLight[idx] : penOrangeShadow[idx], - TRUE, - 6, 3 + ((segments - seg - 1) * 4), - segment_width, - 3); - if (stereo) - gdk_draw_rectangle(pixmap[idx], - segs_on2 > 0 ? penOrangeLight[idx] : penOrangeShadow[idx], - TRUE, - 2 + (width / 2), - 3 + ((segments - seg - 1) * 4), - segment_width, - 3); + for (; seg < green_segments + orange_segments && seg < end_seg; seg++) { + gdk_cairo_set_source_rgba(cr, + segs_on1 > 0 ? penOrangeLight : penOrangeShadow); + cairo_rectangle(cr, + 6, 3 + ((segments - seg - 1) * 4), + segment_width, + 3); + cairo_fill(cr); + if (stereo) { + gdk_cairo_set_source_rgba(cr, + segs_on2 > 0 ? penOrangeLight : penOrangeShadow); + cairo_rectangle(cr, + 2 + (width / 2), + 3 + ((segments - seg - 1) * 4), + segment_width, + 3); + cairo_fill(cr); + } segs_on1--; segs_on2--; } - for (seg = green_segments + orange_segments; seg < segments; seg++) { - gdk_draw_rectangle(pixmap[idx], - segs_on1 > 0 ? penRedLight[idx] : penRedShadow[idx], - TRUE, - 6, 3 + ((segments - seg - 1) * 4), - segment_width, - 3); - if (stereo) - gdk_draw_rectangle(pixmap[idx], - segs_on2 > 0 ? penRedLight[idx] : penRedShadow[idx], - TRUE, - 2 + (width / 2), - 3 + ((segments - seg - 1) * 4), - segment_width, - 3); + for (; seg < segments && seg < end_seg; seg++) { + gdk_cairo_set_source_rgba(cr, + segs_on1 > 0 ? penRedLight : penRedShadow); + cairo_rectangle(cr, + 6, 3 + ((segments - seg - 1) * 4), + segment_width, + 3); + cairo_fill(cr); + if (stereo) { + gdk_cairo_set_source_rgba(cr, + segs_on2 > 0 ? penRedLight : penRedShadow); + cairo_rectangle(cr, + 2 + (width / 2), + 3 + ((segments - seg - 1) * 4), + segment_width, + 3); + cairo_fill(cr); + } segs_on1--; segs_on2--; } } -gint level_meters_configure_event(GtkWidget *widget, GdkEventConfigure *event) -{ - int idx = get_index(gtk_widget_get_name(widget)); - - if (pixmap[idx] != NULL) - gdk_pixmap_unref(pixmap[idx]); - pixmap[idx] = gdk_pixmap_new(widget->window, - widget->allocation.width, - widget->allocation.height, - -1); - penGreenShadow[idx] = get_pen(idx, 0, 0x77ff, 0); - penGreenLight[idx] = get_pen(idx, 0, 0xffff, 0); - penOrangeShadow[idx] = get_pen(idx, 0xddff, 0x55ff, 0); - penOrangeLight[idx] = get_pen(idx, 0xffff, 0x99ff, 0); - penRedShadow[idx] = get_pen(idx, 0xaaff, 0, 0); - penRedLight[idx] = get_pen(idx, 0xffff, 0, 0); - gdk_draw_rectangle(pixmap[idx], - widget->style->black_gc, - TRUE, - 0, 0, - widget->allocation.width, - widget->allocation.height); - // g_print("configure: %i:%i\n", widget->allocation.width, widget->allocation.height); - redraw_meters(idx, widget->allocation.width, widget->allocation.height, 0, 0); - return TRUE; -} - -gint level_meters_expose_event(GtkWidget *widget, GdkEventExpose *event) +gboolean level_meters_draw_callback(GtkWidget *widget, cairo_t *cr, gpointer data) { int idx = get_index(gtk_widget_get_name(widget)); int l1, l2; get_levels(idx, &l1, &l2); - redraw_meters(idx, widget->allocation.width, widget->allocation.height, l1, l2); - gdk_draw_pixmap(widget->window, - widget->style->black_gc, - pixmap[idx], - event->area.x, event->area.y, - event->area.x, event->area.y, - event->area.width, event->area.height); + redraw_meters(idx, gtk_widget_get_allocated_width(widget), gtk_widget_get_allocated_height(widget), l1, l2, cr); return FALSE; } +static void update_meter(int idx) +{ + int stereo = idx == 0; + GtkWidget *widget = stereo ? mixer_mix_drawing : mixer_drawing[idx - 1]; + int width = gtk_widget_get_allocated_width(widget); + int height = gtk_widget_get_allocated_height(widget); + int segments = (height - 6) / 4; + int level_idx = stereo ? 20 : idx - 1; + int l1, l2, segs_on, old_segs_on, h; + + get_levels(idx, &l1, &l2); + segs_on = ((segments * l1) + 128) / 255; + old_segs_on = ((segments * level[level_idx]) + 128) / 255; + h = abs(old_segs_on - segs_on); + level[level_idx] = l1; + + if (h > 0) { + int y = segments - MAX(old_segs_on, segs_on); + gtk_widget_queue_draw_area(widget, + 6, 4 * y + 3, + stereo ? (width / 2) - 8 : width - 12, + 4 * h - 1); + } + + if (stereo) { + level_idx++; + segs_on = ((segments * l2) + 128) / 255; + old_segs_on = ((segments * level[level_idx]) + 128) / 255; + h = abs(old_segs_on - segs_on); + level[level_idx] = l2; + + if (h > 0) { + int y = segments - MAX(old_segs_on, segs_on); + gtk_widget_queue_draw_area(widget, + 2 + (width / 2), 4 * y + 3, + (width / 2) - 8, + 4 * h - 1); + } + } +} + gint level_meters_timeout_callback(gpointer data) { - GtkWidget *widget; - int idx, l1, l2; + int idx; update_peak_switch(); for (idx = 0; idx <= pcm_output_channels; idx++) { - get_levels(idx, &l1, &l2); - widget = idx == 0 ? mixer_mix_drawing : mixer_drawing[idx-1]; - if (GTK_WIDGET_VISIBLE(widget) && (pixmap[idx] != NULL)) { - redraw_meters(idx, widget->allocation.width, widget->allocation.height, l1, l2); - gdk_draw_pixmap(widget->window, - widget->style->black_gc, - pixmap[idx], - 0, 0, - 0, 0, - widget->allocation.width, widget->allocation.height); - } + update_meter(idx); } if (view_spdif_playback) { for (idx = MAX_PCM_OUTPUT_CHANNELS + 1; idx <= MAX_OUTPUT_CHANNELS + spdif_channels; idx++) { - get_levels(idx, &l1, &l2); - widget = idx == 0 ? mixer_mix_drawing : mixer_drawing[idx-1]; - if (GTK_WIDGET_VISIBLE(widget) && (pixmap[idx] != NULL)) { - redraw_meters(idx, widget->allocation.width, widget->allocation.height, l1, l2); - gdk_draw_pixmap(widget->window, - widget->style->black_gc, - pixmap[idx], - 0, 0, - 0, 0, - widget->allocation.width, widget->allocation.height); - } + update_meter(idx); } } for (idx = MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + 1; idx <= input_channels + MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS; idx++) { - get_levels(idx, &l1, &l2); - widget = idx == 0 ? mixer_mix_drawing : mixer_drawing[idx-1]; - if (GTK_WIDGET_VISIBLE(widget) && (pixmap[idx] != NULL)) { - redraw_meters(idx, widget->allocation.width, widget->allocation.height, l1, l2); - gdk_draw_pixmap(widget->window, - widget->style->black_gc, - pixmap[idx], - 0, 0, - 0, 0, - widget->allocation.width, widget->allocation.height); - } + update_meter(idx); } for (idx = MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + MAX_INPUT_CHANNELS + 1; \ idx <= spdif_channels + MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + MAX_INPUT_CHANNELS; idx++) { - get_levels(idx, &l1, &l2); - widget = idx == 0 ? mixer_mix_drawing : mixer_drawing[idx-1]; - if (GTK_WIDGET_VISIBLE(widget) && (pixmap[idx] != NULL)) { - redraw_meters(idx, widget->allocation.width, widget->allocation.height, l1, l2); - gdk_draw_pixmap(widget->window, - widget->style->black_gc, - pixmap[idx], - 0, 0, - 0, 0, - widget->allocation.width, widget->allocation.height); - } + update_meter(idx); } return TRUE; } @@ -270,6 +256,13 @@ void level_meters_init(void) /* older ALSA driver, using MIXER type */ snd_ctl_elem_value_set_interface(peaks, SND_CTL_ELEM_IFACE_MIXER); + + penGreenShadow = get_pen(0, 0x77ff, 0); + penGreenLight = get_pen(0, 0xffff, 0); + penOrangeShadow = get_pen(0xddff, 0x55ff, 0); + penOrangeLight = get_pen(0xffff, 0x99ff, 0); + penRedShadow = get_pen(0xaaff, 0, 0); + penRedLight = get_pen(0xffff, 0, 0); } void level_meters_postinit(void) diff --git a/envy24control/midi.c b/envy24control/midi.c index ff12537..dce8d46 100644 --- a/envy24control/midi.c +++ b/envy24control/midi.c @@ -243,7 +243,7 @@ int midi_init(char *appname, int channel, int midi_enhanced) void mixer_adjust(GtkAdjustment *adj, gpointer data); void mixer_set_mute(int stream, int left, int right); -void midi_process(gpointer data, gint source, GdkInputCondition condition) +gboolean midi_process(GIOChannel *gio, GIOCondition condition, gpointer data) { snd_seq_event_t *ev; static GtkAdjustment *adj=0; @@ -306,6 +306,7 @@ void midi_process(gpointer data, gint source, GdkInputCondition condition) snd_seq_free_event(ev); } while (snd_seq_event_input_pending(seq, 0) > 0); + return TRUE; } /* ************************************************* */ diff --git a/envy24control/midi.h b/envy24control/midi.h index f821d42..b71eafd 100644 --- a/envy24control/midi.h +++ b/envy24control/midi.h @@ -7,7 +7,7 @@ int midi_init(char *appname, int channel, int midi_enhanced); int midi_close(); void midi_maxstreams(int); int midi_controller(int c, int v); -void midi_process(gpointer data, gint source, GdkInputCondition condition); +gboolean midi_process(GIOChannel *gio, GIOCondition condition, gpointer data); int midi_button(int b, int v); #endif diff --git a/envy24control/mixer.c b/envy24control/mixer.c index dd42681..46171cc 100644 --- a/envy24control/mixer.c +++ b/envy24control/mixer.c @@ -39,7 +39,7 @@ extern int input_channels, output_channels, pcm_output_channels, spdif_channels, static int is_active(GtkWidget *widget) { - return GTK_TOGGLE_BUTTON(widget)->active ? 1 : 0; + return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ? 1 : 0; } void mixer_update_stream(int stream, int vol_flag, int sw_flag) @@ -181,10 +181,10 @@ void mixer_adjust(GtkAdjustment *adj, gpointer data) int stereo = is_active(mixer_stereo_toggle[stream-1]) ? 1 : 0; int vol[2] = { -1, -1 }; - vol[button] = 96 - adj->value; + vol[button] = 96 - gtk_adjustment_get_value(adj); if (stereo) { - gtk_adjustment_set_value(GTK_ADJUSTMENT(mixer_adj[stream-1][button ^ 1]), adj->value); - vol[button ^ 1] = 96 - adj->value; + gtk_adjustment_set_value(GTK_ADJUSTMENT(mixer_adj[stream-1][button ^ 1]), gtk_adjustment_get_value(adj)); + vol[button ^ 1] = 96 - gtk_adjustment_get_value(adj); } set_volume1(stream, vol[0], vol[1]); } diff --git a/envy24control/patchbay.c b/envy24control/patchbay.c index 89bdf72..57ddf13 100644 --- a/envy24control/patchbay.c +++ b/envy24control/patchbay.c @@ -30,7 +30,7 @@ extern int output_channels, input_channels, pcm_output_channels, spdif_channels; static int is_active(GtkWidget *widget) { - return GTK_TOGGLE_BUTTON(widget)->active ? 1 : 0; + return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ? 1 : 0; } static int get_toggle_index(int stream) diff --git a/envy24control/volume.c b/envy24control/volume.c index 471f9ce..b071ad6 100644 --- a/envy24control/volume.c +++ b/envy24control/volume.c @@ -217,7 +217,7 @@ void dac_volume_adjust(GtkAdjustment *adj, gpointer data) { int idx = (int)(long)data; snd_ctl_elem_value_t *val; - int err, ival = -(int)adj->value; + int err, ival = -(int)gtk_adjustment_get_value(adj); char text[16]; snd_ctl_elem_value_alloca(&val); @@ -235,7 +235,7 @@ void adc_volume_adjust(GtkAdjustment *adj, gpointer data) { int idx = (int)(long)data; snd_ctl_elem_value_t *val; - int err, ival = -(int)adj->value; + int err, ival = -(int)gtk_adjustment_get_value(adj); char text[16]; snd_ctl_elem_value_alloca(&val); @@ -253,7 +253,7 @@ void ipga_volume_adjust(GtkAdjustment *adj, gpointer data) { int idx = (int)(long)data; snd_ctl_elem_value_t *val; - int err, ival = -(int)adj->value; + int err, ival = -(int)gtk_adjustment_get_value(adj); char text[16]; snd_ctl_elem_value_alloca(&val); From 187eeecd1442a3f867bc62c19ff3d950163dac43 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 14 Apr 2025 10:26:23 +0200 Subject: [PATCH 166/166] Release v1.2.14 Signed-off-by: Jaroslav Kysela --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 1b3d4ab..1a94611 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION = 1.2.11 +VERSION = 1.2.14 TOP = . SUBDIRS = as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \