[pkg-nvidia-devel] r509 - in /packages/nvidia-settings/trunk: ./ debian/ doc/ samples/ src/ src/XF86Config-parser/ src/gtk+-2.x/ src/image_data/ src/libXNVCtrl/ src/libXNVCtrlAttributes/

rdonald at users.alioth.debian.org rdonald at users.alioth.debian.org
Sun Jan 11 05:41:48 UTC 2009


Author: rdonald
Date: Sun Jan 11 05:41:46 2009
New Revision: 509

URL: http://svn.debian.org/wsvn/pkg-nvidia/?sc=1&rev=509
Log:
prepare 180.22

Added:
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkslimm.c
      - copied unchanged from r508, packages/nvidia-settings/branches/upstream/current/src/gtk+-2.x/ctkslimm.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkslimm.h
      - copied unchanged from r508, packages/nvidia-settings/branches/upstream/current/src/gtk+-2.x/ctkslimm.h
    packages/nvidia-settings/trunk/src/image_data/bnc_cable_pixdata.h
      - copied unchanged from r508, packages/nvidia-settings/branches/upstream/current/src/image_data/bnc_cable_pixdata.h
    packages/nvidia-settings/trunk/src/image_data/led_green_pixdata.h
      - copied unchanged from r508, packages/nvidia-settings/branches/upstream/current/src/image_data/led_green_pixdata.h
    packages/nvidia-settings/trunk/src/image_data/led_grey_pixdata.h
      - copied unchanged from r508, packages/nvidia-settings/branches/upstream/current/src/image_data/led_grey_pixdata.h
    packages/nvidia-settings/trunk/src/image_data/led_red_pixdata.h
      - copied unchanged from r508, packages/nvidia-settings/branches/upstream/current/src/image_data/led_red_pixdata.h
    packages/nvidia-settings/trunk/src/image_data/png_to_c_header.sh
      - copied unchanged from r508, packages/nvidia-settings/branches/upstream/current/src/image_data/png_to_c_header.sh
    packages/nvidia-settings/trunk/src/image_data/rj45_input_pixdata.h
      - copied unchanged from r508, packages/nvidia-settings/branches/upstream/current/src/image_data/rj45_input_pixdata.h
    packages/nvidia-settings/trunk/src/image_data/rj45_output_pixdata.h
      - copied unchanged from r508, packages/nvidia-settings/branches/upstream/current/src/image_data/rj45_output_pixdata.h
    packages/nvidia-settings/trunk/src/image_data/rj45_unused_pixdata.h
      - copied unchanged from r508, packages/nvidia-settings/branches/upstream/current/src/image_data/rj45_unused_pixdata.h
    packages/nvidia-settings/trunk/src/image_data/rotate_left_off_pixdata.h
      - copied unchanged from r508, packages/nvidia-settings/branches/upstream/current/src/image_data/rotate_left_off_pixdata.h
    packages/nvidia-settings/trunk/src/image_data/rotate_left_on_pixdata.h
      - copied unchanged from r508, packages/nvidia-settings/branches/upstream/current/src/image_data/rotate_left_on_pixdata.h
    packages/nvidia-settings/trunk/src/image_data/rotate_right_off_pixdata.h
      - copied unchanged from r508, packages/nvidia-settings/branches/upstream/current/src/image_data/rotate_right_off_pixdata.h
    packages/nvidia-settings/trunk/src/image_data/rotate_right_on_pixdata.h
      - copied unchanged from r508, packages/nvidia-settings/branches/upstream/current/src/image_data/rotate_right_on_pixdata.h
    packages/nvidia-settings/trunk/src/image_data/rotation_orientation_horz_pixdata.h
      - copied unchanged from r508, packages/nvidia-settings/branches/upstream/current/src/image_data/rotation_orientation_horz_pixdata.h
    packages/nvidia-settings/trunk/src/image_data/rotation_orientation_vert_pixdata.h
      - copied unchanged from r508, packages/nvidia-settings/branches/upstream/current/src/image_data/rotation_orientation_vert_pixdata.h
    packages/nvidia-settings/trunk/src/image_data/slimm_pixdata.h
      - copied unchanged from r508, packages/nvidia-settings/branches/upstream/current/src/image_data/slimm_pixdata.h
    packages/nvidia-settings/trunk/src/lscf.c
      - copied unchanged from r508, packages/nvidia-settings/branches/upstream/current/src/lscf.c
    packages/nvidia-settings/trunk/src/lscf.h
      - copied unchanged from r508, packages/nvidia-settings/branches/upstream/current/src/lscf.h
Removed:
    packages/nvidia-settings/trunk/samples/nv-ddcci-client.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkimage.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkimage.h
    packages/nvidia-settings/trunk/src/image_data/bnc_cable.h
    packages/nvidia-settings/trunk/src/image_data/image.c
    packages/nvidia-settings/trunk/src/image_data/image.h
    packages/nvidia-settings/trunk/src/image_data/led_green.h
    packages/nvidia-settings/trunk/src/image_data/led_grey.h
    packages/nvidia-settings/trunk/src/image_data/led_red.h
    packages/nvidia-settings/trunk/src/image_data/rj45_input.h
    packages/nvidia-settings/trunk/src/image_data/rj45_output.h
    packages/nvidia-settings/trunk/src/image_data/rj45_unused.h
    packages/nvidia-settings/trunk/src/image_data/rotate_left_off.h
    packages/nvidia-settings/trunk/src/image_data/rotate_left_on.h
    packages/nvidia-settings/trunk/src/image_data/rotate_right_off.h
    packages/nvidia-settings/trunk/src/image_data/rotate_right_on.h
    packages/nvidia-settings/trunk/src/image_data/rotation_orientation_horiz.h
    packages/nvidia-settings/trunk/src/image_data/rotation_orientation_horiz_flipped.h
    packages/nvidia-settings/trunk/src/image_data/rotation_orientation_vert.h
    packages/nvidia-settings/trunk/src/image_data/rotation_orientation_vert_flipped.h
Modified:
    packages/nvidia-settings/trunk/Makefile
    packages/nvidia-settings/trunk/debian/changelog
    packages/nvidia-settings/trunk/doc/nvidia-settings.1.m4
    packages/nvidia-settings/trunk/samples/Makefile
    packages/nvidia-settings/trunk/samples/Makefile.inc
    packages/nvidia-settings/trunk/samples/README
    packages/nvidia-settings/trunk/samples/nv-control-dpy.c
    packages/nvidia-settings/trunk/samples/nv-control-dvc.c
    packages/nvidia-settings/trunk/samples/nv-control-events.c
    packages/nvidia-settings/trunk/samples/nv-control-framelock.c
    packages/nvidia-settings/trunk/samples/nv-control-info.c
    packages/nvidia-settings/trunk/samples/nv-control-targets.c
    packages/nvidia-settings/trunk/src/Makefile.inc
    packages/nvidia-settings/trunk/src/XF86Config-parser/Configint.h
    packages/nvidia-settings/trunk/src/XF86Config-parser/DRI.c
    packages/nvidia-settings/trunk/src/XF86Config-parser/Device.c
    packages/nvidia-settings/trunk/src/XF86Config-parser/Extensions.c
    packages/nvidia-settings/trunk/src/XF86Config-parser/Files.c
    packages/nvidia-settings/trunk/src/XF86Config-parser/Flags.c
    packages/nvidia-settings/trunk/src/XF86Config-parser/Generate.c
    packages/nvidia-settings/trunk/src/XF86Config-parser/Input.c
    packages/nvidia-settings/trunk/src/XF86Config-parser/Keyboard.c
    packages/nvidia-settings/trunk/src/XF86Config-parser/Layout.c
    packages/nvidia-settings/trunk/src/XF86Config-parser/Merge.c
    packages/nvidia-settings/trunk/src/XF86Config-parser/Module.c
    packages/nvidia-settings/trunk/src/XF86Config-parser/Monitor.c
    packages/nvidia-settings/trunk/src/XF86Config-parser/Pointer.c
    packages/nvidia-settings/trunk/src/XF86Config-parser/Read.c
    packages/nvidia-settings/trunk/src/XF86Config-parser/Screen.c
    packages/nvidia-settings/trunk/src/XF86Config-parser/Vendor.c
    packages/nvidia-settings/trunk/src/XF86Config-parser/Video.c
    packages/nvidia-settings/trunk/src/XF86Config-parser/xf86Parser.h
    packages/nvidia-settings/trunk/src/command-line.c
    packages/nvidia-settings/trunk/src/config-file.c
    packages/nvidia-settings/trunk/src/glxinfo.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/Makefile.inc
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkbanner.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkbanner.h
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkclocks.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkcolorcorrection.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkcolorcorrection.h
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkconfig.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkconfig.h
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkcursorshadow.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplayconfig-utils.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplayconfig-utils.h
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplayconfig.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplayconfig.h
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplaydevice-crt.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplaydevice-dfp.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplaydevice-tv.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplaylayout.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplaylayout.h
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdropdownmenu.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdropdownmenu.h
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkevent.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkframelock.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkframelock.h
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkglx.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgpu.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgpu.h
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo-banner.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo-csc.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo-csc.h
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo-sync.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo.h
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkhelp.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkimagesliders.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkmultisample.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkopengl.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkopengl.h
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkpowermizer.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkpowersavings.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkrandr.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkscreen.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkserver.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkthermal.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkui.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkui.h
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkvcs.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkvcs.h
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkwindow.c
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkwindow.h
    packages/nvidia-settings/trunk/src/gtk+-2.x/ctkxvideo.c
    packages/nvidia-settings/trunk/src/image_data/HOWTO-ADD-IMAGES
    packages/nvidia-settings/trunk/src/image_data/Makefile.inc
    packages/nvidia-settings/trunk/src/image_data/logo_pixdata.h
    packages/nvidia-settings/trunk/src/image_data/logo_tall_pixdata.h
    packages/nvidia-settings/trunk/src/image_data/nvidia_icon_pixdata.h
    packages/nvidia-settings/trunk/src/image_data/sdi_shared_sync_bnc_pixdata.h
    packages/nvidia-settings/trunk/src/libXNVCtrl/Makefile
    packages/nvidia-settings/trunk/src/libXNVCtrl/Makefile.inc
    packages/nvidia-settings/trunk/src/libXNVCtrl/NVCtrl.c
    packages/nvidia-settings/trunk/src/libXNVCtrl/NVCtrl.h
    packages/nvidia-settings/trunk/src/libXNVCtrl/NVCtrlLib.h
    packages/nvidia-settings/trunk/src/libXNVCtrl/nv_control.h
    packages/nvidia-settings/trunk/src/libXNVCtrlAttributes/NvCtrlAttributes.c
    packages/nvidia-settings/trunk/src/libXNVCtrlAttributes/NvCtrlAttributes.h
    packages/nvidia-settings/trunk/src/libXNVCtrlAttributes/NvCtrlAttributesGlx.c
    packages/nvidia-settings/trunk/src/libXNVCtrlAttributes/NvCtrlAttributesNvControl.c
    packages/nvidia-settings/trunk/src/nvidia-settings.c
    packages/nvidia-settings/trunk/src/parse.c
    packages/nvidia-settings/trunk/src/parse.h
    packages/nvidia-settings/trunk/src/query-assign.c

Modified: packages/nvidia-settings/trunk/Makefile
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/Makefile?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/Makefile (original)
+++ packages/nvidia-settings/trunk/Makefile Sun Jan 11 05:41:46 2009
@@ -1,7 +1,6 @@
 DESTDIR=
 ROOT=$(DESTDIR)
 X11R6_LIB_DIR = /usr/lib
-
 #
 # nvidia-settings: A tool for configuring the NVIDIA X driver on Unix
 # and Linux systems.

Modified: packages/nvidia-settings/trunk/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/debian/changelog?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/debian/changelog (original)
+++ packages/nvidia-settings/trunk/debian/changelog Sun Jan 11 05:41:46 2009
@@ -1,3 +1,9 @@
+nvidia-settings (180.22-1) UNRELEASED; urgency=low
+
+  * (NOT RELEASED YET) New upstream release
+
+ -- Randall Donald <rdonald at debian.org>  Sat, 10 Jan 2009 20:14:09 -0800
+
 nvidia-settings (173.14.09-1) unstable; urgency=low
 
   * New upstream release

Modified: packages/nvidia-settings/trunk/doc/nvidia-settings.1.m4
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/doc/nvidia-settings.1.m4?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/doc/nvidia-settings.1.m4 (original)
+++ packages/nvidia-settings/trunk/doc/nvidia-settings.1.m4 Sun Jan 11 05:41:46 2009
@@ -27,6 +27,8 @@
 .BI "[-vh] [\-\-config=" configfile "] [\-c " ctrl-display "]"
 .br
 .I "         \fB[\-\-verbose=\fP{\fIerrors \fP|\fI warnings \fP|\fI all\fP}\fB]"
+.br
+.I "         \fB[\-\-describe=\fP{\fIall \fP|\fI list \fP|\fI attribute_name\fP}\fB]"
 .PP
 .I attr
 has the form:
@@ -193,6 +195,9 @@
 .TP
 .B \-g, \-\-glxinfo
 Print GLX Information for the X display and exit.
+.TP
+.B \-e, \-\-describe
+Prints information about a particular attribute.  Specify 'all' to list the descriptions of all attributes.  Specify 'list' to list the attribute names without a descriptions.
 .SH "USER GUIDE"
 .SS Contents
 1.	Layout of the nvidia\-settings GUI
@@ -578,12 +583,6 @@
 some of which include:
 .TP
 -
-configurability of TwinView (NVIDIA is planning to implement this)
-.TP
--
-configurability of multiple X screens (NVIDIA is planning to implement this)
-.TP
--
 different toolkits?
 The GUI for
 .B nvidia\-settings

Modified: packages/nvidia-settings/trunk/samples/Makefile
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/samples/Makefile?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/samples/Makefile (original)
+++ packages/nvidia-settings/trunk/samples/Makefile Sun Jan 11 05:41:46 2009
@@ -1,28 +1,27 @@
 #
-# nvidia-settings: A tool for configuring the NVIDIA X driver on Unix
+# NV-CONTROL samples: Sample tools for configuring the NVIDIA X driver on Unix
 # and Linux systems.
 #
-# Copyright (C) 2004 NVIDIA Corporation.
+# Copyright (c) 2004-2008 NVIDIA, Corporation
 #
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of Version 2 of the GNU General Public
-# License as published by the Free Software Foundation.
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
 #
-# 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 Version 2
-# of the GNU General Public License for more details.
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
 #
-# 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
-#
-
-#
-# Makefile for Sample NV-CONTROL clients
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
 #
 
 # Below are variables that users can override, either here or on the
@@ -72,7 +71,6 @@
 	nv-control-info \
 	nv-control-dvc \
 	nv-control-events \
-	nv-ddcci-client \
 	nv-control-dpy \
 	nv-control-targets \
 	nv-control-framelock

Modified: packages/nvidia-settings/trunk/samples/Makefile.inc
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/samples/Makefile.inc?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/samples/Makefile.inc (original)
+++ packages/nvidia-settings/trunk/samples/Makefile.inc Sun Jan 11 05:41:46 2009
@@ -1,28 +1,27 @@
 #
-# nvidia-settings: A tool for configuring the NVIDIA X driver on Unix
+# NV-CONTROL samples: Sample tools for configuring the NVIDIA X driver on Unix
 # and Linux systems.
 #
-# Copyright (C) 2004 NVIDIA Corporation.
+# Copyright (c) 2004-2008 NVIDIA, Corporation
 #
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of Version 2 of the GNU General Public
-# License as published by the Free Software Foundation.
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
 #
-# 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 Version 2
-# of the GNU General Public License for more details.
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
 #
-# 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
-#
-
-#
-# Sample code
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
 #
 
 EXTRA_DIST += \
@@ -33,7 +32,6 @@
 	nv-control-dpy.c \
 	nv-control-info.c \
 	nv-control-events.c \
-	nv-ddcci-client.c \
 	nv-control-targets.c \
         nv-control-framelock.c
 

Modified: packages/nvidia-settings/trunk/samples/README
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/samples/README?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/samples/README (original)
+++ packages/nvidia-settings/trunk/samples/README Sun Jan 11 05:41:46 2009
@@ -22,9 +22,6 @@
     nv-control-events: demonstrates how to register to receive and
                        interpret NV-CONTROL events.
 
-    nv-ddcci-client: demonstrates how to use the implementation of the 
-                     DDC/CI interface with the NV-CONTROL X extension.
-
     nv-control-dpy: demonstrates how to configure display devices
                     using the NV-CONTROL X extension.
 

Modified: packages/nvidia-settings/trunk/samples/nv-control-dpy.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/samples/nv-control-dpy.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/samples/nv-control-dpy.c (original)
+++ packages/nvidia-settings/trunk/samples/nv-control-dpy.c Sun Jan 11 05:41:46 2009
@@ -1,25 +1,24 @@
 /*
- * nvidia-settings: A tool for configuring the NVIDIA X driver on Unix
- * and Linux systems.
+ * Copyright (c) 2006-2008 NVIDIA, Corporation
  *
- * Copyright (C) 2006 NVIDIA Corporation.
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
  *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of Version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
  *
- * 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 Version 2
- * of 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
- *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
  */
 
 

Modified: packages/nvidia-settings/trunk/samples/nv-control-dvc.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/samples/nv-control-dvc.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/samples/nv-control-dvc.c (original)
+++ packages/nvidia-settings/trunk/samples/nv-control-dvc.c Sun Jan 11 05:41:46 2009
@@ -1,25 +1,24 @@
 /*
- * nvidia-settings: A tool for configuring the NVIDIA X driver on Unix
- * and Linux systems.
- *
- * Copyright (C) 2004 NVIDIA Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of Version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * 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 Version 2
- * of 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
- *
+ * Copyright (c) 2004 NVIDIA, Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
  */
 
 /*

Modified: packages/nvidia-settings/trunk/samples/nv-control-events.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/samples/nv-control-events.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/samples/nv-control-events.c (original)
+++ packages/nvidia-settings/trunk/samples/nv-control-events.c Sun Jan 11 05:41:46 2009
@@ -1,25 +1,24 @@
 /*
- * nvidia-settings: A tool for configuring the NVIDIA X driver on Unix
- * and Linux systems.
+ * Copyright (c) 2004-2008 NVIDIA, Corporation
  *
- * Copyright (C) 2004 NVIDIA Corporation.
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
  *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of Version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
  *
- * 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 Version 2
- * of 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
- *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
  */
 
 /*
@@ -28,6 +27,10 @@
  */
 
 #include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
 
 #include <X11/Xlib.h>
 
@@ -134,7 +137,7 @@
          * the NVIDIA driver.
          */
         if (!XNVCTRLIsNvScreen(dpy, i)) {
-            printf("- The NV-CONTROL X not available on screen "
+            printf("- The NV-CONTROL X not available on X screen "
                    "%d of '%s'.\n", i, XDisplayName(NULL));
             continue;
         }
@@ -146,7 +149,7 @@
             continue;
         }
         
-        printf("+ Listening to ATTRIBUTE_CHANGE_EVENTs on screen %d.\n", i);
+        printf("+ Listening to ATTRIBUTE_CHANGE_EVENTs on X screen %d.\n", i);
         sources++;
     }
     printf("\n");
@@ -170,7 +173,7 @@
          * the NVIDIA driver.
          */
         if (!XNVCTRLIsNvScreen(dpy, i)) {
-            printf("- The NV-CONTROL X not available on screen "
+            printf("- The NV-CONTROL X not available on X screen "
                    "%d of '%s'.\n", i, XDisplayName(NULL));
             continue;
         }
@@ -185,7 +188,7 @@
             continue;
         }
         
-        printf("+ Listening to TARGET_ATTRIBUTE_CHANGE_EVENTs on X Screen "
+        printf("+ Listening to TARGET_ATTRIBUTE_CHANGE_EVENTs on X screen "
                "%d.\n", i);
         sources++;
     }
@@ -261,6 +264,7 @@
      */
 
     while (True) {
+        char target_str[256];
 
         /* block for the next event */
 
@@ -280,12 +284,20 @@
             nvevent = (XNVCtrlAttributeChangedEvent *) &event;
             
             /* print out the event information */
-            
-            printf("received NV-CONTROL event [attribute: %d (%s)  "
-                   "value: %d]\n",
+            snprintf(target_str, 256, "%s-%-3d", 
+                     target2str(NV_CTRL_TARGET_TYPE_X_SCREEN),
+                     nvevent->screen);
+
+            printf("ATTRIBUTE_CHANGED_EVENTS:         Target: %15s   "
+                   "Display Mask: 0x%08x   "
+                   "Attribute: (%3d) %-32s   Value: %d (0x%08x)\n",
+                   target_str,
+                   nvevent->display_mask,
                    nvevent->attribute,
                    attr2str(nvevent->attribute),
-                   nvevent->value);
+                   nvevent->value,
+                   nvevent->value
+                   );
 
         /* Handle TARGET_ATTRIBUTE_CHANGED_EVENTS */
         } else if (event.type ==
@@ -295,15 +307,20 @@
             nveventtarget = (XNVCtrlAttributeChangedEventTarget *) &event;
             
             /* print out the event information */
-            
-            printf("received NV-CONTROL target event [target: %d (%s)  "
-                   "id: %d ] [attribute: %d (%s)  value: %d]\n",
-                   nveventtarget->target_type,
-                   target2str(nveventtarget->target_type),
-                   nveventtarget->target_id,
+            snprintf(target_str, 256, "%s-%-3d",
+                     target2str(nveventtarget->target_type),
+                     nveventtarget->target_id);
+
+            printf("TARGET_ATTRIBUTE_CHANGED_EVENTS:  Target: %15s   "
+                   "Display Mask: 0x%08x   "
+                   "Attribute: (%3d) %-32s   Value: %d (0x%08x)\n",
+                   target_str,
+                   nveventtarget->display_mask,
                    nveventtarget->attribute,
                    attr2str(nveventtarget->attribute),
-                   nveventtarget->value);
+                   nveventtarget->value,
+                   nveventtarget->value
+                   );
         }
     }
 
@@ -317,144 +334,219 @@
  */
 static const char *target2str(int n)
 {
+    static char unknown[24];
+
     switch (n) {
     case NV_CTRL_TARGET_TYPE_X_SCREEN:  return "X Screen"; break;
     case NV_CTRL_TARGET_TYPE_GPU:       return "GPU"; break;
     case NV_CTRL_TARGET_TYPE_FRAMELOCK: return "Frame Lock"; break;
     case NV_CTRL_TARGET_TYPE_VCSC:      return "VCS"; break;
     default:
-        return "Unknown";
+        snprintf(unknown, 24, "Unknown (%d)", n);
+        return unknown;
     }
 }
 
 
-
-
-/*
- * attr2str() - translate an attribute integer into a string
- */
+// Used to convert the NV-CONTROL #defines to human readable text.
+#define MAKE_ENTRY(ATTRIBUTE) { ATTRIBUTE, #ATTRIBUTE, NULL }
+
+typedef struct {
+    int num;
+    char *str;
+    char *name;
+} AttrEntry;
+
+static AttrEntry attr_table[];
 
 static const char *attr2str(int n)
 {
-    switch (n) {
-    case NV_CTRL_FLATPANEL_SCALING:                return "flatpanel scaling"; break;
-    case NV_CTRL_FLATPANEL_DITHERING:              return "flatpanel dithering"; break;
-    case NV_CTRL_DIGITAL_VIBRANCE:                 return "digital vibrance"; break;
-    case NV_CTRL_SYNC_TO_VBLANK:                   return "sync to vblank"; break;
-    case NV_CTRL_LOG_ANISO:                        return "log aniso"; break;
-    case NV_CTRL_FSAA_MODE:                        return "fsaa mode"; break;
-    case NV_CTRL_TEXTURE_SHARPEN:                  return "texture sharpen"; break;
-    case NV_CTRL_EMULATE:                          return "OpenGL software emulation"; break;
-    case NV_CTRL_CONNECTED_DISPLAYS:               return "connected displays"; break;
-    case NV_CTRL_ENABLED_DISPLAYS:                 return "enabled displays"; break;
-    case NV_CTRL_FRAMELOCK_MASTER:                 return "frame lock master"; break;
-    case NV_CTRL_FRAMELOCK_POLARITY:               return "frame lock sync edge"; break;
-    case NV_CTRL_FRAMELOCK_SYNC_DELAY:             return "frame lock sync delay"; break;
-    case NV_CTRL_FRAMELOCK_SYNC_INTERVAL:          return "frame lock sync interval"; break;
-    case NV_CTRL_FRAMELOCK_PORT0_STATUS:           return "frame lock port 0 status"; break;
-    case NV_CTRL_FRAMELOCK_PORT1_STATUS:           return "frame lock port 1 status"; break;
-    case NV_CTRL_FRAMELOCK_HOUSE_STATUS:           return "frame lock house status"; break;
-    case NV_CTRL_FRAMELOCK_SYNC:                   return "frame lock sync"; break;
-    case NV_CTRL_FRAMELOCK_SYNC_READY:             return "frame lock sync ready"; break;
-    case NV_CTRL_FRAMELOCK_STEREO_SYNC:            return "frame lock stereo sync"; break;
-    case NV_CTRL_FRAMELOCK_TEST_SIGNAL:            return "frame lock test signal"; break;
-    case NV_CTRL_FRAMELOCK_ETHERNET_DETECTED:      return "frame lock ethernet detected"; break;
-    case NV_CTRL_FRAMELOCK_VIDEO_MODE:             return "frame lock video mode"; break;
-    case NV_CTRL_OPENGL_AA_LINE_GAMMA:             return "opengl aa line gamma"; break;
-    case NV_CTRL_FLIPPING_ALLOWED:                 return "flipping allowed"; break;
-    case NV_CTRL_TEXTURE_CLAMPING:                 return "texture clamping"; break;
-    case NV_CTRL_CURSOR_SHADOW:                    return "cursor shadow"; break;
-    case NV_CTRL_CURSOR_SHADOW_ALPHA:              return "cursor shadow alpha"; break;
-    case NV_CTRL_CURSOR_SHADOW_RED:                return "cursor shadow red"; break;
-    case NV_CTRL_CURSOR_SHADOW_GREEN:              return "cursor shadow green"; break;
-    case NV_CTRL_CURSOR_SHADOW_BLUE:               return "cursor shadow blue"; break;
-    case NV_CTRL_CURSOR_SHADOW_X_OFFSET:           return "cursor shadow x offset"; break;
-    case NV_CTRL_CURSOR_SHADOW_Y_OFFSET:           return "cursor shadow y offset"; break;
-    case NV_CTRL_FSAA_APPLICATION_CONTROLLED:      return "fsaa application controlled"; break;
-    case NV_CTRL_LOG_ANISO_APPLICATION_CONTROLLED: return "log aniso application controlled"; break;
-    case NV_CTRL_IMAGE_SHARPENING:                 return "image sharpening"; break;
-    case NV_CTRL_TV_OVERSCAN:                      return "tv overscan"; break;
-    case NV_CTRL_TV_FLICKER_FILTER:                return "tv flicker filter"; break;
-    case NV_CTRL_TV_BRIGHTNESS:                    return "tv brightness"; break;
-    case NV_CTRL_TV_HUE:                           return "tv hue"; break;
-    case NV_CTRL_TV_CONTRAST:                      return "tv contrast"; break;
-    case NV_CTRL_TV_SATURATION:                    return "tv saturation"; break;
-    case NV_CTRL_TV_RESET_SETTINGS:                return "tv reset settings"; break;
-    case NV_CTRL_GPU_CORE_TEMPERATURE:             return "gpu core temperature"; break;
-    case NV_CTRL_GPU_CORE_THRESHOLD:               return "gpu core threshold"; break;
-    case NV_CTRL_GPU_DEFAULT_CORE_THRESHOLD:       return "gpu default core threshold"; break;
-    case NV_CTRL_GPU_MAX_CORE_THRESHOLD:           return "gpu max core_threshold"; break;
-    case NV_CTRL_AMBIENT_TEMPERATURE:              return "ambient temperature"; break;
-    case NV_CTRL_PBUFFER_SCANOUT_XID:              return "scanout pbuffer xid"; break;
-
-    case NV_CTRL_GVO_SUPPORTED:                         return "x screen supports gvo"; break;
-    case NV_CTRL_GVO_SYNC_MODE:                         return "gvo sync mode"; break;
-    case NV_CTRL_GVO_SYNC_SOURCE:                       return "gvo sync source"; break;
-    case NV_CTRL_GVO_OUTPUT_VIDEO_FORMAT:               return "gvo output video format"; break;
-    case NV_CTRL_GVO_DISPLAY_X_SCREEN:                  return "gvo clone mode"; break;
-    case NV_CTRL_GVO_COMPOSITE_SYNC_INPUT_DETECTED:     return "gvo composite sync input is detected"; break;
-    case NV_CTRL_GVO_COMPOSITE_SYNC_INPUT_DETECT_MODE:  return "gvo composite sync input detect mode"; break;
-    case NV_CTRL_GVO_SDI_SYNC_INPUT_DETECTED:           return "gvo sync input detected"; break;
-    case NV_CTRL_GVO_VIDEO_OUTPUTS:                     return "gvo video outputs"; break;
-    case NV_CTRL_GVO_FIRMWARE_VERSION:                  return "gvo firmware version"; break;
-    case NV_CTRL_GVO_SYNC_DELAY_PIXELS:                 return "gvo sync delay pixels"; break;
-    case NV_CTRL_GVO_SYNC_DELAY_LINES:                  return "gvo sync delay lines"; break;
-    case NV_CTRL_GVO_INPUT_VIDEO_FORMAT_REACQUIRE:      return "gvo input video format reacquire"; break;
-    case NV_CTRL_GVO_GLX_LOCKED:                        return "gvo glx locked"; break;
-    case NV_CTRL_GVO_X_SCREEN_PAN_X:                    return "gvo x screen pan x"; break;
-    case NV_CTRL_GVO_X_SCREEN_PAN_Y:                    return "gvo x screen pan y"; break;
-    case NV_CTRL_GVO_OVERRIDE_HW_CSC:                   return "gvo override hw csc"; break;
-    case NV_CTRL_GVO_CAPABILITIES:                      return "gvo capabilities"; break;
-    case NV_CTRL_GVO_COMPOSITE_TERMINATION:             return "gvo composite termination"; break;
-    case NV_CTRL_GVO_FLIP_QUEUE_SIZE:                   return "gvo flip queue size"; break;
-    case NV_CTRL_GVO_LOCK_OWNER:                        return "gvo lock owner"; break;
-        
-    case NV_CTRL_GPU_OVERCLOCKING_STATE:           return "overclocking state"; break;
-    case NV_CTRL_GPU_2D_CLOCK_FREQS:               return "gpu 2d clock frequencies"; break;
-    case NV_CTRL_GPU_3D_CLOCK_FREQS:               return "gpu 3d clock frequencies"; break;
-    case NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS:          return "gpu optimal clock frequencies"; break;
-    case NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS_DETECTION: return "gpu optimal clock frequency detection"; break;
-    case NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS_DETECTION_STATE: return "gpu optimal clock frequency detection state"; break;
-        
-        /* XXX DDCCI stuff */
-
-    case NV_CTRL_USE_HOUSE_SYNC:                   return "use house sync"; break;
-    case NV_CTRL_FORCE_STEREO:                     return "force stereo"; break;
-    case NV_CTRL_IMAGE_SETTINGS:                   return "image settings"; break;
-    case NV_CTRL_XINERAMA:                         return "xinerama"; break;
-    case NV_CTRL_XINERAMA_STEREO:                  return "xinerama stereo"; break;
-    case NV_CTRL_SHOW_SLI_HUD:                     return "show sli hud"; break;
-    case NV_CTRL_XV_SYNC_TO_DISPLAY:               return "xv sync to display"; break;
-
-    case NV_CTRL_ASSOCIATED_DISPLAY_DEVICES:       return "associated_display_devices"; break;
-    case NV_CTRL_FRAMELOCK_SLAVES:                 return "frame lock slaves"; break;
-    case NV_CTRL_FRAMELOCK_MASTERABLE:             return "frame lock masterable"; break;
-    case NV_CTRL_PROBE_DISPLAYS:                   return "probed displays"; break;
-
-    case NV_CTRL_REFRESH_RATE:                     return "refresh rate"; break;
-    case NV_CTRL_CURRENT_SCANLINE:                 return "current scanline"; break;
-    case NV_CTRL_INITIAL_PIXMAP_PLACEMENT:         return "initial pixmap placement"; break;
-    case NV_CTRL_GLYPH_CACHE:                      return "glyph cache"; break;
-    case NV_CTRL_PCI_BUS:                          return "pci bus"; break;
-    case NV_CTRL_PCI_DEVICE:                       return "pci device"; break;
-    case NV_CTRL_PCI_FUNCTION:                     return "pci function"; break;
-    case NV_CTRL_FRAMELOCK_FPGA_REVISION:          return "framelock fpga revision"; break;
-    case NV_CTRL_MAX_SCREEN_WIDTH:                 return "max screen width"; break;
-    case NV_CTRL_MAX_SCREEN_HEIGHT:                return "max screen height"; break;
-    case NV_CTRL_MAX_DISPLAYS:                     return "max displays"; break;
-    case NV_CTRL_DYNAMIC_TWINVIEW:                 return "dynamic twinview"; break;
-    case NV_CTRL_MULTIGPU_DISPLAY_OWNER:           return "multigpu display owner"; break;
-    case NV_CTRL_GPU_SCALING:                      return "gpu scaling"; break;
-    case NV_CTRL_FRONTEND_RESOLUTION:              return "frontend resolution"; break;
-    case NV_CTRL_BACKEND_RESOLUTION:               return "backend resolution"; break;
-    case NV_CTRL_FLATPANEL_NATIVE_RESOLUTION:      return "flatpanel native resolution"; break;
-    case NV_CTRL_FLATPANEL_BEST_FIT_RESOLUTION:    return "flatpanel best fit resolution"; break;
-    case NV_CTRL_GPU_SCALING_ACTIVE:               return "gpu scaling active"; break;
-    case NV_CTRL_DFP_SCALING_ACTIVE:               return "dfp scaling active"; break;
-    case NV_CTRL_FSAA_APPLICATION_ENHANCED:        return "fsaa application enhanced"; break;
-    case NV_CTRL_FRAMELOCK_SYNC_RATE_4:            return "framelock sync rate (4)"; break;
-
-    default:
-        return "Unknown";
-    }
-} /* attr2str() */
+    AttrEntry *entry;
+
+    entry = attr_table;
+    while (entry->str) {
+        if (entry->num == n) {
+            if (!entry->name) {
+                int len;
+                entry->name = strdup(entry->str + 8);
+                for (len = 0; len < strlen(entry->name); len++) {
+                    entry->name[len] = tolower(entry->name[len]);
+                }
+            }
+            return entry->name;
+        }
+        entry++;
+    }
+
+    return NULL;
+}
+
+// Attribute -> String table, generated using:
+//
+// grep 'define.*\/\*' NVCtrl.h | sed 's/.*define \([^ ]*\).*/    MAKE_ENTRY(\1),/' > DATA | head DATA
+//
+static AttrEntry attr_table[] = {
+    MAKE_ENTRY(NV_CTRL_FLATPANEL_SCALING),
+    MAKE_ENTRY(NV_CTRL_FLATPANEL_DITHERING),
+    MAKE_ENTRY(NV_CTRL_DIGITAL_VIBRANCE),
+    MAKE_ENTRY(NV_CTRL_BUS_TYPE),
+    MAKE_ENTRY(NV_CTRL_VIDEO_RAM),
+    MAKE_ENTRY(NV_CTRL_IRQ),
+    MAKE_ENTRY(NV_CTRL_OPERATING_SYSTEM),
+    MAKE_ENTRY(NV_CTRL_SYNC_TO_VBLANK),
+    MAKE_ENTRY(NV_CTRL_LOG_ANISO),
+    MAKE_ENTRY(NV_CTRL_FSAA_MODE),
+    MAKE_ENTRY(NV_CTRL_TEXTURE_SHARPEN),
+    MAKE_ENTRY(NV_CTRL_UBB),
+    MAKE_ENTRY(NV_CTRL_OVERLAY),
+    MAKE_ENTRY(NV_CTRL_STEREO),
+    MAKE_ENTRY(NV_CTRL_EMULATE),
+    MAKE_ENTRY(NV_CTRL_TWINVIEW),
+    MAKE_ENTRY(NV_CTRL_CONNECTED_DISPLAYS),
+    MAKE_ENTRY(NV_CTRL_ENABLED_DISPLAYS),
+    MAKE_ENTRY(NV_CTRL_FRAMELOCK),
+    MAKE_ENTRY(NV_CTRL_FRAMELOCK_MASTER),
+    MAKE_ENTRY(NV_CTRL_FRAMELOCK_POLARITY),
+    MAKE_ENTRY(NV_CTRL_FRAMELOCK_SYNC_DELAY),
+    MAKE_ENTRY(NV_CTRL_FRAMELOCK_SYNC_INTERVAL),
+    MAKE_ENTRY(NV_CTRL_FRAMELOCK_PORT0_STATUS),
+    MAKE_ENTRY(NV_CTRL_FRAMELOCK_PORT1_STATUS),
+    MAKE_ENTRY(NV_CTRL_FRAMELOCK_HOUSE_STATUS),
+    MAKE_ENTRY(NV_CTRL_FRAMELOCK_SYNC),
+    MAKE_ENTRY(NV_CTRL_FRAMELOCK_SYNC_READY),
+    MAKE_ENTRY(NV_CTRL_FRAMELOCK_STEREO_SYNC),
+    MAKE_ENTRY(NV_CTRL_FRAMELOCK_TEST_SIGNAL),
+    MAKE_ENTRY(NV_CTRL_FRAMELOCK_ETHERNET_DETECTED),
+    MAKE_ENTRY(NV_CTRL_FRAMELOCK_VIDEO_MODE),
+    MAKE_ENTRY(NV_CTRL_FRAMELOCK_SYNC_RATE),
+    MAKE_ENTRY(NV_CTRL_FORCE_GENERIC_CPU),
+    MAKE_ENTRY(NV_CTRL_OPENGL_AA_LINE_GAMMA),
+    MAKE_ENTRY(NV_CTRL_FRAMELOCK_TIMING),
+    MAKE_ENTRY(NV_CTRL_FLIPPING_ALLOWED),
+    MAKE_ENTRY(NV_CTRL_ARCHITECTURE),
+    MAKE_ENTRY(NV_CTRL_TEXTURE_CLAMPING),
+    MAKE_ENTRY(NV_CTRL_CURSOR_SHADOW),
+    MAKE_ENTRY(NV_CTRL_CURSOR_SHADOW_ALPHA),
+    MAKE_ENTRY(NV_CTRL_CURSOR_SHADOW_RED),
+    MAKE_ENTRY(NV_CTRL_CURSOR_SHADOW_GREEN),
+    MAKE_ENTRY(NV_CTRL_CURSOR_SHADOW_BLUE),
+    MAKE_ENTRY(NV_CTRL_CURSOR_SHADOW_X_OFFSET),
+    MAKE_ENTRY(NV_CTRL_CURSOR_SHADOW_Y_OFFSET),
+    MAKE_ENTRY(NV_CTRL_FSAA_APPLICATION_CONTROLLED),
+    MAKE_ENTRY(NV_CTRL_LOG_ANISO_APPLICATION_CONTROLLED),
+    MAKE_ENTRY(NV_CTRL_IMAGE_SHARPENING),
+    MAKE_ENTRY(NV_CTRL_TV_OVERSCAN),
+    MAKE_ENTRY(NV_CTRL_TV_FLICKER_FILTER),
+    MAKE_ENTRY(NV_CTRL_TV_BRIGHTNESS),
+    MAKE_ENTRY(NV_CTRL_TV_HUE),
+    MAKE_ENTRY(NV_CTRL_TV_CONTRAST),
+    MAKE_ENTRY(NV_CTRL_TV_SATURATION),
+    MAKE_ENTRY(NV_CTRL_TV_RESET_SETTINGS),
+    MAKE_ENTRY(NV_CTRL_GPU_CORE_TEMPERATURE),
+    MAKE_ENTRY(NV_CTRL_GPU_CORE_THRESHOLD),
+    MAKE_ENTRY(NV_CTRL_GPU_DEFAULT_CORE_THRESHOLD),
+    MAKE_ENTRY(NV_CTRL_GPU_MAX_CORE_THRESHOLD),
+    MAKE_ENTRY(NV_CTRL_AMBIENT_TEMPERATURE),
+    MAKE_ENTRY(NV_CTRL_PBUFFER_SCANOUT_SUPPORTED),
+    MAKE_ENTRY(NV_CTRL_PBUFFER_SCANOUT_XID),
+    MAKE_ENTRY(NV_CTRL_GVO_SUPPORTED),
+    MAKE_ENTRY(NV_CTRL_GVO_SYNC_MODE),
+    MAKE_ENTRY(NV_CTRL_GVO_SYNC_SOURCE),
+    MAKE_ENTRY(NV_CTRL_GVO_OUTPUT_VIDEO_FORMAT),
+    MAKE_ENTRY(NV_CTRL_GVO_INPUT_VIDEO_FORMAT),
+    MAKE_ENTRY(NV_CTRL_GVO_DATA_FORMAT),
+    MAKE_ENTRY(NV_CTRL_GVO_DISPLAY_X_SCREEN),
+    MAKE_ENTRY(NV_CTRL_GVO_COMPOSITE_SYNC_INPUT_DETECTED),
+    MAKE_ENTRY(NV_CTRL_GVO_COMPOSITE_SYNC_INPUT_DETECT_MODE),
+    MAKE_ENTRY(NV_CTRL_GVO_SDI_SYNC_INPUT_DETECTED),
+    MAKE_ENTRY(NV_CTRL_GVO_VIDEO_OUTPUTS),
+    MAKE_ENTRY(NV_CTRL_GVO_FIRMWARE_VERSION),
+    MAKE_ENTRY(NV_CTRL_GVO_SYNC_DELAY_PIXELS),
+    MAKE_ENTRY(NV_CTRL_GVO_SYNC_DELAY_LINES),
+    MAKE_ENTRY(NV_CTRL_GVO_INPUT_VIDEO_FORMAT_REACQUIRE),
+    MAKE_ENTRY(NV_CTRL_GVO_GLX_LOCKED),
+    MAKE_ENTRY(NV_CTRL_GVO_VIDEO_FORMAT_WIDTH),
+    MAKE_ENTRY(NV_CTRL_GVO_VIDEO_FORMAT_HEIGHT),
+    MAKE_ENTRY(NV_CTRL_GVO_VIDEO_FORMAT_REFRESH_RATE),
+    MAKE_ENTRY(NV_CTRL_GVO_X_SCREEN_PAN_X),
+    MAKE_ENTRY(NV_CTRL_GVO_X_SCREEN_PAN_Y),
+    MAKE_ENTRY(NV_CTRL_GPU_OVERCLOCKING_STATE),
+    MAKE_ENTRY(NV_CTRL_GPU_2D_CLOCK_FREQS),
+    MAKE_ENTRY(NV_CTRL_GPU_3D_CLOCK_FREQS),
+    MAKE_ENTRY(NV_CTRL_GPU_DEFAULT_2D_CLOCK_FREQS),
+    MAKE_ENTRY(NV_CTRL_GPU_DEFAULT_3D_CLOCK_FREQS),
+    MAKE_ENTRY(NV_CTRL_GPU_CURRENT_CLOCK_FREQS),
+    MAKE_ENTRY(NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS),
+    MAKE_ENTRY(NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS_DETECTION),
+    MAKE_ENTRY(NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS_DETECTION_STATE),
+    MAKE_ENTRY(NV_CTRL_FLATPANEL_CHIP_LOCATION),
+    MAKE_ENTRY(NV_CTRL_FLATPANEL_LINK),
+    MAKE_ENTRY(NV_CTRL_FLATPANEL_SIGNAL),
+    MAKE_ENTRY(NV_CTRL_USE_HOUSE_SYNC),
+    MAKE_ENTRY(NV_CTRL_EDID_AVAILABLE),
+    MAKE_ENTRY(NV_CTRL_FORCE_STEREO),
+    MAKE_ENTRY(NV_CTRL_IMAGE_SETTINGS),
+    MAKE_ENTRY(NV_CTRL_XINERAMA),
+    MAKE_ENTRY(NV_CTRL_XINERAMA_STEREO),
+    MAKE_ENTRY(NV_CTRL_BUS_RATE),
+    MAKE_ENTRY(NV_CTRL_SHOW_SLI_HUD),
+    MAKE_ENTRY(NV_CTRL_XV_SYNC_TO_DISPLAY),
+    MAKE_ENTRY(NV_CTRL_GVO_OUTPUT_VIDEO_FORMAT2),
+    MAKE_ENTRY(NV_CTRL_GVO_OVERRIDE_HW_CSC),
+    MAKE_ENTRY(NV_CTRL_GVO_CAPABILITIES),
+    MAKE_ENTRY(NV_CTRL_GVO_COMPOSITE_TERMINATION),
+    MAKE_ENTRY(NV_CTRL_ASSOCIATED_DISPLAY_DEVICES),
+    MAKE_ENTRY(NV_CTRL_FRAMELOCK_SLAVES),
+    MAKE_ENTRY(NV_CTRL_FRAMELOCK_MASTERABLE),
+    MAKE_ENTRY(NV_CTRL_PROBE_DISPLAYS),
+    MAKE_ENTRY(NV_CTRL_REFRESH_RATE),
+    MAKE_ENTRY(NV_CTRL_GVO_FLIP_QUEUE_SIZE),
+    MAKE_ENTRY(NV_CTRL_CURRENT_SCANLINE),
+    MAKE_ENTRY(NV_CTRL_INITIAL_PIXMAP_PLACEMENT),
+    MAKE_ENTRY(NV_CTRL_PCI_BUS),
+    MAKE_ENTRY(NV_CTRL_PCI_DEVICE),
+    MAKE_ENTRY(NV_CTRL_PCI_FUNCTION),
+    MAKE_ENTRY(NV_CTRL_FRAMELOCK_FPGA_REVISION),
+    MAKE_ENTRY(NV_CTRL_MAX_SCREEN_WIDTH),
+    MAKE_ENTRY(NV_CTRL_MAX_SCREEN_HEIGHT),
+    MAKE_ENTRY(NV_CTRL_MAX_DISPLAYS),
+    MAKE_ENTRY(NV_CTRL_DYNAMIC_TWINVIEW),
+    MAKE_ENTRY(NV_CTRL_MULTIGPU_DISPLAY_OWNER),
+    MAKE_ENTRY(NV_CTRL_GPU_SCALING),
+    MAKE_ENTRY(NV_CTRL_FRONTEND_RESOLUTION),
+    MAKE_ENTRY(NV_CTRL_BACKEND_RESOLUTION),
+    MAKE_ENTRY(NV_CTRL_FLATPANEL_NATIVE_RESOLUTION),
+    MAKE_ENTRY(NV_CTRL_FLATPANEL_BEST_FIT_RESOLUTION),
+    MAKE_ENTRY(NV_CTRL_GPU_SCALING_ACTIVE),
+    MAKE_ENTRY(NV_CTRL_DFP_SCALING_ACTIVE),
+    MAKE_ENTRY(NV_CTRL_FSAA_APPLICATION_ENHANCED),
+    MAKE_ENTRY(NV_CTRL_FRAMELOCK_SYNC_RATE_4),
+    MAKE_ENTRY(NV_CTRL_GVO_LOCK_OWNER),
+    MAKE_ENTRY(NV_CTRL_HWOVERLAY),
+    MAKE_ENTRY(NV_CTRL_NUM_GPU_ERRORS_RECOVERED),
+    MAKE_ENTRY(NV_CTRL_REFRESH_RATE_3),
+    MAKE_ENTRY(NV_CTRL_ONDEMAND_VBLANK_INTERRUPTS),
+    MAKE_ENTRY(NV_CTRL_GPU_POWER_SOURCE),
+    MAKE_ENTRY(NV_CTRL_GPU_CURRENT_PERFORMANCE_MODE),
+    MAKE_ENTRY(NV_CTRL_GLYPH_CACHE),
+    MAKE_ENTRY(NV_CTRL_GPU_CURRENT_PERFORMANCE_LEVEL),
+    MAKE_ENTRY(NV_CTRL_GPU_ADAPTIVE_CLOCK_STATE),
+    MAKE_ENTRY(NV_CTRL_GVO_OUTPUT_VIDEO_LOCKED),
+    MAKE_ENTRY(NV_CTRL_GVO_SYNC_LOCK_STATUS),
+    MAKE_ENTRY(NV_CTRL_GVO_ANC_TIME_CODE_GENERATION),
+    MAKE_ENTRY(NV_CTRL_GVO_COMPOSITE),
+    MAKE_ENTRY(NV_CTRL_GVO_COMPOSITE_ALPHA_KEY),
+    MAKE_ENTRY(NV_CTRL_GVO_COMPOSITE_LUMA_KEY_RANGE),
+    MAKE_ENTRY(NV_CTRL_GVO_COMPOSITE_CR_KEY_RANGE),
+    MAKE_ENTRY(NV_CTRL_GVO_COMPOSITE_CB_KEY_RANGE),
+    MAKE_ENTRY(NV_CTRL_GVO_COMPOSITE_NUM_KEY_RANGES),
+    MAKE_ENTRY(NV_CTRL_SWITCH_TO_DISPLAYS),
+    MAKE_ENTRY(NV_CTRL_NOTEBOOK_DISPLAY_CHANGE_LID_EVENT),
+    MAKE_ENTRY(NV_CTRL_NOTEBOOK_INTERNAL_LCD),
+    MAKE_ENTRY(NV_CTRL_DEPTH_30_ALLOWED),
+    MAKE_ENTRY(NV_CTRL_MODE_SET_EVENT),
+    MAKE_ENTRY(NV_CTRL_OPENGL_AA_LINE_GAMMA_VALUE),
+    MAKE_ENTRY(NV_CTRL_DISPLAYPORT_LINK_RATE),
+    MAKE_ENTRY(NV_CTRL_STEREO_EYES_EXCHANGE),
+    { -1, NULL, NULL }
+};

Modified: packages/nvidia-settings/trunk/samples/nv-control-framelock.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/samples/nv-control-framelock.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/samples/nv-control-framelock.c (original)
+++ packages/nvidia-settings/trunk/samples/nv-control-framelock.c Sun Jan 11 05:41:46 2009
@@ -1,25 +1,24 @@
 /*
- * nvidia-settings: A tool for configuring the NVIDIA X driver on Unix
- * and Linux systems.
- *
- * Copyright (C) 2006 NVIDIA Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of Version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * 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 Version 2
- * of 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
- *
+ * Copyright (c) 2006-2007 NVIDIA, Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
  */
 
 

Modified: packages/nvidia-settings/trunk/samples/nv-control-info.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/samples/nv-control-info.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/samples/nv-control-info.c (original)
+++ packages/nvidia-settings/trunk/samples/nv-control-info.c Sun Jan 11 05:41:46 2009
@@ -1,25 +1,24 @@
 /*
- * nvidia-settings: A tool for configuring the NVIDIA X driver on Unix
- * and Linux systems.
+ * Copyright (c) 2004 NVIDIA, Corporation
  *
- * Copyright (C) 2004 NVIDIA Corporation.
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
  *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of Version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
  *
- * 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 Version 2
- * of 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
- *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
  */
 
 /*

Modified: packages/nvidia-settings/trunk/samples/nv-control-targets.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/samples/nv-control-targets.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/samples/nv-control-targets.c (original)
+++ packages/nvidia-settings/trunk/samples/nv-control-targets.c Sun Jan 11 05:41:46 2009
@@ -1,25 +1,24 @@
 /*
- * nvidia-settings: A tool for configuring the NVIDIA X driver on Unix
- * and Linux systems.
+ * Copyright (c) 2006-2008 NVIDIA, Corporation
  *
- * Copyright (C) 2006 NVIDIA Corporation.
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
  *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of Version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
  *
- * 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 Version 2
- * of 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
- *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
  */
 
 

Modified: packages/nvidia-settings/trunk/src/Makefile.inc
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/Makefile.inc?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/Makefile.inc (original)
+++ packages/nvidia-settings/trunk/src/Makefile.inc Sun Jan 11 05:41:46 2009
@@ -33,7 +33,8 @@
 	parse.c \
 	query-assign.c \
 	nvgetopt.c \
-	glxinfo.c
+	glxinfo.c \
+	lscf.c
 
 EXTRA_DIST += \
 	Makefile.inc \
@@ -43,7 +44,8 @@
 	parse.h \
 	query-assign.h \
 	nvgetopt.h \
-	glxinfo.h
+	glxinfo.h \
+	lscf.h
 
 dist_list::
 	@ echo $(SRC) $(EXTRA_DIST)

Modified: packages/nvidia-settings/trunk/src/XF86Config-parser/Configint.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/XF86Config-parser/Configint.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/XF86Config-parser/Configint.h (original)
+++ packages/nvidia-settings/trunk/src/XF86Config-parser/Configint.h Sun Jan 11 05:41:46 2009
@@ -97,24 +97,23 @@
 #define HANDLE_LIST(field,func,type)                                    \
 {                                                                       \
     type p = func();                                                    \
-    if (p == NULL)                                                      \
-    {                                                                   \
-        CLEANUP (ptr);                                                  \
+    if (p == NULL) {                                                    \
+        CLEANUP (&ptr);                                                 \
         return (NULL);                                                  \
     } else {                                                            \
-        ptr->field = (type)                                             \
-            xconfigAddListItem((GenericListPtr) ptr->field,                \
-                            (GenericListPtr) p);                        \
+        xconfigAddListItem((GenericListPtr*)(&ptr->field),              \
+                           (GenericListPtr) p);                         \
     }                                                                   \
 }
 
 
-#define Error(a,b)                         \
-    do {                                   \
+#define Error(a,b)                            \
+    do {                                      \
         xconfigErrorMsg(ParseErrorMsg, a, b); \
-        CLEANUP (ptr);                     \
-        return NULL;                       \
-    } while (0)                            \
+        CLEANUP (&ptr);                       \
+        return NULL;                          \
+    } while (0)
+
 
 /* 
  * These are defines for error messages to promote consistency.

Modified: packages/nvidia-settings/trunk/src/XF86Config-parser/DRI.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/XF86Config-parser/DRI.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/XF86Config-parser/DRI.c (original)
+++ packages/nvidia-settings/trunk/src/XF86Config-parser/DRI.c Sun Jan 11 05:41:46 2009
@@ -47,22 +47,24 @@
 xconfigParseBuffers (void)
 {
     int token;
-    PARSE_PROLOGUE (XConfigBuffersPtr, XConfigBuffersRec)
+    PARSE_PROLOGUE (XConfigBuffersPtr, XConfigBuffersRec);
 
-    if (xconfigGetSubToken (&(ptr->comment)) != NUMBER)
-    Error("Buffers count expected", NULL);
+    if (xconfigGetSubToken (&(ptr->comment)) != NUMBER) {
+        Error("Buffers count expected", NULL);
+    }
     ptr->count = val.num;
 
-    if (xconfigGetSubToken (&(ptr->comment)) != NUMBER)
-    Error("Buffers size expected", NULL);
+    if (xconfigGetSubToken (&(ptr->comment)) != NUMBER) {
+        Error("Buffers size expected", NULL);
+    }
     ptr->size = val.num;
 
     if ((token = xconfigGetSubToken (&(ptr->comment))) == STRING) {
-    ptr->flags = val.str;
-    if ((token = xconfigGetToken (NULL)) == COMMENT)
-        ptr->comment = xconfigAddComment(ptr->comment, val.str);
-    else
-        xconfigUnGetToken(token);
+        ptr->flags = val.str;
+        if ((token = xconfigGetToken (NULL)) == COMMENT)
+            ptr->comment = xconfigAddComment(ptr->comment, val.str);
+        else
+            xconfigUnGetToken(token);
     }
 
     return ptr;
@@ -126,26 +128,30 @@
 }
 
 void
-xconfigFreeDRI (XConfigDRIPtr ptr)
+xconfigFreeDRI (XConfigDRIPtr *ptr)
 {
-    if (ptr == NULL)
-    return;
+    if (ptr == NULL || *ptr == NULL)
+        return;
     
-    xconfigFreeBuffersList (ptr->buffers);
-    TEST_FREE (ptr->comment);
-    free (ptr);
+    xconfigFreeBuffersList (&((*ptr)->buffers));
+    TEST_FREE ((*ptr)->comment);
+    free (*ptr);
+    *ptr = NULL;
 }
 
 void
-xconfigFreeBuffersList (XConfigBuffersPtr ptr)
+xconfigFreeBuffersList (XConfigBuffersPtr *ptr)
 {
     XConfigBuffersPtr prev;
 
-    while (ptr) {
-        TEST_FREE (ptr->flags);
-        TEST_FREE (ptr->comment);
-        prev = ptr;
-        ptr  = ptr->next;
+    if (ptr == NULL || *ptr == NULL)
+        return;
+
+    while (*ptr) {
+        TEST_FREE ((*ptr)->flags);
+        TEST_FREE ((*ptr)->comment);
+        prev = *ptr;
+        *ptr  = (*ptr)->next;
         free (prev);
     }
 }

Modified: packages/nvidia-settings/trunk/src/XF86Config-parser/Device.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/XF86Config-parser/Device.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/XF86Config-parser/Device.c (original)
+++ packages/nvidia-settings/trunk/src/XF86Config-parser/Device.c Sun Jan 11 05:41:46 2009
@@ -329,25 +329,28 @@
 }
 
 void
-xconfigFreeDeviceList (XConfigDevicePtr ptr)
+xconfigFreeDeviceList (XConfigDevicePtr *ptr)
 {
     XConfigDevicePtr prev;
 
-    while (ptr)
+    if (ptr == NULL || *ptr == NULL)
+        return;
+
+    while (*ptr)
     {
-        TEST_FREE (ptr->identifier);
-        TEST_FREE (ptr->vendor);
-        TEST_FREE (ptr->board);
-        TEST_FREE (ptr->chipset);
-        TEST_FREE (ptr->card);
-        TEST_FREE (ptr->driver);
-        TEST_FREE (ptr->ramdac);
-        TEST_FREE (ptr->clockchip);
-        TEST_FREE (ptr->comment);
-        xconfigOptionListFree (ptr->options);
-
-        prev = ptr;
-        ptr = ptr->next;
+        TEST_FREE ((*ptr)->identifier);
+        TEST_FREE ((*ptr)->vendor);
+        TEST_FREE ((*ptr)->board);
+        TEST_FREE ((*ptr)->chipset);
+        TEST_FREE ((*ptr)->card);
+        TEST_FREE ((*ptr)->driver);
+        TEST_FREE ((*ptr)->ramdac);
+        TEST_FREE ((*ptr)->clockchip);
+        TEST_FREE ((*ptr)->comment);
+        xconfigFreeOptionList (&((*ptr)->options));
+
+        prev = *ptr;
+        *ptr = (*ptr)->next;
         free (prev);
     }
 }

Modified: packages/nvidia-settings/trunk/src/XF86Config-parser/Extensions.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/XF86Config-parser/Extensions.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/XF86Config-parser/Extensions.c (original)
+++ packages/nvidia-settings/trunk/src/XF86Config-parser/Extensions.c Sun Jan 11 05:41:46 2009
@@ -91,12 +91,13 @@
 }
 
 void
-xconfigFreeExtensions (XConfigExtensionsPtr ptr)
+xconfigFreeExtensions (XConfigExtensionsPtr *ptr)
 {
-    if (ptr == NULL)
+    if (ptr == NULL || *ptr == NULL)
         return;
 
-    xconfigOptionListFree (ptr->options);
-    TEST_FREE (ptr->comment);
-    free (ptr);
+    xconfigFreeOptionList (&((*ptr)->options));
+    TEST_FREE ((*ptr)->comment);
+    free (*ptr);
+    *ptr = NULL;
 }

Modified: packages/nvidia-settings/trunk/src/XF86Config-parser/Files.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/XF86Config-parser/Files.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/XF86Config-parser/Files.c (original)
+++ packages/nvidia-settings/trunk/src/XF86Config-parser/Files.c Sun Jan 11 05:41:46 2009
@@ -265,17 +265,18 @@
 }
 
 void
-xconfigFreeFiles (XConfigFilesPtr p)
-{
-    if (p == NULL)
+xconfigFreeFiles (XConfigFilesPtr *p)
+{
+    if (p == NULL || *p == NULL)
         return;
 
-    TEST_FREE (p->logfile);
-    TEST_FREE (p->rgbpath);
-    TEST_FREE (p->modulepath);
-    TEST_FREE (p->inputdevs);
-    TEST_FREE (p->fontpath);
-    TEST_FREE (p->comment);
-
-    free (p);
-}
+    TEST_FREE ((*p)->logfile);
+    TEST_FREE ((*p)->rgbpath);
+    TEST_FREE ((*p)->modulepath);
+    TEST_FREE ((*p)->inputdevs);
+    TEST_FREE ((*p)->fontpath);
+    TEST_FREE ((*p)->comment);
+
+    free (*p);
+    *p = NULL;
+}

Modified: packages/nvidia-settings/trunk/src/XF86Config-parser/Flags.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/XF86Config-parser/Flags.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/XF86Config-parser/Flags.c (original)
+++ packages/nvidia-settings/trunk/src/XF86Config-parser/Flags.c Sun Jan 11 05:41:46 2009
@@ -141,8 +141,8 @@
                                 valstr = buff;
                             }
                         }
-                        ptr->options = xconfigAddNewOption
-                            (ptr->options, ServerFlagsTab[i].name, valstr);
+                        xconfigAddNewOption(&ptr->options,
+                                            ServerFlagsTab[i].name, valstr);
                     }
                     i++;
                 }
@@ -181,13 +181,16 @@
     fprintf (f, "EndSection\n\n");
 }
 
-XConfigOptionPtr
-xconfigAddNewOption (XConfigOptionPtr head, const char *name, const char *val)
-{
-    XConfigOptionPtr new, old = NULL;
+void
+xconfigAddNewOption (XConfigOptionPtr *pHead, const char *name,
+                     const char *val)
+{
+    XConfigOptionPtr new;
+    XConfigOptionPtr old = NULL;
 
     /* Don't allow duplicates */
-    if (head != NULL && (old = xconfigFindOption(head, name)) != NULL) {
+    if (*pHead != NULL &&
+        ((old = xconfigFindOption(*pHead, name)) != NULL)) {
         TEST_FREE(old->name);
         TEST_FREE(old->val);
         new = old;
@@ -198,21 +201,21 @@
     new->name = xconfigStrdup(name);
     new->val = xconfigStrdup(val);
     
-    if (old == NULL)
-        return ((XConfigOptionPtr) xconfigAddListItem ((GenericListPtr) head,
-                                                       (GenericListPtr) new));
-    else 
-        return head;
+    if (old == NULL) {
+        xconfigAddListItem((GenericListPtr *)(pHead), (GenericListPtr)new);
+    }
 }
 
 void
-xconfigFreeFlags (XConfigFlagsPtr flags)
-{
-    if (flags == NULL)
+xconfigFreeFlags (XConfigFlagsPtr *flags)
+{
+    if (flags == NULL || *flags == NULL)
         return;
-    xconfigOptionListFree (flags->options);
-    TEST_FREE(flags->comment);
-    free (flags);
+
+    xconfigFreeOptionList (&((*flags)->options));
+    TEST_FREE((*flags)->comment);
+    free (*flags);
+    *flags = NULL;
 }
 
 XConfigOptionPtr
@@ -220,27 +223,31 @@
 {
     XConfigOptionPtr newopt = NULL;
 
-    while (opt)
+    while (opt) {
+        xconfigAddNewOption(&newopt, opt->name, opt->val);
+        if (newopt) {
+            newopt->comment = xconfigStrdup(opt->comment);
+        }
+        opt = opt->next;
+    }
+    return newopt;
+}
+
+void
+xconfigFreeOptionList (XConfigOptionPtr *opt)
+{
+    XConfigOptionPtr prev;
+
+    if (opt == NULL || *opt == NULL)
+        return;
+
+    while (*opt)
     {
-        newopt = xconfigAddNewOption(newopt, opt->name, opt->val);
-        newopt->comment = xconfigStrdup(opt->comment);
-        opt = opt->next;
-    }
-    return newopt;
-}
-
-void
-xconfigOptionListFree (XConfigOptionPtr opt)
-{
-    XConfigOptionPtr prev;
-
-    while (opt)
-    {
-        TEST_FREE (opt->name);
-        TEST_FREE (opt->val);
-        TEST_FREE (opt->comment);
-        prev = opt;
-        opt = opt->next;
+        TEST_FREE ((*opt)->name);
+        TEST_FREE ((*opt)->val);
+        TEST_FREE ((*opt)->comment);
+        prev = *opt;
+        *opt = (*opt)->next;
         free (prev);
     }
 }
@@ -277,28 +284,15 @@
     return opt;
 }
 
-XConfigOptionPtr
-xconfigRemoveOption(XConfigOptionPtr list, XConfigOptionPtr opt)
-{
-    XConfigOptionPtr prev = NULL;
-    XConfigOptionPtr p = list;
-
-    while (p) {
-        if (p == opt) {
-            if (prev) prev->next = opt->next;
-            if (list == opt) list = opt->next;
-
-            TEST_FREE(opt->name);
-            TEST_FREE(opt->val);
-            TEST_FREE(opt->comment);
-            free(opt);
-            break;
-        }
-        prev = p;
-        p = p->next;
-    }
-
-    return list;
+void
+xconfigRemoveOption(XConfigOptionPtr *pHead, XConfigOptionPtr opt)
+{
+    xconfigRemoveListItem((GenericListPtr *)pHead, (GenericListPtr)opt);
+
+    TEST_FREE(opt->name);
+    TEST_FREE(opt->val);
+    TEST_FREE(opt->comment);
+    free(opt);
 }
 
 XConfigOptionPtr
@@ -397,7 +391,7 @@
                 ap->next = a->next;
             a->next = b->next;
             b->next = NULL;
-            xconfigOptionListFree (b);
+            xconfigFreeOptionList (&b);
             b = a->next;
             bp = a;
             a = tail;
@@ -482,11 +476,11 @@
     else
         cnew = option;
     
-    if (old == NULL)
-        return ((XConfigOptionPtr)xconfigAddListItem((GenericListPtr)head,
-                                               (GenericListPtr)cnew));
-
-    return (head);
+    if (old == NULL) {
+        xconfigAddListItem((GenericListPtr *)(&head), (GenericListPtr)cnew);
+    }
+
+    return head;
 }
 
 void

Modified: packages/nvidia-settings/trunk/src/XF86Config-parser/Generate.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/XF86Config-parser/Generate.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/XF86Config-parser/Generate.c (original)
+++ packages/nvidia-settings/trunk/src/XF86Config-parser/Generate.c Sun Jan 11 05:41:46 2009
@@ -48,7 +48,6 @@
 
 static int is_file(const char *filename);
 
-static void add_files(GenerateOptions *gop, XConfigPtr config);
 static void add_font_path(GenerateOptions *gop, XConfigPtr config);
 static void add_modules(GenerateOptions *gop, XConfigPtr config);
 
@@ -72,7 +71,7 @@
 
     /* add files, fonts, and modules */
 
-    add_files(gop, config);
+    config->files = xconfigAlloc(sizeof(XConfigFilesRec));
     add_font_path(gop, config);
     add_modules(gop, config);
 
@@ -123,8 +122,7 @@
         
     screen->defaultdepth = 24;
     
-    screen->displays = xconfigAddDisplay(screen->displays,
-                                         screen->defaultdepth);
+    xconfigAddDisplay(&screen->displays, screen->defaultdepth);
 
     /* append to the end of the screen list */
     
@@ -142,9 +140,10 @@
 
 
 /*
- * assign_screen_adjacencies() - setup all the adjacency information
- * for the X screens in the given layout.  Nothing fancy here: just
- * position all the screens horizontally, moving from left to right.
+ * xconfigGenerateAssignScreenAdjacencies() - setup all the adjacency
+ * information for the X screens in the given layout.  Nothing fancy
+ * here: just position all the screens horizontally, moving from left
+ * to right.
  */
 
 void xconfigGenerateAssignScreenAdjacencies(XConfigLayoutPtr layout)
@@ -252,22 +251,6 @@
     
 } /* find_libdir() */
 
-
-
-/*
- * add_files() - 
- */
-
-static void add_files(GenerateOptions *gop, XConfigPtr config)
-{
-    char *libdir = find_libdir(gop);
-
-    config->files = xconfigAlloc(sizeof(XConfigFilesRec));
-    config->files->rgbpath = xconfigStrcat(libdir, "/X11/rgb", NULL);
-    
-    free(libdir);
-
-} /* add_files() */
 
 
 /*
@@ -394,25 +377,25 @@
 
     config->modules = xconfigAlloc(sizeof(XConfigModuleRec));
     
-    l = xconfigAddNewLoadDirective(l, xconfigStrdup("dbe"),
-                                   XCONFIG_LOAD_MODULE, NULL, FALSE);
-    l = xconfigAddNewLoadDirective(l, xconfigStrdup("extmod"),
-                                   XCONFIG_LOAD_MODULE, NULL, FALSE);
-    l = xconfigAddNewLoadDirective(l, xconfigStrdup("type1"),
-                                   XCONFIG_LOAD_MODULE, NULL, FALSE);
+    xconfigAddNewLoadDirective(&l, xconfigStrdup("dbe"),
+                               XCONFIG_LOAD_MODULE, NULL, FALSE);
+    xconfigAddNewLoadDirective(&l, xconfigStrdup("extmod"),
+                               XCONFIG_LOAD_MODULE, NULL, FALSE);
+    xconfigAddNewLoadDirective(&l, xconfigStrdup("type1"),
+                               XCONFIG_LOAD_MODULE, NULL, FALSE);
 #if defined(NV_SUNOS)
-    l = xconfigAddNewLoadDirective(l, xconfigStrdup("IA"),
-                                   XCONFIG_LOAD_MODULE, NULL, FALSE);
-    l = xconfigAddNewLoadDirective(l, xconfigStrdup("bitstream"),
-                                   XCONFIG_LOAD_MODULE, NULL, FALSE);
-    l = xconfigAddNewLoadDirective(l, xconfigStrdup("xtsol"),
-                                   XCONFIG_LOAD_MODULE, NULL, FALSE);
+    xconfigAddNewLoadDirective(&l, xconfigStrdup("IA"),
+                               XCONFIG_LOAD_MODULE, NULL, FALSE);
+    xconfigAddNewLoadDirective(&l, xconfigStrdup("bitstream"),
+                               XCONFIG_LOAD_MODULE, NULL, FALSE);
+    xconfigAddNewLoadDirective(&l, xconfigStrdup("xtsol"),
+                               XCONFIG_LOAD_MODULE, NULL, FALSE);
 #else
-    l = xconfigAddNewLoadDirective(l, xconfigStrdup("freetype"),
-                                   XCONFIG_LOAD_MODULE, NULL, FALSE);
+    xconfigAddNewLoadDirective(&l, xconfigStrdup("freetype"),
+                               XCONFIG_LOAD_MODULE, NULL, FALSE);
 #endif
-    l = xconfigAddNewLoadDirective(l, xconfigStrdup("glx"),
-                                   XCONFIG_LOAD_MODULE, NULL, FALSE);
+    xconfigAddNewLoadDirective(&l, xconfigStrdup("glx"),
+                               XCONFIG_LOAD_MODULE, NULL, FALSE);
     
     config->modules->loads = l;
     
@@ -429,7 +412,6 @@
 XConfigMonitorPtr xconfigAddMonitor(XConfigPtr config, int count)
 {
     XConfigMonitorPtr monitor, m;
-    XConfigOptionPtr opt = NULL;
 
     /* XXX need to query resman for the EDID */
 
@@ -443,16 +425,15 @@
     /* XXX check EDID for freq ranges */
 
     monitor->n_hsync = 1;
-    monitor->hsync[0].lo = 30.0;
-    monitor->hsync[0].hi = 110.0;
+    monitor->hsync[0].lo = 28.0;
+    monitor->hsync[0].hi = 33.0;
 
     monitor->n_vrefresh = 1;
-    monitor->vrefresh[0].lo = 50.0;
-    monitor->vrefresh[0].hi = 150.0;
-
-    opt = xconfigAddNewOption(opt, "DPMS", NULL);
-
-    monitor->options = opt;
+    monitor->vrefresh[0].lo = 43.0;
+    monitor->vrefresh[0].hi = 72.0;
+
+    monitor->options = NULL;
+    xconfigAddNewOption(&monitor->options, "DPMS", NULL);
 
     /* append to the end of the monitor list */
     
@@ -512,7 +493,7 @@
 
 
 
-XConfigDisplayPtr xconfigAddDisplay(XConfigDisplayPtr head, const int depth)
+void xconfigAddDisplay(XConfigDisplayPtr *pHead, const int depth)
 {
     XConfigDisplayPtr display;
 
@@ -524,9 +505,8 @@
     display->black.red = -1;
     display->white.red = -1;
 
-    display->next = head;
-    
-    return display;
+    display->next = *pHead;
+    *pHead = display;
 }
 
 
@@ -583,8 +563,8 @@
     inputRef = xconfigAlloc(sizeof(XConfigInputrefRec));
     inputRef->input_name = xconfigStrdup(name);
     inputRef->input = xconfigFindInput(inputRef->input_name, config->inputs);
-    inputRef->options =
-        xconfigAddNewOption(NULL, coreKeyword, NULL);
+    inputRef->options = NULL;
+    xconfigAddNewOption(&inputRef->options, coreKeyword, NULL);
     inputRef->next = layout->inputs;
     layout->inputs = inputRef;
 
@@ -935,7 +915,6 @@
 {
     const MouseEntry *entry = NULL;
     XConfigInputPtr input;
-    XConfigOptionPtr opt = NULL;
     char *device_path, *comment = "default";
     
     /* if the user specified on the commandline, use that */
@@ -1032,9 +1011,10 @@
 
     device_path = xconfigStrcat("/dev/", entry->device, NULL);
 
-    opt = xconfigAddNewOption(opt, "Protocol", entry->Xproto);
-    opt = xconfigAddNewOption(opt, "Device", device_path);
-    opt = xconfigAddNewOption(opt, "Emulate3Buttons",
+    input->options = NULL;
+    xconfigAddNewOption(&input->options, "Protocol", entry->Xproto);
+    xconfigAddNewOption(&input->options, "Device", device_path);
+    xconfigAddNewOption(&input->options, "Emulate3Buttons",
                               (entry->emulate3 ? "yes" : "no"));
     TEST_FREE(device_path);
     
@@ -1044,9 +1024,7 @@
      * ignore ZAxisMapping
      */
 
-    opt = xconfigAddNewOption(opt, "ZAxisMapping", "4 5");
-    
-    input->options = opt;
+    xconfigAddNewOption(&input->options, "ZAxisMapping", "4 5");
     
     input->next = config->inputs;
     config->inputs = input;
@@ -1230,7 +1208,6 @@
     const KeyboardEntry *entry = NULL;
     
     XConfigInputPtr input;
-    XConfigOptionPtr opt = NULL;
     
     /*
      * if the user specified on the command line, use that
@@ -1297,16 +1274,18 @@
      * entry we found above
      */
 
-    if (entry && entry->layout)
-        opt = xconfigAddNewOption(opt, "XkbLayout", entry->layout);
-    if (entry && entry->model)
-        opt = xconfigAddNewOption(opt, "XkbModel", entry->model);
-    if (entry && entry->variant)
-        opt = xconfigAddNewOption(opt, "XkbVariant", entry->variant);
-    if (entry && entry->options)
-        opt = xconfigAddNewOption(opt, "XkbOptions", entry->options);
-
-    input->options = opt;
+    input->options = NULL;
+
+    if (entry) {
+        if (entry->layout)
+            xconfigAddNewOption(&input->options, "XkbLayout", entry->layout);
+        if (entry->model)
+            xconfigAddNewOption(&input->options, "XkbModel", entry->model);
+        if (entry->variant)
+            xconfigAddNewOption(&input->options, "XkbVariant", entry->variant);
+        if (entry->options)
+            xconfigAddNewOption(&input->options, "XkbOptions", entry->options);
+    }
     
     input->next = config->inputs;
     config->inputs = input;
@@ -1314,3 +1293,152 @@
     return TRUE;
     
 } /* xconfigAddKeyboard() */
+
+
+
+/*
+ * xconfigGetDefaultProjectRoot() - scan some common directories for the X
+ * project root.
+ *
+ * Users of this information should be careful to account for the
+ * modular layout.
+ */
+
+static char *xconfigGetDefaultProjectRoot(void)
+{
+    char *paths[] = { "/usr/X11R6", "/usr/X11", NULL };
+    struct stat stat_buf;
+    int i;
+        
+    for (i = 0; paths[i]; i++) {
+        
+        if (stat(paths[i], &stat_buf) == -1) {
+            continue;
+        }
+    
+        if (S_ISDIR(stat_buf.st_mode)) {
+            return paths[i];
+        }
+    }
+    
+    /* default to "/usr/X11R6", I guess */
+
+    return paths[0];
+
+} /* xconfigGetDefaultProjectRoot() */
+
+
+
+/*
+ * xconfigGetXServerInUse() - try to determine which X server is in use
+ * (XFree86, Xorg); also determine if the X server supports the
+ * Extension section of the X config file; support for the "Extension"
+ * section was added between X.Org 6.7 and 6.8.
+ *
+ * Some of the parsing here mimics what is done in the
+ * check_for_modular_xorg() function in nvidia-installer
+ */
+
+#define NV_LINE_LEN 1024
+#define EXTRA_PATH "/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin:/usr/bin/X11"
+#define VERSION_FORMAT "X Protocol Version %d, Revision %d, Release %d.%d"
+
+void xconfigGetXServerInUse(GenerateOptions *gop)
+{
+#if defined(NV_SUNOS)    
+
+    /*
+     * Solaris x86/x64 always uses X.Org 6.8 or higher, atleast as far
+     * as the NVIDIA X driver is concerned
+     */
+    
+    gop->xserver = X_IS_XORG;
+    gop->supports_extension_section = TRUE;
+    
+#else
+    
+    FILE *stream = NULL;
+    int xserver = -1;
+    int dummy, len, release_major, release_minor;
+    char *cmd, *ptr, *ret;
+    
+    gop->supports_extension_section = FALSE;
+    
+    /* run `X -version` with a PATH that hopefully includes the X binary */
+    
+    cmd = xconfigStrcat("PATH=", gop->x_project_root, ":",
+                        EXTRA_PATH, ":$PATH X -version 2>&1", NULL);
+    
+    if ((stream = popen(cmd, "r"))) {
+        char buf[NV_LINE_LEN];
+        
+        /* read in as much of the input as we can fit into the buffer */
+        
+        ptr = buf;
+
+        do {
+            len = NV_LINE_LEN - (ptr - buf) - 1;
+            ret = fgets(ptr, len, stream);
+            ptr = strchr(ptr, '\0');
+        } while ((ret != NULL) && (len > 1));
+        
+        /* Check if this is an XFree86 release */
+        
+        if (strstr(buf, "XFree86 Version") != NULL) {
+            xserver = X_IS_XF86;
+            gop->supports_extension_section = FALSE;
+        } else {
+            xserver = X_IS_XORG;
+            if ((ptr = strstr(buf, "X Protocol Version")) != NULL &&
+                sscanf(ptr, VERSION_FORMAT, &dummy, &dummy,
+                       &release_major, &release_minor) == 4) {
+                
+                if ((release_major > 6) ||
+                    ((release_major == 6) && (release_minor >= 8))) {
+                    gop->supports_extension_section = TRUE; 
+                }
+            }
+        } 
+    }
+    /* Close the popen()'ed stream. */
+    pclose(stream);
+    free(cmd);
+
+    if (xserver == -1) {
+        char *xorgpath;
+
+        xorgpath = xconfigStrcat(gop->x_project_root, "/bin/Xorg", NULL);
+        if (access(xorgpath, F_OK)==0) {
+            xserver = X_IS_XORG;
+        } else {
+            xserver = X_IS_XF86;
+        }
+        free(xorgpath);
+    }
+    
+    gop->xserver=xserver;
+#endif
+
+} /* xconfigGetXServerInUse() */
+
+
+
+/*
+ * xconfigGenerateLoadDefaultOptions - initialize a GenerateOptions
+ * structure with default values by peeking at the file system.
+ */
+
+void xconfigGenerateLoadDefaultOptions(GenerateOptions *gop)
+{
+    memset(gop, 0, sizeof(GenerateOptions));
+
+    gop->x_project_root = xconfigGetDefaultProjectRoot();
+
+    /* XXX What to default the following to?
+       gop->xserver
+       gop->keyboard
+       gop->mouse
+       gop->keyboard_driver
+     */
+
+} /* xconfigGenerateLoadDefaultOptions() */

Modified: packages/nvidia-settings/trunk/src/XF86Config-parser/Input.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/XF86Config-parser/Input.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/XF86Config-parser/Input.c (original)
+++ packages/nvidia-settings/trunk/src/XF86Config-parser/Input.c Sun Jan 11 05:41:46 2009
@@ -139,19 +139,22 @@
 }
 
 void
-xconfigFreeInputList (XConfigInputPtr ptr)
+xconfigFreeInputList (XConfigInputPtr *ptr)
 {
     XConfigInputPtr prev;
 
-    while (ptr)
+    if (ptr == NULL || *ptr == NULL)
+        return;
+
+    while (*ptr)
     {
-        TEST_FREE (ptr->identifier);
-        TEST_FREE (ptr->driver);
-        TEST_FREE (ptr->comment);
-        xconfigOptionListFree (ptr->options);
-
-        prev = ptr;
-        ptr = ptr->next;
+        TEST_FREE ((*ptr)->identifier);
+        TEST_FREE ((*ptr)->driver);
+        TEST_FREE ((*ptr)->comment);
+        xconfigFreeOptionList (&((*ptr)->options));
+
+        prev = *ptr;
+        *ptr = (*ptr)->next;
         free (prev);
     }
 }
@@ -242,10 +245,12 @@
             if (!core) {
                 core = input;
             } else {
-                if (opt1) input->options =
-                              xconfigRemoveOption(input->options, opt1);
-                if (opt2) inputRef->options =
-                              xconfigRemoveOption(inputRef->options, opt2);
+                if (opt1) {
+                    xconfigRemoveOption(&input->options, opt1);
+                }
+                if (opt2) {
+                    xconfigRemoveOption(&inputRef->options, opt2);
+                }
                 xconfigErrorMsg(WarnMsg, "Duplicate %s devices; removing %s "
                              "attribute from \"%s\"\n",
                              coreKeyword, coreKeyword, input->identifier);
@@ -367,8 +372,7 @@
             opt2 = xconfigFindOption(inputRef->options, coreKeyword);
 
             if (!opt1 && !opt2) {
-                inputRef->options = xconfigAddNewOption(inputRef->options,
-                                                        coreKeyword, NULL);
+                xconfigAddNewOption(&inputRef->options, coreKeyword, NULL);
             }
             break;
         }

Modified: packages/nvidia-settings/trunk/src/XF86Config-parser/Keyboard.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/XF86Config-parser/Keyboard.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/XF86Config-parser/Keyboard.c (original)
+++ packages/nvidia-settings/trunk/src/XF86Config-parser/Keyboard.c Sun Jan 11 05:41:46 2009
@@ -126,9 +126,7 @@
             case KPROTOCOL:
                 if (xconfigGetSubToken (&(ptr->comment)) != STRING)
                     Error (QUOTE_MSG, "Protocol");
-                ptr->options = xconfigAddNewOption(ptr->options,
-                                                   xconfigStrdup("Protocol"),
-                                                   val.str);
+                xconfigAddNewOption(&ptr->options, "Protocol", val.str);
                 break;
             case AUTOREPEAT:
                 if (xconfigGetSubToken (&(ptr->comment)) != NUMBER)
@@ -142,9 +140,7 @@
                 sprintf(s, "%s %s", s1, s2);
                 free(s1);
                 free(s2);
-                ptr->options =
-                    xconfigAddNewOption(ptr->options,
-                                        xconfigStrdup("AutoRepeat"), s);
+                xconfigAddNewOption(&ptr->options, "AutoRepeat", s);
                 break;
             case XLEDS:
                 if (xconfigGetSubToken (&(ptr->comment)) != NUMBER)
@@ -178,7 +174,7 @@
                 {
                 case EOF_TOKEN:
                     xconfigErrorMsg(ParseErrorMsg, UNEXPECTED_EOF_MSG);
-                    CLEANUP (ptr);
+                    CLEANUP (&ptr);
                     return (NULL);
                     break;
                     
@@ -197,93 +193,65 @@
                                 MOVED_TO_FLAGS_MSG, "VTSysReq");
                 break;
             case XKBDISABLE:
-                ptr->options = xconfigAddNewOption(ptr->options,
-                                                   xconfigStrdup("XkbDisable"),
-                                                   NULL);
+                xconfigAddNewOption(&ptr->options, "XkbDisable", NULL);
                 break;
             case XKBKEYMAP:
                 if (xconfigGetSubToken (&(ptr->comment)) != STRING)
                     Error (QUOTE_MSG, "XKBKeymap");
-                ptr->options = xconfigAddNewOption(ptr->options,
-                                                   xconfigStrdup("XkbKeymap"),
-                                                   val.str);
+                xconfigAddNewOption(&ptr->options, "XkbKeymap", val.str);
                 break;
             case XKBCOMPAT:
                 if (xconfigGetSubToken (&(ptr->comment)) != STRING)
                     Error (QUOTE_MSG, "XKBCompat");
-                ptr->options = xconfigAddNewOption(ptr->options,
-                                                   xconfigStrdup("XkbCompat"),
-                                                   val.str);
+                xconfigAddNewOption(&ptr->options, "XkbCompat", val.str);
                 break;
             case XKBTYPES:
                 if (xconfigGetSubToken (&(ptr->comment)) != STRING)
                     Error (QUOTE_MSG, "XKBTypes");
-                ptr->options = xconfigAddNewOption(ptr->options,
-                                                   xconfigStrdup("XkbTypes"),
-                                                   val.str);
+                xconfigAddNewOption(&ptr->options, "XkbTypes", val.str);
                 break;
             case XKBKEYCODES:
                 if (xconfigGetSubToken (&(ptr->comment)) != STRING)
                     Error (QUOTE_MSG, "XKBKeycodes");
-                ptr->options =
-                    xconfigAddNewOption(ptr->options,
-                                        xconfigStrdup("XkbKeycodes"),
-                                        val.str);
+                xconfigAddNewOption(&ptr->options, "XkbKeycodes", val.str);
                 break;
             case XKBGEOMETRY:
                 if (xconfigGetSubToken (&(ptr->comment)) != STRING)
                     Error (QUOTE_MSG, "XKBGeometry");
-                ptr->options =
-                    xconfigAddNewOption(ptr->options,
-                                        xconfigStrdup("XkbGeometry"),
-                                        val.str);
+                xconfigAddNewOption(&ptr->options, "XkbGeometry", val.str);
                 break;
             case XKBSYMBOLS:
                 if (xconfigGetSubToken (&(ptr->comment)) != STRING)
                     Error (QUOTE_MSG, "XKBSymbols");
-                ptr->options = xconfigAddNewOption(ptr->options,
-                                                   xconfigStrdup("XkbSymbols"),
-                                                   val.str);
+                xconfigAddNewOption(&ptr->options, "XkbSymbols", val.str);
                 break;
             case XKBRULES:
                 if (xconfigGetSubToken (&(ptr->comment)) != STRING)
                     Error (QUOTE_MSG, "XKBRules");
-                ptr->options = xconfigAddNewOption(ptr->options,
-                                                   xconfigStrdup("XkbRules"),
-                                                   val.str);
+                xconfigAddNewOption(&ptr->options, "XkbRules", val.str);
                 break;
             case XKBMODEL:
                 if (xconfigGetSubToken (&(ptr->comment)) != STRING)
                     Error (QUOTE_MSG, "XKBModel");
-                ptr->options = xconfigAddNewOption(ptr->options,
-                                                   xconfigStrdup("XkbModel"),
-                                                   val.str);
+                xconfigAddNewOption(&ptr->options, "XkbModel", val.str);
                 break;
             case XKBLAYOUT:
                 if (xconfigGetSubToken (&(ptr->comment)) != STRING)
                     Error (QUOTE_MSG, "XKBLayout");
-                ptr->options = xconfigAddNewOption(ptr->options,
-                                                   xconfigStrdup("XkbLayout"),
-                                                   val.str);
+                xconfigAddNewOption(&ptr->options, "XkbLayout", val.str);
                 break;
             case XKBVARIANT:
                 if (xconfigGetSubToken (&(ptr->comment)) != STRING)
                     Error (QUOTE_MSG, "XKBVariant");
-                ptr->options = xconfigAddNewOption(ptr->options,
-                                                   xconfigStrdup("XkbVariant"),
-                                                   val.str);
+                xconfigAddNewOption(&ptr->options, "XkbVariant", val.str);
                 break;
             case XKBOPTIONS:
                 if (xconfigGetSubToken (&(ptr->comment)) != STRING)
                     Error (QUOTE_MSG, "XKBOptions");
-                ptr->options = xconfigAddNewOption(ptr->options,
-                                                   xconfigStrdup("XkbOptions"),
-                                                   val.str);
+                xconfigAddNewOption(&ptr->options, "XkbOptions", val.str);
                 break;
             case PANIX106:
-                ptr->options = xconfigAddNewOption(ptr->options,
-                                                   xconfigStrdup("Panix106"),
-                                                   NULL);
+                xconfigAddNewOption(&ptr->options, "Panix106", NULL);
                 break;
             case EOF_TOKEN:
                 Error (UNEXPECTED_EOF_MSG, NULL);
@@ -296,8 +264,7 @@
     
     ptr->identifier = xconfigStrdup(CONF_IMPLICIT_KEYBOARD);
     ptr->driver = xconfigStrdup("keyboard");
-    ptr->options = xconfigAddNewOption(ptr->options,
-                                       xconfigStrdup("CoreKeyboard"), NULL);
+    xconfigAddNewOption(&ptr->options, "CoreKeyboard", NULL);
     
     return ptr;
 }

Modified: packages/nvidia-settings/trunk/src/XF86Config-parser/Layout.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/XF86Config-parser/Layout.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/XF86Config-parser/Layout.c (original)
+++ packages/nvidia-settings/trunk/src/XF86Config-parser/Layout.c Sun Jan 11 05:41:46 2009
@@ -121,9 +121,8 @@
                 if (xconfigGetSubToken (&(ptr->comment)) != STRING)
                     Error (INACTIVE_MSG, NULL);
                 iptr->device_name = val.str;
-                ptr->inactives = (XConfigInactivePtr)
-                    xconfigAddListItem((GenericListPtr) ptr->inactives,
-                                    (GenericListPtr) iptr);
+                xconfigAddListItem((GenericListPtr *)(&ptr->inactives),
+                                   (GenericListPtr) iptr);
             }
             break;
         case SCREEN:
@@ -240,9 +239,8 @@
                     aptr->right_name = val.str;
 
                 }
-                ptr->adjacencies = (XConfigAdjacencyPtr)
-                    xconfigAddListItem((GenericListPtr) ptr->adjacencies,
-                                    (GenericListPtr) aptr);
+                xconfigAddListItem((GenericListPtr *)(&ptr->adjacencies),
+                                   (GenericListPtr) aptr);
             }
             break;
         case INPUTDEVICE:
@@ -252,18 +250,15 @@
                 iptr = calloc (1, sizeof (XConfigInputrefRec));
                 iptr->next = NULL;
                 iptr->options = NULL;
-                if (xconfigGetSubToken (&(ptr->comment)) != STRING)
+                if (xconfigGetSubToken(&(ptr->comment)) != STRING)
                     Error (INPUTDEV_MSG, NULL);
                 iptr->input_name = val.str;
-                while ((token = xconfigGetSubToken (&(ptr->comment))) == STRING)
-                {
-                    iptr->options =
-                        xconfigAddNewOption (iptr->options, val.str, NULL);
+                while ((token = xconfigGetSubToken(&(ptr->comment))) == STRING) {
+                    xconfigAddNewOption(&iptr->options, val.str, NULL);
                 }
-                xconfigUnGetToken (token);
-                ptr->inputs = (XConfigInputrefPtr)
-                    xconfigAddListItem((GenericListPtr) ptr->inputs,
-                                    (GenericListPtr) iptr);
+                xconfigUnGetToken(token);
+                xconfigAddListItem((GenericListPtr *)(&ptr->inputs),
+                                   (GenericListPtr) iptr);
             }
             break;
         case OPTION:
@@ -360,53 +355,62 @@
 }
 
 void
-xconfigFreeLayoutList (XConfigLayoutPtr ptr)
+xconfigFreeLayoutList (XConfigLayoutPtr *ptr)
 {
     XConfigLayoutPtr prev;
 
-    while (ptr)
+    if (ptr == NULL || *ptr == NULL)
+        return;
+
+    while (*ptr)
     {
-        TEST_FREE (ptr->identifier);
-        TEST_FREE (ptr->comment);
-        xconfigFreeAdjacencyList (ptr->adjacencies);
-        xconfigFreeInputrefList (ptr->inputs);
-        prev = ptr;
-        ptr = ptr->next;
+        TEST_FREE ((*ptr)->identifier);
+        TEST_FREE ((*ptr)->comment);
+        xconfigFreeAdjacencyList (&((*ptr)->adjacencies));
+        xconfigFreeInputrefList (&((*ptr)->inputs));
+        prev = *ptr;
+        *ptr = (*ptr)->next;
         free (prev);
     }
 }
 
 void
-xconfigFreeAdjacencyList (XConfigAdjacencyPtr ptr)
+xconfigFreeAdjacencyList (XConfigAdjacencyPtr *ptr)
 {
     XConfigAdjacencyPtr prev;
 
-    while (ptr)
+    if (ptr == NULL || *ptr == NULL)
+        return;
+
+    while (*ptr)
     {
-        TEST_FREE (ptr->screen_name);
-        TEST_FREE (ptr->top_name);
-        TEST_FREE (ptr->bottom_name);
-        TEST_FREE (ptr->left_name);
-        TEST_FREE (ptr->right_name);
-
-        prev = ptr;
-        ptr = ptr->next;
+        TEST_FREE ((*ptr)->screen_name);
+        TEST_FREE ((*ptr)->top_name);
+        TEST_FREE ((*ptr)->bottom_name);
+        TEST_FREE ((*ptr)->left_name);
+        TEST_FREE ((*ptr)->right_name);
+
+        prev = *ptr;
+        *ptr = (*ptr)->next;
         free (prev);
     }
 
 }
 
 void
-xconfigFreeInputrefList (XConfigInputrefPtr ptr)
+xconfigFreeInputrefList (XConfigInputrefPtr *ptr)
 {
     XConfigInputrefPtr prev;
 
-    while (ptr)
+    if (ptr == NULL || *ptr == NULL)
+        return;
+
+    while (*ptr)
     {
-        TEST_FREE (ptr->input_name);
-        xconfigOptionListFree (ptr->options);
-        prev = ptr;
-        ptr = ptr->next;
+        TEST_FREE ((*ptr)->input_name);
+        xconfigFreeOptionList (&((*ptr)->options));
+        prev = *ptr;
+        *ptr = (*ptr)->next;
         free (prev);
     }
 

Modified: packages/nvidia-settings/trunk/src/XF86Config-parser/Merge.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/XF86Config-parser/Merge.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/XF86Config-parser/Merge.c (original)
+++ packages/nvidia-settings/trunk/src/XF86Config-parser/Merge.c Sun Jan 11 05:41:46 2009
@@ -76,17 +76,17 @@
  * list and (if specified) adds a comment to an existing comments string
  *
  */
-static void xconfigRemoveNamedOption(XConfigOptionPtr *head, char *name,
-                                     char **comments)
+void xconfigRemoveNamedOption(XConfigOptionPtr *pHead, const char *name,
+                              char **comments)
 {
     XConfigOptionPtr option;
 
-    option = xconfigFindOption(*head, name);
+    option = xconfigFindOption(*pHead, name);
     if (option) {
         if (comments) {
             xconfigAddRemovedOptionComment(comments, option);
         }
-        *head = xconfigRemoveOption(*head, option);
+        xconfigRemoveOption(pHead, option);
     }
 
 } /* xconfigRemoveNamedOption() */
@@ -153,12 +153,12 @@
     if (!srcOption && dstOption) {
 
         /* option does not exist in src, but exists in dst: remove from dst */
-        *dstHead = xconfigRemoveOption(*dstHead, dstOption);
+        xconfigRemoveOption(dstHead, dstOption);
 
     } else if (srcOption && !dstOption) {
 
         /* option exists in src but not in dst: add to dst */
-        *dstHead = xconfigAddNewOption(*dstHead, name, srcValue);
+        xconfigAddNewOption(dstHead, name, srcValue);
 
     } else if (srcOption && dstOption) {
 
@@ -173,7 +173,7 @@
             if (comments) {
                 xconfigAddRemovedOptionComment(comments, dstOption);
             }
-            *dstHead = xconfigAddNewOption(*dstHead, name, srcValue);
+            xconfigAddNewOption(dstHead, name, srcValue);
         }
     }
 
@@ -259,8 +259,7 @@
     /* XXX Remove the destination monitor's "UseModes" references to
      *     avoid having the wrong modelines tied to the new monitor.
      */
-    xconfigFreeModesLinkList(dstMonitor->modes_sections);
-    dstMonitor->modes_sections = NULL;
+    xconfigFreeModesLinkList(&dstMonitor->modes_sections);
 
 } /* xconfigMergeMonitors() */
 
@@ -295,9 +294,8 @@
 
             dstMonitor->identifier = xconfigStrdup(srcMonitor->identifier);
 
-            dstConfig->monitors = (XConfigMonitorPtr)
-                xconfigAddListItem((GenericListPtr)dstConfig->monitors,
-                                   (GenericListPtr)dstMonitor);
+            xconfigAddListItem((GenericListPtr *)(&dstConfig->monitors),
+                               (GenericListPtr)dstMonitor);
         }
 
         /* Do the merge */
@@ -386,9 +384,8 @@
 
             dstDevice->identifier = xconfigStrdup(srcDevice->identifier);
 
-            dstConfig->devices = (XConfigDevicePtr)
-                xconfigAddListItem((GenericListPtr)dstConfig->devices,
-                                   (GenericListPtr)dstDevice);
+            xconfigAddListItem((GenericListPtr *)(&dstConfig->devices),
+                               (GenericListPtr)dstDevice);
         }
 
         /* Do the merge */
@@ -451,9 +448,8 @@
 
         /* Add the option to the screen->options list */
 
-        dstScreen->options =
-            xconfigAddNewOption(dstScreen->options,
-                                name, xconfigOptionValue(option));
+        xconfigAddNewOption(&dstScreen->options,
+                            name, xconfigOptionValue(option));
         
         option = option->next;
     }
@@ -478,7 +474,7 @@
 
     /* Free all the displays in the destination screen */
 
-    xconfigFreeDisplayList(dstScreen->displays);
+    xconfigFreeDisplayList(&dstScreen->displays);
 
     /* Copy all te displays */
     
@@ -513,11 +509,12 @@
 
         lastDstMode = NULL;
         srcMode = srcDisplay->modes;
+        dstMode = NULL;
         while (srcMode) {
 
             /* Copy the mode */
-
-            dstMode = xconfigAddMode(NULL, srcMode->mode_name);
+            
+            xconfigAddMode(&dstMode, srcMode->mode_name);
 
             /* Add mode at the end of the list */
 
@@ -530,6 +527,9 @@
 
             srcMode = srcMode->next;
         }
+
+        xconfigAddListItem((GenericListPtr *)(&dstScreen->displays),
+                           (GenericListPtr)dstDisplay);
     }
 
     return 1;
@@ -614,9 +614,8 @@
 
             dstScreen->identifier = xconfigStrdup(srcScreen->identifier);
 
-            dstConfig->screens = (XConfigScreenPtr)
-                xconfigAddListItem((GenericListPtr)dstConfig->screens,
-                                   (GenericListPtr)dstScreen);
+            xconfigAddListItem((GenericListPtr *)(&dstConfig->screens),
+                               (GenericListPtr)dstScreen);
         }
 
         /* Do the merge */
@@ -643,9 +642,13 @@
     XConfigAdjacencyPtr dstAdj;
     XConfigAdjacencyPtr lastDstAdj;
 
+    if (!dstLayout || !srcLayout) {
+        return 0;
+    }
+
     /* Clear the destination's adjacency list */
 
-    xconfigFreeAdjacencyList(dstLayout->adjacencies);
+    xconfigFreeAdjacencyList(&dstLayout->adjacencies);
     
     /* Copy adjacencies over */
     
@@ -682,7 +685,7 @@
 
         /* Add adjacency at the end of the list */
         
-        if ( !lastDstAdj ) {
+        if (!lastDstAdj) {
             dstLayout->adjacencies = dstAdj;
         } else {
             lastDstAdj->next = dstAdj;

Modified: packages/nvidia-settings/trunk/src/XF86Config-parser/Module.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/XF86Config-parser/Module.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/XF86Config-parser/Module.c (original)
+++ packages/nvidia-settings/trunk/src/XF86Config-parser/Module.c Sun Jan 11 05:41:46 2009
@@ -114,8 +114,8 @@
 
     }
 
-    return ((XConfigLoadPtr) xconfigAddListItem ((GenericListPtr) head,
-                                           (GenericListPtr) ptr));
+    xconfigAddListItem((GenericListPtr *)(&head), (GenericListPtr)ptr);
+    return head;
 }
 
 XConfigModulePtr
@@ -134,16 +134,14 @@
         case LOAD:
             if (xconfigGetSubToken (&(ptr->comment)) != STRING)
                 Error (QUOTE_MSG, "Load");
-            ptr->loads =
-                xconfigAddNewLoadDirective (ptr->loads, val.str,
-                                         XCONFIG_LOAD_MODULE, NULL, TRUE);
+            xconfigAddNewLoadDirective (&ptr->loads, val.str,
+                                        XCONFIG_LOAD_MODULE, NULL, TRUE);
             break;
         case LOAD_DRIVER:
             if (xconfigGetSubToken (&(ptr->comment)) != STRING)
                 Error (QUOTE_MSG, "LoadDriver");
-            ptr->loads =
-                xconfigAddNewLoadDirective (ptr->loads, val.str,
-                                         XCONFIG_LOAD_DRIVER, NULL, TRUE);
+            xconfigAddNewLoadDirective (&ptr->loads, val.str,
+                                        XCONFIG_LOAD_DRIVER, NULL, TRUE);
             break;
         case SUBSECTION:
             if (xconfigGetSubToken (&(ptr->comment)) != STRING)
@@ -212,8 +210,8 @@
     }
 }
 
-XConfigLoadPtr
-xconfigAddNewLoadDirective (XConfigLoadPtr head, char *name, int type,
+void
+xconfigAddNewLoadDirective (XConfigLoadPtr *pHead, char *name, int type,
                             XConfigOptionPtr opts, int do_token)
 {
     XConfigLoadPtr new;
@@ -226,49 +224,37 @@
     new->next = NULL;
 
     if (do_token) {
-        if ((token = xconfigGetToken(NULL)) == COMMENT)
+        if ((token = xconfigGetToken(NULL)) == COMMENT) {
             new->comment = xconfigAddComment(new->comment, val.str);
-        else
+        } else {
             xconfigUnGetToken(token);
-    }
-
-    return ((XConfigLoadPtr) xconfigAddListItem ((GenericListPtr) head,
-                                           (GenericListPtr) new));
-}
-
-XConfigLoadPtr
-xconfigRemoveLoadDirective(XConfigLoadPtr head, XConfigLoadPtr load)
-{
-    XConfigLoadPtr prev = NULL;
-    XConfigLoadPtr l = head;
-
-    while (l) {
-        if (l == load) {
-            if (prev) prev->next = load->next;
-            if (head == load) head = load->next;
-            TEST_FREE(load->name);
-            TEST_FREE(load->comment);
-            xconfigOptionListFree(load->opt);
-            free(load);
-            break;
-        }
-        
-        prev = l;
-        l = l->next;
-    }
-
-    return head;
-}
-
-void
-xconfigFreeModules (XConfigModulePtr ptr)
+        }
+    }
+
+    xconfigAddListItem((GenericListPtr *)pHead, (GenericListPtr)new);
+}
+
+void
+xconfigRemoveLoadDirective(XConfigLoadPtr *pHead, XConfigLoadPtr load)
+{
+     xconfigRemoveListItem((GenericListPtr *)pHead, (GenericListPtr)load);
+
+    TEST_FREE(load->name);
+    TEST_FREE(load->comment);
+    xconfigFreeOptionList(&(load->opt));
+    free(load);
+}
+
+void
+xconfigFreeModules (XConfigModulePtr *ptr)
 {
     XConfigLoadPtr lptr;
     XConfigLoadPtr prev;
 
-    if (ptr == NULL)
+    if (ptr == NULL || *ptr == NULL)
         return;
-    lptr = ptr->loads;
+
+    lptr = (*ptr)->loads;
     while (lptr)
     {
         TEST_FREE (lptr->name);
@@ -277,6 +263,7 @@
         lptr = lptr->next;
         free (prev);
     }
-    TEST_FREE (ptr->comment);
-    free (ptr);
-}
+    TEST_FREE ((*ptr)->comment);
+    free (*ptr);
+    *ptr = NULL;
+}

Modified: packages/nvidia-settings/trunk/src/XF86Config-parser/Monitor.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/XF86Config-parser/Monitor.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/XF86Config-parser/Monitor.c (original)
+++ packages/nvidia-settings/trunk/src/XF86Config-parser/Monitor.c Sun Jan 11 05:41:46 2009
@@ -560,9 +560,8 @@
                 mptr->next = NULL;
                 mptr->modes_name = val.str;
                 mptr->modes = NULL;
-                ptr->modes_sections = (XConfigModesLinkPtr)
-                    xconfigAddListItem((GenericListPtr)ptr->modes_sections,
-                            (GenericListPtr)mptr);
+                xconfigAddListItem((GenericListPtr *)(&ptr->modes_sections),
+                                   (GenericListPtr)mptr);
             }
             break;
         case EOF_TOKEN:
@@ -571,7 +570,7 @@
         default:
             xconfigErrorMsg(ParseErrorMsg, INVALID_KEYWORD_MSG,
                          xconfigTokenString());
-            CLEANUP (ptr);
+            CLEANUP (&ptr);
             return NULL;
             break;
         }
@@ -619,7 +618,7 @@
         default:
             xconfigErrorMsg(ParseErrorMsg, INVALID_KEYWORD_MSG,
                          xconfigTokenString());
-            CLEANUP (ptr);
+            CLEANUP (&ptr);
             return NULL;
             break;
         }
@@ -785,65 +784,78 @@
 }
 
 void
-xconfigFreeMonitorList (XConfigMonitorPtr ptr)
+xconfigFreeMonitorList (XConfigMonitorPtr *ptr)
 {
     XConfigMonitorPtr prev;
 
-    while (ptr)
-    {
-        TEST_FREE (ptr->identifier);
-        TEST_FREE (ptr->vendor);
-        TEST_FREE (ptr->modelname);
-        TEST_FREE (ptr->comment);
-        xconfigOptionListFree (ptr->options);
-        xconfigFreeModeLineList (ptr->modelines);
-        prev = ptr;
-        ptr = ptr->next;
+    if (ptr == NULL || *ptr == NULL)
+        return;
+
+    while (*ptr)
+    {
+        TEST_FREE ((*ptr)->identifier);
+        TEST_FREE ((*ptr)->vendor);
+        TEST_FREE ((*ptr)->modelname);
+        TEST_FREE ((*ptr)->comment);
+        xconfigFreeOptionList (&((*ptr)->options));
+        xconfigFreeModeLineList (&((*ptr)->modelines));
+        prev = *ptr;
+        *ptr = (*ptr)->next;
         free (prev);
     }
 }
 
 void
-xconfigFreeModesList (XConfigModesPtr ptr)
+xconfigFreeModesList (XConfigModesPtr *ptr)
 {
     XConfigModesPtr prev;
 
-    while (ptr)
-    {
-        TEST_FREE (ptr->identifier);
-        TEST_FREE (ptr->comment);
-        xconfigFreeModeLineList (ptr->modelines);
-        prev = ptr;
-        ptr = ptr->next;
+    if (ptr == NULL || *ptr == NULL)
+        return;
+
+    while (*ptr)
+    {
+        TEST_FREE ((*ptr)->identifier);
+        TEST_FREE ((*ptr)->comment);
+        xconfigFreeModeLineList (&((*ptr)->modelines));
+        prev = *ptr;
+        *ptr = (*ptr)->next;
         free (prev);
     }
 }
 
 void
-xconfigFreeModeLineList (XConfigModeLinePtr ptr)
+xconfigFreeModeLineList (XConfigModeLinePtr *ptr)
 {
     XConfigModeLinePtr prev;
-    while (ptr)
-    {
-        TEST_FREE (ptr->identifier);
-        TEST_FREE (ptr->comment);
-        TEST_FREE (ptr->clock);
-        prev = ptr;
-        ptr = ptr->next;
+
+    if (ptr == NULL || *ptr == NULL)
+        return;
+
+    while (*ptr)
+    {
+        TEST_FREE ((*ptr)->identifier);
+        TEST_FREE ((*ptr)->comment);
+        TEST_FREE ((*ptr)->clock);
+        prev = *ptr;
+        *ptr = (*ptr)->next;
         free (prev);
     }
 }
 
 void
-xconfigFreeModesLinkList (XConfigModesLinkPtr ptr)
+xconfigFreeModesLinkList (XConfigModesLinkPtr *ptr)
 {
     XConfigModesLinkPtr prev;
 
-    while (ptr)
-    {
-        TEST_FREE (ptr->modes_name);
-        prev = ptr;
-        ptr = ptr->next;
+    if (ptr == NULL || *ptr == NULL)
+        return;
+
+    while (*ptr)
+    {
+        TEST_FREE ((*ptr)->modes_name);
+        prev = *ptr;
+        *ptr = (*ptr)->next;
         free (prev);
     }
 }

Modified: packages/nvidia-settings/trunk/src/XF86Config-parser/Pointer.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/XF86Config-parser/Pointer.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/XF86Config-parser/Pointer.c (original)
+++ packages/nvidia-settings/trunk/src/XF86Config-parser/Pointer.c Sun Jan 11 05:41:46 2009
@@ -110,69 +110,59 @@
         case PROTOCOL:
             if (xconfigGetSubToken (&(ptr->comment)) != STRING)
                 Error (QUOTE_MSG, "Protocol");
-            ptr->options = xconfigAddNewOption(ptr->options,
-                                            "Protocol", val.str);
+            xconfigAddNewOption(&ptr->options, "Protocol", val.str);
             break;
         case PDEVICE:
             if (xconfigGetSubToken (&(ptr->comment)) != STRING)
                 Error (QUOTE_MSG, "Device");
-            ptr->options = xconfigAddNewOption(ptr->options,
-                                            "Device", val.str);
+            xconfigAddNewOption(&ptr->options, "Device", val.str);
             break;
         case EMULATE3:
-            ptr->options =
-                xconfigAddNewOption(ptr->options, "Emulate3Buttons", NULL);
+            xconfigAddNewOption(&ptr->options, "Emulate3Buttons", NULL);
             break;
         case EM3TIMEOUT:
             if (xconfigGetSubToken (&(ptr->comment)) != NUMBER || val.num < 0)
                 Error (POSITIVE_INT_MSG, "Emulate3Timeout");
             s = xconfigULongToString(val.num);
-            ptr->options =
-                xconfigAddNewOption(ptr->options, "Emulate3Timeout", s);
+            xconfigAddNewOption(&ptr->options, "Emulate3Timeout", s);
             TEST_FREE(s);
             break;
         case CHORDMIDDLE:
-            ptr->options = xconfigAddNewOption(ptr->options, "ChordMiddle",
-                                               NULL);
+            xconfigAddNewOption(&ptr->options, "ChordMiddle", NULL);
             break;
         case PBUTTONS:
             if (xconfigGetSubToken (&(ptr->comment)) != NUMBER || val.num < 0)
                 Error (POSITIVE_INT_MSG, "Buttons");
             s = xconfigULongToString(val.num);
-            ptr->options = xconfigAddNewOption(ptr->options, "Buttons", s);
+            xconfigAddNewOption(&ptr->options, "Buttons", s);
             TEST_FREE(s);
             break;
         case BAUDRATE:
             if (xconfigGetSubToken (&(ptr->comment)) != NUMBER || val.num < 0)
                 Error (POSITIVE_INT_MSG, "BaudRate");
             s = xconfigULongToString(val.num);
-            ptr->options =
-                xconfigAddNewOption(ptr->options, "BaudRate", s);
+            xconfigAddNewOption(&ptr->options, "BaudRate", s);
             TEST_FREE(s);
             break;
         case SAMPLERATE:
             if (xconfigGetSubToken (&(ptr->comment)) != NUMBER || val.num < 0)
                 Error (POSITIVE_INT_MSG, "SampleRate");
             s = xconfigULongToString(val.num);
-            ptr->options =
-                xconfigAddNewOption(ptr->options, "SampleRate", s);
+            xconfigAddNewOption(&ptr->options, "SampleRate", s);
             TEST_FREE(s);
             break;
         case PRESOLUTION:
             if (xconfigGetSubToken (&(ptr->comment)) != NUMBER || val.num < 0)
                 Error (POSITIVE_INT_MSG, "Resolution");
             s = xconfigULongToString(val.num);
-            ptr->options =
-                xconfigAddNewOption(ptr->options, "Resolution", s);
+            xconfigAddNewOption(&ptr->options, "Resolution", s);
             TEST_FREE(s);
             break;
         case CLEARDTR:
-            ptr->options =
-                xconfigAddNewOption(ptr->options, "ClearDTR", NULL);
+            xconfigAddNewOption(&ptr->options, "ClearDTR", NULL);
             break;
         case CLEARRTS:
-            ptr->options =
-                xconfigAddNewOption(ptr->options, "ClearRTS", NULL);
+            xconfigAddNewOption(&ptr->options, "ClearRTS", NULL);
             break;
         case ZAXISMAPPING:
             switch (xconfigGetToken(ZMapTab)) {
@@ -200,8 +190,7 @@
                 Error (ZAXISMAPPING_MSG, NULL);
                 break;
             }
-            ptr->options =
-                xconfigAddNewOption(ptr->options, "ZAxisMapping", s);
+            xconfigAddNewOption(&ptr->options, "ZAxisMapping", s);
             TEST_FREE(s);
             break;
         case ALWAYSCORE:
@@ -217,7 +206,7 @@
 
     ptr->identifier = xconfigStrdup(CONF_IMPLICIT_POINTER);
     ptr->driver = xconfigStrdup("mouse");
-    ptr->options = xconfigAddNewOption(ptr->options, "CorePointer", NULL);
+    xconfigAddNewOption(&ptr->options, "CorePointer", NULL);
 
     return ptr;
 }

Modified: packages/nvidia-settings/trunk/src/XF86Config-parser/Read.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/XF86Config-parser/Read.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/XF86Config-parser/Read.c (original)
+++ packages/nvidia-settings/trunk/src/XF86Config-parser/Read.c Sun Jan 11 05:41:46 2009
@@ -68,9 +68,9 @@
 
 #define CLEANUP xconfigFreeConfig
 
-#define READ_HANDLE_RETURN(f,func)      \
-    if ((ptr->f=func) == NULL) {        \
-        xconfigFreeConfig(ptr);            \
+#define READ_HANDLE_RETURN(f,func)         \
+    if ((ptr->f=func) == NULL) {           \
+        xconfigFreeConfig(&ptr);           \
         return XCONFIG_RETURN_PARSE_ERROR; \
     }
 
@@ -78,21 +78,20 @@
 {                                                                       \
     type p = func();                                                    \
     if (p == NULL) {                                                    \
-        xconfigFreeConfig(ptr);                                            \
-        return XCONFIG_RETURN_PARSE_ERROR;                                 \
+        xconfigFreeConfig(&ptr);                                        \
+        return XCONFIG_RETURN_PARSE_ERROR;                              \
     } else {                                                            \
-        ptr->field = (type)                                             \
-            xconfigAddListItem((GenericListPtr) ptr->field,                \
-                            (GenericListPtr) p);                        \
+        xconfigAddListItem((GenericListPtr *)(&ptr->field),             \
+                           (GenericListPtr) p);                         \
     }                                                                   \
 }
 
-#define READ_ERROR(a,b)                    \
-    do {                                   \
+#define READ_ERROR(a,b)                       \
+    do {                                      \
         xconfigErrorMsg(ParseErrorMsg, a, b); \
-        xconfigFreeConfig(ptr);               \
+        xconfigFreeConfig(&ptr);              \
         return XCONFIG_RETURN_PARSE_ERROR;    \
-    } while (0)                            \
+    } while (0)
 
 
 
@@ -121,7 +120,7 @@
         case SECTION:
             if (xconfigGetSubToken(&(ptr->comment)) != STRING) {
                 xconfigErrorMsg(ParseErrorMsg, QUOTE_MSG, "Section");
-                xconfigFreeConfig(ptr);
+                xconfigFreeConfig(&ptr);
                 return XCONFIG_RETURN_PARSE_ERROR;
             }
             
@@ -248,7 +247,7 @@
         *configPtr = ptr;
         return XCONFIG_RETURN_SUCCESS;
     } else {
-        xconfigFreeConfig(ptr);
+        xconfigFreeConfig(&ptr);
         return XCONFIG_RETURN_VALIDATION_ERROR;
     }
 }
@@ -300,56 +299,47 @@
 /* 
  * adds an item to the end of the linked list. Any record whose first field
  * is a GenericListRec can be cast to this type and used with this function.
- * A pointer to the head of the list is returned to handle the addition of
- * the first item.
- */
-GenericListPtr
-xconfigAddListItem (GenericListPtr head, GenericListPtr new)
-{
-    GenericListPtr p = head;
+ */
+void xconfigAddListItem (GenericListPtr *pHead, GenericListPtr new)
+{
+    GenericListPtr p = *pHead;
     GenericListPtr last = NULL;
 
-    while (p)
-    {
+    while (p) {
         last = p;
         p = p->next;
     }
 
-    if (last)
-    {
+    if (last) {
         last->next = new;
-        return (head);
-    }
-    else
-        return (new);
+    } else {
+        *pHead = new;
+    }
 }
 
 
 /*
- * removes an item from the linked list. Any record whose first field
- * is a GenericListRec can be cast to this type and used with this function.
- * A pointer to the head of the list is returned to handle the removal of
- * the first item.
- */
-GenericListPtr
-xconfigRemoveListItem (GenericListPtr head, GenericListPtr item)
-{
-    GenericListPtr cur = head;
+ * removes an item from the linked list (but does not delete it). Any record
+ * whose first field is a GenericListRec can be cast to this type and used
+ * with this function.
+ */
+void xconfigRemoveListItem (GenericListPtr *pHead, GenericListPtr item)
+{
+    GenericListPtr cur = *pHead;
     GenericListPtr prev = NULL;
 
-    while (cur)
-    {
-        if (cur == item)
-        {
-            if (prev) prev->next = item->next;
-            if (head == item) head = item->next;
-            break;
+    while (cur) {
+        if (cur == item) {
+            if (prev) {
+                prev->next = item->next;
+            } else {
+                *pHead = item->next;
+            }
+            return;
         }
         prev = cur;
         cur  = cur->next;
     }
-    
-    return head;
 }
 
 
@@ -378,24 +368,25 @@
 }
 
 void
-xconfigFreeConfig (XConfigPtr p)
-{
-    if (p == NULL)
+xconfigFreeConfig (XConfigPtr *p)
+{
+    if (p == NULL || *p == NULL)
         return;
 
-    xconfigFreeFiles (p->files);
-    xconfigFreeModules (p->modules);
-    xconfigFreeFlags (p->flags);
-    xconfigFreeMonitorList (p->monitors);
-    xconfigFreeModesList (p->modes);
-    xconfigFreeVideoAdaptorList (p->videoadaptors);
-    xconfigFreeDeviceList (p->devices);
-    xconfigFreeScreenList (p->screens);
-    xconfigFreeLayoutList (p->layouts);
-    xconfigFreeInputList (p->inputs);
-    xconfigFreeVendorList (p->vendors);
-    xconfigFreeDRI (p->dri);
-    TEST_FREE(p->comment);
-
-    free (p);
-}
+    xconfigFreeFiles (&((*p)->files));
+    xconfigFreeModules (&((*p)->modules));
+    xconfigFreeFlags (&((*p)->flags));
+    xconfigFreeMonitorList (&((*p)->monitors));
+    xconfigFreeModesList (&((*p)->modes));
+    xconfigFreeVideoAdaptorList (&((*p)->videoadaptors));
+    xconfigFreeDeviceList (&((*p)->devices));
+    xconfigFreeScreenList (&((*p)->screens));
+    xconfigFreeLayoutList (&((*p)->layouts));
+    xconfigFreeInputList (&((*p)->inputs));
+    xconfigFreeVendorList (&((*p)->vendors));
+    xconfigFreeDRI (&((*p)->dri));
+    TEST_FREE((*p)->comment);
+
+    free (*p);
+    *p = NULL;
+}

Modified: packages/nvidia-settings/trunk/src/XF86Config-parser/Screen.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/XF86Config-parser/Screen.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/XF86Config-parser/Screen.c (original)
+++ packages/nvidia-settings/trunk/src/XF86Config-parser/Screen.c Sun Jan 11 05:41:46 2009
@@ -79,6 +79,8 @@
 
 #define CLEANUP xconfigFreeDisplayList
 
+static int addImpliedScreen(XConfigPtr config);
+
 XConfigDisplayPtr
 xconfigParseDisplaySubSection (void)
 {
@@ -170,9 +172,8 @@
                     mptr = calloc (1, sizeof (XConfigModeRec));
                     mptr->mode_name = val.str;
                     mptr->next = NULL;
-                    ptr->modes = (XConfigModePtr)
-                        xconfigAddListItem ((GenericListPtr) ptr->modes,
-                                         (GenericListPtr) mptr);
+                    xconfigAddListItem((GenericListPtr *)(&ptr->modes),
+                                       (GenericListPtr) mptr);
                 }
                 xconfigUnGetToken (token);
             }
@@ -289,9 +290,8 @@
                     aptr = calloc (1, sizeof (XConfigAdaptorLinkRec));
                     aptr->next = NULL;
                     aptr->adaptor_name = val.str;
-                    ptr->adaptors = (XConfigAdaptorLinkPtr)
-                        xconfigAddListItem ((GenericListPtr) ptr->adaptors,
-                                         (GenericListPtr) aptr);
+                    xconfigAddListItem ((GenericListPtr *)(&ptr->adaptors),
+                                        (GenericListPtr) aptr);
                 }
             }
             break;
@@ -420,64 +420,76 @@
 }
 
 void
-xconfigFreeScreenList (XConfigScreenPtr ptr)
+xconfigFreeScreenList (XConfigScreenPtr *ptr)
 {
     XConfigScreenPtr prev;
 
-    while (ptr)
-    {
-        TEST_FREE (ptr->identifier);
-        TEST_FREE (ptr->monitor_name);
-        TEST_FREE (ptr->device_name);
-        TEST_FREE (ptr->comment);
-        xconfigOptionListFree (ptr->options);
-        xconfigFreeAdaptorLinkList (ptr->adaptors);
-        xconfigFreeDisplayList (ptr->displays);
-        prev = ptr;
-        ptr = ptr->next;
+    if (ptr == NULL || *ptr == NULL)
+        return;
+
+    while (*ptr)
+    {
+        TEST_FREE ((*ptr)->identifier);
+        TEST_FREE ((*ptr)->monitor_name);
+        TEST_FREE ((*ptr)->device_name);
+        TEST_FREE ((*ptr)->comment);
+        xconfigFreeOptionList (&((*ptr)->options));
+        xconfigFreeAdaptorLinkList (&((*ptr)->adaptors));
+        xconfigFreeDisplayList (&((*ptr)->displays));
+        prev = *ptr;
+        *ptr = (*ptr)->next;
         free (prev);
     }
 }
 
 void
-xconfigFreeAdaptorLinkList (XConfigAdaptorLinkPtr ptr)
+xconfigFreeAdaptorLinkList (XConfigAdaptorLinkPtr *ptr)
 {
     XConfigAdaptorLinkPtr prev;
 
-    while (ptr)
-    {
-        TEST_FREE (ptr->adaptor_name);
-        prev = ptr;
-        ptr = ptr->next;
+    if (ptr == NULL || *ptr == NULL)
+        return;
+
+    while (*ptr)
+    {
+        TEST_FREE ((*ptr)->adaptor_name);
+        prev = *ptr;
+        *ptr = (*ptr)->next;
         free (prev);
     }
 }
 
 void
-xconfigFreeDisplayList (XConfigDisplayPtr ptr)
+xconfigFreeDisplayList (XConfigDisplayPtr *ptr)
 {
     XConfigDisplayPtr prev;
 
-    while (ptr)
-    {
-        xconfigFreeModeList (ptr->modes);
-        xconfigOptionListFree (ptr->options);
-        prev = ptr;
-        ptr = ptr->next;
+    if (ptr == NULL || *ptr == NULL)
+        return;
+
+    while (*ptr)
+    {
+        xconfigFreeModeList (&((*ptr)->modes));
+        xconfigFreeOptionList (&((*ptr)->options));
+        prev = *ptr;
+        *ptr = (*ptr)->next;
         free (prev);
     }
 }
 
 void
-xconfigFreeModeList (XConfigModePtr ptr)
+xconfigFreeModeList (XConfigModePtr *ptr)
 {
     XConfigModePtr prev;
 
-    while (ptr)
-    {
-        TEST_FREE (ptr->mode_name);
-        prev = ptr;
-        ptr = ptr->next;
+    if (ptr == NULL || *ptr == NULL)
+        return;
+
+    while (*ptr)
+    {
+        TEST_FREE ((*ptr)->mode_name);
+        prev = *ptr;
+        *ptr = (*ptr)->next;
         free (prev);
     }
 }
@@ -490,12 +502,12 @@
     XConfigDevicePtr device;
     XConfigAdaptorLinkPtr adaptor;
 
-    if (!screen)
-    {
-        xconfigErrorMsg(ValidationErrorMsg, "At least one Screen section "
-                     "is required.");
-        return (FALSE);
-    }
+    /*
+     * if we do not have a screen, just return TRUE; we'll add a
+     * screen later during the Sanitize step
+     */
+
+    if (!screen) return TRUE;
 
     while (screen)
     {
@@ -559,6 +571,10 @@
 {
     XConfigScreenPtr screen = p->screens;
     XConfigMonitorPtr monitor;
+
+    if (!addImpliedScreen(p)) {
+        return FALSE;
+    }
    
     while (screen) {
         
@@ -600,8 +616,9 @@
                 
                 screen->monitor_name = xconfigStrdup(monitor->identifier);
                 
-                if (!xconfigValidateMonitor(p, screen))
-                    return (FALSE);
+                if (!xconfigValidateMonitor(p, screen)) {
+                    return FALSE;
+                }
             }
         }
         
@@ -639,41 +656,79 @@
     return (NULL);
 }
 
-XConfigModePtr
-xconfigAddMode(XConfigModePtr head, const char *name)
+void
+xconfigAddMode(XConfigModePtr *pHead, const char *name)
 {
     XConfigModePtr mode;
     
     mode = xconfigAlloc(sizeof(XConfigModeRec));
     mode->mode_name = xconfigStrdup(name);
 
-    mode->next = head;
-
-    return mode;
-
-}
-
-
-XConfigModePtr
-xconfigRemoveMode(XConfigModePtr head, const char *name)
-{
-    XConfigModePtr prev = NULL;
-    XConfigModePtr m = head;
-
-    while (m) {
-        if (xconfigNameCompare(m->mode_name, name) == 0) {
-            if (prev) prev->next = m->next;
-            if (head == m) head = m->next;
-            free(m->mode_name);
-            free(m);
-            break;
-        }
-        prev = m;
-        m = m->next;
-    }
-
-    return head;
-}
-
-
-
+    mode->next = *pHead;
+    *pHead = mode;
+}
+
+
+void
+xconfigRemoveMode(XConfigModePtr *pHead, const char *name)
+{
+    XConfigModePtr p = *pHead;
+    XConfigModePtr last = NULL;
+
+    while (p) {
+        if (xconfigNameCompare(p->mode_name, name) == 0) {
+            if (last) {
+                last->next = p->next;
+            } else {
+                *pHead = p->next;
+            }
+            free(p->mode_name);
+            free(p);
+            return;
+        }
+        last = p;
+        p = p->next;
+    }
+}
+
+
+static int addImpliedScreen(XConfigPtr config)
+{
+    XConfigScreenPtr screen;
+    XConfigDevicePtr device;
+    XConfigMonitorPtr monitor;
+
+    if (config->screens) return TRUE;
+
+    xconfigErrorMsg(WarnMsg, "No Screen specified, constructing implicit "
+                    "screen section.\n");
+
+    /* allocate the new screen section */
+
+    screen = calloc(1, sizeof(XConfigScreenRec));
+    if (!screen) return FALSE;
+    
+    screen->identifier = xconfigStrdup("Default Screen");
+
+    /*
+     * Use the first device section if there is one.
+     */
+    if (config->devices) {
+        device = config->devices;
+        screen->device_name = xconfigStrdup(device->identifier);
+        screen->device = device;
+    }
+
+    /*
+     * Use the first monitor section if there is one.
+     */
+    if (config->monitors) {
+        monitor = config->monitors;
+        screen->monitor_name = xconfigStrdup(monitor->identifier);
+        screen->monitor = monitor;
+    }
+
+    config->screens = screen;
+
+    return TRUE;
+}

Modified: packages/nvidia-settings/trunk/src/XF86Config-parser/Vendor.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/XF86Config-parser/Vendor.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/XF86Config-parser/Vendor.c (original)
+++ packages/nvidia-settings/trunk/src/XF86Config-parser/Vendor.c Sun Jan 11 05:41:46 2009
@@ -203,30 +203,35 @@
 }
 
 void
-xconfigFreeVendorList (XConfigVendorPtr p)
-{
-    if (p == NULL)
+xconfigFreeVendorList (XConfigVendorPtr *p)
+{
+    if (p == NULL || *p == NULL)
         return;
-    xconfigFreeVendorSubList (p->subs);
-    TEST_FREE (p->identifier);
-    TEST_FREE (p->comment);
-    xconfigOptionListFree (p->options);
-    free (p);
+
+    xconfigFreeVendorSubList (&((*p)->subs));
+    TEST_FREE ((*p)->identifier);
+    TEST_FREE ((*p)->comment);
+    xconfigFreeOptionList (&((*p)->options));
+    free (*p);
+    *p = NULL;
 }
 
 void
-xconfigFreeVendorSubList (XConfigVendSubPtr ptr)
+xconfigFreeVendorSubList (XConfigVendSubPtr *ptr)
 {
     XConfigVendSubPtr prev;
 
-    while (ptr)
-    {
-        TEST_FREE (ptr->identifier);
-        TEST_FREE (ptr->name);
-        TEST_FREE (ptr->comment);
-        xconfigOptionListFree (ptr->options);
-        prev = ptr;
-        ptr = ptr->next;
+    if (ptr == NULL || *ptr == NULL)
+        return;
+
+    while (*ptr)
+    {
+        TEST_FREE ((*ptr)->identifier);
+        TEST_FREE ((*ptr)->name);
+        TEST_FREE ((*ptr)->comment);
+        xconfigFreeOptionList (&((*ptr)->options));
+        prev = *ptr;
+        *ptr = (*ptr)->next;
         free (prev);
     }
 }

Modified: packages/nvidia-settings/trunk/src/XF86Config-parser/Video.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/XF86Config-parser/Video.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/XF86Config-parser/Video.c (original)
+++ packages/nvidia-settings/trunk/src/XF86Config-parser/Video.c Sun Jan 11 05:41:46 2009
@@ -233,39 +233,45 @@
 }
 
 void
-xconfigFreeVideoAdaptorList (XConfigVideoAdaptorPtr ptr)
+xconfigFreeVideoAdaptorList (XConfigVideoAdaptorPtr *ptr)
 {
     XConfigVideoAdaptorPtr prev;
 
-    while (ptr)
-    {
-        TEST_FREE (ptr->identifier);
-        TEST_FREE (ptr->vendor);
-        TEST_FREE (ptr->board);
-        TEST_FREE (ptr->busid);
-        TEST_FREE (ptr->driver);
-        TEST_FREE (ptr->fwdref);
-        TEST_FREE (ptr->comment);
-        xconfigFreeVideoPortList (ptr->ports);
-        xconfigOptionListFree (ptr->options);
-        prev = ptr;
-        ptr = ptr->next;
+    if (ptr == NULL || *ptr == NULL)
+        return;
+
+    while (*ptr)
+    {
+        TEST_FREE ((*ptr)->identifier);
+        TEST_FREE ((*ptr)->vendor);
+        TEST_FREE ((*ptr)->board);
+        TEST_FREE ((*ptr)->busid);
+        TEST_FREE ((*ptr)->driver);
+        TEST_FREE ((*ptr)->fwdref);
+        TEST_FREE ((*ptr)->comment);
+        xconfigFreeVideoPortList (&((*ptr)->ports));
+        xconfigFreeOptionList (&((*ptr)->options));
+        prev = *ptr;
+        *ptr = (*ptr)->next;
         free (prev);
     }
 }
 
 void
-xconfigFreeVideoPortList (XConfigVideoPortPtr ptr)
+xconfigFreeVideoPortList (XConfigVideoPortPtr *ptr)
 {
     XConfigVideoPortPtr prev;
 
-    while (ptr)
-    {
-        TEST_FREE (ptr->identifier);
-        TEST_FREE (ptr->comment);
-        xconfigOptionListFree (ptr->options);
-        prev = ptr;
-        ptr = ptr->next;
+    if (ptr == NULL || *ptr == NULL)
+        return;
+
+    while (*ptr)
+    {
+        TEST_FREE ((*ptr)->identifier);
+        TEST_FREE ((*ptr)->comment);
+        xconfigFreeOptionList (&((*ptr)->options));
+        prev = *ptr;
+        *ptr = (*ptr)->next;
         free (prev);
     }
 }

Modified: packages/nvidia-settings/trunk/src/XF86Config-parser/xf86Parser.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/XF86Config-parser/xf86Parser.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/XF86Config-parser/xf86Parser.h (original)
+++ packages/nvidia-settings/trunk/src/XF86Config-parser/xf86Parser.h Sun Jan 11 05:41:46 2009
@@ -591,6 +591,9 @@
     char *keyboard;
     char *mouse;
     char *keyboard_driver;
+
+    int supports_extension_section;
+
 } GenerateOptions;
 
 
@@ -604,7 +607,7 @@
 void xconfigCloseConfigFile(void);
 int xconfigWriteConfigFile(const char *, XConfigPtr);
 
-void xconfigFreeConfig(XConfigPtr p);
+void xconfigFreeConfig(XConfigPtr *p);
 
 /*
  * Functions for searching for entries in lists
@@ -629,29 +632,30 @@
  * Functions for freeing lists
  */
 
-void xconfigFreeDeviceList(XConfigDevicePtr ptr);
-void xconfigFreeFiles(XConfigFilesPtr p);
-void xconfigFreeFlags(XConfigFlagsPtr flags);
-void xconfigFreeInputList(XConfigInputPtr ptr);
-void xconfigFreeLayoutList(XConfigLayoutPtr ptr);
-void xconfigFreeAdjacencyList(XConfigAdjacencyPtr ptr);
-void xconfigFreeInputrefList(XConfigInputrefPtr ptr);
-void xconfigFreeModules(XConfigModulePtr ptr);
-void xconfigFreeMonitorList(XConfigMonitorPtr ptr);
-void xconfigFreeModesList(XConfigModesPtr ptr);
-void xconfigFreeModeLineList(XConfigModeLinePtr ptr);
-void xconfigFreeScreenList(XConfigScreenPtr ptr);
-void xconfigFreeAdaptorLinkList(XConfigAdaptorLinkPtr ptr);
-void xconfigFreeDisplayList(XConfigDisplayPtr ptr);
-void xconfigFreeModeList(XConfigModePtr ptr);
-void xconfigFreeVendorList(XConfigVendorPtr p);
-void xconfigFreeVendorSubList(XConfigVendSubPtr ptr);
-void xconfigFreeVideoAdaptorList(XConfigVideoAdaptorPtr ptr);
-void xconfigFreeVideoPortList(XConfigVideoPortPtr ptr);
-void xconfigFreeBuffersList (XConfigBuffersPtr ptr);
-void xconfigFreeDRI(XConfigDRIPtr ptr);
-void xconfigFreeExtensions(XConfigExtensionsPtr ptr);
-void xconfigFreeModesLinkList(XConfigModesLinkPtr ptr);
+void xconfigFreeDeviceList(XConfigDevicePtr *ptr);
+void xconfigFreeFiles(XConfigFilesPtr *p);
+void xconfigFreeFlags(XConfigFlagsPtr *flags);
+void xconfigFreeInputList(XConfigInputPtr *ptr);
+void xconfigFreeLayoutList(XConfigLayoutPtr *ptr);
+void xconfigFreeAdjacencyList(XConfigAdjacencyPtr *ptr);
+void xconfigFreeInputrefList(XConfigInputrefPtr *ptr);
+void xconfigFreeModules(XConfigModulePtr *ptr);
+void xconfigFreeMonitorList(XConfigMonitorPtr *ptr);
+void xconfigFreeModesList(XConfigModesPtr *ptr);
+void xconfigFreeModeLineList(XConfigModeLinePtr *ptr);
+void xconfigFreeOptionList(XConfigOptionPtr *opt);
+void xconfigFreeScreenList(XConfigScreenPtr *ptr);
+void xconfigFreeAdaptorLinkList(XConfigAdaptorLinkPtr *ptr);
+void xconfigFreeDisplayList(XConfigDisplayPtr *ptr);
+void xconfigFreeModeList(XConfigModePtr *ptr);
+void xconfigFreeVendorList(XConfigVendorPtr *p);
+void xconfigFreeVendorSubList(XConfigVendSubPtr *ptr);
+void xconfigFreeVideoAdaptorList(XConfigVideoAdaptorPtr *ptr);
+void xconfigFreeVideoPortList(XConfigVideoPortPtr *ptr);
+void xconfigFreeBuffersList (XConfigBuffersPtr *ptr);
+void xconfigFreeDRI(XConfigDRIPtr *ptr);
+void xconfigFreeExtensions(XConfigExtensionsPtr *ptr);
+void xconfigFreeModesLinkList(XConfigModesLinkPtr *ptr);
 
 
 
@@ -659,26 +663,26 @@
  * item/list manipulation
  */
 
-GenericListPtr xconfigAddListItem(GenericListPtr head, GenericListPtr c_new);
-GenericListPtr xconfigRemoveListItem(GenericListPtr list, GenericListPtr item);
+void xconfigAddListItem(GenericListPtr *pHead, GenericListPtr c_new);
+void xconfigRemoveListItem(GenericListPtr *pHead, GenericListPtr item);
 int xconfigItemNotSublist(GenericListPtr list_1, GenericListPtr list_2);
 char *xconfigAddComment(char *cur, char *add);
-XConfigLoadPtr xconfigAddNewLoadDirective(XConfigLoadPtr head,
-                                          char *name, int type,
-                                          XConfigOptionPtr opts, int do_token);
-XConfigLoadPtr xconfigRemoveLoadDirective(XConfigLoadPtr head,
-                                          XConfigLoadPtr load);
+void xconfigAddNewLoadDirective(XConfigLoadPtr *pHead,
+                                char *name, int type,
+                                XConfigOptionPtr opts, int do_token);
+void xconfigRemoveLoadDirective(XConfigLoadPtr *pHead, XConfigLoadPtr load);
 
 /*
  * Functions for manipulating Options
  */
 
-XConfigOptionPtr xconfigAddNewOption(XConfigOptionPtr head,
-                                     const char *name, const char *val);
-XConfigOptionPtr xconfigRemoveOption(XConfigOptionPtr list,
-                                     XConfigOptionPtr opt);
+void xconfigAddNewOption(XConfigOptionPtr *pHead,
+                         const char *name, const char *val);
+void xconfigRemoveOption(XConfigOptionPtr *pHead, XConfigOptionPtr opt);
+void xconfigRemoveNamedOption(XConfigOptionPtr *head, const char *name,
+                              char **comments);
+
 XConfigOptionPtr xconfigOptionListDup(XConfigOptionPtr opt);
-void             xconfigOptionListFree(XConfigOptionPtr opt);
 char            *xconfigOptionName(XConfigOptionPtr opt);
 char            *xconfigOptionValue(XConfigOptionPtr opt);
 XConfigOptionPtr xconfigNewOption(const char *name, const char *value);
@@ -705,15 +709,10 @@
 int xconfigParsePciBusString(const char *busID,
                              int *bus, int *device, int *func);
 
-XConfigDisplayPtr
-xconfigAddDisplay(XConfigDisplayPtr head, const int depth);
-
-XConfigModePtr
-xconfigAddMode(XConfigModePtr head, const char *name);
-
-XConfigModePtr
-xconfigRemoveMode(XConfigModePtr head, const char *name);
-
+void xconfigAddDisplay(XConfigDisplayPtr *pHead, const int depth);
+
+void xconfigAddMode(XConfigModePtr *pHead, const char *name);
+void xconfigRemoveMode(XConfigModePtr *pHead, const char *name);
 
 XConfigPtr xconfigGenerate(GenerateOptions *gop);
 
@@ -724,6 +723,10 @@
 
 void xconfigGeneratePrintPossibleMice(void);
 void xconfigGeneratePrintPossibleKeyboards(void);
+void xconfigGenerateLoadDefaultOptions(GenerateOptions *gop);
+
+void xconfigGetXServerInUse(GenerateOptions *gop);
+
 
 /*
  * check (and update, if necessary) the inputs in the specified layout

Modified: packages/nvidia-settings/trunk/src/command-line.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/command-line.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/command-line.c (original)
+++ packages/nvidia-settings/trunk/src/command-line.c Sun Jan 11 05:41:46 2009
@@ -46,6 +46,7 @@
 
 static void print_assign_help(void);
 static void print_query_help(void);
+static void print_attribute_help(char *attr);
 static void print_help(void);
 static char *tilde_expansion(char *str);
 static char *nvstrcat(const char *str, ...);
@@ -73,7 +74,7 @@
     nv_msg(TAB, "This program is used to configure the "
             "NVIDIA Linux graphics driver.");
     nv_msg(NULL, "");
-    nv_msg(TAB, "Copyright (C) 2004 NVIDIA Corporation.");
+    nv_msg(TAB, "Copyright (C) 2004 - 2008 NVIDIA Corporation.");
     nv_msg(NULL, "");
     
 } /* print_version() */
@@ -151,6 +152,11 @@
     { "glxinfo", 'g', 0, NULL,
       "Print GLX Information for the X display and exit." },
     
+    { "describe", 'e', NVGETOPT_HAS_ARGUMENT, NULL,
+      "Prints information about a particular attribute.  Specify 'all' to "
+      "list the descriptions of all attributes.  Specify 'list' to list the "
+      "attribute names without a descriptions." },
+
     { NULL,               0, 0, 0                   },
 };
 
@@ -243,6 +249,81 @@
            "Specify '-q all' to query all attributes.");
 
 } /* print_query_help() */
+
+
+
+/*
+ * print_attribute_help() - print information about the specified attribute.
+ */
+
+static void print_attribute_help(char *attr)
+{
+    AttributeTableEntry *entry;
+    int found = 0;
+    int list_all = 0;
+    int show_desc = 1;
+
+
+    if (!strcasecmp(attr, "all")) {
+        list_all = 1;
+
+    } else if (!strcasecmp(attr, "list")) {
+        list_all = 1;
+        show_desc = 0;
+    }
+
+    nv_msg(NULL, "");
+
+    for (entry = attributeTable; entry->name; entry++) {
+
+        if (list_all || !strcasecmp(attr, entry->name)) {
+
+            if (show_desc) {
+                nv_msg(NULL, "Attribute '%s':", entry->name);
+
+                if (entry->flags & NV_PARSER_TYPE_FRAMELOCK)
+                    nv_msg(NULL, "  - Is Frame Lock attribute.");
+                if (entry->flags & NV_PARSER_TYPE_NO_CONFIG_WRITE)
+                    nv_msg(NULL, "  - Attribute is not written to the rc file.");
+                if (entry->flags & NV_PARSER_TYPE_GUI_ATTRIBUTE)
+                    nv_msg(NULL, "  - Is GUI attribute.");
+                if (entry->flags & NV_PARSER_TYPE_XVIDEO_ATTRIBUTE)
+                    nv_msg(NULL, "  - Is X Video attribute.");
+                if (entry->flags & NV_PARSER_TYPE_PACKED_ATTRIBUTE)
+                    nv_msg(NULL, "  - Attribute value is packed integer.");
+                if (entry->flags & NV_PARSER_TYPE_VALUE_IS_DISPLAY)
+                    nv_msg(NULL, "  - Attribute value is a display mask.");
+                if (entry->flags & NV_PARSER_TYPE_NO_QUERY_ALL)
+                    nv_msg(NULL, "  - Attribute not queried in 'query all'.");
+                if (entry->flags & NV_PARSER_TYPE_NO_ZERO_VALUE)
+                    nv_msg(NULL, "  - Attribute cannot be zero.");
+                if (entry->flags & NV_PARSER_TYPE_100Hz)
+                    nv_msg(NULL, "  - Attribute value is in units of Centihertz (1/100Hz).");
+                if (entry->flags & NV_PARSER_TYPE_1000Hz)
+                    nv_msg(NULL, "  - Attribute value is in units of Milihertz (1/1000 Hz).");
+                if (entry->flags & NV_PARSER_TYPE_STRING_ATTRIBUTE)
+                    nv_msg(NULL, "  - Attribute value is string.");
+                if (entry->flags & NV_PARSER_TYPE_SDI)
+                    nv_msg(NULL, "  - Is SDI attribute.");
+                if (entry->flags & NV_PARSER_TYPE_VALUE_IS_SWITCH_DISPLAY)
+                    nv_msg(NULL, "  - Attribute value is switch display.");
+
+                nv_msg(TAB, entry->desc);
+                nv_msg(NULL, "");
+            } else {
+                nv_msg(NULL, "%s", entry->name);
+            }
+
+            found = 1;
+            if (!list_all) break;
+        }
+    }
+
+    if (!found && !list_all) {
+        nv_error_msg("Unrecognized attribute name '%s'.\n", attr);
+    }
+
+} /* print_attribute_help() */
 
 
 
@@ -364,6 +445,7 @@
         case 'g': print_glxinfo(NULL); exit(0); break;
         case 't': __terse = NV_TRUE; break;
         case 'd': __display_device_string = NV_TRUE; break;
+        case 'e': print_attribute_help(strval); exit(0); break;
         default:
             nv_error_msg("Invalid commandline, please run `%s --help` "
                          "for usage information.\n", argv[0]);

Modified: packages/nvidia-settings/trunk/src/config-file.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/config-file.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/config-file.c (original)
+++ packages/nvidia-settings/trunk/src/config-file.c Sun Jan 11 05:41:46 2009
@@ -318,8 +318,14 @@
             for (bit = 0; bit < 24; bit++) {
                 
                 mask = 1 << bit;
-                
-                if ((t->d & mask) == 0x0) continue;
+
+                /*
+                 * if this bit is not present in the screens's enabled
+                 * display device mask (and the X screen has enabled
+                 * display devices), skip to the next bit
+                 */
+
+                if (((t->d & mask) == 0x0) && (t->d)) continue;
 
                 status = NvCtrlGetValidDisplayAttributeValues
                     (t->h, mask, a->attr, &valid);
@@ -644,7 +650,7 @@
     int i;
 
     for (i = 0; w[i].line != -1; i++) {
-        if (w[i].a.flags & NV_PARSER_TYPE_GUI_ATTRIUBUTE) {
+        if (w[i].a.flags & NV_PARSER_TYPE_GUI_ATTRIBUTE) {
             nv_parsed_attribute_add(p, &w[i].a);            
         }
     }

Modified: packages/nvidia-settings/trunk/src/glxinfo.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/glxinfo.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/glxinfo.c (original)
+++ packages/nvidia-settings/trunk/src/glxinfo.c Sun Jan 11 05:41:46 2009
@@ -182,17 +182,17 @@
         return;
     }
 
-    printf("-fc- -vi- vt buf lv rgb d s colorbuffer ax dp st "
-           "accumbuffer -ms- cav -----pbuffer----- ---transparent----\n");
-    printf(" id   id     siz l  ci  b t  r  g  b  a bf th en "
-           " r  g  b  a ns b eat widt hght max-pxs typ  r  g  b  a  i\n");
-    printf("----------------------------------------------"
-           "------------------------------------------------------------\n");
+    printf("--fc- -vi- vt buf lv rgb d s colorbuffer ax dp st "
+           "accumbuffer ---ms---- cav -----pbuffer----- ---transparent----\n");
+    printf("  id   id     siz l  ci  b t  r  g  b  a bf th en "
+           " r  g  b  a mvs mcs b eat widt hght max-pxs typ  r  g  b  a  i\n");
+    printf("--------------------------------------------------"
+           "--------------------------------------------------------------\n");
 
     i = 0;
     while ( fbca[i].fbconfig_id != 0 ) {
         
-        printf("0x%2.2x ", fbca[i].fbconfig_id);
+        printf("0x%03x ", fbca[i].fbconfig_id);
         if ( fbca[i].visual_id ) {
             printf("0x%2.2x ", fbca[i].visual_id);
         } else {
@@ -222,12 +222,25 @@
                fbca[i].accum_alpha_size
                );
         if ( fbca[i].multi_sample_valid == 1 ) {
-            printf("%2d %1d ",
-                   fbca[i].multi_samples,
+            printf("%3d ",
+                   fbca[i].multi_samples
+                   );
+
+            if ( fbca[i].multi_sample_coverage_valid == 1 ) {
+                printf("%3d ",
+                       fbca[i].multi_samples_color
+                       );
+            } else {
+                printf("%3d ",
+                       fbca[i].multi_samples
+                       );
+            }
+            printf("%1d ",
                    fbca[i].multi_sample_buffers
                    );
+
         } else {
-            printf(" . . ");
+            printf("  .   . . ");
         }
         printf("%3.3s %4x %4x %7x %3.3s %2d %2d %2d %2d %2d\n",
                caveat_abbrev(fbca[i].config_caveat),

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/Makefile.inc
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/Makefile.inc?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/Makefile.inc (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/Makefile.inc Sun Jan 11 05:41:46 2009
@@ -54,11 +54,11 @@
 	ctkclocks.c \
 	ctkutils.c \
 	ctkedid.c \
-	ctkimage.c \
 	ctkserver.c \
 	ctkdisplaylayout.c \
 	ctkdisplayconfig.c \
 	ctkscreen.c \
+	ctkslimm.c \
 	ctkgpu.c \
 	ctkbanner.c \
 	ctkvcs.c \
@@ -99,11 +99,11 @@
 	ctkclocks.h \
 	ctkutils.h \
 	ctkedid.h \
-	ctkimage.h \
 	ctkserver.h \
 	ctkdisplaylayout.h \
 	ctkdisplayconfig.h \
 	ctkscreen.h \
+	ctkslimm.h \
 	ctkgpu.h \
 	ctkbanner.h \
 	ctkvcs.h \

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkbanner.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkbanner.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkbanner.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkbanner.c Sun Jan 11 05:41:46 2009
@@ -25,12 +25,10 @@
  */
 
 #include <gtk/gtk.h>
+#include <gdk-pixbuf/gdk-pixdata.h>
 #include <stdio.h>
 
-#include "image.h"
 #include "ctkbanner.h"
-
-#include <gdk-pixbuf/gdk-pixdata.h>
 
 /* pixdata headers */
 
@@ -57,13 +55,13 @@
 #include "rotation_pixdata.h"
 #include "sdi_pixdata.h"
 #include "sdi_shared_sync_bnc_pixdata.h"
+#include "slimm_pixdata.h"
 #include "solaris_pixdata.h"
 #include "thermal_pixdata.h"
 #include "tv_pixdata.h"
 #include "vcs_pixdata.h"
 #include "x_pixdata.h"
 #include "xvideo_pixdata.h"
-
 
 
 
@@ -372,6 +370,7 @@
         { BANNER_ARTWORK_ROTATION,       FALSE, 16, &rotation_pixdata       },
         { BANNER_ARTWORK_SDI,            FALSE, 16, &sdi_pixdata            },
         { BANNER_ARTWORK_SDI_SHARED_SYNC_BNC, FALSE, 16, &sdi_shared_sync_bnc_pixdata },
+        { BANNER_ARTWORK_SLIMM,          FALSE, 16, &slimm_pixdata          },
         { BANNER_ARTWORK_SOLARIS,        TRUE,  16, &solaris_pixdata        },
         { BANNER_ARTWORK_THERMAL,        FALSE, 16, &thermal_pixdata        },
         { BANNER_ARTWORK_TV,             FALSE, 16, &tv_pixdata             },
@@ -430,6 +429,7 @@
         Background.w = gdk_pixbuf_get_width(Background.pixbuf);
         Background.h = gdk_pixbuf_get_height(Background.pixbuf);
     }
+    g_object_ref(Background.pixbuf);
 
     if (!TallBackground.pixbuf) {
         TallBackground.pixbuf =
@@ -437,12 +437,14 @@
         TallBackground.w = gdk_pixbuf_get_width(TallBackground.pixbuf);
         TallBackground.h = gdk_pixbuf_get_height(TallBackground.pixbuf);
     }
+    g_object_ref(TallBackground.pixbuf);
     
     if (!Logo.pixbuf) {
         Logo.pixbuf = gdk_pixbuf_from_pixdata(&logo_pixdata, TRUE, NULL);
         Logo.w = gdk_pixbuf_get_width(Logo.pixbuf);
         Logo.h = gdk_pixbuf_get_height(Logo.pixbuf);
     }
+    g_object_ref(Logo.pixbuf);
     
     if (!TallLogo.pixbuf) {
         TallLogo.pixbuf =
@@ -450,8 +452,8 @@
         TallLogo.w = gdk_pixbuf_get_width(TallLogo.pixbuf);
         TallLogo.h = gdk_pixbuf_get_height(TallLogo.pixbuf);
     }
-    
-    
+    g_object_ref(TallLogo.pixbuf);
+
     /*
      * assign fields based on whether the artwork is tall; XXX these
      * may need to be tweaked
@@ -490,3 +492,42 @@
     ctk_banner->callback_func = func;
     ctk_banner->callback_data = data;
 }
+
+
+
+/*
+ * CTK composited banner image widget creation
+ *
+ */
+GtkWidget* ctk_banner_image_new_with_callback(BannerArtworkType artwork,
+                                              ctk_banner_composite_callback callback,
+                                              void *data)
+{
+    GtkWidget *image;
+    GtkWidget *hbox;
+    GtkWidget *frame;
+
+
+    image = ctk_banner_new(artwork);
+
+    if (!image) return NULL;
+
+    ctk_banner_set_composite_callback(CTK_BANNER(image), callback, data);
+
+    hbox = gtk_hbox_new(FALSE, 0);
+    frame = gtk_frame_new(NULL);
+
+    gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 0);
+    gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
+    gtk_container_add(GTK_CONTAINER(frame), image);
+
+
+    return hbox;
+}
+
+
+
+GtkWidget* ctk_banner_image_new(BannerArtworkType artwork)
+{
+    return ctk_banner_image_new_with_callback(artwork, NULL, NULL);
+}

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkbanner.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkbanner.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkbanner.h (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkbanner.h Sun Jan 11 05:41:46 2009
@@ -25,8 +25,6 @@
 #ifndef __CTK_BANNER_H__
 #define __CTK_BANNER_H__
 
-#include "image.h"
-
 G_BEGIN_DECLS
 
 #define CTK_TYPE_BANNER (ctk_banner_get_type())
@@ -46,6 +44,39 @@
 #define CTK_BANNER_GET_CLASS(obj) \
     (G_TYPE_INSTANCE_GET_CLASS ((obj), CTK_TYPE_BANNER, CtkBannerClass))
 
+/*
+ * enum for the banner artwork
+ */
+
+typedef enum {
+    BANNER_ARTWORK_ANTIALIAS,
+    BANNER_ARTWORK_BSD,
+    BANNER_ARTWORK_CLOCK,
+    BANNER_ARTWORK_COLOR,
+    BANNER_ARTWORK_CONFIG,
+    BANNER_ARTWORK_CRT,
+    BANNER_ARTWORK_CURSOR_SHADOW,
+    BANNER_ARTWORK_DFP,
+    BANNER_ARTWORK_DISPLAY_CONFIG,
+    BANNER_ARTWORK_FRAMELOCK,
+    BANNER_ARTWORK_GLX,
+    BANNER_ARTWORK_GPU,
+    BANNER_ARTWORK_HELP,
+    BANNER_ARTWORK_OPENGL,
+    BANNER_ARTWORK_PENGUIN,
+    BANNER_ARTWORK_ROTATION,
+    BANNER_ARTWORK_SDI,
+    BANNER_ARTWORK_SDI_SHARED_SYNC_BNC,
+    BANNER_ARTWORK_SLIMM,
+    BANNER_ARTWORK_SOLARIS,
+    BANNER_ARTWORK_THERMAL,
+    BANNER_ARTWORK_TV,
+    BANNER_ARTWORK_VCS,
+    BANNER_ARTWORK_X,
+    BANNER_ARTWORK_XVIDEO,
+    BANNER_ARTWORK_INVALID
+} BannerArtworkType;
+
 
 typedef struct _CtkBanner       CtkBanner;
 typedef struct _CtkBannerClass  CtkBannerClass;
@@ -60,8 +91,6 @@
 struct _CtkBanner
 {
     GtkDrawingArea parent;
-    
-    const nv_image_t *img;
     
     guint8 *image_data;
 
@@ -96,6 +125,13 @@
                                                ctk_banner_composite_callback,
                                                void *);
 
+GtkWidget*  ctk_banner_image_new   (BannerArtworkType artwork);
+
+GtkWidget*  ctk_banner_image_new_with_callback (BannerArtworkType artwork,
+                                                ctk_banner_composite_callback,
+                                                void *);
+
+
 G_END_DECLS
 
 #endif /* __CTK_BANNER_H__ */

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkclocks.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkclocks.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkclocks.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkclocks.c Sun Jan 11 05:41:46 2009
@@ -27,7 +27,7 @@
 #include <gtk/gtk.h>
 #include <gdk/gdkx.h>
 
-#include "ctkimage.h"
+#include "ctkbanner.h"
 
 #include "ctkclocks.h"
 

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkcolorcorrection.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkcolorcorrection.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkcolorcorrection.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkcolorcorrection.c Sun Jan 11 05:41:46 2009
@@ -30,7 +30,7 @@
 #include "red_xpm.h"
 #include "green_xpm.h"
 #include "blue_xpm.h"
-#include "ctkimage.h"
+#include "ctkbanner.h"
 
 #include "ctkcurve.h"
 #include "ctkscale.h"
@@ -51,6 +51,13 @@
 static const char *__resest_button_help = "The Reset Hardware Defaults "
 "button restores the color correction settings to their default values.";
 
+static const char *__confirm_button_help = "Some color correction settings "
+"can yield an unusable display "
+"(e.g., making the display unreadably dark or light).  When you "
+"change the color correction values, the '10 Seconds to Confirm' "
+"button will count down to zero.  If you have not clicked the "
+"button by then to accept the changes, it will restore your previous values.";
+
 static const char *__color_curve_help = "The color curve graph changes to "
 "reflect your adjustments made with the Brightness, Constrast, and Gamma "
 "sliders.";
@@ -62,23 +69,34 @@
 set_button_sensitive        (GtkButton *);
 
 static void
-button_clicked              (GtkButton *, gpointer);
+reset_button_clicked        (GtkButton *, gpointer);
+
+static void
+set_color_state           (CtkColorCorrection *, gint, gint, gfloat, gboolean);
+
+static void
+confirm_button_clicked      (GtkButton *, gpointer);
 
 static void
 adjustment_value_changed    (GtkAdjustment *, gpointer);
 
-
 static gfloat
 get_attribute_channel_value (CtkColorCorrection *, gint, gint);
 
 static void
-set_attribute_channel_value (CtkColorCorrection *, gint, gint, gfloat);
+flush_attribute_channel_values (CtkColorCorrection *, gint, gint, gfloat);
 
 static void
 ctk_color_correction_class_init(CtkColorCorrectionClass *);
 
 static void
 apply_parsed_attribute_list(CtkColorCorrection *, ParsedAttribute *);
+
+static gboolean
+do_confirm_countdown (gpointer);
+
+static void
+update_confirm_text  (CtkColorCorrection *);
 
 enum {
     CHANGED,
@@ -87,6 +105,15 @@
 
 static guint signals[LAST_SIGNAL] = { 0 };
 
+#define RED        RED_CHANNEL_INDEX
+#define GREEN      GREEN_CHANNEL_INDEX
+#define BLUE       BLUE_CHANNEL_INDEX
+
+#define CONTRAST   (CONTRAST_INDEX - CONTRAST_INDEX)
+#define BRIGHTNESS (BRIGHTNESS_INDEX - CONTRAST_INDEX)
+#define GAMMA      (GAMMA_INDEX - CONTRAST_INDEX)
+
+#define DEFAULT_CONFIRM_COLORCORRECTION_TIMEOUT 10
 
 #define CREATE_COLOR_ADJUSTMENT(adj, attr, min, max)          \
 {                                                             \
@@ -171,7 +198,7 @@
     GtkWidget *rightvbox;
     GtkWidget *hbox;
     GtkWidget *vbox;
-    GtkWidget *button;
+    GtkWidget *button, *confirm_button;
     GtkWidget *widget;
     GtkWidget *hsep;
     GtkWidget *eventbox;
@@ -183,12 +210,20 @@
     ret = NvCtrlGetAttribute(handle, NV_CTRL_ATTR_EXT_VM_PRESENT, &val);
     if ((ret != NvCtrlSuccess) || (val == FALSE)) return NULL;
     
+    /* check if the noScanout mode enabled */
+
+    ret = NvCtrlGetAttribute(handle, NV_CTRL_NO_SCANOUT, &val);
+    if ((ret == NvCtrlSuccess) && (val == NV_CTRL_NO_SCANOUT_ENABLED))
+        return NULL;
+    
     object = g_object_new(CTK_TYPE_COLOR_CORRECTION, NULL);
 
     ctk_color_correction = CTK_COLOR_CORRECTION(object);
     ctk_color_correction->handle = handle;
     ctk_color_correction->ctk_config = ctk_config;
-
+    ctk_color_correction->confirm_timer = 0;
+    ctk_color_correction->confirm_countdown =
+        DEFAULT_CONFIRM_COLORCORRECTION_TIMEOUT;
     apply_parsed_attribute_list(ctk_color_correction, p);
 
     gtk_box_set_spacing(GTK_BOX(ctk_color_correction), 10);
@@ -327,16 +362,24 @@
      * settings to their respective default values (for all channels).
      */
 
-    label = gtk_label_new("Reset Hardware Defaults");
     hbox = gtk_hbox_new(FALSE, 0);
-    button = gtk_button_new();
-    
-    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 15);
-    gtk_container_add(GTK_CONTAINER(button), hbox);
-    
-    g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(button_clicked),
+    button = gtk_button_new_with_label("Reset Hardware Defaults");
+    gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
+    
+    confirm_button = gtk_button_new_with_label("Confirm Current Changes");
+    gtk_box_pack_end(GTK_BOX(hbox), confirm_button, FALSE, FALSE, 5);
+    gtk_widget_set_sensitive(confirm_button, FALSE);
+    
+    g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(reset_button_clicked),
                      (gpointer) ctk_color_correction);
 
+    g_signal_connect(G_OBJECT(confirm_button), "clicked",
+                     G_CALLBACK(confirm_button_clicked),
+                     (gpointer) ctk_color_correction);
+
+    ctk_color_correction->confirm_button = confirm_button;
+    gtk_widget_set_size_request(confirm_button, 160, -1);
+    ctk_config_set_tooltip(ctk_config, confirm_button, __confirm_button_help);
     ctk_config_set_tooltip(ctk_config, button, __resest_button_help);
 
     /*
@@ -450,7 +493,7 @@
      */
 
     alignment = gtk_alignment_new(1, 1, 0, 0);
-    gtk_container_add(GTK_CONTAINER(alignment), button);
+    gtk_container_add(GTK_CONTAINER(alignment), hbox);
     gtk_box_pack_start(GTK_BOX(object), alignment, TRUE, TRUE, 0);
 
     /* finally, show the widget */
@@ -535,21 +578,89 @@
     gtk_widget_set_sensitive (GTK_WIDGET (button), TRUE);
 }
 
-static void button_clicked(
+
+
+/** set_color_state() *******************
+ *
+ * Stores color state to cur_val[attribute][channel]
+ * and prev_val[attribute][channel].
+ *
+ **/
+
+static void set_color_state(CtkColorCorrection *ctk_color_correction,
+    gint attribute_idx, gint channel_idx,
+    gfloat value, gboolean all
+)
+{
+    if ( channel_idx != ALL_CHANNELS ) {
+        ctk_color_correction->cur_val
+            [attribute_idx][channel_idx] = value;
+        if ( all ) {
+            ctk_color_correction->prev_val
+                [attribute_idx][channel_idx] = value;
+        }
+    } else {
+        gint ch;
+        for ( ch = RED; ch <= BLUE; ch++ ) {
+            set_color_state(ctk_color_correction, attribute_idx, ch, value, all);
+        }
+    }
+} /* set_color_state() */
+
+
+
+/** confirm_button_clicked() *************
+ *
+ * Callback function which stores current values to previous value when user
+ * clicks Confirm button.
+ *
+ **/
+
+static void confirm_button_clicked(
+   GtkButton *button,
+   gpointer user_data
+)
+{
+    CtkColorCorrection *ctk_color_correction = CTK_COLOR_CORRECTION(user_data);
+
+    /* Store cur_val[attribute][channel] to prev_val[attribute][channel]. */
+    memcpy (ctk_color_correction->prev_val, ctk_color_correction->cur_val,
+            sizeof(ctk_color_correction->cur_val));
+    
+    /* kill the timer */
+    g_source_remove(ctk_color_correction->confirm_timer);
+    ctk_color_correction->confirm_timer = 0;
+    
+    /* Reset confirm button text */
+    gtk_button_set_label(GTK_BUTTON(ctk_color_correction->confirm_button),
+                         "Confirm Current Changes");
+    
+    gtk_widget_set_sensitive(ctk_color_correction->confirm_button, FALSE);
+} /* confirm_button_clicked() */
+        
+
+
+static void reset_button_clicked(
     GtkButton *button,
     gpointer user_data
 )
 {
     CtkColorCorrection *ctk_color_correction;
-    gfloat c[3] = {CONTRAST_DEFAULT,   CONTRAST_DEFAULT,   CONTRAST_DEFAULT};
-    gfloat b[3] = {BRIGHTNESS_DEFAULT, BRIGHTNESS_DEFAULT, BRIGHTNESS_DEFAULT};
-    gfloat g[3] = {GAMMA_DEFAULT,      GAMMA_DEFAULT,      GAMMA_DEFAULT};
     GtkOptionMenu *option_menu;
-        
     ctk_color_correction = CTK_COLOR_CORRECTION(user_data);
-
-    NvCtrlSetColorAttributes(ctk_color_correction->handle, c, b, g,
-                             ALL_CHANNELS | ALL_VALUES);
+    /* Set default values */
+    set_color_state(ctk_color_correction, CONTRAST, ALL_CHANNELS,
+                    CONTRAST_DEFAULT, TRUE);
+    set_color_state(ctk_color_correction, BRIGHTNESS, ALL_CHANNELS,
+                    BRIGHTNESS_DEFAULT, TRUE);
+    set_color_state(ctk_color_correction, GAMMA, ALL_CHANNELS,
+                    GAMMA_DEFAULT, TRUE);
+
+    NvCtrlSetColorAttributes(ctk_color_correction->handle,
+                             ctk_color_correction->cur_val[CONTRAST],
+                             ctk_color_correction->cur_val[BRIGHTNESS],
+                             ctk_color_correction->cur_val[GAMMA],
+                             ALL_VALUES | ALL_CHANNELS); 
     
     option_menu = GTK_OPTION_MENU(ctk_color_correction->option_menu);
     
@@ -568,7 +679,16 @@
     ctk_config_statusbar_message(ctk_color_correction->ctk_config,
                                  "Reset color correction hardware defaults.");
 
+    gtk_widget_set_sensitive(GTK_WIDGET(ctk_color_correction->confirm_button),
+                             FALSE);
     gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
+    /* kill the timer */
+    g_source_remove(ctk_color_correction->confirm_timer);
+    ctk_color_correction->confirm_timer = 0;
+    
+    /* Reset confirm button text */
+    gtk_button_set_label(GTK_BUTTON(ctk_color_correction->confirm_button),
+                         "Confirm Current Changes");
 }
 
 static void adjustment_value_changed(
@@ -578,6 +698,7 @@
 {
     CtkColorCorrection *ctk_color_correction;
     gint attribute, channel;
+    gint attribute_idx, channel_idx;
     gfloat value;
     gchar *channel_str, *attribute_str;
 
@@ -591,28 +712,67 @@
     channel = GPOINTER_TO_INT(user_data);
 
     value = gtk_adjustment_get_value(adjustment);
-
-    set_attribute_channel_value(ctk_color_correction,
+    
+    /* start timer for confirming changes */
+    ctk_color_correction->confirm_countdown =
+        DEFAULT_CONFIRM_COLORCORRECTION_TIMEOUT;
+    update_confirm_text(ctk_color_correction);
+
+    if (ctk_color_correction->confirm_timer == 0) {
+        ctk_color_correction->confirm_timer =
+            g_timeout_add(1000,
+                          (GSourceFunc)do_confirm_countdown,
+                          (gpointer) (ctk_color_correction));
+    }
+
+    switch (attribute) {
+    case CONTRAST_VALUE:
+        attribute_idx = CONTRAST;
+        attribute_str = "contrast";
+        break;
+    case BRIGHTNESS_VALUE:
+        attribute_idx = BRIGHTNESS;
+        attribute_str = "brightness";
+        break;
+    case GAMMA_VALUE:
+        attribute_idx = GAMMA;
+        attribute_str = "gamma";
+        break;
+    default:
+        return;
+    }
+
+    switch (channel) {
+    case RED_CHANNEL:
+        channel_idx = RED;
+        channel_str = "red ";
+        break;
+    case GREEN_CHANNEL:
+        channel_idx = GREEN;
+        channel_str = "green ";
+        break;
+    case BLUE_CHANNEL:
+        channel_idx = BLUE;
+        channel_str = "blue ";
+        break;
+    case ALL_CHANNELS:
+        channel_idx = ALL_CHANNELS;
+        channel_str = "";
+        break;
+    default:
+        return;
+    }
+
+    set_color_state(ctk_color_correction, attribute_idx, channel_idx,
+                    value, FALSE);
+    
+    flush_attribute_channel_values(ctk_color_correction,
                                 attribute, channel, value);
-
-    switch (attribute) {
-      case CONTRAST_VALUE:   attribute_str = "contrast";   break;
-      case BRIGHTNESS_VALUE: attribute_str = "brightness"; break;
-      case GAMMA_VALUE:      attribute_str = "gamma";      break;
-      default:               attribute_str = "unknown";    break;
-    }
-
-    switch (channel) {
-      case RED_CHANNEL:   channel_str = "red ";   break;
-      case GREEN_CHANNEL: channel_str = "green "; break;
-      case BLUE_CHANNEL:  channel_str = "blue ";  break;
-      case ALL_CHANNELS:  /* fall through */
-      default:            channel_str = "";       break;
-    }
-
+    
     ctk_config_statusbar_message(ctk_color_correction->ctk_config,
                                  "Set %s%s to %f.",
                                  channel_str, attribute_str, value);
+    gtk_widget_set_sensitive(ctk_color_correction->confirm_button, TRUE);
 }
 
 
@@ -652,7 +812,7 @@
     }
 }
 
-static void set_attribute_channel_value(
+static void flush_attribute_channel_values(
     CtkColorCorrection *ctk_color_correction,
     gint attribute,
     gint channel,
@@ -660,70 +820,88 @@
 )
 {
     NvCtrlAttributeHandle *handle = ctk_color_correction->handle;
-    gfloat v[3];
-    
-    v[0] = v[1] = v[2] = value;
-    
-    NvCtrlSetColorAttributes(handle, v, v, v, attribute | channel);
+    
+    NvCtrlSetColorAttributes(handle,
+                             ctk_color_correction->cur_val[CONTRAST],
+                             ctk_color_correction->cur_val[BRIGHTNESS],
+                             ctk_color_correction->cur_val[GAMMA],
+                             attribute | channel);
     
     g_signal_emit(ctk_color_correction, signals[CHANGED], 0);
 }
 
-
-#define RED   RED_CHANNEL_INDEX
-#define GREEN GREEN_CHANNEL_INDEX
-#define BLUE  BLUE_CHANNEL_INDEX
 
 static void apply_parsed_attribute_list(
     CtkColorCorrection *ctk_color_correction,
     ParsedAttribute *p
 )
 {
-    float c[3], b[3], g[3];
-    char *this_display_name, *display_name;
+    int target_type, target_id;
     unsigned int attr = 0;
     
-    this_display_name = NvCtrlGetDisplayName(ctk_color_correction->handle);
-    
-    c[0] = c[1] = c[2] = CONTRAST_DEFAULT;
-    b[0] = b[1] = b[2] = BRIGHTNESS_DEFAULT;
-    g[0] = g[1] = g[2] = GAMMA_DEFAULT;
-    
+    set_color_state(ctk_color_correction, CONTRAST, ALL_CHANNELS,
+                    CONTRAST_DEFAULT, TRUE);
+    set_color_state(ctk_color_correction, BRIGHTNESS, ALL_CHANNELS,
+                    BRIGHTNESS_DEFAULT, TRUE);
+    set_color_state(ctk_color_correction, GAMMA, ALL_CHANNELS,
+                    GAMMA_DEFAULT, TRUE);
+
+    target_type = NvCtrlGetTargetType(ctk_color_correction->handle);
+    target_id = NvCtrlGetTargetId(ctk_color_correction->handle);
+
     while (p) {
-
-        display_name = NULL;
 
         if (!p->next) goto next_attribute;
         
         if (!(p->flags & NV_PARSER_TYPE_COLOR_ATTRIBUTE)) goto next_attribute;
         
         /*
-         * if this parsed attribute's display name does not match the
-         * current display name, then ignore
+         * if this parsed attribute's target_type, target_id does not match the
+         * current target_type and target_id then ignore
          */
         
-        display_name = nv_standardize_screen_name(p->display, -1);
-        
-        if (strcmp(display_name, this_display_name) != 0) goto next_attribute;
+        if ((p->target_type != target_type) ||
+            (p->target_id != target_id)) goto next_attribute;
         
         switch (p->attr & (ALL_VALUES | ALL_CHANNELS)) {
-        case (CONTRAST_VALUE | RED_CHANNEL):     c[RED]   = p->fval; break;
-        case (CONTRAST_VALUE | GREEN_CHANNEL):   c[GREEN] = p->fval; break;
-        case (CONTRAST_VALUE | BLUE_CHANNEL):    c[BLUE]  = p->fval; break;
+        case (CONTRAST_VALUE | RED_CHANNEL):
+            set_color_state(ctk_color_correction, CONTRAST,
+                            RED, p->fval, TRUE); break;
+        case (CONTRAST_VALUE | GREEN_CHANNEL):
+            set_color_state(ctk_color_correction, CONTRAST,
+                            GREEN, p->fval, TRUE); break;
+        case (CONTRAST_VALUE | BLUE_CHANNEL):
+            set_color_state(ctk_color_correction, CONTRAST,
+                            BLUE, p->fval, TRUE); break;
         case (CONTRAST_VALUE | ALL_CHANNELS):
-            c[RED] = c[GREEN] = c[BLUE] = p->fval; break;
-                                  
-        case (BRIGHTNESS_VALUE | RED_CHANNEL):   b[RED]   = p->fval; break;
-        case (BRIGHTNESS_VALUE | GREEN_CHANNEL): b[GREEN] = p->fval; break;
-        case (BRIGHTNESS_VALUE | BLUE_CHANNEL):  b[BLUE]  = p->fval; break;
+            set_color_state(ctk_color_correction, CONTRAST,
+                            ALL_CHANNELS, p->fval, TRUE); break;
+
+        case (BRIGHTNESS_VALUE | RED_CHANNEL):
+            set_color_state(ctk_color_correction, BRIGHTNESS,
+                            RED, p->fval, TRUE); break;
+        case (BRIGHTNESS_VALUE | GREEN_CHANNEL):
+            set_color_state(ctk_color_correction, BRIGHTNESS,
+                            GREEN, p->fval, TRUE); break;
+        case (BRIGHTNESS_VALUE | BLUE_CHANNEL):
+            set_color_state(ctk_color_correction, BRIGHTNESS,
+                            BLUE, p->fval, TRUE); break;
         case (BRIGHTNESS_VALUE | ALL_CHANNELS):
-            b[RED] = b[GREEN] = b[BLUE] = p->fval; break;
-            
-        case (GAMMA_VALUE | RED_CHANNEL):        g[RED]   = p->fval; break;
-        case (GAMMA_VALUE | GREEN_CHANNEL):      g[GREEN] = p->fval; break;
-        case (GAMMA_VALUE | BLUE_CHANNEL):       g[BLUE]  = p->fval; break;
+            set_color_state(ctk_color_correction, BRIGHTNESS,
+                            ALL_CHANNELS, p->fval, TRUE); break;
+
+        case (GAMMA_VALUE | RED_CHANNEL):
+            set_color_state(ctk_color_correction, GAMMA,
+                            RED, p->fval, TRUE); break;
+        case (GAMMA_VALUE | GREEN_CHANNEL):
+            set_color_state(ctk_color_correction, GAMMA,
+                            GREEN, p->fval, TRUE); break;
+        case (GAMMA_VALUE | BLUE_CHANNEL):
+            set_color_state(ctk_color_correction, GAMMA,
+                            BLUE, p->fval, TRUE); break;
         case (GAMMA_VALUE | ALL_CHANNELS):
-            g[RED] = g[GREEN] = g[BLUE] = p->fval; break;
+            set_color_state(ctk_color_correction, GAMMA,
+                            ALL_CHANNELS, p->fval, TRUE); break;
 
         default:
             goto next_attribute;
@@ -733,19 +911,95 @@
         
     next_attribute:
         
-        if (display_name) free(display_name);
-        
         p = p->next;
     }
 
-    free(this_display_name);
-
     if (attr) {
-        NvCtrlSetColorAttributes(ctk_color_correction->handle, c, b, g, attr);
+        NvCtrlSetColorAttributes(ctk_color_correction->handle,
+                                 ctk_color_correction->cur_val[CONTRAST],
+                                 ctk_color_correction->cur_val[BRIGHTNESS],
+                                 ctk_color_correction->cur_val[GAMMA],
+                                 attr);
     }
     
 } /* apply_parsed_attribute_list() */
 
+/** update_confirm_text() ************************************
+ *
+ * Generates the text used to lable confirmation button.
+ *
+ **/
+
+static void update_confirm_text(CtkColorCorrection *ctk_color_correction)
+{
+    gchar *str;
+    str = g_strdup_printf("%d Seconds to Confirm",
+                          ctk_color_correction->confirm_countdown);
+    gtk_button_set_label(GTK_BUTTON(ctk_color_correction->confirm_button),
+                         str);
+    g_free(str);
+} /* update_confirm_text() */
+
+/** do_confirm_countdown() ***********************************
+ *
+ * timeout callback for reverting color correction slider changes if user not
+ * confirm changes.
+ *
+ **/
+
+static gboolean do_confirm_countdown(gpointer data)
+{
+    gint attr, ch;
+    CtkColorCorrection *ctk_color_correction = (CtkColorCorrection *)(data);
+    unsigned int active_attributes_channels = 0;
+    GtkOptionMenu *option_menu =
+        GTK_OPTION_MENU(ctk_color_correction->option_menu);
+
+    ctk_color_correction->confirm_countdown--;
+    if (ctk_color_correction->confirm_countdown > 0) {
+        update_confirm_text(ctk_color_correction);
+        return True;
+    }
+
+    /* Countdown timed out, reset color settings to previous state */
+    for (attr = CONTRAST_INDEX; attr <= GAMMA_INDEX; attr++) {
+        for (ch = RED; ch <= BLUE; ch++) {
+            /* Check for attribute channel value change. */
+            if (ctk_color_correction->cur_val[attr - CONTRAST_INDEX][ch] !=
+                ctk_color_correction->prev_val[attr - CONTRAST_INDEX][ch]) {
+                ctk_color_correction->cur_val[attr - CONTRAST_INDEX][ch] =
+                    ctk_color_correction->prev_val[attr - CONTRAST_INDEX][ch];
+                active_attributes_channels |= (1 << attr) | (1 << ch);
+            }
+        }
+    }
+    if (active_attributes_channels) {
+        NvCtrlSetColorAttributes(ctk_color_correction->handle,
+                                 ctk_color_correction->cur_val[CONTRAST],
+                                 ctk_color_correction->cur_val[BRIGHTNESS],
+                                 ctk_color_correction->cur_val[GAMMA],
+                                 active_attributes_channels);
+        g_signal_emit(ctk_color_correction, signals[CHANGED], 0);
+    }
+    
+    /* Refresh color correction page for current selected channel. */
+    option_menu_changed(option_menu, (gpointer)(ctk_color_correction));
+    
+    /* Reset confirm button text */
+    gtk_button_set_label(GTK_BUTTON(ctk_color_correction->confirm_button),
+                         "Confirm Current Changes");
+    
+    /* Update status bar message */
+    ctk_config_statusbar_message(ctk_color_correction->ctk_config,
+                                 "Reverted color correction changes, due to "
+                                 "confirmation timeout.");
+                                
+    
+    ctk_color_correction->confirm_timer = 0;
+    gtk_widget_set_sensitive(ctk_color_correction->confirm_button, FALSE);
+    return False;
+
+} /* do_confirm_countdown() */
 
 
 GtkTextBuffer *ctk_color_correction_create_help(GtkTextTagTable *table)
@@ -785,6 +1039,9 @@
                   "the XF86VidMode extension to manipulate the X screen's "
                   "color ramps.");
     
+    ctk_help_heading(b, &i, "Confirm Current Changes");
+    ctk_help_para(b, &i, __confirm_button_help);
+    
     ctk_help_heading(b, &i, "Reset Hardware Defaults");
     ctk_help_para(b, &i, __resest_button_help);
 

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkcolorcorrection.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkcolorcorrection.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkcolorcorrection.h (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkcolorcorrection.h Sun Jan 11 05:41:46 2009
@@ -64,6 +64,11 @@
     GtkObject *brightness_adjustment;
     GtkObject *contrast_adjustment;
     GtkObject *gamma_adjustment;
+    GtkWidget *confirm_button;
+    gint confirm_countdown;
+    guint confirm_timer;
+    gfloat cur_val[3][3];  // as [attribute][channel]
+    gfloat prev_val[3][3]; // as [attribute][channel]
     guint enabled_display_devices;
 };
 

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkconfig.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkconfig.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkconfig.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkconfig.c Sun Jan 11 05:41:46 2009
@@ -30,8 +30,9 @@
 
 #include "ctkconfig.h"
 #include "ctkhelp.h"
-
-#include "ctkimage.h"
+#include "ctkwindow.h"
+#include "ctkutils.h"
+#include "ctkbanner.h"
 
 #include <stdarg.h>
 #include <stdlib.h>
@@ -70,6 +71,12 @@
 "When this option is enabled, nvidia-settings will ask if you "
 "really want to quit when the quit button is pressed. ";
 
+static const char *__save_current_config_help =
+"When nvidia-settings exits, it saves the current X server "
+"configuration to a configuration file (\"~/.nvidia-settings-rc\", "
+"by default). Use this button to save the current X server "
+"configuration immediately, optionally to a different file.";
+
 static void ctk_config_class_init(CtkConfigClass *ctk_config_class);
 
 static void display_status_bar_toggled(GtkWidget *, gpointer);
@@ -77,6 +84,7 @@
 static void slider_text_entries_toggled(GtkWidget *, gpointer);
 static void display_name_toggled(GtkWidget *widget, gpointer user_data);
 static void show_quit_dialog_toggled(GtkWidget *widget, gpointer user_data);
+static void save_rc_clicked(GtkWidget *widget, gpointer user_data);
 
 static GtkWidget *create_timer_list(CtkConfig *);
 
@@ -117,7 +125,7 @@
                               G_TYPE_NONE, 0);
 }
 
-GtkWidget* ctk_config_new(ConfigProperties *conf)
+GtkWidget* ctk_config_new(ConfigProperties *conf, CtrlHandles *pCtrlHandles)
 {
     GObject *object;
     CtkConfig *ctk_config;
@@ -127,6 +135,7 @@
     GtkWidget *label;
     GtkWidget *hseparator;
     GtkWidget *check_button;
+    GtkWidget *alignment;
     gboolean b;
 
     object = g_object_new(CTK_TYPE_CONFIG, NULL);
@@ -134,6 +143,7 @@
     ctk_config = CTK_CONFIG(object);
 
     ctk_config->conf = conf;
+    ctk_config->pCtrlHandles = pCtrlHandles;
 
     gtk_box_set_spacing(GTK_BOX(ctk_config), 10);
     
@@ -282,12 +292,70 @@
 
     gtk_box_pack_start(GTK_BOX(ctk_config), ctk_config->timer_list_box,
                        TRUE, TRUE, 0); 
-    
+
+
+    /* "Save Current Configuration" button */
+
+    label = gtk_label_new("Save Current Configuration");
+    hbox  = gtk_hbox_new(FALSE, 0);
+    ctk_config->button_save_rc = gtk_button_new();
+    alignment = gtk_alignment_new(1, 1, 0, 0);
+
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 15);
+    gtk_container_add(GTK_CONTAINER(ctk_config->button_save_rc), hbox);
+    gtk_container_add(GTK_CONTAINER(alignment), ctk_config->button_save_rc);
+    gtk_box_pack_start(GTK_BOX(ctk_config), alignment, TRUE, TRUE, 0);
+
+    /* Create the file selector for rc file */
+    ctk_config->rc_file_selector =
+        gtk_file_selection_new ("Please select a file to save to");
+
+    g_signal_connect(G_OBJECT(ctk_config->button_save_rc), "clicked",
+                     G_CALLBACK(save_rc_clicked),
+                     (gpointer) ctk_config);
+
+    gtk_file_selection_set_filename
+        (GTK_FILE_SELECTION(ctk_config->rc_file_selector), DEFAULT_RC_FILE);
+
+    ctk_config_set_tooltip(ctk_config, ctk_config->button_save_rc,
+                           __save_current_config_help);
+
     gtk_widget_show_all(GTK_WIDGET(ctk_config));
 
     return GTK_WIDGET(ctk_config);
 }
 
+/*
+ * save_rc_clicked() - called when "Save Current Configuration" button
+ * is clicked.
+ */
+
+static void save_rc_clicked(GtkWidget *widget, gpointer user_data)
+{
+    gint result;
+    gchar *rc_filename = NULL;
+    CtkConfig *ctk_config = CTK_CONFIG(user_data);
+    CtkWindow *ctk_window =
+        CTK_WINDOW(ctk_get_parent_window(GTK_WIDGET(ctk_config)));
+
+    result = gtk_dialog_run(GTK_DIALOG(ctk_config->rc_file_selector));
+    gtk_widget_hide(ctk_config->rc_file_selector);
+
+    switch (result) {
+    case GTK_RESPONSE_ACCEPT:
+    case GTK_RESPONSE_OK:
+        rc_filename = (gchar *)gtk_file_selection_get_filename
+                          (GTK_FILE_SELECTION(ctk_config->rc_file_selector));
+        break;
+    default:
+        return;
+    }
+
+    /* write the configuration file */
+    add_special_config_file_attributes(ctk_window);
+    nv_write_config_file(rc_filename, ctk_config->pCtrlHandles,
+                         ctk_window->attribute_list, ctk_config->conf);
+}
 
 
 void ctk_config_statusbar_message(CtkConfig *ctk_config, const char *fmt, ...)

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkconfig.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkconfig.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkconfig.h (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkconfig.h Sun Jan 11 05:41:46 2009
@@ -82,7 +82,10 @@
     ConfigProperties *conf;
     GtkWidget *timer_list;
     GtkWidget *timer_list_box;
+    GtkWidget *button_save_rc;
+    GtkWidget *rc_file_selector;
     gboolean timer_list_visible;
+    CtrlHandles *pCtrlHandles;
 };
 
 struct _CtkConfigClass
@@ -91,7 +94,7 @@
 };
 
 GType      ctk_config_get_type            (void) G_GNUC_CONST;
-GtkWidget* ctk_config_new                 (ConfigProperties *);
+GtkWidget* ctk_config_new                 (ConfigProperties *, CtrlHandles*);
 void       ctk_config_statusbar_message   (CtkConfig *, const char *, ...);
 GtkWidget* ctk_config_get_statusbar       (CtkConfig *);
 void       ctk_config_set_tooltip         (CtkConfig *, GtkWidget *,

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkcursorshadow.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkcursorshadow.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkcursorshadow.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkcursorshadow.c Sun Jan 11 05:41:46 2009
@@ -42,7 +42,7 @@
 
 #include "NvCtrlAttributes.h"
 
-#include "ctkimage.h"
+#include "ctkbanner.h"
 
 #include "ctkcursorshadow.h"
 #include "ctkscale.h"

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplayconfig-utils.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkdisplayconfig-utils.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplayconfig-utils.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplayconfig-utils.c Sun Jan 11 05:41:46 2009
@@ -239,7 +239,8 @@
  *   "mode_name"  dot_clock  timings  flags
  *
  **/
-static nvModeLinePtr modeline_parse(const char *modeline_str,
+static nvModeLinePtr modeline_parse(nvDisplayPtr display,
+                                    const char *modeline_str,
                                     const int broken_doublescan_modelines)
 {
     nvModeLinePtr modeline = NULL;
@@ -356,39 +357,56 @@
         free(tmp);
     }
 
-
-    /*
-     * Calculate the vertical refresh rate of the modeline in Hz;
-     * divide by two for double scan modes (if the double scan
-     * modeline isn't broken; i.e., already has a correct vtotal), and
-     * multiply by two for interlaced modes (so that we report the
-     * field rate, rather than the frame rate)
-     */
-
-    htotal = (double) modeline->data.htotal;
-    vtotal = (double) modeline->data.vtotal;
-
-    pclk = strtod(modeline->data.clock, &nptr);
-
-    if ((pclk == 0.0) || !nptr || *nptr != '\0' || ((htotal * vtotal) == 0)) {
-        nv_warning_msg("Failed to compute the refresh rate "
-                       "for the modeline '%s'", str);
-        goto fail;
-    }
-
-    modeline->refresh_rate = (pclk * 1000000.0) / (htotal * vtotal);
-
-    factor = 1.0;
-
-    if ((modeline->data.flags & V_DBLSCAN) && !broken_doublescan_modelines) {
-        factor *= 0.5;
-    }
-
-    if (modeline->data.flags & V_INTERLACE) {
-        factor *= 2.0;
-    }
-
-    modeline->refresh_rate *= factor;
+    modeline->refresh_rate = 0;
+    if (display->is_sdi && display->gpu->num_gvo_modes) {
+        /* Fetch the SDI refresh rate of the mode from the gvo mode table */
+        int i;
+        for (i = 0; i < display->gpu->num_gvo_modes; i++) {
+            if (display->gpu->gvo_mode_data[i].id &&
+                display->gpu->gvo_mode_data[i].name &&
+                !strcmp(display->gpu->gvo_mode_data[i].name,
+                        modeline->data.identifier)) {
+                modeline->refresh_rate = display->gpu->gvo_mode_data[i].rate;
+                modeline->refresh_rate /= 1000.0;
+                break;
+            }
+        }
+    }
+
+    if (modeline->refresh_rate == 0) {
+        /*
+         * Calculate the vertical refresh rate of the modeline in Hz;
+         * divide by two for double scan modes (if the double scan
+         * modeline isn't broken; i.e., already has a correct vtotal), and
+         * multiply by two for interlaced modes (so that we report the
+         * field rate, rather than the frame rate)
+         */
+
+        htotal = (double) modeline->data.htotal;
+        vtotal = (double) modeline->data.vtotal;
+
+        pclk = strtod(modeline->data.clock, &nptr);
+
+        if ((pclk == 0.0) || !nptr || *nptr != '\0' || ((htotal * vtotal) == 0)) {
+            nv_warning_msg("Failed to compute the refresh rate "
+                           "for the modeline '%s'", str);
+            goto fail;
+        }
+
+        modeline->refresh_rate = (pclk * 1000000.0) / (htotal * vtotal);
+
+        factor = 1.0;
+
+        if ((modeline->data.flags & V_DBLSCAN) && !broken_doublescan_modelines) {
+            factor *= 0.5;
+        }
+
+        if (modeline->data.flags & V_INTERLACE) {
+            factor *= 2.0;
+        }
+
+        modeline->refresh_rate *= factor;
+    }
 
     /* Restore the locale */
     if (old_locale) {
@@ -751,6 +769,93 @@
 
 
 
+/** modeline_free() *************************************
+ *
+ * Helper function that frees an nvModeLinePtr and
+ * associated memory.
+ *
+ **/
+void modeline_free(nvModeLinePtr m)
+{
+    if (m->xconfig_name) {
+        free(m->xconfig_name);
+    }
+
+    if (m->data.identifier) {
+        free(m->data.identifier);
+    }
+
+    if (m->data.comment) {
+        free(m->data.comment);
+    }
+
+    if (m->data.clock) {
+        free(m->data.clock);
+    }
+
+    free(m);
+}
+
+
+
+/** modelines_match() *************************************
+ *
+ * Helper function that returns True or False based on whether
+ * the modeline arguments match each other.
+ *
+ **/
+Bool modelines_match(nvModeLinePtr modeline1,
+                     nvModeLinePtr modeline2)
+{
+    if (!modeline1 || !modeline2) {
+        return FALSE;
+    }
+
+    if (!g_ascii_strcasecmp(modeline1->data.clock, modeline2->data.clock) &&
+        modeline1->data.hdisplay == modeline2->data.hdisplay &&
+        modeline1->data.hsyncstart == modeline2->data.hsyncstart &&
+        modeline1->data.hsyncend == modeline2->data.hsyncend &&
+        modeline1->data.htotal == modeline2->data.htotal &&
+        modeline1->data.vdisplay == modeline2->data.vdisplay &&
+        modeline1->data.vsyncstart == modeline2->data.vsyncstart &&
+        modeline1->data.vsyncend == modeline2->data.vsyncend &&
+        modeline1->data.vtotal == modeline2->data.vtotal &&
+        modeline1->data.vscan == modeline2->data.vscan &&
+        modeline1->data.flags == modeline2->data.flags &&
+        modeline1->data.hskew == modeline2->data.hskew &&
+        !g_ascii_strcasecmp(modeline1->data.identifier, 
+                            modeline2->data.identifier)) {
+            return TRUE;
+    } else {
+        return FALSE;
+    }
+} /* modelines_match() */
+
+
+
+/** display_has_modeline() *******************************************
+ *
+ * Helper function that returns TRUE or FALSE based on whether
+ * the display passed as argument supports the given modeline.
+ *
+ **/
+Bool display_has_modeline(nvDisplayPtr display,
+                          nvModeLinePtr modeline)
+{
+    nvModeLinePtr m;
+
+    for (m = display->modelines; m; m = m->next) {
+         if (modelines_match(m, modeline)) {
+            return TRUE;
+        }
+    }
+
+    return FALSE;
+
+} /* display_has_modeline() */
+
+
+
 /** display_remove_modelines() ***************************************
  *
  * Clears the display device's modeline list.
@@ -764,11 +869,7 @@
         while (display->modelines) {
             modeline = display->modelines;
             display->modelines = display->modelines->next;
-            free(modeline->xconfig_name);
-            free(modeline->data.identifier);
-            free(modeline->data.comment);
-            free(modeline->data.clock);
-            free(modeline);
+            modeline_free(modeline);
         }
         display->num_modelines = 0;
     }
@@ -838,7 +939,7 @@
     str = modeline_strs;
     while (strlen(str)) {
 
-        modeline = modeline_parse(str, broken_doublescan_modelines);
+        modeline = modeline_parse(display, str, broken_doublescan_modelines);
         if (!modeline) {
             *err_str = g_strdup_printf("Failed to parse the following "
                                        "modeline of display device\n"
@@ -854,8 +955,8 @@
         }
 
         /* Add the modeline at the end of the display's modeline list */
-        display->modelines = (nvModeLinePtr)xconfigAddListItem
-            ((GenericListPtr)display->modelines, (GenericListPtr)modeline);
+        xconfigAddListItem((GenericListPtr *)(&display->modelines),
+                           (GenericListPtr)modeline);
         display->num_modelines++;
 
         /* Get next modeline string */
@@ -1160,9 +1261,8 @@
 
 
     /* Add the metamode at the end of the screen's metamode list */
-    screen->metamodes =
-        (nvMetaModePtr)xconfigAddListItem((GenericListPtr)screen->metamodes,
-                                          (GenericListPtr)metamode);
+    xconfigAddListItem((GenericListPtr *)(&screen->metamodes),
+                       (GenericListPtr)metamode);
 
 
     /* Split up the metamode into separate modes */
@@ -1233,9 +1333,8 @@
         
 
         /* Add the mode at the end of the display's mode list */
-        display->modes =
-            (nvModePtr)xconfigAddListItem((GenericListPtr)display->modes,
-                                          (GenericListPtr)mode);
+        xconfigAddListItem((GenericListPtr *)(&display->modes),
+                           (GenericListPtr)mode);
         display->num_modes++;
         
     } /* Done parsing a single metamode */
@@ -1308,9 +1407,8 @@
             }
 
             /* Add the mode at the end of display's mode list */
-            display->modes =
-                (nvModePtr)xconfigAddListItem((GenericListPtr)display->modes,
-                                              (GenericListPtr)mode);
+            xconfigAddListItem((GenericListPtr *)(&display->modes),
+                               (GenericListPtr)mode);
             display->num_modes++;
 
             metamode = metamode->next;
@@ -1568,9 +1666,8 @@
         }
 
         /* Remove the display from the GPU */
-        gpu->displays =
-            (nvDisplayPtr)xconfigRemoveListItem((GenericListPtr)gpu->displays,
-                                                (GenericListPtr)display);
+        xconfigRemoveListItem((GenericListPtr *)(&gpu->displays),
+                              (GenericListPtr)display);
         gpu->connected_displays &= ~(display->device_mask);
         gpu->num_displays--;
     }
@@ -1603,6 +1700,48 @@
 
 } /* gpu_remove_displays() */
 
+
+
+/** gpu_query_gvo_mode_info() ****************************************
+ *
+ * Adds GVO mode information to the GPU's gvo mode data table at
+ * the given table index.
+ *
+ **/
+static Bool gpu_query_gvo_mode_info(nvGpuPtr gpu, int mode_id, int table_idx)
+{
+    ReturnStatus ret1, ret2;
+    GvoModeData *data;
+    int rate;
+    char *name;
+
+
+    if (!gpu || table_idx >= gpu->num_gvo_modes) {
+        return FALSE;
+    }
+
+    data = &(gpu->gvo_mode_data[table_idx]);
+
+    ret1 = NvCtrlGetDisplayAttribute(gpu->handle,
+                                     mode_id,
+                                     NV_CTRL_GVO_VIDEO_FORMAT_REFRESH_RATE,
+                                     &(rate));
+    
+    ret2 = NvCtrlGetStringDisplayAttribute(gpu->handle,
+                                           mode_id,
+                                           NV_CTRL_STRING_GVO_VIDEO_FORMAT_NAME,
+                                           &(name));
+
+    if ((ret1 == NvCtrlSuccess) && (ret2 == NvCtrlSuccess)) {
+        data->id = mode_id;
+        data->rate = rate;
+        data->name = name;
+        return TRUE;
+    }
+
+    XFree(name);
+    return FALSE;
+}
 
 
 /** gpu_add_display_from_server() ************************************
@@ -1643,6 +1782,81 @@
     }
 
 
+    /* Query if this display is an SDI display */
+    ret = NvCtrlGetDisplayAttribute(gpu->handle, device_mask,
+                                    NV_CTRL_IS_GVO_DISPLAY,
+                                    &(display->is_sdi));
+    if (ret != NvCtrlSuccess) {
+        nv_warning_msg("Failed to query if display device\n"
+                       "0x%08x connected to GPU-%d '%s' is an\n"
+                       "SDI device.",
+                       device_mask, NvCtrlGetTargetId(gpu->handle),
+                       gpu->name);
+        display->is_sdi = FALSE;
+    }
+
+
+    /* Load the SDI mode table so we can report accurate refresh rates. */
+    if (display->is_sdi && !gpu->gvo_mode_data) {
+        unsigned int valid1 = 0;
+        unsigned int valid2 = 0;
+        NVCTRLAttributeValidValuesRec valid;
+
+        ret = NvCtrlGetValidAttributeValues(gpu->handle,
+                                            NV_CTRL_GVO_OUTPUT_VIDEO_FORMAT,
+                                            &valid);
+        if ((ret != NvCtrlSuccess) ||
+            (valid.type != ATTRIBUTE_TYPE_INT_BITS)) {
+            valid1 = 0;
+        } else {
+            valid1 = valid.u.bits.ints;
+        }
+        
+        ret = NvCtrlGetValidAttributeValues(gpu->handle,
+                                            NV_CTRL_GVO_OUTPUT_VIDEO_FORMAT2,
+                                            &valid);
+        if ((ret != NvCtrlSuccess) ||
+            (valid.type != ATTRIBUTE_TYPE_INT_BITS)) {
+            valid2 = 0;
+        } else {
+            valid2 = valid.u.bits.ints;
+        }
+
+        /* Count the number of valid modes there are */
+        gpu->num_gvo_modes = count_number_of_bits(valid1);
+        gpu->num_gvo_modes += count_number_of_bits(valid2);
+        if (gpu->num_gvo_modes > 0) {
+            gpu->gvo_mode_data = (GvoModeData *)calloc(gpu->num_gvo_modes,
+                                                       sizeof(GvoModeData));
+        }
+        if (!gpu->gvo_mode_data) {
+            gpu->num_gvo_modes = 0;
+        } else {
+            // Gather all the bits and dump them into the array
+            int idx = 0; // Index into gvo_mode_data.
+            int id = 0;  // Mode ID
+            while (valid1) {
+                if (valid1 & 1) {
+                    if (gpu_query_gvo_mode_info(gpu, id, idx)) {
+                        idx++;
+                    }
+                }
+                valid1 >>= 1;
+                id++;
+            }
+            while (valid2) {
+                if (valid2 & 1) {
+                    if (gpu_query_gvo_mode_info(gpu, id, idx)) {
+                        idx++;
+                    }
+                }
+                valid2 >>= 1;
+                id++;
+            }                
+        }
+    }
+
+
     /* Query the modelines for the display device */
     if (!display_add_modelines_from_server(display, err_str)) {
         nv_warning_msg("Failed to add modelines to display device 0x%08x "
@@ -1654,9 +1868,8 @@
 
 
     /* Add the display at the end of gpu's display list */
-    gpu->displays =
-        (nvDisplayPtr)xconfigAddListItem((GenericListPtr)gpu->displays,
-                                         (GenericListPtr)display);
+    xconfigAddListItem((GenericListPtr *)(&gpu->displays),
+                       (GenericListPtr)display);
     gpu->connected_displays |= device_mask;
     gpu->num_displays++;
     return display;
@@ -1728,9 +1941,8 @@
         /* Remove the screen from the GPU */
         gpu = screen->gpu;
         
-        gpu->screens =
-            (nvScreenPtr)xconfigRemoveListItem((GenericListPtr)gpu->screens,
-                                               (GenericListPtr)screen);
+        xconfigRemoveListItem((GenericListPtr *)(&gpu->screens),
+                              (GenericListPtr)screen);
         gpu->num_screens--;
         
         /* Make sure other screens in the layout aren't relative
@@ -1880,9 +2092,8 @@
         }
     }
     /* Add the screen at the end of the gpu's screen list */
-    gpu->screens =
-        (nvScreenPtr)xconfigAddListItem((GenericListPtr)gpu->screens,
-                                        (GenericListPtr)screen);
+    xconfigAddListItem((GenericListPtr *)(&gpu->screens),
+                       (GenericListPtr)screen);
     gpu->num_screens++;
     return TRUE;
 
@@ -2173,8 +2384,8 @@
 
 
     /* Add the GPU at the end of the layout's GPU list */
-    layout->gpus = (nvGpuPtr)xconfigAddListItem((GenericListPtr)layout->gpus,
-                                                (GenericListPtr)gpu);
+    xconfigAddListItem((GenericListPtr *)(&layout->gpus),
+                       (GenericListPtr)gpu);
     layout->num_gpus++;
     return TRUE;
 

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplayconfig-utils.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkdisplayconfig-utils.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplayconfig-utils.h (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplayconfig-utils.h Sun Jan 11 05:41:46 2009
@@ -53,12 +53,19 @@
 
 nvModePtr mode_parse(nvDisplayPtr display, const char *mode_str);
 
+/* ModeLine functions */
+
+Bool modelines_match(nvModeLinePtr modeline1, nvModeLinePtr modeline2);
+void modeline_free(nvModeLinePtr m);
+
+
 
 /* Display functions */
 
 gchar * display_get_type_str(unsigned int device_mask, int be_generic);
 int display_find_closest_mode_matching_modeline(nvDisplayPtr display,
                                                 nvModeLinePtr modeline);
+Bool display_has_modeline(nvDisplayPtr display, nvModeLinePtr modeline);
 Bool display_add_modelines_from_server(nvDisplayPtr display, gchar **err_str);
 void display_remove_modes(nvDisplayPtr display);
 

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplayconfig.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkdisplayconfig.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplayconfig.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplayconfig.c Sun Jan 11 05:41:46 2009
@@ -42,10 +42,11 @@
 
 #include "msg.h"
 #include "parse.h"
+#include "lscf.h"
 
 #include "ctkutils.h"
 
-#include "ctkimage.h"
+#include "ctkbanner.h"
 #include "ctkevent.h"
 #include "ctkhelp.h"
 #include "ctkdisplayconfig.h"
@@ -103,7 +104,11 @@
 
 static int generateXConfig(CtkDisplayConfig *ctk_object, XConfigPtr *pConfig);
 static void update_banner(XConfigPtr config);
-
+static void display_config_attribute_changed(GtkObject *object, gpointer arg1,
+                                           gpointer user_data);
+static void reset_layout(CtkDisplayConfig *ctk_object);
+static gboolean force_layout_reset(gpointer user_data);
+static void user_changed_attributes(CtkDisplayConfig *ctk_object);
 
 
 
@@ -327,6 +332,116 @@
     return TRUE;
 
 } /* layout_supports_depth_30() */
+
+
+
+/** register_layout_events() *****************************************
+ *
+ * Registers to display-configuration related events relating to all
+ * parts of the given layout structure.
+ *
+ **/
+
+static void register_layout_events(CtkDisplayConfig *ctk_object)
+{
+    nvLayoutPtr layout = ctk_object->layout;
+    nvScreenPtr screen;
+    nvGpuPtr gpu;
+    
+
+    /* Register all Screen/Gpu events. */
+
+    for (gpu = layout->gpus; gpu; gpu = gpu->next) {
+
+        if (!gpu->handle) continue;
+
+        g_signal_connect(G_OBJECT(gpu->ctk_event),
+                         CTK_EVENT_NAME(NV_CTRL_PROBE_DISPLAYS),
+                         G_CALLBACK(display_config_attribute_changed),
+                         (gpointer) ctk_object);
+
+        g_signal_connect(G_OBJECT(gpu->ctk_event),
+                         CTK_EVENT_NAME(NV_CTRL_MODE_SET_EVENT),
+                         G_CALLBACK(display_config_attribute_changed),
+                         (gpointer) ctk_object);
+
+        for (screen = gpu->screens; screen; screen = screen->next) {
+
+            if (!screen->handle) continue;
+            
+            g_signal_connect(G_OBJECT(screen->ctk_event),
+                             CTK_EVENT_NAME(NV_CTRL_STRING_TWINVIEW_XINERAMA_INFO_ORDER),
+                             G_CALLBACK(display_config_attribute_changed),
+                             (gpointer) ctk_object);
+
+            g_signal_connect(G_OBJECT(screen->ctk_event),
+                             CTK_EVENT_NAME(NV_CTRL_ASSOCIATED_DISPLAY_DEVICES),
+                             G_CALLBACK(display_config_attribute_changed),
+                             (gpointer) ctk_object);
+
+            g_signal_connect(G_OBJECT(screen->ctk_event),
+                             CTK_EVENT_NAME(NV_CTRL_STRING_MOVE_METAMODE),
+                             G_CALLBACK(display_config_attribute_changed),
+                             (gpointer) ctk_object);
+
+            g_signal_connect(G_OBJECT(screen->ctk_event),
+                             CTK_EVENT_NAME(NV_CTRL_STRING_DELETE_METAMODE),
+                             G_CALLBACK(display_config_attribute_changed),
+                             (gpointer) ctk_object);
+        }
+    }
+
+} /* register_layout_events() */
+
+
+
+/** unregister_layout_events() *****************************************
+ *
+ * Unregisters display-configuration related events relating to all
+ * parts of the given layout structure as registered by 
+
+ * Unregisters all Screen/Gpu events.
+ *
+ **/
+
+static void unregister_layout_events(CtkDisplayConfig *ctk_object)
+{
+    nvLayoutPtr layout = ctk_object->layout;
+    nvScreenPtr screen;
+    nvGpuPtr gpu;
+    
+
+    /* Unregister all Screen/Gpu events. */
+
+    for (gpu = layout->gpus; gpu; gpu = gpu->next) {
+
+        if (!gpu->handle) continue;
+
+        /* Unregister all GPU events for this GPU */
+        g_signal_handlers_disconnect_matched(G_OBJECT(gpu->ctk_event),
+                                             G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
+                                             0, // Signal ID
+                                             0, // Signal Detail
+                                             NULL, // Closure
+                                             G_CALLBACK(display_config_attribute_changed),
+                                             (gpointer) ctk_object);
+
+        for (screen = gpu->screens; screen; screen = screen->next) {
+
+            if (!screen->handle) continue;
+  
+            /* Unregister all screen events for this screen */
+            g_signal_handlers_disconnect_matched(G_OBJECT(screen->ctk_event),
+                                                 G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
+                                                 0, // Signal ID
+                                                 0, // Signal Detail
+                                                 NULL, // Closure
+                                                 G_CALLBACK(display_config_attribute_changed),
+                                                 (gpointer) ctk_object);
+        }
+    }
+
+} /* unregister_layout_events() */
 
 
 
@@ -879,6 +994,17 @@
 } /* create_validation_apply_dialog() */
 
 
+
+static void user_changed_attributes(CtkDisplayConfig *ctk_object)
+{
+    if (ctk_object->forced_reset_allowed) {
+        gtk_widget_set_sensitive(ctk_object->btn_apply, True);
+        ctk_object->forced_reset_allowed = FALSE;
+    }
+} /* user_changed_attributes() */
+
+
+
 static void screen_primary_display_toggled(GtkWidget *widget,
                                            gpointer user_data)
 {
@@ -892,9 +1018,7 @@
         screen->primaryDisplay = display;
     }
 
-    /* Make the apply button sensitive to user input */
-    gtk_widget_set_sensitive(ctk_object->btn_apply, True);
-
+    user_changed_attributes(ctk_object);
 } /* screen_primary_display_toggled() */
 
 
@@ -952,6 +1076,25 @@
 
     gchar *err_str = NULL;
     gchar *layout_str = NULL;
+    gchar *sli_mode = NULL;
+    ReturnStatus ret;
+
+    /*
+     * Get SLI Mode.  If SLI Mode is "Mosaic", do not
+     * load this page
+     *
+     */
+    ret = NvCtrlGetStringAttribute(handle,
+                                   NV_CTRL_STRING_SLI_MODE,
+                                   &sli_mode);
+    if (ret == NvCtrlSuccess && !g_ascii_strcasecmp(sli_mode, "Mosaic")) {
+        XFree(sli_mode);
+        return NULL;
+    }
+
+    if (sli_mode) {
+        XFree(sli_mode);
+    }
 
     /*
      * Create the ctk object
@@ -965,7 +1108,15 @@
     ctk_object->ctk_config = ctk_config;
 
     ctk_object->apply_possible = TRUE;
+
+    ctk_object->reset_required = FALSE;
+    ctk_object->forced_reset_allowed = TRUE;
+    ctk_object->notify_user_of_reset = TRUE;
+    ctk_object->ignore_reset_events = FALSE;
+
     ctk_object->advanced_mode = FALSE;
+
+    ctk_object->last_resolution_idx = -1;
 
     /* Set container properties of the object & pack the banner */
     gtk_box_set_spacing(GTK_BOX(ctk_object), 5);
@@ -1006,6 +1157,9 @@
 
         return GTK_WIDGET(ctk_object);
     }
+
+    /* Register all Screen/Gpu events. */
+    register_layout_events(ctk_object);
 
     /* Create the layout widget */
     ctk_object->obj_layout = ctk_display_layout_new(handle, ctk_config,
@@ -2081,7 +2235,6 @@
     auto_modeline = NULL;
     for (modeline = modelines; modeline; modeline = modeline->next) {
 
-        float modeline_rate;
         nvModeLinePtr m;
         int count_ref; /* # modelines with similar refresh rates */ 
         int num_ref;   /* Modeline # in a group of similar refresh rates */
@@ -2100,12 +2253,11 @@
             continue;
         }
 
-        modeline_rate = modeline->refresh_rate;
         is_doublescan = (modeline->data.flags & V_DBLSCAN);
         is_interlaced = (modeline->data.flags & V_INTERLACE);
 
-        name = g_strdup_printf("%.0f Hz", modeline_rate);
-
+        name = g_strdup_printf("%0.*f Hz", (display->is_sdi ? 3 : 0),
+                               modeline->refresh_rate);
 
         /* Get a unique number for this modeline */
         count_ref = 0; /* # modelines with similar refresh rates */
@@ -2121,7 +2273,9 @@
                 m != auto_modeline) {
 
                 count_ref++;
-                /* Modelines with similar refresh rates get a unique # (num_ref) */
+                /* Modelines with similar refresh rates get a
+                 * unique # (num_ref)
+                 */
                 if (m == modeline) {
                     num_ref = count_ref; /* This modeline's # */
                 }
@@ -2130,7 +2284,7 @@
         }
 
         /* Is default refresh rate for resolution */
-        if (!ctk_object->refresh_table_len) {
+        if (!ctk_object->refresh_table_len && !display->is_sdi) {
             auto_modeline = modeline;
             g_free(name);
             name = g_strdup("Auto");
@@ -2189,7 +2343,7 @@
                 modeline->data.vdisplay == cur_modeline->data.vdisplay) {
                 
                 float prev_rate = ctk_object->refresh_table[cur_idx]->refresh_rate;
-                float rate      = modeline->refresh_rate;
+                float rate = modeline->refresh_rate;
                 
                 if (ctk_object->refresh_table[cur_idx]->data.hdisplay != cur_modeline->data.hdisplay ||
                     ctk_object->refresh_table[cur_idx]->data.vdisplay != cur_modeline->data.vdisplay) {
@@ -2285,7 +2439,6 @@
 
     
     cur_modeline = display->cur_mode->modeline;
-
 
     /* Create the modeline lookup table for the dropdown */
     if (ctk_object->resolution_table) {
@@ -2414,11 +2567,14 @@
 
 } /* setup_display_resolution_dropdown() */
 
+
+
 /** generate_display_modelname_dropdown() ********************************
  *
  * Generate display modelname dropdown menu.
  *
  **/
+
 static GtkWidget* generate_display_modelname_dropdown
               (CtkDisplayConfig *ctk_object, int *cur_idx)
 {
@@ -2470,14 +2626,19 @@
                 [ctk_object->display_model_table_len++] = display;
         }
     }
+
     return menu;
+
 } /* generate_display_modelname_dropdown() */
 
+
+
 /** setup_display_modelname_dropdown() **************************
  *
  * Setup display modelname dropdown menu.
  *
  **/
+
 static void setup_display_modelname_dropdown(CtkDisplayConfig *ctk_object)
 {
     GtkWidget *menu;
@@ -2512,11 +2673,12 @@
     gtk_option_menu_set_history
         (GTK_OPTION_MENU(ctk_object->mnu_display_model), cur_idx);
 
-
     g_signal_handlers_unblock_by_func
         (G_OBJECT(ctk_object->mnu_display_model),
          G_CALLBACK(display_modelname_changed), (gpointer) ctk_object);
+
 } /* setup_display_modelname_dropdown() */
+
 
 
 /** setup_display_position_type() ************************************
@@ -2776,7 +2938,10 @@
         (G_OBJECT(ctk_object->chk_primary_display),
          G_CALLBACK(screen_primary_display_toggled),
          (gpointer) ctk_object);
+
 }  /* setup_primary_display() */
+
+
 
 /** setup_display_panning() ******************************************
  *
@@ -3866,7 +4031,7 @@
     /* If the positioning of the X screen changes, we cannot apply */
     check_screen_pos_changed(ctk_object);
 
-    gtk_widget_set_sensitive(ctk_object->btn_apply, True);
+    user_changed_attributes(ctk_object);
 
 } /* layout_modified_callback()  */
 
@@ -4013,9 +4178,8 @@
 
     /* Add the screen at the end of the gpu's screen list */
     gpu = display->gpu;
-    gpu->screens =
-        (nvScreenPtr)xconfigAddListItem((GenericListPtr)gpu->screens,
-                                        (GenericListPtr)screen);
+    xconfigAddListItem((GenericListPtr *)(&gpu->screens),
+                       (GenericListPtr)screen);
     gpu->num_screens++;
 
 
@@ -4157,9 +4321,19 @@
             return;
             
         } else {
+            g_signal_handlers_block_by_func
+                (G_OBJECT(screen->ctk_event),
+                 G_CALLBACK(display_config_attribute_changed),
+                 (gpointer) ctk_object);
+            
             /* Make sure other parts of nvidia-settings get updated */
             ctk_event_emit(screen->ctk_event, 0,
                            NV_CTRL_ASSOCIATED_DISPLAY_DEVICES, new_mask);
+            
+            g_signal_handlers_unblock_by_func
+                (G_OBJECT(screen->ctk_event),
+                 G_CALLBACK(display_config_attribute_changed),
+                         (gpointer) ctk_object);
         }
     }
     
@@ -4217,9 +4391,8 @@
 
 
         /* Add the mode at the end of the display's mode list */
-        display->modes =
-            (nvModePtr)xconfigAddListItem((GenericListPtr)display->modes,
-                                          (GenericListPtr)mode);
+        xconfigAddListItem((GenericListPtr *)(&display->modes),
+                           (GenericListPtr)mode);
         display->num_modes++;
     }
 
@@ -4304,9 +4477,8 @@
             }
 
             /* Append the metamode */
-            new_screen->metamodes =
-                (nvMetaModePtr)xconfigAddListItem((GenericListPtr)new_screen->metamodes,
-                                                  (GenericListPtr)metamode);
+            xconfigAddListItem((GenericListPtr *)(&new_screen->metamodes),
+                               (GenericListPtr)metamode);
             new_screen->num_metamodes++;
         }
 
@@ -4322,9 +4494,8 @@
         }
         
         /* Append the screen to the gpu */
-        gpu->screens =
-            (nvScreenPtr)xconfigAddListItem((GenericListPtr)gpu->screens,
-                                            (GenericListPtr)new_screen);
+        xconfigAddListItem((GenericListPtr *)(&gpu->screens),
+                           (GenericListPtr)new_screen);
         gpu->num_screens++;
 
         /* Earlier display devices get first dibs on low screen numbers */
@@ -4401,9 +4572,8 @@
             metamode->source = METAMODE_SOURCE_NVCONTROL;
             
             /* Add the metamode at the end of the screen's metamode list */
-            screen->metamodes =
-                (nvMetaModePtr)xconfigAddListItem((GenericListPtr)screen->metamodes,
-                                                  (GenericListPtr)metamode);
+            xconfigAddListItem((GenericListPtr *)(&screen->metamodes),
+                               (GenericListPtr)metamode);
             screen->num_metamodes++;
         }
     }
@@ -4477,9 +4647,8 @@
             }
             
             /* Add the mode at the end of display's mode list */
-            display->modes =
-                (nvModePtr)xconfigAddListItem((GenericListPtr)display->modes,
-                                              (GenericListPtr)mode);
+            xconfigAddListItem((GenericListPtr *)(&display->modes),
+                               (GenericListPtr)mode);
             display->num_modes++;
             metamode = metamode->next;
         }
@@ -4864,8 +5033,8 @@
         setup_layout_frame(ctk_object);
         setup_display_page(ctk_object);
         setup_screen_page(ctk_object);
-        
-        gtk_widget_set_sensitive(ctk_object->btn_apply, True);
+
+        user_changed_attributes(ctk_object);
     }
 
 } /* display_config_clicked() */
@@ -4918,7 +5087,7 @@
     /* Update the modename */
     setup_display_modename(ctk_object);
 
-    gtk_widget_set_sensitive(ctk_object->btn_apply, True);
+    user_changed_attributes(ctk_object);
 
 } /* display_refresh_changed() */
 
@@ -4934,6 +5103,7 @@
 {
     CtkDisplayConfig *ctk_object = CTK_DISPLAY_CONFIG(user_data);
     gint idx;
+    gint last_idx;
     nvModeLinePtr modeline;
     nvDisplayPtr display;
 
@@ -4945,8 +5115,12 @@
         (CTK_DISPLAY_LAYOUT(ctk_object->obj_layout));
 
 
+    /* cache the selected index */
+    last_idx = ctk_object->last_resolution_idx;
+    ctk_object->last_resolution_idx = idx;
+    
     /* Ignore selecting same resolution */
-    if (display->cur_mode->modeline == modeline) {
+    if (idx == last_idx) {
         return;
     }
 
@@ -4985,7 +5159,7 @@
     setup_display_panning(ctk_object);
 
 
-    gtk_widget_set_sensitive(ctk_object->btn_apply, True);
+    user_changed_attributes(ctk_object);
 
 } /* display_resolution_changed() */
 
@@ -5073,8 +5247,7 @@
 
     setup_display_position_offset(ctk_object);
 
-    gtk_widget_set_sensitive(ctk_object->btn_apply, True);
-
+    user_changed_attributes(ctk_object);
 } /* display_position_type_changed() */
 
 
@@ -5127,7 +5300,7 @@
     /* Update the GUI */
     setup_display_position_offset(ctk_object);
 
-    gtk_widget_set_sensitive(ctk_object->btn_apply, True);
+    user_changed_attributes(ctk_object);
 
 } /* display_position_relative_changed() */
 
@@ -5169,7 +5342,7 @@
         (CTK_DISPLAY_LAYOUT(ctk_object->obj_layout),
          display, CONF_ADJ_ABSOLUTE, NULL, x, y);
 
-    gtk_widget_set_sensitive(ctk_object->btn_apply, True);
+    user_changed_attributes(ctk_object);
 
 } /* display_position_offset_activate() */
 
@@ -5264,13 +5437,15 @@
     }
     ctk_display_layout_set_screen_depth
         (CTK_DISPLAY_LAYOUT(ctk_object->obj_layout), screen, depth);
+    /* Update default screen depth in SMF using libscf functions */
+    update_scf_depth(depth);
 
     consolidate_xinerama(ctk_object, screen);
 
     /* Can't apply screen depth changes */
     ctk_object->apply_possible = FALSE;
 
-    gtk_widget_set_sensitive(ctk_object->btn_apply, True);
+    user_changed_attributes(ctk_object);
 
 } /* screen_depth_changed() */
 
@@ -5331,7 +5506,7 @@
 
     setup_screen_position_offset(ctk_object);
 
-    gtk_widget_set_sensitive(ctk_object->btn_apply, True);
+    user_changed_attributes(ctk_object);
 
 } /* screen_position_type_changed() */
 
@@ -5385,7 +5560,7 @@
     /* Update the GUI */
     setup_screen_position_offset(ctk_object);
 
-    gtk_widget_set_sensitive(ctk_object->btn_apply, True);
+    user_changed_attributes(ctk_object);
 
 } /* screen_position_relative_changed() */
 
@@ -5427,7 +5602,7 @@
         (CTK_DISPLAY_LAYOUT(ctk_object->obj_layout),
          screen, screen->position_type, screen->relative_to, x, y);
 
-    gtk_widget_set_sensitive(ctk_object->btn_apply, True);
+    user_changed_attributes(ctk_object);
 
 } /* screen_position_offset_activate() */
 
@@ -5514,7 +5689,7 @@
     /* Sync the display frame */
     setup_display_page(ctk_object);
 
-    gtk_widget_set_sensitive(ctk_object->btn_apply, True);
+    user_changed_attributes(ctk_object);
 
 } /* screen_metamode_activate() */
 
@@ -5544,7 +5719,7 @@
     setup_display_page(ctk_object);
     setup_screen_page(ctk_object);
 
-    gtk_widget_set_sensitive(ctk_object->btn_apply, True);
+    user_changed_attributes(ctk_object);
 
 } /* screen_metamode_add_clicked() */
 
@@ -5574,7 +5749,7 @@
     setup_display_page(ctk_object);
     setup_screen_page(ctk_object);
 
-    gtk_widget_set_sensitive(ctk_object->btn_apply, True);
+    user_changed_attributes(ctk_object);
 
 } /* screen_metamode_delete_clicked() */
 
@@ -5601,9 +5776,8 @@
     consolidate_xinerama(ctk_object, NULL);
     setup_screen_page(ctk_object);
 
-    /* Make the apply button sensitive to user input */
-    gtk_widget_set_sensitive(ctk_object->btn_apply, True);
-
+    user_changed_attributes(ctk_object);
+    
 } /* xinerama_state_toggled() */
 
 
@@ -6129,7 +6303,9 @@
     /* If we need to switch metamodes, do so now */
 
     if (strcmp(screen->cur_metamode->string, metamode_str)) {
+
         if (switch_to_current_metamode(ctk_object, screen)) {
+
             ctk_config_statusbar_message(ctk_object->ctk_config,
                                          "Switched to MetaMode %dx%d.",
                                          screen->cur_metamode->edim[W],
@@ -6167,7 +6343,7 @@
     CtkDisplayConfig *ctk_object = CTK_DISPLAY_CONFIG(user_data);
     nvGpuPtr gpu;
     ReturnStatus ret;
-    int clear_apply = 1;
+    gboolean clear_apply = TRUE;
 
 
     /* Make sure we can apply */
@@ -6179,6 +6355,9 @@
     if (!validate_layout(ctk_object, VALIDATE_APPLY)) {
         return;
     }
+
+    /* Temporarily unregister events */
+    unregister_layout_events(ctk_object);
 
     /* Update all GPUs */
     for (gpu = ctk_object->layout->gpus; gpu; gpu = gpu->next) {
@@ -6213,7 +6392,8 @@
             
             if (screen->primaryDisplay) {
                 gchar *primary_str =
-                   display_get_type_str(screen->primaryDisplay->device_mask, 0);
+                    display_get_type_str(screen->primaryDisplay->device_mask,
+                                         0);
 
                 ret = NvCtrlSetStringAttribute(screen->handle,
                                  NV_CTRL_STRING_TWINVIEW_XINERAMA_INFO_ORDER,
@@ -6236,7 +6416,20 @@
     /* Clear the apply button if all went well */
     if (clear_apply) {
         gtk_widget_set_sensitive(widget, False);
-    }
+        ctk_object->forced_reset_allowed = TRUE;
+    }
+
+    /* XXX Run the GTK main loop to flush any pending layout events
+     * that should be ignored.  This is done because the GTK main loop
+     * seems to only ignore the first blocked event received when it
+     * finally runs.
+     */
+    while (gtk_events_pending()) {
+        gtk_main_iteration_do(FALSE);
+    }
+
+    /* re-register to receive events */
+    register_layout_events(ctk_object);
 
 } /* apply_clicked() */
 
@@ -6374,7 +6567,7 @@
 
 
     /* Find out if the file is mergable */
-    if (!filename) {
+    if (!filename || (filename[0] == '\0')) {
         mergable = FALSE;
     } else {
         /* Must be able to open the file */
@@ -6384,17 +6577,18 @@
                 g_strdup_printf("Failed to open existing X config file '%s'!",
                                 filename);
             ctk_display_warning_msg
-                (ctk_get_parent_window(GTK_WIDGET(ctk_object)),
-                 msg);
+                (ctk_get_parent_window(GTK_WIDGET(ctk_object)), msg);
             g_free(msg);
 
             xconfigCloseConfigFile();
             mergable = FALSE;
 
         } else {
-
-        /* Must be able to parse the file as an X config file */
+            GenerateOptions gop;
+
+            /* Must be able to parse the file as an X config file */
             error = xconfigReadConfigFile(&mergeConfig);
+            xconfigCloseConfigFile();
             if (error) {
                 /* If we failed to parse the config file, we should not
                  * allow a merge.
@@ -6407,36 +6601,32 @@
                      msg);
                 g_free(msg);
 
-                xconfigCloseConfigFile();
                 mergeConfig = NULL;
                 mergable = FALSE;
             }
+
+            /* Sanitize the X config file */
+            xconfigGenerateLoadDefaultOptions(&gop);
+            xconfigGetXServerInUse(&gop);
+
+            if (!xconfigSanitizeConfig(mergeConfig, NULL, &gop)) {
+                gchar *msg = g_strdup_printf("Failed to sanitize existing X "
+                                             "config file '%s'!",
+                                             filename);
+                ctk_display_warning_msg
+                    (ctk_get_parent_window(GTK_WIDGET(ctk_object)), msg);
+                g_free(msg);
+
+                xconfigFreeConfig(&mergeConfig);
+                mergable = FALSE;
+            }
         }
 
         /* If we're not actualy doing a merge, close the file */
         if (!merge && mergeConfig) {
-            xconfigFreeConfig(mergeConfig);
-            xconfigCloseConfigFile();
-            mergeConfig = NULL;
-        }
-    }
-
-    merge = (merge && mergable);
-
-
-    /* Report merge problems */
-    g_signal_handlers_block_by_func
-        (G_OBJECT(ctk_object->btn_xconfig_merge),
-         G_CALLBACK(xconfig_merge_toggled), (gpointer) ctk_object);
-    
-    gtk_toggle_button_set_active
-        (GTK_TOGGLE_BUTTON(ctk_object->btn_xconfig_merge), merge);
-    
-    g_signal_handlers_unblock_by_func
-        (G_OBJECT(ctk_object->btn_xconfig_merge),
-         G_CALLBACK(xconfig_merge_toggled), (gpointer) ctk_object);
-    
-    gtk_widget_set_sensitive(ctk_object->btn_xconfig_merge, mergable);
+            xconfigFreeConfig(&mergeConfig);
+        }
+    }
 
 
     /* Generate an X config structure from our layout */
@@ -6450,17 +6640,39 @@
     /* Merge the two X config structures */
     if (mergeConfig) {
         result = xconfigMergeConfigs(mergeConfig, config);
-        xconfigFreeConfig(config);
-        xconfigCloseConfigFile();
-        config = mergeConfig;
         if (!result) {
-            xconfigFreeConfig(mergeConfig);
+            xconfigFreeConfig(&mergeConfig);
             err_msg = g_strdup_printf("Failed to merge current configuration "
                                       "with existing X config file '%s'!",
                                       filename);
-            goto fail;
-        }
-    }
+            ctk_display_warning_msg
+                (ctk_get_parent_window(GTK_WIDGET(ctk_object)), err_msg);
+            g_free(err_msg);
+            err_msg = NULL;
+            mergable = FALSE;
+        } else {
+            xconfigFreeConfig(&config);
+            config = mergeConfig;
+            mergeConfig = NULL;
+        }
+    }
+
+
+    /* Report merge problems */
+    merge = (merge && mergable);
+
+    g_signal_handlers_block_by_func
+        (G_OBJECT(ctk_object->btn_xconfig_merge),
+         G_CALLBACK(xconfig_merge_toggled), (gpointer) ctk_object);
+    
+    gtk_toggle_button_set_active
+        (GTK_TOGGLE_BUTTON(ctk_object->btn_xconfig_merge), merge);
+    
+    g_signal_handlers_unblock_by_func
+        (G_OBJECT(ctk_object->btn_xconfig_merge),
+         G_CALLBACK(xconfig_merge_toggled), (gpointer) ctk_object);
+    
+    gtk_widget_set_sensitive(ctk_object->btn_xconfig_merge, mergable);
 
 
     /* Update the X config banner */
@@ -6478,7 +6690,7 @@
         goto fail;
     }
     xconfigWriteConfigFile(tmp_filename, config);
-    xconfigFreeConfig(config);
+    xconfigFreeConfig(&config);
 
     lseek(tmp_fd, 0, SEEK_SET);
     fstat(tmp_fd, &st);
@@ -6508,6 +6720,15 @@
                               err_msg);
         g_free(err_msg);
     }
+
+    if (config) {
+        xconfigFreeConfig(&config);
+    }
+
+    if (mergeConfig) {
+        xconfigFreeConfig(&mergeConfig);
+    }
+
     return FALSE;
 
 } /* update_xconfig_save_buffer() */
@@ -6603,9 +6824,8 @@
         if (!modeline) continue;
 
         /* Append to the end of the modeline list */
-        monitor->modelines =
-            (XConfigModeLinePtr)xconfigAddListItem((GenericListPtr)monitor->modelines,
-                                                   (GenericListPtr)modeline);
+        xconfigAddListItem((GenericListPtr *)(&monitor->modelines),
+                           (GenericListPtr)modeline);
     }
 
     return TRUE;
@@ -6737,7 +6957,7 @@
 
     /* Add other options */
 
-    opt = xconfigAddNewOption(opt, "DPMS", NULL);
+    xconfigAddNewOption(&opt, "DPMS", NULL);
     monitor->options = opt;
 
     /* Add modelines used by this display */
@@ -6746,9 +6966,8 @@
 
     /* Append the monitor to the end of the monitor list */
 
-    config->monitors =
-        (XConfigMonitorPtr)xconfigAddListItem((GenericListPtr)config->monitors,
-                                              (GenericListPtr)monitor);
+    xconfigAddListItem((GenericListPtr *)(&config->monitors),
+                       (GenericListPtr)monitor);
 
     display->conf_monitor = monitor;
     return TRUE;
@@ -6759,7 +6978,7 @@
     free(h_source);
     free(v_source);
     if (monitor) {
-        xconfigFreeMonitorList(monitor);
+        xconfigFreeMonitorList(&monitor);
     }
     return FALSE;
 
@@ -6786,7 +7005,7 @@
 
     /* Fill out the device information */
     device->identifier = (char *)malloc(32);
-    snprintf(device->identifier, 32, "Videocard%d", device_id);
+    snprintf(device->identifier, 32, "Device%d", device_id);
 
     device->driver = xconfigStrdup("nvidia");
     device->vendor = xconfigStrdup("NVIDIA Corporation");
@@ -6805,15 +7024,14 @@
     
 
     /* Append to the end of the device list */
-    config->devices =
-        (XConfigDevicePtr)xconfigAddListItem((GenericListPtr)config->devices,
-                                             (GenericListPtr)device);
+    xconfigAddListItem((GenericListPtr *)(&config->devices),
+                       (GenericListPtr)device);
 
     return device;
 
  fail:
     if (device) {
-        xconfigFreeDeviceList(device);
+        xconfigFreeDeviceList(&device);
     }
     return NULL;
 
@@ -6831,12 +7049,11 @@
                                   XConfigScreenPtr conf_screen)
 {
     /* Clear the display list */
-    xconfigFreeDisplayList(conf_screen->displays);
-    conf_screen->displays = NULL;
+    xconfigFreeDisplayList(&conf_screen->displays);
 
 
     /* Add a single display subsection for the default depth */
-    conf_screen->displays = xconfigAddDisplay(NULL, conf_screen->defaultdepth);
+    xconfigAddDisplay(&conf_screen->displays, conf_screen->defaultdepth);
     if (!conf_screen->displays) goto fail;
 
 
@@ -6849,8 +7066,7 @@
     return TRUE;
 
  fail:
-    xconfigFreeDisplayList(conf_screen->displays);
-    conf_screen->displays = NULL;
+    xconfigFreeDisplayList(&conf_screen->displays);
 
     return FALSE;
     
@@ -6924,11 +7140,8 @@
     }
 
     /* Set the TwinView option */
-    conf_screen->options = xconfigAddNewOption(conf_screen->options,
-                                               "TwinView",
-                                               ((screen->num_displays > 1) ?
-                                                "1" : "0" ));
-
+    xconfigAddNewOption(&conf_screen->options, "TwinView",
+                        ((screen->num_displays > 1) ? "1" : "0" ));
 
     /* Set the TwinviewXineramaInfoOrder option */
 
@@ -6936,9 +7149,8 @@
         gchar *primary_str =
            display_get_type_str(screen->primaryDisplay->device_mask, 0);
 
-        conf_screen->options = xconfigAddNewOption(conf_screen->options,
-                                                   "TwinViewXineramaInfoOrder",
-                                                   primary_str);
+        xconfigAddNewOption(&conf_screen->options, "TwinViewXineramaInfoOrder",
+                            primary_str);
         g_free(primary_str);
     }
 
@@ -6955,9 +7167,7 @@
     }
 
     if (metamode_strs) {
-        conf_screen->options =
-            xconfigAddNewOption(conf_screen->options, "metamodes",
-                                metamode_strs);
+        xconfigAddNewOption(&conf_screen->options, "metamodes", metamode_strs);
         free(metamode_strs);
     }
     
@@ -6975,9 +7185,8 @@
 
 
     /* Append to the end of the screen list */
-    config->screens =
-        (XConfigScreenPtr)xconfigAddListItem((GenericListPtr)config->screens,
-                                             (GenericListPtr)conf_screen);
+    xconfigAddListItem((GenericListPtr *)(&config->screens),
+                       (GenericListPtr)conf_screen);
     
     screen->conf_screen = conf_screen;
 
@@ -6990,11 +7199,52 @@
     ret = XCONFIG_GEN_ERROR;
  bail:
     if (conf_screen) {
-        xconfigFreeScreenList(conf_screen);
+        xconfigFreeScreenList(&conf_screen);
     }
     return ret;
 
 } /* add_screen_to_xconfig() */
+
+
+
+/*
+ * get_device_screen_id() - Returns the screen number that should be
+ * used in the device section that maps to the given screen's screen
+ * section.
+ */
+static int get_device_screen_id(nvGpuPtr gpu, nvScreenPtr screen)
+{
+    nvScreenPtr other;
+    int device_screen_id;
+
+    /* Go through the GPU's screens and figure out what the
+     * GPU-relative screen number should be for the given
+     * screen's device section.
+     */
+
+    /* If there is one screen, the device section shouldn't
+     * specify a "Screen #"
+     */
+
+    if (gpu->num_screens < 2) return -1;
+
+
+    /* Count the number of screens that have a screen number
+     * that is lower than the given screen, and that's the
+     * relative position of this screen wrt the GPU.
+     */
+
+    device_screen_id = 0;
+    for (other = gpu->screens; other; other = other->next) {
+        if (other == screen) continue;
+        if (screen->scrnum > other->scrnum) {
+            device_screen_id++;
+        }
+    }
+
+    return device_screen_id;
+
+} /* get_device_screen_id() */
 
 
 
@@ -7008,18 +7258,15 @@
 {
     nvGpuPtr gpu;
     nvScreenPtr screen;
-    int device_id;
+    int device_screen_id;
     int print_bus_ids;
     int ret;
 
 
     /* Clear the screen list */
-    xconfigFreeMonitorList(config->monitors);
-    config->monitors = NULL;
-    xconfigFreeDeviceList(config->devices);
-    config->devices = NULL;
-    xconfigFreeScreenList(config->screens);
-    config->screens = NULL;
+    xconfigFreeMonitorList(&config->monitors);
+    xconfigFreeDeviceList(&config->devices);
+    xconfigFreeScreenList(&config->screens);
 
     /* Don't print the bus ID in the case where we have a single
      * GPU driving a single X screen
@@ -7033,21 +7280,22 @@
 
     /* Generate the Device sections and Screen sections */
 
-    device_id = 0;
-
     for (gpu = layout->gpus; gpu; gpu = gpu->next) {
-        int device_screen_id = -1;
-
+        
         for (screen = gpu->screens; screen; screen = screen->next) {
 
-            /* Only print a screen number if more than 1 screen on gpu */
-            if (gpu->num_screens > 1) {
-                device_screen_id++;
-            }
-
-            /* Each screen needs a unique device section */
+            /* Figure out what screen number to use for the device section. */
+            device_screen_id = get_device_screen_id(gpu, screen);
+
+            /* Each screen needs a unique device section
+             *
+             * Note that the device id used to name the
+             * device section is the same as the screen
+             * number such that the name of the two sections
+             * match.
+             */
             screen->conf_device = add_device_to_xconfig(gpu, config,
-                                                        device_id,
+                                                        screen->scrnum,
                                                         device_screen_id,
                                                         print_bus_ids);
             if (!screen->conf_device) {
@@ -7062,8 +7310,6 @@
                              screen->scrnum);
             }
             if (ret != XCONFIG_GEN_OK) goto bail;
-
-            device_id++;
         }
     }
 
@@ -7075,12 +7321,9 @@
  fail:
     ret = XCONFIG_GEN_ERROR;
  bail:
-    xconfigFreeMonitorList(config->monitors);
-    config->monitors = NULL;
-    xconfigFreeDeviceList(config->devices);
-    config->devices = NULL;
-    xconfigFreeScreenList(config->screens);
-    config->screens = NULL;    
+    xconfigFreeMonitorList(&config->monitors);
+    xconfigFreeDeviceList(&config->devices);
+    xconfigFreeScreenList(&config->screens);
     return ret;
 
 } /* add_screens_to_xconfig() */
@@ -7118,9 +7361,8 @@
     }
 
     /* Append to the end of the screen list */
-    conf_layout->adjacencies =
-        (XConfigAdjacencyPtr)xconfigAddListItem((GenericListPtr)conf_layout->adjacencies,
-                                                (GenericListPtr)adj);
+    xconfigAddListItem((GenericListPtr *)(&conf_layout->adjacencies),
+                       (GenericListPtr)adj);
 
     return TRUE;
 
@@ -7151,8 +7393,7 @@
 
 
     /* Clean up the adjacencies */
-    xconfigFreeAdjacencyList(conf_layout->adjacencies);
-    conf_layout->adjacencies = NULL;
+    xconfigFreeAdjacencyList(&conf_layout->adjacencies);
 
     
     /* Assign the adjacencies (in order) */
@@ -7177,10 +7418,8 @@
         config->flags = (XConfigFlagsPtr) calloc(1, sizeof(XConfigFlagsRec));
         if (!config->flags) goto fail;
     }
-    config->flags->options =
-        xconfigAddNewOption(config->flags->options,
-                            "Xinerama",
-                            (layout->xinerama_enabled ? "1" : "0"));
+    xconfigAddNewOption(&config->flags->options, "Xinerama",
+                        (layout->xinerama_enabled ? "1" : "0"));
 
     layout->conf_layout = conf_layout;
     return TRUE;
@@ -7286,7 +7525,7 @@
     ret = XCONFIG_GEN_ERROR;
  bail:
     if (config) {
-        xconfigFreeConfig(config);
+        xconfigFreeConfig(&config);
     }
     return ret;
 
@@ -7660,11 +7899,15 @@
     gchar *type;
     gchar *str;
 
-
     /* Probe each GPU for display changes */
     for (gpu = ctk_object->layout->gpus; gpu; gpu = gpu->next) {
+
         if (!gpu->handle) continue;
-        
+
+        g_signal_handlers_block_by_func
+            (G_OBJECT(gpu->ctk_event),
+             G_CALLBACK(display_config_attribute_changed),
+             (gpointer) ctk_object);
 
         /* Do the probe */
         ret = NvCtrlGetAttribute(gpu->handle, NV_CTRL_PROBE_DISPLAYS,
@@ -7672,6 +7915,12 @@
         if (ret != NvCtrlSuccess) {
             nv_error_msg("Failed to probe for display devices on GPU-%d '%s'.",
                          NvCtrlGetTargetId(gpu->handle), gpu->name);
+
+            g_signal_handlers_unblock_by_func
+                (G_OBJECT(gpu->ctk_event),
+                 G_CALLBACK(display_config_attribute_changed),
+                 (gpointer) ctk_object);
+
             continue;
         }
 
@@ -7726,8 +7975,7 @@
                     ctk_display_layout_update_display_count
                         (CTK_DISPLAY_LAYOUT(ctk_object->obj_layout), NULL);
 
-                    /* Activate the apply button */
-                    gtk_widget_set_sensitive(ctk_object->btn_apply, True);
+                    user_changed_attributes(ctk_object);
                 }
 
             /* Add new displays as 'disabled' */
@@ -7745,6 +7993,11 @@
                      selected_display);
             }
         }
+
+        g_signal_handlers_unblock_by_func
+            (G_OBJECT(gpu->ctk_event),
+             G_CALLBACK(display_config_attribute_changed),
+             (gpointer) ctk_object);
     }
 
 
@@ -7759,6 +8012,68 @@
 
 
 
+/** reset_layout() *************************************************
+ *
+ * Load current X server settings.
+ *
+ **/
+
+static void reset_layout(CtkDisplayConfig *ctk_object) 
+{
+    gchar *err_str = NULL;
+    nvLayoutPtr layout;
+    /* Load the current layout */
+    layout = layout_load_from_server(ctk_object->handle, &err_str);
+
+
+    /* Handle errors loading the new layout */
+    if (!layout || err_str) {
+        nv_error_msg(err_str);
+        g_free(err_str);
+        return;
+    }
+
+
+    /* Free existing layout */
+    unregister_layout_events(ctk_object);
+    layout_free(ctk_object->layout);
+
+
+    /* Setup the new layout */
+    ctk_object->layout = layout;
+    ctk_display_layout_set_layout((CtkDisplayLayout *)(ctk_object->obj_layout),
+                                  ctk_object->layout);
+
+    register_layout_events(ctk_object);
+
+
+    /* Make sure all X screens have the same depth if Xinerama is enabled */
+    consolidate_xinerama(ctk_object, NULL);
+
+    /* Make sure X screens have some kind of position */
+    assign_screen_positions(ctk_object);
+
+
+    /* Setup the GUI */
+    setup_layout_frame(ctk_object);
+    setup_display_page(ctk_object);
+    setup_screen_page(ctk_object);
+
+    /* Get new position */
+    get_cur_screen_pos(ctk_object);
+
+    /* Clear the apply button */
+    ctk_object->apply_possible = TRUE;
+    gtk_widget_set_sensitive(ctk_object->btn_apply, FALSE);
+
+    ctk_object->forced_reset_allowed = TRUE; /* OK to reset w/o user input */
+    ctk_object->notify_user_of_reset = TRUE; /* Notify user of new changes */
+    ctk_object->reset_required = FALSE; /* No reset required to apply */
+
+} /* reset_layout() */
+
+
+
 /** reset_clicked() **************************************************
  *
  * Called when user clicks on the "Reset" button.
@@ -7768,9 +8083,7 @@
 static void reset_clicked(GtkWidget *widget, gpointer user_data)
 {
     CtkDisplayConfig *ctk_object = CTK_DISPLAY_CONFIG(user_data);
-    nvLayoutPtr layout;
     gint result;
-    gchar *err_str = NULL;
 
 
     /* Show the confirm dialog */
@@ -7794,48 +8107,168 @@
         return;
     }
 
-
-    /* Load the current layout */
-    layout = layout_load_from_server(ctk_object->handle, &err_str);
-
-
-    /* Handle errors loading the new layout */
-    if (!layout || err_str) {
-        nv_error_msg(err_str);
-        g_free(err_str);
-        return;
-    }   
-
-
-    /* Free the existing layout */
-    layout_free(ctk_object->layout);
-
-
-    /* Setup the new layout */
-    ctk_object->layout = layout;
-    ctk_display_layout_set_layout((CtkDisplayLayout *)(ctk_object->obj_layout),
-                                  ctk_object->layout);
-
-    /* Make sure all X screens have the same depth if Xinerama is enabled */
-    consolidate_xinerama(ctk_object, NULL);
-
-    /* Make sure X screens have some kind of position */
-    assign_screen_positions(ctk_object);
-
-
-    /* Setup the GUI */
-    setup_layout_frame(ctk_object);
-    setup_display_page(ctk_object);
-    setup_screen_page(ctk_object);
-
-    /* Get new position */
-    get_cur_screen_pos(ctk_object);
-
-    /* Clear the apply button */
-    ctk_object->apply_possible = TRUE;
-    gtk_widget_set_sensitive(ctk_object->btn_apply, FALSE);
+    reset_layout(ctk_object);
 
 } /* reset_clicked() */
+
+
+
+/** force_layout_reset() ******************************************
+ *
+ * Pop up dialog box to user when the layout needs to be reloaded
+ * due to changes made to the server layout by another client.
+ *
+ **/
+
+static gboolean force_layout_reset(gpointer user_data)
+{
+    gint result;
+    GtkWidget *parent;
+    GtkWidget *dlg;
+    CtkDisplayConfig *ctk_object = (CtkDisplayConfig *) user_data;
+
+    if ((ctk_object->forced_reset_allowed) ) {
+        /* It is OK to force a reset of the layout since no
+         * changes have been made.
+         */
+        reset_layout(ctk_object);
+        goto done;
+    }
+
+    /* It is not OK to force a reset of the layout since the user
+     * may have changed some settings.  The user will need to
+     * reset the layout manually.
+     */
+
+    ctk_object->reset_required = TRUE;
+
+    /* If the X server display configuration page is not currently
+     * selected, we will need to notify the user once they get
+     * back to it.
+     */
+    if (!ctk_object->page_selected) goto done;
+
+    /* Notify the user of the required reset if they haven't
+     * already been notified.
+     */
+    if (!ctk_object->notify_user_of_reset) goto done;
+
+    parent = ctk_get_parent_window(GTK_WIDGET(ctk_object));
+
+    dlg = gtk_message_dialog_new 
+        (GTK_WINDOW(parent),
+         GTK_DIALOG_DESTROY_WITH_PARENT,
+         GTK_MESSAGE_WARNING,
+         GTK_BUTTONS_NONE,
+         "Your current changes to the X server display configuration may no "
+         "longer be applied due to changes made to the running X server.\n\n"
+         "You may either reload the current X server settings and lose any "
+         "configuration setup in this page, or select \"Cancel\" and save "
+         "your changes to the X configuration file (requires restarting X "
+         "to take effect.)\n\n"
+         "If you select \"Cancel\", you will only be allowed to apply "
+         "settings once you have reset the configuration.");
+
+    gtk_dialog_add_buttons(GTK_DIALOG(dlg),
+                           "Reload current X server settings",
+                           GTK_RESPONSE_YES,
+                           "Cancel", GTK_RESPONSE_CANCEL,
+                           NULL);
+
+    result = gtk_dialog_run(GTK_DIALOG(dlg));
+    switch (result) {
+    case GTK_RESPONSE_YES:
+        reset_layout(ctk_object);
+        break;
+    case GTK_RESPONSE_CANCEL:
+        /* Fall through */
+    default:
+        /* User does not want to reset the layout, don't allow them
+         * to apply their changes (but allow them to save their changes)
+         * until they have reloaded the layout manually.
+         */
+        ctk_object->notify_user_of_reset = FALSE;
+        gtk_widget_set_sensitive(ctk_object->btn_apply, False);
+        break;
+    }
+    gtk_widget_destroy(dlg);
+
+done:
+    ctk_object->ignore_reset_events = FALSE;
+    return FALSE;
+
+} /* force_layout_reset() */
+
+
+
+/** display_config_attribute_changed() *******************************
+ *
+ * Callback function for all display config page related events
+ * change.
+ *
+ * Display configuration changes usually involve multiple related
+ * events in succession.  To avoid reloading the layout for every
+ * event, we register the force_layout_reset() function (once per
+ * block of events) to be called when the app becomes idle (which
+ * will happen once there are no more pending events) using
+ * g_idle_add().  Once force_layout_reset() is called, it will
+ * unresgister itself by returning FALSE.
+ *
+ **/
+
+static void display_config_attribute_changed(GtkObject *object, gpointer arg1,
+                                             gpointer user_data)
+{
+    CtkDisplayConfig *ctk_object = (CtkDisplayConfig *) user_data;
+
+    if (ctk_object->ignore_reset_events) return;
+
+    ctk_object->ignore_reset_events = TRUE;
+
+    /* queue force_layout_reset() to be called once all other pending
+     * events are consumed.
+     */
+    g_idle_add(force_layout_reset, (gpointer)ctk_object);
+
+} /* display_config_attribute_changed() */
+
+
+
+/** ctk_display_config_unselected() **********************************
+ *
+ * Called when display config page is unselected.
+ *
+ **/
+
+void  ctk_display_config_unselected(GtkWidget *widget) {
+    CtkDisplayConfig *ctk_object = CTK_DISPLAY_CONFIG(widget);
+
+    ctk_object->page_selected = FALSE;
+
+} /* ctk_display_config_unselected() */
+
+
+
+/** ctk_display_config_selected() ***********************************
+ *
+ * Called when display config page is selected.
+ *
+ **/
+
+void ctk_display_config_selected(GtkWidget *widget) {
+    CtkDisplayConfig *ctk_object=CTK_DISPLAY_CONFIG(widget);
+
+    ctk_object->page_selected = TRUE;
+
+    /* Handle case where a layout reset is required but we could
+     * not notify the user since the X server display configuration
+     * page was not selected
+     */
+    if (ctk_object->reset_required) {
+        force_layout_reset(ctk_object);
+    }
+
+} /* ctk_display_config_selected() */
 
 
 

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplayconfig.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkdisplayconfig.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplayconfig.h (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplayconfig.h Sun Jan 11 05:41:46 2009
@@ -60,6 +60,7 @@
     NvCtrlAttributeHandle *handle;
     CtkConfig *ctk_config;
 
+    gboolean page_selected; /* Is the display config page selected in the UI */
 
     /* Layout */
     nvLayoutPtr layout;
@@ -173,6 +174,12 @@
     /* Buttons */
     GtkWidget *btn_apply;
     gboolean apply_possible; /* True if all modifications are applicable */
+
+    gboolean reset_required; /* Reser required to apply */
+    gboolean forced_reset_allowed; /* OK to reset layout w/o user input */
+    gboolean notify_user_of_reset; /* User was notified of reset requirement */
+    gboolean ignore_reset_events; /* Ignore reset-causing events */
+
     int cur_screen_pos[2]; /* Keep track of the selected X screen's position */
 
     GtkWidget *btn_save;
@@ -182,6 +189,8 @@
     gboolean   advanced_mode;  /* True if we are in advanced mode */
 
     GtkWidget *btn_reset;
+    
+    int last_resolution_idx;
 
 } CtkDisplayConfig;
 
@@ -198,6 +207,10 @@
 GtkTextBuffer *ctk_display_config_create_help(GtkTextTagTable *,
                                               CtkDisplayConfig *);
 
+void ctk_display_config_selected(GtkWidget *);
+void ctk_display_config_unselected(GtkWidget *);
+
+
 G_END_DECLS
 
 #endif /* __CTK_DISPLAYCONFIG_H__ */

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplaydevice-crt.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkdisplaydevice-crt.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplaydevice-crt.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplaydevice-crt.c Sun Jan 11 05:41:46 2009
@@ -25,7 +25,7 @@
 #include <gtk/gtk.h>
 #include <NvCtrlAttributes.h>
 
-#include "ctkimage.h"
+#include "ctkbanner.h"
 
 #include "ctkdisplaydevice-crt.h"
 
@@ -92,6 +92,13 @@
 {
     CtkDisplayDeviceCrt *ctk_display_device_crt = CTK_DISPLAY_DEVICE_CRT(object);
     g_free(ctk_display_device_crt->name);
+    g_signal_handlers_disconnect_matched(ctk_display_device_crt->ctk_event,
+                                         G_SIGNAL_MATCH_DATA,
+                                         0,
+                                         0,
+                                         NULL,
+                                         NULL,
+                                         (gpointer) ctk_display_device_crt);
 }
 
 /*
@@ -115,6 +122,7 @@
     GtkWidget *alignment;
 
     object = g_object_new(CTK_TYPE_DISPLAY_DEVICE_CRT, NULL);
+    if (!object) return NULL;
 
     ctk_display_device_crt = CTK_DISPLAY_DEVICE_CRT(object);
     ctk_display_device_crt->handle = handle;

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplaydevice-dfp.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkdisplaydevice-dfp.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplaydevice-dfp.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplaydevice-dfp.c Sun Jan 11 05:41:46 2009
@@ -25,7 +25,7 @@
 #include <gtk/gtk.h>
 #include <NvCtrlAttributes.h>
 
-#include "ctkimage.h"
+#include "ctkbanner.h"
 
 #include "ctkdisplaydevice-dfp.h"
 
@@ -169,6 +169,13 @@
 {
     CtkDisplayDeviceDfp *ctk_display_device_dfp = CTK_DISPLAY_DEVICE_DFP(object);
     g_free(ctk_display_device_dfp->name);
+    g_signal_handlers_disconnect_matched(ctk_display_device_dfp->ctk_event,
+                                         G_SIGNAL_MATCH_DATA,
+                                         0,
+                                         0,
+                                         NULL,
+                                         NULL,
+                                         (gpointer) ctk_display_device_dfp);
 }
 
 
@@ -199,9 +206,11 @@
     GtkWidget *table;
 
     object = g_object_new(CTK_TYPE_DISPLAY_DEVICE_DFP, NULL);
+    if (!object) return NULL;
 
     ctk_display_device_dfp = CTK_DISPLAY_DEVICE_DFP(object);
     ctk_display_device_dfp->handle = handle;
+    ctk_display_device_dfp->ctk_event = ctk_event;
     ctk_display_device_dfp->ctk_config = ctk_config;
     ctk_display_device_dfp->display_device_mask = display_device_mask;
     ctk_display_device_dfp->name = g_strdup(name);
@@ -279,7 +288,7 @@
                 NULL
             },
             {
-                gtk_label_new("DVI connection link:"),
+                gtk_label_new("Connection link:"),
                 ctk_display_device_dfp->txt_link,
                 NULL
             },
@@ -828,7 +837,7 @@
     
     ctk_help_term(b, &i, "Signal");
     ctk_help_para(b, &i, "Report whether the flat panel is driven by "
-                  "an LVDS or TMDS signal");
+                  "an LVDS, TMDS, or DisplayPort signal");
 
     ctk_help_term(b, &i, "Native Resolution");
     ctk_help_para(b, &i, __native_res_help);
@@ -891,9 +900,10 @@
 static void dfp_info_setup(CtkDisplayDeviceDfp *ctk_display_device_dfp)
 {
     ReturnStatus ret;
-    gint val, gpu_scaling, dfp_scaling;
+    gint val, signal_type, gpu_scaling, dfp_scaling;
     char *chip_location, *link, *signal;
     char *scaling;
+    char tmp[32];
 
     chip_location = link = signal = "Unknown";
     scaling = "Unknown";
@@ -905,13 +915,40 @@
                                   ctk_display_device_dfp->display_device_mask,
                                   NV_CTRL_FLATPANEL_CHIP_LOCATION, &val);
     if (ret == NvCtrlSuccess) {
-        if (val == NV_CTRL_FLATPANEL_CHIP_LOCATION_INTERNAL)
+        switch (val) {
+        case NV_CTRL_FLATPANEL_CHIP_LOCATION_INTERNAL:
             chip_location = "Internal";
-        if (val == NV_CTRL_FLATPANEL_CHIP_LOCATION_EXTERNAL)
+            break;
+        case NV_CTRL_FLATPANEL_CHIP_LOCATION_EXTERNAL:
             chip_location = "External";
+            break;
+        }
     }
     gtk_label_set_text
         (GTK_LABEL(ctk_display_device_dfp->txt_chip_location), chip_location);
+
+    /* Signal */
+
+    ret =
+        NvCtrlGetDisplayAttribute(ctk_display_device_dfp->handle,
+                                  ctk_display_device_dfp->display_device_mask,
+                                  NV_CTRL_FLATPANEL_SIGNAL, &val);
+    if (ret == NvCtrlSuccess) {
+        switch (val) {
+        case NV_CTRL_FLATPANEL_SIGNAL_LVDS:
+            signal = "LVDS";
+            break;
+        case NV_CTRL_FLATPANEL_SIGNAL_TMDS:
+            signal = "TMDS";
+            break;
+        case NV_CTRL_FLATPANEL_SIGNAL_DISPLAYPORT:
+            signal = "DisplayPort";
+            break;
+        }
+    }
+    gtk_label_set_text
+        (GTK_LABEL(ctk_display_device_dfp->txt_signal), signal);
+    signal_type = val;
 
     /* Link */
 
@@ -920,24 +957,50 @@
                                   ctk_display_device_dfp->display_device_mask,
                                   NV_CTRL_FLATPANEL_LINK, &val);
     if (ret == NvCtrlSuccess) {
-        if (val == NV_CTRL_FLATPANEL_LINK_SINGLE) link = "Single";
-        if (val == NV_CTRL_FLATPANEL_LINK_DUAL) link = "Dual";
+        if (signal_type == NV_CTRL_FLATPANEL_SIGNAL_DISPLAYPORT) {
+            int lanes;
+
+            lanes = val + 1;
+
+            ret =
+                NvCtrlGetDisplayAttribute(ctk_display_device_dfp->handle,
+                                          ctk_display_device_dfp->display_device_mask,
+                                          NV_CTRL_DISPLAYPORT_LINK_RATE, &val);
+            if (ret == NvCtrlSuccess && val == NV_CTRL_DISPLAYPORT_LINK_RATE_DISABLED) {
+                link = "Disabled";
+            } else {
+                char *bw = "unknown bandwidth";
+
+                if (ret == NvCtrlSuccess) {
+                    switch (val) {
+                    case NV_CTRL_DISPLAYPORT_LINK_RATE_1_62GBPS:
+                        bw = "1.62 Gbps";
+                        break;
+                    case NV_CTRL_DISPLAYPORT_LINK_RATE_2_70GBPS:
+                        bw = "2.70 Gbps";
+                        break;
+                    }
+                }
+
+                snprintf(tmp, 32, "%d lane%s @ %s", lanes, lanes == 1 ? "" : "s",
+                         bw);
+                link = tmp;
+            }
+        } else {
+            // LVDS or TMDS
+            switch(val) {
+            case NV_CTRL_FLATPANEL_LINK_SINGLE:
+                link = "Single";
+                break;
+            case NV_CTRL_FLATPANEL_LINK_DUAL:
+                link = "Dual";
+                break;
+            }
+        }
     }
     gtk_label_set_text
         (GTK_LABEL(ctk_display_device_dfp->txt_link), link);
 
-    /* Signal */
-
-    ret =
-        NvCtrlGetDisplayAttribute(ctk_display_device_dfp->handle,
-                                  ctk_display_device_dfp->display_device_mask,
-                                  NV_CTRL_FLATPANEL_SIGNAL, &val);
-    if (ret == NvCtrlSuccess) {
-        if (val == NV_CTRL_FLATPANEL_SIGNAL_LVDS) signal = "LVDS";
-        if (val == NV_CTRL_FLATPANEL_SIGNAL_TMDS) signal = "TMDS";
-    }
-    gtk_label_set_text
-        (GTK_LABEL(ctk_display_device_dfp->txt_signal), signal);
 
     /* Native Resolution */
 

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplaydevice-tv.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkdisplaydevice-tv.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplaydevice-tv.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplaydevice-tv.c Sun Jan 11 05:41:46 2009
@@ -29,7 +29,7 @@
 #include <gtk/gtk.h>
 #include <NvCtrlAttributes.h>
 
-#include "ctkimage.h"
+#include "ctkbanner.h"
 
 #include "ctkdisplaydevice-tv.h"
 
@@ -131,6 +131,13 @@
 {
     CtkDisplayDeviceTv *ctk_display_device_tv = CTK_DISPLAY_DEVICE_TV(object);
     g_free(ctk_display_device_tv->name);
+    g_signal_handlers_disconnect_matched(ctk_display_device_tv->ctk_event,
+                                         G_SIGNAL_MATCH_DATA,
+                                         0,
+                                         0,
+                                         NULL,
+                                         NULL,
+                                         (gpointer) ctk_display_device_tv);
 }
 
 
@@ -156,6 +163,7 @@
 
     
     object = g_object_new(CTK_TYPE_DISPLAY_DEVICE_TV, NULL);
+    if (!object) return NULL;
     
     ctk_display_device_tv = CTK_DISPLAY_DEVICE_TV(object);
     ctk_display_device_tv->handle = handle;

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplaylayout.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkdisplaylayout.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplaylayout.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplaylayout.c Sun Jan 11 05:41:46 2009
@@ -2107,10 +2107,11 @@
         /* Display has mode/modeline */
         } else {
             float ref = display->cur_mode->modeline->refresh_rate;
-            tip = g_strdup_printf("%s : %dx%d @ %.0f Hz",
+            tip = g_strdup_printf("%s : %dx%d @ %.*f Hz",
                                   display->name,
                                   display->cur_mode->modeline->data.hdisplay,
                                   display->cur_mode->modeline->data.vdisplay,
+                                  (display->is_sdi ? 3 : 0),
                                   ref);
         }
         
@@ -2136,11 +2137,12 @@
             /* Display has mode/modeline */
         } else {
             float ref = display->cur_mode->modeline->refresh_rate;
-            tip = g_strdup_printf("%s : %dx%d @ %.0f Hz (Screen: %d) "
+            tip = g_strdup_printf("%s : %dx%d @ %.*f Hz (Screen: %d) "
                                   "(GPU: %s)",
                                   display->name,
                                   display->cur_mode->modeline->data.hdisplay,
                                   display->cur_mode->modeline->data.vdisplay,
+                                  (display->is_sdi ? 3 : 0),
                                   ref,
                                   display->screen->scrnum,
                                   display->gpu->name);
@@ -2372,7 +2374,8 @@
     pango_font_description_set_family(font_description, "Sans");
     pango_font_description_set_weight(font_description, PANGO_WEIGHT_BOLD);
 
-    pango_layout_set_font_description(ctk_object->pango_layout, font_description);
+    pango_layout_set_font_description(ctk_object->pango_layout,
+                                      font_description);
 
 
     /* Setup colors */
@@ -2404,23 +2407,28 @@
                           GDK_POINTER_MOTION_MASK);
 
     g_signal_connect (G_OBJECT (tmp), "expose_event",  
-                      G_CALLBACK (expose_event_callback), (gpointer)(ctk_object));
+                      G_CALLBACK (expose_event_callback),
+                      (gpointer)(ctk_object));
 
     g_signal_connect (G_OBJECT (tmp), "configure_event",  
-                      G_CALLBACK (configure_event_callback), (gpointer)(ctk_object));
+                      G_CALLBACK (configure_event_callback),
+                      (gpointer)(ctk_object));
 
     g_signal_connect (G_OBJECT (tmp), "motion_notify_event",  
-                      G_CALLBACK (motion_event_callback), (gpointer)(ctk_object));
+                      G_CALLBACK (motion_event_callback),
+                      (gpointer)(ctk_object));
 
     g_signal_connect (G_OBJECT (tmp), "button_press_event",  
-                      G_CALLBACK (button_press_event_callback), (gpointer)(ctk_object));
+                      G_CALLBACK (button_press_event_callback),
+                      (gpointer)(ctk_object));
 
     g_signal_connect (G_OBJECT (tmp), "button_release_event",  
-                      G_CALLBACK (button_release_event_callback), (gpointer)(ctk_object));
+                      G_CALLBACK (button_release_event_callback),
+                      (gpointer)(ctk_object));
 
     GTK_WIDGET_SET_FLAGS(tmp, GTK_DOUBLE_BUFFERED);
 
-    ctk_object->drawing_area  = tmp;
+    ctk_object->drawing_area = tmp;
     gtk_widget_set_size_request(tmp, width, height);
 
 
@@ -2445,6 +2453,26 @@
 
 
 
+/** get_widget_fg_gc() ***********************************************
+ *
+ * Returns the foreground graphics context of the given widget.  If
+ * this function returns NULL, then drawing on this widget is not
+ * currently possible and should be avoided.
+ *
+ **/
+
+static GdkGC *get_widget_fg_gc(GtkWidget *widget)
+{
+    GtkStyle *style = gtk_widget_get_style(widget);
+
+    if (!style) return NULL;
+
+    return style->fg_gc[GTK_WIDGET_STATE(widget)];
+
+} /* get_widget_fg_gc() */
+
+
+
 /** do_swap() ********************************************************
  *
  * Preforms a swap from the back buffer if one is needed.
@@ -2453,10 +2481,13 @@
 
 static void do_swap(CtkDisplayLayout *ctk_object)
 {
-    if (ctk_object->need_swap) {
-
-        gdk_draw_pixmap(ctk_object->drawing_area->window,
-                        ctk_object->drawing_area->style->fg_gc[GTK_WIDGET_STATE(ctk_object->drawing_area)],
+    GtkWidget *drawing_area = ctk_object->drawing_area;
+    GdkGC *fg_gc = get_widget_fg_gc(drawing_area);
+
+    if (ctk_object->need_swap && drawing_area->window && fg_gc) {
+
+        gdk_draw_pixmap(drawing_area->window,
+                        fg_gc,
                         ctk_object->pixmap,
                         0,0,
                         0,0,
@@ -2482,16 +2513,18 @@
                       GdkColor *color,
                       int fill)
 {
+    GtkWidget *drawing_area = ctk_object->drawing_area;
+    GdkGC *fg_gc = get_widget_fg_gc(drawing_area);
+
     int w = (int)(ctk_object->scale * (dim[X] + dim[W])) - (int)(ctk_object->scale * (dim[X]));
     int h = (int)(ctk_object->scale * (dim[Y] + dim[H])) - (int)(ctk_object->scale * (dim[Y]));
 
     /* Setup color to use */
-    gdk_gc_set_rgb_fg_color(ctk_object->drawing_area->style->fg_gc[GTK_WIDGET_STATE (ctk_object->drawing_area)],
-                            color);
+    gdk_gc_set_rgb_fg_color(fg_gc, color);
 
     /* Draw the rectangle */
     gdk_draw_rectangle(ctk_object->pixmap,
-                       ctk_object->drawing_area->style->fg_gc[GTK_WIDGET_STATE (ctk_object->drawing_area)],
+                       fg_gc,
                        fill,
                        ctk_object->img_dim[X] + ctk_object->scale * dim[X],
                        ctk_object->img_dim[Y] + ctk_object->scale * dim[Y],
@@ -2517,8 +2550,8 @@
                            const char *str_1,
                            const char *str_2)
 {
-    GdkGC *gdk_gc;
-    GtkWidget *drawing_area;
+    GtkWidget *drawing_area = ctk_object->drawing_area;
+    GdkGC *fg_gc = get_widget_fg_gc(drawing_area);
     char *str;
 
     int txt_w;
@@ -2528,9 +2561,6 @@
 
     int draw_1 = 0;
     int draw_2 = 0;
-
-    drawing_area = ctk_object->drawing_area;
-    gdk_gc = drawing_area->style->fg_gc[GTK_WIDGET_STATE(drawing_area)];
 
     if (str_1) {
         pango_layout_set_text(ctk_object->pango_layout, str_1, -1);
@@ -2572,9 +2602,10 @@
         txt_y1 = ctk_object->scale*(dim[Y] + dim[H] / 2) - (txt_h / 2);
 
         /* Write name */
-        gdk_gc_set_rgb_fg_color(gdk_gc, color);
-
-        gdk_draw_layout(ctk_object->pixmap, gdk_gc,
+        gdk_gc_set_rgb_fg_color(fg_gc, color);
+
+        gdk_draw_layout(ctk_object->pixmap,
+                        fg_gc,
                         ctk_object->img_dim[X] + txt_x1,
                         ctk_object->img_dim[Y] + txt_y1,
                         ctk_object->pango_layout);
@@ -2590,9 +2621,10 @@
         txt_y2 = ctk_object->scale*(dim[Y] + dim[H] / 2) - (txt_h / 2);
 
         /* Write dimensions */
-        gdk_gc_set_rgb_fg_color(gdk_gc, color);
-
-        gdk_draw_layout(ctk_object->pixmap, gdk_gc,
+        gdk_gc_set_rgb_fg_color(fg_gc, color);
+
+        gdk_draw_layout(ctk_object->pixmap,
+                        fg_gc,
                         ctk_object->img_dim[X] + txt_x2,
                         ctk_object->img_dim[Y] + txt_y2,
                         ctk_object->pango_layout);
@@ -2610,9 +2642,10 @@
         txt_y = ctk_object->scale*(dim[Y] + dim[H] / 2) - (txt_h / 2);
 
         /* Write both */
-        gdk_gc_set_rgb_fg_color(gdk_gc, color);
-
-        gdk_draw_layout(ctk_object->pixmap, gdk_gc,
+        gdk_gc_set_rgb_fg_color(fg_gc, color);
+
+        gdk_draw_layout(ctk_object->pixmap,
+                        fg_gc,
                         ctk_object->img_dim[X] + txt_x,
                         ctk_object->img_dim[Y] + txt_y,
                         ctk_object->pango_layout);
@@ -2634,27 +2667,29 @@
                          nvDisplayPtr display)
 {
     nvModePtr mode;
-    int color;
+    int base_color_idx;
+    int color_idx;
     char *tmp_str;
 
     if (!display || !(display->cur_mode)) {
         return;
     }
 
-    mode  = display->cur_mode;
-    color = NUM_COLORS_PER_PALETTE * NvCtrlGetTargetId(display->gpu->handle);
+    mode = display->cur_mode;
+    base_color_idx =
+        NUM_COLORS_PER_PALETTE * NvCtrlGetTargetId(display->gpu->handle);
 
 
     /* Draw panning */
-    draw_rect(ctk_object, mode->pan,
-              &(ctk_object->color_palettes[color +((mode->modeline)?BG_PAN_ON:BG_PAN_OFF)]),
+    color_idx = base_color_idx + ((mode->modeline) ? BG_PAN_ON : BG_PAN_OFF);
+    draw_rect(ctk_object, mode->pan, &(ctk_object->color_palettes[color_idx]),
               1);
     draw_rect(ctk_object, mode->pan, &(ctk_object->fg_color), 0);
     
 
     /* Draw viewport */
-    draw_rect(ctk_object, mode->dim,
-              &(ctk_object->color_palettes[color +((mode->modeline)?BG_SCR_ON:BG_SCR_OFF)]),
+    color_idx = base_color_idx + ((mode->modeline) ? BG_SCR_ON : BG_SCR_OFF);
+    draw_rect(ctk_object, mode->dim, &(ctk_object->color_palettes[color_idx]),
               1);
     draw_rect(ctk_object, mode->dim, &(ctk_object->fg_color), 0);
 
@@ -2686,21 +2721,22 @@
 
 static void draw_layout(CtkDisplayLayout *ctk_object)
 {
-    int z;
+    GtkWidget *drawing_area = ctk_object->drawing_area;
+    GdkGC *fg_gc = get_widget_fg_gc(drawing_area);
+    
     GdkColor bg_color; /* Background color */
     GdkColor bd_color; /* Border color */
     nvGpuPtr gpu;
     nvScreenPtr screen;
+    int z;
 
 
     /* Draw the metamode's effective size */
     gdk_color_parse("#888888", &bg_color);
     gdk_color_parse("#777777", &bd_color);
 
-    gdk_gc_set_line_attributes
-        (ctk_object->drawing_area->style->fg_gc[GTK_WIDGET_STATE(ctk_object->drawing_area)],
-         1, GDK_LINE_ON_OFF_DASH, GDK_CAP_NOT_LAST,
-         GDK_JOIN_ROUND);
+    gdk_gc_set_line_attributes(fg_gc, 1, GDK_LINE_ON_OFF_DASH,
+                               GDK_CAP_NOT_LAST, GDK_JOIN_ROUND);
 
     for (gpu = ctk_object->layout->gpus; gpu; gpu = gpu->next) {
         for (screen = gpu->screens; screen; screen = screen->next) {
@@ -2710,10 +2746,8 @@
          }
     }
 
-    gdk_gc_set_line_attributes
-        (ctk_object->drawing_area->style->fg_gc[GTK_WIDGET_STATE(ctk_object->drawing_area)],
-         1, GDK_LINE_SOLID, GDK_CAP_NOT_LAST,
-         GDK_JOIN_ROUND);
+    gdk_gc_set_line_attributes(fg_gc, 1, GDK_LINE_SOLID, GDK_CAP_NOT_LAST,
+                               GDK_JOIN_ROUND);
 
 
     /* Draw display devices from back to front */
@@ -2725,7 +2759,6 @@
 
     /* Hilite the selected display device */
     if (ctk_object->Zselected && ctk_object->Zcount) {
-        GtkWidget *widget = ctk_object->drawing_area;
         int w, h;
         int size; /* Hilite line size */
         int offset; /* Hilite box offset */
@@ -2738,8 +2771,7 @@
         h  = (int)(ctk_object->scale * (dim[Y] + dim[H])) - (int)(ctk_object->scale * (dim[Y]));
 
         /* Setup color to use */
-        gdk_gc_set_rgb_fg_color(widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
-                                &(ctk_object->select_color));
+        gdk_gc_set_rgb_fg_color(fg_gc, &(ctk_object->select_color));
 
         /* If dislay is too small, just color the whole thing */
         size = 3;
@@ -2750,19 +2782,19 @@
             draw_rect(ctk_object, dim, &(ctk_object->fg_color), 0);
 
         } else {
-            gdk_gc_set_line_attributes(widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
-                                       size, GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
+            gdk_gc_set_line_attributes(fg_gc, size, GDK_LINE_SOLID,
+                                       GDK_CAP_ROUND, GDK_JOIN_ROUND);
 
             gdk_draw_rectangle(ctk_object->pixmap,
-                               widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
+                               fg_gc,
                                0,
                                ctk_object->img_dim[X] +(ctk_object->scale * dim[X]) +offset,
                                ctk_object->img_dim[Y] +(ctk_object->scale * dim[Y]) +offset,
                                w -(2 * offset),
                                h -(2 * offset));
             
-            gdk_gc_set_line_attributes(widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
-                                       1, GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
+            gdk_gc_set_line_attributes(fg_gc, 1, GDK_LINE_SOLID, GDK_CAP_ROUND,
+                                       GDK_JOIN_ROUND);
         }
 
 
@@ -2811,46 +2843,44 @@
 
 static void clear_layout(CtkDisplayLayout *ctk_object)
 {
-    GtkWidget *widget = ctk_object->drawing_area;
+    GtkWidget *drawing_area = ctk_object->drawing_area;
+    GdkGC *fg_gc = get_widget_fg_gc(drawing_area);
     GdkColor color;
 
 
-    
     /* Clear to background color */
-    gdk_gc_set_rgb_fg_color(widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
-                            &(ctk_object->bg_color));
+    gdk_gc_set_rgb_fg_color(fg_gc, &(ctk_object->bg_color));
+
     gdk_draw_rectangle(ctk_object->pixmap,
-                       widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
+                       fg_gc,
                        TRUE,
                        2,
                        2,
-                       widget->allocation.width  -4,
-                       widget->allocation.height -4);
+                       drawing_area->allocation.width  -4,
+                       drawing_area->allocation.height -4);
 
 
     /* Add white trim */
     gdk_color_parse("white", &color);
-    gdk_gc_set_rgb_fg_color(widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
-                            &color);
+    gdk_gc_set_rgb_fg_color(fg_gc, &color);
     gdk_draw_rectangle(ctk_object->pixmap,
-                       widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
+                       fg_gc,
                        FALSE,
                        1,
                        1,
-                       widget->allocation.width  -3,
-                       widget->allocation.height -3);
+                       drawing_area->allocation.width  -3,
+                       drawing_area->allocation.height -3);
 
 
     /* Add layout border */
-    gdk_gc_set_rgb_fg_color(widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
-                            &(ctk_object->fg_color));
+    gdk_gc_set_rgb_fg_color(fg_gc, &(ctk_object->fg_color));
     gdk_draw_rectangle(ctk_object->pixmap,
-                       widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
+                       fg_gc,
                        FALSE,
                        0,
                        0,
-                       widget->allocation.width  -1,
-                       widget->allocation.height -1);
+                       drawing_area->allocation.width  -1,
+                       drawing_area->allocation.height -1);
 
     ctk_object->need_swap = 1;
 
@@ -2866,21 +2896,20 @@
 
 static void draw_all(CtkDisplayLayout *ctk_object)
 {
-    GdkGCValues  old_gc_values;
-    GtkWidget   *widget = ctk_object->drawing_area;
-    
+    GtkWidget *drawing_area = ctk_object->drawing_area;
+    GdkGC *fg_gc = get_widget_fg_gc(drawing_area);
+    GdkGCValues old_gc_values;
+
+    if (!fg_gc) return;
 
     /* Redraw everything */
-    gdk_gc_get_values(widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
-                      &old_gc_values);
+    gdk_gc_get_values(fg_gc, &old_gc_values);
 
     clear_layout(ctk_object);
 
     draw_layout(ctk_object);
 
-    gdk_gc_set_values(widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
-                      &old_gc_values,
-                      GDK_GC_FOREGROUND);
+    gdk_gc_set_values(fg_gc, &old_gc_values, GDK_GC_FOREGROUND);
 
 } /* draw_all() */
 
@@ -3290,6 +3319,8 @@
                                              nvDisplayPtr relative_to,
                                              int x, int y)
 {
+    GtkWidget *drawing_area = ctk_object->drawing_area;
+    GdkGC *fg_gc = get_widget_fg_gc(drawing_area);
     GdkGCValues old_gc_values;
     int modified = 0;
     nvLayoutPtr layout = ctk_object->layout;
@@ -3301,11 +3332,11 @@
 
 
     /* Backup the foreground color and clear the layout */
-    gdk_gc_get_values
-        (ctk_object->drawing_area->style->fg_gc[GTK_WIDGET_STATE(ctk_object->drawing_area)],
-         &old_gc_values);
-
-    clear_layout(ctk_object);
+    if (fg_gc) {
+        gdk_gc_get_values(fg_gc, &old_gc_values);
+        
+        clear_layout(ctk_object);
+    }
 
 
     /* XXX When configuring a relative position, make sure
@@ -3381,13 +3412,13 @@
 
     
     /* Redraw the layout and reset the foreground color */
-    draw_layout(ctk_object);
-
-    gdk_gc_set_values
-        (ctk_object->drawing_area->style->fg_gc[GTK_WIDGET_STATE(ctk_object->drawing_area)],
-         &old_gc_values, GDK_GC_FOREGROUND);
-
-    do_swap(ctk_object);
+    if (fg_gc) {
+        draw_layout(ctk_object);
+
+        gdk_gc_set_values(fg_gc, &old_gc_values, GDK_GC_FOREGROUND);
+        
+        do_swap(ctk_object);
+    }
 
 } /* ctk_display_layout_set_display_position() */
 
@@ -3403,6 +3434,8 @@
                                             nvDisplayPtr display,
                                             int width, int height)
 {
+    GtkWidget *drawing_area = ctk_object->drawing_area;
+    GdkGC *fg_gc = get_widget_fg_gc(drawing_area);
     GdkGCValues old_gc_values;
     int modified = 0;
 
@@ -3411,10 +3444,11 @@
 
 
     /* Backup the foreground color */
-    gdk_gc_get_values(ctk_object->drawing_area->style->fg_gc[GTK_WIDGET_STATE(ctk_object->drawing_area)],
-                      &old_gc_values);
-
-    clear_layout(ctk_object);
+    if (fg_gc) {
+        gdk_gc_get_values(fg_gc, &old_gc_values);
+
+        clear_layout(ctk_object);
+    }
 
 
     /* Change the panning */
@@ -3434,24 +3468,26 @@
                                       ctk_object->modified_callback_data);
     }
     
-    draw_layout(ctk_object);
-
-
-    /* Reset the foreground color */
-    gdk_gc_set_values(ctk_object->drawing_area->style->fg_gc[GTK_WIDGET_STATE(ctk_object->drawing_area)],
-                      &old_gc_values,
-                      GDK_GC_FOREGROUND);
-
-    do_swap(ctk_object);
-
+
+    /* Redraw layout and reset the foreground color */
+    if (fg_gc) {
+        draw_layout(ctk_object);
+
+        gdk_gc_set_values(fg_gc, &old_gc_values, GDK_GC_FOREGROUND);
+
+        do_swap(ctk_object);
+    }
 
 } /* ctk_display_layout_set_display_panning() */
 
+
+
 /** ctk_display_layout_select_display() ***********************
  *
  * Updates the currently selected display.
  *
  **/
+
 void ctk_display_layout_select_display(CtkDisplayLayout *ctk_object,
                                        nvDisplayPtr display)
 {
@@ -3462,7 +3498,10 @@
         /* Select the new topmost display */
         select_display(ctk_object, ctk_object->Zorder[0]);
     }
+
 } /* ctk_display_layout_select_display() */
+
+
 
 /** ctk_display_layout_update_display_count() ************************
  *
@@ -3479,6 +3518,7 @@
 
     /* Select the previously selected display */
     ctk_display_layout_select_display(ctk_object, display);
+
 } /* ctk_display_layout_update_display_count() */
 
 
@@ -3514,27 +3554,22 @@
                                             nvScreenPtr relative_to,
                                             int x, int y)
 {
+    GtkWidget *drawing_area = ctk_object->drawing_area;
+    GdkGC *fg_gc = get_widget_fg_gc(drawing_area);
     GdkGCValues old_gc_values;
     int modified = 0;
     nvLayoutPtr layout = ctk_object->layout;
     nvGpuPtr gpu;
-    int draw;
+
 
     if (!screen) return;
 
     if (position_type != CONF_ADJ_ABSOLUTE && !relative_to) return;
 
 
-    /* If there is no GC for the drawing area, don't draw */
-    draw = ctk_object->drawing_area->style->fg_gc[GTK_WIDGET_STATE(ctk_object->drawing_area)] ?
-        1 : 0;
-
-
     /* Backup the foreground color and clear the layout */
-    if (draw) {
-        gdk_gc_get_values
-            (ctk_object->drawing_area->style->fg_gc[GTK_WIDGET_STATE(ctk_object->drawing_area)],
-             &old_gc_values);
+    if (fg_gc) {
+        gdk_gc_get_values(fg_gc, &old_gc_values);
         clear_layout(ctk_object);
     }
 
@@ -3634,12 +3669,10 @@
 
 
     /* Redraw the layout and reset the foreground color */
-    if (draw) {
+    if (fg_gc) {
         draw_layout(ctk_object);
         
-        gdk_gc_set_values
-            (ctk_object->drawing_area->style->fg_gc[GTK_WIDGET_STATE(ctk_object->drawing_area)],
-             &old_gc_values, GDK_GC_FOREGROUND);
+        gdk_gc_set_values(fg_gc, &old_gc_values, GDK_GC_FOREGROUND);
         
         do_swap(ctk_object);
     }
@@ -3742,14 +3775,16 @@
 motion_event_callback(GtkWidget *widget, GdkEventMotion *event, gpointer data)
 {
     CtkDisplayLayout *ctk_object = CTK_DISPLAY_LAYOUT(data);
-    GdkGCValues       old_gc_values;
+    GtkWidget *drawing_area = ctk_object->drawing_area;
+    GdkGC *fg_gc = get_widget_fg_gc(drawing_area);
+    GdkGCValues old_gc_values;
 
     static int init = 1;
     static int __modify_panning;
 
     if (init) {
         init = 0;
-        __modify_panning = (event->state & ShiftMask)?1:0;
+        __modify_panning = (event->state & ShiftMask) ? 1 : 0;
     }
 
 
@@ -3767,8 +3802,7 @@
 
 
     /* Backup the foreground color */
-    gdk_gc_get_values(widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
-                      &old_gc_values);
+    gdk_gc_get_values(fg_gc, &old_gc_values);
 
 
     /* Modify screen layout */
@@ -3783,8 +3817,8 @@
         clear_layout(ctk_object);
 
         /* Swap between panning and moving  */
-        if (__modify_panning != (event->state & ShiftMask)?1:0) {
-            __modify_panning = (event->state & ShiftMask)?1:0;
+        if (__modify_panning != ((event->state & ShiftMask) ? 1 : 0)) {
+            __modify_panning = ((event->state & ShiftMask) ? 1 : 0);
             sync_modify(ctk_object);
         }
         if (!(event->state & ShiftMask) || !ctk_object->advanced_mode) {
@@ -3799,7 +3833,6 @@
         }
 
         draw_layout(ctk_object);
-
 
 
     /* Update the tooltip under the mouse */
@@ -3823,9 +3856,7 @@
 
 
     /* Reset the foreground color */
-    gdk_gc_set_values(widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
-                      &old_gc_values,
-                      GDK_GC_FOREGROUND);
+    gdk_gc_set_values(fg_gc, &old_gc_values, GDK_GC_FOREGROUND);
     
 
     /* Refresh GUI */
@@ -3900,9 +3931,9 @@
             time = event->time;
         }
 
-        
         /* Redraw everything */
         draw_all(ctk_object);
+
         break;
 
     default:

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplaylayout.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkdisplaylayout.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplaylayout.h (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdisplaylayout.h Sun Jan 11 05:41:46 2009
@@ -186,6 +186,7 @@
 
     unsigned int        device_mask;    /* Bit mask to identify the display */
     char               *name;           /* Display name (from NV-CONTROL) */
+    Bool                is_sdi;         /* Is an SDI display */
 
     nvModeLinePtr       modelines;      /* Modelines validated by X */
     int                 num_modelines;
@@ -263,6 +264,15 @@
 
 
 
+/* GVO Mode information */
+typedef struct GvoModeDataRec {
+    unsigned int id; /* NV-CONTROL ID */
+    char *name;
+    unsigned int rate; /* Refresh rate */
+} GvoModeData;
+
+
+
 /* GPU (Device) */
 typedef struct nvGpuRec {
     struct nvGpuRec *next;
@@ -285,6 +295,9 @@
     int pci_device;
     int pci_func;
     
+    GvoModeData *gvo_mode_data; /* Information about GVO modes available */
+    unsigned int num_gvo_modes;
+
     nvScreenPtr screens;  /* List of screens this GPU drives */
     int num_screens;
 

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdropdownmenu.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkdropdownmenu.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdropdownmenu.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdropdownmenu.c Sun Jan 11 05:41:46 2009
@@ -134,12 +134,17 @@
     d->values = NULL;
     d->num_entries = 0;
     
+    d->option_menu = gtk_option_menu_new();
     d->menu = gtk_menu_new();
-    d->option_menu = gtk_option_menu_new();
-    
+
+    gtk_option_menu_set_menu(GTK_OPTION_MENU(d->option_menu), d->menu);
+
     gtk_box_set_spacing(GTK_BOX(d), 0);
     gtk_box_pack_start(GTK_BOX(d), d->option_menu, FALSE, FALSE, 0);
 
+    g_signal_connect(G_OBJECT(d->option_menu), "changed",
+                     G_CALLBACK(changed), (gpointer) d);
+
     return GTK_WIDGET(d);
     
 } /* ctk_drop_down_menu_new() */
@@ -158,6 +163,8 @@
     d->num_entries = 0;
     
     d->menu = gtk_menu_new();
+
+    gtk_option_menu_set_menu(GTK_OPTION_MENU(d->option_menu), d->menu);
     
 } /* ctk_drop_down_menu_reset() */
 
@@ -168,9 +175,9 @@
  * menu
  */
 
-void ctk_drop_down_menu_append_item(CtkDropDownMenu *d,
-                                    const gchar *name,
-                                    const gint value)
+GtkWidget *ctk_drop_down_menu_append_item(CtkDropDownMenu *d,
+                                          const gchar *name,
+                                          const gint value)
 {
     GtkWidget *menu_item, *label, *alignment;
     gchar *str;
@@ -197,26 +204,10 @@
     d->values[d->num_entries].value = value;
     
     d->num_entries++;
+
+    return label;
     
 } /* ctk_drop_down_menu_append_item() */
-
-
-
-/*
- * ctk_drop_down_menu_finalize() - to be called once all menu entries
- * have been added.
- */
-
-void ctk_drop_down_menu_finalize(CtkDropDownMenu *d)
-{
-    gtk_option_menu_set_menu(GTK_OPTION_MENU(d->option_menu), d->menu);
-
-    g_signal_connect(G_OBJECT(d->option_menu), "changed",
-                     G_CALLBACK(changed), (gpointer) d);
-
-    gtk_widget_show_all(GTK_WIDGET(d));
-
-} /* ctk_drop_down_menu_finalize() */
 
 
 

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdropdownmenu.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkdropdownmenu.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdropdownmenu.h (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkdropdownmenu.h Sun Jan 11 05:41:46 2009
@@ -85,10 +85,9 @@
 
 GType      ctk_drop_down_menu_get_type            (void) G_GNUC_CONST;
 GtkWidget* ctk_drop_down_menu_new                 (guint flags);
-void       ctk_drop_down_menu_append_item         (CtkDropDownMenu *d,
+GtkWidget* ctk_drop_down_menu_append_item         (CtkDropDownMenu *d,
                                                    const gchar *name,
                                                    const gint value);
-void       ctk_drop_down_menu_finalize            (CtkDropDownMenu *d);
 gint       ctk_drop_down_menu_get_current_value   (CtkDropDownMenu *d);
 void       ctk_drop_down_menu_set_current_value   (CtkDropDownMenu *d,
                                                    gint value);

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkevent.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkevent.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkevent.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkevent.c Sun Jan 11 05:41:46 2009
@@ -69,7 +69,7 @@
     struct __CtkEventSourceRec *next;
 } CtkEventSource;
 
-
+static guint binary_signals[NV_CTRL_BINARY_DATA_LAST_ATTRIBUTE + 1];
 static guint string_signals[NV_CTRL_STRING_LAST_ATTRIBUTE + 1];
 static guint signals[NV_CTRL_LAST_ATTRIBUTE + 1];
 static guint signal_RRScreenChangeNotify;
@@ -254,6 +254,18 @@
     MAKE_SIGNAL(NV_CTRL_GVO_COMPOSITE_ALPHA_KEY);
     MAKE_SIGNAL(NV_CTRL_GVO_COMPOSITE_NUM_KEY_RANGES);
     MAKE_SIGNAL(NV_CTRL_NOTEBOOK_DISPLAY_CHANGE_LID_EVENT);
+    MAKE_SIGNAL(NV_CTRL_MODE_SET_EVENT);
+    MAKE_SIGNAL(NV_CTRL_OPENGL_AA_LINE_GAMMA_VALUE);
+    MAKE_SIGNAL(NV_CTRL_FRAMELOCK_SLAVEABLE);
+    MAKE_SIGNAL(NV_CTRL_DISPLAYPORT_LINK_RATE);
+    MAKE_SIGNAL(NV_CTRL_STEREO_EYES_EXCHANGE);
+    MAKE_SIGNAL(NV_CTRL_NO_SCANOUT);
+    MAKE_SIGNAL(NV_CTRL_GVO_CSC_CHANGED_EVENT);
+    MAKE_SIGNAL(NV_CTRL_PIXMAP_CACHE);
+    MAKE_SIGNAL(NV_CTRL_PIXMAP_CACHE_ROUNDING_SIZE_KB);
+    MAKE_SIGNAL(NV_CTRL_IS_GVO_DISPLAY);
+    MAKE_SIGNAL(NV_CTRL_PCI_ID);
+    MAKE_SIGNAL(NV_CTRL_GVO_FULL_RANGE_COLOR);
 
 #undef MAKE_SIGNAL
     
@@ -264,7 +276,7 @@
      * knows about.
      */
 
-#if NV_CTRL_LAST_ATTRIBUTE != NV_CTRL_DEPTH_30_ALLOWED
+#if NV_CTRL_LAST_ATTRIBUTE != NV_CTRL_GVO_FULL_RANGE_COLOR
 #warning "There are attributes that do not emit signals!"
 #endif
 
@@ -283,8 +295,6 @@
     MAKE_STRING_SIGNAL(NV_CTRL_STRING_NVIDIA_DRIVER_VERSION);
     MAKE_STRING_SIGNAL(NV_CTRL_STRING_DISPLAY_DEVICE_NAME);
     MAKE_STRING_SIGNAL(NV_CTRL_STRING_TV_ENCODER_NAME);
-    MAKE_STRING_SIGNAL(NV_CTRL_STRING_DDCCI_MISC_TRANSMIT_DISPLAY_DESCRIPTOR);
-    MAKE_STRING_SIGNAL(NV_CTRL_STRING_DDCCI_MISC_AUXILIARY_DISPLAY_DATA);
     MAKE_STRING_SIGNAL(NV_CTRL_STRING_GVO_FIRMWARE_VERSION);
     MAKE_STRING_SIGNAL(NV_CTRL_STRING_CURRENT_MODELINE);
     MAKE_STRING_SIGNAL(NV_CTRL_STRING_ADD_MODELINE);
@@ -307,9 +317,36 @@
     MAKE_STRING_SIGNAL(NV_CTRL_STRING_TWINVIEW_XINERAMA_INFO_ORDER);
     MAKE_STRING_SIGNAL(NV_CTRL_STRING_SLI_MODE);
     MAKE_STRING_SIGNAL(NV_CTRL_STRING_PERFORMANCE_MODES);
+    MAKE_STRING_SIGNAL(NV_CTRL_STRING_GVO_VIDEO_FORMAT_NAME);
 #undef MAKE_STRING_SIGNAL
 
-#if NV_CTRL_STRING_LAST_ATTRIBUTE != NV_CTRL_STRING_PERFORMANCE_MODES
+#if NV_CTRL_STRING_LAST_ATTRIBUTE != NV_CTRL_STRING_GVO_VIDEO_FORMAT_NAME
+#warning "There are attributes that do not emit signals!"
+#endif
+    
+    
+    /* make signals for binary attribute */
+    for (i = 0; i <= NV_CTRL_BINARY_DATA_LAST_ATTRIBUTE; i++) binary_signals[i] = 0;
+
+#define MAKE_BINARY_SIGNAL(x)                                              \
+    binary_signals[x] = g_signal_new(("CTK_EVENT_"  #x),                   \
+                                     G_OBJECT_CLASS_TYPE(ctk_event_class), \
+                                     G_SIGNAL_RUN_LAST, 0, NULL, NULL,     \
+                                     g_cclosure_marshal_VOID__POINTER,     \
+                                     G_TYPE_NONE, 1, G_TYPE_POINTER);
+
+    MAKE_BINARY_SIGNAL(NV_CTRL_BINARY_DATA_MODELINES);
+    MAKE_BINARY_SIGNAL(NV_CTRL_BINARY_DATA_XSCREENS_USING_GPU);
+    MAKE_BINARY_SIGNAL(NV_CTRL_BINARY_DATA_GPUS_USED_BY_XSCREEN);
+    MAKE_BINARY_SIGNAL(NV_CTRL_BINARY_DATA_GPUS_USING_FRAMELOCK);
+    MAKE_BINARY_SIGNAL(NV_CTRL_BINARY_DATA_DISPLAY_VIEWPORT);
+    MAKE_BINARY_SIGNAL(NV_CTRL_BINARY_DATA_FRAMELOCKS_USED_BY_GPU);
+    MAKE_BINARY_SIGNAL(NV_CTRL_BINARY_DATA_GPUS_USING_VCSC);
+    MAKE_BINARY_SIGNAL(NV_CTRL_BINARY_DATA_VCSCS_USED_BY_GPU);
+
+#undef MAKE_BINARY_SIGNAL
+    
+#if NV_CTRL_BINARY_DATA_LAST_ATTRIBUTE != NV_CTRL_BINARY_DATA_VCSCS_USED_BY_GPU
 #warning "There are attributes that do not emit signals!"
 #endif
 
@@ -586,7 +623,7 @@
         }
 
         /*
-         * Handle the TARGET_ATTRIBUTE_AVAILABILITY_CHANGED_EVENT 
+         * Handle the TARGET_ATTRIBUTE_AVAILABILITY_CHANGED_EVENT
          * NV-CONTROL event.
          */
 
@@ -620,7 +657,7 @@
                                 nvctrlevent->target_id);
         }
         /*
-         * Handle the TARGET_STRING_ATTRIBUTE_CHANGED_EVENT 
+         * Handle the TARGET_STRING_ATTRIBUTE_CHANGED_EVENT
          * NV-CONTROL event.
          */
     } else if (event_source->event_base != -1 &&
@@ -641,7 +678,7 @@
             event_struct.availability = TRUE;
             /*
              * XXX Is emitting a signal with g_signal_emit() really
-             * the "correct" way of dispatching the event?
+             * the "correct" way of dispatching the event
              */
 
             CTK_EVENT_BROADCAST(event_source,
@@ -650,10 +687,41 @@
                                 nvctrlevent->target_type,
                                 nvctrlevent->target_id);
         }
-
-    /*
-     * Also handle XRandR events.
-     */
+         /*
+          * Handle the TARGET_BINARY_ATTRIBUTE_CHANGED_EVENT
+          * NV-CONTROL event.
+          */
+    } else if (event_source->event_base != -1 &&
+               (event.type == (event_source->event_base
+                               + TARGET_BINARY_ATTRIBUTE_CHANGED_EVENT))) {
+        XNVCtrlBinaryAttributeChangedEventTarget *nvctrlevent =
+            (XNVCtrlBinaryAttributeChangedEventTarget *) &event;
+
+        /* make sure the attribute is in our signal array */
+        if ((nvctrlevent->attribute >= 0) &&
+            (nvctrlevent->attribute <= NV_CTRL_BINARY_DATA_LAST_ATTRIBUTE) &&
+            (binary_signals[nvctrlevent->attribute] != 0)) {
+
+            event_struct.attribute    = nvctrlevent->attribute;
+            event_struct.value        = 0;
+            event_struct.display_mask = nvctrlevent->display_mask;
+            event_struct.availability = TRUE;
+            /*
+             * XXX Is emitting a signal with g_signal_emit() really
+             * the "correct" way of dispatching the event
+             */
+
+            CTK_EVENT_BROADCAST(event_source,
+                                binary_signals[nvctrlevent->attribute],
+                                &event_struct,
+                                nvctrlevent->target_type,
+                                nvctrlevent->target_id);
+        }
+
+
+        /*
+         * Also handle XRandR events.
+         */
 
     } else if (event_source->randr_event_base != -1 &&
                (event.type ==

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkframelock.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkframelock.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkframelock.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkframelock.c Sun Jan 11 05:41:46 2009
@@ -22,8 +22,9 @@
  *
  */
 
-
 #include <gtk/gtk.h>
+#include <gdk-pixbuf/gdk-pixdata.h>
+
 #include <NvCtrlAttributes.h>
 #include <stdlib.h>
 #include <stdio.h>
@@ -31,21 +32,20 @@
 #include <assert.h>
 
 #include "ctkutils.h"
+#include "ctkbanner.h"
 #include "ctkframelock.h"
 #include "ctkhelp.h"
 #include "ctkevent.h"
 
-#include "ctkimage.h"
-
-#include "led_green.h"
-#include "led_red.h"
-#include "led_grey.h"
-
-#include "rj45_input.h"
-#include "rj45_output.h"
-#include "rj45_unused.h"
-
-#include "bnc_cable.h"
+#include "led_green_pixdata.h"
+#include "led_red_pixdata.h"
+#include "led_grey_pixdata.h"
+
+#include "rj45_input_pixdata.h"
+#include "rj45_output_pixdata.h"
+#include "rj45_unused_pixdata.h"
+
+#include "bnc_cable_pixdata.h"
 
 #include "parse.h"
 #include "msg.h"
@@ -83,7 +83,7 @@
  * that entry.
  */
 
-#define NUM_GPU_SIGNALS 6
+#define NUM_GPU_SIGNALS 7
 
 const char *__GPUSignals[NUM_GPU_SIGNALS] = 
     {
@@ -92,7 +92,8 @@
         CTK_EVENT_NAME(NV_CTRL_FRAMELOCK_SYNC),
         CTK_EVENT_NAME(NV_CTRL_FRAMELOCK_TEST_SIGNAL),
         CTK_EVENT_NAME(NV_CTRL_REFRESH_RATE),
-        CTK_EVENT_NAME(NV_CTRL_REFRESH_RATE_3)
+        CTK_EVENT_NAME(NV_CTRL_REFRESH_RATE_3),
+        CTK_EVENT_NAME(NV_CTRL_FRAMELOCK_SLAVEABLE)
     };
 
 /*
@@ -178,6 +179,7 @@
     GtkWidget *server_label;
     GtkWidget *server_checkbox;
     gboolean   masterable;
+    gboolean   slaveable;
 
     GtkWidget *client_label;
     GtkWidget *client_checkbox;
@@ -696,13 +698,13 @@
          GTK_WINDOW(gtk_widget_get_parent(GTK_WIDGET(ctk_framelock))),
          GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT
          | GTK_DIALOG_NO_SEPARATOR,
-         GTK_STOCK_OK,
+         GTK_STOCK_YES,
          GTK_RESPONSE_ACCEPT,
          NULL);
 
     ctk_framelock->enable_confirm_cancel_button =
         gtk_dialog_add_button(GTK_DIALOG(dialog),
-                              GTK_STOCK_CANCEL,
+                              GTK_STOCK_NO,
                               GTK_RESPONSE_REJECT);
 
     gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
@@ -793,12 +795,12 @@
  * Updates the container to hold a duplicate of the given image.
  *
  */
-void update_image(GtkWidget *container, GtkWidget *new_image)
+void update_image(GtkWidget *container, GdkPixbuf *new_pixbuf)
 {
     ctk_empty_container(container);
 
     gtk_box_pack_start(GTK_BOX(container),
-                       ctk_image_dupe(GTK_IMAGE(new_image)),
+                       gtk_image_new_from_pixbuf(new_pixbuf),
                        FALSE, FALSE, 0);
 
     gtk_widget_show_all(container);
@@ -1156,6 +1158,40 @@
 
 
 
+/** list_entry_update_gpu_controls() *********************************
+ *
+ * Updates a GPU list entry's GUI controls based on the current
+ * frame lock status.
+ *
+ */
+static void list_entry_update_gpu_controls(CtkFramelock *ctk_framelock,
+                                           nvListEntryPtr entry)
+{
+    nvGPUDataPtr data = (nvGPUDataPtr)(entry->data);
+    unsigned int slaveables;
+    nvDisplayDataPtr display_data;
+    nvListEntryPtr child;
+    ReturnStatus ret;
+    
+
+    ret = NvCtrlGetDisplayAttribute(data->handle,
+                                    ~0, /* Query all displays */
+                                    NV_CTRL_FRAMELOCK_SLAVEABLE,
+                                    &slaveables);
+
+    /* Update the slaveable flag of the GPU's display devices */
+    child = entry->children;
+    while (child) {
+        display_data = (nvDisplayDataPtr)(child->data);
+        /* Assume device is slaveable if slaveable query fails. */
+        display_data->slaveable = ((ret != NvCtrlSuccess) ||
+                                   (display_data->device_mask & slaveables));
+        child = child->next_sibling;
+    }
+}
+
+
+
 /** list_entry_update_display_controls() *****************************
  *
  * Updates a display device list entry's GUI controls based on
@@ -1188,7 +1224,7 @@
     client_checked = gtk_toggle_button_get_active
         (GTK_TOGGLE_BUTTON(data->client_checkbox));
     
-    /* Server Checkbox is unavailable when framelock is disabled,
+    /* Server Checkbox is unavailable when framelock is enabled,
      * this display is set as client, this display cannot be master
      * (display is driven by GPU that is connected through a
      * secondary connector.), or another server is already selected.
@@ -1201,18 +1237,23 @@
     gtk_widget_set_sensitive(data->server_checkbox, sensitive);
     
     /* When a server is selected, this display can only become a
-     * client if its refresh rate matches that of the client.
+     * client if its refresh rate matches that of the client,
+     * and the X server reports that it can frame lock this client
+     * correctly.
      */
     sensitive = (!framelock_enabled &&
                  !server_checked &&
+                 data->slaveable &&
                  (!server_data || data->rate == server_data->rate));
     gtk_widget_set_sensitive(data->client_label, sensitive);
     gtk_widget_set_sensitive(data->client_checkbox, sensitive);
 
     /* Gray out the display device's refresh rate when it is not
-     * the same as the current server's.
+     * the same as the current server's, or the X server tells us
+     * the client cannot be frame locked.
      */
-    sensitive = (!server_data || data->rate == server_data->rate);
+    sensitive = ((!server_data || data->rate == server_data->rate) &&
+                 data->slaveable);
     gtk_widget_set_sensitive(data->rate_label, sensitive);
     gtk_widget_set_sensitive(data->rate_text, sensitive);
     gtk_widget_set_sensitive(data->label, sensitive);
@@ -1247,17 +1288,23 @@
 {
     if (!entry) return;
 
-    list_entry_update_controls(ctk_framelock, entry->children);
-
     if (entry->data_type == ENTRY_DATA_FRAMELOCK) {
         list_entry_update_framelock_controls(ctk_framelock, entry);
         
     } else if (entry->data_type == ENTRY_DATA_GPU) {
-        /* Do nothing */
+        list_entry_update_gpu_controls(ctk_framelock, entry);
         
     } else if (entry->data_type == ENTRY_DATA_DISPLAY) {
         list_entry_update_display_controls(ctk_framelock, entry);
     }
+
+    /*
+     * It is important that we recurse into children _after_ processing the
+     * current node, since display entries may depend on data updated in GPU
+     * entries (display entries are children of GPU entries).
+     */
+
+    list_entry_update_controls(ctk_framelock, entry->children);
 
     list_entry_update_controls(ctk_framelock, entry->next_sibling);
 }
@@ -2755,7 +2802,7 @@
     gchar *str;
     str = g_strdup_printf("Frame Lock has been enabled but no server\n"
                           "device was selected.  Would you like to keep\n"
-                          "the current settings?\n"
+                          "Frame Lock enabled on the selected devices?\n"
                           "\n"
                           "Disabling Frame Lock in %d seconds...",
                           ctk_framelock->enable_confirm_countdown);
@@ -3333,15 +3380,15 @@
     /* Receiving Sync */
     if (!framelock_enabled || (is_server && !use_house_sync)) {
         gtk_widget_set_sensitive(data->receiving_label, FALSE);
-        update_image(data->receiving_hbox, ctk_framelock->led_grey);
+        update_image(data->receiving_hbox, ctk_framelock->led_grey_pixbuf);
     } else {
         gint receiving;
         NvCtrlGetAttribute(data->handle, NV_CTRL_FRAMELOCK_SYNC_READY,
                            &receiving);
         gtk_widget_set_sensitive(data->receiving_label, TRUE);
         update_image(data->receiving_hbox,
-                     receiving ? ctk_framelock->led_green :
-                     ctk_framelock->led_red);
+                     (receiving ? ctk_framelock->led_green_pixbuf :
+                      ctk_framelock->led_red_pixbuf));
     }
 
     /* Sync Rate */
@@ -3367,20 +3414,23 @@
 
     /* House Sync and Ports are always active */
     update_image(data->house_hbox,
-                 house?ctk_framelock->led_green:ctk_framelock->led_red);
+                 (house ? ctk_framelock->led_green_pixbuf :
+                  ctk_framelock->led_red_pixbuf));
     if ( !data->port0_ethernet_error ) {
         update_image(data->port0_hbox,
-                     (port0==NV_CTRL_FRAMELOCK_PORT0_STATUS_INPUT)?
-                     ctk_framelock->rj45_input:ctk_framelock->rj45_output);
+                     ((port0==NV_CTRL_FRAMELOCK_PORT0_STATUS_INPUT) ?
+                      ctk_framelock->rj45_input_pixbuf :
+                      ctk_framelock->rj45_output_pixbuf));
     } else {
-        update_image(data->port0_hbox, ctk_framelock->rj45_unused);
+        update_image(data->port0_hbox, ctk_framelock->rj45_unused_pixbuf);
     }
     if ( !data->port1_ethernet_error ) {
         update_image(data->port1_hbox,
-                     (port1==NV_CTRL_FRAMELOCK_PORT0_STATUS_INPUT)?
-                     ctk_framelock->rj45_input:ctk_framelock->rj45_output);
+                     ((port1==NV_CTRL_FRAMELOCK_PORT0_STATUS_INPUT) ?
+                      ctk_framelock->rj45_input_pixbuf :
+                      ctk_framelock->rj45_output_pixbuf));
     } else {
-        update_image(data->port1_hbox, ctk_framelock->rj45_unused);
+        update_image(data->port1_hbox, ctk_framelock->rj45_unused_pixbuf);
     }
 }
 
@@ -3432,14 +3482,14 @@
         (has_server && !use_house_sync) ||  // GPU always drives sync.
         (has_server && !house)) {           // No house so GPU drives sync.
         gtk_widget_set_sensitive(data->timing_label, FALSE);
-        update_image(data->timing_hbox, ctk_framelock->led_grey);
+        update_image(data->timing_hbox, ctk_framelock->led_grey_pixbuf);
     } else {
         gint timing;
         NvCtrlGetAttribute(data->handle, NV_CTRL_FRAMELOCK_TIMING, &timing);
         gtk_widget_set_sensitive(data->timing_label, TRUE);
         update_image(data->timing_hbox,
-                     timing ? ctk_framelock->led_green :
-                     ctk_framelock->led_red);
+                     (timing ? ctk_framelock->led_green_pixbuf :
+                      ctk_framelock->led_red_pixbuf));
     }
 }
 
@@ -3484,7 +3534,7 @@
         (!is_server && !is_client) ||
         (is_server && gpu_is_server && !use_house_sync)) {
         gtk_widget_set_sensitive(data->stereo_label, FALSE);
-        update_image(data->stereo_hbox, ctk_framelock->led_grey);
+        update_image(data->stereo_hbox, ctk_framelock->led_grey_pixbuf);
     } else {
         nvGPUDataPtr gpu_data;
         gint timing = TRUE;
@@ -3501,13 +3551,13 @@
                                &timing);
         }
         if (!timing) {
-            update_image(data->stereo_hbox, ctk_framelock->led_grey);
+            update_image(data->stereo_hbox, ctk_framelock->led_grey_pixbuf);
         } else {
             NvCtrlGetAttribute(data->handle, NV_CTRL_FRAMELOCK_STEREO_SYNC,
                                &stereo_sync);
             update_image(data->stereo_hbox,
-                         stereo_sync ? ctk_framelock->led_green :
-                         ctk_framelock->led_red);
+                         (stereo_sync ? ctk_framelock->led_green_pixbuf :
+                          ctk_framelock->led_red_pixbuf));
         }
     }
 }
@@ -3995,6 +4045,12 @@
         break;
 
 
+    case NV_CTRL_FRAMELOCK_SLAVEABLE:
+        /* Update slaveable relationships in the GUI */
+        update_framelock_controls(ctk_framelock);
+        break;
+
+
     default:
         /* Oops */
         break;
@@ -4387,21 +4443,27 @@
 
     /* Cache images */
 
-    ctk_framelock->led_grey  = ctk_image_new(&led_grey);
-    ctk_framelock->led_green = ctk_image_new(&led_green);
-    ctk_framelock->led_red   = ctk_image_new(&led_red);
-
-    ctk_framelock->rj45_input  = ctk_image_new(&rj45_input);
-    ctk_framelock->rj45_output = ctk_image_new(&rj45_output);
-    ctk_framelock->rj45_unused = ctk_image_new(&rj45_unused);
-
-    g_object_ref(ctk_framelock->led_grey);
-    g_object_ref(ctk_framelock->led_green);
-    g_object_ref(ctk_framelock->led_red);
-
-    g_object_ref(ctk_framelock->rj45_input);
-    g_object_ref(ctk_framelock->rj45_output);
-    g_object_ref(ctk_framelock->rj45_unused);
+    ctk_framelock->led_grey_pixbuf =
+        gdk_pixbuf_from_pixdata(&led_grey_pixdata, TRUE, NULL);
+    ctk_framelock->led_green_pixbuf =
+        gdk_pixbuf_from_pixdata(&led_green_pixdata, TRUE, NULL);
+    ctk_framelock->led_red_pixbuf =
+        gdk_pixbuf_from_pixdata(&led_red_pixdata, TRUE, NULL);
+
+    ctk_framelock->rj45_input_pixbuf =
+        gdk_pixbuf_from_pixdata(&rj45_input_pixdata, TRUE, NULL);
+    ctk_framelock->rj45_output_pixbuf =
+        gdk_pixbuf_from_pixdata(&rj45_output_pixdata, TRUE, NULL);
+    ctk_framelock->rj45_unused_pixbuf =
+        gdk_pixbuf_from_pixdata(&rj45_unused_pixdata, TRUE, NULL);
+
+    g_object_ref(ctk_framelock->led_grey_pixbuf);
+    g_object_ref(ctk_framelock->led_green_pixbuf);
+    g_object_ref(ctk_framelock->led_red_pixbuf);
+
+    g_object_ref(ctk_framelock->rj45_input_pixbuf);
+    g_object_ref(ctk_framelock->rj45_output_pixbuf);
+    g_object_ref(ctk_framelock->rj45_unused_pixbuf);
 
     /* create the custom tree */
 
@@ -4473,7 +4535,8 @@
     gtk_container_add(GTK_CONTAINER(frame), padding);
 
     /* add house sync BNC connector image */
-    image = ctk_image_new(&bnc_cable);
+    image = gtk_image_new_from_pixbuf
+         (gdk_pixbuf_from_pixdata(&bnc_cable_pixdata, TRUE, NULL));
     hbox = gtk_hbox_new(FALSE, 0);
     gtk_box_pack_end(GTK_BOX(hbox), image, FALSE, FALSE, 0);
 

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkframelock.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkframelock.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkframelock.h (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkframelock.h Sun Jan 11 05:41:46 2009
@@ -117,13 +117,13 @@
     gboolean               framelock_enabled;
 
     /* Images */
-    GtkWidget             *led_grey;
-    GtkWidget             *led_green;
-    GtkWidget             *led_red;
+    GdkPixbuf             *led_grey_pixbuf;
+    GdkPixbuf             *led_green_pixbuf;
+    GdkPixbuf             *led_red_pixbuf;
 
-    GtkWidget             *rj45_input;
-    GtkWidget             *rj45_output;
-    GtkWidget             *rj45_unused;
+    GdkPixbuf             *rj45_input_pixbuf;
+    GdkPixbuf             *rj45_output_pixbuf;
+    GdkPixbuf             *rj45_unused_pixbuf;
 };
 
 struct _CtkFramelockClass

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkglx.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkglx.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkglx.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkglx.c Sun Jan 11 05:41:46 2009
@@ -30,7 +30,7 @@
 
 #include "glxinfo.h" /* xxx_abbrev functions */
 
-#include "ctkimage.h"
+#include "ctkbanner.h"
 #include "ctkglx.h"
 #include "ctkutils.h"
 #include "ctkconfig.h"
@@ -40,7 +40,7 @@
 
 
 /* Number of FBConfigs attributes reported in gui */
-#define NUM_FBCONFIG_ATTRIBS  31
+#define NUM_FBCONFIG_ATTRIBS  32
 
 
 /* FBConfig tooltips */
@@ -101,8 +101,10 @@
 static const char * __aca_help =
   "aca (Accumulator alpha size) - Number of bits per color used for alpha "
   "in the accumulator buffer.";
-static const char * __ms_help =
-  "ms (Multisample samples) - Number of samples per multisample.";
+static const char * __mvs_help =
+  "mvs (Multisample coverage samples) - Number of coverage samples per multisample.";
+static const char * __mcs_help =
+  "mcs (Multisample color samples) - Number of color samples per multisample.";
 static const char * __mb_help =
   "mb (Multisample buffer count) - Number of multisample buffers.";
 static const char * __cav_help =
@@ -208,7 +210,7 @@
         "rs",   "gs",   "bs",   "as",
         "aux",  "dpt",  "stn",
         "acr",  "acg",  "acb",  "aca",
-        "ms",   "mb",
+        "mvs",  "mcs",  "mb",
         "cav",
         "pbw",  "pbh",  "pbp",
         "trt",  "trr",  "trg",  "trb",  "tra",  "tri"
@@ -222,7 +224,7 @@
         __rs_help,  __gs_help,  __bs_help,  __as_help,
         __aux_help, __dpt_help, __stn_help,
         __acr_help, __acg_help, __acb_help, __aca_help,
-        __ms_help,  __mb_help,
+        __mvs_help, __mcs_help, __mb_help,
         __cav_help,
         __pbw_help, __pbh_help, __pbp_help,
         __trt_help, __trr_help, __trg_help,
@@ -440,8 +442,20 @@
                      fbconfig_attribs[i].accum_blue_size);
             snprintf((char *) (&(str[cell++])), 16, "%2d",
                      fbconfig_attribs[i].accum_alpha_size);
-            snprintf((char *) (&(str[cell++])), 16, "%2d",
-                     fbconfig_attribs[i].multi_samples);
+            if (fbconfig_attribs[i].multi_sample_valid) {
+                snprintf((char *) (&(str[cell++])), 16, "%2d",
+                         fbconfig_attribs[i].multi_samples);
+                if (fbconfig_attribs[i].multi_sample_coverage_valid) {
+                    snprintf((char *) (&(str[cell++])), 16, "%2d",
+                             fbconfig_attribs[i].multi_samples_color);
+                } else {
+                    snprintf((char *) (&(str[cell++])), 16, "%2d",
+                             fbconfig_attribs[i].multi_samples);
+                }
+            } else {
+                snprintf((char *) (&(str[cell++])), 16, " 0");
+                snprintf((char *) (&(str[cell++])), 16, " 0");
+            }
             snprintf((char *) (&(str[cell++])), 16, "%1d",
                      fbconfig_attribs[i].multi_sample_buffers);
             snprintf((char *) (&(str[cell++])), 16, "%s",
@@ -903,7 +917,8 @@
                   __acg_help,
                   __acb_help,
                   __aca_help,
-                  __ms_help,
+                  __mvs_help,
+                  __mcs_help,
                   __mb_help,
 
                   __cav_help,

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgpu.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkgpu.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgpu.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgpu.c Sun Jan 11 05:41:46 2009
@@ -28,7 +28,9 @@
 #include <stdio.h>
 #include <stdlib.h>
 
-#include "ctkimage.h"
+#include "parse.h"
+
+#include "ctkbanner.h"
 
 #include "ctkgpu.h"
 #include "ctkhelp.h"
@@ -121,7 +123,7 @@
 
 GtkWidget* ctk_gpu_new(
     NvCtrlAttributeHandle *handle,
-    NvCtrlAttributeHandle **screen_handles,
+    CtrlHandleTarget *t,
     CtkEvent *ctk_event
 )
 {
@@ -282,7 +284,7 @@
 
             } else if (pData[0] > 0) {
 
-                ret = NvCtrlGetAttribute(screen_handles[pData[1]],
+                ret = NvCtrlGetAttribute(t[pData[1]].h,
                                          NV_CTRL_SHOW_SLI_HUD,
                                          &tmp);
 

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgpu.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkgpu.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgpu.h (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgpu.h Sun Jan 11 05:41:46 2009
@@ -26,6 +26,7 @@
 #define __CTK_GPU_H__
 
 #include <gtk/gtk.h>
+#include <query-assign.h>
 
 #include "ctkevent.h"
 
@@ -70,7 +71,7 @@
 
 GType       ctk_gpu_get_type (void) G_GNUC_CONST;
 GtkWidget*  ctk_gpu_new      (NvCtrlAttributeHandle *handle,
-                              NvCtrlAttributeHandle **screen_handles,
+                              CtrlHandleTarget *t,
                               CtkEvent *ctk_event);
 
 GtkTextBuffer *ctk_gpu_create_help(GtkTextTagTable *);

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo-banner.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkgvo-banner.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo-banner.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo-banner.c Sun Jan 11 05:41:46 2009
@@ -38,7 +38,6 @@
 #include "ctkhelp.h"
 #include "ctkgvo-banner.h"
 #include "ctkutils.h"
-#include "ctkimage.h"
 #include "ctkbanner.h"
 
 #include "msg.h"

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo-csc.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkgvo-csc.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo-csc.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo-csc.c Sun Jan 11 05:41:46 2009
@@ -27,14 +27,14 @@
 
 #include <string.h>
 
-#include "ctkimage.h"
-
-#include "ctkgvo-csc.h"
-
+#include "ctkbanner.h"
 #include "ctkconfig.h"
 #include "ctkhelp.h"
-
 #include "ctkdropdownmenu.h"
+
+#include "ctkgvo-csc.h"
+
+#include "msg.h"
 
 /*
  * The CtkGvoCsc widget is used to provide a way for configuring
@@ -110,6 +110,10 @@
 
 static void apply_csc_values                (CtkGvoCsc *ctk_gvo_csc);
 
+static void gvo_csc_event_received          (GtkObject *object,
+                                             gpointer arg1,
+                                             gpointer user_data);
+
 static GtkWidget *build_opengl_only_msg     (void);
 
 /*
@@ -137,8 +141,9 @@
 "custom CSC.";
 
 static const char * __initialize_help =
-"The Initialize Color Space Conversion dropdown allows you to select between "
-"some standard CSC configurations.";
+"The Initialize Color Space Conversion drop down menu, when selected, "
+"populates the Color Space Conversion Matrix, Offset, and Scale with the "
+"values from the selected standard.";
 
 static const char * __csc_help =
 "The color space conversion matrix defines the paramaters used for "
@@ -236,6 +241,7 @@
     ctk_gvo_csc = CTK_GVO_CSC(object);
     ctk_gvo_csc->handle = handle;
     ctk_gvo_csc->ctk_config = ctk_config;
+    ctk_gvo_csc->ctk_event = ctk_event;
     ctk_gvo_csc->gvo_parent = gvo_parent;
     ctk_gvo_csc->caps = caps;
     
@@ -355,8 +361,7 @@
          CSC_STANDARD_IDENTITY_STRING,
          CSC_STANDARD_IDENTITY);
     
-    ctk_drop_down_menu_finalize
-        (CTK_DROP_DOWN_MENU(ctk_gvo_csc->initializeDropDown));
+    gtk_widget_show_all(ctk_gvo_csc->initializeDropDown);
     
     gtk_box_pack_start(GTK_BOX(hbox),
                        ctk_gvo_csc->initializeDropDown,
@@ -364,6 +369,10 @@
                        FALSE,                   // fill
                        5);                      // padding    
     
+    ctk_drop_down_menu_set_current_value
+        (CTK_DROP_DOWN_MENU(ctk_gvo_csc->initializeDropDown),
+         CSC_STANDARD_ITU_601);
+
     
     g_signal_connect(G_OBJECT(ctk_gvo_csc->initializeDropDown), "changed",
                      G_CALLBACK(initialize_csc_dropdown_changed),
@@ -645,6 +654,18 @@
     
     override_state_toggled(ctk_gvo_csc, override);
     
+    /* Listen to server events */
+
+    g_signal_connect(G_OBJECT(ctk_gvo_csc->ctk_event),
+                     CTK_EVENT_NAME(NV_CTRL_GVO_CSC_CHANGED_EVENT),
+                     G_CALLBACK(gvo_csc_event_received),
+                     (gpointer) ctk_gvo_csc);
+
+    g_signal_connect(G_OBJECT(ctk_gvo_csc->ctk_event),
+                     CTK_EVENT_NAME(NV_CTRL_GVO_OVERRIDE_HW_CSC),
+                     G_CALLBACK(gvo_csc_event_received),
+                     (gpointer) ctk_gvo_csc);    
+
     /* show the page */
 
     gtk_widget_show_all(GTK_WIDGET(object));
@@ -738,6 +759,8 @@
                                   0.001,                // climb rate
                                   6);                   // number of digits
     
+    gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(*widget), TRUE);
+
     g_signal_connect(G_OBJECT(*widget),
                      "value-changed",
                      G_CALLBACK(spin_button_value_changed),
@@ -1014,6 +1037,114 @@
                        NV_CTRL_GVO_OVERRIDE_HW_CSC_TRUE);
 
 } /* apply_csc_values() */
+
+
+
+/*
+ * GVO CSC event handler.
+ */
+
+static void gvo_csc_event_received(GtkObject *object,
+                                   gpointer arg1,
+                                   gpointer user_data)
+{
+    CtkEventStruct *event_struct = (CtkEventStruct *) arg1;
+    CtkGvoCsc *ctk_gvo_csc = CTK_GVO_CSC(user_data);
+    GtkWidget *widget;
+    gint attribute = event_struct->attribute;
+    gint value = event_struct->value;
+    ReturnStatus ret;    
+
+    float newCSCMatrix[3][3];
+    float newCSCOffset[3];
+    float newCSCScale[3];
+    int row, column;
+
+
+    switch (attribute) {
+
+    case NV_CTRL_GVO_CSC_CHANGED_EVENT:
+
+        /* Re-query the GVO CSC matrix */
+
+        ret = NvCtrlGetGvoColorConversion(ctk_gvo_csc->handle,
+                                          newCSCMatrix,
+                                          newCSCOffset,
+                                          newCSCScale);
+        if (ret == NvCtrlSuccess) {
+
+            for (row = 0; row < 3; row++) {
+                for (column = 0; column < 3; column++) {
+                    g_signal_handlers_block_by_func
+                        (G_OBJECT(ctk_gvo_csc->matrixWidget[row][column]),
+                         G_CALLBACK(spin_button_value_changed),
+                         (gpointer) ctk_gvo_csc);
+                    ctk_gvo_csc->matrix[row][column] = newCSCMatrix[row][column];
+                    gtk_spin_button_set_value
+                        (GTK_SPIN_BUTTON(ctk_gvo_csc->matrixWidget[row][column]),
+                         ctk_gvo_csc->matrix[row][column]);
+                    g_signal_handlers_unblock_by_func
+                        (G_OBJECT(ctk_gvo_csc->matrixWidget[row][column]),
+                         G_CALLBACK(spin_button_value_changed),
+                         (gpointer) ctk_gvo_csc);
+                }
+                
+                g_signal_handlers_block_by_func
+                    (G_OBJECT(ctk_gvo_csc->offsetWidget[row]),
+                     G_CALLBACK(spin_button_value_changed),
+                     (gpointer) ctk_gvo_csc);
+                ctk_gvo_csc->offset[row] = newCSCOffset[row];
+                gtk_spin_button_set_value
+                    (GTK_SPIN_BUTTON(ctk_gvo_csc->offsetWidget[row]),
+                     ctk_gvo_csc->offset[row]);
+                g_signal_handlers_unblock_by_func
+                    (G_OBJECT(ctk_gvo_csc->offsetWidget[row]),
+                     G_CALLBACK(spin_button_value_changed),
+                     (gpointer) ctk_gvo_csc);                
+
+                g_signal_handlers_block_by_func
+                    (G_OBJECT(ctk_gvo_csc->scaleWidget[row]),
+                     G_CALLBACK(spin_button_value_changed),
+                     (gpointer) ctk_gvo_csc);
+                ctk_gvo_csc->scale[row] = newCSCScale[row];
+                gtk_spin_button_set_value
+                    (GTK_SPIN_BUTTON(ctk_gvo_csc->scaleWidget[row]),
+                     ctk_gvo_csc->scale[row]);
+                g_signal_handlers_unblock_by_func
+                    (G_OBJECT(ctk_gvo_csc->scaleWidget[row]),
+                     G_CALLBACK(spin_button_value_changed),
+                     (gpointer) ctk_gvo_csc);
+            }
+        }
+
+        gtk_widget_set_sensitive(ctk_gvo_csc->applyButton, FALSE);
+        break;
+
+    case NV_CTRL_GVO_OVERRIDE_HW_CSC:
+        widget = ctk_gvo_csc->overrideButton;
+
+        g_signal_handlers_block_by_func(G_OBJECT(widget),
+                                        G_CALLBACK(override_button_toggled),
+                                        (gpointer) ctk_gvo_csc);
+
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), value);
+        override_state_toggled(ctk_gvo_csc, value);
+
+        gtk_widget_set_sensitive(ctk_gvo_csc->applyButton, FALSE);
+
+        g_signal_handlers_unblock_by_func(G_OBJECT(widget),
+                                          G_CALLBACK(override_button_toggled),
+                                          (gpointer) ctk_gvo_csc);
+        break;
+
+    default:
+        nv_error_msg("Unhandled GVO CSC event received: %d\n",
+                     attribute);
+        break;
+    }
+
+} /* gvo_csc_event_recieved() */
+
 
 
 /*

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo-csc.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkgvo-csc.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo-csc.h (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo-csc.h Sun Jan 11 05:41:46 2009
@@ -62,6 +62,7 @@
 
     NvCtrlAttributeHandle *handle;
     CtkConfig *ctk_config;
+    CtkEvent *ctk_event;
 
     CtkGvo *gvo_parent;
     GtkWidget *banner_box;

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo-sync.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkgvo-sync.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo-sync.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo-sync.c Sun Jan 11 05:41:46 2009
@@ -27,7 +27,7 @@
 
 #include <string.h>
 
-#include "ctkimage.h"
+#include "ctkbanner.h"
 
 #include "ctkgvo.h"
 #include "ctkgvo-sync.h"
@@ -84,7 +84,6 @@
 static void update_input_video_format_text_entry(CtkGvoSync *ctk_gvo_sync);
 static void post_composite_termination_toggled(CtkGvoSync *ctk_gvo_sync,
                                                gboolean enabled);
-static void update_delay_spin_buttons_range(CtkGvoSync *ctk_gvo_sync);
 
 
 static void detect_input_toggled(GtkToggleButton *togglebutton,
@@ -335,7 +334,8 @@
 
     GtkWidget *table, *menu;
 
-    gint val, i, width, height;
+    gint val, i;
+    NVCTRLAttributeValidValuesRec valid;
     ReturnStatus ret;
     gint row;
 
@@ -531,9 +531,6 @@
     gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
     gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
                      GTK_FILL, GTK_FILL, TABLE_PADDING, TABLE_PADDING);
-    
-    ret = NvCtrlGetAttribute(handle, NV_CTRL_GVO_SYNC_DELAY_PIXELS, &val);
-    if (ret != NvCtrlSuccess) val = 0;
 
     ctk_gvo_sync->sync_lock_status_text = gtk_label_new("");
 
@@ -551,116 +548,114 @@
 
 
     /*
-     * Synchronization Delay/Advance
+     * Synchronization Skew (Delay/Advance)
      */
-    
-    ctk_gvo_get_video_format_resolution(ctk_gvo_sync->input_video_format,
-                                        &width, &height);
 
     /* NV_CTRL_GVO_SYNC_DELAY_PIXELS */
 
-    if ( ctk_gvo_sync->caps && NV_CTRL_GVO_CAPABILITIES_ADVANCE_SYNC_SKEW ) {
-        label = gtk_label_new("HSync Advance:");
-    } else {
-        label = gtk_label_new("HSync Delay:");
-    }
-
-    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-    gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
-                     GTK_FILL, GTK_FILL, TABLE_PADDING, TABLE_PADDING);
-    
-    ret = NvCtrlGetAttribute(handle, NV_CTRL_GVO_SYNC_DELAY_PIXELS, &val);
-    if (ret != NvCtrlSuccess) val = 0;
-
-    if (width < 1) width = 1;
-
-    if ( ctk_gvo_sync->caps && NV_CTRL_GVO_CAPABILITIES_ADVANCE_SYNC_SKEW ) {
-        width = INT_MAX;
-        help_text = __hsync_advance_help;
-    } else {
-        help_text = __hsync_delay_help;
-    }
-
-    ctk_gvo_sync->hsync_delay_spin_button =
-        gtk_spin_button_new_with_range(0.0, width, 1);
-
-    ctk_config_set_tooltip(ctk_config,
+    ret = NvCtrlGetValidAttributeValues(handle, NV_CTRL_GVO_SYNC_DELAY_PIXELS,
+                                        &valid);
+
+    if ((ret == NvCtrlSuccess) && (valid.type == ATTRIBUTE_TYPE_RANGE)) {
+        ret = NvCtrlGetAttribute(handle, NV_CTRL_GVO_SYNC_DELAY_PIXELS, &val);
+        if (ret != NvCtrlSuccess) val = 0;
+
+        if (ctk_gvo_sync->caps & NV_CTRL_GVO_CAPABILITIES_ADVANCE_SYNC_SKEW) {
+            label = gtk_label_new("HSync Advance:");
+            help_text = __hsync_advance_help;
+        } else {
+            label = gtk_label_new("HSync Delay:");
+            help_text = __hsync_delay_help;
+        }
+
+        gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+        gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
+                         GTK_FILL, GTK_FILL, TABLE_PADDING, TABLE_PADDING);
+
+        ctk_gvo_sync->hsync_delay_spin_button =
+            gtk_spin_button_new_with_range(valid.u.range.min,
+                                           valid.u.range.max, 1);
+
+        ctk_config_set_tooltip(ctk_config,
+                               ctk_gvo_sync->hsync_delay_spin_button,
+                               help_text);
+
+        gtk_spin_button_set_value
+            (GTK_SPIN_BUTTON(ctk_gvo_sync->hsync_delay_spin_button), val);
+    
+        g_signal_connect(G_OBJECT(ctk_gvo_sync->hsync_delay_spin_button),
+                         "value-changed",
+                         G_CALLBACK(hsync_delay_changed), ctk_gvo_sync);
+
+        hbox = gtk_hbox_new(FALSE, 5);
+        gtk_box_pack_start(GTK_BOX(hbox),
                            ctk_gvo_sync->hsync_delay_spin_button,
-                           help_text);
-
-    gtk_spin_button_set_value
-        (GTK_SPIN_BUTTON(ctk_gvo_sync->hsync_delay_spin_button), val);
-    
-    g_signal_connect(G_OBJECT(ctk_gvo_sync->hsync_delay_spin_button),
-                     "value-changed",
-                     G_CALLBACK(hsync_delay_changed), ctk_gvo_sync);
-
-    hbox = gtk_hbox_new(FALSE, 5);
-    gtk_box_pack_start(GTK_BOX(hbox), ctk_gvo_sync->hsync_delay_spin_button,
-                       FALSE, FALSE, 0);
-
-    label = gtk_label_new("(pixels)");
-    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-    gtk_box_pack_start(GTK_BOX(hbox), label,
-                       FALSE, FALSE, 0);
-
-    gtk_table_attach(GTK_TABLE(table), hbox,
-                     1, 2, row, row+1,
-                     GTK_FILL /*| GTK_EXPAND*/, GTK_FILL,
-                     TABLE_PADDING, TABLE_PADDING);
-    row++;
+                           FALSE, FALSE, 0);
+
+        label = gtk_label_new("(pixels)");
+        gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+        gtk_box_pack_start(GTK_BOX(hbox), label,
+                           FALSE, FALSE, 0);
+
+        gtk_table_attach(GTK_TABLE(table), hbox,
+                         1, 2, row, row+1,
+                         GTK_FILL /*| GTK_EXPAND*/, GTK_FILL,
+                         TABLE_PADDING, TABLE_PADDING);
+        row++;
+    }
 
     /* NV_CTRL_GVO_SYNC_DELAY_LINES */
     
-    if ( ctk_gvo_sync->caps && NV_CTRL_GVO_CAPABILITIES_ADVANCE_SYNC_SKEW ) {
-        label = gtk_label_new("VSync Advance:");
-    } else {
-        label = gtk_label_new("VSync Delay:");
-    }
-    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-    gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
-                     GTK_FILL, GTK_FILL, TABLE_PADDING, TABLE_PADDING);
-
-    ret = NvCtrlGetAttribute(handle, NV_CTRL_GVO_SYNC_DELAY_LINES, &val);
-    if (ret != NvCtrlSuccess) val = 0;
-    
-    if (height < 1) height = 1;
-
-    if ( ctk_gvo_sync->caps && NV_CTRL_GVO_CAPABILITIES_ADVANCE_SYNC_SKEW ) {
-        height = INT_MAX;
-        help_text = __vsync_advance_help;
-    } else {
-        help_text = __vsync_delay_help;
-    }
-
-    ctk_gvo_sync->vsync_delay_spin_button =
-        gtk_spin_button_new_with_range(0.0, height, 1);
-   
-    ctk_config_set_tooltip(ctk_config,
+    ret = NvCtrlGetValidAttributeValues(handle, NV_CTRL_GVO_SYNC_DELAY_LINES,
+                                        &valid);
+
+    if ((ret == NvCtrlSuccess) && (valid.type == ATTRIBUTE_TYPE_RANGE)) {
+        ret = NvCtrlGetAttribute(handle, NV_CTRL_GVO_SYNC_DELAY_LINES, &val);
+        if (ret != NvCtrlSuccess) val = 0;
+
+        if (ctk_gvo_sync->caps & NV_CTRL_GVO_CAPABILITIES_ADVANCE_SYNC_SKEW) {
+            label = gtk_label_new("VSync Advance:");
+            help_text = __vsync_advance_help;
+        } else {
+            label = gtk_label_new("VSync Delay:");
+            help_text = __vsync_delay_help;
+        }
+
+        gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+        gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
+                         GTK_FILL, GTK_FILL, TABLE_PADDING, TABLE_PADDING);
+
+        ctk_gvo_sync->vsync_delay_spin_button =
+            gtk_spin_button_new_with_range(valid.u.range.min,
+                                           valid.u.range.max, 1);
+
+        ctk_config_set_tooltip(ctk_config,
+                               ctk_gvo_sync->vsync_delay_spin_button,
+                               help_text);
+
+        gtk_spin_button_set_value
+            (GTK_SPIN_BUTTON(ctk_gvo_sync->vsync_delay_spin_button), val);
+        
+        g_signal_connect(G_OBJECT(ctk_gvo_sync->vsync_delay_spin_button),
+                         "value-changed",
+                         G_CALLBACK(vsync_delay_changed), ctk_gvo_sync);
+
+        hbox = gtk_hbox_new(FALSE, 5);
+        gtk_box_pack_start(GTK_BOX(hbox),
                            ctk_gvo_sync->vsync_delay_spin_button,
-                           help_text);
-    gtk_spin_button_set_value
-        (GTK_SPIN_BUTTON(ctk_gvo_sync->vsync_delay_spin_button), val);
-    
-    g_signal_connect(G_OBJECT(ctk_gvo_sync->vsync_delay_spin_button),
-                     "value-changed",
-                     G_CALLBACK(vsync_delay_changed), ctk_gvo_sync);
-
-    hbox = gtk_hbox_new(FALSE, 5);
-    gtk_box_pack_start(GTK_BOX(hbox), ctk_gvo_sync->vsync_delay_spin_button,
-                       FALSE, FALSE, 0);
-
-    label = gtk_label_new("(lines)");
-    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-    gtk_box_pack_start(GTK_BOX(hbox), label,
-                       FALSE, FALSE, 0);
-
-    gtk_table_attach(GTK_TABLE(table), hbox,
-                     1, 2, row, row+1,
-                     GTK_FILL /*| GTK_EXPAND*/, GTK_FILL,
-                     TABLE_PADDING, TABLE_PADDING);
-    row++;
-
+                           FALSE, FALSE, 0);
+
+        label = gtk_label_new("(lines)");
+        gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+        gtk_box_pack_start(GTK_BOX(hbox), label,
+                           FALSE, FALSE, 0);
+
+        gtk_table_attach(GTK_TABLE(table), hbox,
+                         1, 2, row, row+1,
+                         GTK_FILL /*| GTK_EXPAND*/, GTK_FILL,
+                         TABLE_PADDING, TABLE_PADDING);
+        row++;
+    }
 
     /* create the watch cursor (for use when the "Detect" button is toggled" */
     
@@ -716,7 +711,7 @@
 
 static void finish_menu(GtkWidget *menu, GtkWidget *table, const gint row)
 {
-    ctk_drop_down_menu_finalize(CTK_DROP_DOWN_MENU(menu));
+    gtk_widget_show_all(menu);
 
     gtk_table_attach(GTK_TABLE(table), menu, 1, 2, row, row+1,
                      GTK_FILL | GTK_EXPAND, GTK_FILL,
@@ -930,8 +925,14 @@
 
     sensitive = (sensitive && sync_signal_detected(ctk_gvo_sync));
 
-    gtk_widget_set_sensitive(ctk_gvo_sync->hsync_delay_spin_button, sensitive);
-    gtk_widget_set_sensitive(ctk_gvo_sync->vsync_delay_spin_button, sensitive);
+    if (ctk_gvo_sync->hsync_delay_spin_button) {
+        gtk_widget_set_sensitive(ctk_gvo_sync->hsync_delay_spin_button,
+                                 sensitive);
+    }
+    if (ctk_gvo_sync->vsync_delay_spin_button) {
+        gtk_widget_set_sensitive(ctk_gvo_sync->vsync_delay_spin_button,
+                                 sensitive);
+    }
 
 } /* update_gvo_sync_sensitivity() */
 
@@ -1037,32 +1038,6 @@
                                  "Sync Format set to \"%s\".", name);
 
 } /* post_sync_format_menu_changed() */
-
-
-
-/*
- * update_delay_spin_buttons_range() - Updates the range of the
- * delay spin buttons.
- */
-
-static void update_delay_spin_buttons_range(CtkGvoSync *ctk_gvo_sync)
-{
-    gint w, h;
-    
-    if ( ctk_gvo_sync->caps && NV_CTRL_GVO_CAPABILITIES_ADVANCE_SYNC_SKEW ) {
-        // No need to reset max values
-        return;
-    }
-
-    ctk_gvo_get_video_format_resolution(ctk_gvo_sync->input_video_format,
-                                        &w, &h);
-
-    gtk_spin_button_set_range
-        (GTK_SPIN_BUTTON(ctk_gvo_sync->hsync_delay_spin_button), 0, w);
-    gtk_spin_button_set_range
-        (GTK_SPIN_BUTTON(ctk_gvo_sync->vsync_delay_spin_button), 0, h);
-
-} /* update_delay_spin_buttons_range() */
 
 
 
@@ -1344,6 +1319,19 @@
     switch (attribute) {
     case NV_CTRL_GVO_SYNC_MODE:
         ctk_gvo_sync->sync_mode = value;
+        widget = ctk_gvo_sync->sync_mode_menu;
+        
+        g_signal_handlers_block_by_func(G_OBJECT(widget),
+                                        G_CALLBACK(sync_mode_changed),
+                                        (gpointer) ctk_gvo_sync);
+
+        ctk_drop_down_menu_set_current_value
+            (CTK_DROP_DOWN_MENU(widget), value);
+        
+        g_signal_handlers_unblock_by_func(G_OBJECT(widget),
+                                          G_CALLBACK(sync_mode_changed),
+                                          (gpointer) ctk_gvo_sync);
+            
         post_sync_mode_menu_changed(ctk_gvo_sync, value);
         break;
 
@@ -1359,30 +1347,34 @@
 
     case NV_CTRL_GVO_SYNC_DELAY_PIXELS:
         widget = ctk_gvo_sync->hsync_delay_spin_button;
+
+        if (widget) {
+            g_signal_handlers_block_by_func(G_OBJECT(widget),
+                                            G_CALLBACK(hsync_delay_changed),
+                                            (gpointer) ctk_gvo_sync);
         
-        g_signal_handlers_block_by_func(G_OBJECT(widget),
-                                        G_CALLBACK(hsync_delay_changed),
-                                        (gpointer) ctk_gvo_sync);
+            gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), value);
         
-        gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), value);
-        
-        g_signal_handlers_unblock_by_func(G_OBJECT(widget),
-                                          G_CALLBACK(hsync_delay_changed),
-                                          (gpointer) ctk_gvo_sync);
+            g_signal_handlers_unblock_by_func(G_OBJECT(widget),
+                                              G_CALLBACK(hsync_delay_changed),
+                                              (gpointer) ctk_gvo_sync);
+        }
         break;
         
     case NV_CTRL_GVO_SYNC_DELAY_LINES:
         widget = ctk_gvo_sync->vsync_delay_spin_button;
         
-        g_signal_handlers_block_by_func(G_OBJECT(widget),
-                                        G_CALLBACK(vsync_delay_changed),
-                                        (gpointer) ctk_gvo_sync);
+        if (widget) {
+            g_signal_handlers_block_by_func(G_OBJECT(widget),
+                                            G_CALLBACK(vsync_delay_changed),
+                                            (gpointer) ctk_gvo_sync);
         
-        gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), value);
-        
-        g_signal_handlers_unblock_by_func(G_OBJECT(widget),
-                                          G_CALLBACK(vsync_delay_changed),
-                                          (gpointer) ctk_gvo_sync);
+            gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), value);
+            
+            g_signal_handlers_unblock_by_func(G_OBJECT(widget),
+                                              G_CALLBACK(vsync_delay_changed),
+                                              (gpointer) ctk_gvo_sync);
+        }
         break;
 
     case NV_CTRL_GVO_COMPOSITE_TERMINATION:
@@ -1457,8 +1449,6 @@
     update_input_video_format_text_entry(ctk_gvo_sync);
 
     update_sync_lock_status_text(ctk_gvo_sync);
-
-    update_delay_spin_buttons_range(ctk_gvo_sync);
 
     update_gvo_sync_sensitivity(ctk_gvo_sync);
 
@@ -1539,7 +1529,7 @@
     ctk_help_heading(b, &i, "Sync Status");
     ctk_help_para(b, &i, __sync_status_help);
 
-    if ( ctk_gvo_sync->caps && NV_CTRL_GVO_CAPABILITIES_ADVANCE_SYNC_SKEW ) {
+    if ( ctk_gvo_sync->caps & NV_CTRL_GVO_CAPABILITIES_ADVANCE_SYNC_SKEW ) {
         ctk_help_heading(b, &i, "HSync Advance");
         ctk_help_para(b, &i, __hsync_advance_help);
         ctk_help_heading(b, &i, "VSync Advance");

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkgvo.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo.c Sun Jan 11 05:41:46 2009
@@ -34,7 +34,6 @@
 #include "ctkgvo.h"
 #include "ctkdropdownmenu.h"
 #include "ctkutils.h"
-#include "ctkimage.h"
 #include "ctkbanner.h"
 
 #include "ctkgvo-banner.h"
@@ -107,13 +106,12 @@
 
 
 static void fill_output_video_format_menu(CtkGvo *ctk_gvo);
-static void trim_output_video_format_menu(CtkGvo *ctk_gvo);
 static void output_video_format_ui_changed(CtkDropDownMenu *menu,
                                            gpointer user_data);
 static void post_output_video_format_changed(CtkGvo *ctk_gvo);
 
 
-static void validate_output_data_format(CtkGvo *ctk_gvo);
+static void fill_output_data_format_menu(CtkGvo *ctk_gvo);
 static void output_data_format_ui_changed(CtkDropDownMenu *menu,
                                           gpointer user_data);
 static void post_output_data_format_changed(CtkGvo *ctk_gvo);
@@ -233,45 +231,45 @@
 
 
 static const GvoFormatName dataFormatNames[] = {
-    { NV_CTRL_GVO_DATA_FORMAT_R8G8B8_TO_YCRCB444, "RGB -> YCrCb (4:4:4)" },
-    { NV_CTRL_GVO_DATA_FORMAT_R8G8B8_TO_YCRCB422, "RGB -> YCrCb (4:2:2)" },
-    { NV_CTRL_GVO_DATA_FORMAT_X8X8X8_444_PASSTHRU,"RGB (4:4:4)" },
+
+    /* Valid for Clone Mode */
+    { NV_CTRL_GVO_DATA_FORMAT_R8G8B8_TO_YCRCB444,               "RGB -> YCrCb (4:4:4)" },
+    { NV_CTRL_GVO_DATA_FORMAT_R8G8B8_TO_YCRCB422,               "RGB -> YCrCb (4:2:2)" },
+    { NV_CTRL_GVO_DATA_FORMAT_X8X8X8_444_PASSTHRU,              "RGB (4:4:4)" },
+
+    /* Invalid for Clone Mode usage */
+    { NV_CTRL_GVO_DATA_FORMAT_R8G8B8A8_TO_YCRCBA4444,           "RGBA -> YCrCbA (4:4:4:4)" },
+    { NV_CTRL_GVO_DATA_FORMAT_R8G8B8Z10_TO_YCRCBZ4444,          "RGBZ -> YCrCbZ (4:4:4:4)" },
+    { NV_CTRL_GVO_DATA_FORMAT_R8G8B8A8_TO_YCRCBA4224,           "RGBA -> YCrCbA (4:2:2:4)" },
+    { NV_CTRL_GVO_DATA_FORMAT_R8G8B8Z10_TO_YCRCBZ4224,          "RGBZ -> YCrCbZ (4:2:2:4)" },
+    { NV_CTRL_GVO_DATA_FORMAT_X8X8X8A8_4444_PASSTHRU,           "RGBA (4:4:4:4)" },
+    { NV_CTRL_GVO_DATA_FORMAT_X8X8X8Z8_4444_PASSTHRU,           "RGBZ (4:4:4:4)" },
+    { NV_CTRL_GVO_DATA_FORMAT_X10X10X10_444_PASSTHRU,           "RGBA (4:4:4)" },
+    { NV_CTRL_GVO_DATA_FORMAT_X10X8X8_444_PASSTHRU,             "RGB (4:4:4)" },
+    { NV_CTRL_GVO_DATA_FORMAT_X10X8X8A10_4444_PASSTHRU,         "RGBA (4:4:4:4)" },
+    { NV_CTRL_GVO_DATA_FORMAT_X10X8X8Z10_4444_PASSTHRU,         "RGBZ (4:4:4:4)" },
+    { NV_CTRL_GVO_DATA_FORMAT_DUAL_R8G8B8_TO_DUAL_YCRCB422,     "Dual RGB -> Dual YCrCb (4:2:2)" },
+    { NV_CTRL_GVO_DATA_FORMAT_DUAL_X8X8X8_TO_DUAL_422_PASSTHRU, "Dual RGB (4:2:2)" },
+    { NV_CTRL_GVO_DATA_FORMAT_R10G10B10_TO_YCRCB422,            "RGB -> YCrCb (4:2:2)" },
+    { NV_CTRL_GVO_DATA_FORMAT_R10G10B10_TO_YCRCB444,            "RGB -> YCrCb (4:4:4)" },
+    { NV_CTRL_GVO_DATA_FORMAT_X12X12X12_444_PASSTHRU,           "RGB (4:4:4)" },
+    { NV_CTRL_GVO_DATA_FORMAT_R12G12B12_TO_YCRCB444,            "RGB -> YCrCb (4:4:4)" },
+    { NV_CTRL_GVO_DATA_FORMAT_X8X8X8_422_PASSTHRU,              "RGB (4:2:2)" },
+    { NV_CTRL_GVO_DATA_FORMAT_X8X8X8A8_4224_PASSTHRU,           "RGB (4:2:2:4)" },
+    { NV_CTRL_GVO_DATA_FORMAT_X8X8X8Z8_4224_PASSTHRU,           "RGB (4:2:2:4)" },
+    { NV_CTRL_GVO_DATA_FORMAT_X10X10X10_422_PASSTHRU,           "RGB (4:2:2)" },
+    { NV_CTRL_GVO_DATA_FORMAT_X10X8X8_422_PASSTHRU,             "RGB (4:2:2)" },
+    { NV_CTRL_GVO_DATA_FORMAT_X10X8X8A10_4224_PASSTHRU,         "RGBA (4:2:2:4)" },
+    { NV_CTRL_GVO_DATA_FORMAT_X10X8X8Z10_4224_PASSTHRU,         "RGBZ (4:2:2:4)" },
+    { NV_CTRL_GVO_DATA_FORMAT_X12X12X12_422_PASSTHRU,           "RGB (4:2:2)" },
+    { NV_CTRL_GVO_DATA_FORMAT_R12G12B12_TO_YCRCB422,            "RGB -> YCrCb (4:2:2)" },
+
     { -1, NULL },
 };
 
 
 
 /**** Utility Functions ******************************************************/
-
-
-/*
- * get_first_available_output_video_format() - returns the first available
- * output video format from the dropdown menu.  This is needed since when
- * Frame Lock/Genlock are enabled, the default case of 487i may not be
- * appropriate.
- */
-
-static gint get_first_available_output_video_format(CtkGvo *ctk_gvo)
-{
-    CtkDropDownMenu *dmenu =
-        CTK_DROP_DOWN_MENU(ctk_gvo->output_video_format_menu);
-    int i;
-
-    /* look through the output video format dropdown for the first
-     * available selection.
-     */
-    for (i = 0; i < dmenu->num_entries; i++) {
-        if (GTK_WIDGET_IS_SENSITIVE(dmenu->values[i].menu_item)) {
-            return dmenu->values[i].value;
-        }
-    }
-
-    /* There are no available video formats?  Fallback to 487i. */
-
-    return NV_CTRL_GVO_VIDEO_FORMAT_487I_59_94_SMPTE259_NTSC;
-
-} /* get_first_available_output_video_format() */
-
 
 
 /*
@@ -291,26 +289,6 @@
     return "Unknown";
     
 } /* ctk_gvo_get_video_format_name() */
-
-
-
-/*
- * ctk_gvo_get_data_format_name() - return the name of the given data format
- */
-
-const char *ctk_gvo_get_data_format_name(const gint format)
-{
-    gint i;
-    
-    for (i = 0; dataFormatNames[i].name; i++) {
-        if (dataFormatNames[i].format == format) {
-            return dataFormatNames[i].name;
-        }
-    }
-
-    return "Unknown";
-
-} /* ctk_gvo_get_data_format_name() */
 
 
 
@@ -333,6 +311,151 @@
         }
     }
 } /* ctk_gvo_get_video_format_resolution() */
+
+
+
+/*
+ * ctk_gvo_get_video_format_refresh() - return the refresh rate of the
+ * given video format
+ */
+
+void ctk_gvo_get_video_format_refresh(const gint format, gint *r)
+{
+    gint i;
+    
+    *r = 0;
+
+    for (i = 0; videoFormatDetails[i].format != -1; i++) {
+        if (videoFormatDetails[i].format == format) {
+            *r = videoFormatDetails[i].rate;
+            return;
+        }
+    }
+} /* ctk_gvo_get_video_format_refresh() */
+
+
+
+/*
+ * ctk_gvo_video_format_valid() - returns a bitmask indicating whether or not
+ * the currently selected  video format is valid for clone mode based on the
+ * current X screen resolution and current sync method.  Returns a bitmask
+ * indicating possible valid/invalid state of the mode.
+ */
+
+#define GVO_VIDEO_FORMAT_INVALID            0x00000000
+#define GVO_VIDEO_FORMAT_MODE_VALID         0x00000001
+#define GVO_VIDEO_FORMAT_RESOLUTION_VALID   0x00000002
+#define GVO_VIDEO_FORMAT_REFRESH_VALID      0x00000004
+
+#define GVO_VIDEO_FORMAT_VALID          \
+ (GVO_VIDEO_FORMAT_MODE_VALID |         \
+  GVO_VIDEO_FORMAT_RESOLUTION_VALID |   \
+  GVO_VIDEO_FORMAT_REFRESH_VALID)
+
+guint ctk_gvo_video_format_valid(CtkGvo *ctk_gvo, const gint format)
+{
+    gint width, height, refresh_rate, input_refresh_rate;
+    guint valid = GVO_VIDEO_FORMAT_VALID;
+
+
+    /* Keep track of whether we'll need to re-set the video format
+     * when enabling clone mode.
+     */
+
+    /* Check to make sure the format size <= current screen size */
+    ctk_gvo_get_video_format_resolution(format, &width, &height);
+
+    /* Make sure the resolution fits */
+    if ((width > ctk_gvo->screen_width) || (height > ctk_gvo->screen_height)) {
+        valid &= ~(GVO_VIDEO_FORMAT_RESOLUTION_VALID);
+    }
+    
+    /* Check that format is supported */
+    if (((format < 32) &&
+         !((1 << format) & ctk_gvo->valid_output_video_format_mask[0])) ||
+        ((format >= 32) &&
+         !((1 << (format -32)) & ctk_gvo->valid_output_video_format_mask[1]))) {
+        valid &= ~(GVO_VIDEO_FORMAT_MODE_VALID);
+    }
+
+    /* Check that formats match if Genlock is enabled */
+    else if ((ctk_gvo->sync_mode == NV_CTRL_GVO_SYNC_MODE_GENLOCK) &&
+             (ctk_gvo->input_video_format != NV_CTRL_GVO_VIDEO_FORMAT_NONE) &&
+             (ctk_gvo->input_video_format != format)) {
+        valid &= ~(GVO_VIDEO_FORMAT_REFRESH_VALID);
+    }
+
+
+    /* Check that format refresh rates match if Frame Lock is enabled */
+    else if ((ctk_gvo->sync_mode == NV_CTRL_GVO_SYNC_MODE_FRAMELOCK) &&
+             (ctk_gvo->input_video_format != NV_CTRL_GVO_VIDEO_FORMAT_NONE)) {
+        
+        /* Get the refresh rate */
+        ctk_gvo_get_video_format_refresh(format, &refresh_rate);
+
+        /* Get the current input refresh rate */
+        ctk_gvo_get_video_format_refresh(ctk_gvo->input_video_format,
+                                         &input_refresh_rate);
+        
+        /* Check that the refresh rates are the same, or, for those
+         * GVO devices that support multi-rate synchronization, check
+         * that the fractional part of the rates are either both zero
+         * or both non-zero.
+         */
+
+        if ((refresh_rate != input_refresh_rate) &&
+            (!(ctk_gvo->caps & NV_CTRL_GVO_CAPABILITIES_MULTIRATE_SYNC) ||
+             (((refresh_rate % 1000) ? TRUE : FALSE) !=
+              ((input_refresh_rate % 1000) ? TRUE : FALSE)))) {
+             valid &= ~(GVO_VIDEO_FORMAT_REFRESH_VALID);
+        }
+    }
+
+    return valid;
+
+} /* ctk_gvo_video_format_valid() */
+
+
+
+/*
+ * ctk_gvo_get_data_format_name() - return the name of the given data format
+ */
+
+const char *ctk_gvo_get_data_format_name(const gint format)
+{
+    gint i;
+    
+    for (i = 0; dataFormatNames[i].name; i++) {
+        if (dataFormatNames[i].format == format) {
+            return dataFormatNames[i].name;
+        }
+    }
+
+    return "Unknown";
+
+} /* ctk_gvo_get_data_format_name() */
+
+
+
+/*
+ * ctk_gvo_data_format_valid() - return whether or not the given data
+ * format is valid for clone mode.
+ */
+
+gboolean ctk_gvo_data_format_valid(const gint format)
+{
+    gint i;
+    
+    for (i = 0; dataFormatNames[i].name; i++) {
+        if (dataFormatNames[i].format == format) {
+            /* Only the first three formats are valid */
+            return (i < 3) ? TRUE : FALSE;
+        }
+    }
+
+    return FALSE;
+
+} /* ctk_gvo_data_format_valid() */
 
 
 
@@ -368,271 +491,6 @@
 
 
 
-/*
- * trim_output_video_format_menu() - given the current
- * OUTPUT_VIDEO_FORMAT and SYNC_MODE, set the sensitivity of each menu
- * entry and possibly update which of the output video mode dropdown
- * entries is currently selected.
- */
-
-static void trim_output_video_format_menu(CtkGvo *ctk_gvo)
-{
-    ReturnStatus ret;
-    NVCTRLAttributeValidValuesRec valid;
-    gint bitmask, bitmask2, i, refresh_rate;
-    gboolean sensitive, current_available;
-
-    /* retrieve the currently available values */
-
-    ret = NvCtrlGetValidAttributeValues(ctk_gvo->handle,
-                                        NV_CTRL_GVO_OUTPUT_VIDEO_FORMAT,
-                                        &valid);
-
-    /* if we failed to get the available values; assume none are valid */
-
-    if ((ret != NvCtrlSuccess) || (valid.type != ATTRIBUTE_TYPE_INT_BITS)) {
-        bitmask = 0;
-    } else {
-        bitmask = valid.u.bits.ints;
-    }
-    
-    /* retrieve additional available values */
-
-    ret = NvCtrlGetValidAttributeValues(ctk_gvo->handle,
-                                        NV_CTRL_GVO_OUTPUT_VIDEO_FORMAT2,
-                                        &valid);
-
-    /* if we failed to get the available values; assume none are valid */
-    
-    if ((ret != NvCtrlSuccess) || (valid.type != ATTRIBUTE_TYPE_INT_BITS)) {
-        bitmask2 = 0;
-    } else {
-        bitmask2 = valid.u.bits.ints;
-    }
-
-    /* 
-     * if the SyncMode is genlock or framelock, trim the bitmask
-     * accordingly: if GENLOCK, then the only bit allowed is the bit
-     * that corresponds to the exact input mode; if FRAMELOCK, then
-     * only modes with the same refresh rate as the input mode are
-     * allowed.
-     */
-    
-    if ((ctk_gvo->sync_mode == NV_CTRL_GVO_SYNC_MODE_GENLOCK) &&
-        (ctk_gvo->input_video_format != NV_CTRL_GVO_VIDEO_FORMAT_NONE)) {
-
-        if (ctk_gvo->input_video_format < 32) {
-            bitmask &= (1 << ctk_gvo->input_video_format);
-            bitmask2 = 0;
-        } else {
-            bitmask = 0;
-            bitmask2 &= (1 << (ctk_gvo->input_video_format - 32));
-        }
-    }
-    
-    if ((ctk_gvo->sync_mode == NV_CTRL_GVO_SYNC_MODE_FRAMELOCK) &&
-        (ctk_gvo->input_video_format != NV_CTRL_GVO_VIDEO_FORMAT_NONE)) {
-
-        refresh_rate = 0;
-
-        /* Get the current input refresh rate */
-        for (i = 0; videoFormatDetails[i].format != -1; i++) {
-            if (videoFormatDetails[i].format == ctk_gvo->input_video_format) {
-                refresh_rate = videoFormatDetails[i].rate;
-                break;
-            }
-        }
-        
-        /* Mask out refresh rates that don't match */
-        for (i = 0; videoFormatDetails[i].format != -1; i++) {
-            gboolean match = FALSE;
-
-            if (videoFormatDetails[i].rate == refresh_rate) {
-                match = TRUE;
-
-            } else if (ctk_gvo->caps &
-                       NV_CTRL_GVO_CAPABILITIES_MULTIRATE_SYNC) {
-
-                /* Some GVO devices support multi-rate synchronization.
-                 * For these devices, we just need to check that the 
-                 * fractional part of the rate are either both zero or
-                 * both non-zero.
-                 */
-                if (((videoFormatDetails[i].rate % 1000) ? TRUE : FALSE) ==
-                    ((refresh_rate % 1000) ? TRUE : FALSE)) {
-                    match = TRUE;
-                }
-            } else {
-                match = FALSE;
-            }
-
-            if (!match) {
-                if (videoFormatDetails[i].format < 32) {
-                    bitmask &= ~(1 << videoFormatDetails[i].format);
-                } else {
-                    bitmask2 &= ~(1 << (videoFormatDetails[i].format - 32));
-                }
-            }
-        }
-    }
-
-    /*
-     * loop over each video format; if that format is set in the
-     * bitmask, then it is available
-     */
-
-    current_available = FALSE;
-    for (i = 0; videoFormatNames[i].name; i++) {
-        if (((videoFormatNames[i].format < 32) &&
-             ((1 << videoFormatNames[i].format) & bitmask)) ||
-            ((videoFormatNames[i].format >= 32) &&
-             (((1 << (videoFormatNames[i].format - 32)) & bitmask2)))) {
-            sensitive = TRUE;
-        } else {
-            sensitive = FALSE;
-        }
-
-        ctk_drop_down_menu_set_value_sensitive
-            (CTK_DROP_DOWN_MENU(ctk_gvo->output_video_format_menu),
-             videoFormatNames[i].format, sensitive);
-
-        /* if the current video is not sensitive, take note */
-        
-        if ((ctk_gvo->output_video_format == videoFormatNames[i].format) &&
-            sensitive) {
-            current_available = TRUE;
-        }
-    }
-    
-    /*
-     * if the current video is not available, then make the first
-     * available format current
-     */
-    
-    if (!current_available && bitmask) {
-
-        for (i = 0; videoFormatNames[i].name; i++) {
-            if (((videoFormatNames[i].format < 32) &&
-                 ((1 << videoFormatNames[i].format) & bitmask)) ||
-                ((videoFormatNames[i].format >= 32) &&
-                 ((1 << (videoFormatNames[i].format - 32)) & bitmask2))) {
-                
-                /* Invalidate the format so it gets set when clone mode is
-                 * enabled.
-                 */
-                ctk_gvo->output_video_format_valid = FALSE;
-
-                g_signal_handlers_block_by_func
-                    (G_OBJECT(ctk_gvo->output_video_format_menu),
-                     G_CALLBACK(output_video_format_ui_changed),
-                     (gpointer) ctk_gvo);
-
-                ctk_drop_down_menu_set_current_value
-                    (CTK_DROP_DOWN_MENU(ctk_gvo->output_video_format_menu),
-                     videoFormatNames[i].format);
-
-                g_signal_handlers_unblock_by_func
-                    (G_OBJECT(ctk_gvo->output_video_format_menu),
-                     G_CALLBACK(output_video_format_ui_changed),
-                     (gpointer) ctk_gvo);
-                break;
-            }
-        }
-    }
-
-    /*
-     * cache the bitmask
-     */
-
-    ctk_gvo->valid_output_video_format_mask[0] = bitmask;
-    ctk_gvo->valid_output_video_format_mask[1] = bitmask2;
-    
-} /* trim_output_video_format_menu() */
-
-
-
-/*
- * validate_output_video_format() - Keep tabs on the output
- * video format.  If some other client sets the output video format to
- * something clone mode can't do, we'll just need to make sure that
- * we re-set the output video format when the user selects to enable
- * clone mode.
- *
- * NOTE: The gtk signal handler for the video format menu should not
- *       be enabled while calling this function.
- */
-
-static void validate_output_video_format(CtkGvo *ctk_gvo)
-{
-    gint bitmask, bitmask2;
-    gint width, height;
-    gint format = ctk_gvo->output_video_format;
-
-    /* Keep track of whether we'll need to re-set the video format
-     * when enabling clone mode.
-     */
-
-    /* Check to make sure the format size <= current screen size */
-    ctk_gvo_get_video_format_resolution(format, &width, &height);
-
-    /* Don't expose modes bigger than the current X Screen size */
-    if ((width > ctk_gvo->screen_width) ||
-        (height > ctk_gvo->screen_height)) {
-        /* Format is invalid due to screen size limitations */
-        ctk_gvo->output_video_format_valid = FALSE;
-        return;
-    }
-
-    /* Check to make sure genlock/framelock requirements are ment */
-    bitmask = ctk_gvo->valid_output_video_format_mask[0];
-    bitmask2 = ctk_gvo->valid_output_video_format_mask[1];
-
-    if (((format < 32) && !((1 << format) & bitmask)) ||
-        ((format >= 32) && !((1 << (format - 32)) & bitmask2))) {
-        /* Format is invalid due to genlock/framelock requirements */
-        ctk_gvo->output_video_format_valid = FALSE;
-        return;
-    }
-
-    /* If we got this far, then the format is valid. */
-    ctk_gvo->output_video_format_valid = TRUE;
-
-} /* validate_output_video_format() */
-
-
-
-/*
- * validate_output_data_format() - Keep tabs on the output
- * data format.  If some other client sets the output data format to
- * something clone mode can't do, we'll just need to make sure that
- * we re-set the output data format when the user selects to enable
- * clone mode.
- *
- * NOTE: The gtk signal handler for the data format menu should not
- *       be enabled while calling this function.
- */
-
-static void validate_output_data_format(CtkGvo *ctk_gvo)
-{
-    int i;
-
-    /* Keep track of whether we'll need to re-set the data format
-     * when enabling clone mode.
-     */
-    for (i = 0; dataFormatNames[i].name; i++) {
-        if (ctk_gvo->output_data_format == dataFormatNames[i].format) {
-            /* Value is OK */
-            ctk_gvo->output_data_format_valid = TRUE;
-            return;
-        }
-    }
-
-    ctk_gvo->output_data_format_valid = FALSE;
-
-} /* validate_output_data_format() */
-
-
-
 /**** Creation Functions *****************************************************/
 
 /*
@@ -648,7 +506,7 @@
     GtkWidget *hbox, *vbox, *alignment, *label;
     ReturnStatus ret;
     gchar scratch[64], *firmware, *string;
-    gint val, i, width, height;
+    gint val, width, height;
     
     GtkWidget *frame, *table, *menu;
     
@@ -777,18 +635,10 @@
     fill_output_video_format_menu(ctk_gvo);
 
     finish_menu(menu, table, 0);
-    
-    /* Make sure that the video format selected is valid for clone mode */
-
-    validate_output_video_format(ctk_gvo);
-    if (ctk_gvo->output_video_format_valid) {
-        val = ctk_gvo->output_video_format;
-    } else {
-        val = get_first_available_output_video_format(ctk_gvo);
-    }
 
     ctk_drop_down_menu_set_current_value
-        (CTK_DROP_DOWN_MENU(ctk_gvo->output_video_format_menu), val);
+        (CTK_DROP_DOWN_MENU(ctk_gvo->output_video_format_menu),
+         ctk_gvo->output_video_format);
 
     g_signal_connect(G_OBJECT(ctk_gvo->output_video_format_menu),
                      "changed", G_CALLBACK(output_video_format_ui_changed),
@@ -800,26 +650,14 @@
     ctk_gvo->output_data_format_menu = menu;
     ctk_config_set_tooltip(ctk_config, CTK_DROP_DOWN_MENU(menu)->option_menu,
                            __clone_mode_data_format_help);
-    
-    for (i = 0; dataFormatNames[i].name; i++) {
-        ctk_drop_down_menu_append_item(CTK_DROP_DOWN_MENU(menu),
-                                       dataFormatNames[i].name,
-                                       dataFormatNames[i].format);
-    }
+
+    fill_output_data_format_menu(ctk_gvo);
     
     finish_menu(menu, table, 1);
 
-    /* Make sure that the data format selected is valid for clone mode */
-
-    validate_output_data_format(ctk_gvo);
-    if (ctk_gvo->output_data_format_valid) {
-        val = ctk_gvo->output_data_format;
-    } else {
-        val = DEFAULT_OUTPUT_DATA_FORMAT;
-    }
-    
     ctk_drop_down_menu_set_current_value
-        (CTK_DROP_DOWN_MENU(ctk_gvo->output_data_format_menu), val);
+        (CTK_DROP_DOWN_MENU(ctk_gvo->output_data_format_menu),
+         ctk_gvo->output_data_format);
 
     g_signal_connect(G_OBJECT(ctk_gvo->output_data_format_menu),
                      "changed", G_CALLBACK(output_data_format_ui_changed),
@@ -1076,7 +914,7 @@
 
 static void finish_menu(GtkWidget *menu, GtkWidget *table, const gint row)
 {
-    ctk_drop_down_menu_finalize(CTK_DROP_DOWN_MENU(menu));
+    gtk_widget_show_all(menu);
 
     gtk_table_attach(GTK_TABLE(table), menu, 1, 2, row, row+1,
                      GTK_FILL | GTK_EXPAND, GTK_FILL,
@@ -1093,10 +931,17 @@
 static void fill_output_video_format_menu(CtkGvo *ctk_gvo)
 {
     int i;
-    int width, height;
     CtkDropDownMenu *dmenu =
         CTK_DROP_DOWN_MENU(ctk_gvo->output_video_format_menu);
+    GtkWidget *label;
+    guint valid;
+    gint num_valid_entries = 0;
+    gchar *str;
+    gchar *tmp;
    
+
+    ctk_drop_down_menu_reset(CTK_DROP_DOWN_MENU(dmenu));
+
     for (i = 0; videoFormatNames[i].name; i++) {
         
         /* 
@@ -1109,41 +954,184 @@
             return;
         }
         
-        /* check that the current X screen can support the width and height */
-        
-        width = videoFormatDetails[i].width;
-        height = videoFormatDetails[i].height;
-
-        /* Don't expose modes bigger than the current X Screen size */
-        if ((width > ctk_gvo->screen_width) ||
-            (height > ctk_gvo->screen_height)) {
+        valid = ctk_gvo_video_format_valid(ctk_gvo,
+                                           videoFormatNames[i].format);
+
+        /* Mode must be supported */
+        if (!(valid & GVO_VIDEO_FORMAT_MODE_VALID)) {
             continue;
         }
 
-        ctk_drop_down_menu_append_item(dmenu,
-                                       videoFormatNames[i].name,
-                                       videoFormatNames[i].format);
-    }
-    
-    ctk_gvo->has_output_video_formats =
-        ((dmenu->num_entries > 0) ? TRUE : FALSE);
-
-    if (!ctk_gvo->has_output_video_formats) {
-        nv_warning_msg("No GVO video formats will fit the current X screen of "
-                       "%d x %d; please create an X screen of atleast "
-                       "720 x 487; not exposing GVO page.\n",
+        /* Resolution must fit (or this is the selected mode) */
+        if (!(valid & GVO_VIDEO_FORMAT_RESOLUTION_VALID) &&
+            (ctk_gvo->output_video_format != videoFormatNames[i].format)) {
+            continue;
+        }
+
+        if (valid == GVO_VIDEO_FORMAT_VALID) {
+            str = (gchar *)videoFormatNames[i].name;
+        } else {
+            str = g_strconcat(videoFormatNames[i].name, " -", NULL);
+
+            if (!(valid & GVO_VIDEO_FORMAT_RESOLUTION_VALID)) {
+                tmp = g_strconcat(str, " Resolution mismatch", NULL);
+                g_free(str);
+                str = tmp;
+            }
+            if (!(valid & GVO_VIDEO_FORMAT_REFRESH_VALID)) {
+                if (!(valid & GVO_VIDEO_FORMAT_RESOLUTION_VALID)) {
+                    tmp = g_strconcat(str, ",", NULL);
+                    g_free(str);
+                    str = tmp;
+                }
+                tmp = g_strconcat(str, " Refresh mismatch", NULL);
+                g_free(str);
+                str = tmp;
+            }
+        }
+
+        label = ctk_drop_down_menu_append_item(dmenu, str,
+                                               videoFormatNames[i].format);
+        if (str != videoFormatNames[i].name) {
+            g_free(str);
+        }
+            
+        /* Gray out entry if it is not valid */
+        gtk_widget_set_sensitive(label, (valid == GVO_VIDEO_FORMAT_VALID));
+
+        if (valid == GVO_VIDEO_FORMAT_VALID) {
+            num_valid_entries++;
+        }
+    }
+    
+    /* Show special menu if there are no valid entries */
+    if (num_valid_entries <= 0) {
+        nv_warning_msg("There are currently no GVO video formats valid for "
+                       "use with Clone Mode.  Please make sure that the X "
+                       "screen resolution (currently %d x %d) is at least "
+                       "720 x 487.\n",
                        ctk_gvo->screen_width, ctk_gvo->screen_height);
 
-        ctk_drop_down_menu_append_item
-            (dmenu,
-             "*** X Screen is smaller than 720x487 ***",
-             0);
-    }
-
-    /* Trim output video format based on sync mode */
-    trim_output_video_format_menu(ctk_gvo);
+        ctk_drop_down_menu_reset(CTK_DROP_DOWN_MENU(dmenu));
+        label = ctk_drop_down_menu_append_item(dmenu,
+                                               "*** X screen is smaller than "
+                                               "720x487 ***",
+                                               ctk_gvo->output_video_format);
+        gtk_widget_set_sensitive(label, FALSE);
+    }
 
 } /* fill_output_video_format_menu() */
+
+
+
+/*
+ * rebuild_output_video_format_menu() - Reconsutrcts the output data format
+ * menu.
+ */
+
+static void rebuild_output_video_format_menu(CtkGvo *ctk_gvo)
+{
+    CtkDropDownMenu *dmenu =
+        CTK_DROP_DOWN_MENU(ctk_gvo->output_video_format_menu);
+
+    g_signal_handlers_block_by_func
+        (G_OBJECT(dmenu),
+         G_CALLBACK(output_video_format_ui_changed),
+         (gpointer) ctk_gvo);
+
+    fill_output_video_format_menu(ctk_gvo);
+   
+    ctk_drop_down_menu_set_current_value
+        (CTK_DROP_DOWN_MENU(ctk_gvo->output_video_format_menu),
+         ctk_gvo->output_video_format);
+
+    gtk_widget_show_all(GTK_WIDGET(dmenu));
+
+    g_signal_handlers_unblock_by_func
+        (G_OBJECT(dmenu),
+         G_CALLBACK(output_video_format_ui_changed),
+         (gpointer) ctk_gvo);
+
+    update_gvo_sensitivity(ctk_gvo);
+
+} /* rebuild_output_video_format_menu() */
+
+
+
+/*
+ * fill_output_data_format_menu() - Populates the output data format menu.
+ */
+
+static void fill_output_data_format_menu(CtkGvo *ctk_gvo)
+{
+    int i;
+    CtkDropDownMenu *dmenu =
+        CTK_DROP_DOWN_MENU(ctk_gvo->output_data_format_menu);
+    GtkWidget *label;
+    gboolean valid;
+    gchar *str;
+   
+    ctk_drop_down_menu_reset(CTK_DROP_DOWN_MENU(dmenu));
+
+    for (i = 0; dataFormatNames[i].name; i++) {
+        valid = ctk_gvo_data_format_valid(dataFormatNames[i].format);
+        if (!valid &&
+            (ctk_gvo->output_data_format != dataFormatNames[i].format)) {
+            continue;
+        }
+
+        if (valid) {
+            str = (gchar *)dataFormatNames[i].name;
+        } else {
+            str = g_strconcat(dataFormatNames[i].name,
+                              " - Invalid for Clone Mode", NULL);
+        }
+
+        label = ctk_drop_down_menu_append_item(dmenu, str,
+                                               dataFormatNames[i].format);
+        if (str != dataFormatNames[i].name) {
+            g_free(str);
+        }
+
+        gtk_widget_set_sensitive(label, (valid ? TRUE : FALSE));
+    }
+
+} /* fill_output_data_format_menu() */
+
+
+
+/*
+ * rebuild_output_data_format_menu() - Reconsutrcts the output data format
+ * menu.
+ */
+
+static void rebuild_output_data_format_menu(CtkGvo *ctk_gvo)
+{
+    CtkDropDownMenu *dmenu =
+        CTK_DROP_DOWN_MENU(ctk_gvo->output_data_format_menu);
+
+    g_signal_handlers_block_by_func
+        (G_OBJECT(dmenu),
+         G_CALLBACK(output_data_format_ui_changed),
+         (gpointer) ctk_gvo);
+
+    fill_output_data_format_menu(ctk_gvo);
+   
+    ctk_drop_down_menu_set_current_value
+        (CTK_DROP_DOWN_MENU(ctk_gvo->output_data_format_menu),
+         ctk_gvo->output_data_format);
+
+    gtk_widget_show_all(GTK_WIDGET(dmenu));
+
+    g_signal_handlers_unblock_by_func
+        (G_OBJECT(dmenu),
+         G_CALLBACK(output_data_format_ui_changed),
+         (gpointer) ctk_gvo);
+
+    update_gvo_sensitivity(ctk_gvo);
+
+} /* rebuild_output_data_format_menu() */
+
 
 
 
@@ -1158,6 +1146,7 @@
 {
     gint val;
     ReturnStatus ret;
+    NVCTRLAttributeValidValuesRec valid;
 
 
     /* Check if this screen supports GVO */
@@ -1203,6 +1192,27 @@
         val = DEFAULT_OUTPUT_VIDEO_FORMAT;
     }
     ctk_gvo->output_video_format = val;
+    
+    /* Valid output video formats */
+
+    ret = NvCtrlGetValidAttributeValues(ctk_gvo->handle,
+                                        NV_CTRL_GVO_OUTPUT_VIDEO_FORMAT,
+                                        &valid);
+    if ((ret != NvCtrlSuccess) || (valid.type != ATTRIBUTE_TYPE_INT_BITS)) {
+        ctk_gvo->valid_output_video_format_mask[0] = 0;
+    } else {
+        ctk_gvo->valid_output_video_format_mask[0] = valid.u.bits.ints;
+    }
+    
+    ret = NvCtrlGetValidAttributeValues(ctk_gvo->handle,
+                                        NV_CTRL_GVO_OUTPUT_VIDEO_FORMAT2,
+                                        &valid);
+    
+    if ((ret != NvCtrlSuccess) || (valid.type != ATTRIBUTE_TYPE_INT_BITS)) {
+        ctk_gvo->valid_output_video_format_mask[1] = 0;
+    } else {
+        ctk_gvo->valid_output_video_format_mask[1] = valid.u.bits.ints;
+    }
 
     /* Output data format */
 
@@ -1324,14 +1334,31 @@
                                            gpointer user_data)
 {
     CtkGvo *ctk_gvo = CTK_GVO(user_data);
+    guint was_valid;
+
+    was_valid = ctk_gvo_video_format_valid(ctk_gvo,
+                                           ctk_gvo->output_video_format);
 
     ctk_gvo->output_video_format = ctk_drop_down_menu_get_current_value(menu);
-    ctk_gvo->output_video_format_valid = TRUE;
+
+    if (ctk_gvo_video_format_valid(ctk_gvo, ctk_gvo->output_video_format) !=
+        GVO_VIDEO_FORMAT_VALID) {
+        /* Video format is invalid, don't set it */
+        update_gvo_sensitivity(ctk_gvo);
+        return;
+    }
 
     NvCtrlSetAttribute(ctk_gvo->handle,
                        NV_CTRL_GVO_OUTPUT_VIDEO_FORMAT,
                        ctk_gvo->output_video_format);
 
+    /* Rebuild menu to remove previously invalid entry */
+    if (was_valid != GVO_VIDEO_FORMAT_VALID) {
+        rebuild_output_video_format_menu(ctk_gvo);
+    }
+
+    update_gvo_sensitivity(ctk_gvo);
+
     post_output_video_format_changed(ctk_gvo);
     
 } /* output_video_format_ui_changed() */
@@ -1347,13 +1374,29 @@
                                           gpointer user_data)
 {
     CtkGvo *ctk_gvo = CTK_GVO(user_data);
-    
+    gboolean was_valid;
+
+
+    was_valid = ctk_gvo_data_format_valid(ctk_gvo->output_data_format);
+
     ctk_gvo->output_data_format = ctk_drop_down_menu_get_current_value(menu);
-    ctk_gvo->output_data_format_valid = TRUE;
+
+    if (!ctk_gvo_data_format_valid(ctk_gvo->output_data_format)) {
+        /* Data format is invalid, don't set it */
+        update_gvo_sensitivity(ctk_gvo);
+        return;
+    }
     
     NvCtrlSetAttribute(ctk_gvo->handle, NV_CTRL_GVO_DATA_FORMAT,
                        ctk_gvo->output_data_format);
-    
+
+    /* Rebuild menu to remove previously invalid entry */
+    if (!was_valid) {
+        rebuild_output_data_format_menu(ctk_gvo);
+    }
+
+    update_gvo_sensitivity(ctk_gvo);
+
     post_output_data_format_changed(ctk_gvo);
     
 } /* output_data_format_ui_changed() */
@@ -1409,39 +1452,11 @@
     gint val;
 
     enabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
-    
-
-    /*
-     * When enabling clone mode, we must make sure that the output
-     * video format and output data format are something clone mode
-     * can support.
-     */
-
-    if (enabled) {
-        if (!ctk_gvo->output_video_format_valid) {
-            val = ctk_drop_down_menu_get_current_value
-                (CTK_DROP_DOWN_MENU(ctk_gvo->output_video_format_menu));
-            ctk_gvo->output_video_format = val;
-            ctk_gvo->output_video_format_valid = TRUE;
-            NvCtrlSetAttribute(ctk_gvo->handle,
-                               NV_CTRL_GVO_OUTPUT_VIDEO_FORMAT,
-                               ctk_gvo->output_video_format);
-        }
-        if (!ctk_gvo->output_data_format_valid) {
-            val = ctk_drop_down_menu_get_current_value
-                (CTK_DROP_DOWN_MENU(ctk_gvo->output_data_format_menu));
-            ctk_gvo->output_data_format = val;
-            ctk_gvo->output_data_format_valid = TRUE;
-            NvCtrlSetAttribute(ctk_gvo->handle,
-                               NV_CTRL_GVO_DATA_FORMAT,
-                               val);
-        }
-    }
 
     if (enabled) val = NV_CTRL_GVO_DISPLAY_X_SCREEN_ENABLE;
     else         val = NV_CTRL_GVO_DISPLAY_X_SCREEN_DISABLE;
     NvCtrlSetAttribute(ctk_gvo->handle, NV_CTRL_GVO_DISPLAY_X_SCREEN, val);
-    
+
     /*
      * XXX NV_CTRL_GVO_DISPLAY_X_SCREEN can silently fail if GLX
      * locked GVO output for use by pbuffer(s).  Check that the
@@ -1663,6 +1678,8 @@
 static void update_gvo_sensitivity(CtkGvo *ctk_gvo)
 {
     gboolean sensitive;
+    guint video_format_valid;
+    gboolean data_format_valid;
 
     sensitive = ((ctk_gvo->lock_owner == NV_CTRL_GVO_LOCK_OWNER_NONE) ||
                  (ctk_gvo->lock_owner == NV_CTRL_GVO_LOCK_OWNER_CLONE));
@@ -1674,17 +1691,23 @@
         /* Video & data formats */
         
         sensitive = (ctk_gvo->lock_owner == NV_CTRL_GVO_LOCK_OWNER_NONE);
+        gtk_widget_set_sensitive(ctk_gvo->output_video_format_menu, sensitive);
         gtk_widget_set_sensitive(ctk_gvo->output_data_format_menu, sensitive);
         
-        sensitive = (sensitive && ctk_gvo->has_output_video_formats);
-        gtk_widget_set_sensitive(ctk_gvo->output_video_format_menu, sensitive);
-
         /* Enable/Disable clone mode button */
 
+        video_format_valid =
+            ctk_gvo_video_format_valid(ctk_gvo, ctk_gvo->output_video_format);
+
+        data_format_valid =
+            ctk_gvo_data_format_valid(ctk_gvo->output_data_format);
+
         sensitive = 
+            (ctk_gvo->lock_owner == NV_CTRL_GVO_LOCK_OWNER_CLONE) ||
             ((ctk_gvo->lock_owner == NV_CTRL_GVO_LOCK_OWNER_NONE) &&
-             ctk_gvo->has_output_video_formats) ||
-            (ctk_gvo->lock_owner == NV_CTRL_GVO_LOCK_OWNER_CLONE);
+             (video_format_valid == GVO_VIDEO_FORMAT_VALID) &&
+             data_format_valid);
+            
         gtk_widget_set_sensitive(ctk_gvo->toggle_clone_mode_button, sensitive);
     }
 
@@ -1695,7 +1718,7 @@
 /**** Event Handlers *********************************************************/
 
 /*
- * gvo_event_received(() - Handles GVO NV-CONTROL events.
+ * gvo_event_received() - Handles GVO NV-CONTROL events.
  */
 
 static void gvo_event_received(GtkObject *object,
@@ -1715,53 +1738,21 @@
     case NV_CTRL_GVO_OUTPUT_VIDEO_FORMAT:
         widget = ctk_gvo->output_video_format_menu;
         
-        g_signal_handlers_block_by_func
-            (G_OBJECT(widget),
-             G_CALLBACK(output_video_format_ui_changed),
-             (gpointer) ctk_gvo);
-        
         ctk_gvo->output_video_format = value;
-        validate_output_video_format(ctk_gvo);
-       
-        /* Update the dropdown with a reasonable value */
-        if (!ctk_gvo->output_video_format_valid) {
-            value = get_first_available_output_video_format(ctk_gvo);
-        }
-        ctk_drop_down_menu_set_current_value
-            (CTK_DROP_DOWN_MENU(widget), value);
+
+        rebuild_output_video_format_menu(ctk_gvo);
 
         post_output_video_format_changed(ctk_gvo);
-
-        g_signal_handlers_unblock_by_func
-            (G_OBJECT(widget),
-             G_CALLBACK(output_video_format_ui_changed),
-             (gpointer) ctk_gvo);
         break;
         
     case NV_CTRL_GVO_DATA_FORMAT:
         widget = ctk_gvo->output_data_format_menu;
-        
-        g_signal_handlers_block_by_func
-            (G_OBJECT(widget),
-             G_CALLBACK(output_data_format_ui_changed),
-             (gpointer) ctk_gvo);
 
         ctk_gvo->output_data_format = value;
-        validate_output_data_format(ctk_gvo);
-       
-        /* Update the dropdown with a reasonable value */
-        if (!ctk_gvo->output_data_format_valid) {
-            value = DEFAULT_OUTPUT_DATA_FORMAT;
-        }
-        ctk_drop_down_menu_set_current_value
-            (CTK_DROP_DOWN_MENU(widget), value);
+
+        rebuild_output_data_format_menu(ctk_gvo);
 
         post_output_data_format_changed(ctk_gvo);
-
-        g_signal_handlers_unblock_by_func
-            (G_OBJECT(widget),
-             G_CALLBACK(output_data_format_ui_changed),
-             (gpointer) ctk_gvo);
         break;
  
     case NV_CTRL_GVO_X_SCREEN_PAN_X:
@@ -1826,59 +1817,17 @@
                                    gpointer data)
 {
     CtkGvo *ctk_gvo = CTK_GVO(data);
-    CtkDropDownMenu *dmenu;
-    gint val;
 
     /* Cache the new screen dimensions */
 
     ctk_gvo->screen_width = ev->width;
     ctk_gvo->screen_height = ev->height;
 
-    /* Update the output video format drop down menu and reset the list */
-
-    dmenu = CTK_DROP_DOWN_MENU(ctk_gvo->output_video_format_menu);
-
-    /* Get the currently selected value */
-
-    val = ctk_drop_down_menu_get_current_value
-        (CTK_DROP_DOWN_MENU(ctk_gvo->output_video_format_menu));
-
-    /* Reset the drop down menu */
-
-    ctk_drop_down_menu_reset(dmenu);
-    
-    /* Fill the menu with the new valid video modes */
-
-    fill_output_video_format_menu(ctk_gvo);
-
-    /* Finalize and load the menu */
-
-    g_signal_handlers_block_by_func
-        (G_OBJECT(ctk_gvo->output_video_format_menu),
-         G_CALLBACK(output_video_format_ui_changed),
-         (gpointer) ctk_gvo);
-
-    ctk_drop_down_menu_finalize(dmenu);
-    
-    /* Set best valid output video format value possible.
-     * Revalidate here since the screen change could cause
-     * the current output video mode to now be valid.
-     */
-    
-    validate_output_video_format(ctk_gvo);
-    if (ctk_gvo->output_video_format_valid) {
-        val = ctk_gvo->output_video_format;
-    }
-
-    ctk_drop_down_menu_set_current_value
-        (CTK_DROP_DOWN_MENU(ctk_gvo->output_video_format_menu), val);
-
-    g_signal_handlers_unblock_by_func
-        (G_OBJECT(ctk_gvo->output_video_format_menu),
-         G_CALLBACK(output_video_format_ui_changed),
-         (gpointer) ctk_gvo);    
-
     /* Update UI */
+
+    rebuild_output_video_format_menu(ctk_gvo);
+
+    rebuild_output_data_format_menu(ctk_gvo);
 
     update_gvo_current_info(ctk_gvo);
 
@@ -1926,7 +1875,7 @@
         
         /* update the available output video formats */
         
-        trim_output_video_format_menu(ctk_gvo);    
+        rebuild_output_video_format_menu(ctk_gvo);    
     }
 
     return TRUE;
@@ -2010,7 +1959,12 @@
                   "Free-Running (see Synchronization Options page for more "
                   "information).", __clone_mode_video_format_help);
     ctk_help_heading(b, &i, "Data Format");
-    ctk_help_para(b, &i, __clone_mode_data_format_help);
+    ctk_help_para(b, &i, "%s Note that other NV-CONTROL clients are still "
+                  "able to select a data format that is not supported with "
+                  "clone mode.  In this case, the current data format will "
+                  "be shown as \"Invalid for Clone Mode\" and you will need "
+                  "to select a valid data format in order to enable Clone "
+                  "Mode.", __clone_mode_data_format_help);
     ctk_help_heading(b, &i, "X Offset");
     ctk_help_para(b, &i, __clone_mode_x_offset_help);
     ctk_help_heading(b, &i, "Y Offset");

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkgvo.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo.h (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkgvo.h Sun Jan 11 05:41:46 2009
@@ -75,25 +75,9 @@
     gint input_video_format;
 
     gint output_video_format;
-    gint valid_output_video_format_mask[2];
-    gboolean has_output_video_formats;      // XXX Show show non-valid as gray?
-    gboolean output_video_format_valid; /* If the output video format was
-                                           changed by another client to
-                                           something clone mode doesn't
-                                           support, we should ignore it,
-                                           but we should make sure that we
-                                           set the output_video_format when
-                                           we enable clone mode. */
-
-
+    guint valid_output_video_format_mask[2];
+    
     gint output_data_format;
-    gboolean output_data_format_valid; /* If the output data format was
-                                          changed by another client to
-                                          something clone mode doesn't
-                                          support, we should ignore it,
-                                          but we should make sure that we
-                                          set the output_data_format when
-                                          we enable clone mode. */
 
     gint screen_width;
     gint screen_height;

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkhelp.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkhelp.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkhelp.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkhelp.c Sun Jan 11 05:41:46 2009
@@ -28,7 +28,7 @@
 #include "msg.h"
 #include "ctkconstants.h"
 
-#include "ctkimage.h"
+#include "ctkbanner.h"
 
 #include <stdlib.h>
 

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkimagesliders.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkimagesliders.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkimagesliders.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkimagesliders.c Sun Jan 11 05:41:46 2009
@@ -336,9 +336,17 @@
         if (event_struct->availability == FALSE) {
             gtk_widget_set_sensitive(scale, FALSE);
             gtk_widget_hide(scale);
+            g_object_set_data(G_OBJECT(CTK_SCALE(scale)->gtk_adjustment),
+                              "attribute active",
+                              GINT_TO_POINTER(0));
         } else if (event_struct->availability == TRUE) {
+            setup_scale(ctk_image_sliders, NV_CTRL_IMAGE_SHARPENING,
+                        ctk_image_sliders->image_sharpening);
             gtk_widget_set_sensitive(scale, TRUE);
             gtk_widget_show(scale);
+            g_object_set_data(G_OBJECT(CTK_SCALE(scale)->gtk_adjustment),
+                              "attribute active",
+                              GINT_TO_POINTER(1));
         }
         break;
     default:

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkmultisample.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkmultisample.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkmultisample.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkmultisample.c Sun Jan 11 05:41:46 2009
@@ -31,7 +31,7 @@
 
 #include "ctkconfig.h"
 #include "ctkhelp.h"
-#include "ctkimage.h"
+#include "ctkbanner.h"
 
 
 /* local prototypes */
@@ -45,8 +45,6 @@
 
 static gchar *format_fsaa_value(GtkScale *scale, gdouble arg1,
                                 gpointer user_data);
-
-static const gchar *get_multisample_mode_name(gint multisample_mode);
 
 static GtkWidget *create_fsaa_setting_menu(CtkMultisample *ctk_multisample,
                                            CtkEvent *ctk_event,
@@ -203,6 +201,8 @@
     GtkWidget *check_button;
     GtkWidget *menu;
     GtkWidget *scale;
+    GtkObject *adjustment;
+    gint min, max;
     
     gint val, app_control, override, enhance, i;
     
@@ -317,9 +317,13 @@
 
             /* Antialiasing scale */
 
-            scale = gtk_hscale_new_with_range
-                (0, ctk_multisample->fsaa_translation_table_size - 1, 1);
-            gtk_range_set_value(GTK_RANGE(scale), val);
+            min = 0;
+            max = ctk_multisample->fsaa_translation_table_size - 1;
+
+            /* create the slider */
+            adjustment = gtk_adjustment_new(val, min, max, 1, 1, 0.0);
+            scale = gtk_hscale_new(GTK_ADJUSTMENT(adjustment));
+            gtk_adjustment_set_value(GTK_ADJUSTMENT(adjustment), val);
             
             gtk_scale_set_draw_value(GTK_SCALE(scale), TRUE);
             gtk_scale_set_value_pos(GTK_SCALE(scale), GTK_POS_TOP);
@@ -416,9 +420,13 @@
             
             /* Aniso scale */
 
-            scale = gtk_hscale_new_with_range(valid.u.range.min,
-                                              valid.u.range.max, 1);
-            gtk_range_set_value(GTK_RANGE(scale), val);
+            min = valid.u.range.min;
+            max = valid.u.range.max;
+
+            /* create the slider */
+            adjustment = gtk_adjustment_new(val, min, max, 1, 1, 0.0);
+            scale = gtk_hscale_new(GTK_ADJUSTMENT(adjustment));
+            gtk_adjustment_set_value(GTK_ADJUSTMENT(adjustment), val);
 
             gtk_scale_set_draw_value(GTK_SCALE(scale), TRUE);
             gtk_scale_set_value_pos(GTK_SCALE(scale), GTK_POS_TOP);
@@ -605,45 +613,9 @@
     if (val < 0) val = 0;
     val = ctk_multisample->fsaa_translation_table[val];
     
-    return g_strdup(get_multisample_mode_name(val));
+    return g_strdup(NvCtrlGetMultisampleModeName(val));
 
 } /* format_fsaa_value() */
-
-
-
-/*
- * get_multisample_mode_name() - lookup a string desribing the
- * NV-CONTROL constant.
- */
-
-static const gchar *get_multisample_mode_name(gint multisample_mode)
-{
-    static const gchar *mode_names[] = {
-        
-        "Off",                 /* FSAA_MODE_NONE  */
-        "2x Bilinear",         /* FSAA_MODE_2x    */
-        "2x Quincunx",         /* FSAA_MODE_2x_5t */
-        "1.5 x 1.5",           /* FSAA_MODE_15x15 */
-        "2 x 2 Supersampling", /* FSAA_MODE_2x2   */
-        "4x Bilinear",         /* FSAA_MODE_4x    */
-        "4x, 9-tap Gaussian",  /* FSAA_MODE_4x_9t */
-        "8x",                  /* FSAA_MODE_8x    */
-        "16x",                 /* FSAA_MODE_16x   */
-        "8xS",                 /* FSAA_MODE_8xS   */
-        "8xQ",                 /* FSAA_MODE_8xQ   */
-        "16xS",                /* FSAA_MODE_16xS  */
-        "16xQ",                /* FSAA_MODE_16xQ  */
-        "32xS"                 /* FSAA_MODE_32xS  */
-    };
-    
-    if ((multisample_mode < NV_CTRL_FSAA_MODE_NONE) ||
-        (multisample_mode > NV_CTRL_FSAA_MODE_MAX)) {
-        return "Unknown Multisampling";
-    }
-    
-    return mode_names[multisample_mode];
-    
-} /* get_multisample_mode_name() */
 
 
 
@@ -932,7 +904,7 @@
 {
     ctk_config_statusbar_message(ctk_multisample->ctk_config,
                                  "Antialiasing set to %s.",
-                                 get_multisample_mode_name(val));
+                                 NvCtrlGetMultisampleModeName(val));
     
 } /* post_fsaa_value_changed() */
 
@@ -1342,8 +1314,8 @@
         }
         
         if (ctk_multisample->active_attributes & __FSAA_2x) {
-            ctk_help_term(b, &i, "2x Bilinear");
-            ctk_help_para(b, &i, "This enables antialiasing using the 2x "
+            ctk_help_term(b, &i, "2x (2xMS)");
+            ctk_help_para(b, &i, "This enables antialiasing using the 2x (2xMS)"
                           "Bilinear mode.  This mode offers improved image "
                           "quality and high performance in OpenGL "
                           "applications.");
@@ -1375,8 +1347,8 @@
         }
 
         if (ctk_multisample->active_attributes & __FSAA_4x) {
-            ctk_help_term(b, &i, "4x Bilinear");
-            ctk_help_para(b, &i, "This enables antialiasing using the 4x "
+            ctk_help_term(b, &i, "4x (4xMS)");
+            ctk_help_para(b, &i, "This enables antialiasing using the 4x (4xMS)"
                           "Bilinearmode. This mode offers higher image "
                           "quality at the expense of some performance in "
                           "OpenGL applications.");
@@ -1391,53 +1363,53 @@
         }
 
         if (ctk_multisample->active_attributes & __FSAA_8x) {
-            ctk_help_term(b, &i, "8x");
+            ctk_help_term(b, &i, "8x (4xMS, 4xCS)");
             ctk_help_para(b, &i, "This enables antialiasing using the 8x "
-                          "mode.  This mode offers better image quality than "
-                          "the 4x mode.");
+                          "(4xMS, 4xCS) mode.  This mode offers better image "
+                          "quality than the 4x mode.");
         }
 
         if (ctk_multisample->active_attributes & __FSAA_8xS) {
-            ctk_help_term(b, &i, "8xS");
-            ctk_help_para(b, &i, "This enables antialiasing using the 8xS "
-                          "mode.  This mode offers better image quality than "
-                          "the 4x mode; 8xS is only available on Geforce "
-                          "(non-Quadro) FX or better GPUs.");
+            ctk_help_term(b, &i, "8x (4xSS, 2xMS)");
+            ctk_help_para(b, &i, "This enables antialiasing using the 8x "
+                          "(4xSS, 2xMS) mode.  This mode offers better image "
+                          "quality than the 4x mode; 8xS is only available on "
+                          "Geforce (non-Quadro) FX or better GPUs.");
         }
 
         if (ctk_multisample->active_attributes & __FSAA_16x) {
-            ctk_help_term(b, &i, "16x");
+            ctk_help_term(b, &i, "16x (4xMS, 12xCS)");
             ctk_help_para(b, &i, "This enables antialiasing using the 16x "
-                          "mode.  This mode offers better image quality than "
-                          "the 8x mode.");
+                          "(4xMS, 12xCS) mode.  This mode offers better image "
+                          "quality than the 8x mode.");
         }
 
         if (ctk_multisample->active_attributes & __FSAA_8xQ) {
-            ctk_help_term(b, &i, "8xQ");
-            ctk_help_para(b, &i, "This enables antialiasing using the 8xQ "
-                          "mode.  This mode offers better image quality than "
-                          "the 8x mode.");
+            ctk_help_term(b, &i, "8x (8xMS)");
+            ctk_help_para(b, &i, "This enables antialiasing using the 8x (8xMS) "
+                          "mode.  This mode offers better image "
+                          "quality than the 8x mode.");
         }
 
         if (ctk_multisample->active_attributes & __FSAA_16xS) {
-            ctk_help_term(b, &i, "16xS");
-            ctk_help_para(b, &i, "This enables antialiasing using the 16xS "
-                          "mode.  This mode offers better image quality than "
-                          "the 16x mode.");
+            ctk_help_term(b, &i, "16x (4xSS, 4xMS)");
+            ctk_help_para(b, &i, "This enables antialiasing using the 16x "
+                          "(4xSS, 4xMS) mode.  This mode offers better image "
+                          "quality than the 16x mode.");
         }
 
         if (ctk_multisample->active_attributes & __FSAA_16xQ) {
-            ctk_help_term(b, &i, "16xQ");
-            ctk_help_para(b, &i, "This enables antialiasing using the 16xQ "
-                          "mode.  This mode offers better image quality than "
-                          "the 16x mode.");
+            ctk_help_term(b, &i, "16x (8xMS, 8xCS)");
+            ctk_help_para(b, &i, "This enables antialiasing using the 16x "
+                          "(8xMS, 8xCS) mode.  This mode offers better image "
+                          "quality than the 16x mode.");
         }
 
         if (ctk_multisample->active_attributes & __FSAA_32xS) {
-            ctk_help_term(b, &i, "32xS");
-            ctk_help_para(b, &i, "This enables antialiasing using the 32xS "
-                          "mode.  This mode offers better image quality than "
-                          "the 16x mode.");
+            ctk_help_term(b, &i, "32x (4xSS, 8xMS)");
+            ctk_help_para(b, &i, "This enables antialiasing using the 32x "
+                          "(4xSS, 8xMS) mode.  This mode offers better image "
+                          "quality than the 16x mode.");
         }
     }
 

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkopengl.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkopengl.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkopengl.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkopengl.c Sun Jan 11 05:41:46 2009
@@ -25,9 +25,10 @@
 #include <gtk/gtk.h>
 #include <NvCtrlAttributes.h>
 
-#include "ctkimage.h"
+#include "ctkbanner.h"
 
 #include "ctkopengl.h"
+#include "ctkscale.h"
 
 #include "ctkconfig.h"
 #include "ctkhelp.h"
@@ -44,6 +45,8 @@
 
 static void post_xinerama_stereo_button_toggled(CtkOpenGL *, gboolean);
 
+static void post_stereo_eyes_exchange_button_toggled(CtkOpenGL *, gboolean);
+
 static void post_aa_line_gamma_toggled(CtkOpenGL *, gboolean);
 
 static void allow_flipping_button_toggled(GtkWidget *, gpointer);
@@ -51,6 +54,8 @@
 static void force_stereo_button_toggled (GtkWidget *, gpointer);
 
 static void xinerama_stereo_button_toggled (GtkWidget *, gpointer);
+
+static void stereo_eyes_exchange_button_toggled (GtkWidget *, gpointer);
 
 static void aa_line_gamma_toggled        (GtkWidget *, gpointer);
 
@@ -63,12 +68,26 @@
 static gchar *format_image_settings_value(GtkScale *scale, gdouble arg1,
                                          gpointer user_data);
 
+static void post_slider_value_changed(CtkOpenGL *ctk_opengl, gint val);
+
+static void aa_line_gamma_update_received(GtkObject *object,
+                                         gpointer arg1, gpointer user_data);
+
 static void post_image_settings_value_changed(CtkOpenGL *ctk_opengl, gint val);
 
 static void image_settings_value_changed(GtkRange *range, gpointer user_data);
 
 static void image_settings_update_received(GtkObject *object,
                                            gpointer arg1, gpointer user_data);
+
+static GtkWidget *create_slider(CtkOpenGL *ctk_opengl,
+                                GtkWidget *vbox,
+                                const gchar *name,
+                                const char *help,
+                                gint attribute,
+                                unsigned int bit);
+
+static void slider_changed(GtkAdjustment *adjustment, gpointer user_data);
 
 #define FRAME_PADDING 5
 
@@ -78,6 +97,17 @@
 "applied to OpenGL applications that are started after "
 "this option is set.";
 
+static const char *__aa_line_gamma_checkbox_help =
+"Enable the antialiased lines gamma correction checkbox to make the "
+"gamma correction slider active.";
+
+static const char *__aa_line_gamma_slider_help =
+"This option allows Gamma-corrected "
+"antialiased lines to consider variances in the color "
+"display capabilities of output devices when rendering "
+"smooth lines. This option is applied to OpenGL applications "
+"that are started after this option is set.";
+
 static const char *__image_settings_slider_help =
 "The Image Settings slider controls the image quality setting.";
 
@@ -90,7 +120,7 @@
 static const char *__xinerama_stereo_help =
  "Enabling this option causes OpenGL to allow "
 "stereo flipping on multiple X screens configured "
-"with Xinerama.  This option is applied immediately.";   
+"with Xinerama.  This option is applied immediately.";
 
 static const char *__show_sli_hud_help =
 "Enabling this option causes OpenGL to draw "
@@ -99,14 +129,21 @@
 "applications that are started after this option is "
 "set.";
 
-#define __SYNC_TO_VBLANK    (1 << 1)
-#define __ALLOW_FLIPPING    (1 << 2)
-#define __AA_LINE_GAMMA     (1 << 3)
-#define __FORCE_GENERIC_CPU (1 << 4)
-#define __FORCE_STEREO      (1 << 5)
-#define __IMAGE_SETTINGS    (1 << 6)
-#define __XINERAMA_STEREO   (1 << 7)
-#define __SHOW_SLI_HUD      (1 << 8)
+static const char *__stereo_eyes_exchange_help =
+"Enabling this option causes OpenGL to draw the left "
+"eye image in the right eye and vice versa for stereo "
+"drawables.  This option is applied immediately.";
+
+#define __SYNC_TO_VBLANK      (1 << 1)
+#define __ALLOW_FLIPPING      (1 << 2)
+#define __AA_LINE_GAMMA_VALUE (1 << 3)
+#define __AA_LINE_GAMMA       (1 << 4)
+#define __FORCE_GENERIC_CPU   (1 << 5)
+#define __FORCE_STEREO        (1 << 6)
+#define __IMAGE_SETTINGS      (1 << 7)
+#define __XINERAMA_STEREO     (1 << 8)
+#define __SHOW_SLI_HUD        (1 << 9)
+#define __STEREO_EYES_EXCHANGE (1 << 9)
 
 
 
@@ -150,11 +187,13 @@
     GtkWidget *vbox;
     GtkWidget *check_button;
     GtkWidget *scale;
+    GtkObject *adjustment;
 
     gint sync_to_vblank;
     gint flipping_allowed;
     gint force_stereo;
     gint xinerama_stereo;
+    gint stereo_eyes_exchange;
     NVCTRLAttributeValidValuesRec image_settings_valid;
     gint image_settings_value;
     gint aa_line_gamma;
@@ -164,8 +203,9 @@
     ReturnStatus ret_flipping_allowed;
     ReturnStatus ret_force_stereo;
     ReturnStatus ret_xinerama_stereo;
+    ReturnStatus ret_stereo_eyes_exchange;
     ReturnStatus ret_image_settings;
-    ReturnStatus ret_aa_line_gama;
+    ReturnStatus ret_aa_line_gamma;
     ReturnStatus ret_show_sli_hud;
 
     /* Query OpenGL settings */
@@ -182,6 +222,10 @@
 
     ret_xinerama_stereo =
         NvCtrlGetAttribute(handle, NV_CTRL_XINERAMA_STEREO, &xinerama_stereo);
+
+    ret_stereo_eyes_exchange =
+        NvCtrlGetAttribute(handle, NV_CTRL_STEREO_EYES_EXCHANGE,
+                           &stereo_eyes_exchange);
 
     ret_image_settings =
         NvCtrlGetValidAttributeValues(handle, NV_CTRL_IMAGE_SETTINGS,
@@ -195,8 +239,8 @@
         ret_image_settings = NvCtrlError;
     }
 
-    ret_aa_line_gama = NvCtrlGetAttribute(handle, NV_CTRL_OPENGL_AA_LINE_GAMMA,
-                                          &aa_line_gamma);
+    ret_aa_line_gamma = NvCtrlGetAttribute(handle, NV_CTRL_OPENGL_AA_LINE_GAMMA,
+                                           &aa_line_gamma);
     ret_show_sli_hud = NvCtrlGetAttribute(handle, NV_CTRL_SHOW_SLI_HUD,
                                           &show_sli_hud);
 
@@ -205,8 +249,9 @@
         (ret_flipping_allowed != NvCtrlSuccess) &&
         (ret_force_stereo != NvCtrlSuccess) &&
         (ret_xinerama_stereo != NvCtrlSuccess) &&
+        (ret_stereo_eyes_exchange != NvCtrlSuccess) &&
         (ret_image_settings != NvCtrlSuccess) &&
-        (ret_aa_line_gama != NvCtrlSuccess) &&
+        (ret_aa_line_gamma != NvCtrlSuccess) &&
         (ret_show_sli_hud != NvCtrlSuccess)) {
         return NULL;
     }
@@ -368,6 +413,34 @@
         ctk_opengl->xinerama_stereo_button = check_button;
     }
 
+    if (ret_stereo_eyes_exchange == NvCtrlSuccess) {
+
+        label = gtk_label_new("Exchange Stereo Eyes");
+    
+        check_button = gtk_check_button_new();
+        gtk_container_add(GTK_CONTAINER(check_button), label);
+    
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button),
+                                     stereo_eyes_exchange);
+
+        gtk_box_pack_start(GTK_BOX(vbox), check_button, FALSE, FALSE, 0);
+
+        g_signal_connect(G_OBJECT(check_button), "toggled",
+                     G_CALLBACK(stereo_eyes_exchange_button_toggled),
+                     (gpointer) ctk_opengl);
+
+        g_signal_connect(G_OBJECT(ctk_event),
+                     CTK_EVENT_NAME(NV_CTRL_STEREO_EYES_EXCHANGE),
+                     G_CALLBACK(value_changed), (gpointer) ctk_opengl);
+
+        ctk_config_set_tooltip(ctk_config, check_button,
+                               __stereo_eyes_exchange_help);
+    
+        ctk_opengl->active_attributes |= __STEREO_EYES_EXCHANGE;
+    
+        ctk_opengl->stereo_eyes_exchange_button = check_button;
+    }
+
     /*
      * Image Quality settings.
      */
@@ -381,9 +454,13 @@
         gtk_container_set_border_width(GTK_CONTAINER(hbox), FRAME_PADDING);
         gtk_container_add(GTK_CONTAINER(frame), hbox);
 
-        scale = gtk_hscale_new_with_range(image_settings_valid.u.range.min,
-                                          image_settings_valid.u.range.max, 1);
-        gtk_range_set_value(GTK_RANGE(scale), image_settings_value);
+        /* create the slider */
+        adjustment = gtk_adjustment_new(image_settings_value,
+                                        image_settings_valid.u.range.min,
+                                        image_settings_valid.u.range.max,
+                                        1, 1, 0.0);
+        scale = gtk_hscale_new(GTK_ADJUSTMENT(adjustment));
+        gtk_adjustment_set_value(GTK_ADJUSTMENT(adjustment), image_settings_value);
 
         gtk_scale_set_draw_value(GTK_SCALE(scale), TRUE);
         gtk_scale_set_value_pos(GTK_SCALE(scale), GTK_POS_TOP);
@@ -430,7 +507,7 @@
      * NV_CTRL_OPENGL_AA_LINE_GAMMA
      */
 
-    if (ret_aa_line_gama == NvCtrlSuccess) {
+    if (ret_aa_line_gamma == NvCtrlSuccess) {
         label = gtk_label_new("Enable gamma correction for antialiased lines");
 
         check_button = gtk_check_button_new();
@@ -451,14 +528,26 @@
                          G_CALLBACK(value_changed), (gpointer) ctk_opengl);
         
         ctk_config_set_tooltip(ctk_opengl->ctk_config,
-                               check_button, "Allow Gamma-corrected "
-                               "antialiased lines to consider variances in "
-                               "the color display capabilities of output "
-                               "devices when rendering smooth lines");
-
+                               check_button, __aa_line_gamma_checkbox_help);
+        
+        ctk_opengl->aa_line_gamma_button = check_button;
         ctk_opengl->active_attributes |= __AA_LINE_GAMMA;
-
-        ctk_opengl->aa_line_gamma_button = check_button;
+        
+        ctk_opengl->aa_line_gamma_scale =
+            create_slider(ctk_opengl, vbox, "Gamma correction",
+                          __aa_line_gamma_slider_help,
+                          NV_CTRL_OPENGL_AA_LINE_GAMMA_VALUE,
+                          __AA_LINE_GAMMA_VALUE);
+        
+        g_signal_connect(G_OBJECT(ctk_event),
+                         CTK_EVENT_NAME(NV_CTRL_OPENGL_AA_LINE_GAMMA_VALUE),
+                         G_CALLBACK(aa_line_gamma_update_received),
+                         (gpointer) ctk_opengl);
+
+        if (ctk_opengl->aa_line_gamma_scale)
+            gtk_widget_set_sensitive(ctk_opengl->aa_line_gamma_scale,
+                                     gtk_toggle_button_get_active
+                                     (GTK_TOGGLE_BUTTON(check_button)));
     }
     
     if (ret_show_sli_hud == NvCtrlSuccess) {
@@ -537,6 +626,14 @@
                                  enabled ? "allowed" : "not allowed");
 }
 
+static void post_stereo_eyes_exchange_button_toggled(CtkOpenGL *ctk_opengl, 
+                                                     gboolean enabled)
+{
+    ctk_config_statusbar_message(ctk_opengl->ctk_config,
+                                 "OpenGL Stereo Eyes Exchanged %s.",
+                                 enabled ? "enabled" : "disabled");
+}
+
 static void post_aa_line_gamma_toggled(CtkOpenGL *ctk_opengl, 
                                        gboolean enabled) 
 {
@@ -622,6 +719,22 @@
     post_xinerama_stereo_button_toggled(ctk_opengl, enabled);
 }
 
+static void stereo_eyes_exchange_button_toggled(GtkWidget *widget,
+                                                gpointer user_data)
+{
+    CtkOpenGL *ctk_opengl;
+    gboolean enabled;
+    
+    ctk_opengl = CTK_OPENGL(user_data);
+
+    enabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+
+    NvCtrlSetAttribute(ctk_opengl->handle, NV_CTRL_STEREO_EYES_EXCHANGE,
+                       enabled);
+
+    post_stereo_eyes_exchange_button_toggled(ctk_opengl, enabled);
+}
+
 static void aa_line_gamma_toggled(
     GtkWidget *widget,
     gpointer user_data
@@ -639,6 +752,8 @@
                              NV_CTRL_OPENGL_AA_LINE_GAMMA, enabled);
 
     if (ret != NvCtrlSuccess) return;
+    if (ctk_opengl->aa_line_gamma_scale)
+        gtk_widget_set_sensitive(ctk_opengl->aa_line_gamma_scale, enabled);
     post_aa_line_gamma_toggled(ctk_opengl, enabled);
 }
 
@@ -680,10 +795,18 @@
         func = G_CALLBACK(xinerama_stereo_button_toggled);
         post_xinerama_stereo_button_toggled(ctk_opengl, event_struct->value);
         break;
+    case NV_CTRL_STEREO_EYES_EXCHANGE:
+        button = GTK_TOGGLE_BUTTON(ctk_opengl->stereo_eyes_exchange_button);
+        func = G_CALLBACK(stereo_eyes_exchange_button_toggled);
+        post_stereo_eyes_exchange_button_toggled(ctk_opengl,
+                                                 event_struct->value);
+        break;
     case NV_CTRL_OPENGL_AA_LINE_GAMMA:
         button = GTK_TOGGLE_BUTTON(ctk_opengl->aa_line_gamma_button);
         func = G_CALLBACK(aa_line_gamma_toggled);
         post_aa_line_gamma_toggled(ctk_opengl, event_struct->value);
+        gtk_widget_set_sensitive(ctk_opengl->aa_line_gamma_scale,
+                                 event_struct->value);
         break;
     case NV_CTRL_SHOW_SLI_HUD:
         button = GTK_TOGGLE_BUTTON(ctk_opengl->show_sli_hud_button);
@@ -789,6 +912,122 @@
                                       (gpointer) ctk_opengl);
 
 } /* image_settings_update_received() */
+
+
+/*
+ * post_slider_value_changed() - helper function for
+ * aa_line_gamma_value_changed(); this does whatever work is necessary
+ * after the aa line gamma value has changed.
+ */
+
+static void post_slider_value_changed(CtkOpenGL *ctk_opengl, gint val)
+{
+    ctk_config_statusbar_message(ctk_opengl->ctk_config,
+                                 "OpenGL anti-aliased lines edge smoothness "
+                                 "changed to %d%%.",
+                                 val);
+
+} /* post_slider_value_changed() */
+
+
+/*
+ * slider_changed() -
+ */
+
+static void slider_changed(GtkAdjustment *adjustment, gpointer user_data)
+{
+    CtkOpenGL *ctk_opengl = CTK_OPENGL(user_data);
+    gint attribute, value;
+    user_data = g_object_get_data(G_OBJECT(adjustment), "opengl_attribute");
+    attribute = GPOINTER_TO_INT(user_data);
+    value = (gint) adjustment->value;
+    NvCtrlSetAttribute(ctk_opengl->handle, attribute, value);
+    post_slider_value_changed(ctk_opengl, value);
+} /* slider_changed() */
+
+
+/*
+ * aa_line_gamma_update_received() - this function is called when the
+ * NV_CTRL_OPENGL_AA_LINE_GAMMA_VALUE atribute is changed by another NV-CONTROL
+ * client.
+ */
+
+static void aa_line_gamma_update_received(GtkObject *object,
+                                         gpointer arg1, gpointer user_data)
+{
+    CtkEventStruct *event_struct = (CtkEventStruct *) arg1;
+    CtkOpenGL *ctk_opengl = CTK_OPENGL(user_data);
+    CtkScale *scale = CTK_SCALE(ctk_opengl->aa_line_gamma_scale);
+    GtkAdjustment *adjustment;
+    adjustment = GTK_ADJUSTMENT(scale->gtk_adjustment);
+    g_signal_handlers_block_by_func(G_OBJECT(adjustment),
+                                    G_CALLBACK(slider_changed),
+                                    (gpointer) ctk_opengl);
+
+    gtk_adjustment_set_value(GTK_ADJUSTMENT(adjustment),
+                             (gint)event_struct->value);
+    post_slider_value_changed(ctk_opengl, event_struct->value);
+
+    g_signal_handlers_unblock_by_func(G_OBJECT(adjustment),
+                                      G_CALLBACK(slider_changed),
+                                      (gpointer) ctk_opengl);
+
+} /* aa_line_gamma_update_received() */
+
+
+
+static GtkWidget *create_slider(CtkOpenGL *ctk_opengl,
+                                GtkWidget *vbox,
+                                const gchar *name,
+                                const char *help,
+                                gint attribute,
+                                unsigned int bit)
+{
+    GtkObject *adjustment;
+    GtkWidget *scale, *widget;
+    gint min, max, val, step_incr, page_incr;
+    NVCTRLAttributeValidValuesRec range;
+    ReturnStatus ret;
+    /* get the attribute value */
+
+    ret = NvCtrlGetAttribute(ctk_opengl->handle, attribute, &val);
+    if (ret != NvCtrlSuccess) return NULL;
+    /* get the range for the attribute */
+
+    NvCtrlGetValidAttributeValues(ctk_opengl->handle, attribute, &range);
+
+    if (range.type != ATTRIBUTE_TYPE_RANGE) return NULL;
+    min = range.u.range.min;
+    max = range.u.range.max;
+
+    step_incr = ((max) - (min))/10;
+    if (step_incr <= 0) step_incr = 1;
+    page_incr = ((max) - (min))/25;
+    if (page_incr <= 0) page_incr = 1;
+
+    /* create the slider */
+    adjustment = gtk_adjustment_new(val, min, max,
+                                    step_incr, page_incr, 0.0);
+
+    g_object_set_data(G_OBJECT(adjustment), "opengl_attribute",
+                      GINT_TO_POINTER(attribute));
+
+    g_signal_connect(G_OBJECT(adjustment), "value_changed",
+                     G_CALLBACK(slider_changed),
+                     (gpointer) ctk_opengl);
+
+    scale = ctk_scale_new(GTK_ADJUSTMENT(adjustment), name,
+                          ctk_opengl->ctk_config, G_TYPE_INT);
+
+    gtk_box_pack_start(GTK_BOX(vbox), scale, TRUE, TRUE, 0);
+
+    ctk_opengl->active_attributes |= bit;
+
+    widget = CTK_SCALE(scale)->gtk_scale;
+    ctk_config_set_tooltip(ctk_opengl->ctk_config, widget, help);
+
+    return scale;
+} /* create_slider() */
 
 
 GtkTextBuffer *ctk_opengl_create_help(GtkTextTagTable *table,
@@ -835,6 +1074,11 @@
         ctk_help_para(b, &i, __xinerama_stereo_help);
     }
     
+    if (ctk_opengl->active_attributes & __STEREO_EYES_EXCHANGE) {
+        ctk_help_heading(b, &i, "Exchange Stereo Eyes");
+        ctk_help_para(b, &i, __stereo_eyes_exchange_help);
+    }
+    
     if (ctk_opengl->active_attributes & __IMAGE_SETTINGS) {
         ctk_help_heading(b, &i, "Image Settings");
         ctk_help_para(b, &i, "This setting gives you full control over the "
@@ -871,13 +1115,13 @@
     if (ctk_opengl->active_attributes & __AA_LINE_GAMMA) {
         ctk_help_heading(b, &i, "Enable gamma correction for "
                          "antialiased lines");
-        ctk_help_para(b, &i, "Enabling this option allows Gamma-corrected "
-                      "antialiased lines to consider variances in the color "
-                      "display capabilities of output devices when rendering "
-                      "smooth lines.  This option is available only on "
-                      "Quadro FX or newer NVIDIA GPUs.  This option is "
-                      "applied to OpenGL applications that are started after "
-                      "this option is set.");
+        ctk_help_para(b, &i, __aa_line_gamma_checkbox_help );
+    }
+
+    if (ctk_opengl->active_attributes & __AA_LINE_GAMMA_VALUE) {
+        ctk_help_heading(b, &i, "Set gamma correction for "
+                         "antialiased lines");
+        ctk_help_para(b, &i, __aa_line_gamma_slider_help);
     }
 
     if (ctk_opengl->active_attributes & __SHOW_SLI_HUD) {

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkopengl.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkopengl.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkopengl.h (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkopengl.h Sun Jan 11 05:41:46 2009
@@ -62,8 +62,10 @@
     GtkWidget *allow_flipping_button;
     GtkWidget *force_stereo_button;
     GtkWidget *xinerama_stereo_button;
+    GtkWidget *stereo_eyes_exchange_button;
     GtkWidget *image_settings_scale;
     GtkWidget *aa_line_gamma_button;
+    GtkWidget *aa_line_gamma_scale;
     GtkWidget *show_sli_hud_button;
     
     unsigned int active_attributes;

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkpowermizer.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkpowermizer.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkpowermizer.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkpowermizer.c Sun Jan 11 05:41:46 2009
@@ -33,7 +33,7 @@
 #include "ctkutils.h"
 #include "ctkhelp.h"
 #include "ctkpowermizer.h"
-#include "ctkimage.h"
+#include "ctkbanner.h"
 
 
 

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkpowersavings.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkpowersavings.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkpowersavings.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkpowersavings.c Sun Jan 11 05:41:46 2009
@@ -25,7 +25,7 @@
 #include <gtk/gtk.h>
 #include <NvCtrlAttributes.h>
 
-#include "ctkimage.h"
+#include "ctkbanner.h"
 
 #include "ctkpowersavings.h"
 

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkrandr.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkrandr.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkrandr.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkrandr.c Sun Jan 11 05:41:46 2009
@@ -25,22 +25,23 @@
 #include <stdlib.h> /* malloc */
 #include <gtk/gtk.h>
 #include <gdk/gdkx.h>
+#include <gdk-pixbuf/gdk-pixdata.h>
+
 #include <X11/Xlib.h>
 #include <X11/extensions/Xrandr.h>
-
-#include "ctkimage.h"
-#include "rotation_orientation_horiz.h"
-#include "rotation_orientation_horiz_flipped.h"
-#include "rotation_orientation_vert.h"
-#include "rotation_orientation_vert_flipped.h"
-#include "rotate_left_on.h"
-#include "rotate_left_off.h"
-#include "rotate_right_on.h"
-#include "rotate_right_off.h"
 
 #include "ctkevent.h"
 #include "ctkhelp.h"
 #include "ctkrandr.h"
+#include "ctkbanner.h"
+
+#include "rotation_orientation_horz_pixdata.h"
+#include "rotation_orientation_vert_pixdata.h"
+
+#include "rotate_left_on_pixdata.h"
+#include "rotate_left_off_pixdata.h"
+#include "rotate_right_on_pixdata.h"
+#include "rotate_right_off_pixdata.h"
 
 
 GType ctk_randr_get_type(void)
@@ -96,19 +97,57 @@
 
 
 /*
- * Helper function used to load a pixbuf from an nv_image dump
- */
-static GdkPixbuf * load_pixbuf_from_nvimage(const nv_image_t *img)
-{
-    guint8 *image_buffer = decompress_image_data(img);
-    if ( !image_buffer )
-        return NULL;
-
-    return gdk_pixbuf_new_from_data(image_buffer, GDK_COLORSPACE_RGB,
-                                    FALSE, 8, img->width, img->height,
-                                    img->width * img->bytes_per_pixel,
-                                    free_decompressed_image, NULL);
-}
+ * Helper function to flip the contents of a pixbuf
+ * horizontally.  This is used to perform a 180 degree
+ * rotation + vertical flip.
+ */
+
+static void horz_flip_pixbuf(GdkPixbuf *pixbuf)
+{
+    guchar *pixels;
+    int width;
+    int height;
+    int rowstride;       // # bytes per row
+    int bits_per_sample; // # bits per color sample
+    int n_channels;      // # color samples per component
+
+    guchar *row;
+    guchar *head;
+    guchar *tail;
+    int x, y, c;
+    int component_size;
+
+    /* Get pixbuf information */
+    pixels = gdk_pixbuf_get_pixels(pixbuf);
+    width = gdk_pixbuf_get_width(pixbuf);
+    height = gdk_pixbuf_get_height(pixbuf);
+    rowstride = gdk_pixbuf_get_rowstride(pixbuf);
+    bits_per_sample = gdk_pixbuf_get_bits_per_sample(pixbuf);
+    n_channels = gdk_pixbuf_get_n_channels(pixbuf);
+
+    /* Compute the number of bytes per component (RGB/RGBA) */
+    component_size = n_channels * (bits_per_sample / 8);
+
+    /* Swap all components in all rows */
+    for (y = 0; y < height; y++) {
+
+        row = pixels + (y * rowstride);
+        head = row;
+        tail = row + (width - 1) * (component_size);
+
+        for (x = 0; x < width/2; x++) {
+
+            for (c = 0; c < component_size; c++) {
+                guchar h = head[c];
+                head[c] = tail[c];
+                tail[c] = h;
+            }
+            head += component_size;
+            tail -= component_size;
+        }
+    }
+ 
+} /* horz_flip_pixbuf() */
 
 
 
@@ -118,82 +157,50 @@
  */
 static GdkPixbuf *load_orientation_image_pixbuf(Rotation rotation)
 {
-    const nv_image_t *img_data;
-    int rotate_img_data;
-    guint8 *img_buffer;
-    guint8 *img_buffer_tmp;
+    const GdkPixdata *pixdata;
     GdkPixbuf *pixbuf;
+    gboolean tweak_img; /* Rotate and flip image */
 
 
     /* Figure out which image and rotation to use */
     switch ( rotation ) {
     case RR_Rotate_0: /* Normal */
-        img_data = &rotation_orientation_horiz_image;
-        rotate_img_data = 0;
+        pixdata = &rotation_orientation_horz_pixdata;
+        tweak_img = FALSE;
         break;
     case RR_Rotate_90: /* Left */
-        img_data = &rotation_orientation_vert_flipped_image;
-        rotate_img_data = 1;
+        pixdata = &rotation_orientation_vert_pixdata;
+        tweak_img = TRUE;
         break;
     case RR_Rotate_180: /* Inverted */
-        img_data = &rotation_orientation_horiz_flipped_image;
-        rotate_img_data = 1;
+        pixdata = &rotation_orientation_horz_pixdata;
+        tweak_img = TRUE;
         break;
     case RR_Rotate_270: /* Right */
-        img_data = &rotation_orientation_vert_image;
-        rotate_img_data = 0;
+        pixdata = &rotation_orientation_vert_pixdata;
+        tweak_img = FALSE;
         break;
     default: /* Unknown */
-        img_data = &rotation_orientation_horiz_image;
-        rotate_img_data = 0;
-        break;
-    }
-
-    /* Load image */
-    img_buffer = decompress_image_data(img_data);
-    if ( !img_buffer ) {
+        pixdata = &rotation_orientation_horz_pixdata;
+        tweak_img = FALSE;
+        break;
+    }
+
+
+    /* Generate the pixbuf from the pixdata */
+    pixbuf = gdk_pixbuf_from_pixdata(pixdata, TRUE, NULL);
+    if (!pixbuf) {
         return NULL;
     }
 
-    /* Image data needs to be rotated */
-    if ( rotate_img_data ) {
-        unsigned char *src;
-        unsigned char *dst;
-        unsigned int bppt, w, h; /* Used to rotate image */
-
-
-        img_buffer_tmp = img_buffer;
-        
-        img_buffer = (guint8 *) malloc( img_data->width * img_data->height *
-                                          img_data->bytes_per_pixel );
-        if ( !img_buffer ) {
-            free(img_buffer_tmp);
-            return NULL;
-        }
-
-        /* GTK 2.2 doesn't support this, so we do it ourselves. */
-        dst = (unsigned char *)img_buffer;
-        src = (unsigned char *)img_buffer_tmp;
-        src += (img_data->width * img_data->height -1) *
-               img_data->bytes_per_pixel;
-
-        for (h = 0; h < img_data->height; h++ ) {
-            for (w = 0; w < img_data->width; w++ ) {
-                for (bppt = 0; bppt < img_data->bytes_per_pixel; bppt++ ) {
-                    dst[bppt] = src[bppt];
-                }
-                dst += img_data->bytes_per_pixel;
-                src -= img_data->bytes_per_pixel;
-            }
-        }
-
-        free(img_buffer_tmp);
-    } /* Done - rotating image */
-
-    pixbuf = gdk_pixbuf_new_from_data(img_buffer, GDK_COLORSPACE_RGB, FALSE,
-                                      8, img_data->width, img_data->height,
-                                      img_data->width * img_data->bytes_per_pixel,
-                                      free_decompressed_image, NULL);
+
+    /* Image requires 180 degree rotation + vertical flip,
+     * this is the same as a horizontal flip.
+     */
+    if (tweak_img) {
+        horz_flip_pixbuf(pixbuf);
+    }
+
     return pixbuf;
  
 } /* load_orientation_image_pixbuf() */
@@ -463,16 +470,20 @@
 
     /* Preload button pixbufs & images */
     ctk_randr->button_pixbufs[CTKRANDR_BTN_ROTATE_LEFT_OFF] =
-        load_pixbuf_from_nvimage(&rotate_left_off_image);
+        gdk_pixbuf_from_pixdata(&rotate_left_off_pixdata,
+                                TRUE, NULL);
 
     ctk_randr->button_pixbufs[CTKRANDR_BTN_ROTATE_LEFT_ON] =
-        load_pixbuf_from_nvimage(&rotate_left_on_image);
+        gdk_pixbuf_from_pixdata(&rotate_left_on_pixdata,
+                                TRUE, NULL);
 
     ctk_randr->button_pixbufs[CTKRANDR_BTN_ROTATE_RIGHT_OFF] =
-        load_pixbuf_from_nvimage(&rotate_right_off_image);
+        gdk_pixbuf_from_pixdata(&rotate_right_off_pixdata,
+                                TRUE, NULL);
 
     ctk_randr->button_pixbufs[CTKRANDR_BTN_ROTATE_RIGHT_ON] =
-        load_pixbuf_from_nvimage(&rotate_right_on_image);
+        gdk_pixbuf_from_pixdata(&rotate_right_on_pixdata,
+                                TRUE, NULL);
 
     ctk_randr->rotate_left_button_image =
         GTK_IMAGE(gtk_image_new_from_pixbuf(ctk_randr->button_pixbufs[CTKRANDR_BTN_ROTATE_LEFT_OFF]) );

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkscreen.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkscreen.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkscreen.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkscreen.c Sun Jan 11 05:41:46 2009
@@ -31,13 +31,12 @@
 #include <X11/Xlib.h>
 #include <X11/extensions/Xrandr.h>
 
-
-#include "image.h"
+#include "parse.h"
 
 #include "ctkscreen.h"
 #include "ctkhelp.h"
 #include "ctkutils.h"
-#include "ctkimage.h"
+#include "ctkbanner.h"
 
 void ctk_screen_event_handler(GtkWidget *widget,
                               XRRScreenChangeNotifyEvent *ev,

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkserver.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkserver.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkserver.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkserver.c Sun Jan 11 05:41:46 2009
@@ -29,7 +29,7 @@
 #include <gdk/gdkx.h>
 #include <X11/Xlib.h>
 
-#include "ctkimage.h"
+#include "ctkbanner.h"
 
 #include "ctkserver.h"
 #include "ctkevent.h"

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkthermal.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkthermal.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkthermal.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkthermal.c Sun Jan 11 05:41:46 2009
@@ -28,7 +28,7 @@
 #include "ctkhelp.h"
 #include "ctkthermal.h"
 #include "ctkgauge.h"
-#include "ctkimage.h"
+#include "ctkbanner.h"
 
 #define FRAME_PADDING 10
 #define DEFAULT_UPDATE_THERMAL_INFO_TIME_INTERVAL 1000

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkui.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkui.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkui.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkui.c Sun Jan 11 05:41:46 2009
@@ -42,22 +42,16 @@
     return gdk_get_display();
 }
 
-void ctk_main(NvCtrlAttributeHandle **screen_handles, int num_screen_handles,
-              NvCtrlAttributeHandle **gpu_handles, int num_gpu_handles,
-              NvCtrlAttributeHandle **vcs_handles, int num_vcs_handles,
-              ParsedAttribute *p, ConfigProperties *conf)
+void ctk_main(ParsedAttribute *p, ConfigProperties *conf,
+              CtrlHandles *h)
 {
     int i, has_nv_control = FALSE;
     GList *list = NULL;
     list = g_list_append (list, gdk_pixbuf_from_pixdata(&nvidia_icon_pixdata, TRUE, NULL));
     gtk_window_set_default_icon_list(list);
-    ctk_window_new(screen_handles, num_screen_handles,
-                   gpu_handles, num_gpu_handles,
-                   vcs_handles, num_vcs_handles,
-                   p, conf);
-    
-    for (i = 0; i < num_screen_handles; i++) {
-        if (screen_handles[i]) {
+    ctk_window_new(p, conf, h);
+    for (i = 0; i < h->targets[X_SCREEN_TARGET].n; i++) {
+        if (h->targets[X_SCREEN_TARGET].t[i].h) {
             has_nv_control = TRUE;
             break;
         }

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkui.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkui.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkui.h (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkui.h Sun Jan 11 05:41:46 2009
@@ -33,10 +33,9 @@
 
 char *ctk_get_display(void);
 
-void ctk_main(NvCtrlAttributeHandle **, int,
-              NvCtrlAttributeHandle **, int,
-              NvCtrlAttributeHandle **, int,
-              ParsedAttribute*,
-              ConfigProperties*);
+void ctk_main(ParsedAttribute*,
+              ConfigProperties*,
+              CtrlHandles*);
+
 
 #endif /* __CTK_UI_H__ */

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkvcs.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkvcs.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkvcs.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkvcs.c Sun Jan 11 05:41:46 2009
@@ -24,18 +24,88 @@
 
 #include <stdlib.h> /* malloc */
 #include <stdio.h> /* snprintf */
+#include <string.h>
 
 #include <gtk/gtk.h>
 #include <gdk/gdkx.h>
 #include <X11/Xlib.h>
 
-#include "ctkimage.h"
-
+#include "ctkbanner.h"
+#include "msg.h"
 #include "ctkvcs.h"
 #include "ctkevent.h"
 #include "ctkhelp.h"
 #include "ctkutils.h"
 
+#define DEFAULT_UPDATE_VCS_INFO_TIME_INTERVAL 5000
+
+#define VCS_PSU_STATE_NORMAL                  0
+#define VCS_PSU_STATE_ABNORMAL                1
+
+static gboolean update_vcs_info(gpointer);
+static gboolean update_fan_status(CtkVcs *ctk_object);
+
+static void apply_fan_entry_token(char *token, char *value, void *data)
+{
+    FanEntryPtr pFanEntry = (FanEntryPtr) data;
+
+    if (!strcasecmp("fan", token)) {
+        pFanEntry->fan_number = atoi(value);
+    } else if (!strcasecmp("speed", token)) {
+        pFanEntry->fan_speed = atoi(value);
+    } else if (!strcasecmp("fail", token)) {
+        pFanEntry->fan_failed = atoi(value);
+    } else {
+        nv_warning_msg("Unknown Fan Entry token value pair: %s=%s",
+                       token, value);
+    }
+}
+
+static void apply_thermal_entry_token(char *token, char *value, void *data)
+{
+    ThermalEntryPtr pThermalEntry = (ThermalEntryPtr) data;
+
+    if (!strcasecmp("intake", token)) {
+        pThermalEntry->intake_temp = atoi(value);
+    } else if (!strcasecmp("exhaust", token)) {
+        pThermalEntry->exhaust_temp = atoi(value);
+    } else if (!strcasecmp("board", token)) {
+        pThermalEntry->board_temp = atoi(value);
+    } else {
+        nv_warning_msg("Unknown Thermal Entry token value pair: %s=%s",
+                       token, value);
+    }
+}
+
+static void apply_psu_entry_token(char *token, char *value, void *data)
+{
+    PSUEntryPtr pPSUEntry = (PSUEntryPtr) data;
+
+    if (!strcasecmp("current", token)) {
+        pPSUEntry->psu_current = atoi(value);
+    } else if (!strcasecmp("power", token)) {
+        if (!strcasecmp("unknown", value)) {
+            pPSUEntry->psu_power = -1;
+        } else {
+            pPSUEntry->psu_power = atoi(value);
+        }
+    } else if (!strcasecmp("voltage", token)) {
+        if (!strcasecmp("unknown", value)) {
+            pPSUEntry->psu_voltage = -1;
+        } else {
+            pPSUEntry->psu_voltage = atoi(value);
+        }
+    } else if (!strcasecmp("state", token)) {
+        if (!strcasecmp("normal", value)) {
+            pPSUEntry->psu_state = VCS_PSU_STATE_NORMAL;
+        } else {
+            pPSUEntry->psu_state = VCS_PSU_STATE_ABNORMAL;
+        }
+    } else {
+        nv_warning_msg("Unknown PSU Entry token value pair: %s=%s",
+                       token, value);
+    }
+}
 
 GType ctk_vcs_get_type(void)
 {
@@ -62,6 +132,307 @@
 }
 
 
+static gboolean update_vcs_info(gpointer user_data)
+{
+    char output_str[16];
+    char *temp_str = NULL;
+    char *psu_str = NULL;
+    CtkVcs *ctk_object = CTK_VCS(user_data);
+    ThermalEntry thermEntry;
+    PSUEntry psuEntry; 
+    gboolean high_perf_mode;
+
+    /* These queries should always succeed for Canoas 2.0 and above */
+    if ((NvCtrlGetAttribute(ctk_object->handle, NV_CTRL_VCSC_HIGH_PERF_MODE, 
+                            &high_perf_mode) != NvCtrlSuccess) ||
+        (NvCtrlGetStringAttribute(ctk_object->handle,
+                                  NV_CTRL_STRING_VCSC_TEMPERATURES,
+                                   &temp_str) != NvCtrlSuccess) ||
+        (NvCtrlGetStringAttribute(ctk_object->handle,
+                                  NV_CTRL_STRING_VCSC_PSU_INFO,
+                                  &psu_str) != NvCtrlSuccess)) {
+            return FALSE;
+    }
+
+    /* Extract out thermal and PSU entry tokens */
+
+    /* First Invalidate thermal and psu entries */
+    thermEntry.intake_temp  = -1;
+    thermEntry.exhaust_temp = -1;
+    thermEntry.board_temp   = -1;
+
+    psuEntry.psu_current    = -1;
+    psuEntry.psu_power      = -1;
+    psuEntry.psu_voltage    = -1;
+    psuEntry.psu_state      = -1;
+
+    if (temp_str) {
+        parse_token_value_pairs(temp_str, apply_thermal_entry_token, &thermEntry);
+    }
+    if (psu_str) {
+        parse_token_value_pairs(psu_str, apply_psu_entry_token, &psuEntry);
+    }
+
+    if ((thermEntry.intake_temp  != -1) &&
+        (thermEntry.exhaust_temp != -1) &&
+        (thermEntry.board_temp   != -1)) {
+        if (ctk_object->intake_temp) {
+            g_snprintf(output_str, 16, "%d C", thermEntry.intake_temp);
+            gtk_label_set_text(GTK_LABEL(ctk_object->intake_temp), output_str);
+        }
+        if (ctk_object->exhaust_temp) {
+            g_snprintf(output_str, 16, "%d C", thermEntry.exhaust_temp);
+            gtk_label_set_text(GTK_LABEL(ctk_object->exhaust_temp), output_str);
+        }
+        if (ctk_object->board_temp) {
+            g_snprintf(output_str, 16, "%d C", thermEntry.board_temp);
+            gtk_label_set_text(GTK_LABEL(ctk_object->board_temp), output_str);
+        }
+    }
+
+    if ((psuEntry.psu_current != -1) &&
+        (psuEntry.psu_state   != -1)) {
+        if (ctk_object->psu_current) {
+            g_snprintf(output_str, 16, "%d A", psuEntry.psu_current);
+            gtk_label_set_text(GTK_LABEL(ctk_object->psu_current), output_str);
+        }
+        if (ctk_object->psu_state) {
+            switch (psuEntry.psu_state) {
+            case VCS_PSU_STATE_NORMAL:
+                g_snprintf(output_str, 16, "Normal");
+                break;
+            case VCS_PSU_STATE_ABNORMAL:
+                g_snprintf(output_str, 16, "Abnormal");
+                break;
+            default:
+                g_snprintf(output_str, 16, "Unknown");
+                break;
+            }
+            gtk_label_set_text(GTK_LABEL(ctk_object->psu_state), output_str);
+        }
+    }
+    if (ctk_object->psu_power && psuEntry.psu_power != -1) {
+        g_snprintf(output_str, 16, "%d W", psuEntry.psu_power);
+        gtk_label_set_text(GTK_LABEL(ctk_object->psu_power), output_str);
+    }
+
+    if (ctk_object->psu_voltage && psuEntry.psu_voltage != -1) {
+        g_snprintf(output_str, 16, "%d V", psuEntry.psu_voltage);
+        gtk_label_set_text(GTK_LABEL(ctk_object->psu_voltage), output_str);
+    }
+
+    if (!update_fan_status(ctk_object)) {
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
+
+
+/** create_error_dialog() *********************************
+ *
+ * Creates a generic error message dialog widget
+ *
+ **/
+
+GtkWidget * create_error_dialog(CtkVcs *ctk_object)
+{
+    GtkWidget *dialog;
+    GtkWidget *image;
+    GtkWidget *hbox;
+    GtkWidget *vbox;
+    GtkWidget *label;
+
+    /* Display validation override confirmation dialog */
+    dialog = gtk_dialog_new_with_buttons
+        ("Cannot Apply",
+         GTK_WINDOW(gtk_widget_get_parent(GTK_WIDGET(ctk_object))),
+         GTK_DIALOG_MODAL |
+         GTK_DIALOG_DESTROY_WITH_PARENT,
+         NULL);
+
+    /* Main horizontal box */
+    hbox = gtk_hbox_new(FALSE, 5);
+    gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
+                       hbox, TRUE, TRUE, 5);
+
+    /* Pack the information icon */
+    image = gtk_image_new_from_stock(GTK_STOCK_DIALOG_INFO,
+                                     GTK_ICON_SIZE_DIALOG);
+    gtk_misc_set_alignment(GTK_MISC(image), 0.0f, 0.0f);
+    gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 5);
+    
+    /* Main vertical box */
+    vbox = gtk_vbox_new(FALSE, 5);
+    gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5);
+    
+
+    label = gtk_label_new(NULL);
+    gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.0f);
+    gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
+    ctk_object->error_dialog_label = label;
+
+    /* Action Buttons */
+    gtk_dialog_add_button(GTK_DIALOG(dialog), "OK",
+                          GTK_RESPONSE_ACCEPT);
+
+    gtk_widget_show_all(GTK_DIALOG(dialog)->vbox);
+
+    return dialog;
+
+} /* create_error_dialog() */
+
+
+static void vcs_perf_checkbox_toggled(GtkWidget *widget, gpointer user_data)
+{
+    CtkVcs *ctk_object = CTK_VCS(user_data);
+    gint enabled;
+    gint ret;
+
+    enabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+
+    ret = NvCtrlSetAttribute(ctk_object->handle, NV_CTRL_VCSC_HIGH_PERF_MODE, enabled);
+
+    if (ret != NvCtrlSuccess) {
+        if (ctk_object->error_dialog_label) {
+            gchar *str;
+            str = g_strdup_printf("Failed to %s High Performance mode!",
+                                  (enabled ? "enable" : "disable"));
+            gtk_label_set_text(GTK_LABEL(ctk_object->error_dialog_label), str);
+            gtk_window_set_resizable(GTK_WINDOW(ctk_object->error_dialog), FALSE);
+            gtk_window_set_transient_for
+                (GTK_WINDOW(ctk_object->error_dialog),
+                 GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(ctk_object))));
+            gtk_widget_show(ctk_object->error_dialog);
+            gtk_dialog_run(GTK_DIALOG(ctk_object->error_dialog));
+            gtk_widget_hide(ctk_object->error_dialog);
+        }
+        goto fail;
+    }
+    return;
+ fail:
+    g_signal_handlers_block_by_func(G_OBJECT(widget),
+                                    G_CALLBACK(vcs_perf_checkbox_toggled),
+                                    (gpointer) ctk_object);
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), !enabled);
+    gtk_widget_set_sensitive(widget, FALSE);
+    g_signal_handlers_unblock_by_func(G_OBJECT(widget),
+                                      G_CALLBACK(vcs_perf_checkbox_toggled),
+                                      (gpointer) ctk_object);
+}
+
+
+
+static gboolean update_fan_status(CtkVcs *ctk_object)
+{
+    gint ret;
+    char *fan_entry_str = NULL;
+    char *tokens;
+    GtkWidget *table;
+    GtkWidget *label;
+    FanEntry current_fan;
+    gchar output_str[16];
+    gint current_row;
+
+    if (!ctk_object->fan_status_container) {
+        return FALSE;
+    }
+    ret = NvCtrlGetStringAttribute(ctk_object->handle,
+                                   NV_CTRL_STRING_VCSC_FAN_STATUS,
+                                   &fan_entry_str);
+    if (ret != NvCtrlSuccess) {
+        return FALSE;
+    }
+
+    ctk_empty_container(ctk_object->fan_status_container);
+
+    /* Generate the new table */
+
+    table = gtk_table_new(1, 3, FALSE);
+    gtk_table_set_row_spacings(GTK_TABLE(table), 3);
+    gtk_table_set_col_spacings(GTK_TABLE(table), 15);
+    gtk_container_set_border_width(GTK_CONTAINER(table), 5);
+    gtk_box_pack_start(GTK_BOX(ctk_object->fan_status_container), 
+                       table, FALSE, FALSE, 0);
+
+
+    label = gtk_label_new("Fan Number");
+    gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+    gtk_widget_set_size_request(label, ctk_object->req.width, -1);
+    gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1,
+                     GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0);
+
+    label = gtk_label_new("Fan Speed");
+    gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+    gtk_table_attach(GTK_TABLE(table), label, 1, 2, 0, 1,
+                     GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0);
+
+    label = gtk_label_new("Fan Status");
+    gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+    gtk_table_attach(GTK_TABLE(table), label, 2, 3, 0, 1,
+                     GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0);
+
+
+    /* Parse string of fan entries and populate table */
+    current_row = 1;
+    for (tokens = strtok(fan_entry_str, ";");
+         tokens;
+         tokens = strtok(NULL, ";")) {
+
+        /* Invalidate fan entry */
+        current_fan.fan_number = -1;
+        current_fan.fan_speed = -1;
+        current_fan.fan_failed = -1;
+
+        parse_token_value_pairs(tokens, apply_fan_entry_token, &current_fan);
+
+        if ((current_fan.fan_number != -1) &&
+            (current_fan.fan_speed != -1) &&
+            (current_fan.fan_failed != -1)) {
+    
+            gtk_table_resize(GTK_TABLE(table), current_row + 1, 3);
+            g_snprintf(output_str, 16, "%d", current_fan.fan_number);
+            label = gtk_label_new(output_str);
+            gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+            gtk_widget_set_size_request(label, ctk_object->req.width, -1);
+            gtk_table_attach(GTK_TABLE(table), label, 0, 1, current_row,
+                             current_row + 1, GTK_FILL,
+                             GTK_FILL | GTK_EXPAND, 5, 0);
+ 
+            g_snprintf(output_str, 16, "%d rpm", current_fan.fan_speed);
+            label = gtk_label_new(output_str);
+            gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+            gtk_table_attach(GTK_TABLE(table), label, 1, 2, current_row,
+                             current_row + 1, GTK_FILL,
+                             GTK_FILL | GTK_EXPAND, 5, 0);
+
+
+            if (!current_fan.fan_failed) {
+                g_snprintf(output_str, 16, "Ok");
+            } else {
+                g_snprintf(output_str, 16, "Failed");
+            }
+            label = gtk_label_new(output_str);
+            gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+            gtk_table_attach(GTK_TABLE(table), label, 2, 3, current_row,
+                             current_row + 1, GTK_FILL,
+                             GTK_FILL | GTK_EXPAND, 5, 0);
+
+            current_row++;
+
+        } else {
+            nv_warning_msg("Incomplete Fan Entry (fan=%d, speed=%d, failFlag=%d)",
+                           current_fan.fan_number,
+                           current_fan.fan_speed,
+                           current_fan.fan_failed);
+        }
+    }
+    gtk_widget_show_all(table);
+    XFree(fan_entry_str);
+    return TRUE;
+}
+
 
 /*
  * CTK VCS (Visual Computing System) widget creation
@@ -75,9 +446,12 @@
     GtkWidget *label;
     GtkWidget *vbox;
     GtkWidget *hbox;
+    GtkWidget *event;
     GtkWidget *banner;
     GtkWidget *hseparator;
     GtkWidget *table;
+    GtkWidget *scrollWin;
+    GtkWidget *checkbutton;
 
     gchar *product_name;
     gchar *serial_number;
@@ -86,7 +460,15 @@
     gchar *firmware_version;
     gchar *hardware_version;
 
+    gint current_row;
+    gboolean high_perf_mode;
+
     ReturnStatus ret;
+    gchar *s;
+    char *psu_str = NULL;
+    PSUEntry psuEntry;
+
+    GtkWidget *vbox_scroll, *hbox_scroll;
 
     /*
      * get the static string data that we will display below
@@ -149,6 +531,7 @@
     /* cache the attribute handle */
 
     ctk_object->handle = handle;
+    ctk_object->ctk_config = ctk_config;
 
     /* set container properties of the object */
 
@@ -167,8 +550,40 @@
     vbox = gtk_vbox_new(FALSE, 5);
     gtk_box_pack_start(GTK_BOX(ctk_object), vbox, TRUE, TRUE, 0);
 
+    /* General purpose error dialog */
+    ctk_object->error_dialog = create_error_dialog(ctk_object);
+
+    if (NvCtrlGetAttribute(ctk_object->handle, NV_CTRL_VCSC_HIGH_PERF_MODE,
+                            &high_perf_mode) == NvCtrlSuccess) {
+
+        hbox = gtk_hbox_new(FALSE, 0);
+        checkbutton = gtk_check_button_new_with_label("Enable High Performance Mode");
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton), high_perf_mode);
+        g_signal_connect(G_OBJECT(checkbutton), "toggled", 
+                         G_CALLBACK(vcs_perf_checkbox_toggled),
+                         (gpointer) ctk_object);
+        gtk_box_pack_start(GTK_BOX(hbox), checkbutton, TRUE, TRUE, 0);
+        gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); 
+    }
+
+    /* Create the Scrolling Window */
+    scrollWin = gtk_scrolled_window_new(NULL, NULL);
+    hbox_scroll = gtk_hbox_new(FALSE, 0);
+    vbox_scroll = gtk_vbox_new(FALSE, 5);
+    event = gtk_event_box_new();
+    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollWin),
+                                   GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+    gtk_widget_modify_fg(event, GTK_STATE_NORMAL, &(event->style->text[GTK_STATE_NORMAL]));
+    gtk_widget_modify_bg(event, GTK_STATE_NORMAL, &(event->style->base[GTK_STATE_NORMAL]));
+    gtk_container_add(GTK_CONTAINER(event), hbox_scroll);
+    gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollWin),
+                                          event);
+    gtk_box_pack_start(GTK_BOX(hbox_scroll), vbox_scroll, TRUE, TRUE, 5);
+    gtk_widget_set_size_request(scrollWin, -1, 50);
+    gtk_box_pack_start(GTK_BOX(vbox), scrollWin, TRUE, TRUE, 0);
+
     hbox = gtk_hbox_new(FALSE, 0);
-    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(vbox_scroll), hbox, FALSE, FALSE, 0);
 
     label = gtk_label_new("VCS Information");
     gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
@@ -177,7 +592,7 @@
     gtk_box_pack_start(GTK_BOX(hbox), hseparator, TRUE, TRUE, 5);
 
     table = gtk_table_new(5, 2, FALSE);
-    gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(vbox_scroll), table, FALSE, FALSE, 0);
 
     gtk_table_set_row_spacings(GTK_TABLE(table), 3);
     gtk_table_set_col_spacings(GTK_TABLE(table), 15);
@@ -204,6 +619,188 @@
     g_free(firmware_version);
     g_free(hardware_version);
 
+
+    /* Query Canoas 2.0 specific details */
+    if ((NvCtrlGetAttribute(ctk_object->handle, NV_CTRL_VCSC_HIGH_PERF_MODE, 
+                            &high_perf_mode) == NvCtrlSuccess) && 
+        (NvCtrlGetStringAttribute(ctk_object->handle,
+                                  NV_CTRL_STRING_VCSC_PSU_INFO,
+                                  &psu_str)  == NvCtrlSuccess)) {
+        GtkWidget *vbox_padding;
+
+        /* Show the additonal queried information */
+
+
+        /* Populate scrolling window with data */
+        vbox_padding = gtk_vbox_new(FALSE, 0);
+        hbox = gtk_hbox_new(FALSE, 0);
+        gtk_box_pack_start(GTK_BOX(vbox_scroll), vbox_padding, FALSE, FALSE, 1);
+        gtk_box_pack_start(GTK_BOX(vbox_scroll), hbox, FALSE, FALSE, 0);
+        label = gtk_label_new("VCS Thermal Information");
+        gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+        hseparator = gtk_hseparator_new();
+        gtk_box_pack_start(GTK_BOX(hbox), hseparator, TRUE, TRUE, 5);
+
+        table = gtk_table_new(3, 2, FALSE);
+        gtk_box_pack_start(GTK_BOX(vbox_scroll), table, FALSE, FALSE, 0);
+
+        gtk_table_set_row_spacings(GTK_TABLE(table), 3);
+        gtk_table_set_col_spacings(GTK_TABLE(table), 15);
+
+        gtk_container_set_border_width(GTK_CONTAINER(table), 5);
+
+        label = gtk_label_new("Intake Temperature:");
+        gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+        gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1,
+                         GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0);
+
+        label = gtk_label_new(NULL);
+        gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+        gtk_table_attach(GTK_TABLE(table), label, 1, 2, 0, 1,
+                         GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0);
+        ctk_object->intake_temp = label;
+
+        label = gtk_label_new("Exhaust Temperature:");
+        /* This is the current largest label.  Get its size */
+        gtk_widget_size_request(label, &ctk_object->req);
+
+        gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+        gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2,
+                         GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0);
+
+        label = gtk_label_new(NULL);
+        gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+        gtk_table_attach(GTK_TABLE(table), label, 1, 2, 1, 2,
+                         GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0);
+        ctk_object->exhaust_temp = label;
+
+        label = gtk_label_new("Board Temperature:");
+        gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+        gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3,
+                         GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0);
+
+        label = gtk_label_new(NULL);
+        gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+        gtk_table_attach(GTK_TABLE(table), label, 1, 2, 2, 3,
+                         GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0);
+        ctk_object->board_temp = label;
+
+        /* Populate table for PSU information */
+
+        psuEntry.psu_current    = -1;
+        psuEntry.psu_power      = -1;
+        psuEntry.psu_voltage    = -1;
+        psuEntry.psu_state      = -1;
+
+        if (psu_str) {
+            parse_token_value_pairs(psu_str, apply_psu_entry_token, &psuEntry);
+        }
+
+        vbox_padding = gtk_vbox_new(FALSE, 0);
+        hbox = gtk_hbox_new(FALSE, 0);
+        gtk_box_pack_start(GTK_BOX(vbox_scroll), vbox_padding, FALSE, FALSE, 1);
+        gtk_box_pack_start(GTK_BOX(vbox_scroll), hbox, FALSE, FALSE, 0);
+        label = gtk_label_new("VCS Power Supply Unit Information");
+        gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+        hseparator = gtk_hseparator_new();
+        gtk_box_pack_start(GTK_BOX(hbox), hseparator, TRUE, TRUE, 5);
+
+        table = gtk_table_new(4, 2, FALSE);
+        gtk_box_pack_start(GTK_BOX(vbox_scroll), table, FALSE, FALSE, 0);
+        gtk_table_set_row_spacings(GTK_TABLE(table), 3);
+        gtk_table_set_col_spacings(GTK_TABLE(table), 15);
+        gtk_container_set_border_width(GTK_CONTAINER(table), 5);
+
+        label = gtk_label_new("PSU State:");
+        gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+        gtk_widget_set_size_request(label, ctk_object->req.width, -1);
+        gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1,
+                         GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0);
+
+
+        label = gtk_label_new(NULL);
+        gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+        gtk_table_attach(GTK_TABLE(table), label, 1, 2, 0, 1,
+                         GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0);
+        ctk_object->psu_state = label;
+
+        label = gtk_label_new("PSU Current:");
+        gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+        gtk_widget_set_size_request(label, ctk_object->req.width, -1);
+        gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2,
+                         GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0);
+
+
+        label = gtk_label_new(NULL);
+        gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+        gtk_table_attach(GTK_TABLE(table), label, 1, 2, 1, 2,
+                         GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0);
+        ctk_object->psu_current = label;
+
+        current_row = 2;
+
+        if (psuEntry.psu_power != -1) {
+            label = gtk_label_new("PSU Power:");
+            gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+            gtk_widget_set_size_request(label, ctk_object->req.width, -1);
+            gtk_table_attach(GTK_TABLE(table), label, 0, 1, 
+                             current_row, current_row + 1,
+                             GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0);
+
+            label = gtk_label_new(NULL);
+            gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+            gtk_table_attach(GTK_TABLE(table), label, 1, 2, 
+                             current_row, current_row + 1,
+                             GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0);
+            ctk_object->psu_power = label;
+            current_row++;
+        }
+
+        if (psuEntry.psu_voltage != -1) {
+            label = gtk_label_new("PSU Voltage:");
+            gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+            gtk_widget_set_size_request(label, ctk_object->req.width, -1);
+            gtk_table_attach(GTK_TABLE(table), label, 0, 1, 
+                             current_row, current_row + 1,
+                             GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0);
+
+            label = gtk_label_new(NULL);
+            gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+            gtk_table_attach(GTK_TABLE(table), label, 1, 2, 
+                             current_row, current_row + 1,
+                             GTK_FILL, GTK_FILL | GTK_EXPAND, 5, 0);
+            ctk_object->psu_voltage = label;
+        }
+
+        /* Create container for fan status table */
+
+        vbox_padding = gtk_vbox_new(FALSE, 0);
+        hbox = gtk_hbox_new(FALSE, 0);
+        gtk_box_pack_start(GTK_BOX(vbox_scroll), vbox_padding, FALSE, FALSE, 1);
+        gtk_box_pack_start(GTK_BOX(vbox_scroll), hbox, FALSE, FALSE, 0);
+        label = gtk_label_new("VCS Fan Status");
+        gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+        hseparator = gtk_hseparator_new();
+        gtk_box_pack_start(GTK_BOX(hbox), hseparator, TRUE, TRUE, 5);
+
+        hbox = gtk_hbox_new(FALSE, 0);
+        gtk_box_pack_start(GTK_BOX(vbox_scroll), hbox, FALSE, FALSE, 0);
+        ctk_object->fan_status_container = hbox;
+
+        /* Register a timer callback to update the dynamic information */
+        s = g_strdup_printf("VCS Monitor (VCS %d)",
+                            NvCtrlGetTargetId(ctk_object->handle));
+
+        ctk_config_add_timer(ctk_object->ctk_config,
+                             DEFAULT_UPDATE_VCS_INFO_TIME_INTERVAL,
+                             s,
+                             (GSourceFunc) update_vcs_info,
+                             (gpointer) ctk_object);
+        g_free(s);
+
+        update_vcs_info(ctk_object);
+    }
+
     gtk_widget_show_all(GTK_WIDGET(object));
     
     return GTK_WIDGET(object);
@@ -251,3 +848,23 @@
     return b;
 }
 
+void ctk_vcs_start_timer(GtkWidget *widget)
+{
+    CtkVcs *ctk_vcs = CTK_VCS(widget);
+
+    /* Start the VCS timer */
+    ctk_config_start_timer(ctk_vcs->ctk_config,
+                           (GSourceFunc) update_vcs_info,
+                           (gpointer) ctk_vcs);
+}
+
+void ctk_vcs_stop_timer(GtkWidget *widget)
+{
+    CtkVcs *ctk_vcs = CTK_VCS(widget);
+
+    /* Stop the VCS timer */
+    ctk_config_stop_timer(ctk_vcs->ctk_config,
+                          (GSourceFunc) update_vcs_info,
+                          (gpointer) ctk_vcs);
+}
+

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkvcs.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkvcs.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkvcs.h (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkvcs.h Sun Jan 11 05:41:46 2009
@@ -51,12 +51,46 @@
                                 CtkVcsClass))
 
 
+typedef struct FanEntry
+{
+    gint fan_number;
+    gint fan_speed;
+    gint fan_failed;
+} FanEntry, *FanEntryPtr;
+
+typedef struct ThermalEntry
+{
+    gint intake_temp;
+    gint exhaust_temp;
+    gint board_temp;
+} ThermalEntry, *ThermalEntryPtr;
+
+typedef struct PSUEntry
+{
+    gint psu_current;
+    gint psu_voltage;
+    gint psu_power;
+    gint psu_state;
+} PSUEntry, *PSUEntryPtr;
+
 typedef struct _CtkVcs
 {
     GtkVBox parent;
 
     CtkConfig *ctk_config;
     NvCtrlAttributeHandle *handle;
+
+    GtkWidget *intake_temp;
+    GtkWidget *exhaust_temp;
+    GtkWidget *board_temp;
+    GtkWidget *psu_state;
+    GtkWidget *psu_current;
+    GtkWidget *psu_voltage;
+    GtkWidget *psu_power;
+    GtkWidget *error_dialog_label;
+    GtkWidget *error_dialog;
+    GtkWidget *fan_status_container;
+    GtkRequisition req;
 
 } CtkVcs;
 
@@ -72,6 +106,9 @@
 GtkTextBuffer *ctk_vcs_create_help(GtkTextTagTable *,
                                     CtkVcs *);
 
+void ctk_vcs_start_timer(GtkWidget *widget);
+void ctk_vcs_stop_timer(GtkWidget *widget);
+
 G_END_DECLS
 
 #endif /* __CTK_VCS_H__ */

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkwindow.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkwindow.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkwindow.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkwindow.c Sun Jan 11 05:41:46 2009
@@ -43,6 +43,7 @@
 #include "ctkconfig.h"
 
 #include "ctkscreen.h"
+#include "ctkslimm.h"
 #include "ctkgpu.h"
 #include "ctkcolorcorrection.h"
 #include "ctkxvideo.h"
@@ -114,8 +115,6 @@
 static void quit_response(GtkWidget *, gint, gpointer);
 static void save_settings_and_exit(CtkWindow *);
 
-static void add_special_config_file_attributes(CtkWindow *ctk_window);
-
 static void add_display_devices(CtkWindow *ctk_window, GtkTreeIter *iter,
                                 NvCtrlAttributeHandle *handle,
                                 CtkEvent *ctk_event,
@@ -368,13 +367,8 @@
  * ctk_window_new() - create a new CtkWindow widget
  */
 
-GtkWidget *ctk_window_new(NvCtrlAttributeHandle **screen_handles,
-                          gint num_screen_handles,
-                          NvCtrlAttributeHandle **gpu_handles,
-                          gint num_gpu_handles,
-                          NvCtrlAttributeHandle **vcs_handles,
-                          gint num_vcs_handles,
-                          ParsedAttribute *p, ConfigProperties *conf)
+GtkWidget *ctk_window_new(ParsedAttribute *p, ConfigProperties *conf,
+                          CtrlHandles *h)
 {
     GObject *object;
     CtkWindow *ctk_window;
@@ -387,6 +381,9 @@
     GtkWidget *toggle_button;
     GtkWidget *statusbar;
     GtkWidget *eventbox;
+    GtkWidget *label;
+    GtkRequisition req;
+    gint width;
 
     GtkTreeViewColumn *column;
     GtkCellRenderer *renderer;
@@ -413,7 +410,7 @@
     
     /* create the config object */
 
-    ctk_window->ctk_config = CTK_CONFIG(ctk_config_new(conf));
+    ctk_window->ctk_config = CTK_CONFIG(ctk_config_new(conf, h));
     ctk_config = ctk_window->ctk_config;
     
     /* create the quit dialog */
@@ -553,7 +550,7 @@
 
     /* X Server info & configuration */
 
-    if (num_screen_handles) {
+    if (h->targets[X_SCREEN_TARGET].n) {
 
         NvCtrlAttributeHandle *screen_handle = NULL;
         GtkWidget *child;
@@ -565,9 +562,9 @@
          *     pages.
          */
 
-        for (i = 0 ; i < num_screen_handles; i++) {
-            if (screen_handles[i]) {
-                screen_handle = screen_handles[i];
+        for (i = 0 ; i < h->targets[X_SCREEN_TARGET].n; i++) {
+            if (h->targets[X_SCREEN_TARGET].t[i].h) {
+                screen_handle = h->targets[X_SCREEN_TARGET].t[i].h;
                 break;
             }
         }
@@ -591,7 +588,8 @@
                                                         CTK_DISPLAY_CONFIG(child)),
                          ctk_window, NULL, NULL,
                          "X Server Display Configuration",
-                         NULL, NULL, NULL);
+                         NULL, ctk_display_config_selected,
+                         ctk_display_config_unselected);
             }
         }
     }
@@ -599,11 +597,11 @@
 
     /* add the per-screen entries into the tree model */
 
-    for (i = 0; i < num_screen_handles; i++) {
+    for (i = 0; i < h->targets[X_SCREEN_TARGET].n; i++) {
 
         gchar *screen_name;
         GtkWidget *child;
-        NvCtrlAttributeHandle *screen_handle = screen_handles[i];
+        NvCtrlAttributeHandle *screen_handle = h->targets[X_SCREEN_TARGET].t[i].h;
 
         if (!screen_handle) continue;
 
@@ -635,6 +633,17 @@
                            CTK_WINDOW_CONFIG_FILE_ATTRIBUTES_FUNC_COLUMN,
                            NULL, -1);
 
+        if (h->targets[VCS_TARGET].n) {
+            /* SLI Mosaic Mode information */
+
+            child = ctk_slimm_new(screen_handle, ctk_event, ctk_config);
+            if (child) {
+                help = ctk_slimm_create_help(tag_table, "SLI Mosaic Mode Settings");
+                add_page(child, help, ctk_window, &iter, NULL,
+                         "SLI Mosaic Mode Settings", NULL, NULL, NULL);
+            }
+        }
+
         /* color correction */
 
         child = ctk_color_correction_new(screen_handle, ctk_config,
@@ -744,13 +753,13 @@
 
     /* add the per-gpu entries into the tree model */
 
-    for (i = 0; i < num_gpu_handles; i++) {
+    for (i = 0; i < h->targets[GPU_TARGET].n; i++) {
         
         gchar *gpu_product_name;
         gchar *gpu_name;
         GtkWidget *child;
         ReturnStatus ret;
-        NvCtrlAttributeHandle *gpu_handle = gpu_handles[i];
+        NvCtrlAttributeHandle *gpu_handle = h->targets[GPU_TARGET].t[i].h;
         UpdateDisplaysData *data;
 
 
@@ -780,7 +789,7 @@
         gtk_tree_store_append(ctk_window->tree_store, &iter, NULL);
         gtk_tree_store_set(ctk_window->tree_store, &iter,
                            CTK_WINDOW_LABEL_COLUMN, gpu_name, -1);
-        child = ctk_gpu_new(gpu_handle, screen_handles, ctk_event);
+        child = ctk_gpu_new(gpu_handle, h->targets[X_SCREEN_TARGET].t, ctk_event);
         gtk_object_ref(GTK_OBJECT(child));
         gtk_tree_store_set(ctk_window->tree_store, &iter,
                            CTK_WINDOW_WIDGET_COLUMN, child, -1);
@@ -846,13 +855,13 @@
 
     /* add the per-vcs (e.g. Quadro Plex) entries into the tree model */
 
-    for (i = 0; i < num_vcs_handles; i++) {
+    for (i = 0; i < h->targets[VCS_TARGET].n; i++) {
         
         gchar *vcs_product_name;
         gchar *vcs_name;
         GtkWidget *child;
         ReturnStatus ret;
-        NvCtrlAttributeHandle *vcs_handle = vcs_handles[i];
+        NvCtrlAttributeHandle *vcs_handle = h->targets[VCS_TARGET].t[i].h;
 
         if (!vcs_handle) continue;
 
@@ -890,6 +899,13 @@
         gtk_tree_store_set(ctk_window->tree_store, &iter,
                            CTK_WINDOW_CONFIG_FILE_ATTRIBUTES_FUNC_COLUMN,
                            NULL, -1);
+        gtk_tree_store_set(ctk_window->tree_store, &iter,
+                           CTK_WINDOW_SELECT_WIDGET_FUNC_COLUMN,
+                           ctk_vcs_start_timer, -1);
+        gtk_tree_store_set(ctk_window->tree_store, &iter,
+                           CTK_WINDOW_UNSELECT_WIDGET_FUNC_COLUMN,
+                           ctk_vcs_stop_timer, -1);
+
     }
 
     /*
@@ -897,9 +913,9 @@
      * frame lock
      */
 
-    for (i = 0; i < num_screen_handles; i++) {
-
-        NvCtrlAttributeHandle *screen_handle = screen_handles[i];
+    for (i = 0; i < h->targets[X_SCREEN_TARGET].n; i++) {
+
+        NvCtrlAttributeHandle *screen_handle = h->targets[X_SCREEN_TARGET].t[i].h;
 
         if (!screen_handle) continue;
         
@@ -953,6 +969,31 @@
     gtk_window_set_title(GTK_WINDOW(object), "NVIDIA X Server Settings");
     
     gtk_widget_show_all(GTK_WIDGET(object));
+
+
+    /* Set the minimum width of the tree view window to be something
+     * reasonable.  To do that, check the size of a label widget
+     * with a reasonably long string and limit the tree view scroll
+     * window's initial width to not extent past this.
+     */
+
+    label = gtk_label_new("XXXXXX Server Display ConfigurationXXXX");
+    gtk_widget_size_request(label, &req);
+    width = req.width;
+    gtk_widget_destroy(label);
+
+    /* Get the width of the tree view scroll window */
+    gtk_widget_size_request(sw, &req);
+
+    /* If the scroll window is too wide, make it slimmer and
+     * allow users to scroll horizontally (also allow resizing).
+     */
+    if ( width < req.width ) {
+        gtk_widget_set_size_request(sw, width, -1);
+        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
+                                       GTK_POLICY_AUTOMATIC,
+                                       GTK_POLICY_AUTOMATIC);
+    }
 
     return GTK_WIDGET(object);
 
@@ -1107,7 +1148,7 @@
  * saved to the config file.
  */
 
-static void add_special_config_file_attributes(CtkWindow *ctk_window)
+void add_special_config_file_attributes(CtkWindow *ctk_window)
 {
     GtkTreeModel *model = GTK_TREE_MODEL(ctk_window->tree_store);
     GtkTreeIter   iter;
@@ -1280,15 +1321,14 @@
             gtk_tree_selection_select_iter(tree_selection, &parent_iter);
         }
 
-        /* unref the page so we don't leak memory */
+        /* Remove the entry */
         gtk_tree_model_get(GTK_TREE_MODEL(ctk_window->tree_store), iter,
                            CTK_WINDOW_WIDGET_COLUMN, &widget, -1);
-        g_object_unref(widget);
-
-        /* XXX Call a widget-specific cleanup function? */
-
-        /* Remove the entry */
+       
         gtk_tree_store_remove(ctk_window->tree_store, iter);
+
+        /* unref the page so we don't leak memory */
+        g_object_unref(GTK_OBJECT(widget)); 
 
         data->num_displays--;
     }

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkwindow.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkwindow.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkwindow.h (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkwindow.h Sun Jan 11 05:41:46 2009
@@ -91,10 +91,10 @@
 };
 
 GType       ctk_window_get_type  (void) G_GNUC_CONST;
-GtkWidget*  ctk_window_new       (NvCtrlAttributeHandle**, gint,
-                                  NvCtrlAttributeHandle**, gint,
-                                  NvCtrlAttributeHandle**, gint,
-                                  ParsedAttribute *, ConfigProperties *conf);
+GtkWidget*  ctk_window_new       (ParsedAttribute *, ConfigProperties *conf,
+                                  CtrlHandles *h);
+
+void add_special_config_file_attributes(CtkWindow *ctk_window);
 
 G_END_DECLS
 

Modified: packages/nvidia-settings/trunk/src/gtk+-2.x/ctkxvideo.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/gtk%2B-2.x/ctkxvideo.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/gtk+-2.x/ctkxvideo.c (original)
+++ packages/nvidia-settings/trunk/src/gtk+-2.x/ctkxvideo.c Sun Jan 11 05:41:46 2009
@@ -26,7 +26,7 @@
 #include <gtk/gtk.h>
 #include "NvCtrlAttributes.h"
 
-#include "ctkimage.h"
+#include "ctkbanner.h"
 
 #include "ctkxvideo.h"
 #include "ctkscale.h"

Modified: packages/nvidia-settings/trunk/src/image_data/HOWTO-ADD-IMAGES
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/image_data/HOWTO-ADD-IMAGES?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/image_data/HOWTO-ADD-IMAGES (original)
+++ packages/nvidia-settings/trunk/src/image_data/HOWTO-ADD-IMAGES Sun Jan 11 05:41:46 2009
@@ -1,12 +1,23 @@
 
 If I have a png, how do I build it into nvidia-settings?
 
-    - run `gdk-pixbuf-csource --struct --name=foo_pixdata foo.png > foo_pixdata.h`
-    - convert the pixel_data array embedded in the foo_pixdata structure
-      to a stand-alone guint8 array (see existing images as a reference), add
-      it to the top of the header file and reference it in the structure.
-      *** TODO: this should be automated or folded into the first step somehow. ***
-    - add to the BannerArtworkType enum in image.h
+    - make sure you have the gdk-pixbuf-csource binary somewhere
+      in your path.
+
+    - run './png_to_c_header.sh foo.png' This will generate the foo_pixdata.h
+      header file that can then be included in the nvidia-settings source code.
+
+    - add a foo_pixdata.h entry to the .../image_data/Makefile.inc
+
+    (Also follow these next steps if this image is to be used in the banner)
+
+    - add to the BannerArtworkType enum in ctkbanner.h
+
     - include foo_pixdata.h in ctkbanner.c
+
     - add an entry to the ArtworkTable[] in ctkbanner.c:select_artwork()
-    - add an entry to the .../image_data/Makefile.inc
+
+
+NOTE: Regenerating all images can be done like so:
+
+	for file in `ls *.png`; do ./png_to_c_header.sh $file; done

Modified: packages/nvidia-settings/trunk/src/image_data/Makefile.inc
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/image_data/Makefile.inc?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/image_data/Makefile.inc (original)
+++ packages/nvidia-settings/trunk/src/image_data/Makefile.inc Sun Jan 11 05:41:46 2009
@@ -26,57 +26,53 @@
 # distribution
 #
 
-SRC += \
-	image.c
-
 EXTRA_DIST += \
-	Makefile.inc \
-	HOWTO-ADD-IMAGES \
-	image.h \
-	rotate_left_off.h \
-	rotate_left_on.h \
-	rotate_right_off.h \
-	rotate_right_on.h \
-	rotation_orientation_horiz_flipped.h \
-	rotation_orientation_horiz.h \
-	rotation_orientation_vert_flipped.h \
-	rotation_orientation_vert.h \
-	bnc_cable.h \
-	led_green.h \
-	led_red.h \
-	led_grey.h \
-	rj45_input.h \
-	rj45_output.h \
-	rj45_unused.h \
-	crt_pixdata.h \
-	dfp_pixdata.h \
-	tv_pixdata.h \
+	antialias_pixdata.h \
 	background_pixdata.h \
-	logo_pixdata.h \
-	nvidia_icon_pixdata.h \
-	antialias_pixdata.h \
-	thermal_pixdata.h \
-	x_pixdata.h \
 	background_tall_pixdata.h \
+	bnc_cable_pixdata.h \
 	bsd_pixdata.h \
 	clock_pixdata.h \
 	color_pixdata.h \
 	config_pixdata.h \
+	crt_pixdata.h \
 	cursor_shadow_pixdata.h \
+	dfp_pixdata.h \
 	display_config_pixdata.h \
 	framelock_pixdata.h \
 	glx_pixdata.h \
 	gpu_pixdata.h \
 	help_pixdata.h \
+	HOWTO-ADD-IMAGES \
+	led_green_pixdata.h \
+	led_grey_pixdata.h \
+	led_red_pixdata.h \
+	logo_pixdata.h \
 	logo_tall_pixdata.h \
+	Makefile.inc \
+	nvidia_icon_pixdata.h \
 	opengl_pixdata.h \
 	penguin_pixdata.h \
+	png_to_c_header.sh \
+	rj45_input_pixdata.h \
+	rj45_output_pixdata.h \
+	rj45_unused_pixdata.h \
+	rotate_left_off_pixdata.h \
+	rotate_left_on_pixdata.h \
+	rotate_right_off_pixdata.h \
+	rotate_right_on_pixdata.h \
+	rotation_orientation_horz_pixdata.h \
+	rotation_orientation_vert_pixdata.h \
 	rotation_pixdata.h \
 	sdi_pixdata.h \
+	sdi_shared_sync_bnc_pixdata.h \
+	slimm_pixdata.h \
 	solaris_pixdata.h \
+	thermal_pixdata.h \
+	tv_pixdata.h \
 	vcs_pixdata.h \
-	xvideo_pixdata.h \
-	sdi_shared_sync_bnc_pixdata.h
+	x_pixdata.h \
+	xvideo_pixdata.h
 
 dist_list::
 	@ echo $(SRC) $(EXTRA_DIST)

Modified: packages/nvidia-settings/trunk/src/image_data/logo_pixdata.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/image_data/logo_pixdata.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/image_data/logo_pixdata.h (original)
+++ packages/nvidia-settings/trunk/src/image_data/logo_pixdata.h Sun Jan 11 05:41:46 2009
@@ -448,7 +448,8 @@
   0x02,0x02,0x02,0x55,0x02,0x02,0x02,0x69,0x03,0x03,0x03,0x71,0x00,0x00,0x00,
   0x5b,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x1c,0x00,0x00,
   0x00,0x1a,0x00,0x00,0x00,0x33,0x02,0x02,0x02,0x66,0x03,0x03,0x03,0x73,0x03,
-  0x03,0x03,0x68,0x01,0x01,0x01,0x50,0x0a,0x0a,0x0a,0x6a,0x02,0x02,0x02,0x46,
+  0x03,0x03,0x68,0x01,0x01,0x01,0x50,0x0a,0x0a,0x0a,0x6a,0x02,0x02,0x02,0x46
+  
 };
 
 static const GdkPixdata logo_pixdata = {

Modified: packages/nvidia-settings/trunk/src/image_data/logo_tall_pixdata.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/image_data/logo_tall_pixdata.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/image_data/logo_tall_pixdata.h (original)
+++ packages/nvidia-settings/trunk/src/image_data/logo_tall_pixdata.h Sun Jan 11 05:41:46 2009
@@ -1542,7 +1542,8 @@
   0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0x00,
   0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0x00,
   0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0x00,
-  0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0x00,0xe6,0xff,0xff,0xff,0x00,
+  0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0x00,0xe6,0xff,0xff,0xff,0x00
+  
 };
 
 static const GdkPixdata logo_tall_pixdata = {

Modified: packages/nvidia-settings/trunk/src/image_data/nvidia_icon_pixdata.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/image_data/nvidia_icon_pixdata.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/image_data/nvidia_icon_pixdata.h (original)
+++ packages/nvidia-settings/trunk/src/image_data/nvidia_icon_pixdata.h Sun Jan 11 05:41:46 2009
@@ -1,417 +1,725 @@
 /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */
 
 static guint8 nvidia_icon_pixdata_pixel_data[] = {
-  "\377\0\0\0\0\377\0\0\0\0\377\0\0\0\0\377\0\0\0\0\377\0\0\0\0\377\0\0"
-  "\0\0\346\0\0\0\0\226\0\0\0\1\227\0\0\0\2\202\0\0\0\1\233\0\0\0\0\11\0"
-  "\0\0\3<[\4""8\244\325J\243\273\352d\245\273\352e\245\273\352e\246\275"
-  "\352j\246\277\352n\247\277\352o\247\202\277\352o\250\10\277\352p\251"
-  "\277\353q\252\300\353q\252\300\353r\252\300\353r\253\301\354s\254\301"
-  "\354r\255\301\354s\255\202\302\354t\256\12\302\354s\260\302\354s\261"
-  "\303\355t\261\303\355v\262\303\354v\262\303\354v\263\303\354w\263\303"
-  "\354x\263\304\355y\264\303\354x\265\202\304\354y\265\202\304\354y\266"
-  "\17\304\354z\266\304\354y\267\304\354z\267\304\354z\270\303\354y\270"
-  "\303\354y\271\304\354y\271\304\355y\272\303\355w\272\302\355t\273\303"
-  "\355t\273\302\356s\274\237\314N\263\16\24\1\14\0\0\0\1\232\0\0\0\0\3"
-  "\0\0\0\12""7T\1x\274\345r\377\202\331\377\225\377\6\331\377\226\377\332"
-  "\377\230\377\332\377\231\377\333\377\231\377\332\377\231\377\333\377"
-  "\231\377\215\333\377\232\377\4\333\377\233\377\334\377\233\377\333\377"
-  "\233\377\334\377\233\377\202\333\377\233\377\203\334\377\235\377\203"
-  "\334\377\234\377\203\335\377\236\377\202\334\377\235\377\203\333\377"
-  "\232\377\6\332\377\231\377\332\377\230\377\331\377\227\377\260\330g\370"
-  "\12\17\1!\0\0\0\4\231\0\0\0\0\7\0\0\0\1\0\0\0\21""1K\1\206\301\350z\377"
-  "\333\377\233\377\334\377\234\377\334\377\233\377\206\334\377\234\377"
-  "\206\334\377\235\377\2\334\377\236\377\335\377\236\377\202\334\377\236"
-  "\377\2\334\377\235\377\335\377\236\377\204\335\377\237\377\1\335\377"
-  "\236\377\207\335\377\237\377\1\335\377\240\377\204\335\377\237\377\1"
-  "\335\377\236\377\203\334\377\235\377\5\333\377\233\377\333\377\232\377"
-  "\266\334p\371\10\14\0""1\0\0\0\6\231\0\0\0\0\5\0\0\0\1\0\0\0\24/H\1\212"
-  "\306\353\201\377\335\377\237\377\206\335\377\240\377\202\335\377\241"
-  "\377\2\336\377\241\377\335\377\241\377\212\336\377\241\377\1\336\377"
-  "\242\377\202\336\377\241\377\202\335\377\241\377\202\336\377\242\377"
-  "\202\336\377\241\377\2\335\377\240\377\335\377\241\377\202\336\377\243"
-  "\377\3\336\377\242\377\335\377\241\377\335\377\240\377\203\335\377\237"
-  "\377\203\335\377\240\377\4\335\377\237\377\275\342y\371\10\14\0""4\0"
-  "\0\0\7\231\0\0\0\0\4\0\0\0\1\0\0\0\24/H\1\213\312\355\211\377\206\336"
-  "\377\243\377\3\336\377\244\377\336\377\243\377\336\377\244\377\203\337"
-  "\377\244\377\213\337\377\245\377\1\336\377\244\377\202\337\377\244\377"
-  "\3\337\377\246\377\337\377\244\377\336\377\244\377\202\336\377\243\377"
-  "\2\336\377\244\377\337\377\244\377\213\336\377\243\377\3\303\347\201"
-  "\371\10\13\0""5\0\0\0\7\231\0\0\0\0\14\0\0\0\1\0\0\0\24-E\1\213q\233"
-  "%\377y\243,\377{\247-\377\201\2544\377\212\265>\377\227\302K\377\251"
-  "\322^\377\277\344z\377\326\370\231\377\206\340\377\250\377\1\340\377"
-  "\251\377\203\340\377\250\377\203\340\377\251\377\210\340\377\250\377"
-  "\1\340\377\247\377\203\340\377\250\377\2\340\377\247\377\337\377\246"
-  "\377\204\337\377\245\377\1\336\377\244\377\202\337\377\244\377\202\336"
-  "\377\244\377\3\310\353\210\372\13\20\0""7\0\0\0\7\226\0\0\0\0\7\0\0\0"
-  "\1\1\2\0\3Rs\17\14\212\2629)h\215#V1J\5\240<\\\1\377\205;[\1\377\7<]"
-  "\1\377Ad\1\377Jq\3\377f\220\33\377\222\272H\377\275\342{\377\336\375"
-  "\245\377\202\341\377\253\377\7\341\377\254\377\342\377\254\377\341\377"
-  "\253\377\341\377\254\377\342\377\254\377\341\377\254\377\342\377\254"
-  "\377\205\341\377\253\377\202\341\377\252\377\203\340\377\251\377\1\341"
-  "\377\251\377\211\340\377\250\377\203\340\377\247\377\3\315\356\217\374"
-  "\20\31\0<\0\0\0\7\222\0\0\0\0\21\0\0\0\1\4\5\0\3s\232&\31\270\334o[\312"
-  "\354\210\230\321\362\221\316\330\371\233\364\340\376\247\377\237\305"
-  "Z\377<\\\1\3774P\1\3422M\1\3353N\1\3354O\1\3415R\1\3518V\1\363;[\1\375"
-  "\202;[\1\377\202;Z\1\377\4 at c\1\377W\177\17\377\220\270J\377\313\354\216"
-  "\377\215\342\377\255\377\202\342\377\254\377\3\341\377\253\377\341\377"
-  "\254\377\341\377\253\377\203\340\377\251\377\211\340\377\250\377\3\322"
-  "\363\225\375\24\40\0A\0\0\0\10\217\0\0\0\0\7\0\0\0\1\0\0\0\3\203\247"
-  "9\36\301\343|s\320\362\221\304\334\374\241\373\340\377\251\377\203\341"
-  "\377\252\377\24\330\367\235\377\220\266J\3777U\1\377\13\21\1y\0\0\0]"
-  "\0\0\0Z\0\0\0\\\0\0\0`\0\0\0d\4\6\0p\24\36\1\212#5\1\254/G\1\3178V\1"
-  "\363;Z\1\377:Y\1\377:Z\1\377Cg\1\377u\234.\377\276\340\177\377\213\342"
-  "\377\255\377\204\342\377\254\377\1\341\377\253\377\202\341\377\252\377"
-  "\212\340\377\250\377\3\325\366\231\376\33*\1F\0\0\0\10\215\0\0\0\0\35"
-  "\0\0\0\1/@\12\7\261\324iL\316\357\215\263\334\374\241\371\340\377\250"
-  "\377\340\377\251\377\334\373\242\377\273\337z\377\226\274P\377s\233,"
-  "\377U|\16\377Ej\3\377 at c\1\3778V\1\377\22\33\1Z\3\5\0'\1\2\0\40\0\0\0"
-  "\40\0\0\0\"\0\0\0%\0\0\0,\0\0\0""5\0\0\0C\0\0\0T\3\4\0g\31&\1\223-E\1"
-  "\3129W\1\367\202:Y\1\377\3\77b\1\377q\230,\377\304\345\210\377\205\342"
-  "\377\255\377\202\342\377\254\377\2\341\377\254\377\341\377\253\377\202"
-  "\341\377\252\377\3\340\377\251\377\341\377\251\377\340\377\251\377\210"
-  "\340\377\250\377\2\340\377\247\377\337\377\246\377\202\337\377\245\377"
-  "\3\326\370\231\377!2\2K\0\0\0\11\213\0\0\0\0\14\0\0\0\1CY\23\12\273\336"
-  "te\322\364\221\325\337\377\245\377\337\377\246\377\337\376\245\377\270"
-  "\334v\377\200\2479\377Ou\12\377 at b\1\377<\\\1\377\204;[\1\377\26Ac\2\377"
-  "\313\356\212\362\325\366\227\356\323\365\223\346\317\361\216\324\311"
-  "\354\210\264\275\341y\210\231\302NQ0G\10\30\0\0\0\22\0\0\0\31\0\0\0'"
-  "\0\0\0:\0\0\0Q\10\14\1p%9\1\2617T\1\360:Y\1\3779X\1\377Be\3\377\206\253"
-  "B\377\330\366\237\377\202\341\377\253\377\202\340\377\251\377\2\340\377"
-  "\250\377\340\377\251\377\207\340\377\250\377\202\340\377\247\377\202"
-  "\337\377\246\377\1\337\377\245\377\202\336\377\244\377\204\336\377\243"
-  "\377\3\330\372\233\377(:\7O\0\0\0\12\211\0\0\0\0\4\0\0\0\1""7I\17\11"
-  "\274\336sd\324\366\223\337\202\336\377\243\377\4\331\373\234\377\241"
-  "\307\\\377\\\203\25\377\77b\1\377\204;[\1\377\6:Z\1\3734P\1\343-E\1\311"
-  "&:\1\2675Q\4\315\332\372\236\377\206\340\377\247\377\17\325\370\226\364"
-  "\305\353\200\254\234\307LN\23\35\1\14\0\0\0\15\0\0\0\30\0\0\0+\0\0\0"
-  "F\4\6\0f%8\1\2567U\1\3649X\1\377:Y\1\377Qv\20\377\262\325r\377\202\340"
-  "\377\250\377\202\340\377\247\377\1\337\377\246\377\202\337\377\245\377"
-  "\202\336\377\244\377\1\337\377\244\377\202\336\377\244\377\205\336\377"
-  "\243\377\205\336\377\242\377\4\336\377\241\377\331\373\232\377.B\12S"
-  "\0\0\0\12\207\0\0\0\0\4\0\0\0\1\3\5\0\4\260\322gJ\322\365\216\322\202"
-  "\335\377\237\377\5\333\376\235\377\247\315a\377V}\21\377=^\1\377;Z\1"
-  "\377\202;[\1\377\14""9W\1\363-D\1\306\34+\1\227\6\11\0m\0\0\0Z\0\0\0"
-  "O\0\0\0R/G\6\241\326\367\227\377\330\371\232\377\331\372\234\377\335"
-  "\376\241\377\205\336\377\243\377\21\335\376\241\377\312\361\205\326\243"
-  "\317S^\40""1\2\12\0\0\0\10\0\0\0\23\0\0\0'\0\0\0E\11\16\1m,C\1\3049X"
-  "\1\3759X\1\377=_\2\377\203\250A\377\332\373\236\377\336\377\243\377\336"
-  "\377\244\377\202\336\377\243\377\4\336\377\242\377\335\377\240\377\336"
-  "\377\241\377\336\377\242\377\203\335\377\241\377\202\335\377\240\377"
-  "\205\335\377\237\377\1\334\377\236\377\202\334\377\234\377\3\331\374"
-  "\230\3774J\16W\0\0\0\13\206\0\0\0\0\37\0\0\0\2\207\2549!\304\357q\255"
-  "\326\376\215\376\327\377\220\377\330\377\221\377\302\351|\377i\220\""
-  "\377>_\1\377:Z\1\377;Z\1\377;[\1\3775Q\1\341\40""1\1\237\5\7\0e\0\0\0"
-  "L\0\0\0""8\0\0\0(\0\0\0\35\0\0\0\26\0\0\0$+A\1\220Gk\6\377Dg\3\377Dh"
-  "\5\377Lp\14\377`\204\37\377\201\245A\377\254\320k\377\326\372\224\377"
-  "\332\377\230\377\202\332\377\227\377%\331\376\224\377\300\355o\313\206"
-  "\2660=\0\0\0\5\0\0\0\7\0\0\0\23\0\0\0+\0\0\0M\31&\1\2145R\1\3539X\1\377"
-  ":Y\1\377a\206\37\377\314\356\214\377\335\377\240\377\335\377\237\377"
-  "\334\377\235\377\333\377\231\377\331\377\223\377\333\377\231\377\331"
-  "\377\225\377\330\377\221\377\327\377\220\377\327\377\216\377\326\377"
-  "\214\377\326\377\215\377\327\377\217\377\326\377\216\377\326\377\213"
-  "\377\324\377\206\377\321\377\177\377\317\377y\377\320\377{\377\321\377"
-  "~\377\320\375\177\3779P\21[\0\0\0\13\204\0\0\0\0\30\0\0\0\1\6\10\1\5"
-  "\250\333Ed\304\372a\356\311\377i\377\312\377k\377\312\376k\377\225\303"
-  "@\377Fj\4\377:Z\1\377:Y\1\377;Z\1\3776R\1\345\35,\1\224\0\1\0V\0\0\0"
-  ";\0\0\0$\0\0\0\25\0\0\0\13\0\0\0\7Dc\12\20\223\3054;a\211\31n4L\10\252"
-  "\207;[\1\377\3Eg\10\377\177\2467\377\300\356l\377\202\317\377x\377\12"
-  "\316\377w\377\310\372m\374\243\330C\2143M\4\15\0\0\0\3\0\0\0\10\0\0\0"
-  "\31\0\0\0""8\10\13\1e.F\2\313\2029X\1\377\30Mp\16\377\267\337n\377\325"
-  "\377\210\377\323\377\203\377\320\377|\377\321\377}\377\320\377z\377\316"
-  "\377u\377\315\377s\377\315\377r\377\314\377q\377\313\377o\377\313\377"
-  "l\377\311\377i\377\311\377g\377\307\377b\377\305\377^\377\305\377]\377"
-  "\305\377\\\377\305\377^\377\306\377a\377\306\375c\377<V\17_\0\0\0\14"
-  "\203\0\0\0\0\11\0\0\0\2x\245\"\37\256\355;\262\273\375F\377\275\376I"
-  "\377\276\376K\377\272\371H\377r\241\35\377=_\1\377\202:Y\1\377\32:X\1"
-  "\370';\1\252\3\4\0Y\0\0\0""7\0\0\0\35\0\0\0\15\0\0\0\7x\247\36#\247\343"
-  "8u\264\361E\300\275\372O\365\304\377Y\377}\255&\3779X\1\3770I\1\322+"
-  "B\1\303*A\1\301,D\1\3101L\1\3318V\1\361;[\1\377:Z\1\377:Y\1\377 at a\4\377"
-  "\202\2553\377\302\372^\377\202\305\377^\377\3\304\377[\377\254\350\77"
-  "\311c\220\22%\202\0\0\0\3\24\0\0\0\16\0\0\0(\1\1\0P%8\2\2508W\1\3748"
-  "W\1\377Bd\5\377\244\323N\377\312\377k\377\311\377i\377\310\377e\377\307"
-  "\377c\377\305\377]\377\302\377V\377\300\377R\377\277\377O\377\277\376"
-  "M\377\276\376K\377\274\375I\377\273\375F\377\202\273\375E\377\7\272\375"
-  "E\377\272\375D\377\273\375F\377\274\375H\377\273\374G\377>Z\14b\0\0\0"
-  "\14\202\0\0\0\0\4\0\0\0\4\221\311*N\256\3609\352\263\366=\377\202\264"
-  "\367>\377\3\255\356:\377]\212\16\377;[\1\377\202:Y\1\377\11""5Q\1\341"
-  "\23\35\1v\0\0\0\77\0\0\0\37\0\0\0\15\10\14\1\10\215\305&D\252\3527\263"
-  "\265\370\77\372\202\270\373B\377\15\271\374C\377\263\365\77\377r\244"
-  "\31\3776S\1\377\15\23\1r\0\0\0O\0\0\0K\0\0\0O\0\0\0X\1\2\0e\23\35\1\210"
-  ")\77\1\2758U\1\363\2029X\1\377\26Sy\15\377\247\344:\377\271\374D\377"
-  "\271\374C\377\271\374D\377\253\3548\346q\243\27<\0\0\0\3\0\0\0\2\0\0"
-  "\0\10\0\0\0\35\0\0\0C\34+\1\2167U\1\3668W\1\377\77`\3\377\231\3159\377"
-  "\276\375L\377\273\374H\377\271\373C\377\267\372A\377\266\371@\377\202"
-  "\265\370\77\377\202\264\367>\377\1\263\366=\377\202\264\367>\377\205"
-  "\263\366=\377\7\264\367=\377A^\15e\0\0\0\15\0\0\0\1#1\6\11\231\325*\203"
-  "\252\3554\375\203\254\3576\377#\244\3452\377U~\12\377:Y\1\3779X\1\377"
-  ":Y\1\377/H\2\305\5\10\1W\0\0\0,\0\0\0\21\0\0\0\10\201\266\37""8\243\343"
-  "0\277\256\3618\377\257\3629\377\260\363:\377\226\322,\377k\233\27\377"
-  "Kq\7\377>_\1\377=_\1\3776R\1\377\22\32\1Q\0\0\0\31\0\0\0\23\0\0\0\25"
-  "\0\0\0\33\0\0\0%\0\0\0""5\0\0\0K\6\10\1j&:\1\2648V\1\3708W\1\377Ac\4"
-  "\377\223\316,\377\203\261\364;\377\14\250\3513\361s\247\27I\0\0\0\4\0"
-  "\0\0\1\0\0\0\5\0\0\0\26\0\0\0:\26\"\1~6T\1\3618W\1\377>_\3\377\222\315"
-  "+\377\202\260\363:\377\3\257\3629\377\256\3618\377\255\3607\377\202\254"
-  "\3576\377\202\255\3607\377\206\254\3576\377\7\255\3607\377\255\3606\377"
-  "B_\15g\0\0\0\15Wz\22\25\232\331'\266\243\346-\377\203\244\347.\377\21"
-  "\237\341,\377T}\12\3779Y\1\3779X\1\3779X\1\376+A\2\261\1\1\0H\0\0\0\40"
-  "\0\0\0\13Ed\14\22\224\322$\222\245\347/\373\247\3521\377\250\3532\377"
-  "\230\326*\377[\206\16\377=]\1\377\204;[\1\377\4\77a\2\377q\244\27\222"
-  "b\222\15""0\4\5\1\4\202\0\0\0\2\32\0\0\0\4\0\0\0\12\0\0\0\25\0\0\0*\0"
-  "\0\0I\17\27\1y2M\1\3358W\1\377=]\2\377\214\307%\377\251\3543\377\250"
-  "\3532\377\251\3543\377\240\342,\364l\236\22G\0\0\0\4\0\0\0\0\0\0\0\3"
-  "\0\0\0\22\0\0\0""4\24\36\1w6T\1\3618W\1\377 at a\3\377\224\321(\377\250"
-  "\3532\377\202\246\3510\377\203\245\350/\377\2\246\3510\377\245\350/\377"
-  "\203\244\347.\377\202\245\350/\377\6\246\3510\377\245\350/\377\244\347"
-  ".\377Ca\14i\0\0\0\15\226\327\"\321\202\234\337&\377\1\234\340'\377\202"
-  "\235\340'\377\2]\212\15\3779Y\1\377\2029X\1\377\6)\77\2\252\0\0\0@\0"
-  "\0\0\31\0\0\0\11n\241\25""0\227\331$\325\202\237\342)\377\4\237\343)"
-  "\377}\264\33\377Ac\3\377:Z\1\377\202;[\1\377\11""7U\1\355-D\1\310%8\1"
-  "\264;[\4\317\240\343*\377\236\340(\375\217\317\35\267\\\212\10(\0\0\0"
-  "\3\202\0\0\0\0\11\0\0\0\2\0\0\0\7\0\0\0\26\0\0\0""3\3\5\0],C\1\3048W"
-  "\1\377\77`\3\377\223\321$\377\202\241\344+\377\15\240\343*\377\230\331"
-  "%\357Gm\5""5\0\0\0\3\0\0\0\0\0\0\0\3\0\0\0\20\0\0\0""2\26!\1y7U\1\365"
-  "8W\1\377Mt\7\377\236\341(\377\204\237\342)\377\205\236\341(\377\202\237"
-  "\342)\377\10\236\341(\377\234\337&\377\235\340'\377\235\341'\377Ba\12"
-  "k\0\0\0\15\222\324\35\377\225\330\37\377\203\226\331\40\377\12\212\311"
-  "\32\377=^\1\3778W\1\3779X\1\377,C\2\263\0\1\0>\0\0\0\26\0\0\0\10x\257"
-  "\26M\224\327\40\360\202\230\333\"\377\14\231\334#\377n\241\22\377;[\1"
-  "\377:Y\1\377:Z\1\3776T\1\350\36.\1\231\1\2\0`\0\0\0O\0\0\0Q3N\4\237\230"
-  "\333\"\377\202\231\334#\377\4\215\315\33\357R}\5W\0\0\0\6\0\0\0\1\202"
-  "\0\0\0\0\26\0\0\0\2\0\0\0\14\0\0\0&\1\1\0Q+A\1\275c\224\13\377\226\331"
-  "!\377\232\335$\377\232\335#\377\231\334#\377v\256\25\3779V\3\320\15\22"
-  "\4\22\0\0\0\2\0\0\0\0\0\0\0\2\0\0\0\17\0\0\0""4\32(\1\205=_\1\372\201"
-  "\276\25\377\230\333\"\377\203\231\334#\377\202\230\333\"\377\1\227\332"
-  "!\377\204\230\333\"\377\1\227\332!\377\202\226\331\40\377\5\225\330\37"
-  "\377\227\332!\377Aa\11l\0\0\0\16p\245\21\327\202\220\323\32\377\1\217"
-  "\322\31\377\202\220\323\32\377\10U\203\4\3777U\1\3771K\2\317\2\2\0B\0"
-  "\0\0\26\0\0\0\5\1\1\0\20|\266\25\334\203\222\325\34\377\14\201\276\25"
-  "\377:Z\1\3779X\1\377:Y\1\377-D\1\277\5\7\0^\0\0\0:\0\0\0\"\0\0\0\26\0"
-  "\0\0$7T\4\220\222\325\34\377\203\223\326\35\377\3}\272\21\373>_\2\\\0"
-  "\0\0\6\203\0\0\0\0\5\0\0\0\1\0\0\0\12\31&\1""3r\251\20\312\222\325\34"
-  "\377\203\223\326\35\377\5\177\272\25\377>_\1\3777T\1\362\31%\1""4\0\0"
-  "\0\5\202\0\0\0\0\7\0\0\0\3\0\0\0\26'<\1lx\263\20\371\221\324\33\377\222"
-  "\325\34\377\223\326\35\377\202\222\325\34\377\202\221\324\33\377\203"
-  "\222\325\34\377\203\221\324\33\377\203\220\323\32\377\5\221\324\33\377"
-  "@_\7m\0\0\0\16""4N\5\210\211\313\24\377\203\212\315\24\377\11\213\316"
-  "\25\377r\254\13\377Ae\1\377,C\1\270\0\0\0\40\0\0\0\5\0\0\0\3\0\0\0\36"
-  "R{\11\260\202\214\317\26\377\15\213\316\25\377\210\312\24\377Ek\1\377"
-  "8V\1\376';\2\251\0\0\0H\0\0\0#\0\0\0\15\0\0\0\4\0\0\0\2\0\0\0\26""8U"
-  "\3\212\215\317\27\377\204\215\320\27\377\3e\232\7\361)>\2""4\0\0\0\4"
-  "\202\0\0\0\0\4\0\0\0\2Q{\5'\201\300\21\321\214\317\26\377\202\215\320"
-  "\27\377\7\216\321\30\377\177\275\22\377Cf\2\3778V\1\375\37""0\1\210\0"
-  "\0\0$\0\0\0\5\202\0\0\0\0\3\0\0\0\4""7U\2=t\257\14\356\203\214\317\26"
-  "\377\203\215\320\27\377\1\214\317\26\377\202\215\320\27\377\4\213\316"
-  "\25\377\214\317\26\377\213\316\25\377\214\317\25\377\202\213\316\25\377"
-  "\1\212\315\24\377\202\213\316\25\377\6\77^\6m\0\0\0\16\1\2\0Fi\236\13"
-  "\336\206\311\20\377\206\311\17\377\202\206\311\20\377\11\202\304\16\377"
-  "R\177\1\3779X\1\367\26\40\2'\0\0\0\2\0\0\0\3\0\0\0\36\36-\1{{\270\16"
-  "\377\203\207\312\21\377\13d\231\6\3775Q\1\367\7\13\1O\0\0\0\32\0\0\0"
-  "\6\0\0\0\1\0\0\0\0\0\0\0\1\0\0\0\26""7S\3\213\210\312\22\377\204\210"
-  "\313\22\377\7\202\304\17\377Mw\2\304\4\6\1\20\0\0\0\2\0\0\0\4`\221\6"
-  ">\201\302\17\346\203\210\313\22\377\14\211\314\23\377}\274\17\377Di\2"
-  "\3778W\1\377&:\1\252\0\0\0\77\0\0\0\23\0\0\0\2\0\0\0\0\0\0\0\4>_\2""6"
-  "t\260\12\350\202\210\313\22\377\202\207\312\21\377\1\210\313\22\377\203"
-  "\211\314\23\377\1\207\312\22\377\203\207\312\21\377\2\206\311\20\377"
-  "\207\312\21\377\202\206\311\20\377\203\207\312\21\377\5=]\5m\0\0\0\16"
-  "\0\0\0)+B\3\207\177\300\13\376\204\202\305\14\377\17j\242\5\377Ho\1\377"
-  "3M\2\203\0\0\0\7\0\0\0\1\0\0\0\23\2\2\0IR}\5\344\204\307\15\377\203\306"
-  "\15\377\204\306\16\377{\273\13\377Fk\1\377(=\2{\0\0\0\13\203\0\0\0\0"
-  "\3\0\0\0\1\0\0\0\26""6R\2\212\202\204\307\16\377\1\203\306\15\377\203"
-  "\204\307\16\377\6o\252\7\377;Z\2l\0\0\0\14h\236\6]\201\302\14\365\205"
-  "\310\17\377\202\204\307\16\377\15\205\310\17\377y\266\14\377Ej\2\377"
-  "8W\1\377+B\1\275\1\1\0I\0\0\0\32\0\0\0\4\0\0\0\1\0\0\0\4Dh\2""9s\260"
-  "\10\350\203\306\15\377\204\204\307\16\377\3\203\305\16\377k\241\11\377"
-  "\203\306\16\377\204\204\307\16\377\210\203\306\15\377\5<[\4m\0\0\0\16"
-  "\0\0\0\24\0\1\0FY\210\6\321\204\177\302\11\377\12|\275\10\377V\206\1"
-  "\377Cg\1\350\30#\2\33\0\0\0\2\0\0\0\11\0\0\0""0$7\1\233q\255\7\377\177"
-  "\302\11\377\202\200\303\12\377\4d\232\3\3779X\1\334\10\13\1\25\0\0\0"
-  "\1\202\0\0\0\0\4\0\0\0\1\0\0\0\26""5Q\2\212\200\303\12\377\204\201\304"
-  "\13\377\202\200\303\12\377\3[\215\2\352e\234\5\223\177\301\12\374\204"
-  "\201\304\13\377\16s\256\11\377Bf\2\3778X\1\377-E\1\305\2\3\0O\0\0\0\37"
-  "\0\0\0\6\0\0\0\1\0\0\0\5Jr\2=t\261\6\352\201\304\13\377\200\303\12\377"
-  "\201\304\13\377\202\200\303\12\377\6}\275\13\377Nw\4\377<\\\1\377Kt\3"
-  "\377s\257\11\377\201\305\13\377\203\201\304\13\377\5\200\303\12\377\177"
-  "\302\11\377\200\303\12\377\201\304\13\377\201\303\13\377\202\177\302"
-  "\11\377\6""9X\3l\0\0\0\16\0\0\0\7\0\0\0(\24\36\1sr\257\6\371\204|\277"
-  "\6\377\11l\247\4\377P|\1\377>`\2\204\0\0\0\7\0\0\0\3\0\0\0\32\3\4\0R"
-  "Dh\2\350{\275\7\377\202}\300\7\377\4y\273\6\377S\201\1\3770I\2w\0\0\0"
-  "\7\202\0\0\0\0\6\0\0\0\1\0\0\0\26""5Q\2\212}\300\10\377~\301\10\377}"
-  "\300\7\377\204~\301\10\377\2{\275\7\377~\300\10\377\204~\301\10\377\14"
-  "h\240\5\377\77`\1\3779X\1\377-E\1\305\1\2\0Q\0\0\0\"\0\0\0\10\0\0\0\1"
-  "\0\0\0\6S\200\2Lu\265\5\360}\300\7\377\204~\301\10\377\10t\262\7\377"
-  "Ej\2\377;[\1\376<\\\1\377;[\1\377=]\1\377U\203\3\377w\266\10\377\203"
-  "~\301\10\377\2}\301\7\377~\301\10\377\202}\300\7\377\12|\277\6\377}\300"
-  "\7\3778V\2k\0\0\0\16\0\0\0\1\0\0\0\22\0\0\0B;[\2\261y\273\4\377z\275"
-  "\4\377\202y\274\3\377\25y\273\3\377^\222\1\377Kt\1\361)=\3(\0\0\0\2\0"
-  "\0\0\12\0\0\0""1\34+\1\217X\207\3\376z\275\4\377{\276\5\377z\275\4\377"
-  "p\256\3\377Lv\1\360$7\2.\0\0\0\3\0\0\0\0\0\0\0\1\0\0\0\26""5Q\2\212{"
-  "\275\5\377\212{\276\5\377\14z\273\5\377Z\212\3\377<\\\1\3779X\1\376*"
-  "@\1\272\1\2\0Q\0\0\0\"\0\0\0\10\0\0\0\2\1\1\0\10]\220\2iv\267\4\370\204"
-  "{\276\5\377\7|\277\6\377j\244\4\377>`\1\3777U\1\367\32(\1\244!3\1\254"
-  "9W\1\362\202;[\1\377\7\77a\1\377\\\216\4\377y\272\6\377|\277\6\377{\276"
-  "\5\377z\275\4\377{\276\5\377\203z\275\4\377\7""6T\2j\0\0\0\16\0\0\0\0"
-  "\0\0\0\5\0\0\0\"\4\6\0]V\206\2\345\203w\272\1\377\12w\271\1\377q\261"
-  "\1\377V\205\1\377Be\2\255\1\1\0\11\0\0\0\3\0\0\0\27\0\0\0J/G\1\311b\231"
-  "\2\377\203x\273\2\377\7k\246\1\377Mw\1\313\30$\2\25\0\0\0\2\0\0\0\1\0"
-  "\0\0\26""6S\1\212\206x\273\2\377\202y\274\3\377\16x\273\2\377y\274\3"
-  "\377m\252\3\377Iq\1\377;Z\1\3779X\1\373#5\1\244\0\0\0L\0\0\0!\0\0\0\10"
-  "\0\0\0\3\30$\1\16f\237\2\223w\271\2\375\204x\273\2\377\12x\273\3\377"
-  "\\\216\2\377;Z\1\3775R\1\355\23\36\1\204\0\0\0O\0\0\0K\11\15\0k+A\1\275"
-  ":Z\1\372\202;[\1\377\3Ch\1\377d\233\2\377y\273\3\377\204x\273\2\377\11"
-  "w\272\2\3774P\1i\0\0\0\15\0\0\0\0\0\0\0\1\0\0\0\15\0\0\0""6\30$\1\206"
-  "f\236\1\374\202u\266\1\377\14u\267\1\377u\266\1\377i\243\1\377Oz\1\377"
-  "8U\2^\0\0\0\5\0\0\0\7\0\0\0'\10\14\1e7T\1\351e\236\1\377v\267\1\377\202"
-  "v\270\1\377\7k\246\1\377R~\1\267\30$\2\21\0\0\0\2\0\0\0\26""7V\1\212"
-  "v\267\1\377\206v\270\1\377\20v\271\1\377p\257\1\377U\204\1\377>_\1\377"
-  ";[\1\3777T\1\353\27#\1\207\0\0\0D\0\0\0\35\0\0\0\7\0\0\0\4Fm\2&m\252"
-  "\1\303v\267\1\377v\270\1\377v\271\1\377\202v\270\1\377\22s\264\1\377"
-  "Nx\1\3779Y\1\3772M\1\335\13\21\1q\0\0\0;\0\0\0\32\0\0\0\25\0\0\0)\0\0"
-  "\0J\17\27\1y/I\1\315;[\1\376;[\1\377<\\\1\377Ny\1\377q\260\1\377v\270"
-  "\1\377\203v\267\1\377\2""1L\1f\0\0\0\15\202\0\0\0\0\23\0\0\0\3\0\0\0"
-  "\27\0\0\0I-E\1\263l\247\1\377s\262\1\377r\261\1\377r\262\1\377r\261\1"
-  "\377c\231\1\377Ho\1\355-D\3,\0\0\0\3\0\0\0\16\0\0\0""5\22\33\1|9Y\1\364"
-  "`\225\1\377t\263\1\377\202s\263\1\377\30n\253\1\377\\\216\1\3057T\2%"
-  "\0\0\0\31""9X\1\212s\263\1\377t\264\1\377t\265\1\377u\265\1\377t\265"
-  "\1\377r\261\1\377e\236\1\377Q~\1\377\77`\1\377;[\1\377;Z\1\375,C\1\302"
-  "\7\12\0f\0\0\0""8\0\0\0\26\0\0\0\6\2\3\0\10`\224\2^p\257\1\354\202t\264"
-  "\1\377\27t\265\1\377t\264\1\377t\265\1\377h\241\1\377Ch\1\3779X\1\376"
-  "*@\1\276\3\4\0_\0\0\0""2\0\0\0\22\0\0\0\4\0\0\0\2\0\0\0\7\0\0\0\26\0"
-  "\0\0""0\0\0\0Q\30$\1\2125Q\1\342;[\1\377:Y\1\377Ek\1\377q\260\1\377t"
-  "\264\1\377\202s\263\1\377\2.G\1c\0\0\0\15\203\0\0\0\0\5\0\0\0\7\0\0\0"
-  "$\2\2\0Z<\\\1\327l\250\1\377\202o\255\1\377&p\255\1\377n\253\1\377^\222"
-  "\1\377Ch\1\316\36-\2\25\0\0\0\4\0\0\0\24\0\0\0>\26!\1\2108W\1\365S\201"
-  "\1\377n\254\1\377p\257\1\377p\256\1\377p\255\1\377h\242\1\355Oz\1\204"
-  ".G\1\227Cg\1\377Lv\1\377P{\1\377Ny\1\377Ho\1\377\77b\1\377<]\1\377;["
-  "\1\377;[\1\3751K\1\324\24\37\1\205\0\0\0N\0\0\0*\0\0\0\20\0\0\0\7Ir\2"
-  "$j\244\1\256p\257\1\376p\257\1\377q\260\1\377\202q\257\1\377\11p\257"
-  "\1\377V\206\1\377<\\\1\3778W\1\367\36.\1\235\0\0\0Q\0\0\0)\0\0\0\15\0"
-  "\0\0\2\203\0\0\0\0\10\0\0\0\2\0\0\0\12\0\0\0\33\0\0\0""8\3\4\0_,D\1\307"
-  "Gm\1\377h\241\1\377\204p\256\1\377\2+B\1`\0\0\0\15\203\0\0\0\0\25\0\0"
-  "\0\1\0\0\0\14\0\0\0""0\11\16\1mCg\1\352j\245\1\377l\247\1\377l\250\1"
-  "\377l\247\1\377k\246\1\377[\216\1\377Ac\2\264\21\31\3\15\0\0\0\5\0\0"
-  "\0\27\0\0\0A\22\34\1\2025R\1\353Di\1\377_\223\1\377m\250\1\377\202m\251"
-  "\1\377\3W\207\1\377<\\\1\3769X\1\365\204<\\\1\377\13<\\\1\3756S\1\350"
-  "*@\1\276\21\32\1\202\0\0\0U\0\0\0""6\0\0\0\32\0\0\0\13,E\2\23e\234\1"
-  "}l\250\1\361\202m\252\1\377\203n\253\1\377\11f\236\1\377Fm\1\377;Z\1"
-  "\3772M\1\335\20\30\1|\0\0\0E\0\0\0\37\0\0\0\11\0\0\0\1\206\0\0\0\0\5"
-  "\0\0\0\4\1\1\0\24+B\1\205T\203\1\370l\250\1\377\204m\251\1\377\3l\250"
-  "\1\377(>\1]\0\0\0\14\204\0\0\0\0\6\0\0\0\2\0\0\0\21\0\0\0:\21\31\1\177"
-  "Ek\1\363g\240\1\377\203h\242\1\377\35h\241\1\377[\216\1\377 at b\2\251\25"
-  "\37\2\15\0\0\0\6\0\0\0\27\0\0\0=\10\13\0n-E\1\314;[\1\376Ek\1\377X\210"
-  "\1\377f\236\1\377U\203\1\3778U\1\377\14\23\1\211\13\21\1\201\27#\1\222"
-  "\31'\1\226\25\40\1\214\7\13\0u\0\0\0`\0\0\0L\0\0\0""4\0\0\0\36\0\0\0"
-  "\17""3P\1\27c\232\1ti\243\1\343\202j\245\1\377\15k\245\1\377j\244\1\377"
-  "j\245\1\377h\242\1\377R~\1\377=]\1\377:X\1\372%9\1\260\2\2\0_\0\0\0""6"
-  "\0\0\0\26\0\0\0\5\0\0\0\1\206\0\0\0\0\7\0\0\0\3)>\2(Ks\1\271d\233\1\377"
-  "i\244\1\377j\244\1\377j\245\1\377\203j\244\1\377\3i\243\1\377%9\1Z\0"
-  "\0\0\14\205\0\0\0\0\6\0\0\0\3\0\0\0\26\0\0\0B\25\40\1\212Dh\1\367c\231"
-  "\1\377\203e\235\1\377\17f\236\1\377^\222\1\377Ad\2\263\37/\2\23\0\0\0"
-  "\5\0\0\0\23\0\0\0""2\0\0\0Y\30%\1\2243N\1\336;[\1\376=^\1\377Ad\1\377"
-  "6S\1\377\20\30\1c\202\0\0\0""9\14\0\0\0;\0\0\0""7\0\0\0.\0\0\0#\0\0\0"
-  "\30\13\21\0\23W\207\2>d\233\1\225g\240\1\354g\237\1\377g\240\1\377g\237"
-  "\1\377\202g\240\1\377\12f\236\1\377V\205\1\377 at c\1\377;[\1\3773N\1\335"
-  "\22\34\1\203\0\0\0L\0\0\0'\0\0\0\16\0\0\0\3\206\0\0\0\0\5\0\0\0\2\35"
-  ",\2\23Ho\2\204^\221\1\363g\240\1\377\206g\237\1\377\4f\237\1\377f\235"
-  "\1\377!3\1U\0\0\0\13\206\0\0\0\0\7\0\0\0\5\0\0\0\32\0\0\0E\26\"\1\215"
-  "\77b\1\365^\222\1\377c\231\1\377\203c\232\1\377\26b\231\1\377Gn\1\317"
-  "-D\2+\0\0\0\5\0\0\0\14\0\0\0\"\0\0\0A\0\0\0`\24\37\1\215*A\1\3036S\1"
-  "\352;[\1\376=^\1\177:Y\1=,D\2)-F\1(Fm\1""3Z\214\1Ja\227\1pd\233\1\242"
-  "e\235\1\341e\234\1\377\205d\233\1\377\13b\231\1\377T\202\1\377Ad\1\377"
-  "<\\\1\3778U\1\357\40""1\1\244\1\1\0^\0\0\0""9\0\0\0\31\0\0\0\7\0\0\0"
-  "\1\205\0\0\0\0\5\0\0\0\2\32'\2\17Kt\2q]\221\1\345f\236\1\377\203d\233"
-  "\1\377\1d\232\1\377\202d\233\1\377\1c\232\1\377\202d\233\1\377\3c\231"
-  "\1\377\36.\1R\0\0\0\13\207\0\0\0\0\6\0\0\0\5\0\0\0\33\0\0\0F\23\34\1"
-  "\207:Y\1\357W\206\1\377\204a\227\1\377\15e\235\1\377T\202\1\3619W\2l"
-  "\16\25\1\12\0\0\0\7\0\0\0\21\0\0\0$\0\0\0<\0\0\0S\0\0\0h&;\1\250b\231"
-  "\1\377f\236\1\377\202f\237\1\376\2e\234\1\377b\231\1\377\207b\230\1\377"
-  "\13[\215\1\377Mw\1\377\77a\1\377<\\\1\3778V\1\361%8\1\261\4\7\0k\0\0"
-  "\0F\0\0\0%\0\0\0\16\0\0\0\3\204\0\0\0\0\6\0\0\0\1\0\0\0\3+@\2\27R\177"
-  "\1y_\224\1\345e\235\1\377\204a\227\1\377\202b\227\1\377\202a\227\1\377"
-  "\1b\230\1\377\202a\227\1\377\3`\225\1\377\34*\1N\0\0\0\13\210\0\0\0\0"
-  "\7\0\0\0\6\0\0\0\32\0\0\0B\14\22\0y3N\1\340Ku\1\377_\223\1\377\203`\226"
-  "\1\377\14b\231\1\377b\230\1\377Nx\1\3122M\2J\10\14\1\10\0\0\0\6\0\0\0"
-  "\15\0\0\0\31\0\0\0""3(=\1\224`\224\1\377a\226\1\377\207a\227\1\377\16"
-  "_\224\1\377X\211\1\377Ny\1\377Cg\1\377=]\1\377<\\\1\3775R\1\346\"4\1"
-  "\253\5\7\0l\0\0\0K\0\0\0,\0\0\0\24\0\0\0\6\0\0\0\1\203\0\0\0\0\6\0\0"
-  "\0\1\5\7\0\5>`\2""2[\214\1\230c\231\1\361d\233\1\377\202`\226\1\377\206"
-  "a\226\1\377\203`\226\1\377\202`\225\1\377\3^\222\1\376\30$\1J\0\0\0\12"
-  "\211\0\0\0\0\10\0\0\0\5\0\0\0\26\0\0\0:\3\5\0h)\77\1\300 at c\1\375V\205"
-  "\1\377a\226\1\377\203a\227\1\377\11d\234\1\377b\230\1\377T\202\1\316"
-  "=^\2n\"4\2\35\0\0\0\6\0\0\0\32+B\1\212W\207\1\377\202Z\214\1\377\7Y\212"
-  "\1\377W\210\1\377T\203\1\377P|\1\377Kt\1\377Di\1\377>`\1\377\202<]\1"
-  "\377\11""8V\1\357+B\1\305\25\40\1\217\0\1\0c\0\0\0H\0\0\0-\0\0\0\26\0"
-  "\0\0\10\0\0\0\2\202\0\0\0\0\10\0\0\0\1\0\0\0\4.G\2\36T\202\2ra\226\1"
-  "\310f\236\1\375c\232\1\377b\227\1\377\205a\227\1\377\2a\226\1\377`\226"
-  "\1\377\206`\225\1\377\4`\226\1\377]\221\1\375\24\35\1E\0\0\0\11\212\0"
-  "\0\0\0\11\0\0\0\3\0\0\0\21\0\0\0/\0\0\0W\27#\1\2246S\1\351Fl\1\377Y\212"
-  "\1\377b\230\1\377\203c\231\1\377\6c\232\1\377h\242\1\377`\225\1\373["
-  "\215\1\315Nx\1\2402M\1\276\204=^\1\377\203<]\1\377\14;[\1\3727T\1\352"
-  "/I\1\321$8\1\262\22\33\1\212\1\1\0h\0\0\0S\0\0\0<\0\0\0%\0\0\0\24\0\0"
-  "\0\10\0\0\0\2\202\0\0\0\1\6\0\0\0\4&9\2\30Mx\2e_\223\1\274f\236\1\372"
-  "g\237\1\377\202c\232\1\377\203c\231\1\377\207b\230\1\377\1b\227\1\377"
-  "\205a\227\1\377\3]\221\1\374\20\30\1@\0\0\0\11\213\0\0\0\0\12\0\0\0\2"
-  "\0\0\0\13\0\0\0\"\0\0\0E\3\5\0l$7\1\2639X\1\363Fl\1\377V\206\1\377c\232"
-  "\1\377\205e\235\1\377\33X\210\1\3779X\1\377\36.\1\251\35,\1\243\37/\1"
-  "\247\36.\1\245\34+\1\237\27#\1\225\16\25\0\205\4\7\0s\0\0\0f\0\0\0Z\0"
-  "\0\0K\0\0\0:\0\0\0)\0\0\0\31\0\0\0\15\0\0\0\5\0\0\0\2\0\0\0\3\16\25\1"
-  "\10""4O\2""3R\177\1y_\224\1\277f\236\1\366k\246\1\377g\237\1\377\202"
-  "f\236\1\377\3e\235\1\377d\234\1\377e\235\1\377\203d\233\1\377\1c\232"
-  "\1\377\202d\233\1\377\203c\233\1\377\202d\233\1\377\1c\232\1\377\203"
-  "c\231\1\377\3^\222\1\373\14\21\1;\0\0\0\10\214\0\0\0\0'\0\0\0\1\0\0\0"
-  "\6\0\0\0\25\0\0\0/\0\0\0Q\6\11\0t%8\1\2657U\1\355\77b\1\377Lv\1\377Y"
-  "\213\1\377d\233\1\377i\242\1\377i\243\1\377Z\213\1\3778U\1\377\17\26"
-  "\1p\0\0\0I\0\0\0F\0\0\0E\0\0\0C\0\0\0>\0\0\0""7\0\0\0/\0\0\0&\0\0\0\34"
-  "\0\0\0\23\0\0\0\14\0\0\0\7\0\0\0\5\11\16\1\10,C\2-Gn\2dZ\213\2\241b\230"
-  "\1\342l\247\1\377m\251\1\377j\244\1\377i\244\1\377\202i\243\1\377\5h"
-  "\242\1\377h\241\1\377g\241\1\377g\240\1\377h\240\1\377\203g\240\1\377"
-  "\1g\237\1\377\203g\240\1\377\202g\237\1\377\203g\240\1\377\6g\237\1\377"
-  "f\236\1\377f\235\1\377`\224\1\371\10\13\0""7\0\0\0\10\216\0\0\0\0#\0"
-  "\0\0\2\0\0\0\12\0\0\0\32\0\0\0""3\0\0\0P\1\2\0k\31&\1\232-E\1\3149W\1"
-  "\362=_\1\377Cg\1\377Ku\1\377Lu\1\3778V\1\377\24\36\1S\0\0\0\27\0\0\0"
-  "\21\0\0\0\20\0\0\0\17\0\0\0\15\0\0\0\13\0\0\0\11\0\0\0\10\24\36\2\17"
-  ")>\2*=]\2TR~\2\205^\221\2\273d\233\2\356n\253\1\377q\261\1\377o\255\1"
-  "\377n\254\1\377n\253\1\377m\252\1\377\202m\251\1\377\203l\250\1\377\1"
-  "l\247\1\377\203k\247\1\377\2l\250\1\377k\247\1\377\207k\246\1\377\205"
-  "j\245\1\377\4j\244\1\377b\227\1\367\4\6\1""3\0\0\0\7\220\0\0\0\0\37\0"
-  "\0\0\3\0\0\0\12\0\0\0\31\0\0\0-\0\0\0D\0\0\0[\2\3\0o\22\34\1\216#6\1"
-  "\261-E\1\3143O\1\3409W\1\364Ek\2\255Hn\2\201Fl\2tGm\2vLu\2\200R\177\3"
-  "\216X\210\3\243]\220\3\273a\227\2\332g\237\2\364o\254\2\376u\266\2\377"
-  "u\265\1\377t\264\1\377t\263\1\377s\263\1\377s\262\1\377r\262\1\377r\261"
-  "\1\377\206q\260\1\377\202q\257\1\377\2p\257\1\377p\256\1\377\202p\257"
-  "\1\377\1q\257\1\377\202p\256\1\377\1o\255\1\377\203p\256\1\377\202o\255"
-  "\1\377\202o\254\1\377\1n\254\1\377\202n\253\1\377\3c\232\1\365\2\3\1"
-  "1\0\0\0\7\222\0\0\0\0\14\0\0\0\2\0\0\0\7\0\0\0\21\0\0\0\36\0\0\0.\0\0"
-  "\0>\0\0\0M\0\0\0Z\0\0\0h\"4\1\244q\257\3\377z\275\4\377\202z\276\4\377"
-  "\1z\275\4\377\202y\274\3\377\203x\273\2\377\2x\272\2\377w\272\2\377\202"
-  "w\272\1\377\204w\271\1\377\1v\271\1\377\207v\270\1\377\202v\267\1\377"
-  "\203u\267\1\377\1v\267\1\377\202u\266\1\377\3t\265\1\377u\266\1\377u"
-  "\265\1\377\202u\266\1\377\1t\265\1\377\202t\264\1\377\203s\263\1\377"
-  "\3f\236\1\364\2\3\1/\0\0\0\6\224\0\0\0\0\11\0\0\0\1\0\0\0\3\0\0\0\7\0"
-  "\0\0\15\0\0\0\24\0\0\0\35\0\0\0""1%9\1\222r\260\6\377\214}\300\7\377"
-  "\207|\277\6\377\2{\276\5\377|\277\6\377\206{\276\5\377\206z\275\4\377"
-  "\206y\274\3\377\203x\273\2\377\202x\272\2\377\3g\240\2\363\1\2\0.\0\0"
-  "\0\6\230\0\0\0\0\5\0\0\0\1\0\0\0\3\0\0\0\26(>\1\207t\261\10\377\221\201"
-  "\304\13\377\211\200\303\12\377\202\177\302\11\377\205~\301\10\377\202"
-  "}\300\7\377\203|\277\6\377\206}\300\7\377\3i\241\5\362\1\2\0-\0\0\0\6"
-  "\231\0\0\0\0\4\0\0\0\1\0\0\0\23)\77\1\205s\260\11\377\224\203\306\15"
-  "\377\207\202\305\14\377\3\201\304\13\377\200\303\12\377\201\304\13\377"
-  "\203\200\303\12\377\206\177\302\11\377\205\200\303\12\377\3h\237\6\361"
-  "\1\1\0,\0\0\0\6\231\0\0\0\0\4\0\0\0\1\0\0\0\23)@\1\204Y\211\4\377\202"
-  "a\224\5\377\2a\224\6\377`\223\6\377\202`\222\6\377\1a\224\6\377\202a"
-  "\225\6\377\24a\224\6\377`\223\6\377_\222\6\377_\221\6\377_\222\6\377"
-  "a\224\6\377a\225\6\377b\225\6\377b\226\6\377b\225\6\377b\226\6\377b\225"
-  "\6\377a\225\5\377a\224\5\377`\223\5\377`\222\5\377_\222\5\377^\221\5"
-  "\377^\220\5\377^\217\5\377\203]\217\5\377\2^\217\5\377^\220\5\377\204"
-  "_\222\4\377\4^\220\4\377]\217\5\377]\216\5\377\\\216\5\377\202\\\215"
-  "\4\377\3P{\3\361\1\1\0,\0\0\0\5\231\0\0\0\0\4\0\0\0\1\0\0\0\21\37/\1"
-  "f.G\1\301\212-E\1\311\1-D\1\311\203-E\1\311\4-D\1\311-E\1\311,D\1\311"
-  "-E\1\311\202,D\1\310\1,D\1\311\217,D\1\310\1,C\1\310\202,D\1\310\204"
-  ",C\1\310\4,D\1\306.F\1\256\0\1\0(\0\0\0\5\232\0\0\0\0\3\0\0\0\13\0\0"
-  "\0-\0\0\0O\253\0\0\0[\4\0\0\0W\0\0\0A\0\0\0\32\0\0\0\3\232\0\0\0\0\4"
-  "\0\0\0\3\0\0\0\16\0\0\0\31\0\0\0\34\211\0\0\0\35\241\0\0\0\34\4\0\0\0"
-  "\33\0\0\0\24\0\0\0\10\0\0\0\1\233\0\0\0\0\1\0\0\0\1\255\0\0\0\2\202\0"
-  "\0\0\1\377\0\0\0\0\377\0\0\0\0\377\0\0\0\0\377\0\0\0\0\377\0\0\0\0\377"
-  "\0\0\0\0\313\0\0\0\0",
+  0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,
+  0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,
+  0xe6,0x00,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x01,0x97,0x00,0x00,0x00,0x02,
+  0x82,0x00,0x00,0x00,0x01,0x9b,0x00,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x03,
+  0x3c,0x5b,0x04,0x38,0xa4,0xd5,0x4a,0xa3,0xbb,0xea,0x64,0xa5,0xbb,0xea,0x65,
+  0xa5,0xbb,0xea,0x65,0xa6,0xbd,0xea,0x6a,0xa6,0xbf,0xea,0x6e,0xa7,0xbf,0xea,
+  0x6f,0xa7,0x82,0xbf,0xea,0x6f,0xa8,0x08,0xbf,0xea,0x70,0xa9,0xbf,0xeb,0x71,
+  0xaa,0xc0,0xeb,0x71,0xaa,0xc0,0xeb,0x72,0xaa,0xc0,0xeb,0x72,0xab,0xc1,0xec,
+  0x73,0xac,0xc1,0xec,0x72,0xad,0xc1,0xec,0x73,0xad,0x82,0xc2,0xec,0x74,0xae,
+  0x0a,0xc2,0xec,0x73,0xb0,0xc2,0xec,0x73,0xb1,0xc3,0xed,0x74,0xb1,0xc3,0xed,
+  0x76,0xb2,0xc3,0xec,0x76,0xb2,0xc3,0xec,0x76,0xb3,0xc3,0xec,0x77,0xb3,0xc3,
+  0xec,0x78,0xb3,0xc4,0xed,0x79,0xb4,0xc3,0xec,0x78,0xb5,0x82,0xc4,0xec,0x79,
+  0xb5,0x82,0xc4,0xec,0x79,0xb6,0x0f,0xc4,0xec,0x7a,0xb6,0xc4,0xec,0x79,0xb7,
+  0xc4,0xec,0x7a,0xb7,0xc4,0xec,0x7a,0xb8,0xc3,0xec,0x79,0xb8,0xc3,0xec,0x79,
+  0xb9,0xc4,0xec,0x79,0xb9,0xc4,0xed,0x79,0xba,0xc3,0xed,0x77,0xba,0xc2,0xed,
+  0x74,0xbb,0xc3,0xed,0x74,0xbb,0xc2,0xee,0x73,0xbc,0x9f,0xcc,0x4e,0xb3,0x0e,
+  0x14,0x01,0x0c,0x00,0x00,0x00,0x01,0x9a,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+  0x00,0x0a,0x37,0x54,0x01,0x78,0xbc,0xe5,0x72,0xff,0x82,0xd9,0xff,0x95,0xff,
+  0x06,0xd9,0xff,0x96,0xff,0xda,0xff,0x98,0xff,0xda,0xff,0x99,0xff,0xdb,0xff,
+  0x99,0xff,0xda,0xff,0x99,0xff,0xdb,0xff,0x99,0xff,0x8d,0xdb,0xff,0x9a,0xff,
+  0x04,0xdb,0xff,0x9b,0xff,0xdc,0xff,0x9b,0xff,0xdb,0xff,0x9b,0xff,0xdc,0xff,
+  0x9b,0xff,0x82,0xdb,0xff,0x9b,0xff,0x83,0xdc,0xff,0x9d,0xff,0x83,0xdc,0xff,
+  0x9c,0xff,0x83,0xdd,0xff,0x9e,0xff,0x82,0xdc,0xff,0x9d,0xff,0x83,0xdb,0xff,
+  0x9a,0xff,0x06,0xda,0xff,0x99,0xff,0xda,0xff,0x98,0xff,0xd9,0xff,0x97,0xff,
+  0xb0,0xd8,0x67,0xf8,0x0a,0x0f,0x01,0x21,0x00,0x00,0x00,0x04,0x99,0x00,0x00,
+  0x00,0x00,0x07,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x11,0x31,0x4b,0x01,0x86,
+  0xc1,0xe8,0x7a,0xff,0xdb,0xff,0x9b,0xff,0xdc,0xff,0x9c,0xff,0xdc,0xff,0x9b,
+  0xff,0x86,0xdc,0xff,0x9c,0xff,0x86,0xdc,0xff,0x9d,0xff,0x02,0xdc,0xff,0x9e,
+  0xff,0xdd,0xff,0x9e,0xff,0x82,0xdc,0xff,0x9e,0xff,0x02,0xdc,0xff,0x9d,0xff,
+  0xdd,0xff,0x9e,0xff,0x84,0xdd,0xff,0x9f,0xff,0x01,0xdd,0xff,0x9e,0xff,0x87,
+  0xdd,0xff,0x9f,0xff,0x01,0xdd,0xff,0xa0,0xff,0x84,0xdd,0xff,0x9f,0xff,0x01,
+  0xdd,0xff,0x9e,0xff,0x83,0xdc,0xff,0x9d,0xff,0x05,0xdb,0xff,0x9b,0xff,0xdb,
+  0xff,0x9a,0xff,0xb6,0xdc,0x70,0xf9,0x08,0x0c,0x00,0x31,0x00,0x00,0x00,0x06,
+  0x99,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x14,0x2f,
+  0x48,0x01,0x8a,0xc6,0xeb,0x81,0xff,0xdd,0xff,0x9f,0xff,0x86,0xdd,0xff,0xa0,
+  0xff,0x82,0xdd,0xff,0xa1,0xff,0x02,0xde,0xff,0xa1,0xff,0xdd,0xff,0xa1,0xff,
+  0x8a,0xde,0xff,0xa1,0xff,0x01,0xde,0xff,0xa2,0xff,0x82,0xde,0xff,0xa1,0xff,
+  0x82,0xdd,0xff,0xa1,0xff,0x82,0xde,0xff,0xa2,0xff,0x82,0xde,0xff,0xa1,0xff,
+  0x02,0xdd,0xff,0xa0,0xff,0xdd,0xff,0xa1,0xff,0x82,0xde,0xff,0xa3,0xff,0x03,
+  0xde,0xff,0xa2,0xff,0xdd,0xff,0xa1,0xff,0xdd,0xff,0xa0,0xff,0x83,0xdd,0xff,
+  0x9f,0xff,0x83,0xdd,0xff,0xa0,0xff,0x04,0xdd,0xff,0x9f,0xff,0xbd,0xe2,0x79,
+  0xf9,0x08,0x0c,0x00,0x34,0x00,0x00,0x00,0x07,0x99,0x00,0x00,0x00,0x00,0x04,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x14,0x2f,0x48,0x01,0x8b,0xca,0xed,0x89,
+  0xff,0x86,0xde,0xff,0xa3,0xff,0x03,0xde,0xff,0xa4,0xff,0xde,0xff,0xa3,0xff,
+  0xde,0xff,0xa4,0xff,0x83,0xdf,0xff,0xa4,0xff,0x8b,0xdf,0xff,0xa5,0xff,0x01,
+  0xde,0xff,0xa4,0xff,0x82,0xdf,0xff,0xa4,0xff,0x03,0xdf,0xff,0xa6,0xff,0xdf,
+  0xff,0xa4,0xff,0xde,0xff,0xa4,0xff,0x82,0xde,0xff,0xa3,0xff,0x02,0xde,0xff,
+  0xa4,0xff,0xdf,0xff,0xa4,0xff,0x8b,0xde,0xff,0xa3,0xff,0x03,0xc3,0xe7,0x81,
+  0xf9,0x08,0x0b,0x00,0x35,0x00,0x00,0x00,0x07,0x99,0x00,0x00,0x00,0x00,0x0c,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x14,0x2d,0x45,0x01,0x8b,0x71,0x9b,0x25,
+  0xff,0x79,0xa3,0x2c,0xff,0x7b,0xa7,0x2d,0xff,0x81,0xac,0x34,0xff,0x8a,0xb5,
+  0x3e,0xff,0x97,0xc2,0x4b,0xff,0xa9,0xd2,0x5e,0xff,0xbf,0xe4,0x7a,0xff,0xd6,
+  0xf8,0x99,0xff,0x86,0xe0,0xff,0xa8,0xff,0x01,0xe0,0xff,0xa9,0xff,0x83,0xe0,
+  0xff,0xa8,0xff,0x83,0xe0,0xff,0xa9,0xff,0x88,0xe0,0xff,0xa8,0xff,0x01,0xe0,
+  0xff,0xa7,0xff,0x83,0xe0,0xff,0xa8,0xff,0x02,0xe0,0xff,0xa7,0xff,0xdf,0xff,
+  0xa6,0xff,0x84,0xdf,0xff,0xa5,0xff,0x01,0xde,0xff,0xa4,0xff,0x82,0xdf,0xff,
+  0xa4,0xff,0x82,0xde,0xff,0xa4,0xff,0x03,0xc8,0xeb,0x88,0xfa,0x0b,0x10,0x00,
+  0x37,0x00,0x00,0x00,0x07,0x96,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x01,
+  0x01,0x02,0x00,0x03,0x52,0x73,0x0f,0x0c,0x8a,0xb2,0x39,0x29,0x68,0x8d,0x23,
+  0x56,0x31,0x4a,0x05,0xa0,0x3c,0x5c,0x01,0xff,0x85,0x3b,0x5b,0x01,0xff,0x07,
+  0x3c,0x5d,0x01,0xff,0x41,0x64,0x01,0xff,0x4a,0x71,0x03,0xff,0x66,0x90,0x1b,
+  0xff,0x92,0xba,0x48,0xff,0xbd,0xe2,0x7b,0xff,0xde,0xfd,0xa5,0xff,0x82,0xe1,
+  0xff,0xab,0xff,0x07,0xe1,0xff,0xac,0xff,0xe2,0xff,0xac,0xff,0xe1,0xff,0xab,
+  0xff,0xe1,0xff,0xac,0xff,0xe2,0xff,0xac,0xff,0xe1,0xff,0xac,0xff,0xe2,0xff,
+  0xac,0xff,0x85,0xe1,0xff,0xab,0xff,0x82,0xe1,0xff,0xaa,0xff,0x83,0xe0,0xff,
+  0xa9,0xff,0x01,0xe1,0xff,0xa9,0xff,0x89,0xe0,0xff,0xa8,0xff,0x83,0xe0,0xff,
+  0xa7,0xff,0x03,0xcd,0xee,0x8f,0xfc,0x10,0x19,0x00,0x3c,0x00,0x00,0x00,0x07,
+  0x92,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x04,0x05,0x00,0x03,0x73,
+  0x9a,0x26,0x19,0xb8,0xdc,0x6f,0x5b,0xca,0xec,0x88,0x98,0xd1,0xf2,0x91,0xce,
+  0xd8,0xf9,0x9b,0xf4,0xe0,0xfe,0xa7,0xff,0x9f,0xc5,0x5a,0xff,0x3c,0x5c,0x01,
+  0xff,0x34,0x50,0x01,0xe2,0x32,0x4d,0x01,0xdd,0x33,0x4e,0x01,0xdd,0x34,0x4f,
+  0x01,0xe1,0x35,0x52,0x01,0xe9,0x38,0x56,0x01,0xf3,0x3b,0x5b,0x01,0xfd,0x82,
+  0x3b,0x5b,0x01,0xff,0x82,0x3b,0x5a,0x01,0xff,0x04,0x40,0x63,0x01,0xff,0x57,
+  0x7f,0x0f,0xff,0x90,0xb8,0x4a,0xff,0xcb,0xec,0x8e,0xff,0x8d,0xe2,0xff,0xad,
+  0xff,0x82,0xe2,0xff,0xac,0xff,0x03,0xe1,0xff,0xab,0xff,0xe1,0xff,0xac,0xff,
+  0xe1,0xff,0xab,0xff,0x83,0xe0,0xff,0xa9,0xff,0x89,0xe0,0xff,0xa8,0xff,0x03,
+  0xd2,0xf3,0x95,0xfd,0x14,0x20,0x00,0x41,0x00,0x00,0x00,0x08,0x8f,0x00,0x00,
+  0x00,0x00,0x07,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x83,0xa7,0x39,0x1e,
+  0xc1,0xe3,0x7c,0x73,0xd0,0xf2,0x91,0xc4,0xdc,0xfc,0xa1,0xfb,0xe0,0xff,0xa9,
+  0xff,0x83,0xe1,0xff,0xaa,0xff,0x14,0xd8,0xf7,0x9d,0xff,0x90,0xb6,0x4a,0xff,
+  0x37,0x55,0x01,0xff,0x0b,0x11,0x01,0x79,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+  0x5a,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x64,0x04,0x06,
+  0x00,0x70,0x14,0x1e,0x01,0x8a,0x23,0x35,0x01,0xac,0x2f,0x47,0x01,0xcf,0x38,
+  0x56,0x01,0xf3,0x3b,0x5a,0x01,0xff,0x3a,0x59,0x01,0xff,0x3a,0x5a,0x01,0xff,
+  0x43,0x67,0x01,0xff,0x75,0x9c,0x2e,0xff,0xbe,0xe0,0x7f,0xff,0x8b,0xe2,0xff,
+  0xad,0xff,0x84,0xe2,0xff,0xac,0xff,0x01,0xe1,0xff,0xab,0xff,0x82,0xe1,0xff,
+  0xaa,0xff,0x8a,0xe0,0xff,0xa8,0xff,0x03,0xd5,0xf6,0x99,0xfe,0x1b,0x2a,0x01,
+  0x46,0x00,0x00,0x00,0x08,0x8d,0x00,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x01,
+  0x2f,0x40,0x0a,0x07,0xb1,0xd4,0x69,0x4c,0xce,0xef,0x8d,0xb3,0xdc,0xfc,0xa1,
+  0xf9,0xe0,0xff,0xa8,0xff,0xe0,0xff,0xa9,0xff,0xdc,0xfb,0xa2,0xff,0xbb,0xdf,
+  0x7a,0xff,0x96,0xbc,0x50,0xff,0x73,0x9b,0x2c,0xff,0x55,0x7c,0x0e,0xff,0x45,
+  0x6a,0x03,0xff,0x40,0x63,0x01,0xff,0x38,0x56,0x01,0xff,0x12,0x1b,0x01,0x5a,
+  0x03,0x05,0x00,0x27,0x01,0x02,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+  0x22,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x35,0x00,0x00,
+  0x00,0x43,0x00,0x00,0x00,0x54,0x03,0x04,0x00,0x67,0x19,0x26,0x01,0x93,0x2d,
+  0x45,0x01,0xca,0x39,0x57,0x01,0xf7,0x82,0x3a,0x59,0x01,0xff,0x03,0x3f,0x62,
+  0x01,0xff,0x71,0x98,0x2c,0xff,0xc4,0xe5,0x88,0xff,0x85,0xe2,0xff,0xad,0xff,
+  0x82,0xe2,0xff,0xac,0xff,0x02,0xe1,0xff,0xac,0xff,0xe1,0xff,0xab,0xff,0x82,
+  0xe1,0xff,0xaa,0xff,0x03,0xe0,0xff,0xa9,0xff,0xe1,0xff,0xa9,0xff,0xe0,0xff,
+  0xa9,0xff,0x88,0xe0,0xff,0xa8,0xff,0x02,0xe0,0xff,0xa7,0xff,0xdf,0xff,0xa6,
+  0xff,0x82,0xdf,0xff,0xa5,0xff,0x03,0xd6,0xf8,0x99,0xff,0x21,0x32,0x02,0x4b,
+  0x00,0x00,0x00,0x09,0x8b,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x01,0x43,
+  0x59,0x13,0x0a,0xbb,0xde,0x74,0x65,0xd2,0xf4,0x91,0xd5,0xdf,0xff,0xa5,0xff,
+  0xdf,0xff,0xa6,0xff,0xdf,0xfe,0xa5,0xff,0xb8,0xdc,0x76,0xff,0x80,0xa7,0x39,
+  0xff,0x4f,0x75,0x0a,0xff,0x40,0x62,0x01,0xff,0x3c,0x5c,0x01,0xff,0x84,0x3b,
+  0x5b,0x01,0xff,0x16,0x41,0x63,0x02,0xff,0xcb,0xee,0x8a,0xf2,0xd5,0xf6,0x97,
+  0xee,0xd3,0xf5,0x93,0xe6,0xcf,0xf1,0x8e,0xd4,0xc9,0xec,0x88,0xb4,0xbd,0xe1,
+  0x79,0x88,0x99,0xc2,0x4e,0x51,0x30,0x47,0x08,0x18,0x00,0x00,0x00,0x12,0x00,
+  0x00,0x00,0x19,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x51,
+  0x08,0x0c,0x01,0x70,0x25,0x39,0x01,0xb1,0x37,0x54,0x01,0xf0,0x3a,0x59,0x01,
+  0xff,0x39,0x58,0x01,0xff,0x42,0x65,0x03,0xff,0x86,0xab,0x42,0xff,0xd8,0xf6,
+  0x9f,0xff,0x82,0xe1,0xff,0xab,0xff,0x82,0xe0,0xff,0xa9,0xff,0x02,0xe0,0xff,
+  0xa8,0xff,0xe0,0xff,0xa9,0xff,0x87,0xe0,0xff,0xa8,0xff,0x82,0xe0,0xff,0xa7,
+  0xff,0x82,0xdf,0xff,0xa6,0xff,0x01,0xdf,0xff,0xa5,0xff,0x82,0xde,0xff,0xa4,
+  0xff,0x84,0xde,0xff,0xa3,0xff,0x03,0xd8,0xfa,0x9b,0xff,0x28,0x3a,0x07,0x4f,
+  0x00,0x00,0x00,0x0a,0x89,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x37,
+  0x49,0x0f,0x09,0xbc,0xde,0x73,0x64,0xd4,0xf6,0x93,0xdf,0x82,0xde,0xff,0xa3,
+  0xff,0x04,0xd9,0xfb,0x9c,0xff,0xa1,0xc7,0x5c,0xff,0x5c,0x83,0x15,0xff,0x3f,
+  0x62,0x01,0xff,0x84,0x3b,0x5b,0x01,0xff,0x06,0x3a,0x5a,0x01,0xfb,0x34,0x50,
+  0x01,0xe3,0x2d,0x45,0x01,0xc9,0x26,0x3a,0x01,0xb7,0x35,0x51,0x04,0xcd,0xda,
+  0xfa,0x9e,0xff,0x86,0xe0,0xff,0xa7,0xff,0x0f,0xd5,0xf8,0x96,0xf4,0xc5,0xeb,
+  0x80,0xac,0x9c,0xc7,0x4c,0x4e,0x13,0x1d,0x01,0x0c,0x00,0x00,0x00,0x0d,0x00,
+  0x00,0x00,0x18,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x46,0x04,0x06,0x00,0x66,
+  0x25,0x38,0x01,0xae,0x37,0x55,0x01,0xf4,0x39,0x58,0x01,0xff,0x3a,0x59,0x01,
+  0xff,0x51,0x76,0x10,0xff,0xb2,0xd5,0x72,0xff,0x82,0xe0,0xff,0xa8,0xff,0x82,
+  0xe0,0xff,0xa7,0xff,0x01,0xdf,0xff,0xa6,0xff,0x82,0xdf,0xff,0xa5,0xff,0x82,
+  0xde,0xff,0xa4,0xff,0x01,0xdf,0xff,0xa4,0xff,0x82,0xde,0xff,0xa4,0xff,0x85,
+  0xde,0xff,0xa3,0xff,0x85,0xde,0xff,0xa2,0xff,0x04,0xde,0xff,0xa1,0xff,0xd9,
+  0xfb,0x9a,0xff,0x2e,0x42,0x0a,0x53,0x00,0x00,0x00,0x0a,0x87,0x00,0x00,0x00,
+  0x00,0x04,0x00,0x00,0x00,0x01,0x03,0x05,0x00,0x04,0xb0,0xd2,0x67,0x4a,0xd2,
+  0xf5,0x8e,0xd2,0x82,0xdd,0xff,0x9f,0xff,0x05,0xdb,0xfe,0x9d,0xff,0xa7,0xcd,
+  0x61,0xff,0x56,0x7d,0x11,0xff,0x3d,0x5e,0x01,0xff,0x3b,0x5a,0x01,0xff,0x82,
+  0x3b,0x5b,0x01,0xff,0x0c,0x39,0x57,0x01,0xf3,0x2d,0x44,0x01,0xc6,0x1c,0x2b,
+  0x01,0x97,0x06,0x09,0x00,0x6d,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x4f,0x00,
+  0x00,0x00,0x52,0x2f,0x47,0x06,0xa1,0xd6,0xf7,0x97,0xff,0xd8,0xf9,0x9a,0xff,
+  0xd9,0xfa,0x9c,0xff,0xdd,0xfe,0xa1,0xff,0x85,0xde,0xff,0xa3,0xff,0x11,0xdd,
+  0xfe,0xa1,0xff,0xca,0xf1,0x85,0xd6,0xa3,0xcf,0x53,0x5e,0x20,0x31,0x02,0x0a,
+  0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+  0x45,0x09,0x0e,0x01,0x6d,0x2c,0x43,0x01,0xc4,0x39,0x58,0x01,0xfd,0x39,0x58,
+  0x01,0xff,0x3d,0x5f,0x02,0xff,0x83,0xa8,0x41,0xff,0xda,0xfb,0x9e,0xff,0xde,
+  0xff,0xa3,0xff,0xde,0xff,0xa4,0xff,0x82,0xde,0xff,0xa3,0xff,0x04,0xde,0xff,
+  0xa2,0xff,0xdd,0xff,0xa0,0xff,0xde,0xff,0xa1,0xff,0xde,0xff,0xa2,0xff,0x83,
+  0xdd,0xff,0xa1,0xff,0x82,0xdd,0xff,0xa0,0xff,0x85,0xdd,0xff,0x9f,0xff,0x01,
+  0xdc,0xff,0x9e,0xff,0x82,0xdc,0xff,0x9c,0xff,0x03,0xd9,0xfc,0x98,0xff,0x34,
+  0x4a,0x0e,0x57,0x00,0x00,0x00,0x0b,0x86,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,
+  0x00,0x02,0x87,0xac,0x39,0x21,0xc4,0xef,0x71,0xad,0xd6,0xfe,0x8d,0xfe,0xd7,
+  0xff,0x90,0xff,0xd8,0xff,0x91,0xff,0xc2,0xe9,0x7c,0xff,0x69,0x90,0x22,0xff,
+  0x3e,0x5f,0x01,0xff,0x3a,0x5a,0x01,0xff,0x3b,0x5a,0x01,0xff,0x3b,0x5b,0x01,
+  0xff,0x35,0x51,0x01,0xe1,0x20,0x31,0x01,0x9f,0x05,0x07,0x00,0x65,0x00,0x00,
+  0x00,0x4c,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x1d,0x00,
+  0x00,0x00,0x16,0x00,0x00,0x00,0x24,0x2b,0x41,0x01,0x90,0x47,0x6b,0x06,0xff,
+  0x44,0x67,0x03,0xff,0x44,0x68,0x05,0xff,0x4c,0x70,0x0c,0xff,0x60,0x84,0x1f,
+  0xff,0x81,0xa5,0x41,0xff,0xac,0xd0,0x6b,0xff,0xd6,0xfa,0x94,0xff,0xda,0xff,
+  0x98,0xff,0x82,0xda,0xff,0x97,0xff,0x25,0xd9,0xfe,0x94,0xff,0xc0,0xed,0x6f,
+  0xcb,0x86,0xb6,0x30,0x3d,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x07,0x00,0x00,
+  0x00,0x13,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x4d,0x19,0x26,0x01,0x8c,0x35,
+  0x52,0x01,0xeb,0x39,0x58,0x01,0xff,0x3a,0x59,0x01,0xff,0x61,0x86,0x1f,0xff,
+  0xcc,0xee,0x8c,0xff,0xdd,0xff,0xa0,0xff,0xdd,0xff,0x9f,0xff,0xdc,0xff,0x9d,
+  0xff,0xdb,0xff,0x99,0xff,0xd9,0xff,0x93,0xff,0xdb,0xff,0x99,0xff,0xd9,0xff,
+  0x95,0xff,0xd8,0xff,0x91,0xff,0xd7,0xff,0x90,0xff,0xd7,0xff,0x8e,0xff,0xd6,
+  0xff,0x8c,0xff,0xd6,0xff,0x8d,0xff,0xd7,0xff,0x8f,0xff,0xd6,0xff,0x8e,0xff,
+  0xd6,0xff,0x8b,0xff,0xd4,0xff,0x86,0xff,0xd1,0xff,0x7f,0xff,0xcf,0xff,0x79,
+  0xff,0xd0,0xff,0x7b,0xff,0xd1,0xff,0x7e,0xff,0xd0,0xfd,0x7f,0xff,0x39,0x50,
+  0x11,0x5b,0x00,0x00,0x00,0x0b,0x84,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+  0x01,0x06,0x08,0x01,0x05,0xa8,0xdb,0x45,0x64,0xc4,0xfa,0x61,0xee,0xc9,0xff,
+  0x69,0xff,0xca,0xff,0x6b,0xff,0xca,0xfe,0x6b,0xff,0x95,0xc3,0x40,0xff,0x46,
+  0x6a,0x04,0xff,0x3a,0x5a,0x01,0xff,0x3a,0x59,0x01,0xff,0x3b,0x5a,0x01,0xff,
+  0x36,0x52,0x01,0xe5,0x1d,0x2c,0x01,0x94,0x00,0x01,0x00,0x56,0x00,0x00,0x00,
+  0x3b,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x0b,0x00,0x00,
+  0x00,0x07,0x44,0x63,0x0a,0x10,0x93,0xc5,0x34,0x3b,0x61,0x89,0x19,0x6e,0x34,
+  0x4c,0x08,0xaa,0x87,0x3b,0x5b,0x01,0xff,0x03,0x45,0x67,0x08,0xff,0x7f,0xa6,
+  0x37,0xff,0xc0,0xee,0x6c,0xff,0x82,0xcf,0xff,0x78,0xff,0x0a,0xce,0xff,0x77,
+  0xff,0xc8,0xfa,0x6d,0xfc,0xa3,0xd8,0x43,0x8c,0x33,0x4d,0x04,0x0d,0x00,0x00,
+  0x00,0x03,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x38,0x08,
+  0x0b,0x01,0x65,0x2e,0x46,0x02,0xcb,0x82,0x39,0x58,0x01,0xff,0x18,0x4d,0x70,
+  0x0e,0xff,0xb7,0xdf,0x6e,0xff,0xd5,0xff,0x88,0xff,0xd3,0xff,0x83,0xff,0xd0,
+  0xff,0x7c,0xff,0xd1,0xff,0x7d,0xff,0xd0,0xff,0x7a,0xff,0xce,0xff,0x75,0xff,
+  0xcd,0xff,0x73,0xff,0xcd,0xff,0x72,0xff,0xcc,0xff,0x71,0xff,0xcb,0xff,0x6f,
+  0xff,0xcb,0xff,0x6c,0xff,0xc9,0xff,0x69,0xff,0xc9,0xff,0x67,0xff,0xc7,0xff,
+  0x62,0xff,0xc5,0xff,0x5e,0xff,0xc5,0xff,0x5d,0xff,0xc5,0xff,0x5c,0xff,0xc5,
+  0xff,0x5e,0xff,0xc6,0xff,0x61,0xff,0xc6,0xfd,0x63,0xff,0x3c,0x56,0x0f,0x5f,
+  0x00,0x00,0x00,0x0c,0x83,0x00,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x02,0x78,
+  0xa5,0x22,0x1f,0xae,0xed,0x3b,0xb2,0xbb,0xfd,0x46,0xff,0xbd,0xfe,0x49,0xff,
+  0xbe,0xfe,0x4b,0xff,0xba,0xf9,0x48,0xff,0x72,0xa1,0x1d,0xff,0x3d,0x5f,0x01,
+  0xff,0x82,0x3a,0x59,0x01,0xff,0x1a,0x3a,0x58,0x01,0xf8,0x27,0x3b,0x01,0xaa,
+  0x03,0x04,0x00,0x59,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+  0x0d,0x00,0x00,0x00,0x07,0x78,0xa7,0x1e,0x23,0xa7,0xe3,0x38,0x75,0xb4,0xf1,
+  0x45,0xc0,0xbd,0xfa,0x4f,0xf5,0xc4,0xff,0x59,0xff,0x7d,0xad,0x26,0xff,0x39,
+  0x58,0x01,0xff,0x30,0x49,0x01,0xd2,0x2b,0x42,0x01,0xc3,0x2a,0x41,0x01,0xc1,
+  0x2c,0x44,0x01,0xc8,0x31,0x4c,0x01,0xd9,0x38,0x56,0x01,0xf1,0x3b,0x5b,0x01,
+  0xff,0x3a,0x5a,0x01,0xff,0x3a,0x59,0x01,0xff,0x40,0x61,0x04,0xff,0x82,0xad,
+  0x33,0xff,0xc2,0xfa,0x5e,0xff,0x82,0xc5,0xff,0x5e,0xff,0x03,0xc4,0xff,0x5b,
+  0xff,0xac,0xe8,0x3f,0xc9,0x63,0x90,0x12,0x25,0x82,0x00,0x00,0x00,0x03,0x14,
+  0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x28,0x01,0x01,0x00,0x50,0x25,0x38,0x02,
+  0xa8,0x38,0x57,0x01,0xfc,0x38,0x57,0x01,0xff,0x42,0x64,0x05,0xff,0xa4,0xd3,
+  0x4e,0xff,0xca,0xff,0x6b,0xff,0xc9,0xff,0x69,0xff,0xc8,0xff,0x65,0xff,0xc7,
+  0xff,0x63,0xff,0xc5,0xff,0x5d,0xff,0xc2,0xff,0x56,0xff,0xc0,0xff,0x52,0xff,
+  0xbf,0xff,0x4f,0xff,0xbf,0xfe,0x4d,0xff,0xbe,0xfe,0x4b,0xff,0xbc,0xfd,0x49,
+  0xff,0xbb,0xfd,0x46,0xff,0x82,0xbb,0xfd,0x45,0xff,0x07,0xba,0xfd,0x45,0xff,
+  0xba,0xfd,0x44,0xff,0xbb,0xfd,0x46,0xff,0xbc,0xfd,0x48,0xff,0xbb,0xfc,0x47,
+  0xff,0x3e,0x5a,0x0c,0x62,0x00,0x00,0x00,0x0c,0x82,0x00,0x00,0x00,0x00,0x04,
+  0x00,0x00,0x00,0x04,0x91,0xc9,0x2a,0x4e,0xae,0xf0,0x39,0xea,0xb3,0xf6,0x3d,
+  0xff,0x82,0xb4,0xf7,0x3e,0xff,0x03,0xad,0xee,0x3a,0xff,0x5d,0x8a,0x0e,0xff,
+  0x3b,0x5b,0x01,0xff,0x82,0x3a,0x59,0x01,0xff,0x09,0x35,0x51,0x01,0xe1,0x13,
+  0x1d,0x01,0x76,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x0d,
+  0x08,0x0c,0x01,0x08,0x8d,0xc5,0x26,0x44,0xaa,0xea,0x37,0xb3,0xb5,0xf8,0x3f,
+  0xfa,0x82,0xb8,0xfb,0x42,0xff,0x0d,0xb9,0xfc,0x43,0xff,0xb3,0xf5,0x3f,0xff,
+  0x72,0xa4,0x19,0xff,0x36,0x53,0x01,0xff,0x0d,0x13,0x01,0x72,0x00,0x00,0x00,
+  0x4f,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x58,0x01,0x02,
+  0x00,0x65,0x13,0x1d,0x01,0x88,0x29,0x3f,0x01,0xbd,0x38,0x55,0x01,0xf3,0x82,
+  0x39,0x58,0x01,0xff,0x16,0x53,0x79,0x0d,0xff,0xa7,0xe4,0x3a,0xff,0xb9,0xfc,
+  0x44,0xff,0xb9,0xfc,0x43,0xff,0xb9,0xfc,0x44,0xff,0xab,0xec,0x38,0xe6,0x71,
+  0xa3,0x17,0x3c,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x08,
+  0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x43,0x1c,0x2b,0x01,0x8e,0x37,0x55,0x01,
+  0xf6,0x38,0x57,0x01,0xff,0x3f,0x60,0x03,0xff,0x99,0xcd,0x39,0xff,0xbe,0xfd,
+  0x4c,0xff,0xbb,0xfc,0x48,0xff,0xb9,0xfb,0x43,0xff,0xb7,0xfa,0x41,0xff,0xb6,
+  0xf9,0x40,0xff,0x82,0xb5,0xf8,0x3f,0xff,0x82,0xb4,0xf7,0x3e,0xff,0x01,0xb3,
+  0xf6,0x3d,0xff,0x82,0xb4,0xf7,0x3e,0xff,0x85,0xb3,0xf6,0x3d,0xff,0x07,0xb4,
+  0xf7,0x3d,0xff,0x41,0x5e,0x0d,0x65,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x01,
+  0x23,0x31,0x06,0x09,0x99,0xd5,0x2a,0x83,0xaa,0xed,0x34,0xfd,0x83,0xac,0xef,
+  0x36,0xff,0x23,0xa4,0xe5,0x32,0xff,0x55,0x7e,0x0a,0xff,0x3a,0x59,0x01,0xff,
+  0x39,0x58,0x01,0xff,0x3a,0x59,0x01,0xff,0x2f,0x48,0x02,0xc5,0x05,0x08,0x01,
+  0x57,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x08,0x81,0xb6,
+  0x1f,0x38,0xa3,0xe3,0x30,0xbf,0xae,0xf1,0x38,0xff,0xaf,0xf2,0x39,0xff,0xb0,
+  0xf3,0x3a,0xff,0x96,0xd2,0x2c,0xff,0x6b,0x9b,0x17,0xff,0x4b,0x71,0x07,0xff,
+  0x3e,0x5f,0x01,0xff,0x3d,0x5f,0x01,0xff,0x36,0x52,0x01,0xff,0x12,0x1a,0x01,
+  0x51,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,
+  0x00,0x1b,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x4b,0x06,
+  0x08,0x01,0x6a,0x26,0x3a,0x01,0xb4,0x38,0x56,0x01,0xf8,0x38,0x57,0x01,0xff,
+  0x41,0x63,0x04,0xff,0x93,0xce,0x2c,0xff,0x83,0xb1,0xf4,0x3b,0xff,0x0c,0xa8,
+  0xe9,0x33,0xf1,0x73,0xa7,0x17,0x49,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3a,0x16,0x22,0x01,
+  0x7e,0x36,0x54,0x01,0xf1,0x38,0x57,0x01,0xff,0x3e,0x5f,0x03,0xff,0x92,0xcd,
+  0x2b,0xff,0x82,0xb0,0xf3,0x3a,0xff,0x03,0xaf,0xf2,0x39,0xff,0xae,0xf1,0x38,
+  0xff,0xad,0xf0,0x37,0xff,0x82,0xac,0xef,0x36,0xff,0x82,0xad,0xf0,0x37,0xff,
+  0x86,0xac,0xef,0x36,0xff,0x07,0xad,0xf0,0x37,0xff,0xad,0xf0,0x36,0xff,0x42,
+  0x5f,0x0d,0x67,0x00,0x00,0x00,0x0d,0x57,0x7a,0x12,0x15,0x9a,0xd9,0x27,0xb6,
+  0xa3,0xe6,0x2d,0xff,0x83,0xa4,0xe7,0x2e,0xff,0x11,0x9f,0xe1,0x2c,0xff,0x54,
+  0x7d,0x0a,0xff,0x39,0x59,0x01,0xff,0x39,0x58,0x01,0xff,0x39,0x58,0x01,0xfe,
+  0x2b,0x41,0x02,0xb1,0x01,0x01,0x00,0x48,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+  0x0b,0x45,0x64,0x0c,0x12,0x94,0xd2,0x24,0x92,0xa5,0xe7,0x2f,0xfb,0xa7,0xea,
+  0x31,0xff,0xa8,0xeb,0x32,0xff,0x98,0xd6,0x2a,0xff,0x5b,0x86,0x0e,0xff,0x3d,
+  0x5d,0x01,0xff,0x84,0x3b,0x5b,0x01,0xff,0x04,0x3f,0x61,0x02,0xff,0x71,0xa4,
+  0x17,0x92,0x62,0x92,0x0d,0x30,0x04,0x05,0x01,0x04,0x82,0x00,0x00,0x00,0x02,
+  0x1a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x15,0x00,0x00,
+  0x00,0x2a,0x00,0x00,0x00,0x49,0x0f,0x17,0x01,0x79,0x32,0x4d,0x01,0xdd,0x38,
+  0x57,0x01,0xff,0x3d,0x5d,0x02,0xff,0x8c,0xc7,0x25,0xff,0xa9,0xec,0x33,0xff,
+  0xa8,0xeb,0x32,0xff,0xa9,0xec,0x33,0xff,0xa0,0xe2,0x2c,0xf4,0x6c,0x9e,0x12,
+  0x47,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+  0x00,0x12,0x00,0x00,0x00,0x34,0x14,0x1e,0x01,0x77,0x36,0x54,0x01,0xf1,0x38,
+  0x57,0x01,0xff,0x40,0x61,0x03,0xff,0x94,0xd1,0x28,0xff,0xa8,0xeb,0x32,0xff,
+  0x82,0xa6,0xe9,0x30,0xff,0x83,0xa5,0xe8,0x2f,0xff,0x02,0xa6,0xe9,0x30,0xff,
+  0xa5,0xe8,0x2f,0xff,0x83,0xa4,0xe7,0x2e,0xff,0x82,0xa5,0xe8,0x2f,0xff,0x06,
+  0xa6,0xe9,0x30,0xff,0xa5,0xe8,0x2f,0xff,0xa4,0xe7,0x2e,0xff,0x43,0x61,0x0c,
+  0x69,0x00,0x00,0x00,0x0d,0x96,0xd7,0x22,0xd1,0x82,0x9c,0xdf,0x26,0xff,0x01,
+  0x9c,0xe0,0x27,0xff,0x82,0x9d,0xe0,0x27,0xff,0x02,0x5d,0x8a,0x0d,0xff,0x39,
+  0x59,0x01,0xff,0x82,0x39,0x58,0x01,0xff,0x06,0x29,0x3f,0x02,0xaa,0x00,0x00,
+  0x00,0x40,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x09,0x6e,0xa1,0x15,0x30,0x97,
+  0xd9,0x24,0xd5,0x82,0x9f,0xe2,0x29,0xff,0x04,0x9f,0xe3,0x29,0xff,0x7d,0xb4,
+  0x1b,0xff,0x41,0x63,0x03,0xff,0x3a,0x5a,0x01,0xff,0x82,0x3b,0x5b,0x01,0xff,
+  0x09,0x37,0x55,0x01,0xed,0x2d,0x44,0x01,0xc8,0x25,0x38,0x01,0xb4,0x3b,0x5b,
+  0x04,0xcf,0xa0,0xe3,0x2a,0xff,0x9e,0xe0,0x28,0xfd,0x8f,0xcf,0x1d,0xb7,0x5c,
+  0x8a,0x08,0x28,0x00,0x00,0x00,0x03,0x82,0x00,0x00,0x00,0x00,0x09,0x00,0x00,
+  0x00,0x02,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x33,0x03,
+  0x05,0x00,0x5d,0x2c,0x43,0x01,0xc4,0x38,0x57,0x01,0xff,0x3f,0x60,0x03,0xff,
+  0x93,0xd1,0x24,0xff,0x82,0xa1,0xe4,0x2b,0xff,0x0d,0xa0,0xe3,0x2a,0xff,0x98,
+  0xd9,0x25,0xef,0x47,0x6d,0x05,0x35,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x32,0x16,0x21,0x01,
+  0x79,0x37,0x55,0x01,0xf5,0x38,0x57,0x01,0xff,0x4d,0x74,0x07,0xff,0x9e,0xe1,
+  0x28,0xff,0x84,0x9f,0xe2,0x29,0xff,0x85,0x9e,0xe1,0x28,0xff,0x82,0x9f,0xe2,
+  0x29,0xff,0x08,0x9e,0xe1,0x28,0xff,0x9c,0xdf,0x26,0xff,0x9d,0xe0,0x27,0xff,
+  0x9d,0xe1,0x27,0xff,0x42,0x61,0x0a,0x6b,0x00,0x00,0x00,0x0d,0x92,0xd4,0x1d,
+  0xff,0x95,0xd8,0x1f,0xff,0x83,0x96,0xd9,0x20,0xff,0x0a,0x8a,0xc9,0x1a,0xff,
+  0x3d,0x5e,0x01,0xff,0x38,0x57,0x01,0xff,0x39,0x58,0x01,0xff,0x2c,0x43,0x02,
+  0xb3,0x00,0x01,0x00,0x3e,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x08,0x78,0xaf,
+  0x16,0x4d,0x94,0xd7,0x20,0xf0,0x82,0x98,0xdb,0x22,0xff,0x0c,0x99,0xdc,0x23,
+  0xff,0x6e,0xa1,0x12,0xff,0x3b,0x5b,0x01,0xff,0x3a,0x59,0x01,0xff,0x3a,0x5a,
+  0x01,0xff,0x36,0x54,0x01,0xe8,0x1e,0x2e,0x01,0x99,0x01,0x02,0x00,0x60,0x00,
+  0x00,0x00,0x4f,0x00,0x00,0x00,0x51,0x33,0x4e,0x04,0x9f,0x98,0xdb,0x22,0xff,
+  0x82,0x99,0xdc,0x23,0xff,0x04,0x8d,0xcd,0x1b,0xef,0x52,0x7d,0x05,0x57,0x00,
+  0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x82,0x00,0x00,0x00,0x00,0x16,0x00,0x00,
+  0x00,0x02,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x26,0x01,0x01,0x00,0x51,0x2b,
+  0x41,0x01,0xbd,0x63,0x94,0x0b,0xff,0x96,0xd9,0x21,0xff,0x9a,0xdd,0x24,0xff,
+  0x9a,0xdd,0x23,0xff,0x99,0xdc,0x23,0xff,0x76,0xae,0x15,0xff,0x39,0x56,0x03,
+  0xd0,0x0d,0x12,0x04,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x02,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x34,0x1a,0x28,0x01,0x85,0x3d,
+  0x5f,0x01,0xfa,0x81,0xbe,0x15,0xff,0x98,0xdb,0x22,0xff,0x83,0x99,0xdc,0x23,
+  0xff,0x82,0x98,0xdb,0x22,0xff,0x01,0x97,0xda,0x21,0xff,0x84,0x98,0xdb,0x22,
+  0xff,0x01,0x97,0xda,0x21,0xff,0x82,0x96,0xd9,0x20,0xff,0x05,0x95,0xd8,0x1f,
+  0xff,0x97,0xda,0x21,0xff,0x41,0x61,0x09,0x6c,0x00,0x00,0x00,0x0e,0x70,0xa5,
+  0x11,0xd7,0x82,0x90,0xd3,0x1a,0xff,0x01,0x8f,0xd2,0x19,0xff,0x82,0x90,0xd3,
+  0x1a,0xff,0x08,0x55,0x83,0x04,0xff,0x37,0x55,0x01,0xff,0x31,0x4b,0x02,0xcf,
+  0x02,0x02,0x00,0x42,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x05,0x01,0x01,0x00,
+  0x10,0x7c,0xb6,0x15,0xdc,0x83,0x92,0xd5,0x1c,0xff,0x0c,0x81,0xbe,0x15,0xff,
+  0x3a,0x5a,0x01,0xff,0x39,0x58,0x01,0xff,0x3a,0x59,0x01,0xff,0x2d,0x44,0x01,
+  0xbf,0x05,0x07,0x00,0x5e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x22,0x00,0x00,
+  0x00,0x16,0x00,0x00,0x00,0x24,0x37,0x54,0x04,0x90,0x92,0xd5,0x1c,0xff,0x83,
+  0x93,0xd6,0x1d,0xff,0x03,0x7d,0xba,0x11,0xfb,0x3e,0x5f,0x02,0x5c,0x00,0x00,
+  0x00,0x06,0x83,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x0a,0x19,0x26,0x01,0x33,0x72,0xa9,0x10,0xca,0x92,0xd5,0x1c,0xff,0x83,0x93,
+  0xd6,0x1d,0xff,0x05,0x7f,0xba,0x15,0xff,0x3e,0x5f,0x01,0xff,0x37,0x54,0x01,
+  0xf2,0x19,0x25,0x01,0x34,0x00,0x00,0x00,0x05,0x82,0x00,0x00,0x00,0x00,0x07,
+  0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x16,0x27,0x3c,0x01,0x6c,0x78,0xb3,0x10,
+  0xf9,0x91,0xd4,0x1b,0xff,0x92,0xd5,0x1c,0xff,0x93,0xd6,0x1d,0xff,0x82,0x92,
+  0xd5,0x1c,0xff,0x82,0x91,0xd4,0x1b,0xff,0x83,0x92,0xd5,0x1c,0xff,0x83,0x91,
+  0xd4,0x1b,0xff,0x83,0x90,0xd3,0x1a,0xff,0x05,0x91,0xd4,0x1b,0xff,0x40,0x5f,
+  0x07,0x6d,0x00,0x00,0x00,0x0e,0x34,0x4e,0x05,0x88,0x89,0xcb,0x14,0xff,0x83,
+  0x8a,0xcd,0x14,0xff,0x09,0x8b,0xce,0x15,0xff,0x72,0xac,0x0b,0xff,0x41,0x65,
+  0x01,0xff,0x2c,0x43,0x01,0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x05,0x00,
+  0x00,0x00,0x03,0x00,0x00,0x00,0x1e,0x52,0x7b,0x09,0xb0,0x82,0x8c,0xcf,0x16,
+  0xff,0x0d,0x8b,0xce,0x15,0xff,0x88,0xca,0x14,0xff,0x45,0x6b,0x01,0xff,0x38,
+  0x56,0x01,0xfe,0x27,0x3b,0x02,0xa9,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x23,
+  0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+  0x16,0x38,0x55,0x03,0x8a,0x8d,0xcf,0x17,0xff,0x84,0x8d,0xd0,0x17,0xff,0x03,
+  0x65,0x9a,0x07,0xf1,0x29,0x3e,0x02,0x34,0x00,0x00,0x00,0x04,0x82,0x00,0x00,
+  0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x51,0x7b,0x05,0x27,0x81,0xc0,0x11,0xd1,
+  0x8c,0xcf,0x16,0xff,0x82,0x8d,0xd0,0x17,0xff,0x07,0x8e,0xd1,0x18,0xff,0x7f,
+  0xbd,0x12,0xff,0x43,0x66,0x02,0xff,0x38,0x56,0x01,0xfd,0x1f,0x30,0x01,0x88,
+  0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x05,0x82,0x00,0x00,0x00,0x00,0x03,0x00,
+  0x00,0x00,0x04,0x37,0x55,0x02,0x3d,0x74,0xaf,0x0c,0xee,0x83,0x8c,0xcf,0x16,
+  0xff,0x83,0x8d,0xd0,0x17,0xff,0x01,0x8c,0xcf,0x16,0xff,0x82,0x8d,0xd0,0x17,
+  0xff,0x04,0x8b,0xce,0x15,0xff,0x8c,0xcf,0x16,0xff,0x8b,0xce,0x15,0xff,0x8c,
+  0xcf,0x15,0xff,0x82,0x8b,0xce,0x15,0xff,0x01,0x8a,0xcd,0x14,0xff,0x82,0x8b,
+  0xce,0x15,0xff,0x06,0x3f,0x5e,0x06,0x6d,0x00,0x00,0x00,0x0e,0x01,0x02,0x00,
+  0x46,0x69,0x9e,0x0b,0xde,0x86,0xc9,0x10,0xff,0x86,0xc9,0x0f,0xff,0x82,0x86,
+  0xc9,0x10,0xff,0x09,0x82,0xc4,0x0e,0xff,0x52,0x7f,0x01,0xff,0x39,0x58,0x01,
+  0xf7,0x16,0x20,0x02,0x27,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,
+  0x00,0x1e,0x1e,0x2d,0x01,0x7b,0x7b,0xb8,0x0e,0xff,0x83,0x87,0xca,0x11,0xff,
+  0x0b,0x64,0x99,0x06,0xff,0x35,0x51,0x01,0xf7,0x07,0x0b,0x01,0x4f,0x00,0x00,
+  0x00,0x1a,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x37,0x53,0x03,0x8b,0x88,0xca,0x12,0xff,
+  0x84,0x88,0xcb,0x12,0xff,0x07,0x82,0xc4,0x0f,0xff,0x4d,0x77,0x02,0xc4,0x04,
+  0x06,0x01,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x60,0x91,0x06,0x3e,
+  0x81,0xc2,0x0f,0xe6,0x83,0x88,0xcb,0x12,0xff,0x0c,0x89,0xcc,0x13,0xff,0x7d,
+  0xbc,0x0f,0xff,0x44,0x69,0x02,0xff,0x38,0x57,0x01,0xff,0x26,0x3a,0x01,0xaa,
+  0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x04,0x3e,0x5f,0x02,0x36,0x74,0xb0,0x0a,0xe8,0x82,0x88,
+  0xcb,0x12,0xff,0x82,0x87,0xca,0x11,0xff,0x01,0x88,0xcb,0x12,0xff,0x83,0x89,
+  0xcc,0x13,0xff,0x01,0x87,0xca,0x12,0xff,0x83,0x87,0xca,0x11,0xff,0x02,0x86,
+  0xc9,0x10,0xff,0x87,0xca,0x11,0xff,0x82,0x86,0xc9,0x10,0xff,0x83,0x87,0xca,
+  0x11,0xff,0x05,0x3d,0x5d,0x05,0x6d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x29,
+  0x2b,0x42,0x03,0x87,0x7f,0xc0,0x0b,0xfe,0x84,0x82,0xc5,0x0c,0xff,0x0f,0x6a,
+  0xa2,0x05,0xff,0x48,0x6f,0x01,0xff,0x33,0x4d,0x02,0x83,0x00,0x00,0x00,0x07,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x13,0x02,0x02,0x00,0x49,0x52,0x7d,0x05,
+  0xe4,0x84,0xc7,0x0d,0xff,0x83,0xc6,0x0d,0xff,0x84,0xc6,0x0e,0xff,0x7b,0xbb,
+  0x0b,0xff,0x46,0x6b,0x01,0xff,0x28,0x3d,0x02,0x7b,0x00,0x00,0x00,0x0b,0x83,
+  0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x36,0x52,
+  0x02,0x8a,0x82,0x84,0xc7,0x0e,0xff,0x01,0x83,0xc6,0x0d,0xff,0x83,0x84,0xc7,
+  0x0e,0xff,0x06,0x6f,0xaa,0x07,0xff,0x3b,0x5a,0x02,0x6c,0x00,0x00,0x00,0x0c,
+  0x68,0x9e,0x06,0x5d,0x81,0xc2,0x0c,0xf5,0x85,0xc8,0x0f,0xff,0x82,0x84,0xc7,
+  0x0e,0xff,0x0d,0x85,0xc8,0x0f,0xff,0x79,0xb6,0x0c,0xff,0x45,0x6a,0x02,0xff,
+  0x38,0x57,0x01,0xff,0x2b,0x42,0x01,0xbd,0x01,0x01,0x00,0x49,0x00,0x00,0x00,
+  0x1a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x44,0x68,
+  0x02,0x39,0x73,0xb0,0x08,0xe8,0x83,0xc6,0x0d,0xff,0x84,0x84,0xc7,0x0e,0xff,
+  0x03,0x83,0xc5,0x0e,0xff,0x6b,0xa1,0x09,0xff,0x83,0xc6,0x0e,0xff,0x84,0x84,
+  0xc7,0x0e,0xff,0x88,0x83,0xc6,0x0d,0xff,0x05,0x3c,0x5b,0x04,0x6d,0x00,0x00,
+  0x00,0x0e,0x00,0x00,0x00,0x14,0x00,0x01,0x00,0x46,0x59,0x88,0x06,0xd1,0x84,
+  0x7f,0xc2,0x09,0xff,0x0a,0x7c,0xbd,0x08,0xff,0x56,0x86,0x01,0xff,0x43,0x67,
+  0x01,0xe8,0x18,0x23,0x02,0x1b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x09,0x00,
+  0x00,0x00,0x30,0x24,0x37,0x01,0x9b,0x71,0xad,0x07,0xff,0x7f,0xc2,0x09,0xff,
+  0x82,0x80,0xc3,0x0a,0xff,0x04,0x64,0x9a,0x03,0xff,0x39,0x58,0x01,0xdc,0x08,
+  0x0b,0x01,0x15,0x00,0x00,0x00,0x01,0x82,0x00,0x00,0x00,0x00,0x04,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x16,0x35,0x51,0x02,0x8a,0x80,0xc3,0x0a,0xff,0x84,
+  0x81,0xc4,0x0b,0xff,0x82,0x80,0xc3,0x0a,0xff,0x03,0x5b,0x8d,0x02,0xea,0x65,
+  0x9c,0x05,0x93,0x7f,0xc1,0x0a,0xfc,0x84,0x81,0xc4,0x0b,0xff,0x0e,0x73,0xae,
+  0x09,0xff,0x42,0x66,0x02,0xff,0x38,0x58,0x01,0xff,0x2d,0x45,0x01,0xc5,0x02,
+  0x03,0x00,0x4f,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x05,0x4a,0x72,0x02,0x3d,0x74,0xb1,0x06,0xea,0x81,0xc4,0x0b,
+  0xff,0x80,0xc3,0x0a,0xff,0x81,0xc4,0x0b,0xff,0x82,0x80,0xc3,0x0a,0xff,0x06,
+  0x7d,0xbd,0x0b,0xff,0x4e,0x77,0x04,0xff,0x3c,0x5c,0x01,0xff,0x4b,0x74,0x03,
+  0xff,0x73,0xaf,0x09,0xff,0x81,0xc5,0x0b,0xff,0x83,0x81,0xc4,0x0b,0xff,0x05,
+  0x80,0xc3,0x0a,0xff,0x7f,0xc2,0x09,0xff,0x80,0xc3,0x0a,0xff,0x81,0xc4,0x0b,
+  0xff,0x81,0xc3,0x0b,0xff,0x82,0x7f,0xc2,0x09,0xff,0x06,0x39,0x58,0x03,0x6c,
+  0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x28,0x14,0x1e,0x01,
+  0x73,0x72,0xaf,0x06,0xf9,0x84,0x7c,0xbf,0x06,0xff,0x09,0x6c,0xa7,0x04,0xff,
+  0x50,0x7c,0x01,0xff,0x3e,0x60,0x02,0x84,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+  0x03,0x00,0x00,0x00,0x1a,0x03,0x04,0x00,0x52,0x44,0x68,0x02,0xe8,0x7b,0xbd,
+  0x07,0xff,0x82,0x7d,0xc0,0x07,0xff,0x04,0x79,0xbb,0x06,0xff,0x53,0x81,0x01,
+  0xff,0x30,0x49,0x02,0x77,0x00,0x00,0x00,0x07,0x82,0x00,0x00,0x00,0x00,0x06,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x35,0x51,0x02,0x8a,0x7d,0xc0,0x08,
+  0xff,0x7e,0xc1,0x08,0xff,0x7d,0xc0,0x07,0xff,0x84,0x7e,0xc1,0x08,0xff,0x02,
+  0x7b,0xbd,0x07,0xff,0x7e,0xc0,0x08,0xff,0x84,0x7e,0xc1,0x08,0xff,0x0c,0x68,
+  0xa0,0x05,0xff,0x3f,0x60,0x01,0xff,0x39,0x58,0x01,0xff,0x2d,0x45,0x01,0xc5,
+  0x01,0x02,0x00,0x51,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x06,0x53,0x80,0x02,0x4c,0x75,0xb5,0x05,0xf0,0x7d,0xc0,
+  0x07,0xff,0x84,0x7e,0xc1,0x08,0xff,0x08,0x74,0xb2,0x07,0xff,0x45,0x6a,0x02,
+  0xff,0x3b,0x5b,0x01,0xfe,0x3c,0x5c,0x01,0xff,0x3b,0x5b,0x01,0xff,0x3d,0x5d,
+  0x01,0xff,0x55,0x83,0x03,0xff,0x77,0xb6,0x08,0xff,0x83,0x7e,0xc1,0x08,0xff,
+  0x02,0x7d,0xc1,0x07,0xff,0x7e,0xc1,0x08,0xff,0x82,0x7d,0xc0,0x07,0xff,0x0a,
+  0x7c,0xbf,0x06,0xff,0x7d,0xc0,0x07,0xff,0x38,0x56,0x02,0x6b,0x00,0x00,0x00,
+  0x0e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x42,0x3b,0x5b,
+  0x02,0xb1,0x79,0xbb,0x04,0xff,0x7a,0xbd,0x04,0xff,0x82,0x79,0xbc,0x03,0xff,
+  0x15,0x79,0xbb,0x03,0xff,0x5e,0x92,0x01,0xff,0x4b,0x74,0x01,0xf1,0x29,0x3d,
+  0x03,0x28,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x31,0x1c,
+  0x2b,0x01,0x8f,0x58,0x87,0x03,0xfe,0x7a,0xbd,0x04,0xff,0x7b,0xbe,0x05,0xff,
+  0x7a,0xbd,0x04,0xff,0x70,0xae,0x03,0xff,0x4c,0x76,0x01,0xf0,0x24,0x37,0x02,
+  0x2e,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x16,0x35,0x51,0x02,0x8a,0x7b,0xbd,0x05,0xff,0x8a,0x7b,0xbe,0x05,0xff,
+  0x0c,0x7a,0xbb,0x05,0xff,0x5a,0x8a,0x03,0xff,0x3c,0x5c,0x01,0xff,0x39,0x58,
+  0x01,0xfe,0x2a,0x40,0x01,0xba,0x01,0x02,0x00,0x51,0x00,0x00,0x00,0x22,0x00,
+  0x00,0x00,0x08,0x00,0x00,0x00,0x02,0x01,0x01,0x00,0x08,0x5d,0x90,0x02,0x69,
+  0x76,0xb7,0x04,0xf8,0x84,0x7b,0xbe,0x05,0xff,0x07,0x7c,0xbf,0x06,0xff,0x6a,
+  0xa4,0x04,0xff,0x3e,0x60,0x01,0xff,0x37,0x55,0x01,0xf7,0x1a,0x28,0x01,0xa4,
+  0x21,0x33,0x01,0xac,0x39,0x57,0x01,0xf2,0x82,0x3b,0x5b,0x01,0xff,0x07,0x3f,
+  0x61,0x01,0xff,0x5c,0x8e,0x04,0xff,0x79,0xba,0x06,0xff,0x7c,0xbf,0x06,0xff,
+  0x7b,0xbe,0x05,0xff,0x7a,0xbd,0x04,0xff,0x7b,0xbe,0x05,0xff,0x83,0x7a,0xbd,
+  0x04,0xff,0x07,0x36,0x54,0x02,0x6a,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x22,0x04,0x06,0x00,0x5d,0x56,0x86,0x02,
+  0xe5,0x83,0x77,0xba,0x01,0xff,0x0a,0x77,0xb9,0x01,0xff,0x71,0xb1,0x01,0xff,
+  0x56,0x85,0x01,0xff,0x42,0x65,0x02,0xad,0x01,0x01,0x00,0x09,0x00,0x00,0x00,
+  0x03,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x4a,0x2f,0x47,0x01,0xc9,0x62,0x99,
+  0x02,0xff,0x83,0x78,0xbb,0x02,0xff,0x07,0x6b,0xa6,0x01,0xff,0x4d,0x77,0x01,
+  0xcb,0x18,0x24,0x02,0x15,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x16,0x36,0x53,0x01,0x8a,0x86,0x78,0xbb,0x02,0xff,0x82,0x79,0xbc,0x03,
+  0xff,0x0e,0x78,0xbb,0x02,0xff,0x79,0xbc,0x03,0xff,0x6d,0xaa,0x03,0xff,0x49,
+  0x71,0x01,0xff,0x3b,0x5a,0x01,0xff,0x39,0x58,0x01,0xfb,0x23,0x35,0x01,0xa4,
+  0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+  0x03,0x18,0x24,0x01,0x0e,0x66,0x9f,0x02,0x93,0x77,0xb9,0x02,0xfd,0x84,0x78,
+  0xbb,0x02,0xff,0x0a,0x78,0xbb,0x03,0xff,0x5c,0x8e,0x02,0xff,0x3b,0x5a,0x01,
+  0xff,0x35,0x52,0x01,0xed,0x13,0x1e,0x01,0x84,0x00,0x00,0x00,0x4f,0x00,0x00,
+  0x00,0x4b,0x09,0x0d,0x00,0x6b,0x2b,0x41,0x01,0xbd,0x3a,0x5a,0x01,0xfa,0x82,
+  0x3b,0x5b,0x01,0xff,0x03,0x43,0x68,0x01,0xff,0x64,0x9b,0x02,0xff,0x79,0xbb,
+  0x03,0xff,0x84,0x78,0xbb,0x02,0xff,0x09,0x77,0xba,0x02,0xff,0x34,0x50,0x01,
+  0x69,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x0d,0x00,0x00,0x00,0x36,0x18,0x24,0x01,0x86,0x66,0x9e,0x01,0xfc,0x82,
+  0x75,0xb6,0x01,0xff,0x0c,0x75,0xb7,0x01,0xff,0x75,0xb6,0x01,0xff,0x69,0xa3,
+  0x01,0xff,0x4f,0x7a,0x01,0xff,0x38,0x55,0x02,0x5e,0x00,0x00,0x00,0x05,0x00,
+  0x00,0x00,0x07,0x00,0x00,0x00,0x27,0x08,0x0c,0x01,0x65,0x37,0x54,0x01,0xe9,
+  0x65,0x9e,0x01,0xff,0x76,0xb7,0x01,0xff,0x82,0x76,0xb8,0x01,0xff,0x07,0x6b,
+  0xa6,0x01,0xff,0x52,0x7e,0x01,0xb7,0x18,0x24,0x02,0x11,0x00,0x00,0x00,0x02,
+  0x00,0x00,0x00,0x16,0x37,0x56,0x01,0x8a,0x76,0xb7,0x01,0xff,0x86,0x76,0xb8,
+  0x01,0xff,0x10,0x76,0xb9,0x01,0xff,0x70,0xaf,0x01,0xff,0x55,0x84,0x01,0xff,
+  0x3e,0x5f,0x01,0xff,0x3b,0x5b,0x01,0xff,0x37,0x54,0x01,0xeb,0x17,0x23,0x01,
+  0x87,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x07,0x00,0x00,
+  0x00,0x04,0x46,0x6d,0x02,0x26,0x6d,0xaa,0x01,0xc3,0x76,0xb7,0x01,0xff,0x76,
+  0xb8,0x01,0xff,0x76,0xb9,0x01,0xff,0x82,0x76,0xb8,0x01,0xff,0x12,0x73,0xb4,
+  0x01,0xff,0x4e,0x78,0x01,0xff,0x39,0x59,0x01,0xff,0x32,0x4d,0x01,0xdd,0x0b,
+  0x11,0x01,0x71,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x15,
+  0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x4a,0x0f,0x17,0x01,0x79,0x2f,0x49,0x01,
+  0xcd,0x3b,0x5b,0x01,0xfe,0x3b,0x5b,0x01,0xff,0x3c,0x5c,0x01,0xff,0x4e,0x79,
+  0x01,0xff,0x71,0xb0,0x01,0xff,0x76,0xb8,0x01,0xff,0x83,0x76,0xb7,0x01,0xff,
+  0x02,0x31,0x4c,0x01,0x66,0x00,0x00,0x00,0x0d,0x82,0x00,0x00,0x00,0x00,0x13,
+  0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x49,0x2d,0x45,0x01,
+  0xb3,0x6c,0xa7,0x01,0xff,0x73,0xb2,0x01,0xff,0x72,0xb1,0x01,0xff,0x72,0xb2,
+  0x01,0xff,0x72,0xb1,0x01,0xff,0x63,0x99,0x01,0xff,0x48,0x6f,0x01,0xed,0x2d,
+  0x44,0x03,0x2c,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x35,
+  0x12,0x1b,0x01,0x7c,0x39,0x59,0x01,0xf4,0x60,0x95,0x01,0xff,0x74,0xb3,0x01,
+  0xff,0x82,0x73,0xb3,0x01,0xff,0x18,0x6e,0xab,0x01,0xff,0x5c,0x8e,0x01,0xc5,
+  0x37,0x54,0x02,0x25,0x00,0x00,0x00,0x19,0x39,0x58,0x01,0x8a,0x73,0xb3,0x01,
+  0xff,0x74,0xb4,0x01,0xff,0x74,0xb5,0x01,0xff,0x75,0xb5,0x01,0xff,0x74,0xb5,
+  0x01,0xff,0x72,0xb1,0x01,0xff,0x65,0x9e,0x01,0xff,0x51,0x7e,0x01,0xff,0x3f,
+  0x60,0x01,0xff,0x3b,0x5b,0x01,0xff,0x3b,0x5a,0x01,0xfd,0x2c,0x43,0x01,0xc2,
+  0x07,0x0a,0x00,0x66,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+  0x06,0x02,0x03,0x00,0x08,0x60,0x94,0x02,0x5e,0x70,0xaf,0x01,0xec,0x82,0x74,
+  0xb4,0x01,0xff,0x17,0x74,0xb5,0x01,0xff,0x74,0xb4,0x01,0xff,0x74,0xb5,0x01,
+  0xff,0x68,0xa1,0x01,0xff,0x43,0x68,0x01,0xff,0x39,0x58,0x01,0xfe,0x2a,0x40,
+  0x01,0xbe,0x03,0x04,0x00,0x5f,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x12,0x00,
+  0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x16,
+  0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x51,0x18,0x24,0x01,0x8a,0x35,0x51,0x01,
+  0xe2,0x3b,0x5b,0x01,0xff,0x3a,0x59,0x01,0xff,0x45,0x6b,0x01,0xff,0x71,0xb0,
+  0x01,0xff,0x74,0xb4,0x01,0xff,0x82,0x73,0xb3,0x01,0xff,0x02,0x2e,0x47,0x01,
+  0x63,0x00,0x00,0x00,0x0d,0x83,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x07,
+  0x00,0x00,0x00,0x24,0x02,0x02,0x00,0x5a,0x3c,0x5c,0x01,0xd7,0x6c,0xa8,0x01,
+  0xff,0x82,0x6f,0xad,0x01,0xff,0x26,0x70,0xad,0x01,0xff,0x6e,0xab,0x01,0xff,
+  0x5e,0x92,0x01,0xff,0x43,0x68,0x01,0xce,0x1e,0x2d,0x02,0x15,0x00,0x00,0x00,
+  0x04,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x16,0x21,0x01,0x88,0x38,0x57,
+  0x01,0xf5,0x53,0x81,0x01,0xff,0x6e,0xac,0x01,0xff,0x70,0xaf,0x01,0xff,0x70,
+  0xae,0x01,0xff,0x70,0xad,0x01,0xff,0x68,0xa2,0x01,0xed,0x4f,0x7a,0x01,0x84,
+  0x2e,0x47,0x01,0x97,0x43,0x67,0x01,0xff,0x4c,0x76,0x01,0xff,0x50,0x7b,0x01,
+  0xff,0x4e,0x79,0x01,0xff,0x48,0x6f,0x01,0xff,0x3f,0x62,0x01,0xff,0x3c,0x5d,
+  0x01,0xff,0x3b,0x5b,0x01,0xff,0x3b,0x5b,0x01,0xfd,0x31,0x4b,0x01,0xd4,0x14,
+  0x1f,0x01,0x85,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x10,
+  0x00,0x00,0x00,0x07,0x49,0x72,0x02,0x24,0x6a,0xa4,0x01,0xae,0x70,0xaf,0x01,
+  0xfe,0x70,0xaf,0x01,0xff,0x71,0xb0,0x01,0xff,0x82,0x71,0xaf,0x01,0xff,0x09,
+  0x70,0xaf,0x01,0xff,0x56,0x86,0x01,0xff,0x3c,0x5c,0x01,0xff,0x38,0x57,0x01,
+  0xf7,0x1e,0x2e,0x01,0x9d,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x29,0x00,0x00,
+  0x00,0x0d,0x00,0x00,0x00,0x02,0x83,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+  0x02,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x38,0x03,0x04,
+  0x00,0x5f,0x2c,0x44,0x01,0xc7,0x47,0x6d,0x01,0xff,0x68,0xa1,0x01,0xff,0x84,
+  0x70,0xae,0x01,0xff,0x02,0x2b,0x42,0x01,0x60,0x00,0x00,0x00,0x0d,0x83,0x00,
+  0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+  0x30,0x09,0x0e,0x01,0x6d,0x43,0x67,0x01,0xea,0x6a,0xa5,0x01,0xff,0x6c,0xa7,
+  0x01,0xff,0x6c,0xa8,0x01,0xff,0x6c,0xa7,0x01,0xff,0x6b,0xa6,0x01,0xff,0x5b,
+  0x8e,0x01,0xff,0x41,0x63,0x02,0xb4,0x11,0x19,0x03,0x0d,0x00,0x00,0x00,0x05,
+  0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x12,0x1c,0x01,0x82,0x35,0x52,0x01,
+  0xeb,0x44,0x69,0x01,0xff,0x5f,0x93,0x01,0xff,0x6d,0xa8,0x01,0xff,0x82,0x6d,
+  0xa9,0x01,0xff,0x03,0x57,0x87,0x01,0xff,0x3c,0x5c,0x01,0xfe,0x39,0x58,0x01,
+  0xf5,0x84,0x3c,0x5c,0x01,0xff,0x0b,0x3c,0x5c,0x01,0xfd,0x36,0x53,0x01,0xe8,
+  0x2a,0x40,0x01,0xbe,0x11,0x1a,0x01,0x82,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+  0x36,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0b,0x2c,0x45,0x02,0x13,0x65,0x9c,
+  0x01,0x7d,0x6c,0xa8,0x01,0xf1,0x82,0x6d,0xaa,0x01,0xff,0x83,0x6e,0xab,0x01,
+  0xff,0x09,0x66,0x9e,0x01,0xff,0x46,0x6d,0x01,0xff,0x3b,0x5a,0x01,0xff,0x32,
+  0x4d,0x01,0xdd,0x10,0x18,0x01,0x7c,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x1f,
+  0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x01,0x86,0x00,0x00,0x00,0x00,0x05,0x00,
+  0x00,0x00,0x04,0x01,0x01,0x00,0x14,0x2b,0x42,0x01,0x85,0x54,0x83,0x01,0xf8,
+  0x6c,0xa8,0x01,0xff,0x84,0x6d,0xa9,0x01,0xff,0x03,0x6c,0xa8,0x01,0xff,0x28,
+  0x3e,0x01,0x5d,0x00,0x00,0x00,0x0c,0x84,0x00,0x00,0x00,0x00,0x06,0x00,0x00,
+  0x00,0x02,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3a,0x11,0x19,0x01,0x7f,0x45,
+  0x6b,0x01,0xf3,0x67,0xa0,0x01,0xff,0x83,0x68,0xa2,0x01,0xff,0x1d,0x68,0xa1,
+  0x01,0xff,0x5b,0x8e,0x01,0xff,0x40,0x62,0x02,0xa9,0x15,0x1f,0x02,0x0d,0x00,
+  0x00,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x3d,0x08,0x0b,0x00,0x6e,
+  0x2d,0x45,0x01,0xcc,0x3b,0x5b,0x01,0xfe,0x45,0x6b,0x01,0xff,0x58,0x88,0x01,
+  0xff,0x66,0x9e,0x01,0xff,0x55,0x83,0x01,0xff,0x38,0x55,0x01,0xff,0x0c,0x13,
+  0x01,0x89,0x0b,0x11,0x01,0x81,0x17,0x23,0x01,0x92,0x19,0x27,0x01,0x96,0x15,
+  0x20,0x01,0x8c,0x07,0x0b,0x00,0x75,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x4c,
+  0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x33,0x50,0x01,
+  0x17,0x63,0x9a,0x01,0x74,0x69,0xa3,0x01,0xe3,0x82,0x6a,0xa5,0x01,0xff,0x0d,
+  0x6b,0xa5,0x01,0xff,0x6a,0xa4,0x01,0xff,0x6a,0xa5,0x01,0xff,0x68,0xa2,0x01,
+  0xff,0x52,0x7e,0x01,0xff,0x3d,0x5d,0x01,0xff,0x3a,0x58,0x01,0xfa,0x25,0x39,
+  0x01,0xb0,0x02,0x02,0x00,0x5f,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x16,0x00,
+  0x00,0x00,0x05,0x00,0x00,0x00,0x01,0x86,0x00,0x00,0x00,0x00,0x07,0x00,0x00,
+  0x00,0x03,0x29,0x3e,0x02,0x28,0x4b,0x73,0x01,0xb9,0x64,0x9b,0x01,0xff,0x69,
+  0xa4,0x01,0xff,0x6a,0xa4,0x01,0xff,0x6a,0xa5,0x01,0xff,0x83,0x6a,0xa4,0x01,
+  0xff,0x03,0x69,0xa3,0x01,0xff,0x25,0x39,0x01,0x5a,0x00,0x00,0x00,0x0c,0x85,
+  0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x16,0x00,0x00,
+  0x00,0x42,0x15,0x20,0x01,0x8a,0x44,0x68,0x01,0xf7,0x63,0x99,0x01,0xff,0x83,
+  0x65,0x9d,0x01,0xff,0x0f,0x66,0x9e,0x01,0xff,0x5e,0x92,0x01,0xff,0x41,0x64,
+  0x02,0xb3,0x1f,0x2f,0x02,0x13,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x13,0x00,
+  0x00,0x00,0x32,0x00,0x00,0x00,0x59,0x18,0x25,0x01,0x94,0x33,0x4e,0x01,0xde,
+  0x3b,0x5b,0x01,0xfe,0x3d,0x5e,0x01,0xff,0x41,0x64,0x01,0xff,0x36,0x53,0x01,
+  0xff,0x10,0x18,0x01,0x63,0x82,0x00,0x00,0x00,0x39,0x0c,0x00,0x00,0x00,0x3b,
+  0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+  0x18,0x0b,0x11,0x00,0x13,0x57,0x87,0x02,0x3e,0x64,0x9b,0x01,0x95,0x67,0xa0,
+  0x01,0xec,0x67,0x9f,0x01,0xff,0x67,0xa0,0x01,0xff,0x67,0x9f,0x01,0xff,0x82,
+  0x67,0xa0,0x01,0xff,0x0a,0x66,0x9e,0x01,0xff,0x56,0x85,0x01,0xff,0x40,0x63,
+  0x01,0xff,0x3b,0x5b,0x01,0xff,0x33,0x4e,0x01,0xdd,0x12,0x1c,0x01,0x83,0x00,
+  0x00,0x00,0x4c,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x03,
+  0x86,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x02,0x1d,0x2c,0x02,0x13,0x48,
+  0x6f,0x02,0x84,0x5e,0x91,0x01,0xf3,0x67,0xa0,0x01,0xff,0x86,0x67,0x9f,0x01,
+  0xff,0x04,0x66,0x9f,0x01,0xff,0x66,0x9d,0x01,0xff,0x21,0x33,0x01,0x55,0x00,
+  0x00,0x00,0x0b,0x86,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x05,0x00,0x00,
+  0x00,0x1a,0x00,0x00,0x00,0x45,0x16,0x22,0x01,0x8d,0x3f,0x62,0x01,0xf5,0x5e,
+  0x92,0x01,0xff,0x63,0x99,0x01,0xff,0x83,0x63,0x9a,0x01,0xff,0x16,0x62,0x99,
+  0x01,0xff,0x47,0x6e,0x01,0xcf,0x2d,0x44,0x02,0x2b,0x00,0x00,0x00,0x05,0x00,
+  0x00,0x00,0x0c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x60,
+  0x14,0x1f,0x01,0x8d,0x2a,0x41,0x01,0xc3,0x36,0x53,0x01,0xea,0x3b,0x5b,0x01,
+  0xfe,0x3d,0x5e,0x01,0x7f,0x3a,0x59,0x01,0x3d,0x2c,0x44,0x02,0x29,0x2d,0x46,
+  0x01,0x28,0x46,0x6d,0x01,0x33,0x5a,0x8c,0x01,0x4a,0x61,0x97,0x01,0x70,0x64,
+  0x9b,0x01,0xa2,0x65,0x9d,0x01,0xe1,0x65,0x9c,0x01,0xff,0x85,0x64,0x9b,0x01,
+  0xff,0x0b,0x62,0x99,0x01,0xff,0x54,0x82,0x01,0xff,0x41,0x64,0x01,0xff,0x3c,
+  0x5c,0x01,0xff,0x38,0x55,0x01,0xef,0x20,0x31,0x01,0xa4,0x01,0x01,0x00,0x5e,
+  0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+  0x01,0x85,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x02,0x1a,0x27,0x02,0x0f,
+  0x4b,0x74,0x02,0x71,0x5d,0x91,0x01,0xe5,0x66,0x9e,0x01,0xff,0x83,0x64,0x9b,
+  0x01,0xff,0x01,0x64,0x9a,0x01,0xff,0x82,0x64,0x9b,0x01,0xff,0x01,0x63,0x9a,
+  0x01,0xff,0x82,0x64,0x9b,0x01,0xff,0x03,0x63,0x99,0x01,0xff,0x1e,0x2e,0x01,
+  0x52,0x00,0x00,0x00,0x0b,0x87,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x05,
+  0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x46,0x13,0x1c,0x01,0x87,0x3a,0x59,0x01,
+  0xef,0x57,0x86,0x01,0xff,0x84,0x61,0x97,0x01,0xff,0x0d,0x65,0x9d,0x01,0xff,
+  0x54,0x82,0x01,0xf1,0x39,0x57,0x02,0x6c,0x0e,0x15,0x01,0x0a,0x00,0x00,0x00,
+  0x07,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x3c,0x00,0x00,
+  0x00,0x53,0x00,0x00,0x00,0x68,0x26,0x3b,0x01,0xa8,0x62,0x99,0x01,0xff,0x66,
+  0x9e,0x01,0xff,0x82,0x66,0x9f,0x01,0xfe,0x02,0x65,0x9c,0x01,0xff,0x62,0x99,
+  0x01,0xff,0x87,0x62,0x98,0x01,0xff,0x0b,0x5b,0x8d,0x01,0xff,0x4d,0x77,0x01,
+  0xff,0x3f,0x61,0x01,0xff,0x3c,0x5c,0x01,0xff,0x38,0x56,0x01,0xf1,0x25,0x38,
+  0x01,0xb1,0x04,0x07,0x00,0x6b,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x25,0x00,
+  0x00,0x00,0x0e,0x00,0x00,0x00,0x03,0x84,0x00,0x00,0x00,0x00,0x06,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x03,0x2b,0x40,0x02,0x17,0x52,0x7f,0x01,0x79,0x5f,
+  0x94,0x01,0xe5,0x65,0x9d,0x01,0xff,0x84,0x61,0x97,0x01,0xff,0x82,0x62,0x97,
+  0x01,0xff,0x82,0x61,0x97,0x01,0xff,0x01,0x62,0x98,0x01,0xff,0x82,0x61,0x97,
+  0x01,0xff,0x03,0x60,0x95,0x01,0xff,0x1c,0x2a,0x01,0x4e,0x00,0x00,0x00,0x0b,
+  0x88,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,
+  0x00,0x00,0x42,0x0c,0x12,0x00,0x79,0x33,0x4e,0x01,0xe0,0x4b,0x75,0x01,0xff,
+  0x5f,0x93,0x01,0xff,0x83,0x60,0x96,0x01,0xff,0x0c,0x62,0x99,0x01,0xff,0x62,
+  0x98,0x01,0xff,0x4e,0x78,0x01,0xca,0x32,0x4d,0x02,0x4a,0x08,0x0c,0x01,0x08,
+  0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+  0x33,0x28,0x3d,0x01,0x94,0x60,0x94,0x01,0xff,0x61,0x96,0x01,0xff,0x87,0x61,
+  0x97,0x01,0xff,0x0e,0x5f,0x94,0x01,0xff,0x58,0x89,0x01,0xff,0x4e,0x79,0x01,
+  0xff,0x43,0x67,0x01,0xff,0x3d,0x5d,0x01,0xff,0x3c,0x5c,0x01,0xff,0x35,0x52,
+  0x01,0xe6,0x22,0x34,0x01,0xab,0x05,0x07,0x00,0x6c,0x00,0x00,0x00,0x4b,0x00,
+  0x00,0x00,0x2c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,
+  0x83,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x05,0x07,0x00,0x05,0x3e,
+  0x60,0x02,0x32,0x5b,0x8c,0x01,0x98,0x63,0x99,0x01,0xf1,0x64,0x9b,0x01,0xff,
+  0x82,0x60,0x96,0x01,0xff,0x86,0x61,0x96,0x01,0xff,0x83,0x60,0x96,0x01,0xff,
+  0x82,0x60,0x95,0x01,0xff,0x03,0x5e,0x92,0x01,0xfe,0x18,0x24,0x01,0x4a,0x00,
+  0x00,0x00,0x0a,0x89,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x05,0x00,0x00,
+  0x00,0x16,0x00,0x00,0x00,0x3a,0x03,0x05,0x00,0x68,0x29,0x3f,0x01,0xc0,0x40,
+  0x63,0x01,0xfd,0x56,0x85,0x01,0xff,0x61,0x96,0x01,0xff,0x83,0x61,0x97,0x01,
+  0xff,0x09,0x64,0x9c,0x01,0xff,0x62,0x98,0x01,0xff,0x54,0x82,0x01,0xce,0x3d,
+  0x5e,0x02,0x6e,0x22,0x34,0x02,0x1d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1a,
+  0x2b,0x42,0x01,0x8a,0x57,0x87,0x01,0xff,0x82,0x5a,0x8c,0x01,0xff,0x07,0x59,
+  0x8a,0x01,0xff,0x57,0x88,0x01,0xff,0x54,0x83,0x01,0xff,0x50,0x7c,0x01,0xff,
+  0x4b,0x74,0x01,0xff,0x44,0x69,0x01,0xff,0x3e,0x60,0x01,0xff,0x82,0x3c,0x5d,
+  0x01,0xff,0x09,0x38,0x56,0x01,0xef,0x2b,0x42,0x01,0xc5,0x15,0x20,0x01,0x8f,
+  0x00,0x01,0x00,0x63,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+  0x16,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x02,0x82,0x00,0x00,0x00,0x00,0x08,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x2e,0x47,0x02,0x1e,0x54,0x82,0x02,
+  0x72,0x61,0x96,0x01,0xc8,0x66,0x9e,0x01,0xfd,0x63,0x9a,0x01,0xff,0x62,0x97,
+  0x01,0xff,0x85,0x61,0x97,0x01,0xff,0x02,0x61,0x96,0x01,0xff,0x60,0x96,0x01,
+  0xff,0x86,0x60,0x95,0x01,0xff,0x04,0x60,0x96,0x01,0xff,0x5d,0x91,0x01,0xfd,
+  0x14,0x1d,0x01,0x45,0x00,0x00,0x00,0x09,0x8a,0x00,0x00,0x00,0x00,0x09,0x00,
+  0x00,0x00,0x03,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x57,
+  0x17,0x23,0x01,0x94,0x36,0x53,0x01,0xe9,0x46,0x6c,0x01,0xff,0x59,0x8a,0x01,
+  0xff,0x62,0x98,0x01,0xff,0x83,0x63,0x99,0x01,0xff,0x06,0x63,0x9a,0x01,0xff,
+  0x68,0xa2,0x01,0xff,0x60,0x95,0x01,0xfb,0x5b,0x8d,0x01,0xcd,0x4e,0x78,0x01,
+  0xa0,0x32,0x4d,0x01,0xbe,0x84,0x3d,0x5e,0x01,0xff,0x83,0x3c,0x5d,0x01,0xff,
+  0x0c,0x3b,0x5b,0x01,0xfa,0x37,0x54,0x01,0xea,0x2f,0x49,0x01,0xd1,0x24,0x38,
+  0x01,0xb2,0x12,0x1b,0x01,0x8a,0x01,0x01,0x00,0x68,0x00,0x00,0x00,0x53,0x00,
+  0x00,0x00,0x3c,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x08,
+  0x00,0x00,0x00,0x02,0x82,0x00,0x00,0x00,0x01,0x06,0x00,0x00,0x00,0x04,0x26,
+  0x39,0x02,0x18,0x4d,0x78,0x02,0x65,0x5f,0x93,0x01,0xbc,0x66,0x9e,0x01,0xfa,
+  0x67,0x9f,0x01,0xff,0x82,0x63,0x9a,0x01,0xff,0x83,0x63,0x99,0x01,0xff,0x87,
+  0x62,0x98,0x01,0xff,0x01,0x62,0x97,0x01,0xff,0x85,0x61,0x97,0x01,0xff,0x03,
+  0x5d,0x91,0x01,0xfc,0x10,0x18,0x01,0x40,0x00,0x00,0x00,0x09,0x8b,0x00,0x00,
+  0x00,0x00,0x0a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x22,
+  0x00,0x00,0x00,0x45,0x03,0x05,0x00,0x6c,0x24,0x37,0x01,0xb3,0x39,0x58,0x01,
+  0xf3,0x46,0x6c,0x01,0xff,0x56,0x86,0x01,0xff,0x63,0x9a,0x01,0xff,0x85,0x65,
+  0x9d,0x01,0xff,0x1b,0x58,0x88,0x01,0xff,0x39,0x58,0x01,0xff,0x1e,0x2e,0x01,
+  0xa9,0x1d,0x2c,0x01,0xa3,0x1f,0x2f,0x01,0xa7,0x1e,0x2e,0x01,0xa5,0x1c,0x2b,
+  0x01,0x9f,0x17,0x23,0x01,0x95,0x0e,0x15,0x00,0x85,0x04,0x07,0x00,0x73,0x00,
+  0x00,0x00,0x66,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3a,
+  0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+  0x05,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x0e,0x15,0x01,0x08,0x34,0x4f,
+  0x02,0x33,0x52,0x7f,0x01,0x79,0x5f,0x94,0x01,0xbf,0x66,0x9e,0x01,0xf6,0x6b,
+  0xa6,0x01,0xff,0x67,0x9f,0x01,0xff,0x82,0x66,0x9e,0x01,0xff,0x03,0x65,0x9d,
+  0x01,0xff,0x64,0x9c,0x01,0xff,0x65,0x9d,0x01,0xff,0x83,0x64,0x9b,0x01,0xff,
+  0x01,0x63,0x9a,0x01,0xff,0x82,0x64,0x9b,0x01,0xff,0x83,0x63,0x9b,0x01,0xff,
+  0x82,0x64,0x9b,0x01,0xff,0x01,0x63,0x9a,0x01,0xff,0x83,0x63,0x99,0x01,0xff,
+  0x03,0x5e,0x92,0x01,0xfb,0x0c,0x11,0x01,0x3b,0x00,0x00,0x00,0x08,0x8c,0x00,
+  0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+  0x15,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x51,0x06,0x09,0x00,0x74,0x25,0x38,
+  0x01,0xb5,0x37,0x55,0x01,0xed,0x3f,0x62,0x01,0xff,0x4c,0x76,0x01,0xff,0x59,
+  0x8b,0x01,0xff,0x64,0x9b,0x01,0xff,0x69,0xa2,0x01,0xff,0x69,0xa3,0x01,0xff,
+  0x5a,0x8b,0x01,0xff,0x38,0x55,0x01,0xff,0x0f,0x16,0x01,0x70,0x00,0x00,0x00,
+  0x49,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x43,0x00,0x00,
+  0x00,0x3e,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x26,0x00,
+  0x00,0x00,0x1c,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x07,
+  0x00,0x00,0x00,0x05,0x09,0x0e,0x01,0x08,0x2c,0x43,0x02,0x2d,0x47,0x6e,0x02,
+  0x64,0x5a,0x8b,0x02,0xa1,0x62,0x98,0x01,0xe2,0x6c,0xa7,0x01,0xff,0x6d,0xa9,
+  0x01,0xff,0x6a,0xa4,0x01,0xff,0x69,0xa4,0x01,0xff,0x82,0x69,0xa3,0x01,0xff,
+  0x05,0x68,0xa2,0x01,0xff,0x68,0xa1,0x01,0xff,0x67,0xa1,0x01,0xff,0x67,0xa0,
+  0x01,0xff,0x68,0xa0,0x01,0xff,0x83,0x67,0xa0,0x01,0xff,0x01,0x67,0x9f,0x01,
+  0xff,0x83,0x67,0xa0,0x01,0xff,0x82,0x67,0x9f,0x01,0xff,0x83,0x67,0xa0,0x01,
+  0xff,0x06,0x67,0x9f,0x01,0xff,0x66,0x9e,0x01,0xff,0x66,0x9d,0x01,0xff,0x60,
+  0x94,0x01,0xf9,0x08,0x0b,0x00,0x37,0x00,0x00,0x00,0x08,0x8e,0x00,0x00,0x00,
+  0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x1a,0x00,
+  0x00,0x00,0x33,0x00,0x00,0x00,0x50,0x01,0x02,0x00,0x6b,0x19,0x26,0x01,0x9a,
+  0x2d,0x45,0x01,0xcc,0x39,0x57,0x01,0xf2,0x3d,0x5f,0x01,0xff,0x43,0x67,0x01,
+  0xff,0x4b,0x75,0x01,0xff,0x4c,0x75,0x01,0xff,0x38,0x56,0x01,0xff,0x14,0x1e,
+  0x01,0x53,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x10,0x00,
+  0x00,0x00,0x0f,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x09,
+  0x00,0x00,0x00,0x08,0x14,0x1e,0x02,0x0f,0x29,0x3e,0x02,0x2a,0x3d,0x5d,0x02,
+  0x54,0x52,0x7e,0x02,0x85,0x5e,0x91,0x02,0xbb,0x64,0x9b,0x02,0xee,0x6e,0xab,
+  0x01,0xff,0x71,0xb1,0x01,0xff,0x6f,0xad,0x01,0xff,0x6e,0xac,0x01,0xff,0x6e,
+  0xab,0x01,0xff,0x6d,0xaa,0x01,0xff,0x82,0x6d,0xa9,0x01,0xff,0x83,0x6c,0xa8,
+  0x01,0xff,0x01,0x6c,0xa7,0x01,0xff,0x83,0x6b,0xa7,0x01,0xff,0x02,0x6c,0xa8,
+  0x01,0xff,0x6b,0xa7,0x01,0xff,0x87,0x6b,0xa6,0x01,0xff,0x85,0x6a,0xa5,0x01,
+  0xff,0x04,0x6a,0xa4,0x01,0xff,0x62,0x97,0x01,0xf7,0x04,0x06,0x01,0x33,0x00,
+  0x00,0x00,0x07,0x90,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x03,0x00,0x00,
+  0x00,0x0a,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x44,0x00,
+  0x00,0x00,0x5b,0x02,0x03,0x00,0x6f,0x12,0x1c,0x01,0x8e,0x23,0x36,0x01,0xb1,
+  0x2d,0x45,0x01,0xcc,0x33,0x4f,0x01,0xe0,0x39,0x57,0x01,0xf4,0x45,0x6b,0x02,
+  0xad,0x48,0x6e,0x02,0x81,0x46,0x6c,0x02,0x74,0x47,0x6d,0x02,0x76,0x4c,0x75,
+  0x02,0x80,0x52,0x7f,0x03,0x8e,0x58,0x88,0x03,0xa3,0x5d,0x90,0x03,0xbb,0x61,
+  0x97,0x02,0xda,0x67,0x9f,0x02,0xf4,0x6f,0xac,0x02,0xfe,0x75,0xb6,0x02,0xff,
+  0x75,0xb5,0x01,0xff,0x74,0xb4,0x01,0xff,0x74,0xb3,0x01,0xff,0x73,0xb3,0x01,
+  0xff,0x73,0xb2,0x01,0xff,0x72,0xb2,0x01,0xff,0x72,0xb1,0x01,0xff,0x86,0x71,
+  0xb0,0x01,0xff,0x82,0x71,0xaf,0x01,0xff,0x02,0x70,0xaf,0x01,0xff,0x70,0xae,
+  0x01,0xff,0x82,0x70,0xaf,0x01,0xff,0x01,0x71,0xaf,0x01,0xff,0x82,0x70,0xae,
+  0x01,0xff,0x01,0x6f,0xad,0x01,0xff,0x83,0x70,0xae,0x01,0xff,0x82,0x6f,0xad,
+  0x01,0xff,0x82,0x6f,0xac,0x01,0xff,0x01,0x6e,0xac,0x01,0xff,0x82,0x6e,0xab,
+  0x01,0xff,0x03,0x63,0x9a,0x01,0xf5,0x02,0x03,0x01,0x31,0x00,0x00,0x00,0x07,
+  0x92,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x07,0x00,
+  0x00,0x00,0x11,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3e,
+  0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x68,0x22,0x34,0x01,
+  0xa4,0x71,0xaf,0x03,0xff,0x7a,0xbd,0x04,0xff,0x82,0x7a,0xbe,0x04,0xff,0x01,
+  0x7a,0xbd,0x04,0xff,0x82,0x79,0xbc,0x03,0xff,0x83,0x78,0xbb,0x02,0xff,0x02,
+  0x78,0xba,0x02,0xff,0x77,0xba,0x02,0xff,0x82,0x77,0xba,0x01,0xff,0x84,0x77,
+  0xb9,0x01,0xff,0x01,0x76,0xb9,0x01,0xff,0x87,0x76,0xb8,0x01,0xff,0x82,0x76,
+  0xb7,0x01,0xff,0x83,0x75,0xb7,0x01,0xff,0x01,0x76,0xb7,0x01,0xff,0x82,0x75,
+  0xb6,0x01,0xff,0x03,0x74,0xb5,0x01,0xff,0x75,0xb6,0x01,0xff,0x75,0xb5,0x01,
+  0xff,0x82,0x75,0xb6,0x01,0xff,0x01,0x74,0xb5,0x01,0xff,0x82,0x74,0xb4,0x01,
+  0xff,0x83,0x73,0xb3,0x01,0xff,0x03,0x66,0x9e,0x01,0xf4,0x02,0x03,0x01,0x2f,
+  0x00,0x00,0x00,0x06,0x94,0x00,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x03,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x14,
+  0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x31,0x25,0x39,0x01,0x92,0x72,0xb0,0x06,
+  0xff,0x8c,0x7d,0xc0,0x07,0xff,0x87,0x7c,0xbf,0x06,0xff,0x02,0x7b,0xbe,0x05,
+  0xff,0x7c,0xbf,0x06,0xff,0x86,0x7b,0xbe,0x05,0xff,0x86,0x7a,0xbd,0x04,0xff,
+  0x86,0x79,0xbc,0x03,0xff,0x83,0x78,0xbb,0x02,0xff,0x82,0x78,0xba,0x02,0xff,
+  0x03,0x67,0xa0,0x02,0xf3,0x01,0x02,0x00,0x2e,0x00,0x00,0x00,0x06,0x98,0x00,
+  0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+  0x16,0x28,0x3e,0x01,0x87,0x74,0xb1,0x08,0xff,0x91,0x81,0xc4,0x0b,0xff,0x89,
+  0x80,0xc3,0x0a,0xff,0x82,0x7f,0xc2,0x09,0xff,0x85,0x7e,0xc1,0x08,0xff,0x82,
+  0x7d,0xc0,0x07,0xff,0x83,0x7c,0xbf,0x06,0xff,0x86,0x7d,0xc0,0x07,0xff,0x03,
+  0x69,0xa1,0x05,0xf2,0x01,0x02,0x00,0x2d,0x00,0x00,0x00,0x06,0x99,0x00,0x00,
+  0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x13,0x29,0x3f,0x01,0x85,
+  0x73,0xb0,0x09,0xff,0x94,0x83,0xc6,0x0d,0xff,0x87,0x82,0xc5,0x0c,0xff,0x03,
+  0x81,0xc4,0x0b,0xff,0x80,0xc3,0x0a,0xff,0x81,0xc4,0x0b,0xff,0x83,0x80,0xc3,
+  0x0a,0xff,0x86,0x7f,0xc2,0x09,0xff,0x85,0x80,0xc3,0x0a,0xff,0x03,0x68,0x9f,
+  0x06,0xf1,0x01,0x01,0x00,0x2c,0x00,0x00,0x00,0x06,0x99,0x00,0x00,0x00,0x00,
+  0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x13,0x29,0x40,0x01,0x84,0x59,0x89,
+  0x04,0xff,0x82,0x61,0x94,0x05,0xff,0x02,0x61,0x94,0x06,0xff,0x60,0x93,0x06,
+  0xff,0x82,0x60,0x92,0x06,0xff,0x01,0x61,0x94,0x06,0xff,0x82,0x61,0x95,0x06,
+  0xff,0x14,0x61,0x94,0x06,0xff,0x60,0x93,0x06,0xff,0x5f,0x92,0x06,0xff,0x5f,
+  0x91,0x06,0xff,0x5f,0x92,0x06,0xff,0x61,0x94,0x06,0xff,0x61,0x95,0x06,0xff,
+  0x62,0x95,0x06,0xff,0x62,0x96,0x06,0xff,0x62,0x95,0x06,0xff,0x62,0x96,0x06,
+  0xff,0x62,0x95,0x06,0xff,0x61,0x95,0x05,0xff,0x61,0x94,0x05,0xff,0x60,0x93,
+  0x05,0xff,0x60,0x92,0x05,0xff,0x5f,0x92,0x05,0xff,0x5e,0x91,0x05,0xff,0x5e,
+  0x90,0x05,0xff,0x5e,0x8f,0x05,0xff,0x83,0x5d,0x8f,0x05,0xff,0x02,0x5e,0x8f,
+  0x05,0xff,0x5e,0x90,0x05,0xff,0x84,0x5f,0x92,0x04,0xff,0x04,0x5e,0x90,0x04,
+  0xff,0x5d,0x8f,0x05,0xff,0x5d,0x8e,0x05,0xff,0x5c,0x8e,0x05,0xff,0x82,0x5c,
+  0x8d,0x04,0xff,0x03,0x50,0x7b,0x03,0xf1,0x01,0x01,0x00,0x2c,0x00,0x00,0x00,
+  0x05,0x99,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x11,
+  0x1f,0x2f,0x01,0x66,0x2e,0x47,0x01,0xc1,0x8a,0x2d,0x45,0x01,0xc9,0x01,0x2d,
+  0x44,0x01,0xc9,0x83,0x2d,0x45,0x01,0xc9,0x04,0x2d,0x44,0x01,0xc9,0x2d,0x45,
+  0x01,0xc9,0x2c,0x44,0x01,0xc9,0x2d,0x45,0x01,0xc9,0x82,0x2c,0x44,0x01,0xc8,
+  0x01,0x2c,0x44,0x01,0xc9,0x8f,0x2c,0x44,0x01,0xc8,0x01,0x2c,0x43,0x01,0xc8,
+  0x82,0x2c,0x44,0x01,0xc8,0x84,0x2c,0x43,0x01,0xc8,0x04,0x2c,0x44,0x01,0xc6,
+  0x2e,0x46,0x01,0xae,0x00,0x01,0x00,0x28,0x00,0x00,0x00,0x05,0x9a,0x00,0x00,
+  0x00,0x00,0x03,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x4f,
+  0xab,0x00,0x00,0x00,0x5b,0x04,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x41,0x00,
+  0x00,0x00,0x1a,0x00,0x00,0x00,0x03,0x9a,0x00,0x00,0x00,0x00,0x04,0x00,0x00,
+  0x00,0x03,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1c,0x89,
+  0x00,0x00,0x00,0x1d,0xa1,0x00,0x00,0x00,0x1c,0x04,0x00,0x00,0x00,0x1b,0x00,
+  0x00,0x00,0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x9b,0x00,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x01,0xad,0x00,0x00,0x00,0x02,0x82,0x00,0x00,0x00,
+  0x01,0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+  0x00,0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+  0x00,0xcb,0x00,0x00,0x00,0x00
 };
 
 static const GdkPixdata nvidia_icon_pixdata = {
@@ -421,5 +729,5 @@
   304, /* rowstride */
   76, /* width */
   76, /* height */
-  nvidia_icon_pixdata_pixel_data, /* pixel_data: */
+  nvidia_icon_pixdata_pixel_data /* pixel_data */
 };

Modified: packages/nvidia-settings/trunk/src/image_data/sdi_shared_sync_bnc_pixdata.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/image_data/sdi_shared_sync_bnc_pixdata.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/image_data/sdi_shared_sync_bnc_pixdata.h (original)
+++ packages/nvidia-settings/trunk/src/image_data/sdi_shared_sync_bnc_pixdata.h Sun Jan 11 05:41:46 2009
@@ -1,1080 +1,1384 @@
 /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */
 
 static guint8 sdi_shared_sync_bnc_pixdata_pixel_data[] = {
-  "\377\0\0\0\0\377\0\0\0\0\377\0\0\0\0\377\0\0\0\0\377\0\0\0\0\377\0\0"
-  "\0\0\377\0\0\0\0\377\0\0\0\0\377\0\0\0\0\377\0\0\0\0\377\0\0\0\0\377"
-  "\0\0\0\0\377\0\0\0\0\377\0\0\0\0\323\0\0\0\0\10\357\357\362#\357\357"
-  "\363a\357\357\363\223\357\357\363\275\357\357\363\334\360\360\363\361"
-  "\360\360\363\375\360\360\364\377\204\361\361\364\377\1\361\361\365\377"
-  "\204\362\362\365\377\1\363\363\365\377\204\363\363\366\377\1\364\364"
-  "\366\377\202\364\364\367\377\204\365\365\367\377\1\365\365\370\377\204"
-  "\366\366\370\377\205\367\367\371\377\1\370\370\371\377\202\370\370\372"
-  "\377\203\371\371\372\377\202\371\371\373\377\203\372\372\373\377\1\373"
-  "\373\373\377\204\373\373\374\377\1\374\374\374\377\203\374\374\375\377"
-  "\203\375\375\375\377\202\375\375\376\377\203\376\376\376\377\213\377"
-  "\377\377\377\202\376\376\377\377\204\376\376\376\377\202\375\375\376"
-  "\377\210\375\375\375\377\14\375\375\375\375\375\375\375\370\375\375\375"
-  "\357\375\375\375\343\375\375\375\324\375\375\375\301\375\375\375\252"
-  "\375\375\375\220\375\375\375s\375\375\375R\375\375\375.\375\375\375\10"
-  "\272\0\0\0\0\11\315\315\333#\315\315\334a\322\322\337\234\327\327\342"
-  "\325\317\317\335\334\317\317\335\361\317\317\335\375\320\320\335\377"
-  "\320\320\336\377\202\321\321\336\377\202\322\322\337\377\2\323\323\337"
-  "\377\323\323\340\377\202\324\324\340\377\2\325\325\340\377\325\325\341"
-  "\377\202\326\326\341\377\203\327\327\342\377\202\330\330\343\377\202"
-  "\331\331\343\377\202\332\332\344\377\2\333\333\344\377\333\333\345\377"
-  "\202\334\334\345\377\202\335\335\346\377\202\336\336\346\377\203\337"
-  "\337\347\377\202\340\340\350\377\2\341\341\350\377\341\341\351\377\202"
-  "\342\342\351\377\2\343\343\351\377\343\343\352\377\202\344\344\352\377"
-  "\202\345\345\353\377\202\346\346\353\377\203\347\347\354\377\202\350"
-  "\350\355\377\2\351\351\355\377\351\351\356\377\202\352\352\356\377\202"
-  "\353\353\357\377\202\354\354\357\377\202\355\355\360\377\2\356\356\360"
-  "\377\356\356\361\377\203\357\357\361\377\202\360\360\362\377\2\361\361"
-  "\362\377\361\361\363\377\202\362\362\363\377\202\363\363\364\377\202"
-  "\364\364\364\377\204\365\365\365\377\205\364\364\364\377\14\364\364\364"
-  "\375\364\364\364\370\364\364\364\357\364\364\364\343\364\364\364\324"
-  "\364\364\364\301\364\364\364\252\364\364\364\220\364\364\364s\364\364"
-  "\364R\364\364\364.\346\346\351\10\272\0\0\0\0\7\357\357\364e\356\356"
-  "\363\333\354\354\362\375\346\346\356\376\336\336\350\375\324\324\340"
-  "\370\320\320\336\375\203\321\321\336\377\202\322\322\337\377\202\323"
-  "\323\337\377\203\324\324\340\377\202\325\325\341\377\202\326\326\341"
-  "\377\202\327\327\342\377\2\330\330\342\377\330\330\343\377\202\331\331"
-  "\343\377\202\332\332\344\377\202\333\333\344\377\203\334\334\345\377"
-  "\202\335\335\346\377\2\336\336\346\377\336\336\347\377\202\337\337\347"
-  "\377\2\340\340\347\377\340\340\350\377\202\341\341\350\377\202\342\342"
-  "\351\377\2\343\343\351\377\343\343\352\377\203\344\344\352\377\202\345"
-  "\345\353\377\2\346\346\353\377\346\346\354\377\202\347\347\354\377\202"
-  "\350\350\355\377\202\351\351\355\377\202\352\352\356\377\2\353\353\356"
-  "\377\353\353\357\377\202\354\354\357\377\1\354\354\360\377\202\355\355"
-  "\360\377\2\356\356\360\377\356\356\361\377\202\357\357\361\377\202\360"
-  "\360\362\377\2\361\361\362\377\361\361\363\377\202\362\362\363\377\2"
-  "\363\363\363\377\363\363\364\377\202\364\364\364\377\205\365\365\365"
-  "\377\205\364\364\364\377\14\364\364\364\375\364\364\364\370\364\364\364"
-  "\357\364\364\364\343\364\364\364\324\364\364\364\301\364\364\364\252"
-  "\364\364\364\220\364\364\364s\364\364\364R\364\364\364.\364\364\364\10"
-  "\267\0\0\0\0\12\377\377\377\16\377\377\377\210\377\377\377\345\373\373"
-  "\374\373\364\364\367\375\355\355\362\376\347\347\356\376\341\341\352"
-  "\377\330\330\343\375\321\321\336\375\202\322\322\336\377\202\322\322"
-  "\337\377\2\323\323\337\377\323\323\340\377\202\324\324\340\377\202\325"
-  "\325\341\377\202\326\326\341\377\202\327\327\342\377\2\330\330\342\377"
-  "\330\330\343\377\202\331\331\343\377\203\332\332\344\377\2\333\333\344"
-  "\377\333\333\345\377\202\334\334\345\377\202\335\335\346\377\2\336\336"
-  "\346\377\336\336\347\377\202\337\337\347\377\2\340\340\347\377\340\340"
-  "\350\377\202\341\341\350\377\203\342\342\351\377\202\343\343\352\377"
-  "\202\344\344\352\377\202\345\345\353\377\2\346\346\353\377\346\346\354"
-  "\377\202\347\347\354\377\202\350\350\355\377\202\351\351\355\377\203"
-  "\352\352\356\377\202\353\353\357\377\202\354\354\357\377\206\355\355"
-  "\360\377\5\356\356\360\377\357\357\361\377\360\360\361\377\360\360\362"
-  "\377\361\361\362\377\202\362\362\363\377\202\363\363\364\377\2\364\364"
-  "\364\377\364\364\365\377\206\365\365\365\377\205\364\364\364\377\14\364"
-  "\364\364\375\364\364\364\370\364\364\364\357\364\364\364\343\364\364"
-  "\364\324\364\364\364\301\364\364\364\252\364\364\364\220\364\364\364"
-  "s\364\364\364R\364\364\364.\364\364\364\10\212\0\0\0\0\31\377\377\377"
-  "\14\302\332\302\207\264\321\264\223\261\317\261\223\255\315\255\223\252"
-  "\314\252\223\250\312\250\223\244\310\244\223\241\306\241\223\236\304"
-  "\236\223\233\302\233\223\230\301\230\223\225\277\225\223\222\275\222"
-  "\223\217\273\217\223\214\271\214\223b\240b\265U\230U\300n\247n\326k\245"
-  "k\326g\243g\326d\241d\326`\237`\326]\235]\326Z\233Z\262\222\0\0\0\0\14"
-  "\377\377\377:\377\377\377\264\377\377\377\362\377\377\377\371\377\377"
-  "\377\372\373\373\374\373\364\364\367\375\355\355\362\376\347\347\356"
-  "\376\341\341\352\377\331\331\343\375\322\322\337\375\202\322\322\337"
-  "\377\2\323\323\337\377\323\323\340\377\202\324\324\340\377\2\325\325"
-  "\340\377\325\325\341\377\202\326\326\341\377\202\327\327\342\377\1\330"
-  "\330\342\377\202\330\330\343\377\202\331\331\343\377\202\332\332\344"
-  "\377\2\333\333\344\377\333\333\345\377\202\334\334\345\377\202\335\335"
-  "\346\377\202\336\336\346\377\202\337\337\347\377\1\340\340\347\377\202"
-  "\340\340\350\377\2\341\341\350\377\341\341\351\377\202\342\342\351\377"
-  "\2\343\343\351\377\343\343\352\377\202\344\344\352\377\202\345\345\353"
-  "\377\2\346\346\353\377\346\346\354\377\202\347\347\354\377\1\350\350"
-  "\354\377\202\350\350\355\377\2\351\351\355\377\351\351\356\377\202\352"
-  "\352\356\377\202\353\353\357\377\202\354\354\357\377\202\355\355\360"
-  "\377\207\356\356\360\377\2\357\357\361\377\360\360\362\377\202\361\361"
-  "\362\377\202\363\363\364\377\2\364\364\364\377\364\364\365\377\207\365"
-  "\365\365\377\1\364\364\365\377\205\364\364\364\377\14\364\364\364\375"
-  "\364\364\364\370\364\364\364\357\364\364\364\343\364\364\364\324\364"
-  "\364\364\301\364\364\364\252\364\364\364\220\364\364\364s\364\364\364"
-  "R\364\364\364.\364\364\364\10\212\0\0\0\0\31\377\377\377<\241\306\241"
-  "\374\225\277\225\377o\250o\377n\253n\377d\241d\377b\245b\377Y\232Y\377"
-  "Y\237Y\377V\233V\377Z\232Z\377n\247n\377j\244j\377f\242f\377\201\263"
-  "\201\377q\225q\377o\224o\377m\222m\377j\221j\377h\217h\377f\216f\377"
-  "=\177=\377@\213@\377<\210<\377v\254v\377\202\377\377\377\357\1\377\377"
-  "\377\234\214\0\0\0\0\17\377\377\377\12\377\377\377t\377\377\377\325\377"
-  "\377\377\365\377\377\377\366\377\377\377\370\377\377\377\371\377\377"
-  "\377\372\373\373\374\373\364\364\367\375\356\356\363\376\347\347\356"
-  "\376\342\342\352\377\331\331\344\375\323\323\337\375\202\323\323\337"
-  "\377\3\324\324\340\377\0\0\0\377\252\252\263\377\202\325\325\341\377"
-  "\6ddi\37799<\377\16\16\17\377\327\327\342\377\330\330\342\377\330\330"
-  "\343\377\202\331\331\343\377\4\0\0\0\377\332\332\344\377\333\333\344"
-  "\377\333\333\345\377\202\334\334\345\377\2XX\\\377\0\0\0\377\202\336"
-  "\336\346\377\1\336\336\347\377\202\337\337\347\377\202\340\340\350\377"
-  "\10\341\341\350\377\0\0\0\377\265\265\272\377\342\342\351\377\343\343"
-  "\351\377jjm\377==>\377\17\17\20\377\202\345\345\353\377\202\346\346\353"
-  "\377\3\346\346\354\377\0\0\0\377\347\347\354\377\202\350\350\355\377"
-  "\6\351\351\355\377\351\351\356\377mmo\377\0\0\0\377nno\377\353\353\357"
-  "\377\202\354\354\357\377\202\355\355\360\377\1\356\356\360\377\210\356"
-  "\356\361\377\4\357\357\361\377\360\360\361\377\360\360\362\377\361\361"
-  "\362\377\202\362\362\363\377\202\363\363\364\377\2\364\364\364\377\364"
-  "\364\365\377\203\365\365\365\377\1\364\364\365\377\207\364\364\364\377"
-  "\14\364\364\364\375\364\364\364\370\364\364\364\357\364\364\364\343\364"
-  "\364\364\324\364\364\364\301\364\364\364\252\364\364\364\220\364\364"
-  "\364s\364\364\364R\364\364\364.\364\364\364\10\212\0\0\0\0\17\347\360"
-  "\347t\230\300\230\377\221\275\221\377L\223L\377N\235N\377\77\212\77\377"
-  "\77\225\77\3773\2013\3777\2157\3775\2115\377A\211A\377m\246m\377i\244"
-  "i\377e\241e\377\240\305\240\377\206,/,\377\4\"=\"\377\77\212\77\377:"
-  "\210:\377i\244i\377\202\377\377\377\377\1\377\377\377\346\212\0\0\0\0"
-  "\21\377\377\377*\377\377\377\241\377\377\377\347\377\377\377\361\377"
-  "\377\377\363\377\377\377\365\377\377\377\366\377\377\377\370\377\377"
-  "\377\371\377\377\377\372\373\373\374\373\364\364\367\375\356\356\363"
-  "\376\350\350\357\376\343\343\352\377\332\332\344\375\324\324\340\375"
-  "\203\324\324\340\377\10""99<\377fff\377\336\336\347\377\326\326\341\377"
-  "\35\35\36\377\235\235\241\377\365\365\367\377\374\374\375\377\202\331"
-  "\331\343\377\202\332\332\344\377\3\0\0\0\377\377\377\377\377\333\333"
-  "\345\377\202\334\334\345\377\4vv{\377;;=\377\0\0\0\377\377\377\377\377"
-  "\202\337\337\347\377\2\340\340\347\377\340\340\350\377\202\341\341\350"
-  "\377\13\342\342\351\377<<>\377fff\377\351\351\356\377\343\343\352\377"
-  "\36\36\37\377\241\241\243\377\370\370\372\377\375\375\376\377\346\346"
-  "\353\377\346\346\354\377\202\347\347\354\377\2\0\0\0\377\377\377\377"
-  "\377\202\351\351\355\377\202\352\352\356\377\5\0\0\0\377\366\366\370"
-  "\377\0\0\0\377\366\366\370\377\354\354\360\377\202\355\355\360\377\2"
-  "\356\356\360\377\356\356\361\377\211\357\357\361\377\2\360\360\361\377"
-  "\360\360\362\377\202\361\361\362\377\1\362\362\363\377\202\363\363\364"
-  "\377\2\364\364\364\377\364\364\365\377\202\365\365\365\377\211\364\364"
-  "\364\377\14\364\364\364\375\364\364\364\370\364\364\364\357\364\364\364"
-  "\343\364\364\364\324\364\364\364\301\364\364\364\252\364\364\364\220"
-  "\364\364\364s\364\364\364R\364\364\364.\364\364\364\10\212\0\0\0\0\17"
-  "\301\331\301\303\227\300\227\377\207\272\207\377J\222J\377L\233L\377"
-  "=\211=\377=\224=\3772\2012\3776\2146\3774\2104\377G\213G\377l\246l\377"
-  "h\243h\377c\240c\377\240\305\240\377\206,/,\377\4\40""7\40\377=\211="
-  "\3779\2079\3775\2045\377\203\377\377\377\377\210\0\0\0\0\35\377\377\377"
-  "d\377\377\377\300\377\377\377\353\377\377\377\355\377\377\377\357\377"
-  "\377\377\361\377\377\377\363\377\377\377\365\377\377\377\366\377\377"
-  "\377\370\377\377\377\371\377\377\377\372\373\373\374\373\365\365\370"
-  "\375\356\356\363\376\350\350\357\376\343\343\353\377\334\334\345\376"
-  "\324\324\340\375\325\325\341\377\325\325\340\377\325\325\341\377\217"
-  "\217\226\377\0\0\0\377\357\357\363\377\272\272\304\377\0\0\0\377\372"
-  "\372\373\377\0\0\0\377\202\331\331\343\377\6\221\221\230\377\17\17\17"
-  "\377,,.\377\0\0\0\377\377\377\377\377\334\334\345\377\202\335\335\346"
-  "\377\6\336\336\346\377\355\355\362\377\0\0\0\377\377\377\377\377\340"
-  "\340\347\377\340\340\350\377\202\341\341\350\377\1\341\341\351\377\202"
-  "\342\342\351\377\17\227\227\233\377\0\0\0\377\364\364\367\377\306\306"
-  "\313\377\0\0\0\377\374\374\374\377\0\0\0\377\346\346\354\377\347\347"
-  "\354\377\232\232\235\377\17\17\20\377../\377\0\0\0\377\377\377\377\377"
-  "\351\351\356\377\202\352\352\356\377\202\353\353\357\377\6\377\377\377"
-  "\377\0\0\0\377\377\377\377\377\355\355\360\377\356\356\360\377\356\356"
-  "\361\377\202\357\357\361\377\213\360\360\362\377\203\361\361\362\377"
-  "\202\362\362\363\377\1\364\364\364\377\202\364\364\365\377\212\364\364"
-  "\364\377\14\364\364\364\375\364\364\364\370\364\364\364\357\364\364\364"
-  "\343\364\364\364\324\364\364\364\301\364\364\364\252\364\364\364\220"
-  "\364\364\364s\364\364\364R\364\364\364.\364\364\364\10\211\0\0\0\0\20"
-  "\377\377\377\14\261\317\261\355\226\277\226\377z\266z\377H\220H\377J"
-  "\232J\377;\210;\377;\223;\3772\2002\3776\2136\3774\2064\377M\215M\377"
-  "k\245k\377f\242f\377b\240b\377\237\304\237\377\205,/,\377\6,.,\377\34"
-  "%\34\377<\211<\3778\2068\3774\2034\377\234\260\234\377\202\277\277\277"
-  "\377\1\277\277\277p\204\0\0\0\0\26\377\377\377\35\377\377\377\212\377"
-  "\377\377\330\377\377\377\346\377\377\377\350\377\377\377\353\377\377"
-  "\377\355\377\377\377\357\377\377\377\361\377\377\377\363\377\377\377"
-  "\365\377\377\377\366\377\377\377\370\377\377\377\371\377\377\377\372"
-  "\373\373\374\373\365\365\370\375\357\357\363\376\351\351\357\376\343"
-  "\343\353\377\334\334\345\376\325\325\341\375\203\326\326\341\377\17\327"
-  "\327\342\377\0\0\0\377\335\335\335\377eej\377JJM\377\377\377\377\377"
-  "\0\0\0\377\377\377\377\377\332\332\344\377\0\0\0\377\271\271\276\377"
-  "\333\333\333\377\0\0\0\377\377\377\377\377\335\335\346\377\202\336\336"
-  "\346\377\202\337\337\347\377\5\0\0\0\377\377\377\377\377\340\340\350"
-  "\377\341\341\350\377\341\341\351\377\202\342\342\351\377\21\343\343\351"
-  "\377\343\343\352\377\344\344\352\377\0\0\0\377\335\335\335\377kkn\377"
-  "NNO\377\377\377\377\377\0\0\0\377\377\377\377\377\347\347\354\377\0\0"
-  "\0\377\300\300\302\377\334\334\334\377\0\0\0\377\377\377\377\377\352"
-  "\352\356\377\202\353\353\357\377\202\354\354\357\377\4oop\377__`\377"
-  "\377\377\377\377\356\356\361\377\203\357\357\361\377\203\360\360\362"
-  "\377\205\361\361\362\377\202\360\360\362\377\205\361\361\362\377\202"
-  "\362\362\363\377\2\363\363\363\377\363\363\364\377\204\364\364\364\377"
-  "\2\363\363\364\377\363\363\363\377\205\364\364\364\377\14\364\364\364"
-  "\375\364\364\364\370\364\364\364\357\364\364\364\343\364\364\364\324"
-  "\364\364\364\301\364\364\364\252\364\364\364\220\364\364\364s\364\364"
-  "\364R\364\364\364.\364\364\364\10\211\0\0\0\0\20\377\377\377<\241\306"
-  "\241\374\224\276\224\377o\263o\377F\217F\377H\231H\3779\2079\377:\222"
-  ":\3772\1772\3775\2125\3774\2054\377M\215M\377j\244j\377e\242e\377a\237"
-  "a\377\236\304\236\377\205,/,\377\6,.,\377\40'\40\3772s2\3777\2057\377"
-  "3\2033\377\244\310\244\377\202\377\377\377\377\1\377\377\377\316\202"
-  "\0\0\0\0\30\377\377\377O\377\377\377\251\377\377\377\335\377\377\377"
-  "\340\377\377\377\343\377\377\377\346\377\377\377\350\377\377\377\353"
-  "\377\377\377\355\377\377\377\357\377\377\377\361\377\377\377\363\377"
-  "\377\377\365\377\377\377\366\377\377\377\370\377\377\377\371\377\377"
-  "\377\372\374\374\374\373\365\365\370\375\357\357\363\376\351\351\357"
-  "\376\344\344\354\377\335\335\346\376\326\326\341\375\202\326\326\342"
-  "\377\202\327\327\342\377\17::<\377www\377,,.\377\276\276\302\377\363"
-  "\363\366\377\0\0\0\377\377\377\377\377\333\333\345\377\0\0\0\377\377"
-  "\377\377\377\344\344\352\377\0\0\0\377\377\377\377\377\336\336\346\377"
-  "\336\336\347\377\202\337\337\347\377\4\340\340\350\377\0\0\0\377\377"
-  "\377\377\377\341\341\350\377\202\342\342\351\377\2\343\343\351\377\343"
-  "\343\352\377\202\344\344\352\377\17\345\345\353\377==\77\377www\377/"
-  "/0\377\302\302\305\377\367\367\371\377\0\0\0\377\377\377\377\377\350"
-  "\350\355\377\0\0\0\377\377\377\377\377\356\356\361\377\0\0\0\377\377"
-  "\377\377\377\353\353\357\377\202\354\354\357\377\5\355\355\360\377\315"
-  "\315\320\377\20\20\20\377\367\367\370\377\370\370\371\377\202\357\357"
-  "\361\377\204\360\360\362\377\202\361\361\362\377\205\362\362\363\377"
-  "\202\361\361\362\377\1\361\361\363\377\205\362\362\363\377\2\363\363"
-  "\363\377\363\363\364\377\202\364\364\364\377\202\363\363\364\377\202"
-  "\363\363\363\377\205\362\362\363\377\14\362\362\363\375\362\362\363\370"
-  "\362\362\363\357\362\362\363\343\362\362\363\324\362\362\363\301\362"
-  "\362\363\252\362\362\363\220\362\362\363s\362\362\363R\362\362\363.\362"
-  "\362\363\10\211\0\0\0\0\20\347\360\347t\227\300\227\377\223\276\223\377"
-  "Z\244Z\377E\216E\377F\231F\3777\2067\3779\2219\3771}1\3775\2115\3773"
-  "\2033\377L\214L\377h\244h\377d\241d\377`\236`\377\235\304\235\377\205"
-  ",/,\377\6+.+\377#)#\377.l.\3776\2056\3771\2021\377o\250o\377\202\377"
-  "\377\377\377\33\377\377\377\360\377\377\377s\377\377\377\301\377\377"
-  "\377\326\377\377\377\331\377\377\377\335\377\377\377\340\377\377\377"
-  "\343\377\377\377\346\377\377\377\350\377\377\377\353\377\377\377\355"
-  "\377\377\377\357\377\377\377\361\377\377\377\363\377\377\377\365\377"
-  "\377\377\366\377\377\377\370\377\377\377\371\377\377\377\372\374\374"
-  "\375\373\365\365\370\375\357\357\364\376\351\351\360\376\344\344\354"
-  "\377\336\336\347\376\327\327\342\375\202\327\327\342\377\17\330\330\342"
-  "\377\330\330\343\377\221\221\227\377!!!\377\20\20\20\377\370\370\372"
-  "\377\342\342\351\377\0\0\0\377\377\377\377\377\334\334\345\377\0\0\0"
-  "\377\377\377\377\377\300\300\307\377\0\0\0\377\377\377\377\377\202\337"
-  "\337\347\377\7\340\340\347\377\340\340\350\377\341\341\350\377\0\0\0"
-  "\377\377\377\377\377\342\342\351\377\343\343\351\377\202\343\343\352"
-  "\377\202\344\344\352\377\202\345\345\353\377\17\231\231\235\377!!!\377"
-  "\20\20\20\377\372\372\373\377\355\355\361\377\0\0\0\377\377\377\377\377"
-  "\351\351\355\377\0\0\0\377\377\377\377\377\314\314\316\377\0\0\0\377"
-  "\377\377\377\377\354\354\357\377\354\354\360\377\202\355\355\360\377"
-  "\4""000\377\200\200\202\377\376\376\376\377\357\357\361\377\202\360\360"
-  "\362\377\2\361\361\362\377\360\360\362\377\204\361\361\362\377\202\362"
-  "\362\362\377\204\363\363\363\377\1\362\362\362\377\202\362\362\363\377"
-  "\1\361\361\362\377\202\362\362\363\377\202\363\363\363\377\202\363\363"
-  "\364\377\202\363\363\363\377\210\362\362\363\377\14\362\362\363\375\362"
-  "\362\363\370\362\362\363\357\362\362\363\343\362\362\363\324\362\362"
-  "\363\301\362\362\363\252\362\362\363\220\362\362\363s\362\362\363R\362"
-  "\362\363.\362\362\363\10\211\0\0\0\0\20\304\333\304\310\226\277\226\377"
-  "\214\273\214\377S\237S\377C\215C\377D\230D\3776\2046\3778\2208\3770|"
-  "0\3774\2074\3772\2022\377R\216R\377l\250l\377w\263w\377r\261r\377\250"
-  "\317\250\377\204-0-\377$-/-\377,/,\377*.*\377(_(\377\77\235\77\377:\232"
-  ":\377.\205.\377W\231W\243\377\377\377\222\377\377\377\307\377\377\377"
-  "\317\377\377\377\322\377\377\377\326\377\377\377\331\377\377\377\335"
-  "\377\377\377\340\377\377\377\343\377\377\377\346\377\377\377\350\377"
-  "\377\377\353\377\377\377\355\377\377\377\357\377\377\377\361\377\377"
-  "\377\363\377\377\377\365\377\377\377\366\377\377\377\370\377\377\377"
-  "\371\377\377\377\372\374\374\375\373\365\365\370\375\360\360\364\376"
-  "\352\352\360\376\345\345\354\377\337\337\347\376\330\330\342\375\202"
-  "\330\330\343\377\203\331\331\343\377\16\0\0\0\377ddd\377\375\375\375"
-  "\377\333\333\345\377\0\0\0\377\377\377\377\377\335\335\346\377ggk\377"
-  "333\377JJM\377\0\0\0\377\377\377\377\377\340\340\347\377\0\0\0\377\202"
-  "\341\341\350\377\5\341\341\351\377\0\0\0\377\377\377\377\377\343\343"
-  "\351\377\343\343\352\377\202\344\344\352\377\202\345\345\353\377\27\346"
-  "\346\353\377\346\346\354\377\347\347\354\377\0\0\0\377eee\377\375\375"
-  "\376\377\351\351\355\377\0\0\0\377\377\377\377\377\352\352\356\377mm"
-  "o\377333\377NNP\377\0\0\0\377\377\377\377\377\355\355\360\377\0\0\0\377"
-  "\356\356\360\377\356\356\361\377\0\0\0\377\21\21\21\377\20\20\21\377"
-  "\360\360\362\377\202\361\361\362\377\1\360\360\362\377\204\361\361\362"
-  "\377\3\360\360\362\377\360\360\361\377\361\361\362\377\203\362\362\363"
-  "\377\202\363\363\364\377\205\362\362\363\377\1\363\363\363\377\202\363"
-  "\363\364\377\202\363\363\363\377\203\362\362\363\377\202\362\362\362"
-  "\377\204\362\362\363\377\14\362\362\363\375\362\362\363\370\362\362\363"
-  "\357\364\364\364\343\362\362\363\324\362\362\363\301\362\362\363\252"
-  "\362\362\363\220\362\362\363s\362\362\363R\362\362\363.\362\362\363\10"
-  "\210\0\0\0\0\35\377\377\377\31\261\317\261\355\225\277\225\377\202\270"
-  "\202\377Q\236Q\377A\213A\377B\227B\3774\2034\3778\2178\3770{0\3774\206"
-  "4\3772\2012\377W\220W\377p\254p\377\211\306\211\377\214\310\214\377\245"
-  "\321\245\377\206\245\207\377\200\240\201\377y\233z\377r\226t\377k\220"
-  "m\377d\213f\377\\\205^\377S\221V\377M\253N\377B\263B\3773\2243\377\362"
-  "\367\362\377\202\377\377\377\377\32\377\377\377\350\377\377\377\322\377"
-  "\377\377\326\377\377\377\331\377\377\377\335\377\377\377\340\377\377"
-  "\377\343\377\377\377\346\377\377\377\350\377\377\377\353\377\377\377"
-  "\355\377\377\377\357\377\377\377\361\377\377\377\363\377\377\377\365"
-  "\377\377\377\366\377\377\377\370\377\377\377\371\377\377\377\372\374"
-  "\374\375\373\366\366\370\375\360\360\364\376\352\352\360\376\345\345"
-  "\354\377\337\337\350\376\330\330\343\375\203\331\331\343\377\202\332"
-  "\332\344\377\6\333\333\344\377\377\377\377\377\361\361\365\377\334\334"
-  "\345\377\335\335\345\377\377\377\377\377\202\336\336\346\377\7\360\360"
-  "\364\377\371\371\372\377\364\364\367\377\377\377\377\377\340\340\350"
-  "\377\341\341\350\377\377\377\377\377\202\342\342\351\377\2\343\343\351"
-  "\377\377\377\377\377\202\344\344\352\377\202\345\345\353\377\202\346"
-  "\346\353\377\203\347\347\354\377\17\350\350\355\377\377\377\377\377\366"
-  "\366\370\377\351\351\356\377\352\352\356\377\377\377\377\377\353\353"
-  "\356\377\353\353\357\377\366\366\370\377\373\373\374\377\371\371\372"
-  "\377\377\377\377\377\356\356\360\377\356\356\361\377\377\377\377\377"
-  "\202\357\357\361\377\1\377\377\377\377\202\376\376\376\377\5\361\361"
-  "\363\377\362\362\363\377\361\361\362\377\360\360\362\377\360\360\361"
-  "\377\202\361\361\362\377\204\362\362\362\377\2\362\362\363\377\363\363"
-  "\363\377\206\362\362\363\377\202\363\363\363\377\2\363\363\364\377\363"
-  "\363\363\377\202\362\362\363\377\203\362\362\362\377\206\361\361\362"
-  "\377\14\361\361\362\375\361\361\362\370\361\361\362\357\361\361\362\343"
-  "\361\361\362\324\361\361\362\301\361\361\362\252\361\361\362\220\361"
-  "\361\362s\361\361\362R\361\361\362.\361\361\362\10\210\0\0\0\0\35\377"
-  "\377\377F\241\306\241\374\224\276\224\377x\265x\377O\235O\377\77\213"
-  "\77\377@\226@\3773\2023\3777\2167\377/z/\3774\2044\3771\2001\377W\220"
-  "W\377o\253o\377\243\317\243\377\275\307\275\377\262\267\263\377\307\307"
-  "\307\377\344\344\344\377\360\360\360\377\367\367\370\377\321\321\324"
-  "\377\263\263\266\377\205\205\211\377\\\\a\377TXZ\377ItN\3775\2265\377"
-  "\214\246\214\377\202\277\277\277\377\32\306\306\306\370\377\377\377\322"
-  "\377\377\377\326\377\377\377\331\377\377\377\335\377\377\377\340\377"
-  "\377\377\343\377\377\377\346\377\377\377\350\377\377\377\353\377\377"
-  "\377\355\377\377\377\357\377\377\377\361\377\377\377\363\377\377\377"
-  "\365\377\377\377\366\377\377\377\370\377\377\377\371\377\377\377\372"
-  "\374\374\375\373\366\366\370\375\360\360\364\376\353\353\360\376\346"
-  "\346\355\377\340\340\350\377\331\331\343\375\203\332\332\344\377\2\333"
-  "\333\344\377\333\333\345\377\202\334\334\345\377\1\300\300\306\377\203"
-  "\17\17\17\377\1\300\300\310\377\202\337\337\347\377\202\340\340\350\377"
-  "\202\341\341\350\377\202\342\342\351\377\2\305\305\312\377\343\343\352"
-  "\377\202\344\344\352\377\203\345\345\353\377\2\346\346\353\377\346\346"
-  "\354\377\202\347\347\354\377\202\350\350\355\377\202\351\351\355\377"
-  "\6>>\77\377\20\20\20\377\0\0\0\377//0\377\315\315\317\377\354\354\357"
-  "\377\203\355\355\360\377\202\356\356\361\377\202\357\357\361\377\4\320"
-  "\320\322\377\360\360\362\377\361\361\362\377\361\361\363\377\202\362"
-  "\362\363\377\2\363\363\363\377\361\361\362\377\202\360\360\361\377\4"
-  "\0\0\0\377\360\360\361\377\361\361\362\377\362\362\362\377\202\362\362"
-  "\363\377\2\363\363\364\377\363\363\363\377\207\362\362\363\377\1\363"
-  "\363\363\377\202\362\362\363\377\202\362\362\362\377\1\320\320\322\377"
-  "\203\361\361\362\377\1\360\360\361\377\204\361\361\362\377\14\361\361"
-  "\362\375\361\361\362\370\361\361\362\357\361\361\362\343\361\361\362"
-  "\324\361\361\362\301\361\361\362\252\361\361\362\220\361\361\362s\361"
-  "\361\362R\361\361\362.\361\361\362\10\210\0\0\0\0\21\351\362\351}\227"
-  "\300\227\377\223\275\223\377\\\234\\\377D\215D\377>\211>\377A\213A\377"
-  "[\232[\377Z\227Z\377X\224X\377B\202B\377,q,\377X\226X\377x\257x\377\271"
-  "\275\271\377\256\256\257\377\357\357\357\377\202\377\377\377\377\12\367"
-  "\367\370\377\350\350\352\377\325\325\330\377\300\300\304\377\250\250"
-  "\256\377\204\204\213\377\\\\a\377QQW\3776H:\377\220\265\220\377\202\377"
-  "\377\377\377\36\377\377\377\376\377\377\377\322\377\377\377\326\377\377"
-  "\377\331\377\377\377\335\377\377\377\340\377\377\377\343\377\377\377"
-  "\346\377\377\377\350\377\377\377\353\377\377\377\355\377\377\377\357"
-  "\377\377\377\361\377\377\377\363\377\377\377\365\377\377\377\366\377"
-  "\377\377\370\377\377\377\371\377\377\377\372\374\374\375\373\366\366"
-  "\370\375\360\360\365\376\353\353\361\376\346\346\355\377\341\341\351"
-  "\377\332\332\344\375\333\333\344\377\332\332\344\377\333\333\344\377"
-  "\333\333\345\377\202\334\334\345\377\10\335\335\346\377;;=\377iim\377"
-  "\375\375\375\377\207\207\207\377333\377\344\344\352\377\340\340\350\377"
-  "\202\341\341\350\377\202\342\342\351\377\5\343\343\351\377\343\343\352"
-  "\377\0\0\0\377\350\350\355\377\344\344\352\377\202\345\345\353\377\2"
-  "\346\346\353\377\346\346\354\377\202\347\347\354\377\202\350\350\355"
-  "\377\202\351\351\355\377\13\352\352\356\377NNO\377//0\377\372\372\373"
-  "\377\376\376\376\377fff\377222\377\357\357\362\377\355\355\360\377\356"
-  "\356\360\377\356\356\361\377\202\357\357\361\377\202\360\360\362\377"
-  "\2\0\0\0\377\363\363\365\377\202\362\362\363\377\10\363\363\363\377\363"
-  "\363\364\377\362\362\363\377\361\361\362\377\357\357\361\377\360\360"
-  "\362\377\0\0\0\377\377\377\377\377\203\361\361\362\377\202\362\362\363"
-  "\377\1\362\362\362\377\202\361\361\362\377\202\362\362\362\377\204\362"
-  "\362\363\377\202\362\362\362\377\202\361\361\362\377\3\0\0\0\377\360"
-  "\360\361\377\361\361\361\377\202\360\360\361\377\204\361\361\362\377"
-  "\14\361\361\362\375\361\361\362\370\361\361\362\357\361\361\362\343\361"
-  "\361\362\324\361\361\362\301\361\361\362\252\361\361\362\220\361\361"
-  "\362s\361\361\362R\361\361\362.\361\361\362\10\210\0\0\0\0\16\303\333"
-  "\303\310\226\277\226\377\222\275\222\377N\223N\377C\214C\377<\210<\377"
-  "Y\232Y\377\204\263\204\377\203\260\203\377\202\256\202\377L\210L\377"
-  "+o+\377[\230[\377\177\252\177\377\202\262\262\262\377)\372\372\372\377"
-  "\377\377\377\377\367\367\370\377\350\350\352\377\325\325\330\377\300"
-  "\300\304\377\250\250\256\377\216\216\226\377mmu\377RRV\377\\\\a\377Q"
-  "QW\377\15-\15\377\273\326\273\331\377\377\377\312\377\377\377\317\377"
-  "\377\377\322\377\377\377\326\377\377\377\331\377\377\377\335\377\377"
-  "\377\340\377\377\377\343\377\377\377\346\377\377\377\350\377\377\377"
-  "\353\377\377\377\355\377\377\377\357\377\377\377\361\377\377\377\363"
-  "\377\377\377\365\377\377\377\366\377\377\377\370\377\377\377\371\377"
-  "\377\377\372\374\374\375\373\366\366\371\375\361\361\365\376\353\353"
-  "\361\376\347\347\356\377\341\341\351\377\333\333\344\375\202\333\333"
-  "\345\377\202\334\334\345\377\202\335\335\346\377\11\336\336\346\377\0"
-  "\0\0\377\366\366\371\377\360\360\364\377\340\340\347\377\0\0\0\377\371"
-  "\371\372\377\341\341\350\377\0\0\0\377\202\342\342\351\377\10\0\0\0\377"
-  "\343\343\352\377jjm\377\0\0\0\377UUU\377\345\345\353\377\346\346\353"
-  "\377\346\346\354\377\202\347\347\354\377\1\350\350\354\377\202\350\350"
-  "\355\377\2\351\351\355\377\351\351\356\377\202\352\352\356\377\21\0\0"
-  "\0\377\306\306\310\377\373\373\374\377\354\354\357\377\355\355\360\377"
-  "\0\0\0\377\374\374\374\377\356\356\361\377\0\0\0\377\357\357\361\377"
-  "\360\360\362\377\0\0\0\377\361\361\362\377ppq\377\0\0\0\377UUU\377\362"
-  "\362\363\377\202\363\363\364\377\202\363\363\363\377\33\361\361\362\377"
-  "\360\360\362\377\360\360\361\377\0\0\0\377\377\377\377\377\0\0\0\377"
-  "QQQ\377\40\40\40\377\0\0\0\377qqq\377\362\362\362\377\0\0\0\377QQQ\377"
-  "\40\40\40\377\0\0\0\377qqq\377\362\362\362\377\0\0\0\377\357\357\361"
-  "\377\360\360\362\377\0\0\0\377\361\361\362\377ppq\377\0\0\0\377UUU\377"
-  "\362\362\363\377\360\360\361\377\205\357\357\360\377\14\357\357\360\375"
-  "\357\357\360\370\357\357\360\357\357\357\360\343\357\357\360\324\357"
-  "\357\360\301\357\357\360\252\357\357\360\220\357\357\360s\357\357\360"
-  "R\357\357\360.\357\357\360\10\207\0\0\0\0\17\377\377\377\31\261\317\261"
-  "\355\225\277\225\377\204\264\204\377H\220H\377A\213A\377:\207:\377b\237"
-  "b\377\204\262\204\377\203\260\203\377\202\255\202\377A\201A\377*n*\377"
-  "f\242f\377t\223t\377\202\262\262\262\377\15""000\377\253\253\253\377"
-  "\350\350\352\377\325\325\330\377\300\300\304\377\250\250\256\377\216"
-  "\216\226\377``g\377\32\32\34\377\33\33\34\377ffk\377\\\\a\377\6\27\6"
-  "\377\203\377\377\377\377\31\377\377\377\361\377\377\377\326\377\377\377"
-  "\331\377\377\377\335\377\377\377\340\377\377\377\343\377\377\377\346"
-  "\377\377\377\350\377\377\377\353\377\377\377\355\377\377\377\357\377"
-  "\377\377\361\377\377\377\363\377\377\377\365\377\377\377\366\377\377"
-  "\377\370\377\377\377\371\377\377\377\372\374\374\375\373\366\366\371"
-  "\375\361\361\365\376\354\354\361\376\350\350\356\377\342\342\352\377"
-  "\334\334\345\375\202\334\334\345\377\2\335\335\345\377\335\335\346\377"
-  "\202\336\336\346\377\3\336\336\347\377\0\0\0\377\377\377\377\377\202"
-  "\340\340\350\377\15\0\0\0\377\377\377\377\377\342\342\351\377\0\0\0\377"
-  "\377\377\377\377\343\343\352\377\0\0\0\377\377\377\377\377\345\345\353"
-  "\377\0\0\0\377\377\377\377\377\367\367\370\377\346\346\354\377\202\347"
-  "\347\354\377\202\350\350\355\377\2\351\351\355\377\351\351\356\377\202"
-  "\352\352\356\377\23\353\353\356\377\353\353\357\377\0\0\0\377\377\377"
-  "\377\377\361\361\363\377\355\355\360\377\356\356\360\377\0\0\0\377\377"
-  "\377\377\377\357\357\361\377\0\0\0\377\377\377\377\377\360\360\362\377"
-  "\0\0\0\377\377\377\377\377\362\362\363\377\0\0\0\377\377\377\377\377"
-  "\373\373\373\377\202\364\364\364\377\34\363\363\364\377\363\363\363\377"
-  "\361\361\362\377\360\360\361\377\361\361\362\377\0\0\0\377\377\377\377"
-  "\377\0\0\0\377\252\252\252\377\373\373\373\377\333\333\333\377\0\0\0"
-  "\377\370\370\371\377\0\0\0\377\252\252\252\377\373\373\373\377\333\333"
-  "\333\377\0\0\0\377\370\370\371\377\0\0\0\377\377\377\377\377\360\360"
-  "\362\377\0\0\0\377\377\377\377\377\362\362\363\377\0\0\0\377\377\377"
-  "\377\377\373\373\373\377\206\357\357\360\377\14\357\357\360\375\357\357"
-  "\360\370\357\357\360\357\357\357\360\343\357\357\360\324\357\357\360"
-  "\301\357\357\360\252\357\357\360\220\357\357\360s\357\357\360R\357\357"
-  "\360.\357\357\360\10\207\0\0\0\0\22\377\377\377F\240\305\240\374\224"
-  "\276\224\377v\254v\377F\216F\377\77\212\77\3778\2068\377p\247p\377\203"
-  "\261\203\377\202\257\202\377\201\254\201\377A\177A\377*m*\377e\241e\377"
-  "MsM\377\247\247\247\377\262\262\262\377CCC\377\202\0\0\0\377\3""223\377"
-  ",,.\377&&(\377\203\0\0\0\377\5==\77\377ppu\377``e\377\2\7\2\377\325\345"
-  "\325\377\202\377\377\377\377\31\377\377\377\372\377\377\377\326\377\377"
-  "\377\331\377\377\377\335\377\377\377\340\377\377\377\343\377\377\377"
-  "\346\377\377\377\350\377\377\377\353\377\377\377\355\377\377\377\357"
-  "\377\377\377\361\377\377\377\363\377\377\377\365\377\377\377\366\377"
-  "\377\377\370\377\377\377\371\377\377\377\372\374\374\375\373\366\366"
-  "\371\375\362\362\365\376\355\355\362\376\350\350\356\377\343\343\352"
-  "\377\335\335\345\375\203\335\335\346\377\2\336\336\346\377\336\336\347"
-  "\377\202\337\337\347\377\2\0\0\0\377\377\377\377\377\202\341\341\350"
-  "\377\13\0\0\0\377\377\377\377\377\343\343\351\377\0\0\0\377\377\377\377"
-  "\377\344\344\352\377\0\0\0\377\377\377\377\377\345\345\353\377\0\0\0"
-  "\377\377\377\377\377\202\347\347\354\377\202\350\350\355\377\202\351"
-  "\351\355\377\202\352\352\356\377\2\353\353\356\377\353\353\357\377\202"
-  "\354\354\357\377\25\20\20\20\377\314\314\314\377\355\355\360\377\356"
-  "\356\360\377\316\316\321\377\0\0\0\377\377\377\377\377\360\360\362\377"
-  "\0\0\0\377\377\377\377\377\361\361\363\377\0\0\0\377\377\377\377\377"
-  "\363\363\363\377\0\0\0\377\377\377\377\377\364\364\364\377\364\364\365"
-  "\377\365\365\365\377\364\364\364\377\363\363\364\377\202\361\361\362"
-  "\377\32\363\363\363\377\0\0\0\377\377\377\377\377\0\0\0\377\377\377\377"
-  "\377\366\366\366\377\361\361\362\377\0\0\0\377\377\377\377\377\0\0\0"
-  "\377\377\377\377\377\366\366\366\377\361\361\362\377\0\0\0\377\377\377"
-  "\377\377\0\0\0\377\377\377\377\377\361\361\363\377\0\0\0\377\377\377"
-  "\377\377\363\363\363\377\0\0\0\377\377\377\377\377\364\364\364\377\355"
-  "\355\357\377\356\356\357\377\204\357\357\360\377\14\357\357\360\375\357"
-  "\357\360\370\357\357\360\357\357\357\360\343\357\357\360\324\357\357"
-  "\360\301\357\357\360\252\357\357\360\220\357\357\360s\357\357\360R\357"
-  "\357\360.\357\357\360\10\207\0\0\0\0\37\351\362\351}\227\300\227\377"
-  "\223\275\223\377h\243h\377D\215D\377=\211=\3776\2056\377g\232g\377j\227"
-  "j\377i\225i\377g\222g\3771t1\377*l*\377d\241d\377j\245j\3779F9\377zz"
-  "z\377\262\262\262\377\221\221\221\377YYY\377,,,\377+++\377))*\377((("
-  "\377KKL\377rrt\377\203\203\206\377[[^\377\25\25\26\377\20=\20\377|\243"
-  "|\377\202\277\277\277\377\31\275\275\275\377\377\377\377\326\377\377"
-  "\377\331\377\377\377\335\377\377\377\340\377\377\377\343\377\377\377"
-  "\346\377\377\377\350\377\377\377\353\377\377\377\355\377\377\377\357"
-  "\377\377\377\361\377\377\377\363\377\377\377\365\377\377\377\366\377"
-  "\377\377\370\377\377\377\371\377\377\377\372\374\374\375\373\367\367"
-  "\371\375\362\362\365\376\355\355\362\376\350\350\356\377\344\344\353"
-  "\377\335\335\346\375\202\336\336\346\377\1\336\336\347\377\202\337\337"
-  "\347\377\21\340\340\347\377\340\340\350\377--.\377\210\210\210\377\342"
-  "\342\351\377yy|\377--/\377\377\377\377\377\343\343\352\377\0\0\0\377"
-  "\377\377\377\377\267\267\274\377\0\0\0\377\377\377\377\377\346\346\354"
-  "\377\0\0\0\377\377\377\377\377\202\350\350\355\377\202\351\351\355\377"
-  "\203\352\352\356\377\202\353\353\357\377\202\354\354\357\377\21\355\355"
-  "\360\377OOP\377UUU\377\361\361\364\377\357\357\361\377```\377AAA\377"
-  "\377\377\377\377\361\361\362\377\0\0\0\377\377\377\377\377\302\302\302"
-  "\377\0\0\0\377\377\377\377\377\363\363\364\377\0\0\0\377\377\377\377"
-  "\377\203\365\365\365\377\202\364\364\364\377\7\362\362\362\377\363\363"
-  "\363\377\364\364\364\377\0\0\0\377\377\377\377\377\0\0\0\377\377\377"
-  "\377\377\202\361\361\362\377\21\0\0\0\377\377\377\377\377\0\0\0\377\252"
-  "\252\252\377\373\373\373\377\333\333\333\377\0\0\0\377\370\370\371\377"
-  "\0\0\0\377\377\377\377\377\302\302\302\377\0\0\0\377\377\377\377\377"
-  "\363\363\364\377\0\0\0\377\377\377\377\377\365\365\365\377\206\355\355"
-  "\357\377\14\355\355\357\375\355\355\357\370\355\355\357\357\355\355\357"
-  "\343\355\355\357\324\355\355\357\301\355\355\357\252\355\355\357\220"
-  "\355\355\357s\355\355\357R\355\355\357.\355\355\357\10\207\0\0\0\0\37"
-  "\306\334\306\316\226\277\226\377\221\275\221\377Z\233Z\377B\214B\377"
-  ";\210;\3775\2045\377\204\263\204\377\203\260\203\377\202\256\202\377"
-  "\201\253\201\377+o+\377-n-\377b\240b\377q\261q\377v\267v\377<a<\377\34"
-  "0\34\377\33""0\33\377\31/\31\377\30/\30\377\27.\27\377\25.\25\377\24"
-  ".\24\377\22-\22\377\21-\21\377\17,\17\377\16+\16\377\36j\36\377)\235"
-  ")\377q\250q\377\203\377\377\377\377\30\377\377\377\350\377\377\377\331"
-  "\377\377\377\335\377\377\377\340\377\377\377\343\377\377\377\346\377"
-  "\377\377\350\377\377\377\353\377\377\377\355\377\377\377\357\377\377"
-  "\377\361\377\377\377\363\377\377\377\365\377\377\377\366\377\377\377"
-  "\370\377\377\377\371\377\377\377\372\374\374\375\373\367\367\371\375"
-  "\362\362\365\376\356\356\362\376\351\351\357\377\345\345\353\377\336"
-  "\336\346\375\203\337\337\347\377\1\340\340\347\377\202\340\340\350\377"
-  "\23\341\341\350\377\303\303\312\377!!!\377\20\20\20\377\17\17\20\377"
-  "\320\320\323\377\372\372\373\377\344\344\352\377LLN\377\0\0\0\377==\77"
-  "\377\0\0\0\377\377\377\377\377\347\347\354\377\0\0\0\377\21\21\21\377"
-  "\350\350\355\377\351\351\355\377\351\351\356\377\202\352\352\356\377"
-  "\202\353\353\357\377\202\354\354\357\377\202\355\355\360\377\21\356\356"
-  "\360\377\316\316\321\377222\377\21\21\21\377\0\0\0\377000\377\330\330"
-  "\331\377\373\373\374\377\361\361\363\377QQQ\377\0\0\0\377AAA\377\0\0"
-  "\0\377\377\377\377\377\364\364\365\377!!!\377\0\0\0\377\204\365\365\365"
-  "\377\2\364\364\364\377\363\363\364\377\202\363\363\363\377\31\0\0\0\377"
-  "\377\377\377\377\0\0\0\377\377\377\377\377\361\361\361\377\360\360\361"
-  "\377\0\0\0\377\377\377\377\377\0\0\0\377QQQ\377\40\40\40\377\0\0\0\377"
-  "qqq\377\362\362\362\377QQQ\377\0\0\0\377AAA\377\0\0\0\377\377\377\377"
-  "\377\364\364\365\377!!!\377\0\0\0\377\365\365\365\377\355\355\357\377"
-  "\355\355\356\377\204\355\355\357\377\14\355\355\357\375\355\355\357\370"
-  "\355\355\357\357\355\355\357\343\355\355\357\324\355\355\357\301\355"
-  "\355\357\252\355\355\357\220\355\355\357s\355\355\357R\355\355\357.\355"
-  "\355\357\10\206\0\0\0\0\40\377\377\377%\260\317\260\355\225\276\225\377"
-  "\220\274\220\377G\217G\377@\213@\377:\207:\377C\214C\377\203\262\203"
-  "\377\203\257\203\377\202\255\202\377\200\252\200\377*n*\3778x8\377a\237"
-  "a\377o\260o\377|\302|\377\220\315\220\377\216\277\216\377s\247s\377\207"
-  "\276\207\377k\245k\377\177\274\177\377|\273|\377x\272x\377t\271t\377"
-  "q\267q\377U\236U\377i\264i\377/\251/\377)\245)\377E\216E\377\203\377"
-  "\377\377\377\30\377\377\377\365\377\377\377\331\377\377\377\335\377\377"
-  "\377\340\377\377\377\343\377\377\377\346\377\377\377\350\377\377\377"
-  "\353\377\377\377\355\377\377\377\357\377\377\377\361\377\377\377\363"
-  "\377\377\377\365\377\377\377\366\377\377\377\370\377\377\377\371\377"
-  "\377\377\372\374\374\375\373\367\367\371\375\362\362\366\376\356\356"
-  "\362\376\352\352\357\377\346\346\354\377\337\337\347\375\202\337\337"
-  "\347\377\202\340\340\350\377\202\341\341\350\377\202\342\342\351\377"
-  "\2\347\347\354\377\373\373\374\377\202\375\375\376\377\7\350\350\356"
-  "\377\345\345\353\377\346\346\353\377\367\367\370\377\377\377\377\377"
-  "\371\371\372\377\377\377\377\377\202\350\350\355\377\2\377\377\377\377"
-  "\376\376\376\377\202\352\352\356\377\2\353\353\356\377\353\353\357\377"
-  "\202\354\354\357\377\202\355\355\360\377\1\356\356\360\377\202\356\356"
-  "\361\377\15\357\357\361\377\361\361\363\377\374\374\374\377\376\376\376"
-  "\377\377\377\377\377\374\374\375\377\364\364\365\377\362\362\363\377"
-  "\363\363\364\377\373\373\373\377\377\377\377\377\374\374\374\377\377"
-  "\377\377\377\202\365\365\365\377\2\376\376\376\377\377\377\377\377\202"
-  "\365\365\365\377\1\364\364\365\377\203\364\364\364\377\5\363\363\364"
-  "\377\363\363\363\377\377\377\377\377\363\363\363\377\377\377\377\377"
-  "\202\360\360\361\377\3\357\357\361\377\377\377\377\377\0\0\0\377\202"
-  "\360\360\361\377\202\361\361\361\377\6\362\362\363\377\363\363\364\377"
-  "\373\373\373\377\377\377\377\377\374\374\374\377\377\377\377\377\202"
-  "\365\365\365\377\4\376\376\376\377\377\377\377\377\354\354\355\377\353"
-  "\353\355\377\204\355\355\357\377\14\355\355\357\375\355\355\357\370\355"
-  "\355\357\357\355\355\357\343\355\355\357\324\355\355\357\301\355\355"
-  "\357\252\355\355\357\220\355\355\357s\355\355\357R\355\355\357.\355\355"
-  "\357\10\206\0\0\0\0!\377\377\377R\240\305\240\374\223\276\223\377\202"
-  "\263\202\377E\216E\377>\212>\3778\2068\377L\221L\377\203\261\203\377"
-  "\202\257\202\377\201\254\201\377k\233k\377*m*\3777w7\377`\236`\377n\260"
-  "n\377{\302{\377\217\314\217\377\215\277\215\377r\246r\377\206\275\206"
-  "\377j\244j\377\177\273\177\377{\272{\377w\271w\377s\270s\377p\267p\377"
-  "T\235T\377h\263h\377A\260A\377(\244(\377\33~\33\377\340\354\340\376\202"
-  "\377\377\377\374\30\377\377\377\367\377\377\377\331\377\377\377\335\377"
-  "\377\377\340\377\377\377\343\377\377\377\346\377\377\377\350\377\377"
-  "\377\353\377\377\377\355\377\377\377\357\377\377\377\361\377\377\377"
-  "\363\377\377\377\365\377\377\377\366\377\377\377\370\377\377\377\371"
-  "\377\377\377\372\374\374\375\373\367\367\371\375\363\363\366\376\356"
-  "\356\363\376\352\352\357\377\346\346\354\377\340\340\347\375\202\340"
-  "\340\350\377\202\341\341\350\377\202\342\342\351\377\1\343\343\351\377"
-  "\202\343\343\352\377\202\344\344\352\377\202\345\345\353\377\2\346\346"
-  "\353\377\346\346\354\377\202\347\347\354\377\202\350\350\355\377\202"
-  "\351\351\355\377\202\352\352\356\377\1\353\353\356\377\202\353\353\357"
-  "\377\2\354\354\357\377\354\354\360\377\202\355\355\360\377\2\356\356"
-  "\360\377\356\356\361\377\202\357\357\361\377\202\360\360\362\377\2\361"
-  "\361\362\377\361\361\363\377\202\362\362\363\377\2\363\363\363\377\363"
-  "\363\364\377\202\364\364\364\377\1\364\364\365\377\207\365\365\365\377"
-  "\203\364\364\364\377\202\363\363\364\377\202\363\363\363\377\203\362"
-  "\362\363\377\6\362\362\362\377\361\361\362\377\361\361\361\377\361\361"
-  "\362\377\0\0\0\377\360\360\361\377\203\361\361\361\377\6\360\360\361"
-  "\377\361\361\362\377\360\360\361\377\355\355\356\377\354\354\355\377"
-  "\352\352\354\377\202\351\351\353\377\210\353\353\355\377\14\353\353\355"
-  "\375\353\353\355\370\353\353\355\357\353\353\355\343\353\353\355\324"
-  "\353\353\355\301\353\353\355\252\353\353\355\220\353\353\355s\353\353"
-  "\355R\353\353\355.\353\353\355\10\206\0\0\0\0;\314\340\314\207\227\300"
-  "\227\377\222\275\222\377p\250p\377C\215C\377<\211<\3776\2056\377G\215"
-  "G\377Z\226Z\377X\223X\377W\220W\377K\205K\377)l)\3776v6\377_\236_\377"
-  "m\257m\377y\302y\377\215\314\215\377\214\277\214\377q\246q\377\205\275"
-  "\205\377i\244i\377}\273}\377z\272z\377v\271v\377r\270r\377o\267o\377"
-  "S\235S\377g\262g\377;\237;\377&\243&\377\33\206\33\3777\2067\374\377"
-  "\377\377\317\377\377\377\322\377\377\377\326\377\377\377\331\377\377"
-  "\377\335\377\377\377\340\377\377\377\343\377\377\377\346\377\377\377"
-  "\350\377\377\377\353\377\377\377\355\377\377\377\357\377\377\377\361"
-  "\377\377\377\363\377\377\377\365\377\377\377\366\377\377\377\370\377"
-  "\377\377\371\377\377\377\372\374\374\375\373\367\367\371\375\363\363"
-  "\366\376\357\357\363\376\353\353\357\377\347\347\355\377\341\341\350"
-  "\375\202\341\341\350\377\1\341\341\351\377\202\342\342\351\377\2\343"
-  "\343\351\377\343\343\352\377\202\344\344\352\377\202\345\345\353\377"
-  "\2\346\346\353\377\346\346\354\377\202\347\347\354\377\2\350\350\354"
-  "\377\350\350\355\377\202\351\351\355\377\1\351\351\356\377\202\352\352"
-  "\356\377\202\353\353\357\377\202\354\354\357\377\202\355\355\360\377"
-  "\2\356\356\360\377\356\356\361\377\202\357\357\361\377\202\360\360\362"
-  "\377\202\361\361\362\377\1\361\361\363\377\202\362\362\363\377\202\363"
-  "\363\364\377\2\364\364\364\377\364\364\365\377\207\365\365\365\377\1"
-  "\364\364\365\377\204\364\364\364\377\203\363\363\363\377\202\362\362"
-  "\363\377\7\362\362\362\377\362\362\363\377\362\362\362\377\361\361\362"
-  "\377\361\361\361\377\361\361\362\377\363\363\364\377\205\360\360\361"
-  "\377\5\357\357\360\377\356\356\360\377\355\355\356\377\353\353\355\377"
-  "\353\353\356\377\202\352\352\354\377\202\351\351\353\377\206\353\353"
-  "\355\377\14\353\353\355\375\353\353\355\370\353\353\355\357\353\353\355"
-  "\343\353\353\355\324\353\353\355\301\353\353\355\252\353\353\355\220"
-  "\353\353\355s\353\353\355R\353\353\355.\353\353\355\10\206\0\0\0\0;\316"
-  "\341\316\306\225\277\225\377\221\274\221\377j\222j\377c\201c\377PoP\377"
-  "]}]\377[|[\377ZzZ\377XxX\377GgG\377UuU\377TsT\377<_<\377X\223X\377n\261"
-  "n\377w\301w\377\203\307\203\377\201\277\201\377m\255m\377x\274x\377d"
-  "\253d\377o\272o\377k\271k\377f\270f\377b\266b\377]\264]\377I\242I\377"
-  "`\257`\3779\2319\377$\242$\377\33\216\33\377\21o\21\377\377\377\377\317"
-  "\377\377\377\322\377\377\377\326\377\377\377\331\377\377\377\335\377"
-  "\377\377\340\377\377\377\343\377\377\377\346\377\377\377\350\377\377"
-  "\377\353\377\377\377\355\377\377\377\357\377\377\377\361\377\377\377"
-  "\363\377\377\377\365\377\377\377\366\377\377\377\370\377\377\377\371"
-  "\377\377\377\372\374\374\375\373\370\370\371\375\363\363\366\376\357"
-  "\357\363\376\353\353\360\377\350\350\355\377\341\341\351\375\203\342"
-  "\342\351\377\2\343\343\351\377\343\343\352\377\202\344\344\352\377\202"
-  "\345\345\353\377\202\346\346\353\377\11\255\255\261\377HHI\377\16\16"
-  "\16\377\35\35\35\377---\377<<<\377||}\377\306\306\311\377\352\352\356"
-  "\377\202\353\353\357\377\202\354\354\357\377\202\355\355\360\377\2\356"
-  "\356\360\377\356\356\361\377\203\357\357\361\377\202\360\360\362\377"
-  "\2\361\361\362\377\361\361\363\377\202\362\362\363\377\11\363\363\364"
-  "\377\266\266\267\377LLL\377\16\16\16\377\35\35\35\377---\377<<<\377\200"
-  "\200\200\377\316\316\316\377\202\365\365\365\377\1\364\364\365\377\205"
-  "\364\364\364\377\2\363\363\364\377\363\363\363\377\202\362\362\363\377"
-  "\204\362\362\362\377\203\361\361\362\377\16\267\267\270\377XXY\377\40"
-  "\40\40\377,,,\377888\377FFF\377\203\203\204\377\312\312\313\377\356\356"
-  "\357\377\355\355\357\377\355\355\356\377\353\353\355\377\352\352\354"
-  "\377\352\352\353\377\204\351\351\353\377\204\353\353\355\377\14\353\353"
-  "\355\375\353\353\355\370\353\353\355\357\353\353\355\343\353\353\355"
-  "\324\353\353\355\301\353\353\355\252\353\353\355\220\353\353\355s\353"
-  "\353\355R\353\353\355.\353\353\355\10\205\0\0\0\0<\377\377\377%\265\322"
-  "\265\350\224\276\224\377\220\274\220\377\256\267\262\377ccw\377XXl\377"
-  "MMa\377BBV\37799L\37711C\377)):\377!!0\377\31\31'\377\12\12\20\377Eu"
-  "E\377s\270s\377v\301v\377\213\313\213\377\212\277\212\377o\246o\377\203"
-  "\275\203\377g\243g\377{\273{\377x\272x\377t\271t\377p\267p\377l\266l"
-  "\377Q\234Q\377e\261e\3775\2165\377#\241#\377\33\225\33\377\20n\20\377"
-  "\271\324\271\337\377\377\377\322\377\377\377\326\377\377\377\331\377"
-  "\377\377\335\377\377\377\340\377\377\377\343\377\377\377\346\377\377"
-  "\377\350\377\377\377\353\377\377\377\355\377\377\377\357\377\377\377"
-  "\361\377\377\377\363\377\377\377\365\377\377\377\366\377\377\377\370"
-  "\377\377\377\371\377\377\377\372\374\374\375\373\370\370\372\375\363"
-  "\363\366\376\360\360\363\376\354\354\360\377\350\350\356\377\342\342"
-  "\351\375\202\343\343\351\377\1\343\343\352\377\202\344\344\352\377\203"
-  "\345\345\353\377\6\346\346\353\377\346\346\354\377eeg\377\0\0\0\377\5"
-  "\5\5\377\2\2\2\377\202\0\0\0\377\4\4\4\4\377\"\"\"\377]]]\377\244\244"
-  "\246\377\202\354\354\357\377\203\355\355\360\377\202\356\356\361\377"
-  "\202\357\357\361\377\202\360\360\362\377\2\361\361\362\377\361\361\363"
-  "\377\202\362\362\363\377\202\363\363\364\377\4jjj\377\0\0\0\377\5\5\5"
-  "\377\2\2\2\377\202\0\0\0\377\4\4\4\4\377\"\"\"\377]]]\377\247\247\250"
-  "\377\205\364\364\364\377\202\363\363\364\377\202\363\363\363\377\203"
-  "\362\362\363\377\1\362\362\362\377\203\361\361\362\377\5\360\360\361"
-  "\377hhi\377\0\0\0\377\5\5\5\377\2\2\2\377\202\0\0\0\377\7\4\4\4\377\""
-  "\"\"\377]]]\377\245\245\245\377\355\355\356\377\354\354\356\377\354\354"
-  "\355\377\202\352\352\354\377\2\351\351\353\377\350\350\353\377\206\351"
-  "\351\353\377\14\351\351\353\375\351\351\353\370\351\351\353\357\351\351"
-  "\353\343\351\351\353\324\351\351\353\301\351\351\353\252\351\351\353"
-  "\220\351\351\353s\351\351\353R\351\351\353.\351\351\353\10\205\0\0\0"
-  "\0>\377\377\377R\243\307\243\371\223\276\223\377\217\273\217\377\261"
-  "\261\267\377nn\202\377ccw\377XXl\377MMa\377BBV\37799L\37711C\377)):\377"
-  "!!0\377\16\16\25\377DuD\377q\270q\377t\300t\377\203\277\203\377\212\276"
-  "\212\377n\245n\377\202\274\202\377f\243f\377z\272z\377w\271w\377s\270"
-  "s\377o\267o\377l\265l\377P\233P\377d\260d\377H\226H\377!\240!\377\33"
-  "\234\33\377\17m\17\377r\251r\360\377\377\377\322\377\377\377\326\377"
-  "\377\377\331\377\377\377\335\377\377\377\340\377\377\377\343\377\377"
-  "\377\346\377\377\377\350\377\377\377\353\377\377\377\355\377\377\377"
-  "\357\377\377\377\361\377\377\377\363\377\377\377\365\377\377\377\366"
-  "\377\377\377\370\377\377\377\371\377\377\377\372\375\375\375\373\370"
-  "\370\372\375\364\364\366\376\360\360\364\376\354\354\361\377\351\351"
-  "\356\377\343\343\352\375\344\344\352\377\343\343\352\377\202\344\344"
-  "\352\377\202\345\345\353\377\10\346\346\353\377\346\346\354\377\347\347"
-  "\354\377VVX\377\0\0\0\377\11\11\11\377@@@\377xxx\377\202\177\177\177"
-  "\377\5xxx\377@@@\377\7\7\7\377ooo\377\275\275\276\377\202\355\355\360"
-  "\377\2\356\356\360\377\356\356\361\377\202\357\357\361\377\202\360\360"
-  "\362\377\2\361\361\362\377\361\361\363\377\202\362\362\363\377\1\363"
-  "\363\363\377\202\363\363\364\377\5[[[\377\0\0\0\377\1\13\1\377\0M\0\377"
-  "\0\220\0\377\202\0\231\0\377\5\0\220\0\377\0M\0\377\7\7\7\377ooo\377"
-  "\300\300\300\377\202\364\364\364\377\202\363\363\364\377\203\363\363"
-  "\363\377\202\362\362\363\377\1\362\362\362\377\203\361\361\362\377\7"
-  "\361\361\361\377\360\360\361\377YYZ\377\0\0\0\377\16\16\1\377ee\0\377"
-  "\275\275\0\377\202\311\311\0\377\5\275\275\0\377ee\0\377\7\7\7\377oo"
-  "o\377\275\275\275\377\203\353\353\355\377\202\351\351\353\377\3\350\350"
-  "\352\377\351\351\353\377\350\350\353\377\204\351\351\353\377\14\351\351"
-  "\353\375\351\351\353\370\351\351\353\357\351\351\353\343\351\351\353"
-  "\324\351\351\353\301\351\351\353\252\351\351\353\220\351\351\353s\351"
-  "\351\353R\351\351\353.\351\351\353\10\205\0\0\0\0<\377\377\377y\226\277"
-  "\226\377\222\275\222\377\222\273\222\377\231\266\231\377\245\275\245"
-  "\377\223\254\223\377\241\273\241\377\237\271\237\377\235\270\235\377"
-  "\233\267\233\377\211\245\211\377\226\264\226\377\224\263\224\377d\214"
-  "d\377U\221U\377p\267p\377s\300s\377~\271~\377\211\276\211\377l\245l\377"
-  "\201\274\201\377e\243e\377y\272y\377v\271v\377r\270r\377n\267n\377j\265"
-  "j\377O\232O\377c\260c\377G\226G\377.\245.\377\32\233\32\377\20x\20\377"
-  "H\220H\370\377\377\377\322\377\377\377\326\377\377\377\331\377\377\377"
-  "\335\377\377\377\340\377\377\377\343\377\377\377\346\377\377\377\350"
-  "\377\377\377\353\377\377\377\355\377\377\377\357\377\377\377\361\377"
-  "\377\377\363\377\377\377\365\377\377\377\366\377\377\377\370\377\377"
-  "\377\371\377\377\377\372\375\375\375\373\370\370\372\375\364\364\367"
-  "\376\360\360\364\376\355\355\361\377\351\351\357\377\344\344\352\375"
-  "\202\344\344\352\377\202\345\345\353\377\2\346\346\353\377\346\346\354"
-  "\377\202\347\347\354\377\17\256\256\261\377\0\0\0\377\11\11\11\377hh"
-  "h\377\177\177\177\377\262\276\257\377\310\332\305\377\275\314\272\377"
-  "\252\264\250\377\225\232\224\377hhh\377\11\11\11\377\223\223\223\377"
-  "\340\340\342\377\356\356\361\377\202\357\357\361\377\202\360\360\362"
-  "\377\202\361\361\362\377\1\361\361\363\377\202\362\362\363\377\202\363"
-  "\363\364\377\20\364\364\364\377\267\267\270\377\0\0\0\377\1\13\1\377"
-  "\0}\0\377\0\231\0\377q\313o\377\244\342\240\377\213\327\210\377`\304"
-  "^\3771\2570\377\0}\0\377\11\11\11\377\223\223\223\377\345\345\345\377"
-  "\363\363\364\377\203\363\363\363\377\202\362\362\363\377\202\362\362"
-  "\362\377\202\361\361\362\377\1\361\361\361\377\202\360\360\361\377\16"
-  "\264\264\265\377\0\0\0\377\16\16\1\377\244\244\0\377\311\311\0\377\327"
-  "\344o\377\336\357\240\377\333\352\210\377\325\340^\377\317\3240\377\244"
-  "\244\0\377\11\11\11\377\223\223\223\377\336\336\337\377\202\352\352\354"
-  "\377\3\351\351\354\377\351\351\353\377\350\350\353\377\202\350\350\352"
-  "\377\204\351\351\353\377\14\351\351\353\375\351\351\353\370\351\351\353"
-  "\357\351\351\353\343\351\351\353\324\351\351\353\301\351\351\353\252"
-  "\351\351\353\220\351\351\353s\351\351\353R\351\351\353.\351\351\353\10"
-  "\203\0\0\0\0>\347\347\354\357\351\351\356\357\350\352\353\374\205\220"
-  "\212\377\276\311\300\377\330\343\332\377\316\320\320\377\346\346\350"
-  "\377\326\326\330\377\347\347\351\377\350\350\351\377\350\350\352\377"
-  "\351\351\353\377\332\332\333\377\352\352\353\377\353\353\354\377\327"
-  "\337\330\377\323\343\324\377\331\353\332\377\332\356\333\377\340\354"
-  "\340\377\344\357\344\377\333\347\333\377\342\356\342\377\331\346\331"
-  "\377\340\355\340\377\337\354\337\377\335\353\336\377\334\352\334\377"
-  "\332\351\333\377\321\340\322\377\327\347\330\377\316\335\317\377\307"
-  "\343\310\377\275\336\277\377\272\324\274\377\305\327\310\377\362\362"
-  "\365\374\361\361\364\374\360\360\363\375\360\360\363\374\360\360\364"
-  "\363\372\372\373\347\377\377\377\346\377\377\377\350\377\377\377\353"
-  "\377\377\377\355\377\377\377\357\377\377\377\361\377\377\377\363\377"
-  "\377\377\365\377\377\377\366\377\377\377\370\377\377\377\371\377\377"
-  "\377\372\375\375\375\373\370\370\372\375\365\365\367\376\361\361\364"
-  "\376\356\356\361\377\352\352\357\377\345\345\353\375\202\345\345\353"
-  "\377\202\346\346\353\377\203\347\347\354\377\6\350\350\355\377HHI\377"
-  "\5\5\5\377@@@\377\177\177\177\377\271\307\266\377\202\346\377\341\377"
-  "\7\330\356\324\377\302\323\277\377\254\267\252\377\226\233\225\377@@"
-  "@\377DDD\377\323\323\324\377\202\357\357\361\377\202\360\360\362\377"
-  "\2\361\361\362\377\361\361\363\377\202\362\362\363\377\202\363\363\364"
-  "\377\202\364\364\364\377\6\365\365\365\377LLL\377\5\5\5\377\0M\0\377"
-  "\0\231\0\377\202\323\177\377\202\346\377\341\377\7\307\361\303\377\226"
-  "\334\223\377d\306b\3772\2571\377\0M\0\377DDD\377\325\325\325\377\202"
-  "\363\363\363\377\202\362\362\363\377\202\362\362\362\377\203\361\361"
-  "\362\377\203\360\360\361\377\6\357\357\360\377JJJ\377\5\5\5\377ee\0\377"
-  "\311\311\0\377\331\347\177\377\202\346\377\341\377\10\342\370\303\377"
-  "\334\354\223\377\326\341b\377\317\3251\377ee\0\377DDD\377\322\322\322"
-  "\377\351\351\354\377\202\351\351\353\377\3\350\350\353\377\350\350\352"
-  "\377\347\347\352\377\205\347\347\351\377\14\347\347\351\375\347\347\351"
-  "\370\347\347\351\357\347\347\351\343\347\347\351\324\347\347\351\301"
-  "\347\347\351\252\347\347\351\220\347\347\351s\347\347\351R\347\347\351"
-  ".\347\347\351\10\203\0\0\0\0>\353\353\357\377\303\303\321\377\313\313"
-  "\327\377\205\205\212\377\253\253\265\377\270\270\303\377\323\323\336"
-  "\377\331\331\343\377\333\333\344\377\335\335\345\377\337\337\347\377"
-  "\341\341\350\377\343\343\351\377\345\345\352\377\347\347\354\377\351"
-  "\351\355\377\353\353\356\377\355\355\360\377\357\357\361\377\361\361"
-  "\362\377\363\363\363\377\364\364\365\377\365\365\365\377\364\364\364"
-  "\377\363\363\364\377\363\363\363\377\361\361\362\377\360\360\361\377"
-  "\357\357\360\377\355\355\356\377\353\353\355\377\351\351\354\377\347"
-  "\347\352\377\345\345\350\377\343\343\346\377\341\341\345\377\336\336"
-  "\343\377\334\334\341\377\331\331\337\377\327\327\334\377\326\326\335"
-  "\377\340\340\346\377\345\345\353\377\341\341\347\375\342\342\351\366"
-  "\377\377\377\353\377\377\377\355\377\377\377\357\377\377\377\361\377"
-  "\377\377\363\377\377\377\365\377\377\377\366\377\377\377\370\377\377"
-  "\377\371\377\377\377\372\375\375\375\373\371\371\372\375\365\365\367"
-  "\376\361\361\364\376\356\356\362\377\353\353\357\377\345\345\353\375"
-  "\202\346\346\353\377\1\346\346\354\377\202\347\347\354\377\202\350\350"
-  "\355\377\17\351\351\355\377\16\16\16\377\2\2\2\377xxx\377\235\244\233"
-  "\377\310\332\305\377\342\372\335\377\344\375\337\377\331\357\325\377"
-  "\310\332\305\377\265\302\262\377\241\251\237\377\204\207\203\377\14\14"
-  "\14\377\326\326\326\377\202\360\360\362\377\2\361\361\362\377\361\361"
-  "\363\377\202\362\362\363\377\2\363\363\363\377\363\363\364\377\202\364"
-  "\364\364\377\203\365\365\365\377\17\16\16\16\377\2\2\2\377\0\220\0\377"
-  "B\266A\377\244\342\240\377\335\373\330\377\342\375\335\377\311\362\305"
-  "\377\244\342\240\377y\317v\377K\272I\377\32\233\31\377\14\14\14\377\326"
-  "\326\326\377\363\363\363\377\202\362\362\363\377\1\362\362\362\377\203"
-  "\361\361\362\377\1\361\361\361\377\203\360\360\361\377\202\357\357\360"
-  "\377\23\16\16\16\377\2\2\2\377\275\275\0\377\321\331A\377\336\357\240"
-  "\377\345\375\330\377\345\376\335\377\342\370\305\377\336\357\240\377"
-  "\330\345v\377\322\333I\377\301\304\31\377\14\14\14\377\326\326\326\377"
-  "\351\351\353\377\350\350\353\377\350\350\352\377\347\347\352\377\347"
-  "\347\351\377\202\346\346\351\377\204\347\347\351\377\14\347\347\351\375"
-  "\347\347\351\370\347\347\351\357\347\347\351\343\347\347\351\324\347"
-  "\347\351\301\347\347\351\252\347\347\351\220\347\347\351s\347\347\351"
-  "R\347\347\351.\347\347\351\10\203\0\0\0\0\24\357\357\363\377\310\310"
-  "\325\377\322\322\334\377\214\214\217\377\255\255\267\377\265\265\276"
-  "\377\277\277\307\377\324\324\335\377\200\200\205\377``b\377ffh\377\210"
-  "\210\213\377\226\226\231\377\227\227\232\377\230\230\233\377\354\354"
-  "\357\377\211\211\213\377eee\377kkk\377\221\221\221\377\203\237\237\237"
-  "\377'\363\363\363\377\214\214\214\377eee\377jjj\377\215\215\216\377\231"
-  "\231\233\377\230\230\232\377\227\227\231\377\346\346\351\377\204\204"
-  "\206\377aab\377eef\377\204\204\207\377\216\216\221\377\214\214\220\377"
-  "\212\212\216\377\322\322\330\377\317\317\326\377\314\314\323\377\312"
-  "\312\322\377\326\326\335\377\302\302\320\377\377\377\377\353\377\377"
-  "\377\355\377\377\377\357\377\377\377\361\377\377\377\363\377\377\377"
-  "\365\377\377\377\366\377\377\377\370\377\377\377\371\377\377\377\372"
-  "\375\375\375\373\371\371\372\375\365\365\367\376\362\362\365\376\356"
-  "\356\362\377\353\353\357\377\346\346\354\376\203\347\347\354\377\202"
-  "\350\350\355\377\202\351\351\355\377\21\352\352\356\377\35\35\35\377"
-  "\0\0\0\377\177\177\177\377\244\255\242\377\302\323\277\377\323\350\317"
-  "\377\327\354\322\377\321\344\315\377\305\326\301\377\265\302\263\377"
-  "\244\255\242\377\221\225\220\377\0\0\0\377\345\345\345\377\361\361\362"
-  "\377\361\361\363\377\202\362\362\363\377\1\363\363\363\377\202\363\363"
-  "\364\377\2\364\364\364\377\364\364\365\377\204\365\365\365\377\20\35"
-  "\35\35\377\0\0\0\377\0\231\0\377R\275P\377\226\334\223\377\274\354\270"
-  "\377\304\360\300\377\266\352\262\377\233\336\230\377y\317v\377R\275P"
-  "\377(\253'\377\0\0\0\377\345\345\345\377\362\362\363\377\362\362\362"
-  "\377\203\361\361\362\377\1\361\361\361\377\203\360\360\361\377\203\357"
-  "\357\360\377\20\356\356\357\377\35\35\35\377\0\0\0\377\311\311\0\377"
-  "\323\334P\377\334\354\223\377\341\365\270\377\342\367\300\377\340\364"
-  "\262\377\335\355\230\377\330\345v\377\323\334P\377\316\322'\377\0\0\0"
-  "\377\345\345\345\377\350\350\352\377\202\347\347\352\377\202\346\346"
-  "\351\377\202\345\345\350\377\204\347\347\351\377\14\347\347\351\375\347"
-  "\347\351\370\347\347\351\357\347\347\351\343\347\347\351\324\347\347"
-  "\351\301\347\347\351\252\347\347\351\220\347\347\351s\347\347\351R\347"
-  "\347\351.\347\347\351\10\203\0\0\0\0>\363\363\366\377\331\331\341\377"
-  "\342\342\351\377\222\222\224\377\260\260\270\377\270\270\300\377\300"
-  "\300\310\377\310\310\317\377]]_\377\256\256\260\377\276\276\300\377u"
-  "uw\377\254\254\257\377\256\256\261\377\257\257\261\377\357\357\361\377"
-  "eee\377\263\263\263\377\302\302\303\377yyy\377\264\264\264\377\263\263"
-  "\264\377\263\263\263\377\361\361\362\377dde\377\261\261\261\377\300\300"
-  "\300\377vvw\377\253\253\255\377\252\252\254\377\250\250\253\377\342\342"
-  "\346\377``a\377\254\254\255\377\273\273\274\377qqr\377\235\235\242\377"
-  "\233\233\240\377\231\231\236\377\314\314\324\377\311\311\321\377\306"
-  "\306\317\377\303\303\314\377\277\277\311\377\224\224\236\377\377\377"
-  "\377\353\377\377\377\355\377\377\377\357\377\377\377\361\377\377\377"
-  "\363\377\377\377\365\377\377\377\366\377\377\377\370\377\377\377\371"
-  "\377\377\377\372\375\375\375\373\371\371\372\375\365\365\370\376\362"
-  "\362\365\376\357\357\363\377\354\354\360\377\347\347\354\376\202\350"
-  "\350\354\377\202\350\350\355\377\2\351\351\355\377\351\351\356\377\202"
-  "\352\352\356\377\17---\377\0\0\0\377\177\177\177\377\240\250\236\377"
-  "\267\305\264\377\304\325\301\377\310\332\305\377\305\326\302\377\274"
-  "\313\271\377\260\274\256\377\241\252\240\377\221\225\220\377\0\0\0\377"
-  "\365\365\365\377\361\361\363\377\202\362\362\363\377\202\363\363\364"
-  "\377\2\364\364\364\377\364\364\365\377\206\365\365\365\377\17---\377"
-  "\0\0\0\377\0\231\0\377I\271G\377}\320z\377\233\336\227\377\244\342\240"
-  "\377\234\336\231\377\211\326\206\377n\312k\377M\273K\377(\253'\377\0"
-  "\0\0\377\365\365\365\377\362\362\362\377\202\361\361\362\377\1\361\361"
-  "\361\377\203\360\360\361\377\203\357\357\360\377\1\356\356\360\377\202"
-  "\356\356\357\377\22---\377\0\0\0\377\311\311\0\377\322\332G\377\331\346"
-  "z\377\334\355\227\377\336\357\240\377\335\356\231\377\332\351\206\377"
-  "\327\343k\377\323\333K\377\316\322'\377\0\0\0\377\365\365\365\377\347"
-  "\347\352\377\347\347\351\377\346\346\351\377\346\346\350\377\202\345"
-  "\345\350\377\205\344\344\347\377\14\344\344\347\375\344\344\347\370\344"
-  "\344\347\357\344\344\347\343\344\344\347\324\344\344\347\301\344\344"
-  "\347\252\344\344\347\220\344\344\347s\344\344\347R\344\344\347.\344\344"
-  "\347\10\203\0\0\0\0>\367\367\371\377\352\352\356\377\363\363\366\377"
-  "\230\230\230\377\263\263\272\377\273\273\302\377\303\303\312\377\313"
-  "\313\321\377__a\377\235\235\236\377\254\254\255\377xxy\377\304\303\306"
-  "\377\237\233\235\377\307\307\310\377\363\363\364\377kkk\377\244\244\244"
-  "\377\260\260\260\377{{{\377\310\310\311\377\241\235\236\377\307\306\307"
-  "\377\356\356\357\377hhh\377\241\241\242\377\254\254\255\377vvw\377\275"
-  "\275\300\377\227\224\226\377\272\271\275\377\336\336\342\377bbc\377\233"
-  "\233\235\377\247\247\250\377oor\377\254\254\262\377\212\206\213\377\250"
-  "\247\256\377\307\307\320\377\304\304\315\377\300\300\312\377\275\275"
-  "\307\377\271\271\304\377yy\200\377\377\377\377\353\377\377\377\355\377"
-  "\377\377\357\377\377\377\361\377\377\377\363\377\377\377\365\377\377"
-  "\377\366\377\377\377\370\377\377\377\371\377\377\377\372\375\375\375"
-  "\373\371\371\372\375\366\366\370\376\363\363\365\376\357\357\363\377"
-  "\354\354\360\377\350\350\355\376\202\350\350\355\377\2\351\351\355\377"
-  "\351\351\356\377\202\352\352\356\377\21\353\353\356\377\353\353\357\377"
-  "<<<\377\4\4\4\377xxx\377\227\235\226\377\252\264\250\377\265\302\263"
-  "\377\272\310\267\377\270\306\265\377\262\276\257\377\250\262\246\377"
-  "\234\243\232\377\205\210\205\377\16\16\16\377\377\377\377\377\362\362"
-  "\363\377\202\363\363\364\377\202\364\364\364\377\207\365\365\365\377"
-  "\17\364\364\365\377<<<\377\4\4\4\377\0\220\0\3775\2614\377`\303^\377"
-  "y\317v\377\203\323\200\377\177\321|\377q\313o\377\\\302Z\377@\265\77"
-  "\377\36\235\35\377\16\16\16\377\377\377\377\377\202\361\361\362\377\203"
-  "\360\360\361\377\203\357\357\360\377\1\356\356\360\377\202\356\356\357"
-  "\377\20\355\355\357\377\355\355\356\377<<<\377\4\4\4\377\275\275\0\377"
-  "\320\3254\377\325\337^\377\330\345v\377\331\350\200\377\331\347|\377"
-  "\327\344o\377\325\336Z\377\321\330\77\377\301\304\35\377\16\16\16\377"
-  "\377\377\377\377\202\346\346\351\377\202\345\345\350\377\202\344\344"
-  "\347\377\1\343\343\346\377\204\344\344\347\377\14\344\344\347\375\344"
-  "\344\347\370\344\344\347\357\344\344\347\343\344\344\347\324\344\344"
-  "\347\301\344\344\347\252\344\344\347\220\344\344\347s\344\344\347R\344"
-  "\344\347.\344\344\347\10\203\0\0\0\0@\373\373\374\377\372\372\373\377"
-  "\375\375\375\377\226\226\227\377\266\266\274\377\276\276\304\377\306"
-  "\306\313\377\316\316\323\377\273\273\277\377\237\237\241\377\250\250"
-  "\252\377\322\322\324\377cII\377\246II\377wJJ\377\365\365\365\377\325"
-  "\325\325\377\254\254\254\377\256\256\256\377\324\324\324\377cHI\377\245"
-  "HH\377uHH\377\353\353\355\377\313\313\315\377\243\243\245\377\245\245"
-  "\247\377\307\307\312\377^DE\377\240CE\377pBD\377\331\331\337\377\273"
-  "\273\300\377\227\227\233\377\230\230\234\377\265\265\273\377X=@\377\231"
-  "<\77\377i;>\377\301\301\313\377\276\276\310\377\272\272\305\377\267\267"
-  "\302\377\263\263\277\377{{\202\377\377\377\377\353\377\377\377\355\377"
-  "\377\377\357\377\377\377\361\377\377\377\363\377\377\377\365\377\377"
-  "\377\366\377\377\377\370\377\377\377\371\377\377\377\372\375\375\375"
-  "\373\371\371\373\375\366\366\370\376\363\363\365\376\360\360\363\377"
-  "\355\355\361\377\351\351\355\376\351\351\356\377\351\351\355\377\202"
-  "\352\352\356\377\2\353\353\356\377\353\353\357\377\202\354\354\357\377"
-  "\17}}~\377\"\"\"\377@@@\377\214\217\213\377\234\243\233\377\246\260\244"
-  "\377\253\265\250\377\252\265\250\377\246\257\244\377\236\245\234\377"
-  "\224\231\223\377DED\377___\377\373\373\373\377\363\363\364\377\202\364"
-  "\364\364\377\1\364\364\365\377\206\365\365\365\377\1\364\364\365\377"
-  "\202\364\364\364\377\17\177\177\177\377\"\"\"\377\0M\0\377\34\245\33"
-  "\377A\266\77\377W\300U\377a\304_\377`\304^\377V\277T\377E\270D\377.\255"
-  "-\377\11Q\11\377___\377\373\373\373\377\361\361\361\377\203\360\360\361"
-  "\377\202\357\357\360\377\1\356\356\360\377\202\356\356\357\377\1\355"
-  "\355\357\377\202\355\355\356\377\17\354\354\356\377}}}\377\"\"\"\377"
-  "ee\0\377\315\320\33\377\321\330\77\377\324\336U\377\325\340_\377\325"
-  "\340^\377\324\335T\377\322\331D\377\317\324-\377fg\11\377___\377\367"
-  "\367\370\377\202\345\345\350\377\202\344\344\347\377\3\343\343\347\377"
-  "\343\343\346\377\342\342\346\377\204\344\344\347\377\14\344\344\347\375"
-  "\344\344\347\370\344\344\347\357\344\344\347\343\344\344\347\324\344"
-  "\344\347\301\344\344\347\252\344\344\347\220\344\344\347s\344\344\347"
-  "R\344\344\347.\344\344\347\10\203\0\0\0\0>\377\377\377\377\372\372\373"
-  "\377\362\362\365\377\220\220\223\377\271\271\276\377\301\301\305\377"
-  "\311\311\315\377\321\321\325\377\332\332\335\377\343\343\345\377\354"
-  "\354\355\377\362\362\363\377tTU\377\264JJ\377\212UU\377\364\364\364\377"
-  "\363\363\363\377\362\362\362\377\360\360\361\377\357\357\360\377rRR\377"
-  "\262GH\377\207QR\377\350\350\352\377\346\346\351\377\344\344\347\377"
-  "\342\342\345\377\337\337\343\377lLN\377\254BC\377\200JL\377\325\325\333"
-  "\377\322\322\330\377\317\317\326\377\314\314\323\377\311\311\321\377"
-  "dDH\377\245;>\377xBE\377\273\273\306\377\270\270\303\377\264\264\300"
-  "\377\260\260\275\377\242\242\256\377}}\204\377\377\377\377\353\377\377"
-  "\377\355\377\377\377\357\377\377\377\361\377\377\377\363\377\377\377"
-  "\365\377\377\377\366\377\377\377\370\377\377\377\371\377\377\377\372"
-  "\375\375\376\373\371\371\373\375\366\366\370\376\363\363\366\376\361"
-  "\361\363\377\356\356\361\377\352\352\356\376\203\352\352\356\377\202"
-  "\353\353\357\377\202\354\354\357\377\21\355\355\360\377\310\310\313\377"
-  "]]]\377\7\7\7\377hhh\377\216\221\215\377\227\235\226\377\234\243\232"
-  "\377\234\243\233\377\231\237\230\377\223\227\222\377qrp\377\17\17\17"
-  "\377\337\337\337\377\366\366\367\377\364\364\364\377\364\364\365\377"
-  "\207\365\365\365\377\1\364\364\365\377\203\364\364\364\377\16\316\316"
-  "\316\377]]]\377\7\7\7\377\0}\0\377!\250\40\3776\2614\377@\265\77\377"
-  "A\266@\377:\2639\377,\254+\377\24\206\24\377\17\17\17\377\337\337\337"
-  "\377\364\364\365\377\202\360\360\361\377\203\357\357\360\377\202\356"
-  "\356\357\377\202\355\355\357\377\1\355\355\356\377\202\354\354\356\377"
-  "\26\353\353\355\377\307\307\310\377]]]\377\7\7\7\377\244\244\0\377\315"
-  "\321\40\377\320\3264\377\321\330\77\377\321\330@\377\320\3279\377\317"
-  "\323+\377\246\251\24\377\17\17\17\377\337\337\337\377\354\354\356\377"
-  "\344\344\350\377\344\344\347\377\343\343\347\377\343\343\346\377\342"
-  "\342\346\377\342\342\345\377\341\341\345\377\204\342\342\346\377\14\342"
-  "\342\346\375\342\342\346\370\342\342\346\357\342\342\346\343\342\342"
-  "\346\324\342\342\346\301\342\342\346\252\342\342\346\220\342\342\346"
-  "s\342\342\346R\342\342\346.\342\342\346\10\203\0\0\0\0>\374\374\375\377"
-  "\353\353\360\377\340\340\347\377\210\210\214\377\274\274\300\377\304"
-  "\304\307\377\314\314\317\377\325\325\327\377\335\335\337\377\346\346"
-  "\347\377\357\357\360\377\365\365\365\377\340\337\337\377\321\311\312"
-  "\377\340\336\336\377\362\362\363\377\361\361\362\377\360\360\361\377"
-  "\356\356\357\377\354\354\356\377\327\326\330\377\307\300\302\377\324"
-  "\322\325\377\345\345\350\377\342\342\346\377\340\340\344\377\335\335"
-  "\342\377\333\333\340\377\306\305\312\377\267\260\265\377\302\300\306"
-  "\377\320\320\327\377\315\315\324\377\312\312\322\377\306\306\317\377"
-  "\303\303\314\377\257\257\270\377\242\233\244\377\252\250\263\377\265"
-  "\265\301\377\261\261\276\377\240\240\252\377\216\216\225\377\207\207"
-  "\214\377\245\245\251\374\377\377\377\353\377\377\377\355\377\377\377"
-  "\357\377\377\377\361\377\377\377\363\377\377\377\365\377\377\377\366"
-  "\377\377\377\370\377\377\377\371\377\377\377\372\375\375\376\373\372"
-  "\372\373\375\367\367\370\376\364\364\366\376\361\361\364\377\357\357"
-  "\362\377\352\352\356\376\203\353\353\357\377\202\354\354\357\377\202"
-  "\355\355\360\377\17\356\356\360\377\356\356\361\377\255\255\256\377o"
-  "oo\377\11\11\11\377@@@\377\200\202\177\377\215\220\214\377\216\221\215"
-  "\377\203\206\203\377CDC\377\17\17\17\377\317\317\317\377\372\372\372"
-  "\377\364\364\365\377\207\365\365\365\377\1\364\364\365\377\205\364\364"
-  "\364\377\16\363\363\364\377\257\257\257\377ooo\377\11\11\11\377\0M\0"
-  "\377\23\230\22\377\36\246\36\377!\250\40\377\32\233\31\377\11P\10\377"
-  "\17\17\17\377\317\317\317\377\370\370\371\377\360\360\361\377\203\357"
-  "\357\360\377\1\356\356\360\377\202\356\356\357\377\2\355\355\357\377"
-  "\355\355\356\377\202\354\354\356\377\1\354\354\355\377\202\353\353\355"
-  "\377\15\352\352\354\377\253\253\254\377ooo\377\11\11\11\377ee\0\377\300"
-  "\302\22\377\315\320\36\377\315\321\40\377\300\304\31\377fg\10\377\17"
-  "\17\17\377\317\317\317\377\364\364\365\377\202\344\344\347\377\1\343"
-  "\343\346\377\202\342\342\346\377\202\341\341\345\377\1\340\340\344\377"
-  "\204\342\342\346\377\14\342\342\346\375\342\342\346\370\342\342\346\357"
-  "\342\342\346\343\342\342\346\324\342\342\346\301\342\342\346\252\342"
-  "\342\346\220\342\342\346s\342\342\346R\342\342\346.\342\342\346\10\203"
-  "\0\0\0\0\13\370\370\372\377\210\210\214\377\201\201\207\377~~\204\377"
-  "\212\212\220\377\215\215\223\377\220\220\226\377\223\223\230\377\226"
-  "\226\233\377\232\232\236\377\235\235\241\377\202\237\237\243\377\3\240"
-  "\240\244\377\241\241\245\377\242\242\245\377\202\243\243\246\377\202"
-  "\244\244\247\377\2\245\245\247\377\245\245\250\377\202\246\246\250\377"
-  "\202\247\247\251\377\203\250\250\251\377!\247\247\251\377\246\246\250"
-  "\377\244\244\247\377\243\243\246\377\241\241\244\377\240\240\243\377"
-  "\236\236\241\377\234\234\240\377\232\232\236\377\230\230\235\377\225"
-  "\225\233\377\223\223\230\377\252\252\254\372\315\315\317\362\377\377"
-  "\377\346\377\377\377\350\377\377\377\353\377\377\377\355\377\377\377"
-  "\357\377\377\377\361\377\377\377\363\377\377\377\365\377\377\377\366"
-  "\377\377\377\370\377\377\377\371\377\377\377\372\375\375\376\373\372"
-  "\372\373\375\367\367\371\376\364\364\366\376\361\361\364\377\357\357"
-  "\362\377\353\353\357\376\203\354\354\357\377\203\355\355\360\377\202"
-  "\356\356\361\377\202\357\357\361\377\4\276\276\277\377\223\223\223\377"
-  "DDD\377\14\14\14\377\202\0\0\0\377\4\16\16\16\377___\377\337\337\337"
-  "\377\372\372\372\377\207\365\365\365\377\1\364\364\365\377\205\364\364"
-  "\364\377\202\363\363\364\377\202\363\363\363\377\4\277\277\300\377\223"
-  "\223\223\377DDD\377\14\14\14\377\202\0\0\0\377\5\16\16\16\377___\377"
-  "\337\337\337\377\370\370\371\377\357\357\361\377\202\357\357\360\377"
-  "\1\356\356\360\377\202\356\356\357\377\1\355\355\357\377\202\355\355"
-  "\356\377\2\354\354\356\377\354\354\355\377\202\353\353\355\377\203\352"
-  "\352\354\377\5\351\351\353\377\273\273\274\377\223\223\223\377DDD\377"
-  "\14\14\14\377\202\0\0\0\377\5\16\16\16\377___\377\337\337\337\377\363"
-  "\363\365\377\344\344\347\377\202\343\343\346\377\3\342\342\346\377\342"
-  "\342\345\377\341\341\345\377\202\340\340\344\377\1\337\337\343\377\204"
-  "\342\342\346\377\14\342\342\346\375\342\342\346\370\342\342\346\357\342"
-  "\342\346\343\342\342\346\324\342\342\346\301\342\342\346\252\342\342"
-  "\346\220\342\342\346s\342\342\346R\342\342\346.\342\342\346\10\206\0"
-  "\0\0\0\1\377\377\377\4\202\377\377\377\6""8\377\377\377\14\377\377\377"
-  "\22\377\377\377\24\377\377\377\31\377\377\377%\377\377\377*\377\377\377"
-  ",\377\377\377\77\377\377\377F\377\377\377K\377\377\377Z\377\377\377h"
-  "\377\377\377n\377\377\377t\377\377\377z\377\377\377\201\377\377\377\207"
-  "\377\377\377\214\377\377\377\223\377\377\377\230\377\377\377\236\377"
-  "\377\377\243\377\377\377\251\377\377\377\256\377\377\377\263\377\377"
-  "\377\271\377\377\377\275\377\377\377\302\377\377\377\306\377\377\377"
-  "\312\377\377\377\317\377\377\377\322\377\377\377\326\377\377\377\331"
-  "\377\377\377\335\377\377\377\340\377\377\377\343\377\377\377\346\377"
-  "\377\377\350\377\377\377\353\377\377\377\355\377\377\377\357\377\377"
-  "\377\361\377\377\377\363\377\377\377\365\377\377\377\366\377\377\377"
-  "\370\377\377\377\371\377\377\377\372\375\375\376\373\372\372\373\375"
-  "\367\367\371\376\365\365\366\376\362\362\365\377\360\360\363\377\354"
-  "\354\357\376\202\354\354\360\377\202\355\355\360\377\2\356\356\360\377"
-  "\356\356\361\377\202\357\357\361\377\202\360\360\362\377\11\361\361\362"
-  "\377\342\342\344\377\324\324\325\377\326\326\326\377\345\345\345\377"
-  "\365\365\365\377\377\377\377\377\374\374\374\377\367\367\370\377\207"
-  "\365\365\365\377\205\364\364\364\377\202\363\363\364\377\203\363\363"
-  "\363\377\202\362\362\363\377\10\343\343\343\377\324\324\324\377\326\326"
-  "\326\377\345\345\345\377\365\365\365\377\377\377\377\377\372\372\373"
-  "\377\364\364\365\377\203\357\357\360\377\202\356\356\357\377\202\355"
-  "\355\357\377\1\355\355\356\377\202\354\354\356\377\202\353\353\355\377"
-  "\1\353\353\354\377\202\352\352\354\377\202\351\351\353\377\21\350\350"
-  "\353\377\350\350\352\377\333\333\335\377\321\321\322\377\326\326\326"
-  "\377\345\345\345\377\365\365\365\377\377\377\377\377\367\367\370\377"
-  "\353\353\355\377\343\343\347\377\343\343\346\377\342\342\346\377\342"
-  "\342\345\377\341\341\345\377\341\341\344\377\340\340\344\377\202\337"
-  "\337\343\377\1\336\336\343\377\204\337\337\343\377\14\337\337\343\375"
-  "\337\337\343\370\337\337\343\357\337\337\343\343\337\337\343\324\337"
-  "\337\343\301\337\337\343\252\337\337\343\220\337\337\343s\337\337\343"
-  "R\337\337\343.\337\337\343\10\226\0\0\0\0+\377\377\377\10\377\377\377"
-  "\33\377\377\377\35\377\377\377\37\377\377\377\77\377\377\377C\377\377"
-  "\377E\377\377\377_\377\377\377k\377\377\377p\377\377\377\201\377\377"
-  "\377\230\377\377\377\235\377\377\377\244\377\377\377\302\377\377\377"
-  "\306\377\377\377\312\377\377\377\317\377\377\377\322\377\377\377\326"
-  "\377\377\377\331\377\377\377\335\377\377\377\340\377\377\377\343\377"
-  "\377\377\346\377\377\377\350\377\377\377\353\377\377\377\355\377\377"
-  "\377\357\377\377\377\361\377\377\377\363\377\377\377\365\377\377\377"
-  "\366\377\377\377\370\377\377\377\371\377\377\377\372\375\375\376\373"
-  "\372\372\373\375\370\370\371\376\365\365\367\376\363\363\365\377\360"
-  "\360\363\377\355\355\360\376\202\355\355\360\377\2\356\356\360\377\356"
-  "\356\361\377\202\357\357\361\377\202\360\360\362\377\202\361\361\362"
-  "\377\1\361\361\363\377\202\362\362\363\377\202\363\363\364\377\2\364"
-  "\364\364\377\364\364\365\377\207\365\365\365\377\1\364\364\365\377\205"
-  "\364\364\364\377\1\363\363\364\377\203\363\363\363\377\202\362\362\363"
-  "\377\202\362\362\362\377\202\361\361\362\377\1\361\361\361\377\203\360"
-  "\360\361\377\203\357\357\360\377\1\356\356\360\377\202\356\356\357\377"
-  "\2\355\355\357\377\355\355\356\377\202\354\354\356\377\1\354\354\355"
-  "\377\202\353\353\355\377\202\352\352\354\377\4\351\351\354\377\351\351"
-  "\353\377\350\350\353\377\350\350\352\377\202\347\347\352\377\2\347\347"
-  "\351\377\346\346\351\377\202\345\345\350\377\6\344\344\350\377\344\344"
-  "\347\377\343\343\347\377\343\343\346\377\342\342\346\377\342\342\345"
-  "\377\202\341\341\345\377\202\340\340\344\377\4\337\337\343\377\336\336"
-  "\343\377\336\336\342\377\335\335\342\377\204\337\337\343\377\14\337\337"
-  "\343\375\337\337\343\370\337\337\343\357\337\337\343\343\337\337\343"
-  "\324\337\337\343\301\337\337\343\252\337\337\343\220\337\337\343s\337"
-  "\337\343R\337\337\343.\337\337\343\10\247\0\0\0\0\33\377\377\377.\377"
-  "\377\3778\377\377\377:\377\377\377W\377\377\377q\377\377\377s\377\377"
-  "\377\201\377\377\377\247\377\377\377\251\377\377\377\255\377\377\377"
-  "\322\377\377\377\327\377\377\377\331\377\377\377\354\377\377\377\365"
-  "\377\377\377\366\377\377\377\370\377\377\377\371\377\377\377\372\375"
-  "\375\376\373\372\372\373\375\370\370\371\376\365\365\367\376\363\363"
-  "\365\377\361\361\363\377\357\357\360\376\356\356\361\377\202\357\357"
-  "\361\377\203\360\360\362\377\2\361\361\362\377\361\361\363\377\202\362"
-  "\362\363\377\202\363\363\364\377\2\364\364\364\377\364\364\365\377\207"
-  "\365\365\365\377\1\364\364\365\377\205\364\364\364\377\1\363\363\364"
-  "\377\203\363\363\363\377\202\362\362\363\377\202\362\362\362\377\203"
-  "\361\361\362\377\203\360\360\361\377\203\357\357\360\377\1\356\356\360"
-  "\377\202\356\356\357\377\2\355\355\357\377\355\355\356\377\202\354\354"
-  "\356\377\1\354\354\355\377\202\353\353\355\377\202\352\352\354\377\1"
-  "\351\351\354\377\202\351\351\353\377\4\350\350\353\377\350\350\352\377"
-  "\347\347\352\377\347\347\351\377\202\346\346\351\377\202\345\345\350"
-  "\377\202\344\344\347\377\202\343\343\346\377\1\342\342\346\377\202\341"
-  "\341\345\377\202\340\340\344\377\202\337\337\343\377\5\336\336\342\377"
-  "\335\335\342\377\335\335\341\377\334\334\341\377\334\334\340\377\204"
-  "\337\337\343\377\14\337\337\343\375\337\337\343\370\337\337\343\357\337"
-  "\337\343\343\337\337\343\324\337\337\343\301\337\337\343\252\337\337"
-  "\343\220\337\337\343s\337\337\343R\337\337\343.\337\337\343\10\267\0"
-  "\0\0\0\12\377\377\377\35\377\377\377O\377\377\377P\327\327\331m\303\303"
-  "\307\275\236\236\243\276\213\213\222\322\204\204\213\350ww\200\362ww"
-  "\177\375\202ww\177\377\202xx\200\377\203yy\200\377\202zz\201\377\1zz"
-  "\202\377\202{{\202\377\1||\202\377\202||\203\377\203}}\203\377\3}}\204"
-  "\377~~\204\377~~\205\377\203\177\177\205\377\203\200\200\206\377\202"
-  "\201\201\206\377\202\202\202\207\377\1\202\202\210\377\203\203\203\210"
-  "\377\2\203\203\211\377\204\204\211\377\203\205\205\211\377\2\205\205"
-  "\212\377\206\206\212\377\202\206\206\213\377\202\207\207\213\377\203"
-  "\210\210\214\377\202\211\211\214\377\202\211\211\215\377\1\212\212\216"
-  "\377\203\213\213\216\377\1\213\213\217\377\203\214\214\217\377\3\215"
-  "\215\217\377\215\215\220\377\216\216\220\377\202\216\216\221\377\202"
-  "\217\217\221\377\1\217\217\222\377\202\220\220\222\377\202\221\221\222"
-  "\377\202\221\221\223\377\203\222\222\224\377\2\223\223\224\377\223\223"
-  "\225\377\203\224\224\225\377\2\226\226\227\377\225\225\227\377\202\225"
-  "\225\226\377\14\225\225\226\375\224\224\225\370\224\224\225\357\224\224"
-  "\225\343\224\224\225\324\223\223\224\301\222\222\224\252\222\222\224"
-  "\220\222\222\224s\222\222\223R\221\221\223.\221\221\223\10\377\0\0\0"
-  "\0\377\0\0\0\0\377\0\0\0\0\377\0\0\0\0\377\0\0\0\0\377\0\0\0\0\377\0"
-  "\0\0\0\377\0\0\0\0\377\0\0\0\0\377\0\0\0\0\377\0\0\0\0\320\0\0\0\0",
+  0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,
+  0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,
+  0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,
+  0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,
+  0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x00,
+  0x08,0xef,0xef,0xf2,0x23,0xef,0xef,0xf3,0x61,0xef,0xef,0xf3,0x93,0xef,0xef,
+  0xf3,0xbd,0xef,0xef,0xf3,0xdc,0xf0,0xf0,0xf3,0xf1,0xf0,0xf0,0xf3,0xfd,0xf0,
+  0xf0,0xf4,0xff,0x84,0xf1,0xf1,0xf4,0xff,0x01,0xf1,0xf1,0xf5,0xff,0x84,0xf2,
+  0xf2,0xf5,0xff,0x01,0xf3,0xf3,0xf5,0xff,0x84,0xf3,0xf3,0xf6,0xff,0x01,0xf4,
+  0xf4,0xf6,0xff,0x82,0xf4,0xf4,0xf7,0xff,0x84,0xf5,0xf5,0xf7,0xff,0x01,0xf5,
+  0xf5,0xf8,0xff,0x84,0xf6,0xf6,0xf8,0xff,0x85,0xf7,0xf7,0xf9,0xff,0x01,0xf8,
+  0xf8,0xf9,0xff,0x82,0xf8,0xf8,0xfa,0xff,0x83,0xf9,0xf9,0xfa,0xff,0x82,0xf9,
+  0xf9,0xfb,0xff,0x83,0xfa,0xfa,0xfb,0xff,0x01,0xfb,0xfb,0xfb,0xff,0x84,0xfb,
+  0xfb,0xfc,0xff,0x01,0xfc,0xfc,0xfc,0xff,0x83,0xfc,0xfc,0xfd,0xff,0x83,0xfd,
+  0xfd,0xfd,0xff,0x82,0xfd,0xfd,0xfe,0xff,0x83,0xfe,0xfe,0xfe,0xff,0x8b,0xff,
+  0xff,0xff,0xff,0x82,0xfe,0xfe,0xff,0xff,0x84,0xfe,0xfe,0xfe,0xff,0x82,0xfd,
+  0xfd,0xfe,0xff,0x88,0xfd,0xfd,0xfd,0xff,0x0c,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,
+  0xfd,0xf8,0xfd,0xfd,0xfd,0xef,0xfd,0xfd,0xfd,0xe3,0xfd,0xfd,0xfd,0xd4,0xfd,
+  0xfd,0xfd,0xc1,0xfd,0xfd,0xfd,0xaa,0xfd,0xfd,0xfd,0x90,0xfd,0xfd,0xfd,0x73,
+  0xfd,0xfd,0xfd,0x52,0xfd,0xfd,0xfd,0x2e,0xfd,0xfd,0xfd,0x08,0xba,0x00,0x00,
+  0x00,0x00,0x09,0xcd,0xcd,0xdb,0x23,0xcd,0xcd,0xdc,0x61,0xd2,0xd2,0xdf,0x9c,
+  0xd7,0xd7,0xe2,0xd5,0xcf,0xcf,0xdd,0xdc,0xcf,0xcf,0xdd,0xf1,0xcf,0xcf,0xdd,
+  0xfd,0xd0,0xd0,0xdd,0xff,0xd0,0xd0,0xde,0xff,0x82,0xd1,0xd1,0xde,0xff,0x82,
+  0xd2,0xd2,0xdf,0xff,0x02,0xd3,0xd3,0xdf,0xff,0xd3,0xd3,0xe0,0xff,0x82,0xd4,
+  0xd4,0xe0,0xff,0x02,0xd5,0xd5,0xe0,0xff,0xd5,0xd5,0xe1,0xff,0x82,0xd6,0xd6,
+  0xe1,0xff,0x83,0xd7,0xd7,0xe2,0xff,0x82,0xd8,0xd8,0xe3,0xff,0x82,0xd9,0xd9,
+  0xe3,0xff,0x82,0xda,0xda,0xe4,0xff,0x02,0xdb,0xdb,0xe4,0xff,0xdb,0xdb,0xe5,
+  0xff,0x82,0xdc,0xdc,0xe5,0xff,0x82,0xdd,0xdd,0xe6,0xff,0x82,0xde,0xde,0xe6,
+  0xff,0x83,0xdf,0xdf,0xe7,0xff,0x82,0xe0,0xe0,0xe8,0xff,0x02,0xe1,0xe1,0xe8,
+  0xff,0xe1,0xe1,0xe9,0xff,0x82,0xe2,0xe2,0xe9,0xff,0x02,0xe3,0xe3,0xe9,0xff,
+  0xe3,0xe3,0xea,0xff,0x82,0xe4,0xe4,0xea,0xff,0x82,0xe5,0xe5,0xeb,0xff,0x82,
+  0xe6,0xe6,0xeb,0xff,0x83,0xe7,0xe7,0xec,0xff,0x82,0xe8,0xe8,0xed,0xff,0x02,
+  0xe9,0xe9,0xed,0xff,0xe9,0xe9,0xee,0xff,0x82,0xea,0xea,0xee,0xff,0x82,0xeb,
+  0xeb,0xef,0xff,0x82,0xec,0xec,0xef,0xff,0x82,0xed,0xed,0xf0,0xff,0x02,0xee,
+  0xee,0xf0,0xff,0xee,0xee,0xf1,0xff,0x83,0xef,0xef,0xf1,0xff,0x82,0xf0,0xf0,
+  0xf2,0xff,0x02,0xf1,0xf1,0xf2,0xff,0xf1,0xf1,0xf3,0xff,0x82,0xf2,0xf2,0xf3,
+  0xff,0x82,0xf3,0xf3,0xf4,0xff,0x82,0xf4,0xf4,0xf4,0xff,0x84,0xf5,0xf5,0xf5,
+  0xff,0x85,0xf4,0xf4,0xf4,0xff,0x0c,0xf4,0xf4,0xf4,0xfd,0xf4,0xf4,0xf4,0xf8,
+  0xf4,0xf4,0xf4,0xef,0xf4,0xf4,0xf4,0xe3,0xf4,0xf4,0xf4,0xd4,0xf4,0xf4,0xf4,
+  0xc1,0xf4,0xf4,0xf4,0xaa,0xf4,0xf4,0xf4,0x90,0xf4,0xf4,0xf4,0x73,0xf4,0xf4,
+  0xf4,0x52,0xf4,0xf4,0xf4,0x2e,0xe6,0xe6,0xe9,0x08,0xba,0x00,0x00,0x00,0x00,
+  0x07,0xef,0xef,0xf4,0x65,0xee,0xee,0xf3,0xdb,0xec,0xec,0xf2,0xfd,0xe6,0xe6,
+  0xee,0xfe,0xde,0xde,0xe8,0xfd,0xd4,0xd4,0xe0,0xf8,0xd0,0xd0,0xde,0xfd,0x83,
+  0xd1,0xd1,0xde,0xff,0x82,0xd2,0xd2,0xdf,0xff,0x82,0xd3,0xd3,0xdf,0xff,0x83,
+  0xd4,0xd4,0xe0,0xff,0x82,0xd5,0xd5,0xe1,0xff,0x82,0xd6,0xd6,0xe1,0xff,0x82,
+  0xd7,0xd7,0xe2,0xff,0x02,0xd8,0xd8,0xe2,0xff,0xd8,0xd8,0xe3,0xff,0x82,0xd9,
+  0xd9,0xe3,0xff,0x82,0xda,0xda,0xe4,0xff,0x82,0xdb,0xdb,0xe4,0xff,0x83,0xdc,
+  0xdc,0xe5,0xff,0x82,0xdd,0xdd,0xe6,0xff,0x02,0xde,0xde,0xe6,0xff,0xde,0xde,
+  0xe7,0xff,0x82,0xdf,0xdf,0xe7,0xff,0x02,0xe0,0xe0,0xe7,0xff,0xe0,0xe0,0xe8,
+  0xff,0x82,0xe1,0xe1,0xe8,0xff,0x82,0xe2,0xe2,0xe9,0xff,0x02,0xe3,0xe3,0xe9,
+  0xff,0xe3,0xe3,0xea,0xff,0x83,0xe4,0xe4,0xea,0xff,0x82,0xe5,0xe5,0xeb,0xff,
+  0x02,0xe6,0xe6,0xeb,0xff,0xe6,0xe6,0xec,0xff,0x82,0xe7,0xe7,0xec,0xff,0x82,
+  0xe8,0xe8,0xed,0xff,0x82,0xe9,0xe9,0xed,0xff,0x82,0xea,0xea,0xee,0xff,0x02,
+  0xeb,0xeb,0xee,0xff,0xeb,0xeb,0xef,0xff,0x82,0xec,0xec,0xef,0xff,0x01,0xec,
+  0xec,0xf0,0xff,0x82,0xed,0xed,0xf0,0xff,0x02,0xee,0xee,0xf0,0xff,0xee,0xee,
+  0xf1,0xff,0x82,0xef,0xef,0xf1,0xff,0x82,0xf0,0xf0,0xf2,0xff,0x02,0xf1,0xf1,
+  0xf2,0xff,0xf1,0xf1,0xf3,0xff,0x82,0xf2,0xf2,0xf3,0xff,0x02,0xf3,0xf3,0xf3,
+  0xff,0xf3,0xf3,0xf4,0xff,0x82,0xf4,0xf4,0xf4,0xff,0x85,0xf5,0xf5,0xf5,0xff,
+  0x85,0xf4,0xf4,0xf4,0xff,0x0c,0xf4,0xf4,0xf4,0xfd,0xf4,0xf4,0xf4,0xf8,0xf4,
+  0xf4,0xf4,0xef,0xf4,0xf4,0xf4,0xe3,0xf4,0xf4,0xf4,0xd4,0xf4,0xf4,0xf4,0xc1,
+  0xf4,0xf4,0xf4,0xaa,0xf4,0xf4,0xf4,0x90,0xf4,0xf4,0xf4,0x73,0xf4,0xf4,0xf4,
+  0x52,0xf4,0xf4,0xf4,0x2e,0xf4,0xf4,0xf4,0x08,0xb7,0x00,0x00,0x00,0x00,0x0a,
+  0xff,0xff,0xff,0x0e,0xff,0xff,0xff,0x88,0xff,0xff,0xff,0xe5,0xfb,0xfb,0xfc,
+  0xfb,0xf4,0xf4,0xf7,0xfd,0xed,0xed,0xf2,0xfe,0xe7,0xe7,0xee,0xfe,0xe1,0xe1,
+  0xea,0xff,0xd8,0xd8,0xe3,0xfd,0xd1,0xd1,0xde,0xfd,0x82,0xd2,0xd2,0xde,0xff,
+  0x82,0xd2,0xd2,0xdf,0xff,0x02,0xd3,0xd3,0xdf,0xff,0xd3,0xd3,0xe0,0xff,0x82,
+  0xd4,0xd4,0xe0,0xff,0x82,0xd5,0xd5,0xe1,0xff,0x82,0xd6,0xd6,0xe1,0xff,0x82,
+  0xd7,0xd7,0xe2,0xff,0x02,0xd8,0xd8,0xe2,0xff,0xd8,0xd8,0xe3,0xff,0x82,0xd9,
+  0xd9,0xe3,0xff,0x83,0xda,0xda,0xe4,0xff,0x02,0xdb,0xdb,0xe4,0xff,0xdb,0xdb,
+  0xe5,0xff,0x82,0xdc,0xdc,0xe5,0xff,0x82,0xdd,0xdd,0xe6,0xff,0x02,0xde,0xde,
+  0xe6,0xff,0xde,0xde,0xe7,0xff,0x82,0xdf,0xdf,0xe7,0xff,0x02,0xe0,0xe0,0xe7,
+  0xff,0xe0,0xe0,0xe8,0xff,0x82,0xe1,0xe1,0xe8,0xff,0x83,0xe2,0xe2,0xe9,0xff,
+  0x82,0xe3,0xe3,0xea,0xff,0x82,0xe4,0xe4,0xea,0xff,0x82,0xe5,0xe5,0xeb,0xff,
+  0x02,0xe6,0xe6,0xeb,0xff,0xe6,0xe6,0xec,0xff,0x82,0xe7,0xe7,0xec,0xff,0x82,
+  0xe8,0xe8,0xed,0xff,0x82,0xe9,0xe9,0xed,0xff,0x83,0xea,0xea,0xee,0xff,0x82,
+  0xeb,0xeb,0xef,0xff,0x82,0xec,0xec,0xef,0xff,0x86,0xed,0xed,0xf0,0xff,0x05,
+  0xee,0xee,0xf0,0xff,0xef,0xef,0xf1,0xff,0xf0,0xf0,0xf1,0xff,0xf0,0xf0,0xf2,
+  0xff,0xf1,0xf1,0xf2,0xff,0x82,0xf2,0xf2,0xf3,0xff,0x82,0xf3,0xf3,0xf4,0xff,
+  0x02,0xf4,0xf4,0xf4,0xff,0xf4,0xf4,0xf5,0xff,0x86,0xf5,0xf5,0xf5,0xff,0x85,
+  0xf4,0xf4,0xf4,0xff,0x0c,0xf4,0xf4,0xf4,0xfd,0xf4,0xf4,0xf4,0xf8,0xf4,0xf4,
+  0xf4,0xef,0xf4,0xf4,0xf4,0xe3,0xf4,0xf4,0xf4,0xd4,0xf4,0xf4,0xf4,0xc1,0xf4,
+  0xf4,0xf4,0xaa,0xf4,0xf4,0xf4,0x90,0xf4,0xf4,0xf4,0x73,0xf4,0xf4,0xf4,0x52,
+  0xf4,0xf4,0xf4,0x2e,0xf4,0xf4,0xf4,0x08,0x8a,0x00,0x00,0x00,0x00,0x19,0xff,
+  0xff,0xff,0x0c,0xc2,0xda,0xc2,0x87,0xb4,0xd1,0xb4,0x93,0xb1,0xcf,0xb1,0x93,
+  0xad,0xcd,0xad,0x93,0xaa,0xcc,0xaa,0x93,0xa8,0xca,0xa8,0x93,0xa4,0xc8,0xa4,
+  0x93,0xa1,0xc6,0xa1,0x93,0x9e,0xc4,0x9e,0x93,0x9b,0xc2,0x9b,0x93,0x98,0xc1,
+  0x98,0x93,0x95,0xbf,0x95,0x93,0x92,0xbd,0x92,0x93,0x8f,0xbb,0x8f,0x93,0x8c,
+  0xb9,0x8c,0x93,0x62,0xa0,0x62,0xb5,0x55,0x98,0x55,0xc0,0x6e,0xa7,0x6e,0xd6,
+  0x6b,0xa5,0x6b,0xd6,0x67,0xa3,0x67,0xd6,0x64,0xa1,0x64,0xd6,0x60,0x9f,0x60,
+  0xd6,0x5d,0x9d,0x5d,0xd6,0x5a,0x9b,0x5a,0xb2,0x92,0x00,0x00,0x00,0x00,0x0c,
+  0xff,0xff,0xff,0x3a,0xff,0xff,0xff,0xb4,0xff,0xff,0xff,0xf2,0xff,0xff,0xff,
+  0xf9,0xff,0xff,0xff,0xfa,0xfb,0xfb,0xfc,0xfb,0xf4,0xf4,0xf7,0xfd,0xed,0xed,
+  0xf2,0xfe,0xe7,0xe7,0xee,0xfe,0xe1,0xe1,0xea,0xff,0xd9,0xd9,0xe3,0xfd,0xd2,
+  0xd2,0xdf,0xfd,0x82,0xd2,0xd2,0xdf,0xff,0x02,0xd3,0xd3,0xdf,0xff,0xd3,0xd3,
+  0xe0,0xff,0x82,0xd4,0xd4,0xe0,0xff,0x02,0xd5,0xd5,0xe0,0xff,0xd5,0xd5,0xe1,
+  0xff,0x82,0xd6,0xd6,0xe1,0xff,0x82,0xd7,0xd7,0xe2,0xff,0x01,0xd8,0xd8,0xe2,
+  0xff,0x82,0xd8,0xd8,0xe3,0xff,0x82,0xd9,0xd9,0xe3,0xff,0x82,0xda,0xda,0xe4,
+  0xff,0x02,0xdb,0xdb,0xe4,0xff,0xdb,0xdb,0xe5,0xff,0x82,0xdc,0xdc,0xe5,0xff,
+  0x82,0xdd,0xdd,0xe6,0xff,0x82,0xde,0xde,0xe6,0xff,0x82,0xdf,0xdf,0xe7,0xff,
+  0x01,0xe0,0xe0,0xe7,0xff,0x82,0xe0,0xe0,0xe8,0xff,0x02,0xe1,0xe1,0xe8,0xff,
+  0xe1,0xe1,0xe9,0xff,0x82,0xe2,0xe2,0xe9,0xff,0x02,0xe3,0xe3,0xe9,0xff,0xe3,
+  0xe3,0xea,0xff,0x82,0xe4,0xe4,0xea,0xff,0x82,0xe5,0xe5,0xeb,0xff,0x02,0xe6,
+  0xe6,0xeb,0xff,0xe6,0xe6,0xec,0xff,0x82,0xe7,0xe7,0xec,0xff,0x01,0xe8,0xe8,
+  0xec,0xff,0x82,0xe8,0xe8,0xed,0xff,0x02,0xe9,0xe9,0xed,0xff,0xe9,0xe9,0xee,
+  0xff,0x82,0xea,0xea,0xee,0xff,0x82,0xeb,0xeb,0xef,0xff,0x82,0xec,0xec,0xef,
+  0xff,0x82,0xed,0xed,0xf0,0xff,0x87,0xee,0xee,0xf0,0xff,0x02,0xef,0xef,0xf1,
+  0xff,0xf0,0xf0,0xf2,0xff,0x82,0xf1,0xf1,0xf2,0xff,0x82,0xf3,0xf3,0xf4,0xff,
+  0x02,0xf4,0xf4,0xf4,0xff,0xf4,0xf4,0xf5,0xff,0x87,0xf5,0xf5,0xf5,0xff,0x01,
+  0xf4,0xf4,0xf5,0xff,0x85,0xf4,0xf4,0xf4,0xff,0x0c,0xf4,0xf4,0xf4,0xfd,0xf4,
+  0xf4,0xf4,0xf8,0xf4,0xf4,0xf4,0xef,0xf4,0xf4,0xf4,0xe3,0xf4,0xf4,0xf4,0xd4,
+  0xf4,0xf4,0xf4,0xc1,0xf4,0xf4,0xf4,0xaa,0xf4,0xf4,0xf4,0x90,0xf4,0xf4,0xf4,
+  0x73,0xf4,0xf4,0xf4,0x52,0xf4,0xf4,0xf4,0x2e,0xf4,0xf4,0xf4,0x08,0x8a,0x00,
+  0x00,0x00,0x00,0x19,0xff,0xff,0xff,0x3c,0xa1,0xc6,0xa1,0xfc,0x95,0xbf,0x95,
+  0xff,0x6f,0xa8,0x6f,0xff,0x6e,0xab,0x6e,0xff,0x64,0xa1,0x64,0xff,0x62,0xa5,
+  0x62,0xff,0x59,0x9a,0x59,0xff,0x59,0x9f,0x59,0xff,0x56,0x9b,0x56,0xff,0x5a,
+  0x9a,0x5a,0xff,0x6e,0xa7,0x6e,0xff,0x6a,0xa4,0x6a,0xff,0x66,0xa2,0x66,0xff,
+  0x81,0xb3,0x81,0xff,0x71,0x95,0x71,0xff,0x6f,0x94,0x6f,0xff,0x6d,0x92,0x6d,
+  0xff,0x6a,0x91,0x6a,0xff,0x68,0x8f,0x68,0xff,0x66,0x8e,0x66,0xff,0x3d,0x7f,
+  0x3d,0xff,0x40,0x8b,0x40,0xff,0x3c,0x88,0x3c,0xff,0x76,0xac,0x76,0xff,0x82,
+  0xff,0xff,0xff,0xef,0x01,0xff,0xff,0xff,0x9c,0x8c,0x00,0x00,0x00,0x00,0x0f,
+  0xff,0xff,0xff,0x0a,0xff,0xff,0xff,0x74,0xff,0xff,0xff,0xd5,0xff,0xff,0xff,
+  0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,
+  0xff,0xfa,0xfb,0xfb,0xfc,0xfb,0xf4,0xf4,0xf7,0xfd,0xee,0xee,0xf3,0xfe,0xe7,
+  0xe7,0xee,0xfe,0xe2,0xe2,0xea,0xff,0xd9,0xd9,0xe4,0xfd,0xd3,0xd3,0xdf,0xfd,
+  0x82,0xd3,0xd3,0xdf,0xff,0x03,0xd4,0xd4,0xe0,0xff,0x00,0x00,0x00,0xff,0xaa,
+  0xaa,0xb3,0xff,0x82,0xd5,0xd5,0xe1,0xff,0x06,0x64,0x64,0x69,0xff,0x39,0x39,
+  0x3c,0xff,0x0e,0x0e,0x0f,0xff,0xd7,0xd7,0xe2,0xff,0xd8,0xd8,0xe2,0xff,0xd8,
+  0xd8,0xe3,0xff,0x82,0xd9,0xd9,0xe3,0xff,0x04,0x00,0x00,0x00,0xff,0xda,0xda,
+  0xe4,0xff,0xdb,0xdb,0xe4,0xff,0xdb,0xdb,0xe5,0xff,0x82,0xdc,0xdc,0xe5,0xff,
+  0x02,0x58,0x58,0x5c,0xff,0x00,0x00,0x00,0xff,0x82,0xde,0xde,0xe6,0xff,0x01,
+  0xde,0xde,0xe7,0xff,0x82,0xdf,0xdf,0xe7,0xff,0x82,0xe0,0xe0,0xe8,0xff,0x08,
+  0xe1,0xe1,0xe8,0xff,0x00,0x00,0x00,0xff,0xb5,0xb5,0xba,0xff,0xe2,0xe2,0xe9,
+  0xff,0xe3,0xe3,0xe9,0xff,0x6a,0x6a,0x6d,0xff,0x3d,0x3d,0x3e,0xff,0x0f,0x0f,
+  0x10,0xff,0x82,0xe5,0xe5,0xeb,0xff,0x82,0xe6,0xe6,0xeb,0xff,0x03,0xe6,0xe6,
+  0xec,0xff,0x00,0x00,0x00,0xff,0xe7,0xe7,0xec,0xff,0x82,0xe8,0xe8,0xed,0xff,
+  0x06,0xe9,0xe9,0xed,0xff,0xe9,0xe9,0xee,0xff,0x6d,0x6d,0x6f,0xff,0x00,0x00,
+  0x00,0xff,0x6e,0x6e,0x6f,0xff,0xeb,0xeb,0xef,0xff,0x82,0xec,0xec,0xef,0xff,
+  0x82,0xed,0xed,0xf0,0xff,0x01,0xee,0xee,0xf0,0xff,0x88,0xee,0xee,0xf1,0xff,
+  0x04,0xef,0xef,0xf1,0xff,0xf0,0xf0,0xf1,0xff,0xf0,0xf0,0xf2,0xff,0xf1,0xf1,
+  0xf2,0xff,0x82,0xf2,0xf2,0xf3,0xff,0x82,0xf3,0xf3,0xf4,0xff,0x02,0xf4,0xf4,
+  0xf4,0xff,0xf4,0xf4,0xf5,0xff,0x83,0xf5,0xf5,0xf5,0xff,0x01,0xf4,0xf4,0xf5,
+  0xff,0x87,0xf4,0xf4,0xf4,0xff,0x0c,0xf4,0xf4,0xf4,0xfd,0xf4,0xf4,0xf4,0xf8,
+  0xf4,0xf4,0xf4,0xef,0xf4,0xf4,0xf4,0xe3,0xf4,0xf4,0xf4,0xd4,0xf4,0xf4,0xf4,
+  0xc1,0xf4,0xf4,0xf4,0xaa,0xf4,0xf4,0xf4,0x90,0xf4,0xf4,0xf4,0x73,0xf4,0xf4,
+  0xf4,0x52,0xf4,0xf4,0xf4,0x2e,0xf4,0xf4,0xf4,0x08,0x8a,0x00,0x00,0x00,0x00,
+  0x0f,0xe7,0xf0,0xe7,0x74,0x98,0xc0,0x98,0xff,0x91,0xbd,0x91,0xff,0x4c,0x93,
+  0x4c,0xff,0x4e,0x9d,0x4e,0xff,0x3f,0x8a,0x3f,0xff,0x3f,0x95,0x3f,0xff,0x33,
+  0x81,0x33,0xff,0x37,0x8d,0x37,0xff,0x35,0x89,0x35,0xff,0x41,0x89,0x41,0xff,
+  0x6d,0xa6,0x6d,0xff,0x69,0xa4,0x69,0xff,0x65,0xa1,0x65,0xff,0xa0,0xc5,0xa0,
+  0xff,0x86,0x2c,0x2f,0x2c,0xff,0x04,0x22,0x3d,0x22,0xff,0x3f,0x8a,0x3f,0xff,
+  0x3a,0x88,0x3a,0xff,0x69,0xa4,0x69,0xff,0x82,0xff,0xff,0xff,0xff,0x01,0xff,
+  0xff,0xff,0xe6,0x8a,0x00,0x00,0x00,0x00,0x11,0xff,0xff,0xff,0x2a,0xff,0xff,
+  0xff,0xa1,0xff,0xff,0xff,0xe7,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xf3,0xff,
+  0xff,0xff,0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,
+  0xff,0xff,0xff,0xfa,0xfb,0xfb,0xfc,0xfb,0xf4,0xf4,0xf7,0xfd,0xee,0xee,0xf3,
+  0xfe,0xe8,0xe8,0xef,0xfe,0xe3,0xe3,0xea,0xff,0xda,0xda,0xe4,0xfd,0xd4,0xd4,
+  0xe0,0xfd,0x83,0xd4,0xd4,0xe0,0xff,0x08,0x39,0x39,0x3c,0xff,0x66,0x66,0x66,
+  0xff,0xde,0xde,0xe7,0xff,0xd6,0xd6,0xe1,0xff,0x1d,0x1d,0x1e,0xff,0x9d,0x9d,
+  0xa1,0xff,0xf5,0xf5,0xf7,0xff,0xfc,0xfc,0xfd,0xff,0x82,0xd9,0xd9,0xe3,0xff,
+  0x82,0xda,0xda,0xe4,0xff,0x03,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xdb,
+  0xdb,0xe5,0xff,0x82,0xdc,0xdc,0xe5,0xff,0x04,0x76,0x76,0x7b,0xff,0x3b,0x3b,
+  0x3d,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x82,0xdf,0xdf,0xe7,0xff,
+  0x02,0xe0,0xe0,0xe7,0xff,0xe0,0xe0,0xe8,0xff,0x82,0xe1,0xe1,0xe8,0xff,0x0b,
+  0xe2,0xe2,0xe9,0xff,0x3c,0x3c,0x3e,0xff,0x66,0x66,0x66,0xff,0xe9,0xe9,0xee,
+  0xff,0xe3,0xe3,0xea,0xff,0x1e,0x1e,0x1f,0xff,0xa1,0xa1,0xa3,0xff,0xf8,0xf8,
+  0xfa,0xff,0xfd,0xfd,0xfe,0xff,0xe6,0xe6,0xeb,0xff,0xe6,0xe6,0xec,0xff,0x82,
+  0xe7,0xe7,0xec,0xff,0x02,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x82,0xe9,
+  0xe9,0xed,0xff,0x82,0xea,0xea,0xee,0xff,0x05,0x00,0x00,0x00,0xff,0xf6,0xf6,
+  0xf8,0xff,0x00,0x00,0x00,0xff,0xf6,0xf6,0xf8,0xff,0xec,0xec,0xf0,0xff,0x82,
+  0xed,0xed,0xf0,0xff,0x02,0xee,0xee,0xf0,0xff,0xee,0xee,0xf1,0xff,0x89,0xef,
+  0xef,0xf1,0xff,0x02,0xf0,0xf0,0xf1,0xff,0xf0,0xf0,0xf2,0xff,0x82,0xf1,0xf1,
+  0xf2,0xff,0x01,0xf2,0xf2,0xf3,0xff,0x82,0xf3,0xf3,0xf4,0xff,0x02,0xf4,0xf4,
+  0xf4,0xff,0xf4,0xf4,0xf5,0xff,0x82,0xf5,0xf5,0xf5,0xff,0x89,0xf4,0xf4,0xf4,
+  0xff,0x0c,0xf4,0xf4,0xf4,0xfd,0xf4,0xf4,0xf4,0xf8,0xf4,0xf4,0xf4,0xef,0xf4,
+  0xf4,0xf4,0xe3,0xf4,0xf4,0xf4,0xd4,0xf4,0xf4,0xf4,0xc1,0xf4,0xf4,0xf4,0xaa,
+  0xf4,0xf4,0xf4,0x90,0xf4,0xf4,0xf4,0x73,0xf4,0xf4,0xf4,0x52,0xf4,0xf4,0xf4,
+  0x2e,0xf4,0xf4,0xf4,0x08,0x8a,0x00,0x00,0x00,0x00,0x0f,0xc1,0xd9,0xc1,0xc3,
+  0x97,0xc0,0x97,0xff,0x87,0xba,0x87,0xff,0x4a,0x92,0x4a,0xff,0x4c,0x9b,0x4c,
+  0xff,0x3d,0x89,0x3d,0xff,0x3d,0x94,0x3d,0xff,0x32,0x81,0x32,0xff,0x36,0x8c,
+  0x36,0xff,0x34,0x88,0x34,0xff,0x47,0x8b,0x47,0xff,0x6c,0xa6,0x6c,0xff,0x68,
+  0xa3,0x68,0xff,0x63,0xa0,0x63,0xff,0xa0,0xc5,0xa0,0xff,0x86,0x2c,0x2f,0x2c,
+  0xff,0x04,0x20,0x37,0x20,0xff,0x3d,0x89,0x3d,0xff,0x39,0x87,0x39,0xff,0x35,
+  0x84,0x35,0xff,0x83,0xff,0xff,0xff,0xff,0x88,0x00,0x00,0x00,0x00,0x1d,0xff,
+  0xff,0xff,0x64,0xff,0xff,0xff,0xc0,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xed,
+  0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,
+  0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,
+  0xff,0xfa,0xfb,0xfb,0xfc,0xfb,0xf5,0xf5,0xf8,0xfd,0xee,0xee,0xf3,0xfe,0xe8,
+  0xe8,0xef,0xfe,0xe3,0xe3,0xeb,0xff,0xdc,0xdc,0xe5,0xfe,0xd4,0xd4,0xe0,0xfd,
+  0xd5,0xd5,0xe1,0xff,0xd5,0xd5,0xe0,0xff,0xd5,0xd5,0xe1,0xff,0x8f,0x8f,0x96,
+  0xff,0x00,0x00,0x00,0xff,0xef,0xef,0xf3,0xff,0xba,0xba,0xc4,0xff,0x00,0x00,
+  0x00,0xff,0xfa,0xfa,0xfb,0xff,0x00,0x00,0x00,0xff,0x82,0xd9,0xd9,0xe3,0xff,
+  0x06,0x91,0x91,0x98,0xff,0x0f,0x0f,0x0f,0xff,0x2c,0x2c,0x2e,0xff,0x00,0x00,
+  0x00,0xff,0xff,0xff,0xff,0xff,0xdc,0xdc,0xe5,0xff,0x82,0xdd,0xdd,0xe6,0xff,
+  0x06,0xde,0xde,0xe6,0xff,0xed,0xed,0xf2,0xff,0x00,0x00,0x00,0xff,0xff,0xff,
+  0xff,0xff,0xe0,0xe0,0xe7,0xff,0xe0,0xe0,0xe8,0xff,0x82,0xe1,0xe1,0xe8,0xff,
+  0x01,0xe1,0xe1,0xe9,0xff,0x82,0xe2,0xe2,0xe9,0xff,0x0f,0x97,0x97,0x9b,0xff,
+  0x00,0x00,0x00,0xff,0xf4,0xf4,0xf7,0xff,0xc6,0xc6,0xcb,0xff,0x00,0x00,0x00,
+  0xff,0xfc,0xfc,0xfc,0xff,0x00,0x00,0x00,0xff,0xe6,0xe6,0xec,0xff,0xe7,0xe7,
+  0xec,0xff,0x9a,0x9a,0x9d,0xff,0x0f,0x0f,0x10,0xff,0x2e,0x2e,0x2f,0xff,0x00,
+  0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xe9,0xe9,0xee,0xff,0x82,0xea,0xea,0xee,
+  0xff,0x82,0xeb,0xeb,0xef,0xff,0x06,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xff,
+  0xff,0xff,0xff,0xff,0xed,0xed,0xf0,0xff,0xee,0xee,0xf0,0xff,0xee,0xee,0xf1,
+  0xff,0x82,0xef,0xef,0xf1,0xff,0x8b,0xf0,0xf0,0xf2,0xff,0x83,0xf1,0xf1,0xf2,
+  0xff,0x82,0xf2,0xf2,0xf3,0xff,0x01,0xf4,0xf4,0xf4,0xff,0x82,0xf4,0xf4,0xf5,
+  0xff,0x8a,0xf4,0xf4,0xf4,0xff,0x0c,0xf4,0xf4,0xf4,0xfd,0xf4,0xf4,0xf4,0xf8,
+  0xf4,0xf4,0xf4,0xef,0xf4,0xf4,0xf4,0xe3,0xf4,0xf4,0xf4,0xd4,0xf4,0xf4,0xf4,
+  0xc1,0xf4,0xf4,0xf4,0xaa,0xf4,0xf4,0xf4,0x90,0xf4,0xf4,0xf4,0x73,0xf4,0xf4,
+  0xf4,0x52,0xf4,0xf4,0xf4,0x2e,0xf4,0xf4,0xf4,0x08,0x89,0x00,0x00,0x00,0x00,
+  0x10,0xff,0xff,0xff,0x0c,0xb1,0xcf,0xb1,0xed,0x96,0xbf,0x96,0xff,0x7a,0xb6,
+  0x7a,0xff,0x48,0x90,0x48,0xff,0x4a,0x9a,0x4a,0xff,0x3b,0x88,0x3b,0xff,0x3b,
+  0x93,0x3b,0xff,0x32,0x80,0x32,0xff,0x36,0x8b,0x36,0xff,0x34,0x86,0x34,0xff,
+  0x4d,0x8d,0x4d,0xff,0x6b,0xa5,0x6b,0xff,0x66,0xa2,0x66,0xff,0x62,0xa0,0x62,
+  0xff,0x9f,0xc4,0x9f,0xff,0x85,0x2c,0x2f,0x2c,0xff,0x06,0x2c,0x2e,0x2c,0xff,
+  0x1c,0x25,0x1c,0xff,0x3c,0x89,0x3c,0xff,0x38,0x86,0x38,0xff,0x34,0x83,0x34,
+  0xff,0x9c,0xb0,0x9c,0xff,0x82,0xbf,0xbf,0xbf,0xff,0x01,0xbf,0xbf,0xbf,0x70,
+  0x84,0x00,0x00,0x00,0x00,0x16,0xff,0xff,0xff,0x1d,0xff,0xff,0xff,0x8a,0xff,
+  0xff,0xff,0xd8,0xff,0xff,0xff,0xe6,0xff,0xff,0xff,0xe8,0xff,0xff,0xff,0xeb,
+  0xff,0xff,0xff,0xed,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,
+  0xf3,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,
+  0xff,0xf9,0xff,0xff,0xff,0xfa,0xfb,0xfb,0xfc,0xfb,0xf5,0xf5,0xf8,0xfd,0xef,
+  0xef,0xf3,0xfe,0xe9,0xe9,0xef,0xfe,0xe3,0xe3,0xeb,0xff,0xdc,0xdc,0xe5,0xfe,
+  0xd5,0xd5,0xe1,0xfd,0x83,0xd6,0xd6,0xe1,0xff,0x0f,0xd7,0xd7,0xe2,0xff,0x00,
+  0x00,0x00,0xff,0xdd,0xdd,0xdd,0xff,0x65,0x65,0x6a,0xff,0x4a,0x4a,0x4d,0xff,
+  0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xda,0xda,0xe4,
+  0xff,0x00,0x00,0x00,0xff,0xb9,0xb9,0xbe,0xff,0xdb,0xdb,0xdb,0xff,0x00,0x00,
+  0x00,0xff,0xff,0xff,0xff,0xff,0xdd,0xdd,0xe6,0xff,0x82,0xde,0xde,0xe6,0xff,
+  0x82,0xdf,0xdf,0xe7,0xff,0x05,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xe0,
+  0xe0,0xe8,0xff,0xe1,0xe1,0xe8,0xff,0xe1,0xe1,0xe9,0xff,0x82,0xe2,0xe2,0xe9,
+  0xff,0x11,0xe3,0xe3,0xe9,0xff,0xe3,0xe3,0xea,0xff,0xe4,0xe4,0xea,0xff,0x00,
+  0x00,0x00,0xff,0xdd,0xdd,0xdd,0xff,0x6b,0x6b,0x6e,0xff,0x4e,0x4e,0x4f,0xff,
+  0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xe7,0xe7,0xec,
+  0xff,0x00,0x00,0x00,0xff,0xc0,0xc0,0xc2,0xff,0xdc,0xdc,0xdc,0xff,0x00,0x00,
+  0x00,0xff,0xff,0xff,0xff,0xff,0xea,0xea,0xee,0xff,0x82,0xeb,0xeb,0xef,0xff,
+  0x82,0xec,0xec,0xef,0xff,0x04,0x6f,0x6f,0x70,0xff,0x5f,0x5f,0x60,0xff,0xff,
+  0xff,0xff,0xff,0xee,0xee,0xf1,0xff,0x83,0xef,0xef,0xf1,0xff,0x83,0xf0,0xf0,
+  0xf2,0xff,0x85,0xf1,0xf1,0xf2,0xff,0x82,0xf0,0xf0,0xf2,0xff,0x85,0xf1,0xf1,
+  0xf2,0xff,0x82,0xf2,0xf2,0xf3,0xff,0x02,0xf3,0xf3,0xf3,0xff,0xf3,0xf3,0xf4,
+  0xff,0x84,0xf4,0xf4,0xf4,0xff,0x02,0xf3,0xf3,0xf4,0xff,0xf3,0xf3,0xf3,0xff,
+  0x85,0xf4,0xf4,0xf4,0xff,0x0c,0xf4,0xf4,0xf4,0xfd,0xf4,0xf4,0xf4,0xf8,0xf4,
+  0xf4,0xf4,0xef,0xf4,0xf4,0xf4,0xe3,0xf4,0xf4,0xf4,0xd4,0xf4,0xf4,0xf4,0xc1,
+  0xf4,0xf4,0xf4,0xaa,0xf4,0xf4,0xf4,0x90,0xf4,0xf4,0xf4,0x73,0xf4,0xf4,0xf4,
+  0x52,0xf4,0xf4,0xf4,0x2e,0xf4,0xf4,0xf4,0x08,0x89,0x00,0x00,0x00,0x00,0x10,
+  0xff,0xff,0xff,0x3c,0xa1,0xc6,0xa1,0xfc,0x94,0xbe,0x94,0xff,0x6f,0xb3,0x6f,
+  0xff,0x46,0x8f,0x46,0xff,0x48,0x99,0x48,0xff,0x39,0x87,0x39,0xff,0x3a,0x92,
+  0x3a,0xff,0x32,0x7f,0x32,0xff,0x35,0x8a,0x35,0xff,0x34,0x85,0x34,0xff,0x4d,
+  0x8d,0x4d,0xff,0x6a,0xa4,0x6a,0xff,0x65,0xa2,0x65,0xff,0x61,0x9f,0x61,0xff,
+  0x9e,0xc4,0x9e,0xff,0x85,0x2c,0x2f,0x2c,0xff,0x06,0x2c,0x2e,0x2c,0xff,0x20,
+  0x27,0x20,0xff,0x32,0x73,0x32,0xff,0x37,0x85,0x37,0xff,0x33,0x83,0x33,0xff,
+  0xa4,0xc8,0xa4,0xff,0x82,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0xce,0x82,
+  0x00,0x00,0x00,0x00,0x18,0xff,0xff,0xff,0x4f,0xff,0xff,0xff,0xa9,0xff,0xff,
+  0xff,0xdd,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe3,0xff,0xff,0xff,0xe6,0xff,
+  0xff,0xff,0xe8,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xed,0xff,0xff,0xff,0xef,
+  0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,
+  0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xfa,0xfc,0xfc,
+  0xfc,0xfb,0xf5,0xf5,0xf8,0xfd,0xef,0xef,0xf3,0xfe,0xe9,0xe9,0xef,0xfe,0xe4,
+  0xe4,0xec,0xff,0xdd,0xdd,0xe6,0xfe,0xd6,0xd6,0xe1,0xfd,0x82,0xd6,0xd6,0xe2,
+  0xff,0x82,0xd7,0xd7,0xe2,0xff,0x0f,0x3a,0x3a,0x3c,0xff,0x77,0x77,0x77,0xff,
+  0x2c,0x2c,0x2e,0xff,0xbe,0xbe,0xc2,0xff,0xf3,0xf3,0xf6,0xff,0x00,0x00,0x00,
+  0xff,0xff,0xff,0xff,0xff,0xdb,0xdb,0xe5,0xff,0x00,0x00,0x00,0xff,0xff,0xff,
+  0xff,0xff,0xe4,0xe4,0xea,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xde,
+  0xde,0xe6,0xff,0xde,0xde,0xe7,0xff,0x82,0xdf,0xdf,0xe7,0xff,0x04,0xe0,0xe0,
+  0xe8,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xe1,0xe1,0xe8,0xff,0x82,
+  0xe2,0xe2,0xe9,0xff,0x02,0xe3,0xe3,0xe9,0xff,0xe3,0xe3,0xea,0xff,0x82,0xe4,
+  0xe4,0xea,0xff,0x0f,0xe5,0xe5,0xeb,0xff,0x3d,0x3d,0x3f,0xff,0x77,0x77,0x77,
+  0xff,0x2f,0x2f,0x30,0xff,0xc2,0xc2,0xc5,0xff,0xf7,0xf7,0xf9,0xff,0x00,0x00,
+  0x00,0xff,0xff,0xff,0xff,0xff,0xe8,0xe8,0xed,0xff,0x00,0x00,0x00,0xff,0xff,
+  0xff,0xff,0xff,0xee,0xee,0xf1,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,
+  0xeb,0xeb,0xef,0xff,0x82,0xec,0xec,0xef,0xff,0x05,0xed,0xed,0xf0,0xff,0xcd,
+  0xcd,0xd0,0xff,0x10,0x10,0x10,0xff,0xf7,0xf7,0xf8,0xff,0xf8,0xf8,0xf9,0xff,
+  0x82,0xef,0xef,0xf1,0xff,0x84,0xf0,0xf0,0xf2,0xff,0x82,0xf1,0xf1,0xf2,0xff,
+  0x85,0xf2,0xf2,0xf3,0xff,0x82,0xf1,0xf1,0xf2,0xff,0x01,0xf1,0xf1,0xf3,0xff,
+  0x85,0xf2,0xf2,0xf3,0xff,0x02,0xf3,0xf3,0xf3,0xff,0xf3,0xf3,0xf4,0xff,0x82,
+  0xf4,0xf4,0xf4,0xff,0x82,0xf3,0xf3,0xf4,0xff,0x82,0xf3,0xf3,0xf3,0xff,0x85,
+  0xf2,0xf2,0xf3,0xff,0x0c,0xf2,0xf2,0xf3,0xfd,0xf2,0xf2,0xf3,0xf8,0xf2,0xf2,
+  0xf3,0xef,0xf2,0xf2,0xf3,0xe3,0xf2,0xf2,0xf3,0xd4,0xf2,0xf2,0xf3,0xc1,0xf2,
+  0xf2,0xf3,0xaa,0xf2,0xf2,0xf3,0x90,0xf2,0xf2,0xf3,0x73,0xf2,0xf2,0xf3,0x52,
+  0xf2,0xf2,0xf3,0x2e,0xf2,0xf2,0xf3,0x08,0x89,0x00,0x00,0x00,0x00,0x10,0xe7,
+  0xf0,0xe7,0x74,0x97,0xc0,0x97,0xff,0x93,0xbe,0x93,0xff,0x5a,0xa4,0x5a,0xff,
+  0x45,0x8e,0x45,0xff,0x46,0x99,0x46,0xff,0x37,0x86,0x37,0xff,0x39,0x91,0x39,
+  0xff,0x31,0x7d,0x31,0xff,0x35,0x89,0x35,0xff,0x33,0x83,0x33,0xff,0x4c,0x8c,
+  0x4c,0xff,0x68,0xa4,0x68,0xff,0x64,0xa1,0x64,0xff,0x60,0x9e,0x60,0xff,0x9d,
+  0xc4,0x9d,0xff,0x85,0x2c,0x2f,0x2c,0xff,0x06,0x2b,0x2e,0x2b,0xff,0x23,0x29,
+  0x23,0xff,0x2e,0x6c,0x2e,0xff,0x36,0x85,0x36,0xff,0x31,0x82,0x31,0xff,0x6f,
+  0xa8,0x6f,0xff,0x82,0xff,0xff,0xff,0xff,0x1b,0xff,0xff,0xff,0xf0,0xff,0xff,
+  0xff,0x73,0xff,0xff,0xff,0xc1,0xff,0xff,0xff,0xd6,0xff,0xff,0xff,0xd9,0xff,
+  0xff,0xff,0xdd,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe3,0xff,0xff,0xff,0xe6,
+  0xff,0xff,0xff,0xe8,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xed,0xff,0xff,0xff,
+  0xef,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xf5,0xff,0xff,
+  0xff,0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xfa,0xfc,
+  0xfc,0xfd,0xfb,0xf5,0xf5,0xf8,0xfd,0xef,0xef,0xf4,0xfe,0xe9,0xe9,0xf0,0xfe,
+  0xe4,0xe4,0xec,0xff,0xde,0xde,0xe7,0xfe,0xd7,0xd7,0xe2,0xfd,0x82,0xd7,0xd7,
+  0xe2,0xff,0x0f,0xd8,0xd8,0xe2,0xff,0xd8,0xd8,0xe3,0xff,0x91,0x91,0x97,0xff,
+  0x21,0x21,0x21,0xff,0x10,0x10,0x10,0xff,0xf8,0xf8,0xfa,0xff,0xe2,0xe2,0xe9,
+  0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xdc,0xdc,0xe5,0xff,0x00,0x00,
+  0x00,0xff,0xff,0xff,0xff,0xff,0xc0,0xc0,0xc7,0xff,0x00,0x00,0x00,0xff,0xff,
+  0xff,0xff,0xff,0x82,0xdf,0xdf,0xe7,0xff,0x07,0xe0,0xe0,0xe7,0xff,0xe0,0xe0,
+  0xe8,0xff,0xe1,0xe1,0xe8,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xe2,
+  0xe2,0xe9,0xff,0xe3,0xe3,0xe9,0xff,0x82,0xe3,0xe3,0xea,0xff,0x82,0xe4,0xe4,
+  0xea,0xff,0x82,0xe5,0xe5,0xeb,0xff,0x0f,0x99,0x99,0x9d,0xff,0x21,0x21,0x21,
+  0xff,0x10,0x10,0x10,0xff,0xfa,0xfa,0xfb,0xff,0xed,0xed,0xf1,0xff,0x00,0x00,
+  0x00,0xff,0xff,0xff,0xff,0xff,0xe9,0xe9,0xed,0xff,0x00,0x00,0x00,0xff,0xff,
+  0xff,0xff,0xff,0xcc,0xcc,0xce,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,
+  0xec,0xec,0xef,0xff,0xec,0xec,0xf0,0xff,0x82,0xed,0xed,0xf0,0xff,0x04,0x30,
+  0x30,0x30,0xff,0x80,0x80,0x82,0xff,0xfe,0xfe,0xfe,0xff,0xef,0xef,0xf1,0xff,
+  0x82,0xf0,0xf0,0xf2,0xff,0x02,0xf1,0xf1,0xf2,0xff,0xf0,0xf0,0xf2,0xff,0x84,
+  0xf1,0xf1,0xf2,0xff,0x82,0xf2,0xf2,0xf2,0xff,0x84,0xf3,0xf3,0xf3,0xff,0x01,
+  0xf2,0xf2,0xf2,0xff,0x82,0xf2,0xf2,0xf3,0xff,0x01,0xf1,0xf1,0xf2,0xff,0x82,
+  0xf2,0xf2,0xf3,0xff,0x82,0xf3,0xf3,0xf3,0xff,0x82,0xf3,0xf3,0xf4,0xff,0x82,
+  0xf3,0xf3,0xf3,0xff,0x88,0xf2,0xf2,0xf3,0xff,0x0c,0xf2,0xf2,0xf3,0xfd,0xf2,
+  0xf2,0xf3,0xf8,0xf2,0xf2,0xf3,0xef,0xf2,0xf2,0xf3,0xe3,0xf2,0xf2,0xf3,0xd4,
+  0xf2,0xf2,0xf3,0xc1,0xf2,0xf2,0xf3,0xaa,0xf2,0xf2,0xf3,0x90,0xf2,0xf2,0xf3,
+  0x73,0xf2,0xf2,0xf3,0x52,0xf2,0xf2,0xf3,0x2e,0xf2,0xf2,0xf3,0x08,0x89,0x00,
+  0x00,0x00,0x00,0x10,0xc4,0xdb,0xc4,0xc8,0x96,0xbf,0x96,0xff,0x8c,0xbb,0x8c,
+  0xff,0x53,0x9f,0x53,0xff,0x43,0x8d,0x43,0xff,0x44,0x98,0x44,0xff,0x36,0x84,
+  0x36,0xff,0x38,0x90,0x38,0xff,0x30,0x7c,0x30,0xff,0x34,0x87,0x34,0xff,0x32,
+  0x82,0x32,0xff,0x52,0x8e,0x52,0xff,0x6c,0xa8,0x6c,0xff,0x77,0xb3,0x77,0xff,
+  0x72,0xb1,0x72,0xff,0xa8,0xcf,0xa8,0xff,0x84,0x2d,0x30,0x2d,0xff,0x24,0x2d,
+  0x2f,0x2d,0xff,0x2c,0x2f,0x2c,0xff,0x2a,0x2e,0x2a,0xff,0x28,0x5f,0x28,0xff,
+  0x3f,0x9d,0x3f,0xff,0x3a,0x9a,0x3a,0xff,0x2e,0x85,0x2e,0xff,0x57,0x99,0x57,
+  0xa3,0xff,0xff,0xff,0x92,0xff,0xff,0xff,0xc7,0xff,0xff,0xff,0xcf,0xff,0xff,
+  0xff,0xd2,0xff,0xff,0xff,0xd6,0xff,0xff,0xff,0xd9,0xff,0xff,0xff,0xdd,0xff,
+  0xff,0xff,0xe0,0xff,0xff,0xff,0xe3,0xff,0xff,0xff,0xe6,0xff,0xff,0xff,0xe8,
+  0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xed,0xff,0xff,0xff,0xef,0xff,0xff,0xff,
+  0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,
+  0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xfa,0xfc,0xfc,0xfd,0xfb,0xf5,
+  0xf5,0xf8,0xfd,0xf0,0xf0,0xf4,0xfe,0xea,0xea,0xf0,0xfe,0xe5,0xe5,0xec,0xff,
+  0xdf,0xdf,0xe7,0xfe,0xd8,0xd8,0xe2,0xfd,0x82,0xd8,0xd8,0xe3,0xff,0x83,0xd9,
+  0xd9,0xe3,0xff,0x0e,0x00,0x00,0x00,0xff,0x64,0x64,0x64,0xff,0xfd,0xfd,0xfd,
+  0xff,0xdb,0xdb,0xe5,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xdd,0xdd,
+  0xe6,0xff,0x67,0x67,0x6b,0xff,0x33,0x33,0x33,0xff,0x4a,0x4a,0x4d,0xff,0x00,
+  0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xe0,0xe0,0xe7,0xff,0x00,0x00,0x00,0xff,
+  0x82,0xe1,0xe1,0xe8,0xff,0x05,0xe1,0xe1,0xe9,0xff,0x00,0x00,0x00,0xff,0xff,
+  0xff,0xff,0xff,0xe3,0xe3,0xe9,0xff,0xe3,0xe3,0xea,0xff,0x82,0xe4,0xe4,0xea,
+  0xff,0x82,0xe5,0xe5,0xeb,0xff,0x17,0xe6,0xe6,0xeb,0xff,0xe6,0xe6,0xec,0xff,
+  0xe7,0xe7,0xec,0xff,0x00,0x00,0x00,0xff,0x65,0x65,0x65,0xff,0xfd,0xfd,0xfe,
+  0xff,0xe9,0xe9,0xed,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xea,0xea,
+  0xee,0xff,0x6d,0x6d,0x6f,0xff,0x33,0x33,0x33,0xff,0x4e,0x4e,0x50,0xff,0x00,
+  0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xed,0xed,0xf0,0xff,0x00,0x00,0x00,0xff,
+  0xee,0xee,0xf0,0xff,0xee,0xee,0xf1,0xff,0x00,0x00,0x00,0xff,0x11,0x11,0x11,
+  0xff,0x10,0x10,0x11,0xff,0xf0,0xf0,0xf2,0xff,0x82,0xf1,0xf1,0xf2,0xff,0x01,
+  0xf0,0xf0,0xf2,0xff,0x84,0xf1,0xf1,0xf2,0xff,0x03,0xf0,0xf0,0xf2,0xff,0xf0,
+  0xf0,0xf1,0xff,0xf1,0xf1,0xf2,0xff,0x83,0xf2,0xf2,0xf3,0xff,0x82,0xf3,0xf3,
+  0xf4,0xff,0x85,0xf2,0xf2,0xf3,0xff,0x01,0xf3,0xf3,0xf3,0xff,0x82,0xf3,0xf3,
+  0xf4,0xff,0x82,0xf3,0xf3,0xf3,0xff,0x83,0xf2,0xf2,0xf3,0xff,0x82,0xf2,0xf2,
+  0xf2,0xff,0x84,0xf2,0xf2,0xf3,0xff,0x0c,0xf2,0xf2,0xf3,0xfd,0xf2,0xf2,0xf3,
+  0xf8,0xf2,0xf2,0xf3,0xef,0xf4,0xf4,0xf4,0xe3,0xf2,0xf2,0xf3,0xd4,0xf2,0xf2,
+  0xf3,0xc1,0xf2,0xf2,0xf3,0xaa,0xf2,0xf2,0xf3,0x90,0xf2,0xf2,0xf3,0x73,0xf2,
+  0xf2,0xf3,0x52,0xf2,0xf2,0xf3,0x2e,0xf2,0xf2,0xf3,0x08,0x88,0x00,0x00,0x00,
+  0x00,0x1d,0xff,0xff,0xff,0x19,0xb1,0xcf,0xb1,0xed,0x95,0xbf,0x95,0xff,0x82,
+  0xb8,0x82,0xff,0x51,0x9e,0x51,0xff,0x41,0x8b,0x41,0xff,0x42,0x97,0x42,0xff,
+  0x34,0x83,0x34,0xff,0x38,0x8f,0x38,0xff,0x30,0x7b,0x30,0xff,0x34,0x86,0x34,
+  0xff,0x32,0x81,0x32,0xff,0x57,0x90,0x57,0xff,0x70,0xac,0x70,0xff,0x89,0xc6,
+  0x89,0xff,0x8c,0xc8,0x8c,0xff,0xa5,0xd1,0xa5,0xff,0x86,0xa5,0x87,0xff,0x80,
+  0xa0,0x81,0xff,0x79,0x9b,0x7a,0xff,0x72,0x96,0x74,0xff,0x6b,0x90,0x6d,0xff,
+  0x64,0x8b,0x66,0xff,0x5c,0x85,0x5e,0xff,0x53,0x91,0x56,0xff,0x4d,0xab,0x4e,
+  0xff,0x42,0xb3,0x42,0xff,0x33,0x94,0x33,0xff,0xf2,0xf7,0xf2,0xff,0x82,0xff,
+  0xff,0xff,0xff,0x1a,0xff,0xff,0xff,0xe8,0xff,0xff,0xff,0xd2,0xff,0xff,0xff,
+  0xd6,0xff,0xff,0xff,0xd9,0xff,0xff,0xff,0xdd,0xff,0xff,0xff,0xe0,0xff,0xff,
+  0xff,0xe3,0xff,0xff,0xff,0xe6,0xff,0xff,0xff,0xe8,0xff,0xff,0xff,0xeb,0xff,
+  0xff,0xff,0xed,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xf3,
+  0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,
+  0xf9,0xff,0xff,0xff,0xfa,0xfc,0xfc,0xfd,0xfb,0xf6,0xf6,0xf8,0xfd,0xf0,0xf0,
+  0xf4,0xfe,0xea,0xea,0xf0,0xfe,0xe5,0xe5,0xec,0xff,0xdf,0xdf,0xe8,0xfe,0xd8,
+  0xd8,0xe3,0xfd,0x83,0xd9,0xd9,0xe3,0xff,0x82,0xda,0xda,0xe4,0xff,0x06,0xdb,
+  0xdb,0xe4,0xff,0xff,0xff,0xff,0xff,0xf1,0xf1,0xf5,0xff,0xdc,0xdc,0xe5,0xff,
+  0xdd,0xdd,0xe5,0xff,0xff,0xff,0xff,0xff,0x82,0xde,0xde,0xe6,0xff,0x07,0xf0,
+  0xf0,0xf4,0xff,0xf9,0xf9,0xfa,0xff,0xf4,0xf4,0xf7,0xff,0xff,0xff,0xff,0xff,
+  0xe0,0xe0,0xe8,0xff,0xe1,0xe1,0xe8,0xff,0xff,0xff,0xff,0xff,0x82,0xe2,0xe2,
+  0xe9,0xff,0x02,0xe3,0xe3,0xe9,0xff,0xff,0xff,0xff,0xff,0x82,0xe4,0xe4,0xea,
+  0xff,0x82,0xe5,0xe5,0xeb,0xff,0x82,0xe6,0xe6,0xeb,0xff,0x83,0xe7,0xe7,0xec,
+  0xff,0x0f,0xe8,0xe8,0xed,0xff,0xff,0xff,0xff,0xff,0xf6,0xf6,0xf8,0xff,0xe9,
+  0xe9,0xee,0xff,0xea,0xea,0xee,0xff,0xff,0xff,0xff,0xff,0xeb,0xeb,0xee,0xff,
+  0xeb,0xeb,0xef,0xff,0xf6,0xf6,0xf8,0xff,0xfb,0xfb,0xfc,0xff,0xf9,0xf9,0xfa,
+  0xff,0xff,0xff,0xff,0xff,0xee,0xee,0xf0,0xff,0xee,0xee,0xf1,0xff,0xff,0xff,
+  0xff,0xff,0x82,0xef,0xef,0xf1,0xff,0x01,0xff,0xff,0xff,0xff,0x82,0xfe,0xfe,
+  0xfe,0xff,0x05,0xf1,0xf1,0xf3,0xff,0xf2,0xf2,0xf3,0xff,0xf1,0xf1,0xf2,0xff,
+  0xf0,0xf0,0xf2,0xff,0xf0,0xf0,0xf1,0xff,0x82,0xf1,0xf1,0xf2,0xff,0x84,0xf2,
+  0xf2,0xf2,0xff,0x02,0xf2,0xf2,0xf3,0xff,0xf3,0xf3,0xf3,0xff,0x86,0xf2,0xf2,
+  0xf3,0xff,0x82,0xf3,0xf3,0xf3,0xff,0x02,0xf3,0xf3,0xf4,0xff,0xf3,0xf3,0xf3,
+  0xff,0x82,0xf2,0xf2,0xf3,0xff,0x83,0xf2,0xf2,0xf2,0xff,0x86,0xf1,0xf1,0xf2,
+  0xff,0x0c,0xf1,0xf1,0xf2,0xfd,0xf1,0xf1,0xf2,0xf8,0xf1,0xf1,0xf2,0xef,0xf1,
+  0xf1,0xf2,0xe3,0xf1,0xf1,0xf2,0xd4,0xf1,0xf1,0xf2,0xc1,0xf1,0xf1,0xf2,0xaa,
+  0xf1,0xf1,0xf2,0x90,0xf1,0xf1,0xf2,0x73,0xf1,0xf1,0xf2,0x52,0xf1,0xf1,0xf2,
+  0x2e,0xf1,0xf1,0xf2,0x08,0x88,0x00,0x00,0x00,0x00,0x1d,0xff,0xff,0xff,0x46,
+  0xa1,0xc6,0xa1,0xfc,0x94,0xbe,0x94,0xff,0x78,0xb5,0x78,0xff,0x4f,0x9d,0x4f,
+  0xff,0x3f,0x8b,0x3f,0xff,0x40,0x96,0x40,0xff,0x33,0x82,0x33,0xff,0x37,0x8e,
+  0x37,0xff,0x2f,0x7a,0x2f,0xff,0x34,0x84,0x34,0xff,0x31,0x80,0x31,0xff,0x57,
+  0x90,0x57,0xff,0x6f,0xab,0x6f,0xff,0xa3,0xcf,0xa3,0xff,0xbd,0xc7,0xbd,0xff,
+  0xb2,0xb7,0xb3,0xff,0xc7,0xc7,0xc7,0xff,0xe4,0xe4,0xe4,0xff,0xf0,0xf0,0xf0,
+  0xff,0xf7,0xf7,0xf8,0xff,0xd1,0xd1,0xd4,0xff,0xb3,0xb3,0xb6,0xff,0x85,0x85,
+  0x89,0xff,0x5c,0x5c,0x61,0xff,0x54,0x58,0x5a,0xff,0x49,0x74,0x4e,0xff,0x35,
+  0x96,0x35,0xff,0x8c,0xa6,0x8c,0xff,0x82,0xbf,0xbf,0xbf,0xff,0x1a,0xc6,0xc6,
+  0xc6,0xf8,0xff,0xff,0xff,0xd2,0xff,0xff,0xff,0xd6,0xff,0xff,0xff,0xd9,0xff,
+  0xff,0xff,0xdd,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe3,0xff,0xff,0xff,0xe6,
+  0xff,0xff,0xff,0xe8,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xed,0xff,0xff,0xff,
+  0xef,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xf5,0xff,0xff,
+  0xff,0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xfa,0xfc,
+  0xfc,0xfd,0xfb,0xf6,0xf6,0xf8,0xfd,0xf0,0xf0,0xf4,0xfe,0xeb,0xeb,0xf0,0xfe,
+  0xe6,0xe6,0xed,0xff,0xe0,0xe0,0xe8,0xff,0xd9,0xd9,0xe3,0xfd,0x83,0xda,0xda,
+  0xe4,0xff,0x02,0xdb,0xdb,0xe4,0xff,0xdb,0xdb,0xe5,0xff,0x82,0xdc,0xdc,0xe5,
+  0xff,0x01,0xc0,0xc0,0xc6,0xff,0x83,0x0f,0x0f,0x0f,0xff,0x01,0xc0,0xc0,0xc8,
+  0xff,0x82,0xdf,0xdf,0xe7,0xff,0x82,0xe0,0xe0,0xe8,0xff,0x82,0xe1,0xe1,0xe8,
+  0xff,0x82,0xe2,0xe2,0xe9,0xff,0x02,0xc5,0xc5,0xca,0xff,0xe3,0xe3,0xea,0xff,
+  0x82,0xe4,0xe4,0xea,0xff,0x83,0xe5,0xe5,0xeb,0xff,0x02,0xe6,0xe6,0xeb,0xff,
+  0xe6,0xe6,0xec,0xff,0x82,0xe7,0xe7,0xec,0xff,0x82,0xe8,0xe8,0xed,0xff,0x82,
+  0xe9,0xe9,0xed,0xff,0x06,0x3e,0x3e,0x3f,0xff,0x10,0x10,0x10,0xff,0x00,0x00,
+  0x00,0xff,0x2f,0x2f,0x30,0xff,0xcd,0xcd,0xcf,0xff,0xec,0xec,0xef,0xff,0x83,
+  0xed,0xed,0xf0,0xff,0x82,0xee,0xee,0xf1,0xff,0x82,0xef,0xef,0xf1,0xff,0x04,
+  0xd0,0xd0,0xd2,0xff,0xf0,0xf0,0xf2,0xff,0xf1,0xf1,0xf2,0xff,0xf1,0xf1,0xf3,
+  0xff,0x82,0xf2,0xf2,0xf3,0xff,0x02,0xf3,0xf3,0xf3,0xff,0xf1,0xf1,0xf2,0xff,
+  0x82,0xf0,0xf0,0xf1,0xff,0x04,0x00,0x00,0x00,0xff,0xf0,0xf0,0xf1,0xff,0xf1,
+  0xf1,0xf2,0xff,0xf2,0xf2,0xf2,0xff,0x82,0xf2,0xf2,0xf3,0xff,0x02,0xf3,0xf3,
+  0xf4,0xff,0xf3,0xf3,0xf3,0xff,0x87,0xf2,0xf2,0xf3,0xff,0x01,0xf3,0xf3,0xf3,
+  0xff,0x82,0xf2,0xf2,0xf3,0xff,0x82,0xf2,0xf2,0xf2,0xff,0x01,0xd0,0xd0,0xd2,
+  0xff,0x83,0xf1,0xf1,0xf2,0xff,0x01,0xf0,0xf0,0xf1,0xff,0x84,0xf1,0xf1,0xf2,
+  0xff,0x0c,0xf1,0xf1,0xf2,0xfd,0xf1,0xf1,0xf2,0xf8,0xf1,0xf1,0xf2,0xef,0xf1,
+  0xf1,0xf2,0xe3,0xf1,0xf1,0xf2,0xd4,0xf1,0xf1,0xf2,0xc1,0xf1,0xf1,0xf2,0xaa,
+  0xf1,0xf1,0xf2,0x90,0xf1,0xf1,0xf2,0x73,0xf1,0xf1,0xf2,0x52,0xf1,0xf1,0xf2,
+  0x2e,0xf1,0xf1,0xf2,0x08,0x88,0x00,0x00,0x00,0x00,0x11,0xe9,0xf2,0xe9,0x7d,
+  0x97,0xc0,0x97,0xff,0x93,0xbd,0x93,0xff,0x5c,0x9c,0x5c,0xff,0x44,0x8d,0x44,
+  0xff,0x3e,0x89,0x3e,0xff,0x41,0x8b,0x41,0xff,0x5b,0x9a,0x5b,0xff,0x5a,0x97,
+  0x5a,0xff,0x58,0x94,0x58,0xff,0x42,0x82,0x42,0xff,0x2c,0x71,0x2c,0xff,0x58,
+  0x96,0x58,0xff,0x78,0xaf,0x78,0xff,0xb9,0xbd,0xb9,0xff,0xae,0xae,0xaf,0xff,
+  0xef,0xef,0xef,0xff,0x82,0xff,0xff,0xff,0xff,0x0a,0xf7,0xf7,0xf8,0xff,0xe8,
+  0xe8,0xea,0xff,0xd5,0xd5,0xd8,0xff,0xc0,0xc0,0xc4,0xff,0xa8,0xa8,0xae,0xff,
+  0x84,0x84,0x8b,0xff,0x5c,0x5c,0x61,0xff,0x51,0x51,0x57,0xff,0x36,0x48,0x3a,
+  0xff,0x90,0xb5,0x90,0xff,0x82,0xff,0xff,0xff,0xff,0x1e,0xff,0xff,0xff,0xfe,
+  0xff,0xff,0xff,0xd2,0xff,0xff,0xff,0xd6,0xff,0xff,0xff,0xd9,0xff,0xff,0xff,
+  0xdd,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe3,0xff,0xff,0xff,0xe6,0xff,0xff,
+  0xff,0xe8,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xed,0xff,0xff,0xff,0xef,0xff,
+  0xff,0xff,0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xf6,
+  0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xfa,0xfc,0xfc,0xfd,
+  0xfb,0xf6,0xf6,0xf8,0xfd,0xf0,0xf0,0xf5,0xfe,0xeb,0xeb,0xf1,0xfe,0xe6,0xe6,
+  0xed,0xff,0xe1,0xe1,0xe9,0xff,0xda,0xda,0xe4,0xfd,0xdb,0xdb,0xe4,0xff,0xda,
+  0xda,0xe4,0xff,0xdb,0xdb,0xe4,0xff,0xdb,0xdb,0xe5,0xff,0x82,0xdc,0xdc,0xe5,
+  0xff,0x08,0xdd,0xdd,0xe6,0xff,0x3b,0x3b,0x3d,0xff,0x69,0x69,0x6d,0xff,0xfd,
+  0xfd,0xfd,0xff,0x87,0x87,0x87,0xff,0x33,0x33,0x33,0xff,0xe4,0xe4,0xea,0xff,
+  0xe0,0xe0,0xe8,0xff,0x82,0xe1,0xe1,0xe8,0xff,0x82,0xe2,0xe2,0xe9,0xff,0x05,
+  0xe3,0xe3,0xe9,0xff,0xe3,0xe3,0xea,0xff,0x00,0x00,0x00,0xff,0xe8,0xe8,0xed,
+  0xff,0xe4,0xe4,0xea,0xff,0x82,0xe5,0xe5,0xeb,0xff,0x02,0xe6,0xe6,0xeb,0xff,
+  0xe6,0xe6,0xec,0xff,0x82,0xe7,0xe7,0xec,0xff,0x82,0xe8,0xe8,0xed,0xff,0x82,
+  0xe9,0xe9,0xed,0xff,0x0b,0xea,0xea,0xee,0xff,0x4e,0x4e,0x4f,0xff,0x2f,0x2f,
+  0x30,0xff,0xfa,0xfa,0xfb,0xff,0xfe,0xfe,0xfe,0xff,0x66,0x66,0x66,0xff,0x32,
+  0x32,0x32,0xff,0xef,0xef,0xf2,0xff,0xed,0xed,0xf0,0xff,0xee,0xee,0xf0,0xff,
+  0xee,0xee,0xf1,0xff,0x82,0xef,0xef,0xf1,0xff,0x82,0xf0,0xf0,0xf2,0xff,0x02,
+  0x00,0x00,0x00,0xff,0xf3,0xf3,0xf5,0xff,0x82,0xf2,0xf2,0xf3,0xff,0x08,0xf3,
+  0xf3,0xf3,0xff,0xf3,0xf3,0xf4,0xff,0xf2,0xf2,0xf3,0xff,0xf1,0xf1,0xf2,0xff,
+  0xef,0xef,0xf1,0xff,0xf0,0xf0,0xf2,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,
+  0xff,0x83,0xf1,0xf1,0xf2,0xff,0x82,0xf2,0xf2,0xf3,0xff,0x01,0xf2,0xf2,0xf2,
+  0xff,0x82,0xf1,0xf1,0xf2,0xff,0x82,0xf2,0xf2,0xf2,0xff,0x84,0xf2,0xf2,0xf3,
+  0xff,0x82,0xf2,0xf2,0xf2,0xff,0x82,0xf1,0xf1,0xf2,0xff,0x03,0x00,0x00,0x00,
+  0xff,0xf0,0xf0,0xf1,0xff,0xf1,0xf1,0xf1,0xff,0x82,0xf0,0xf0,0xf1,0xff,0x84,
+  0xf1,0xf1,0xf2,0xff,0x0c,0xf1,0xf1,0xf2,0xfd,0xf1,0xf1,0xf2,0xf8,0xf1,0xf1,
+  0xf2,0xef,0xf1,0xf1,0xf2,0xe3,0xf1,0xf1,0xf2,0xd4,0xf1,0xf1,0xf2,0xc1,0xf1,
+  0xf1,0xf2,0xaa,0xf1,0xf1,0xf2,0x90,0xf1,0xf1,0xf2,0x73,0xf1,0xf1,0xf2,0x52,
+  0xf1,0xf1,0xf2,0x2e,0xf1,0xf1,0xf2,0x08,0x88,0x00,0x00,0x00,0x00,0x0e,0xc3,
+  0xdb,0xc3,0xc8,0x96,0xbf,0x96,0xff,0x92,0xbd,0x92,0xff,0x4e,0x93,0x4e,0xff,
+  0x43,0x8c,0x43,0xff,0x3c,0x88,0x3c,0xff,0x59,0x9a,0x59,0xff,0x84,0xb3,0x84,
+  0xff,0x83,0xb0,0x83,0xff,0x82,0xae,0x82,0xff,0x4c,0x88,0x4c,0xff,0x2b,0x6f,
+  0x2b,0xff,0x5b,0x98,0x5b,0xff,0x7f,0xaa,0x7f,0xff,0x82,0xb2,0xb2,0xb2,0xff,
+  0x29,0xfa,0xfa,0xfa,0xff,0xff,0xff,0xff,0xff,0xf7,0xf7,0xf8,0xff,0xe8,0xe8,
+  0xea,0xff,0xd5,0xd5,0xd8,0xff,0xc0,0xc0,0xc4,0xff,0xa8,0xa8,0xae,0xff,0x8e,
+  0x8e,0x96,0xff,0x6d,0x6d,0x75,0xff,0x52,0x52,0x56,0xff,0x5c,0x5c,0x61,0xff,
+  0x51,0x51,0x57,0xff,0x0d,0x2d,0x0d,0xff,0xbb,0xd6,0xbb,0xd9,0xff,0xff,0xff,
+  0xca,0xff,0xff,0xff,0xcf,0xff,0xff,0xff,0xd2,0xff,0xff,0xff,0xd6,0xff,0xff,
+  0xff,0xd9,0xff,0xff,0xff,0xdd,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe3,0xff,
+  0xff,0xff,0xe6,0xff,0xff,0xff,0xe8,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xed,
+  0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,
+  0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,
+  0xff,0xfa,0xfc,0xfc,0xfd,0xfb,0xf6,0xf6,0xf9,0xfd,0xf1,0xf1,0xf5,0xfe,0xeb,
+  0xeb,0xf1,0xfe,0xe7,0xe7,0xee,0xff,0xe1,0xe1,0xe9,0xff,0xdb,0xdb,0xe4,0xfd,
+  0x82,0xdb,0xdb,0xe5,0xff,0x82,0xdc,0xdc,0xe5,0xff,0x82,0xdd,0xdd,0xe6,0xff,
+  0x09,0xde,0xde,0xe6,0xff,0x00,0x00,0x00,0xff,0xf6,0xf6,0xf9,0xff,0xf0,0xf0,
+  0xf4,0xff,0xe0,0xe0,0xe7,0xff,0x00,0x00,0x00,0xff,0xf9,0xf9,0xfa,0xff,0xe1,
+  0xe1,0xe8,0xff,0x00,0x00,0x00,0xff,0x82,0xe2,0xe2,0xe9,0xff,0x08,0x00,0x00,
+  0x00,0xff,0xe3,0xe3,0xea,0xff,0x6a,0x6a,0x6d,0xff,0x00,0x00,0x00,0xff,0x55,
+  0x55,0x55,0xff,0xe5,0xe5,0xeb,0xff,0xe6,0xe6,0xeb,0xff,0xe6,0xe6,0xec,0xff,
+  0x82,0xe7,0xe7,0xec,0xff,0x01,0xe8,0xe8,0xec,0xff,0x82,0xe8,0xe8,0xed,0xff,
+  0x02,0xe9,0xe9,0xed,0xff,0xe9,0xe9,0xee,0xff,0x82,0xea,0xea,0xee,0xff,0x11,
+  0x00,0x00,0x00,0xff,0xc6,0xc6,0xc8,0xff,0xfb,0xfb,0xfc,0xff,0xec,0xec,0xef,
+  0xff,0xed,0xed,0xf0,0xff,0x00,0x00,0x00,0xff,0xfc,0xfc,0xfc,0xff,0xee,0xee,
+  0xf1,0xff,0x00,0x00,0x00,0xff,0xef,0xef,0xf1,0xff,0xf0,0xf0,0xf2,0xff,0x00,
+  0x00,0x00,0xff,0xf1,0xf1,0xf2,0xff,0x70,0x70,0x71,0xff,0x00,0x00,0x00,0xff,
+  0x55,0x55,0x55,0xff,0xf2,0xf2,0xf3,0xff,0x82,0xf3,0xf3,0xf4,0xff,0x82,0xf3,
+  0xf3,0xf3,0xff,0x1b,0xf1,0xf1,0xf2,0xff,0xf0,0xf0,0xf2,0xff,0xf0,0xf0,0xf1,
+  0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0x51,0x51,
+  0x51,0xff,0x20,0x20,0x20,0xff,0x00,0x00,0x00,0xff,0x71,0x71,0x71,0xff,0xf2,
+  0xf2,0xf2,0xff,0x00,0x00,0x00,0xff,0x51,0x51,0x51,0xff,0x20,0x20,0x20,0xff,
+  0x00,0x00,0x00,0xff,0x71,0x71,0x71,0xff,0xf2,0xf2,0xf2,0xff,0x00,0x00,0x00,
+  0xff,0xef,0xef,0xf1,0xff,0xf0,0xf0,0xf2,0xff,0x00,0x00,0x00,0xff,0xf1,0xf1,
+  0xf2,0xff,0x70,0x70,0x71,0xff,0x00,0x00,0x00,0xff,0x55,0x55,0x55,0xff,0xf2,
+  0xf2,0xf3,0xff,0xf0,0xf0,0xf1,0xff,0x85,0xef,0xef,0xf0,0xff,0x0c,0xef,0xef,
+  0xf0,0xfd,0xef,0xef,0xf0,0xf8,0xef,0xef,0xf0,0xef,0xef,0xef,0xf0,0xe3,0xef,
+  0xef,0xf0,0xd4,0xef,0xef,0xf0,0xc1,0xef,0xef,0xf0,0xaa,0xef,0xef,0xf0,0x90,
+  0xef,0xef,0xf0,0x73,0xef,0xef,0xf0,0x52,0xef,0xef,0xf0,0x2e,0xef,0xef,0xf0,
+  0x08,0x87,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0x19,0xb1,0xcf,0xb1,0xed,
+  0x95,0xbf,0x95,0xff,0x84,0xb4,0x84,0xff,0x48,0x90,0x48,0xff,0x41,0x8b,0x41,
+  0xff,0x3a,0x87,0x3a,0xff,0x62,0x9f,0x62,0xff,0x84,0xb2,0x84,0xff,0x83,0xb0,
+  0x83,0xff,0x82,0xad,0x82,0xff,0x41,0x81,0x41,0xff,0x2a,0x6e,0x2a,0xff,0x66,
+  0xa2,0x66,0xff,0x74,0x93,0x74,0xff,0x82,0xb2,0xb2,0xb2,0xff,0x0d,0x30,0x30,
+  0x30,0xff,0xab,0xab,0xab,0xff,0xe8,0xe8,0xea,0xff,0xd5,0xd5,0xd8,0xff,0xc0,
+  0xc0,0xc4,0xff,0xa8,0xa8,0xae,0xff,0x8e,0x8e,0x96,0xff,0x60,0x60,0x67,0xff,
+  0x1a,0x1a,0x1c,0xff,0x1b,0x1b,0x1c,0xff,0x66,0x66,0x6b,0xff,0x5c,0x5c,0x61,
+  0xff,0x06,0x17,0x06,0xff,0x83,0xff,0xff,0xff,0xff,0x19,0xff,0xff,0xff,0xf1,
+  0xff,0xff,0xff,0xd6,0xff,0xff,0xff,0xd9,0xff,0xff,0xff,0xdd,0xff,0xff,0xff,
+  0xe0,0xff,0xff,0xff,0xe3,0xff,0xff,0xff,0xe6,0xff,0xff,0xff,0xe8,0xff,0xff,
+  0xff,0xeb,0xff,0xff,0xff,0xed,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xf1,0xff,
+  0xff,0xff,0xf3,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,0xff,0xf8,
+  0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xfa,0xfc,0xfc,0xfd,0xfb,0xf6,0xf6,0xf9,
+  0xfd,0xf1,0xf1,0xf5,0xfe,0xec,0xec,0xf1,0xfe,0xe8,0xe8,0xee,0xff,0xe2,0xe2,
+  0xea,0xff,0xdc,0xdc,0xe5,0xfd,0x82,0xdc,0xdc,0xe5,0xff,0x02,0xdd,0xdd,0xe5,
+  0xff,0xdd,0xdd,0xe6,0xff,0x82,0xde,0xde,0xe6,0xff,0x03,0xde,0xde,0xe7,0xff,
+  0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x82,0xe0,0xe0,0xe8,0xff,0x0d,0x00,
+  0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xe2,0xe2,0xe9,0xff,0x00,0x00,0x00,0xff,
+  0xff,0xff,0xff,0xff,0xe3,0xe3,0xea,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,
+  0xff,0xe5,0xe5,0xeb,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xf7,0xf7,
+  0xf8,0xff,0xe6,0xe6,0xec,0xff,0x82,0xe7,0xe7,0xec,0xff,0x82,0xe8,0xe8,0xed,
+  0xff,0x02,0xe9,0xe9,0xed,0xff,0xe9,0xe9,0xee,0xff,0x82,0xea,0xea,0xee,0xff,
+  0x13,0xeb,0xeb,0xee,0xff,0xeb,0xeb,0xef,0xff,0x00,0x00,0x00,0xff,0xff,0xff,
+  0xff,0xff,0xf1,0xf1,0xf3,0xff,0xed,0xed,0xf0,0xff,0xee,0xee,0xf0,0xff,0x00,
+  0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xef,0xef,0xf1,0xff,0x00,0x00,0x00,0xff,
+  0xff,0xff,0xff,0xff,0xf0,0xf0,0xf2,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,
+  0xff,0xf2,0xf2,0xf3,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xfb,0xfb,
+  0xfb,0xff,0x82,0xf4,0xf4,0xf4,0xff,0x1c,0xf3,0xf3,0xf4,0xff,0xf3,0xf3,0xf3,
+  0xff,0xf1,0xf1,0xf2,0xff,0xf0,0xf0,0xf1,0xff,0xf1,0xf1,0xf2,0xff,0x00,0x00,
+  0x00,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xaa,0xaa,0xaa,0xff,0xfb,
+  0xfb,0xfb,0xff,0xdb,0xdb,0xdb,0xff,0x00,0x00,0x00,0xff,0xf8,0xf8,0xf9,0xff,
+  0x00,0x00,0x00,0xff,0xaa,0xaa,0xaa,0xff,0xfb,0xfb,0xfb,0xff,0xdb,0xdb,0xdb,
+  0xff,0x00,0x00,0x00,0xff,0xf8,0xf8,0xf9,0xff,0x00,0x00,0x00,0xff,0xff,0xff,
+  0xff,0xff,0xf0,0xf0,0xf2,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xf2,
+  0xf2,0xf3,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xfb,0xfb,0xfb,0xff,
+  0x86,0xef,0xef,0xf0,0xff,0x0c,0xef,0xef,0xf0,0xfd,0xef,0xef,0xf0,0xf8,0xef,
+  0xef,0xf0,0xef,0xef,0xef,0xf0,0xe3,0xef,0xef,0xf0,0xd4,0xef,0xef,0xf0,0xc1,
+  0xef,0xef,0xf0,0xaa,0xef,0xef,0xf0,0x90,0xef,0xef,0xf0,0x73,0xef,0xef,0xf0,
+  0x52,0xef,0xef,0xf0,0x2e,0xef,0xef,0xf0,0x08,0x87,0x00,0x00,0x00,0x00,0x12,
+  0xff,0xff,0xff,0x46,0xa0,0xc5,0xa0,0xfc,0x94,0xbe,0x94,0xff,0x76,0xac,0x76,
+  0xff,0x46,0x8e,0x46,0xff,0x3f,0x8a,0x3f,0xff,0x38,0x86,0x38,0xff,0x70,0xa7,
+  0x70,0xff,0x83,0xb1,0x83,0xff,0x82,0xaf,0x82,0xff,0x81,0xac,0x81,0xff,0x41,
+  0x7f,0x41,0xff,0x2a,0x6d,0x2a,0xff,0x65,0xa1,0x65,0xff,0x4d,0x73,0x4d,0xff,
+  0xa7,0xa7,0xa7,0xff,0xb2,0xb2,0xb2,0xff,0x43,0x43,0x43,0xff,0x82,0x00,0x00,
+  0x00,0xff,0x03,0x32,0x32,0x33,0xff,0x2c,0x2c,0x2e,0xff,0x26,0x26,0x28,0xff,
+  0x83,0x00,0x00,0x00,0xff,0x05,0x3d,0x3d,0x3f,0xff,0x70,0x70,0x75,0xff,0x60,
+  0x60,0x65,0xff,0x02,0x07,0x02,0xff,0xd5,0xe5,0xd5,0xff,0x82,0xff,0xff,0xff,
+  0xff,0x19,0xff,0xff,0xff,0xfa,0xff,0xff,0xff,0xd6,0xff,0xff,0xff,0xd9,0xff,
+  0xff,0xff,0xdd,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe3,0xff,0xff,0xff,0xe6,
+  0xff,0xff,0xff,0xe8,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xed,0xff,0xff,0xff,
+  0xef,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xf5,0xff,0xff,
+  0xff,0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xfa,0xfc,
+  0xfc,0xfd,0xfb,0xf6,0xf6,0xf9,0xfd,0xf2,0xf2,0xf5,0xfe,0xed,0xed,0xf2,0xfe,
+  0xe8,0xe8,0xee,0xff,0xe3,0xe3,0xea,0xff,0xdd,0xdd,0xe5,0xfd,0x83,0xdd,0xdd,
+  0xe6,0xff,0x02,0xde,0xde,0xe6,0xff,0xde,0xde,0xe7,0xff,0x82,0xdf,0xdf,0xe7,
+  0xff,0x02,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x82,0xe1,0xe1,0xe8,0xff,
+  0x0b,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xe3,0xe3,0xe9,0xff,0x00,0x00,
+  0x00,0xff,0xff,0xff,0xff,0xff,0xe4,0xe4,0xea,0xff,0x00,0x00,0x00,0xff,0xff,
+  0xff,0xff,0xff,0xe5,0xe5,0xeb,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,
+  0x82,0xe7,0xe7,0xec,0xff,0x82,0xe8,0xe8,0xed,0xff,0x82,0xe9,0xe9,0xed,0xff,
+  0x82,0xea,0xea,0xee,0xff,0x02,0xeb,0xeb,0xee,0xff,0xeb,0xeb,0xef,0xff,0x82,
+  0xec,0xec,0xef,0xff,0x15,0x10,0x10,0x10,0xff,0xcc,0xcc,0xcc,0xff,0xed,0xed,
+  0xf0,0xff,0xee,0xee,0xf0,0xff,0xce,0xce,0xd1,0xff,0x00,0x00,0x00,0xff,0xff,
+  0xff,0xff,0xff,0xf0,0xf0,0xf2,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,
+  0xf1,0xf1,0xf3,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xf3,0xf3,0xf3,
+  0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xf4,0xf4,0xf4,0xff,0xf4,0xf4,
+  0xf5,0xff,0xf5,0xf5,0xf5,0xff,0xf4,0xf4,0xf4,0xff,0xf3,0xf3,0xf4,0xff,0x82,
+  0xf1,0xf1,0xf2,0xff,0x1a,0xf3,0xf3,0xf3,0xff,0x00,0x00,0x00,0xff,0xff,0xff,
+  0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xf6,0xf6,0xf6,0xff,0xf1,
+  0xf1,0xf2,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xff,
+  0xff,0xff,0xff,0xff,0xf6,0xf6,0xf6,0xff,0xf1,0xf1,0xf2,0xff,0x00,0x00,0x00,
+  0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xf1,0xf1,
+  0xf3,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xf3,0xf3,0xf3,0xff,0x00,
+  0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xf4,0xf4,0xf4,0xff,0xed,0xed,0xef,0xff,
+  0xee,0xee,0xef,0xff,0x84,0xef,0xef,0xf0,0xff,0x0c,0xef,0xef,0xf0,0xfd,0xef,
+  0xef,0xf0,0xf8,0xef,0xef,0xf0,0xef,0xef,0xef,0xf0,0xe3,0xef,0xef,0xf0,0xd4,
+  0xef,0xef,0xf0,0xc1,0xef,0xef,0xf0,0xaa,0xef,0xef,0xf0,0x90,0xef,0xef,0xf0,
+  0x73,0xef,0xef,0xf0,0x52,0xef,0xef,0xf0,0x2e,0xef,0xef,0xf0,0x08,0x87,0x00,
+  0x00,0x00,0x00,0x1f,0xe9,0xf2,0xe9,0x7d,0x97,0xc0,0x97,0xff,0x93,0xbd,0x93,
+  0xff,0x68,0xa3,0x68,0xff,0x44,0x8d,0x44,0xff,0x3d,0x89,0x3d,0xff,0x36,0x85,
+  0x36,0xff,0x67,0x9a,0x67,0xff,0x6a,0x97,0x6a,0xff,0x69,0x95,0x69,0xff,0x67,
+  0x92,0x67,0xff,0x31,0x74,0x31,0xff,0x2a,0x6c,0x2a,0xff,0x64,0xa1,0x64,0xff,
+  0x6a,0xa5,0x6a,0xff,0x39,0x46,0x39,0xff,0x7a,0x7a,0x7a,0xff,0xb2,0xb2,0xb2,
+  0xff,0x91,0x91,0x91,0xff,0x59,0x59,0x59,0xff,0x2c,0x2c,0x2c,0xff,0x2b,0x2b,
+  0x2b,0xff,0x29,0x29,0x2a,0xff,0x28,0x28,0x28,0xff,0x4b,0x4b,0x4c,0xff,0x72,
+  0x72,0x74,0xff,0x83,0x83,0x86,0xff,0x5b,0x5b,0x5e,0xff,0x15,0x15,0x16,0xff,
+  0x10,0x3d,0x10,0xff,0x7c,0xa3,0x7c,0xff,0x82,0xbf,0xbf,0xbf,0xff,0x19,0xbd,
+  0xbd,0xbd,0xff,0xff,0xff,0xff,0xd6,0xff,0xff,0xff,0xd9,0xff,0xff,0xff,0xdd,
+  0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe3,0xff,0xff,0xff,0xe6,0xff,0xff,0xff,
+  0xe8,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xed,0xff,0xff,0xff,0xef,0xff,0xff,
+  0xff,0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xf6,0xff,
+  0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xfa,0xfc,0xfc,0xfd,0xfb,
+  0xf7,0xf7,0xf9,0xfd,0xf2,0xf2,0xf5,0xfe,0xed,0xed,0xf2,0xfe,0xe8,0xe8,0xee,
+  0xff,0xe4,0xe4,0xeb,0xff,0xdd,0xdd,0xe6,0xfd,0x82,0xde,0xde,0xe6,0xff,0x01,
+  0xde,0xde,0xe7,0xff,0x82,0xdf,0xdf,0xe7,0xff,0x11,0xe0,0xe0,0xe7,0xff,0xe0,
+  0xe0,0xe8,0xff,0x2d,0x2d,0x2e,0xff,0x88,0x88,0x88,0xff,0xe2,0xe2,0xe9,0xff,
+  0x79,0x79,0x7c,0xff,0x2d,0x2d,0x2f,0xff,0xff,0xff,0xff,0xff,0xe3,0xe3,0xea,
+  0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xb7,0xb7,0xbc,0xff,0x00,0x00,
+  0x00,0xff,0xff,0xff,0xff,0xff,0xe6,0xe6,0xec,0xff,0x00,0x00,0x00,0xff,0xff,
+  0xff,0xff,0xff,0x82,0xe8,0xe8,0xed,0xff,0x82,0xe9,0xe9,0xed,0xff,0x83,0xea,
+  0xea,0xee,0xff,0x82,0xeb,0xeb,0xef,0xff,0x82,0xec,0xec,0xef,0xff,0x11,0xed,
+  0xed,0xf0,0xff,0x4f,0x4f,0x50,0xff,0x55,0x55,0x55,0xff,0xf1,0xf1,0xf4,0xff,
+  0xef,0xef,0xf1,0xff,0x60,0x60,0x60,0xff,0x41,0x41,0x41,0xff,0xff,0xff,0xff,
+  0xff,0xf1,0xf1,0xf2,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xc2,0xc2,
+  0xc2,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xf3,0xf3,0xf4,0xff,0x00,
+  0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x83,0xf5,0xf5,0xf5,0xff,0x82,0xf4,0xf4,
+  0xf4,0xff,0x07,0xf2,0xf2,0xf2,0xff,0xf3,0xf3,0xf3,0xff,0xf4,0xf4,0xf4,0xff,
+  0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,
+  0xff,0x82,0xf1,0xf1,0xf2,0xff,0x11,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,
+  0x00,0x00,0x00,0xff,0xaa,0xaa,0xaa,0xff,0xfb,0xfb,0xfb,0xff,0xdb,0xdb,0xdb,
+  0xff,0x00,0x00,0x00,0xff,0xf8,0xf8,0xf9,0xff,0x00,0x00,0x00,0xff,0xff,0xff,
+  0xff,0xff,0xc2,0xc2,0xc2,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xf3,
+  0xf3,0xf4,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xf5,0xf5,0xf5,0xff,
+  0x86,0xed,0xed,0xef,0xff,0x0c,0xed,0xed,0xef,0xfd,0xed,0xed,0xef,0xf8,0xed,
+  0xed,0xef,0xef,0xed,0xed,0xef,0xe3,0xed,0xed,0xef,0xd4,0xed,0xed,0xef,0xc1,
+  0xed,0xed,0xef,0xaa,0xed,0xed,0xef,0x90,0xed,0xed,0xef,0x73,0xed,0xed,0xef,
+  0x52,0xed,0xed,0xef,0x2e,0xed,0xed,0xef,0x08,0x87,0x00,0x00,0x00,0x00,0x1f,
+  0xc6,0xdc,0xc6,0xce,0x96,0xbf,0x96,0xff,0x91,0xbd,0x91,0xff,0x5a,0x9b,0x5a,
+  0xff,0x42,0x8c,0x42,0xff,0x3b,0x88,0x3b,0xff,0x35,0x84,0x35,0xff,0x84,0xb3,
+  0x84,0xff,0x83,0xb0,0x83,0xff,0x82,0xae,0x82,0xff,0x81,0xab,0x81,0xff,0x2b,
+  0x6f,0x2b,0xff,0x2d,0x6e,0x2d,0xff,0x62,0xa0,0x62,0xff,0x71,0xb1,0x71,0xff,
+  0x76,0xb7,0x76,0xff,0x3c,0x61,0x3c,0xff,0x1c,0x30,0x1c,0xff,0x1b,0x30,0x1b,
+  0xff,0x19,0x2f,0x19,0xff,0x18,0x2f,0x18,0xff,0x17,0x2e,0x17,0xff,0x15,0x2e,
+  0x15,0xff,0x14,0x2e,0x14,0xff,0x12,0x2d,0x12,0xff,0x11,0x2d,0x11,0xff,0x0f,
+  0x2c,0x0f,0xff,0x0e,0x2b,0x0e,0xff,0x1e,0x6a,0x1e,0xff,0x29,0x9d,0x29,0xff,
+  0x71,0xa8,0x71,0xff,0x83,0xff,0xff,0xff,0xff,0x18,0xff,0xff,0xff,0xe8,0xff,
+  0xff,0xff,0xd9,0xff,0xff,0xff,0xdd,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe3,
+  0xff,0xff,0xff,0xe6,0xff,0xff,0xff,0xe8,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,
+  0xed,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,
+  0xff,0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,
+  0xff,0xff,0xfa,0xfc,0xfc,0xfd,0xfb,0xf7,0xf7,0xf9,0xfd,0xf2,0xf2,0xf5,0xfe,
+  0xee,0xee,0xf2,0xfe,0xe9,0xe9,0xef,0xff,0xe5,0xe5,0xeb,0xff,0xde,0xde,0xe6,
+  0xfd,0x83,0xdf,0xdf,0xe7,0xff,0x01,0xe0,0xe0,0xe7,0xff,0x82,0xe0,0xe0,0xe8,
+  0xff,0x13,0xe1,0xe1,0xe8,0xff,0xc3,0xc3,0xca,0xff,0x21,0x21,0x21,0xff,0x10,
+  0x10,0x10,0xff,0x0f,0x0f,0x10,0xff,0xd0,0xd0,0xd3,0xff,0xfa,0xfa,0xfb,0xff,
+  0xe4,0xe4,0xea,0xff,0x4c,0x4c,0x4e,0xff,0x00,0x00,0x00,0xff,0x3d,0x3d,0x3f,
+  0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xe7,0xe7,0xec,0xff,0x00,0x00,
+  0x00,0xff,0x11,0x11,0x11,0xff,0xe8,0xe8,0xed,0xff,0xe9,0xe9,0xed,0xff,0xe9,
+  0xe9,0xee,0xff,0x82,0xea,0xea,0xee,0xff,0x82,0xeb,0xeb,0xef,0xff,0x82,0xec,
+  0xec,0xef,0xff,0x82,0xed,0xed,0xf0,0xff,0x11,0xee,0xee,0xf0,0xff,0xce,0xce,
+  0xd1,0xff,0x32,0x32,0x32,0xff,0x11,0x11,0x11,0xff,0x00,0x00,0x00,0xff,0x30,
+  0x30,0x30,0xff,0xd8,0xd8,0xd9,0xff,0xfb,0xfb,0xfc,0xff,0xf1,0xf1,0xf3,0xff,
+  0x51,0x51,0x51,0xff,0x00,0x00,0x00,0xff,0x41,0x41,0x41,0xff,0x00,0x00,0x00,
+  0xff,0xff,0xff,0xff,0xff,0xf4,0xf4,0xf5,0xff,0x21,0x21,0x21,0xff,0x00,0x00,
+  0x00,0xff,0x84,0xf5,0xf5,0xf5,0xff,0x02,0xf4,0xf4,0xf4,0xff,0xf3,0xf3,0xf4,
+  0xff,0x82,0xf3,0xf3,0xf3,0xff,0x19,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,
+  0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xf1,0xf1,0xf1,0xff,0xf0,0xf0,0xf1,
+  0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0x51,0x51,
+  0x51,0xff,0x20,0x20,0x20,0xff,0x00,0x00,0x00,0xff,0x71,0x71,0x71,0xff,0xf2,
+  0xf2,0xf2,0xff,0x51,0x51,0x51,0xff,0x00,0x00,0x00,0xff,0x41,0x41,0x41,0xff,
+  0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xf4,0xf4,0xf5,0xff,0x21,0x21,0x21,
+  0xff,0x00,0x00,0x00,0xff,0xf5,0xf5,0xf5,0xff,0xed,0xed,0xef,0xff,0xed,0xed,
+  0xee,0xff,0x84,0xed,0xed,0xef,0xff,0x0c,0xed,0xed,0xef,0xfd,0xed,0xed,0xef,
+  0xf8,0xed,0xed,0xef,0xef,0xed,0xed,0xef,0xe3,0xed,0xed,0xef,0xd4,0xed,0xed,
+  0xef,0xc1,0xed,0xed,0xef,0xaa,0xed,0xed,0xef,0x90,0xed,0xed,0xef,0x73,0xed,
+  0xed,0xef,0x52,0xed,0xed,0xef,0x2e,0xed,0xed,0xef,0x08,0x86,0x00,0x00,0x00,
+  0x00,0x20,0xff,0xff,0xff,0x25,0xb0,0xcf,0xb0,0xed,0x95,0xbe,0x95,0xff,0x90,
+  0xbc,0x90,0xff,0x47,0x8f,0x47,0xff,0x40,0x8b,0x40,0xff,0x3a,0x87,0x3a,0xff,
+  0x43,0x8c,0x43,0xff,0x83,0xb2,0x83,0xff,0x83,0xaf,0x83,0xff,0x82,0xad,0x82,
+  0xff,0x80,0xaa,0x80,0xff,0x2a,0x6e,0x2a,0xff,0x38,0x78,0x38,0xff,0x61,0x9f,
+  0x61,0xff,0x6f,0xb0,0x6f,0xff,0x7c,0xc2,0x7c,0xff,0x90,0xcd,0x90,0xff,0x8e,
+  0xbf,0x8e,0xff,0x73,0xa7,0x73,0xff,0x87,0xbe,0x87,0xff,0x6b,0xa5,0x6b,0xff,
+  0x7f,0xbc,0x7f,0xff,0x7c,0xbb,0x7c,0xff,0x78,0xba,0x78,0xff,0x74,0xb9,0x74,
+  0xff,0x71,0xb7,0x71,0xff,0x55,0x9e,0x55,0xff,0x69,0xb4,0x69,0xff,0x2f,0xa9,
+  0x2f,0xff,0x29,0xa5,0x29,0xff,0x45,0x8e,0x45,0xff,0x83,0xff,0xff,0xff,0xff,
+  0x18,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xd9,0xff,0xff,0xff,0xdd,0xff,0xff,
+  0xff,0xe0,0xff,0xff,0xff,0xe3,0xff,0xff,0xff,0xe6,0xff,0xff,0xff,0xe8,0xff,
+  0xff,0xff,0xeb,0xff,0xff,0xff,0xed,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xf1,
+  0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,0xff,
+  0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xfa,0xfc,0xfc,0xfd,0xfb,0xf7,0xf7,
+  0xf9,0xfd,0xf2,0xf2,0xf6,0xfe,0xee,0xee,0xf2,0xfe,0xea,0xea,0xef,0xff,0xe6,
+  0xe6,0xec,0xff,0xdf,0xdf,0xe7,0xfd,0x82,0xdf,0xdf,0xe7,0xff,0x82,0xe0,0xe0,
+  0xe8,0xff,0x82,0xe1,0xe1,0xe8,0xff,0x82,0xe2,0xe2,0xe9,0xff,0x02,0xe7,0xe7,
+  0xec,0xff,0xfb,0xfb,0xfc,0xff,0x82,0xfd,0xfd,0xfe,0xff,0x07,0xe8,0xe8,0xee,
+  0xff,0xe5,0xe5,0xeb,0xff,0xe6,0xe6,0xeb,0xff,0xf7,0xf7,0xf8,0xff,0xff,0xff,
+  0xff,0xff,0xf9,0xf9,0xfa,0xff,0xff,0xff,0xff,0xff,0x82,0xe8,0xe8,0xed,0xff,
+  0x02,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfe,0xff,0x82,0xea,0xea,0xee,0xff,0x02,
+  0xeb,0xeb,0xee,0xff,0xeb,0xeb,0xef,0xff,0x82,0xec,0xec,0xef,0xff,0x82,0xed,
+  0xed,0xf0,0xff,0x01,0xee,0xee,0xf0,0xff,0x82,0xee,0xee,0xf1,0xff,0x0d,0xef,
+  0xef,0xf1,0xff,0xf1,0xf1,0xf3,0xff,0xfc,0xfc,0xfc,0xff,0xfe,0xfe,0xfe,0xff,
+  0xff,0xff,0xff,0xff,0xfc,0xfc,0xfd,0xff,0xf4,0xf4,0xf5,0xff,0xf2,0xf2,0xf3,
+  0xff,0xf3,0xf3,0xf4,0xff,0xfb,0xfb,0xfb,0xff,0xff,0xff,0xff,0xff,0xfc,0xfc,
+  0xfc,0xff,0xff,0xff,0xff,0xff,0x82,0xf5,0xf5,0xf5,0xff,0x02,0xfe,0xfe,0xfe,
+  0xff,0xff,0xff,0xff,0xff,0x82,0xf5,0xf5,0xf5,0xff,0x01,0xf4,0xf4,0xf5,0xff,
+  0x83,0xf4,0xf4,0xf4,0xff,0x05,0xf3,0xf3,0xf4,0xff,0xf3,0xf3,0xf3,0xff,0xff,
+  0xff,0xff,0xff,0xf3,0xf3,0xf3,0xff,0xff,0xff,0xff,0xff,0x82,0xf0,0xf0,0xf1,
+  0xff,0x03,0xef,0xef,0xf1,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0x82,
+  0xf0,0xf0,0xf1,0xff,0x82,0xf1,0xf1,0xf1,0xff,0x06,0xf2,0xf2,0xf3,0xff,0xf3,
+  0xf3,0xf4,0xff,0xfb,0xfb,0xfb,0xff,0xff,0xff,0xff,0xff,0xfc,0xfc,0xfc,0xff,
+  0xff,0xff,0xff,0xff,0x82,0xf5,0xf5,0xf5,0xff,0x04,0xfe,0xfe,0xfe,0xff,0xff,
+  0xff,0xff,0xff,0xec,0xec,0xed,0xff,0xeb,0xeb,0xed,0xff,0x84,0xed,0xed,0xef,
+  0xff,0x0c,0xed,0xed,0xef,0xfd,0xed,0xed,0xef,0xf8,0xed,0xed,0xef,0xef,0xed,
+  0xed,0xef,0xe3,0xed,0xed,0xef,0xd4,0xed,0xed,0xef,0xc1,0xed,0xed,0xef,0xaa,
+  0xed,0xed,0xef,0x90,0xed,0xed,0xef,0x73,0xed,0xed,0xef,0x52,0xed,0xed,0xef,
+  0x2e,0xed,0xed,0xef,0x08,0x86,0x00,0x00,0x00,0x00,0x21,0xff,0xff,0xff,0x52,
+  0xa0,0xc5,0xa0,0xfc,0x93,0xbe,0x93,0xff,0x82,0xb3,0x82,0xff,0x45,0x8e,0x45,
+  0xff,0x3e,0x8a,0x3e,0xff,0x38,0x86,0x38,0xff,0x4c,0x91,0x4c,0xff,0x83,0xb1,
+  0x83,0xff,0x82,0xaf,0x82,0xff,0x81,0xac,0x81,0xff,0x6b,0x9b,0x6b,0xff,0x2a,
+  0x6d,0x2a,0xff,0x37,0x77,0x37,0xff,0x60,0x9e,0x60,0xff,0x6e,0xb0,0x6e,0xff,
+  0x7b,0xc2,0x7b,0xff,0x8f,0xcc,0x8f,0xff,0x8d,0xbf,0x8d,0xff,0x72,0xa6,0x72,
+  0xff,0x86,0xbd,0x86,0xff,0x6a,0xa4,0x6a,0xff,0x7f,0xbb,0x7f,0xff,0x7b,0xba,
+  0x7b,0xff,0x77,0xb9,0x77,0xff,0x73,0xb8,0x73,0xff,0x70,0xb7,0x70,0xff,0x54,
+  0x9d,0x54,0xff,0x68,0xb3,0x68,0xff,0x41,0xb0,0x41,0xff,0x28,0xa4,0x28,0xff,
+  0x1b,0x7e,0x1b,0xff,0xe0,0xec,0xe0,0xfe,0x82,0xff,0xff,0xff,0xfc,0x18,0xff,
+  0xff,0xff,0xf7,0xff,0xff,0xff,0xd9,0xff,0xff,0xff,0xdd,0xff,0xff,0xff,0xe0,
+  0xff,0xff,0xff,0xe3,0xff,0xff,0xff,0xe6,0xff,0xff,0xff,0xe8,0xff,0xff,0xff,
+  0xeb,0xff,0xff,0xff,0xed,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xf1,0xff,0xff,
+  0xff,0xf3,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,0xff,0xf8,0xff,
+  0xff,0xff,0xf9,0xff,0xff,0xff,0xfa,0xfc,0xfc,0xfd,0xfb,0xf7,0xf7,0xf9,0xfd,
+  0xf3,0xf3,0xf6,0xfe,0xee,0xee,0xf3,0xfe,0xea,0xea,0xef,0xff,0xe6,0xe6,0xec,
+  0xff,0xe0,0xe0,0xe7,0xfd,0x82,0xe0,0xe0,0xe8,0xff,0x82,0xe1,0xe1,0xe8,0xff,
+  0x82,0xe2,0xe2,0xe9,0xff,0x01,0xe3,0xe3,0xe9,0xff,0x82,0xe3,0xe3,0xea,0xff,
+  0x82,0xe4,0xe4,0xea,0xff,0x82,0xe5,0xe5,0xeb,0xff,0x02,0xe6,0xe6,0xeb,0xff,
+  0xe6,0xe6,0xec,0xff,0x82,0xe7,0xe7,0xec,0xff,0x82,0xe8,0xe8,0xed,0xff,0x82,
+  0xe9,0xe9,0xed,0xff,0x82,0xea,0xea,0xee,0xff,0x01,0xeb,0xeb,0xee,0xff,0x82,
+  0xeb,0xeb,0xef,0xff,0x02,0xec,0xec,0xef,0xff,0xec,0xec,0xf0,0xff,0x82,0xed,
+  0xed,0xf0,0xff,0x02,0xee,0xee,0xf0,0xff,0xee,0xee,0xf1,0xff,0x82,0xef,0xef,
+  0xf1,0xff,0x82,0xf0,0xf0,0xf2,0xff,0x02,0xf1,0xf1,0xf2,0xff,0xf1,0xf1,0xf3,
+  0xff,0x82,0xf2,0xf2,0xf3,0xff,0x02,0xf3,0xf3,0xf3,0xff,0xf3,0xf3,0xf4,0xff,
+  0x82,0xf4,0xf4,0xf4,0xff,0x01,0xf4,0xf4,0xf5,0xff,0x87,0xf5,0xf5,0xf5,0xff,
+  0x83,0xf4,0xf4,0xf4,0xff,0x82,0xf3,0xf3,0xf4,0xff,0x82,0xf3,0xf3,0xf3,0xff,
+  0x83,0xf2,0xf2,0xf3,0xff,0x06,0xf2,0xf2,0xf2,0xff,0xf1,0xf1,0xf2,0xff,0xf1,
+  0xf1,0xf1,0xff,0xf1,0xf1,0xf2,0xff,0x00,0x00,0x00,0xff,0xf0,0xf0,0xf1,0xff,
+  0x83,0xf1,0xf1,0xf1,0xff,0x06,0xf0,0xf0,0xf1,0xff,0xf1,0xf1,0xf2,0xff,0xf0,
+  0xf0,0xf1,0xff,0xed,0xed,0xee,0xff,0xec,0xec,0xed,0xff,0xea,0xea,0xec,0xff,
+  0x82,0xe9,0xe9,0xeb,0xff,0x88,0xeb,0xeb,0xed,0xff,0x0c,0xeb,0xeb,0xed,0xfd,
+  0xeb,0xeb,0xed,0xf8,0xeb,0xeb,0xed,0xef,0xeb,0xeb,0xed,0xe3,0xeb,0xeb,0xed,
+  0xd4,0xeb,0xeb,0xed,0xc1,0xeb,0xeb,0xed,0xaa,0xeb,0xeb,0xed,0x90,0xeb,0xeb,
+  0xed,0x73,0xeb,0xeb,0xed,0x52,0xeb,0xeb,0xed,0x2e,0xeb,0xeb,0xed,0x08,0x86,
+  0x00,0x00,0x00,0x00,0x3b,0xcc,0xe0,0xcc,0x87,0x97,0xc0,0x97,0xff,0x92,0xbd,
+  0x92,0xff,0x70,0xa8,0x70,0xff,0x43,0x8d,0x43,0xff,0x3c,0x89,0x3c,0xff,0x36,
+  0x85,0x36,0xff,0x47,0x8d,0x47,0xff,0x5a,0x96,0x5a,0xff,0x58,0x93,0x58,0xff,
+  0x57,0x90,0x57,0xff,0x4b,0x85,0x4b,0xff,0x29,0x6c,0x29,0xff,0x36,0x76,0x36,
+  0xff,0x5f,0x9e,0x5f,0xff,0x6d,0xaf,0x6d,0xff,0x79,0xc2,0x79,0xff,0x8d,0xcc,
+  0x8d,0xff,0x8c,0xbf,0x8c,0xff,0x71,0xa6,0x71,0xff,0x85,0xbd,0x85,0xff,0x69,
+  0xa4,0x69,0xff,0x7d,0xbb,0x7d,0xff,0x7a,0xba,0x7a,0xff,0x76,0xb9,0x76,0xff,
+  0x72,0xb8,0x72,0xff,0x6f,0xb7,0x6f,0xff,0x53,0x9d,0x53,0xff,0x67,0xb2,0x67,
+  0xff,0x3b,0x9f,0x3b,0xff,0x26,0xa3,0x26,0xff,0x1b,0x86,0x1b,0xff,0x37,0x86,
+  0x37,0xfc,0xff,0xff,0xff,0xcf,0xff,0xff,0xff,0xd2,0xff,0xff,0xff,0xd6,0xff,
+  0xff,0xff,0xd9,0xff,0xff,0xff,0xdd,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe3,
+  0xff,0xff,0xff,0xe6,0xff,0xff,0xff,0xe8,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,
+  0xed,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,
+  0xff,0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,
+  0xff,0xff,0xfa,0xfc,0xfc,0xfd,0xfb,0xf7,0xf7,0xf9,0xfd,0xf3,0xf3,0xf6,0xfe,
+  0xef,0xef,0xf3,0xfe,0xeb,0xeb,0xef,0xff,0xe7,0xe7,0xed,0xff,0xe1,0xe1,0xe8,
+  0xfd,0x82,0xe1,0xe1,0xe8,0xff,0x01,0xe1,0xe1,0xe9,0xff,0x82,0xe2,0xe2,0xe9,
+  0xff,0x02,0xe3,0xe3,0xe9,0xff,0xe3,0xe3,0xea,0xff,0x82,0xe4,0xe4,0xea,0xff,
+  0x82,0xe5,0xe5,0xeb,0xff,0x02,0xe6,0xe6,0xeb,0xff,0xe6,0xe6,0xec,0xff,0x82,
+  0xe7,0xe7,0xec,0xff,0x02,0xe8,0xe8,0xec,0xff,0xe8,0xe8,0xed,0xff,0x82,0xe9,
+  0xe9,0xed,0xff,0x01,0xe9,0xe9,0xee,0xff,0x82,0xea,0xea,0xee,0xff,0x82,0xeb,
+  0xeb,0xef,0xff,0x82,0xec,0xec,0xef,0xff,0x82,0xed,0xed,0xf0,0xff,0x02,0xee,
+  0xee,0xf0,0xff,0xee,0xee,0xf1,0xff,0x82,0xef,0xef,0xf1,0xff,0x82,0xf0,0xf0,
+  0xf2,0xff,0x82,0xf1,0xf1,0xf2,0xff,0x01,0xf1,0xf1,0xf3,0xff,0x82,0xf2,0xf2,
+  0xf3,0xff,0x82,0xf3,0xf3,0xf4,0xff,0x02,0xf4,0xf4,0xf4,0xff,0xf4,0xf4,0xf5,
+  0xff,0x87,0xf5,0xf5,0xf5,0xff,0x01,0xf4,0xf4,0xf5,0xff,0x84,0xf4,0xf4,0xf4,
+  0xff,0x83,0xf3,0xf3,0xf3,0xff,0x82,0xf2,0xf2,0xf3,0xff,0x07,0xf2,0xf2,0xf2,
+  0xff,0xf2,0xf2,0xf3,0xff,0xf2,0xf2,0xf2,0xff,0xf1,0xf1,0xf2,0xff,0xf1,0xf1,
+  0xf1,0xff,0xf1,0xf1,0xf2,0xff,0xf3,0xf3,0xf4,0xff,0x85,0xf0,0xf0,0xf1,0xff,
+  0x05,0xef,0xef,0xf0,0xff,0xee,0xee,0xf0,0xff,0xed,0xed,0xee,0xff,0xeb,0xeb,
+  0xed,0xff,0xeb,0xeb,0xee,0xff,0x82,0xea,0xea,0xec,0xff,0x82,0xe9,0xe9,0xeb,
+  0xff,0x86,0xeb,0xeb,0xed,0xff,0x0c,0xeb,0xeb,0xed,0xfd,0xeb,0xeb,0xed,0xf8,
+  0xeb,0xeb,0xed,0xef,0xeb,0xeb,0xed,0xe3,0xeb,0xeb,0xed,0xd4,0xeb,0xeb,0xed,
+  0xc1,0xeb,0xeb,0xed,0xaa,0xeb,0xeb,0xed,0x90,0xeb,0xeb,0xed,0x73,0xeb,0xeb,
+  0xed,0x52,0xeb,0xeb,0xed,0x2e,0xeb,0xeb,0xed,0x08,0x86,0x00,0x00,0x00,0x00,
+  0x3b,0xce,0xe1,0xce,0xc6,0x95,0xbf,0x95,0xff,0x91,0xbc,0x91,0xff,0x6a,0x92,
+  0x6a,0xff,0x63,0x81,0x63,0xff,0x50,0x6f,0x50,0xff,0x5d,0x7d,0x5d,0xff,0x5b,
+  0x7c,0x5b,0xff,0x5a,0x7a,0x5a,0xff,0x58,0x78,0x58,0xff,0x47,0x67,0x47,0xff,
+  0x55,0x75,0x55,0xff,0x54,0x73,0x54,0xff,0x3c,0x5f,0x3c,0xff,0x58,0x93,0x58,
+  0xff,0x6e,0xb1,0x6e,0xff,0x77,0xc1,0x77,0xff,0x83,0xc7,0x83,0xff,0x81,0xbf,
+  0x81,0xff,0x6d,0xad,0x6d,0xff,0x78,0xbc,0x78,0xff,0x64,0xab,0x64,0xff,0x6f,
+  0xba,0x6f,0xff,0x6b,0xb9,0x6b,0xff,0x66,0xb8,0x66,0xff,0x62,0xb6,0x62,0xff,
+  0x5d,0xb4,0x5d,0xff,0x49,0xa2,0x49,0xff,0x60,0xaf,0x60,0xff,0x39,0x99,0x39,
+  0xff,0x24,0xa2,0x24,0xff,0x1b,0x8e,0x1b,0xff,0x11,0x6f,0x11,0xff,0xff,0xff,
+  0xff,0xcf,0xff,0xff,0xff,0xd2,0xff,0xff,0xff,0xd6,0xff,0xff,0xff,0xd9,0xff,
+  0xff,0xff,0xdd,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe3,0xff,0xff,0xff,0xe6,
+  0xff,0xff,0xff,0xe8,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xed,0xff,0xff,0xff,
+  0xef,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xf5,0xff,0xff,
+  0xff,0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xfa,0xfc,
+  0xfc,0xfd,0xfb,0xf8,0xf8,0xf9,0xfd,0xf3,0xf3,0xf6,0xfe,0xef,0xef,0xf3,0xfe,
+  0xeb,0xeb,0xf0,0xff,0xe8,0xe8,0xed,0xff,0xe1,0xe1,0xe9,0xfd,0x83,0xe2,0xe2,
+  0xe9,0xff,0x02,0xe3,0xe3,0xe9,0xff,0xe3,0xe3,0xea,0xff,0x82,0xe4,0xe4,0xea,
+  0xff,0x82,0xe5,0xe5,0xeb,0xff,0x82,0xe6,0xe6,0xeb,0xff,0x09,0xad,0xad,0xb1,
+  0xff,0x48,0x48,0x49,0xff,0x0e,0x0e,0x0e,0xff,0x1d,0x1d,0x1d,0xff,0x2d,0x2d,
+  0x2d,0xff,0x3c,0x3c,0x3c,0xff,0x7c,0x7c,0x7d,0xff,0xc6,0xc6,0xc9,0xff,0xea,
+  0xea,0xee,0xff,0x82,0xeb,0xeb,0xef,0xff,0x82,0xec,0xec,0xef,0xff,0x82,0xed,
+  0xed,0xf0,0xff,0x02,0xee,0xee,0xf0,0xff,0xee,0xee,0xf1,0xff,0x83,0xef,0xef,
+  0xf1,0xff,0x82,0xf0,0xf0,0xf2,0xff,0x02,0xf1,0xf1,0xf2,0xff,0xf1,0xf1,0xf3,
+  0xff,0x82,0xf2,0xf2,0xf3,0xff,0x09,0xf3,0xf3,0xf4,0xff,0xb6,0xb6,0xb7,0xff,
+  0x4c,0x4c,0x4c,0xff,0x0e,0x0e,0x0e,0xff,0x1d,0x1d,0x1d,0xff,0x2d,0x2d,0x2d,
+  0xff,0x3c,0x3c,0x3c,0xff,0x80,0x80,0x80,0xff,0xce,0xce,0xce,0xff,0x82,0xf5,
+  0xf5,0xf5,0xff,0x01,0xf4,0xf4,0xf5,0xff,0x85,0xf4,0xf4,0xf4,0xff,0x02,0xf3,
+  0xf3,0xf4,0xff,0xf3,0xf3,0xf3,0xff,0x82,0xf2,0xf2,0xf3,0xff,0x84,0xf2,0xf2,
+  0xf2,0xff,0x83,0xf1,0xf1,0xf2,0xff,0x0e,0xb7,0xb7,0xb8,0xff,0x58,0x58,0x59,
+  0xff,0x20,0x20,0x20,0xff,0x2c,0x2c,0x2c,0xff,0x38,0x38,0x38,0xff,0x46,0x46,
+  0x46,0xff,0x83,0x83,0x84,0xff,0xca,0xca,0xcb,0xff,0xee,0xee,0xef,0xff,0xed,
+  0xed,0xef,0xff,0xed,0xed,0xee,0xff,0xeb,0xeb,0xed,0xff,0xea,0xea,0xec,0xff,
+  0xea,0xea,0xeb,0xff,0x84,0xe9,0xe9,0xeb,0xff,0x84,0xeb,0xeb,0xed,0xff,0x0c,
+  0xeb,0xeb,0xed,0xfd,0xeb,0xeb,0xed,0xf8,0xeb,0xeb,0xed,0xef,0xeb,0xeb,0xed,
+  0xe3,0xeb,0xeb,0xed,0xd4,0xeb,0xeb,0xed,0xc1,0xeb,0xeb,0xed,0xaa,0xeb,0xeb,
+  0xed,0x90,0xeb,0xeb,0xed,0x73,0xeb,0xeb,0xed,0x52,0xeb,0xeb,0xed,0x2e,0xeb,
+  0xeb,0xed,0x08,0x85,0x00,0x00,0x00,0x00,0x3c,0xff,0xff,0xff,0x25,0xb5,0xd2,
+  0xb5,0xe8,0x94,0xbe,0x94,0xff,0x90,0xbc,0x90,0xff,0xae,0xb7,0xb2,0xff,0x63,
+  0x63,0x77,0xff,0x58,0x58,0x6c,0xff,0x4d,0x4d,0x61,0xff,0x42,0x42,0x56,0xff,
+  0x39,0x39,0x4c,0xff,0x31,0x31,0x43,0xff,0x29,0x29,0x3a,0xff,0x21,0x21,0x30,
+  0xff,0x19,0x19,0x27,0xff,0x0a,0x0a,0x10,0xff,0x45,0x75,0x45,0xff,0x73,0xb8,
+  0x73,0xff,0x76,0xc1,0x76,0xff,0x8b,0xcb,0x8b,0xff,0x8a,0xbf,0x8a,0xff,0x6f,
+  0xa6,0x6f,0xff,0x83,0xbd,0x83,0xff,0x67,0xa3,0x67,0xff,0x7b,0xbb,0x7b,0xff,
+  0x78,0xba,0x78,0xff,0x74,0xb9,0x74,0xff,0x70,0xb7,0x70,0xff,0x6c,0xb6,0x6c,
+  0xff,0x51,0x9c,0x51,0xff,0x65,0xb1,0x65,0xff,0x35,0x8e,0x35,0xff,0x23,0xa1,
+  0x23,0xff,0x1b,0x95,0x1b,0xff,0x10,0x6e,0x10,0xff,0xb9,0xd4,0xb9,0xdf,0xff,
+  0xff,0xff,0xd2,0xff,0xff,0xff,0xd6,0xff,0xff,0xff,0xd9,0xff,0xff,0xff,0xdd,
+  0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe3,0xff,0xff,0xff,0xe6,0xff,0xff,0xff,
+  0xe8,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xed,0xff,0xff,0xff,0xef,0xff,0xff,
+  0xff,0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xf6,0xff,
+  0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xfa,0xfc,0xfc,0xfd,0xfb,
+  0xf8,0xf8,0xfa,0xfd,0xf3,0xf3,0xf6,0xfe,0xf0,0xf0,0xf3,0xfe,0xec,0xec,0xf0,
+  0xff,0xe8,0xe8,0xee,0xff,0xe2,0xe2,0xe9,0xfd,0x82,0xe3,0xe3,0xe9,0xff,0x01,
+  0xe3,0xe3,0xea,0xff,0x82,0xe4,0xe4,0xea,0xff,0x83,0xe5,0xe5,0xeb,0xff,0x06,
+  0xe6,0xe6,0xeb,0xff,0xe6,0xe6,0xec,0xff,0x65,0x65,0x67,0xff,0x00,0x00,0x00,
+  0xff,0x05,0x05,0x05,0xff,0x02,0x02,0x02,0xff,0x82,0x00,0x00,0x00,0xff,0x04,
+  0x04,0x04,0x04,0xff,0x22,0x22,0x22,0xff,0x5d,0x5d,0x5d,0xff,0xa4,0xa4,0xa6,
+  0xff,0x82,0xec,0xec,0xef,0xff,0x83,0xed,0xed,0xf0,0xff,0x82,0xee,0xee,0xf1,
+  0xff,0x82,0xef,0xef,0xf1,0xff,0x82,0xf0,0xf0,0xf2,0xff,0x02,0xf1,0xf1,0xf2,
+  0xff,0xf1,0xf1,0xf3,0xff,0x82,0xf2,0xf2,0xf3,0xff,0x82,0xf3,0xf3,0xf4,0xff,
+  0x04,0x6a,0x6a,0x6a,0xff,0x00,0x00,0x00,0xff,0x05,0x05,0x05,0xff,0x02,0x02,
+  0x02,0xff,0x82,0x00,0x00,0x00,0xff,0x04,0x04,0x04,0x04,0xff,0x22,0x22,0x22,
+  0xff,0x5d,0x5d,0x5d,0xff,0xa7,0xa7,0xa8,0xff,0x85,0xf4,0xf4,0xf4,0xff,0x82,
+  0xf3,0xf3,0xf4,0xff,0x82,0xf3,0xf3,0xf3,0xff,0x83,0xf2,0xf2,0xf3,0xff,0x01,
+  0xf2,0xf2,0xf2,0xff,0x83,0xf1,0xf1,0xf2,0xff,0x05,0xf0,0xf0,0xf1,0xff,0x68,
+  0x68,0x69,0xff,0x00,0x00,0x00,0xff,0x05,0x05,0x05,0xff,0x02,0x02,0x02,0xff,
+  0x82,0x00,0x00,0x00,0xff,0x07,0x04,0x04,0x04,0xff,0x22,0x22,0x22,0xff,0x5d,
+  0x5d,0x5d,0xff,0xa5,0xa5,0xa5,0xff,0xed,0xed,0xee,0xff,0xec,0xec,0xee,0xff,
+  0xec,0xec,0xed,0xff,0x82,0xea,0xea,0xec,0xff,0x02,0xe9,0xe9,0xeb,0xff,0xe8,
+  0xe8,0xeb,0xff,0x86,0xe9,0xe9,0xeb,0xff,0x0c,0xe9,0xe9,0xeb,0xfd,0xe9,0xe9,
+  0xeb,0xf8,0xe9,0xe9,0xeb,0xef,0xe9,0xe9,0xeb,0xe3,0xe9,0xe9,0xeb,0xd4,0xe9,
+  0xe9,0xeb,0xc1,0xe9,0xe9,0xeb,0xaa,0xe9,0xe9,0xeb,0x90,0xe9,0xe9,0xeb,0x73,
+  0xe9,0xe9,0xeb,0x52,0xe9,0xe9,0xeb,0x2e,0xe9,0xe9,0xeb,0x08,0x85,0x00,0x00,
+  0x00,0x00,0x3e,0xff,0xff,0xff,0x52,0xa3,0xc7,0xa3,0xf9,0x93,0xbe,0x93,0xff,
+  0x8f,0xbb,0x8f,0xff,0xb1,0xb1,0xb7,0xff,0x6e,0x6e,0x82,0xff,0x63,0x63,0x77,
+  0xff,0x58,0x58,0x6c,0xff,0x4d,0x4d,0x61,0xff,0x42,0x42,0x56,0xff,0x39,0x39,
+  0x4c,0xff,0x31,0x31,0x43,0xff,0x29,0x29,0x3a,0xff,0x21,0x21,0x30,0xff,0x0e,
+  0x0e,0x15,0xff,0x44,0x75,0x44,0xff,0x71,0xb8,0x71,0xff,0x74,0xc0,0x74,0xff,
+  0x83,0xbf,0x83,0xff,0x8a,0xbe,0x8a,0xff,0x6e,0xa5,0x6e,0xff,0x82,0xbc,0x82,
+  0xff,0x66,0xa3,0x66,0xff,0x7a,0xba,0x7a,0xff,0x77,0xb9,0x77,0xff,0x73,0xb8,
+  0x73,0xff,0x6f,0xb7,0x6f,0xff,0x6c,0xb5,0x6c,0xff,0x50,0x9b,0x50,0xff,0x64,
+  0xb0,0x64,0xff,0x48,0x96,0x48,0xff,0x21,0xa0,0x21,0xff,0x1b,0x9c,0x1b,0xff,
+  0x0f,0x6d,0x0f,0xff,0x72,0xa9,0x72,0xf0,0xff,0xff,0xff,0xd2,0xff,0xff,0xff,
+  0xd6,0xff,0xff,0xff,0xd9,0xff,0xff,0xff,0xdd,0xff,0xff,0xff,0xe0,0xff,0xff,
+  0xff,0xe3,0xff,0xff,0xff,0xe6,0xff,0xff,0xff,0xe8,0xff,0xff,0xff,0xeb,0xff,
+  0xff,0xff,0xed,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xf3,
+  0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,
+  0xf9,0xff,0xff,0xff,0xfa,0xfd,0xfd,0xfd,0xfb,0xf8,0xf8,0xfa,0xfd,0xf4,0xf4,
+  0xf6,0xfe,0xf0,0xf0,0xf4,0xfe,0xec,0xec,0xf1,0xff,0xe9,0xe9,0xee,0xff,0xe3,
+  0xe3,0xea,0xfd,0xe4,0xe4,0xea,0xff,0xe3,0xe3,0xea,0xff,0x82,0xe4,0xe4,0xea,
+  0xff,0x82,0xe5,0xe5,0xeb,0xff,0x08,0xe6,0xe6,0xeb,0xff,0xe6,0xe6,0xec,0xff,
+  0xe7,0xe7,0xec,0xff,0x56,0x56,0x58,0xff,0x00,0x00,0x00,0xff,0x09,0x09,0x09,
+  0xff,0x40,0x40,0x40,0xff,0x78,0x78,0x78,0xff,0x82,0x7f,0x7f,0x7f,0xff,0x05,
+  0x78,0x78,0x78,0xff,0x40,0x40,0x40,0xff,0x07,0x07,0x07,0xff,0x6f,0x6f,0x6f,
+  0xff,0xbd,0xbd,0xbe,0xff,0x82,0xed,0xed,0xf0,0xff,0x02,0xee,0xee,0xf0,0xff,
+  0xee,0xee,0xf1,0xff,0x82,0xef,0xef,0xf1,0xff,0x82,0xf0,0xf0,0xf2,0xff,0x02,
+  0xf1,0xf1,0xf2,0xff,0xf1,0xf1,0xf3,0xff,0x82,0xf2,0xf2,0xf3,0xff,0x01,0xf3,
+  0xf3,0xf3,0xff,0x82,0xf3,0xf3,0xf4,0xff,0x05,0x5b,0x5b,0x5b,0xff,0x00,0x00,
+  0x00,0xff,0x01,0x0b,0x01,0xff,0x00,0x4d,0x00,0xff,0x00,0x90,0x00,0xff,0x82,
+  0x00,0x99,0x00,0xff,0x05,0x00,0x90,0x00,0xff,0x00,0x4d,0x00,0xff,0x07,0x07,
+  0x07,0xff,0x6f,0x6f,0x6f,0xff,0xc0,0xc0,0xc0,0xff,0x82,0xf4,0xf4,0xf4,0xff,
+  0x82,0xf3,0xf3,0xf4,0xff,0x83,0xf3,0xf3,0xf3,0xff,0x82,0xf2,0xf2,0xf3,0xff,
+  0x01,0xf2,0xf2,0xf2,0xff,0x83,0xf1,0xf1,0xf2,0xff,0x07,0xf1,0xf1,0xf1,0xff,
+  0xf0,0xf0,0xf1,0xff,0x59,0x59,0x5a,0xff,0x00,0x00,0x00,0xff,0x0e,0x0e,0x01,
+  0xff,0x65,0x65,0x00,0xff,0xbd,0xbd,0x00,0xff,0x82,0xc9,0xc9,0x00,0xff,0x05,
+  0xbd,0xbd,0x00,0xff,0x65,0x65,0x00,0xff,0x07,0x07,0x07,0xff,0x6f,0x6f,0x6f,
+  0xff,0xbd,0xbd,0xbd,0xff,0x83,0xeb,0xeb,0xed,0xff,0x82,0xe9,0xe9,0xeb,0xff,
+  0x03,0xe8,0xe8,0xea,0xff,0xe9,0xe9,0xeb,0xff,0xe8,0xe8,0xeb,0xff,0x84,0xe9,
+  0xe9,0xeb,0xff,0x0c,0xe9,0xe9,0xeb,0xfd,0xe9,0xe9,0xeb,0xf8,0xe9,0xe9,0xeb,
+  0xef,0xe9,0xe9,0xeb,0xe3,0xe9,0xe9,0xeb,0xd4,0xe9,0xe9,0xeb,0xc1,0xe9,0xe9,
+  0xeb,0xaa,0xe9,0xe9,0xeb,0x90,0xe9,0xe9,0xeb,0x73,0xe9,0xe9,0xeb,0x52,0xe9,
+  0xe9,0xeb,0x2e,0xe9,0xe9,0xeb,0x08,0x85,0x00,0x00,0x00,0x00,0x3c,0xff,0xff,
+  0xff,0x79,0x96,0xbf,0x96,0xff,0x92,0xbd,0x92,0xff,0x92,0xbb,0x92,0xff,0x99,
+  0xb6,0x99,0xff,0xa5,0xbd,0xa5,0xff,0x93,0xac,0x93,0xff,0xa1,0xbb,0xa1,0xff,
+  0x9f,0xb9,0x9f,0xff,0x9d,0xb8,0x9d,0xff,0x9b,0xb7,0x9b,0xff,0x89,0xa5,0x89,
+  0xff,0x96,0xb4,0x96,0xff,0x94,0xb3,0x94,0xff,0x64,0x8c,0x64,0xff,0x55,0x91,
+  0x55,0xff,0x70,0xb7,0x70,0xff,0x73,0xc0,0x73,0xff,0x7e,0xb9,0x7e,0xff,0x89,
+  0xbe,0x89,0xff,0x6c,0xa5,0x6c,0xff,0x81,0xbc,0x81,0xff,0x65,0xa3,0x65,0xff,
+  0x79,0xba,0x79,0xff,0x76,0xb9,0x76,0xff,0x72,0xb8,0x72,0xff,0x6e,0xb7,0x6e,
+  0xff,0x6a,0xb5,0x6a,0xff,0x4f,0x9a,0x4f,0xff,0x63,0xb0,0x63,0xff,0x47,0x96,
+  0x47,0xff,0x2e,0xa5,0x2e,0xff,0x1a,0x9b,0x1a,0xff,0x10,0x78,0x10,0xff,0x48,
+  0x90,0x48,0xf8,0xff,0xff,0xff,0xd2,0xff,0xff,0xff,0xd6,0xff,0xff,0xff,0xd9,
+  0xff,0xff,0xff,0xdd,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe3,0xff,0xff,0xff,
+  0xe6,0xff,0xff,0xff,0xe8,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xed,0xff,0xff,
+  0xff,0xef,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xf5,0xff,
+  0xff,0xff,0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xfa,
+  0xfd,0xfd,0xfd,0xfb,0xf8,0xf8,0xfa,0xfd,0xf4,0xf4,0xf7,0xfe,0xf0,0xf0,0xf4,
+  0xfe,0xed,0xed,0xf1,0xff,0xe9,0xe9,0xef,0xff,0xe4,0xe4,0xea,0xfd,0x82,0xe4,
+  0xe4,0xea,0xff,0x82,0xe5,0xe5,0xeb,0xff,0x02,0xe6,0xe6,0xeb,0xff,0xe6,0xe6,
+  0xec,0xff,0x82,0xe7,0xe7,0xec,0xff,0x0f,0xae,0xae,0xb1,0xff,0x00,0x00,0x00,
+  0xff,0x09,0x09,0x09,0xff,0x68,0x68,0x68,0xff,0x7f,0x7f,0x7f,0xff,0xb2,0xbe,
+  0xaf,0xff,0xc8,0xda,0xc5,0xff,0xbd,0xcc,0xba,0xff,0xaa,0xb4,0xa8,0xff,0x95,
+  0x9a,0x94,0xff,0x68,0x68,0x68,0xff,0x09,0x09,0x09,0xff,0x93,0x93,0x93,0xff,
+  0xe0,0xe0,0xe2,0xff,0xee,0xee,0xf1,0xff,0x82,0xef,0xef,0xf1,0xff,0x82,0xf0,
+  0xf0,0xf2,0xff,0x82,0xf1,0xf1,0xf2,0xff,0x01,0xf1,0xf1,0xf3,0xff,0x82,0xf2,
+  0xf2,0xf3,0xff,0x82,0xf3,0xf3,0xf4,0xff,0x10,0xf4,0xf4,0xf4,0xff,0xb7,0xb7,
+  0xb8,0xff,0x00,0x00,0x00,0xff,0x01,0x0b,0x01,0xff,0x00,0x7d,0x00,0xff,0x00,
+  0x99,0x00,0xff,0x71,0xcb,0x6f,0xff,0xa4,0xe2,0xa0,0xff,0x8b,0xd7,0x88,0xff,
+  0x60,0xc4,0x5e,0xff,0x31,0xaf,0x30,0xff,0x00,0x7d,0x00,0xff,0x09,0x09,0x09,
+  0xff,0x93,0x93,0x93,0xff,0xe5,0xe5,0xe5,0xff,0xf3,0xf3,0xf4,0xff,0x83,0xf3,
+  0xf3,0xf3,0xff,0x82,0xf2,0xf2,0xf3,0xff,0x82,0xf2,0xf2,0xf2,0xff,0x82,0xf1,
+  0xf1,0xf2,0xff,0x01,0xf1,0xf1,0xf1,0xff,0x82,0xf0,0xf0,0xf1,0xff,0x0e,0xb4,
+  0xb4,0xb5,0xff,0x00,0x00,0x00,0xff,0x0e,0x0e,0x01,0xff,0xa4,0xa4,0x00,0xff,
+  0xc9,0xc9,0x00,0xff,0xd7,0xe4,0x6f,0xff,0xde,0xef,0xa0,0xff,0xdb,0xea,0x88,
+  0xff,0xd5,0xe0,0x5e,0xff,0xcf,0xd4,0x30,0xff,0xa4,0xa4,0x00,0xff,0x09,0x09,
+  0x09,0xff,0x93,0x93,0x93,0xff,0xde,0xde,0xdf,0xff,0x82,0xea,0xea,0xec,0xff,
+  0x03,0xe9,0xe9,0xec,0xff,0xe9,0xe9,0xeb,0xff,0xe8,0xe8,0xeb,0xff,0x82,0xe8,
+  0xe8,0xea,0xff,0x84,0xe9,0xe9,0xeb,0xff,0x0c,0xe9,0xe9,0xeb,0xfd,0xe9,0xe9,
+  0xeb,0xf8,0xe9,0xe9,0xeb,0xef,0xe9,0xe9,0xeb,0xe3,0xe9,0xe9,0xeb,0xd4,0xe9,
+  0xe9,0xeb,0xc1,0xe9,0xe9,0xeb,0xaa,0xe9,0xe9,0xeb,0x90,0xe9,0xe9,0xeb,0x73,
+  0xe9,0xe9,0xeb,0x52,0xe9,0xe9,0xeb,0x2e,0xe9,0xe9,0xeb,0x08,0x83,0x00,0x00,
+  0x00,0x00,0x3e,0xe7,0xe7,0xec,0xef,0xe9,0xe9,0xee,0xef,0xe8,0xea,0xeb,0xfc,
+  0x85,0x90,0x8a,0xff,0xbe,0xc9,0xc0,0xff,0xd8,0xe3,0xda,0xff,0xce,0xd0,0xd0,
+  0xff,0xe6,0xe6,0xe8,0xff,0xd6,0xd6,0xd8,0xff,0xe7,0xe7,0xe9,0xff,0xe8,0xe8,
+  0xe9,0xff,0xe8,0xe8,0xea,0xff,0xe9,0xe9,0xeb,0xff,0xda,0xda,0xdb,0xff,0xea,
+  0xea,0xeb,0xff,0xeb,0xeb,0xec,0xff,0xd7,0xdf,0xd8,0xff,0xd3,0xe3,0xd4,0xff,
+  0xd9,0xeb,0xda,0xff,0xda,0xee,0xdb,0xff,0xe0,0xec,0xe0,0xff,0xe4,0xef,0xe4,
+  0xff,0xdb,0xe7,0xdb,0xff,0xe2,0xee,0xe2,0xff,0xd9,0xe6,0xd9,0xff,0xe0,0xed,
+  0xe0,0xff,0xdf,0xec,0xdf,0xff,0xdd,0xeb,0xde,0xff,0xdc,0xea,0xdc,0xff,0xda,
+  0xe9,0xdb,0xff,0xd1,0xe0,0xd2,0xff,0xd7,0xe7,0xd8,0xff,0xce,0xdd,0xcf,0xff,
+  0xc7,0xe3,0xc8,0xff,0xbd,0xde,0xbf,0xff,0xba,0xd4,0xbc,0xff,0xc5,0xd7,0xc8,
+  0xff,0xf2,0xf2,0xf5,0xfc,0xf1,0xf1,0xf4,0xfc,0xf0,0xf0,0xf3,0xfd,0xf0,0xf0,
+  0xf3,0xfc,0xf0,0xf0,0xf4,0xf3,0xfa,0xfa,0xfb,0xe7,0xff,0xff,0xff,0xe6,0xff,
+  0xff,0xff,0xe8,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xed,0xff,0xff,0xff,0xef,
+  0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,
+  0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xfa,0xfd,0xfd,
+  0xfd,0xfb,0xf8,0xf8,0xfa,0xfd,0xf5,0xf5,0xf7,0xfe,0xf1,0xf1,0xf4,0xfe,0xee,
+  0xee,0xf1,0xff,0xea,0xea,0xef,0xff,0xe5,0xe5,0xeb,0xfd,0x82,0xe5,0xe5,0xeb,
+  0xff,0x82,0xe6,0xe6,0xeb,0xff,0x83,0xe7,0xe7,0xec,0xff,0x06,0xe8,0xe8,0xed,
+  0xff,0x48,0x48,0x49,0xff,0x05,0x05,0x05,0xff,0x40,0x40,0x40,0xff,0x7f,0x7f,
+  0x7f,0xff,0xb9,0xc7,0xb6,0xff,0x82,0xe6,0xff,0xe1,0xff,0x07,0xd8,0xee,0xd4,
+  0xff,0xc2,0xd3,0xbf,0xff,0xac,0xb7,0xaa,0xff,0x96,0x9b,0x95,0xff,0x40,0x40,
+  0x40,0xff,0x44,0x44,0x44,0xff,0xd3,0xd3,0xd4,0xff,0x82,0xef,0xef,0xf1,0xff,
+  0x82,0xf0,0xf0,0xf2,0xff,0x02,0xf1,0xf1,0xf2,0xff,0xf1,0xf1,0xf3,0xff,0x82,
+  0xf2,0xf2,0xf3,0xff,0x82,0xf3,0xf3,0xf4,0xff,0x82,0xf4,0xf4,0xf4,0xff,0x06,
+  0xf5,0xf5,0xf5,0xff,0x4c,0x4c,0x4c,0xff,0x05,0x05,0x05,0xff,0x00,0x4d,0x00,
+  0xff,0x00,0x99,0x00,0xff,0x82,0xd3,0x7f,0xff,0x82,0xe6,0xff,0xe1,0xff,0x07,
+  0xc7,0xf1,0xc3,0xff,0x96,0xdc,0x93,0xff,0x64,0xc6,0x62,0xff,0x32,0xaf,0x31,
+  0xff,0x00,0x4d,0x00,0xff,0x44,0x44,0x44,0xff,0xd5,0xd5,0xd5,0xff,0x82,0xf3,
+  0xf3,0xf3,0xff,0x82,0xf2,0xf2,0xf3,0xff,0x82,0xf2,0xf2,0xf2,0xff,0x83,0xf1,
+  0xf1,0xf2,0xff,0x83,0xf0,0xf0,0xf1,0xff,0x06,0xef,0xef,0xf0,0xff,0x4a,0x4a,
+  0x4a,0xff,0x05,0x05,0x05,0xff,0x65,0x65,0x00,0xff,0xc9,0xc9,0x00,0xff,0xd9,
+  0xe7,0x7f,0xff,0x82,0xe6,0xff,0xe1,0xff,0x08,0xe2,0xf8,0xc3,0xff,0xdc,0xec,
+  0x93,0xff,0xd6,0xe1,0x62,0xff,0xcf,0xd5,0x31,0xff,0x65,0x65,0x00,0xff,0x44,
+  0x44,0x44,0xff,0xd2,0xd2,0xd2,0xff,0xe9,0xe9,0xec,0xff,0x82,0xe9,0xe9,0xeb,
+  0xff,0x03,0xe8,0xe8,0xeb,0xff,0xe8,0xe8,0xea,0xff,0xe7,0xe7,0xea,0xff,0x85,
+  0xe7,0xe7,0xe9,0xff,0x0c,0xe7,0xe7,0xe9,0xfd,0xe7,0xe7,0xe9,0xf8,0xe7,0xe7,
+  0xe9,0xef,0xe7,0xe7,0xe9,0xe3,0xe7,0xe7,0xe9,0xd4,0xe7,0xe7,0xe9,0xc1,0xe7,
+  0xe7,0xe9,0xaa,0xe7,0xe7,0xe9,0x90,0xe7,0xe7,0xe9,0x73,0xe7,0xe7,0xe9,0x52,
+  0xe7,0xe7,0xe9,0x2e,0xe7,0xe7,0xe9,0x08,0x83,0x00,0x00,0x00,0x00,0x3e,0xeb,
+  0xeb,0xef,0xff,0xc3,0xc3,0xd1,0xff,0xcb,0xcb,0xd7,0xff,0x85,0x85,0x8a,0xff,
+  0xab,0xab,0xb5,0xff,0xb8,0xb8,0xc3,0xff,0xd3,0xd3,0xde,0xff,0xd9,0xd9,0xe3,
+  0xff,0xdb,0xdb,0xe4,0xff,0xdd,0xdd,0xe5,0xff,0xdf,0xdf,0xe7,0xff,0xe1,0xe1,
+  0xe8,0xff,0xe3,0xe3,0xe9,0xff,0xe5,0xe5,0xea,0xff,0xe7,0xe7,0xec,0xff,0xe9,
+  0xe9,0xed,0xff,0xeb,0xeb,0xee,0xff,0xed,0xed,0xf0,0xff,0xef,0xef,0xf1,0xff,
+  0xf1,0xf1,0xf2,0xff,0xf3,0xf3,0xf3,0xff,0xf4,0xf4,0xf5,0xff,0xf5,0xf5,0xf5,
+  0xff,0xf4,0xf4,0xf4,0xff,0xf3,0xf3,0xf4,0xff,0xf3,0xf3,0xf3,0xff,0xf1,0xf1,
+  0xf2,0xff,0xf0,0xf0,0xf1,0xff,0xef,0xef,0xf0,0xff,0xed,0xed,0xee,0xff,0xeb,
+  0xeb,0xed,0xff,0xe9,0xe9,0xec,0xff,0xe7,0xe7,0xea,0xff,0xe5,0xe5,0xe8,0xff,
+  0xe3,0xe3,0xe6,0xff,0xe1,0xe1,0xe5,0xff,0xde,0xde,0xe3,0xff,0xdc,0xdc,0xe1,
+  0xff,0xd9,0xd9,0xdf,0xff,0xd7,0xd7,0xdc,0xff,0xd6,0xd6,0xdd,0xff,0xe0,0xe0,
+  0xe6,0xff,0xe5,0xe5,0xeb,0xff,0xe1,0xe1,0xe7,0xfd,0xe2,0xe2,0xe9,0xf6,0xff,
+  0xff,0xff,0xeb,0xff,0xff,0xff,0xed,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xf1,
+  0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,0xff,
+  0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xfa,0xfd,0xfd,0xfd,0xfb,0xf9,0xf9,
+  0xfa,0xfd,0xf5,0xf5,0xf7,0xfe,0xf1,0xf1,0xf4,0xfe,0xee,0xee,0xf2,0xff,0xeb,
+  0xeb,0xef,0xff,0xe5,0xe5,0xeb,0xfd,0x82,0xe6,0xe6,0xeb,0xff,0x01,0xe6,0xe6,
+  0xec,0xff,0x82,0xe7,0xe7,0xec,0xff,0x82,0xe8,0xe8,0xed,0xff,0x0f,0xe9,0xe9,
+  0xed,0xff,0x0e,0x0e,0x0e,0xff,0x02,0x02,0x02,0xff,0x78,0x78,0x78,0xff,0x9d,
+  0xa4,0x9b,0xff,0xc8,0xda,0xc5,0xff,0xe2,0xfa,0xdd,0xff,0xe4,0xfd,0xdf,0xff,
+  0xd9,0xef,0xd5,0xff,0xc8,0xda,0xc5,0xff,0xb5,0xc2,0xb2,0xff,0xa1,0xa9,0x9f,
+  0xff,0x84,0x87,0x83,0xff,0x0c,0x0c,0x0c,0xff,0xd6,0xd6,0xd6,0xff,0x82,0xf0,
+  0xf0,0xf2,0xff,0x02,0xf1,0xf1,0xf2,0xff,0xf1,0xf1,0xf3,0xff,0x82,0xf2,0xf2,
+  0xf3,0xff,0x02,0xf3,0xf3,0xf3,0xff,0xf3,0xf3,0xf4,0xff,0x82,0xf4,0xf4,0xf4,
+  0xff,0x83,0xf5,0xf5,0xf5,0xff,0x0f,0x0e,0x0e,0x0e,0xff,0x02,0x02,0x02,0xff,
+  0x00,0x90,0x00,0xff,0x42,0xb6,0x41,0xff,0xa4,0xe2,0xa0,0xff,0xdd,0xfb,0xd8,
+  0xff,0xe2,0xfd,0xdd,0xff,0xc9,0xf2,0xc5,0xff,0xa4,0xe2,0xa0,0xff,0x79,0xcf,
+  0x76,0xff,0x4b,0xba,0x49,0xff,0x1a,0x9b,0x19,0xff,0x0c,0x0c,0x0c,0xff,0xd6,
+  0xd6,0xd6,0xff,0xf3,0xf3,0xf3,0xff,0x82,0xf2,0xf2,0xf3,0xff,0x01,0xf2,0xf2,
+  0xf2,0xff,0x83,0xf1,0xf1,0xf2,0xff,0x01,0xf1,0xf1,0xf1,0xff,0x83,0xf0,0xf0,
+  0xf1,0xff,0x82,0xef,0xef,0xf0,0xff,0x13,0x0e,0x0e,0x0e,0xff,0x02,0x02,0x02,
+  0xff,0xbd,0xbd,0x00,0xff,0xd1,0xd9,0x41,0xff,0xde,0xef,0xa0,0xff,0xe5,0xfd,
+  0xd8,0xff,0xe5,0xfe,0xdd,0xff,0xe2,0xf8,0xc5,0xff,0xde,0xef,0xa0,0xff,0xd8,
+  0xe5,0x76,0xff,0xd2,0xdb,0x49,0xff,0xc1,0xc4,0x19,0xff,0x0c,0x0c,0x0c,0xff,
+  0xd6,0xd6,0xd6,0xff,0xe9,0xe9,0xeb,0xff,0xe8,0xe8,0xeb,0xff,0xe8,0xe8,0xea,
+  0xff,0xe7,0xe7,0xea,0xff,0xe7,0xe7,0xe9,0xff,0x82,0xe6,0xe6,0xe9,0xff,0x84,
+  0xe7,0xe7,0xe9,0xff,0x0c,0xe7,0xe7,0xe9,0xfd,0xe7,0xe7,0xe9,0xf8,0xe7,0xe7,
+  0xe9,0xef,0xe7,0xe7,0xe9,0xe3,0xe7,0xe7,0xe9,0xd4,0xe7,0xe7,0xe9,0xc1,0xe7,
+  0xe7,0xe9,0xaa,0xe7,0xe7,0xe9,0x90,0xe7,0xe7,0xe9,0x73,0xe7,0xe7,0xe9,0x52,
+  0xe7,0xe7,0xe9,0x2e,0xe7,0xe7,0xe9,0x08,0x83,0x00,0x00,0x00,0x00,0x14,0xef,
+  0xef,0xf3,0xff,0xc8,0xc8,0xd5,0xff,0xd2,0xd2,0xdc,0xff,0x8c,0x8c,0x8f,0xff,
+  0xad,0xad,0xb7,0xff,0xb5,0xb5,0xbe,0xff,0xbf,0xbf,0xc7,0xff,0xd4,0xd4,0xdd,
+  0xff,0x80,0x80,0x85,0xff,0x60,0x60,0x62,0xff,0x66,0x66,0x68,0xff,0x88,0x88,
+  0x8b,0xff,0x96,0x96,0x99,0xff,0x97,0x97,0x9a,0xff,0x98,0x98,0x9b,0xff,0xec,
+  0xec,0xef,0xff,0x89,0x89,0x8b,0xff,0x65,0x65,0x65,0xff,0x6b,0x6b,0x6b,0xff,
+  0x91,0x91,0x91,0xff,0x83,0x9f,0x9f,0x9f,0xff,0x27,0xf3,0xf3,0xf3,0xff,0x8c,
+  0x8c,0x8c,0xff,0x65,0x65,0x65,0xff,0x6a,0x6a,0x6a,0xff,0x8d,0x8d,0x8e,0xff,
+  0x99,0x99,0x9b,0xff,0x98,0x98,0x9a,0xff,0x97,0x97,0x99,0xff,0xe6,0xe6,0xe9,
+  0xff,0x84,0x84,0x86,0xff,0x61,0x61,0x62,0xff,0x65,0x65,0x66,0xff,0x84,0x84,
+  0x87,0xff,0x8e,0x8e,0x91,0xff,0x8c,0x8c,0x90,0xff,0x8a,0x8a,0x8e,0xff,0xd2,
+  0xd2,0xd8,0xff,0xcf,0xcf,0xd6,0xff,0xcc,0xcc,0xd3,0xff,0xca,0xca,0xd2,0xff,
+  0xd6,0xd6,0xdd,0xff,0xc2,0xc2,0xd0,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,
+  0xed,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,
+  0xff,0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,
+  0xff,0xff,0xfa,0xfd,0xfd,0xfd,0xfb,0xf9,0xf9,0xfa,0xfd,0xf5,0xf5,0xf7,0xfe,
+  0xf2,0xf2,0xf5,0xfe,0xee,0xee,0xf2,0xff,0xeb,0xeb,0xef,0xff,0xe6,0xe6,0xec,
+  0xfe,0x83,0xe7,0xe7,0xec,0xff,0x82,0xe8,0xe8,0xed,0xff,0x82,0xe9,0xe9,0xed,
+  0xff,0x11,0xea,0xea,0xee,0xff,0x1d,0x1d,0x1d,0xff,0x00,0x00,0x00,0xff,0x7f,
+  0x7f,0x7f,0xff,0xa4,0xad,0xa2,0xff,0xc2,0xd3,0xbf,0xff,0xd3,0xe8,0xcf,0xff,
+  0xd7,0xec,0xd2,0xff,0xd1,0xe4,0xcd,0xff,0xc5,0xd6,0xc1,0xff,0xb5,0xc2,0xb3,
+  0xff,0xa4,0xad,0xa2,0xff,0x91,0x95,0x90,0xff,0x00,0x00,0x00,0xff,0xe5,0xe5,
+  0xe5,0xff,0xf1,0xf1,0xf2,0xff,0xf1,0xf1,0xf3,0xff,0x82,0xf2,0xf2,0xf3,0xff,
+  0x01,0xf3,0xf3,0xf3,0xff,0x82,0xf3,0xf3,0xf4,0xff,0x02,0xf4,0xf4,0xf4,0xff,
+  0xf4,0xf4,0xf5,0xff,0x84,0xf5,0xf5,0xf5,0xff,0x10,0x1d,0x1d,0x1d,0xff,0x00,
+  0x00,0x00,0xff,0x00,0x99,0x00,0xff,0x52,0xbd,0x50,0xff,0x96,0xdc,0x93,0xff,
+  0xbc,0xec,0xb8,0xff,0xc4,0xf0,0xc0,0xff,0xb6,0xea,0xb2,0xff,0x9b,0xde,0x98,
+  0xff,0x79,0xcf,0x76,0xff,0x52,0xbd,0x50,0xff,0x28,0xab,0x27,0xff,0x00,0x00,
+  0x00,0xff,0xe5,0xe5,0xe5,0xff,0xf2,0xf2,0xf3,0xff,0xf2,0xf2,0xf2,0xff,0x83,
+  0xf1,0xf1,0xf2,0xff,0x01,0xf1,0xf1,0xf1,0xff,0x83,0xf0,0xf0,0xf1,0xff,0x83,
+  0xef,0xef,0xf0,0xff,0x10,0xee,0xee,0xef,0xff,0x1d,0x1d,0x1d,0xff,0x00,0x00,
+  0x00,0xff,0xc9,0xc9,0x00,0xff,0xd3,0xdc,0x50,0xff,0xdc,0xec,0x93,0xff,0xe1,
+  0xf5,0xb8,0xff,0xe2,0xf7,0xc0,0xff,0xe0,0xf4,0xb2,0xff,0xdd,0xed,0x98,0xff,
+  0xd8,0xe5,0x76,0xff,0xd3,0xdc,0x50,0xff,0xce,0xd2,0x27,0xff,0x00,0x00,0x00,
+  0xff,0xe5,0xe5,0xe5,0xff,0xe8,0xe8,0xea,0xff,0x82,0xe7,0xe7,0xea,0xff,0x82,
+  0xe6,0xe6,0xe9,0xff,0x82,0xe5,0xe5,0xe8,0xff,0x84,0xe7,0xe7,0xe9,0xff,0x0c,
+  0xe7,0xe7,0xe9,0xfd,0xe7,0xe7,0xe9,0xf8,0xe7,0xe7,0xe9,0xef,0xe7,0xe7,0xe9,
+  0xe3,0xe7,0xe7,0xe9,0xd4,0xe7,0xe7,0xe9,0xc1,0xe7,0xe7,0xe9,0xaa,0xe7,0xe7,
+  0xe9,0x90,0xe7,0xe7,0xe9,0x73,0xe7,0xe7,0xe9,0x52,0xe7,0xe7,0xe9,0x2e,0xe7,
+  0xe7,0xe9,0x08,0x83,0x00,0x00,0x00,0x00,0x3e,0xf3,0xf3,0xf6,0xff,0xd9,0xd9,
+  0xe1,0xff,0xe2,0xe2,0xe9,0xff,0x92,0x92,0x94,0xff,0xb0,0xb0,0xb8,0xff,0xb8,
+  0xb8,0xc0,0xff,0xc0,0xc0,0xc8,0xff,0xc8,0xc8,0xcf,0xff,0x5d,0x5d,0x5f,0xff,
+  0xae,0xae,0xb0,0xff,0xbe,0xbe,0xc0,0xff,0x75,0x75,0x77,0xff,0xac,0xac,0xaf,
+  0xff,0xae,0xae,0xb1,0xff,0xaf,0xaf,0xb1,0xff,0xef,0xef,0xf1,0xff,0x65,0x65,
+  0x65,0xff,0xb3,0xb3,0xb3,0xff,0xc2,0xc2,0xc3,0xff,0x79,0x79,0x79,0xff,0xb4,
+  0xb4,0xb4,0xff,0xb3,0xb3,0xb4,0xff,0xb3,0xb3,0xb3,0xff,0xf1,0xf1,0xf2,0xff,
+  0x64,0x64,0x65,0xff,0xb1,0xb1,0xb1,0xff,0xc0,0xc0,0xc0,0xff,0x76,0x76,0x77,
+  0xff,0xab,0xab,0xad,0xff,0xaa,0xaa,0xac,0xff,0xa8,0xa8,0xab,0xff,0xe2,0xe2,
+  0xe6,0xff,0x60,0x60,0x61,0xff,0xac,0xac,0xad,0xff,0xbb,0xbb,0xbc,0xff,0x71,
+  0x71,0x72,0xff,0x9d,0x9d,0xa2,0xff,0x9b,0x9b,0xa0,0xff,0x99,0x99,0x9e,0xff,
+  0xcc,0xcc,0xd4,0xff,0xc9,0xc9,0xd1,0xff,0xc6,0xc6,0xcf,0xff,0xc3,0xc3,0xcc,
+  0xff,0xbf,0xbf,0xc9,0xff,0x94,0x94,0x9e,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,
+  0xff,0xed,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xf3,0xff,
+  0xff,0xff,0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,
+  0xff,0xff,0xff,0xfa,0xfd,0xfd,0xfd,0xfb,0xf9,0xf9,0xfa,0xfd,0xf5,0xf5,0xf8,
+  0xfe,0xf2,0xf2,0xf5,0xfe,0xef,0xef,0xf3,0xff,0xec,0xec,0xf0,0xff,0xe7,0xe7,
+  0xec,0xfe,0x82,0xe8,0xe8,0xec,0xff,0x82,0xe8,0xe8,0xed,0xff,0x02,0xe9,0xe9,
+  0xed,0xff,0xe9,0xe9,0xee,0xff,0x82,0xea,0xea,0xee,0xff,0x0f,0x2d,0x2d,0x2d,
+  0xff,0x00,0x00,0x00,0xff,0x7f,0x7f,0x7f,0xff,0xa0,0xa8,0x9e,0xff,0xb7,0xc5,
+  0xb4,0xff,0xc4,0xd5,0xc1,0xff,0xc8,0xda,0xc5,0xff,0xc5,0xd6,0xc2,0xff,0xbc,
+  0xcb,0xb9,0xff,0xb0,0xbc,0xae,0xff,0xa1,0xaa,0xa0,0xff,0x91,0x95,0x90,0xff,
+  0x00,0x00,0x00,0xff,0xf5,0xf5,0xf5,0xff,0xf1,0xf1,0xf3,0xff,0x82,0xf2,0xf2,
+  0xf3,0xff,0x82,0xf3,0xf3,0xf4,0xff,0x02,0xf4,0xf4,0xf4,0xff,0xf4,0xf4,0xf5,
+  0xff,0x86,0xf5,0xf5,0xf5,0xff,0x0f,0x2d,0x2d,0x2d,0xff,0x00,0x00,0x00,0xff,
+  0x00,0x99,0x00,0xff,0x49,0xb9,0x47,0xff,0x7d,0xd0,0x7a,0xff,0x9b,0xde,0x97,
+  0xff,0xa4,0xe2,0xa0,0xff,0x9c,0xde,0x99,0xff,0x89,0xd6,0x86,0xff,0x6e,0xca,
+  0x6b,0xff,0x4d,0xbb,0x4b,0xff,0x28,0xab,0x27,0xff,0x00,0x00,0x00,0xff,0xf5,
+  0xf5,0xf5,0xff,0xf2,0xf2,0xf2,0xff,0x82,0xf1,0xf1,0xf2,0xff,0x01,0xf1,0xf1,
+  0xf1,0xff,0x83,0xf0,0xf0,0xf1,0xff,0x83,0xef,0xef,0xf0,0xff,0x01,0xee,0xee,
+  0xf0,0xff,0x82,0xee,0xee,0xef,0xff,0x12,0x2d,0x2d,0x2d,0xff,0x00,0x00,0x00,
+  0xff,0xc9,0xc9,0x00,0xff,0xd2,0xda,0x47,0xff,0xd9,0xe6,0x7a,0xff,0xdc,0xed,
+  0x97,0xff,0xde,0xef,0xa0,0xff,0xdd,0xee,0x99,0xff,0xda,0xe9,0x86,0xff,0xd7,
+  0xe3,0x6b,0xff,0xd3,0xdb,0x4b,0xff,0xce,0xd2,0x27,0xff,0x00,0x00,0x00,0xff,
+  0xf5,0xf5,0xf5,0xff,0xe7,0xe7,0xea,0xff,0xe7,0xe7,0xe9,0xff,0xe6,0xe6,0xe9,
+  0xff,0xe6,0xe6,0xe8,0xff,0x82,0xe5,0xe5,0xe8,0xff,0x85,0xe4,0xe4,0xe7,0xff,
+  0x0c,0xe4,0xe4,0xe7,0xfd,0xe4,0xe4,0xe7,0xf8,0xe4,0xe4,0xe7,0xef,0xe4,0xe4,
+  0xe7,0xe3,0xe4,0xe4,0xe7,0xd4,0xe4,0xe4,0xe7,0xc1,0xe4,0xe4,0xe7,0xaa,0xe4,
+  0xe4,0xe7,0x90,0xe4,0xe4,0xe7,0x73,0xe4,0xe4,0xe7,0x52,0xe4,0xe4,0xe7,0x2e,
+  0xe4,0xe4,0xe7,0x08,0x83,0x00,0x00,0x00,0x00,0x3e,0xf7,0xf7,0xf9,0xff,0xea,
+  0xea,0xee,0xff,0xf3,0xf3,0xf6,0xff,0x98,0x98,0x98,0xff,0xb3,0xb3,0xba,0xff,
+  0xbb,0xbb,0xc2,0xff,0xc3,0xc3,0xca,0xff,0xcb,0xcb,0xd1,0xff,0x5f,0x5f,0x61,
+  0xff,0x9d,0x9d,0x9e,0xff,0xac,0xac,0xad,0xff,0x78,0x78,0x79,0xff,0xc4,0xc3,
+  0xc6,0xff,0x9f,0x9b,0x9d,0xff,0xc7,0xc7,0xc8,0xff,0xf3,0xf3,0xf4,0xff,0x6b,
+  0x6b,0x6b,0xff,0xa4,0xa4,0xa4,0xff,0xb0,0xb0,0xb0,0xff,0x7b,0x7b,0x7b,0xff,
+  0xc8,0xc8,0xc9,0xff,0xa1,0x9d,0x9e,0xff,0xc7,0xc6,0xc7,0xff,0xee,0xee,0xef,
+  0xff,0x68,0x68,0x68,0xff,0xa1,0xa1,0xa2,0xff,0xac,0xac,0xad,0xff,0x76,0x76,
+  0x77,0xff,0xbd,0xbd,0xc0,0xff,0x97,0x94,0x96,0xff,0xba,0xb9,0xbd,0xff,0xde,
+  0xde,0xe2,0xff,0x62,0x62,0x63,0xff,0x9b,0x9b,0x9d,0xff,0xa7,0xa7,0xa8,0xff,
+  0x6f,0x6f,0x72,0xff,0xac,0xac,0xb2,0xff,0x8a,0x86,0x8b,0xff,0xa8,0xa7,0xae,
+  0xff,0xc7,0xc7,0xd0,0xff,0xc4,0xc4,0xcd,0xff,0xc0,0xc0,0xca,0xff,0xbd,0xbd,
+  0xc7,0xff,0xb9,0xb9,0xc4,0xff,0x79,0x79,0x80,0xff,0xff,0xff,0xff,0xeb,0xff,
+  0xff,0xff,0xed,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xf3,
+  0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,
+  0xf9,0xff,0xff,0xff,0xfa,0xfd,0xfd,0xfd,0xfb,0xf9,0xf9,0xfa,0xfd,0xf6,0xf6,
+  0xf8,0xfe,0xf3,0xf3,0xf5,0xfe,0xef,0xef,0xf3,0xff,0xec,0xec,0xf0,0xff,0xe8,
+  0xe8,0xed,0xfe,0x82,0xe8,0xe8,0xed,0xff,0x02,0xe9,0xe9,0xed,0xff,0xe9,0xe9,
+  0xee,0xff,0x82,0xea,0xea,0xee,0xff,0x11,0xeb,0xeb,0xee,0xff,0xeb,0xeb,0xef,
+  0xff,0x3c,0x3c,0x3c,0xff,0x04,0x04,0x04,0xff,0x78,0x78,0x78,0xff,0x97,0x9d,
+  0x96,0xff,0xaa,0xb4,0xa8,0xff,0xb5,0xc2,0xb3,0xff,0xba,0xc8,0xb7,0xff,0xb8,
+  0xc6,0xb5,0xff,0xb2,0xbe,0xaf,0xff,0xa8,0xb2,0xa6,0xff,0x9c,0xa3,0x9a,0xff,
+  0x85,0x88,0x85,0xff,0x0e,0x0e,0x0e,0xff,0xff,0xff,0xff,0xff,0xf2,0xf2,0xf3,
+  0xff,0x82,0xf3,0xf3,0xf4,0xff,0x82,0xf4,0xf4,0xf4,0xff,0x87,0xf5,0xf5,0xf5,
+  0xff,0x0f,0xf4,0xf4,0xf5,0xff,0x3c,0x3c,0x3c,0xff,0x04,0x04,0x04,0xff,0x00,
+  0x90,0x00,0xff,0x35,0xb1,0x34,0xff,0x60,0xc3,0x5e,0xff,0x79,0xcf,0x76,0xff,
+  0x83,0xd3,0x80,0xff,0x7f,0xd1,0x7c,0xff,0x71,0xcb,0x6f,0xff,0x5c,0xc2,0x5a,
+  0xff,0x40,0xb5,0x3f,0xff,0x1e,0x9d,0x1d,0xff,0x0e,0x0e,0x0e,0xff,0xff,0xff,
+  0xff,0xff,0x82,0xf1,0xf1,0xf2,0xff,0x83,0xf0,0xf0,0xf1,0xff,0x83,0xef,0xef,
+  0xf0,0xff,0x01,0xee,0xee,0xf0,0xff,0x82,0xee,0xee,0xef,0xff,0x10,0xed,0xed,
+  0xef,0xff,0xed,0xed,0xee,0xff,0x3c,0x3c,0x3c,0xff,0x04,0x04,0x04,0xff,0xbd,
+  0xbd,0x00,0xff,0xd0,0xd5,0x34,0xff,0xd5,0xdf,0x5e,0xff,0xd8,0xe5,0x76,0xff,
+  0xd9,0xe8,0x80,0xff,0xd9,0xe7,0x7c,0xff,0xd7,0xe4,0x6f,0xff,0xd5,0xde,0x5a,
+  0xff,0xd1,0xd8,0x3f,0xff,0xc1,0xc4,0x1d,0xff,0x0e,0x0e,0x0e,0xff,0xff,0xff,
+  0xff,0xff,0x82,0xe6,0xe6,0xe9,0xff,0x82,0xe5,0xe5,0xe8,0xff,0x82,0xe4,0xe4,
+  0xe7,0xff,0x01,0xe3,0xe3,0xe6,0xff,0x84,0xe4,0xe4,0xe7,0xff,0x0c,0xe4,0xe4,
+  0xe7,0xfd,0xe4,0xe4,0xe7,0xf8,0xe4,0xe4,0xe7,0xef,0xe4,0xe4,0xe7,0xe3,0xe4,
+  0xe4,0xe7,0xd4,0xe4,0xe4,0xe7,0xc1,0xe4,0xe4,0xe7,0xaa,0xe4,0xe4,0xe7,0x90,
+  0xe4,0xe4,0xe7,0x73,0xe4,0xe4,0xe7,0x52,0xe4,0xe4,0xe7,0x2e,0xe4,0xe4,0xe7,
+  0x08,0x83,0x00,0x00,0x00,0x00,0x40,0xfb,0xfb,0xfc,0xff,0xfa,0xfa,0xfb,0xff,
+  0xfd,0xfd,0xfd,0xff,0x96,0x96,0x97,0xff,0xb6,0xb6,0xbc,0xff,0xbe,0xbe,0xc4,
+  0xff,0xc6,0xc6,0xcb,0xff,0xce,0xce,0xd3,0xff,0xbb,0xbb,0xbf,0xff,0x9f,0x9f,
+  0xa1,0xff,0xa8,0xa8,0xaa,0xff,0xd2,0xd2,0xd4,0xff,0x63,0x49,0x49,0xff,0xa6,
+  0x49,0x49,0xff,0x77,0x4a,0x4a,0xff,0xf5,0xf5,0xf5,0xff,0xd5,0xd5,0xd5,0xff,
+  0xac,0xac,0xac,0xff,0xae,0xae,0xae,0xff,0xd4,0xd4,0xd4,0xff,0x63,0x48,0x49,
+  0xff,0xa5,0x48,0x48,0xff,0x75,0x48,0x48,0xff,0xeb,0xeb,0xed,0xff,0xcb,0xcb,
+  0xcd,0xff,0xa3,0xa3,0xa5,0xff,0xa5,0xa5,0xa7,0xff,0xc7,0xc7,0xca,0xff,0x5e,
+  0x44,0x45,0xff,0xa0,0x43,0x45,0xff,0x70,0x42,0x44,0xff,0xd9,0xd9,0xdf,0xff,
+  0xbb,0xbb,0xc0,0xff,0x97,0x97,0x9b,0xff,0x98,0x98,0x9c,0xff,0xb5,0xb5,0xbb,
+  0xff,0x58,0x3d,0x40,0xff,0x99,0x3c,0x3f,0xff,0x69,0x3b,0x3e,0xff,0xc1,0xc1,
+  0xcb,0xff,0xbe,0xbe,0xc8,0xff,0xba,0xba,0xc5,0xff,0xb7,0xb7,0xc2,0xff,0xb3,
+  0xb3,0xbf,0xff,0x7b,0x7b,0x82,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xed,
+  0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,
+  0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,
+  0xff,0xfa,0xfd,0xfd,0xfd,0xfb,0xf9,0xf9,0xfb,0xfd,0xf6,0xf6,0xf8,0xfe,0xf3,
+  0xf3,0xf5,0xfe,0xf0,0xf0,0xf3,0xff,0xed,0xed,0xf1,0xff,0xe9,0xe9,0xed,0xfe,
+  0xe9,0xe9,0xee,0xff,0xe9,0xe9,0xed,0xff,0x82,0xea,0xea,0xee,0xff,0x02,0xeb,
+  0xeb,0xee,0xff,0xeb,0xeb,0xef,0xff,0x82,0xec,0xec,0xef,0xff,0x0f,0x7d,0x7d,
+  0x7e,0xff,0x22,0x22,0x22,0xff,0x40,0x40,0x40,0xff,0x8c,0x8f,0x8b,0xff,0x9c,
+  0xa3,0x9b,0xff,0xa6,0xb0,0xa4,0xff,0xab,0xb5,0xa8,0xff,0xaa,0xb5,0xa8,0xff,
+  0xa6,0xaf,0xa4,0xff,0x9e,0xa5,0x9c,0xff,0x94,0x99,0x93,0xff,0x44,0x45,0x44,
+  0xff,0x5f,0x5f,0x5f,0xff,0xfb,0xfb,0xfb,0xff,0xf3,0xf3,0xf4,0xff,0x82,0xf4,
+  0xf4,0xf4,0xff,0x01,0xf4,0xf4,0xf5,0xff,0x86,0xf5,0xf5,0xf5,0xff,0x01,0xf4,
+  0xf4,0xf5,0xff,0x82,0xf4,0xf4,0xf4,0xff,0x0f,0x7f,0x7f,0x7f,0xff,0x22,0x22,
+  0x22,0xff,0x00,0x4d,0x00,0xff,0x1c,0xa5,0x1b,0xff,0x41,0xb6,0x3f,0xff,0x57,
+  0xc0,0x55,0xff,0x61,0xc4,0x5f,0xff,0x60,0xc4,0x5e,0xff,0x56,0xbf,0x54,0xff,
+  0x45,0xb8,0x44,0xff,0x2e,0xad,0x2d,0xff,0x09,0x51,0x09,0xff,0x5f,0x5f,0x5f,
+  0xff,0xfb,0xfb,0xfb,0xff,0xf1,0xf1,0xf1,0xff,0x83,0xf0,0xf0,0xf1,0xff,0x82,
+  0xef,0xef,0xf0,0xff,0x01,0xee,0xee,0xf0,0xff,0x82,0xee,0xee,0xef,0xff,0x01,
+  0xed,0xed,0xef,0xff,0x82,0xed,0xed,0xee,0xff,0x0f,0xec,0xec,0xee,0xff,0x7d,
+  0x7d,0x7d,0xff,0x22,0x22,0x22,0xff,0x65,0x65,0x00,0xff,0xcd,0xd0,0x1b,0xff,
+  0xd1,0xd8,0x3f,0xff,0xd4,0xde,0x55,0xff,0xd5,0xe0,0x5f,0xff,0xd5,0xe0,0x5e,
+  0xff,0xd4,0xdd,0x54,0xff,0xd2,0xd9,0x44,0xff,0xcf,0xd4,0x2d,0xff,0x66,0x67,
+  0x09,0xff,0x5f,0x5f,0x5f,0xff,0xf7,0xf7,0xf8,0xff,0x82,0xe5,0xe5,0xe8,0xff,
+  0x82,0xe4,0xe4,0xe7,0xff,0x03,0xe3,0xe3,0xe7,0xff,0xe3,0xe3,0xe6,0xff,0xe2,
+  0xe2,0xe6,0xff,0x84,0xe4,0xe4,0xe7,0xff,0x0c,0xe4,0xe4,0xe7,0xfd,0xe4,0xe4,
+  0xe7,0xf8,0xe4,0xe4,0xe7,0xef,0xe4,0xe4,0xe7,0xe3,0xe4,0xe4,0xe7,0xd4,0xe4,
+  0xe4,0xe7,0xc1,0xe4,0xe4,0xe7,0xaa,0xe4,0xe4,0xe7,0x90,0xe4,0xe4,0xe7,0x73,
+  0xe4,0xe4,0xe7,0x52,0xe4,0xe4,0xe7,0x2e,0xe4,0xe4,0xe7,0x08,0x83,0x00,0x00,
+  0x00,0x00,0x3e,0xff,0xff,0xff,0xff,0xfa,0xfa,0xfb,0xff,0xf2,0xf2,0xf5,0xff,
+  0x90,0x90,0x93,0xff,0xb9,0xb9,0xbe,0xff,0xc1,0xc1,0xc5,0xff,0xc9,0xc9,0xcd,
+  0xff,0xd1,0xd1,0xd5,0xff,0xda,0xda,0xdd,0xff,0xe3,0xe3,0xe5,0xff,0xec,0xec,
+  0xed,0xff,0xf2,0xf2,0xf3,0xff,0x74,0x54,0x55,0xff,0xb4,0x4a,0x4a,0xff,0x8a,
+  0x55,0x55,0xff,0xf4,0xf4,0xf4,0xff,0xf3,0xf3,0xf3,0xff,0xf2,0xf2,0xf2,0xff,
+  0xf0,0xf0,0xf1,0xff,0xef,0xef,0xf0,0xff,0x72,0x52,0x52,0xff,0xb2,0x47,0x48,
+  0xff,0x87,0x51,0x52,0xff,0xe8,0xe8,0xea,0xff,0xe6,0xe6,0xe9,0xff,0xe4,0xe4,
+  0xe7,0xff,0xe2,0xe2,0xe5,0xff,0xdf,0xdf,0xe3,0xff,0x6c,0x4c,0x4e,0xff,0xac,
+  0x42,0x43,0xff,0x80,0x4a,0x4c,0xff,0xd5,0xd5,0xdb,0xff,0xd2,0xd2,0xd8,0xff,
+  0xcf,0xcf,0xd6,0xff,0xcc,0xcc,0xd3,0xff,0xc9,0xc9,0xd1,0xff,0x64,0x44,0x48,
+  0xff,0xa5,0x3b,0x3e,0xff,0x78,0x42,0x45,0xff,0xbb,0xbb,0xc6,0xff,0xb8,0xb8,
+  0xc3,0xff,0xb4,0xb4,0xc0,0xff,0xb0,0xb0,0xbd,0xff,0xa2,0xa2,0xae,0xff,0x7d,
+  0x7d,0x84,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xed,0xff,0xff,0xff,0xef,
+  0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,
+  0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xfa,0xfd,0xfd,
+  0xfe,0xfb,0xf9,0xf9,0xfb,0xfd,0xf6,0xf6,0xf8,0xfe,0xf3,0xf3,0xf6,0xfe,0xf1,
+  0xf1,0xf3,0xff,0xee,0xee,0xf1,0xff,0xea,0xea,0xee,0xfe,0x83,0xea,0xea,0xee,
+  0xff,0x82,0xeb,0xeb,0xef,0xff,0x82,0xec,0xec,0xef,0xff,0x11,0xed,0xed,0xf0,
+  0xff,0xc8,0xc8,0xcb,0xff,0x5d,0x5d,0x5d,0xff,0x07,0x07,0x07,0xff,0x68,0x68,
+  0x68,0xff,0x8e,0x91,0x8d,0xff,0x97,0x9d,0x96,0xff,0x9c,0xa3,0x9a,0xff,0x9c,
+  0xa3,0x9b,0xff,0x99,0x9f,0x98,0xff,0x93,0x97,0x92,0xff,0x71,0x72,0x70,0xff,
+  0x0f,0x0f,0x0f,0xff,0xdf,0xdf,0xdf,0xff,0xf6,0xf6,0xf7,0xff,0xf4,0xf4,0xf4,
+  0xff,0xf4,0xf4,0xf5,0xff,0x87,0xf5,0xf5,0xf5,0xff,0x01,0xf4,0xf4,0xf5,0xff,
+  0x83,0xf4,0xf4,0xf4,0xff,0x0e,0xce,0xce,0xce,0xff,0x5d,0x5d,0x5d,0xff,0x07,
+  0x07,0x07,0xff,0x00,0x7d,0x00,0xff,0x21,0xa8,0x20,0xff,0x36,0xb1,0x34,0xff,
+  0x40,0xb5,0x3f,0xff,0x41,0xb6,0x40,0xff,0x3a,0xb3,0x39,0xff,0x2c,0xac,0x2b,
+  0xff,0x14,0x86,0x14,0xff,0x0f,0x0f,0x0f,0xff,0xdf,0xdf,0xdf,0xff,0xf4,0xf4,
+  0xf5,0xff,0x82,0xf0,0xf0,0xf1,0xff,0x83,0xef,0xef,0xf0,0xff,0x82,0xee,0xee,
+  0xef,0xff,0x82,0xed,0xed,0xef,0xff,0x01,0xed,0xed,0xee,0xff,0x82,0xec,0xec,
+  0xee,0xff,0x16,0xeb,0xeb,0xed,0xff,0xc7,0xc7,0xc8,0xff,0x5d,0x5d,0x5d,0xff,
+  0x07,0x07,0x07,0xff,0xa4,0xa4,0x00,0xff,0xcd,0xd1,0x20,0xff,0xd0,0xd6,0x34,
+  0xff,0xd1,0xd8,0x3f,0xff,0xd1,0xd8,0x40,0xff,0xd0,0xd7,0x39,0xff,0xcf,0xd3,
+  0x2b,0xff,0xa6,0xa9,0x14,0xff,0x0f,0x0f,0x0f,0xff,0xdf,0xdf,0xdf,0xff,0xec,
+  0xec,0xee,0xff,0xe4,0xe4,0xe8,0xff,0xe4,0xe4,0xe7,0xff,0xe3,0xe3,0xe7,0xff,
+  0xe3,0xe3,0xe6,0xff,0xe2,0xe2,0xe6,0xff,0xe2,0xe2,0xe5,0xff,0xe1,0xe1,0xe5,
+  0xff,0x84,0xe2,0xe2,0xe6,0xff,0x0c,0xe2,0xe2,0xe6,0xfd,0xe2,0xe2,0xe6,0xf8,
+  0xe2,0xe2,0xe6,0xef,0xe2,0xe2,0xe6,0xe3,0xe2,0xe2,0xe6,0xd4,0xe2,0xe2,0xe6,
+  0xc1,0xe2,0xe2,0xe6,0xaa,0xe2,0xe2,0xe6,0x90,0xe2,0xe2,0xe6,0x73,0xe2,0xe2,
+  0xe6,0x52,0xe2,0xe2,0xe6,0x2e,0xe2,0xe2,0xe6,0x08,0x83,0x00,0x00,0x00,0x00,
+  0x3e,0xfc,0xfc,0xfd,0xff,0xeb,0xeb,0xf0,0xff,0xe0,0xe0,0xe7,0xff,0x88,0x88,
+  0x8c,0xff,0xbc,0xbc,0xc0,0xff,0xc4,0xc4,0xc7,0xff,0xcc,0xcc,0xcf,0xff,0xd5,
+  0xd5,0xd7,0xff,0xdd,0xdd,0xdf,0xff,0xe6,0xe6,0xe7,0xff,0xef,0xef,0xf0,0xff,
+  0xf5,0xf5,0xf5,0xff,0xe0,0xdf,0xdf,0xff,0xd1,0xc9,0xca,0xff,0xe0,0xde,0xde,
+  0xff,0xf2,0xf2,0xf3,0xff,0xf1,0xf1,0xf2,0xff,0xf0,0xf0,0xf1,0xff,0xee,0xee,
+  0xef,0xff,0xec,0xec,0xee,0xff,0xd7,0xd6,0xd8,0xff,0xc7,0xc0,0xc2,0xff,0xd4,
+  0xd2,0xd5,0xff,0xe5,0xe5,0xe8,0xff,0xe2,0xe2,0xe6,0xff,0xe0,0xe0,0xe4,0xff,
+  0xdd,0xdd,0xe2,0xff,0xdb,0xdb,0xe0,0xff,0xc6,0xc5,0xca,0xff,0xb7,0xb0,0xb5,
+  0xff,0xc2,0xc0,0xc6,0xff,0xd0,0xd0,0xd7,0xff,0xcd,0xcd,0xd4,0xff,0xca,0xca,
+  0xd2,0xff,0xc6,0xc6,0xcf,0xff,0xc3,0xc3,0xcc,0xff,0xaf,0xaf,0xb8,0xff,0xa2,
+  0x9b,0xa4,0xff,0xaa,0xa8,0xb3,0xff,0xb5,0xb5,0xc1,0xff,0xb1,0xb1,0xbe,0xff,
+  0xa0,0xa0,0xaa,0xff,0x8e,0x8e,0x95,0xff,0x87,0x87,0x8c,0xff,0xa5,0xa5,0xa9,
+  0xfc,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xed,0xff,0xff,0xff,0xef,0xff,0xff,
+  0xff,0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xf6,0xff,
+  0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xfa,0xfd,0xfd,0xfe,0xfb,
+  0xfa,0xfa,0xfb,0xfd,0xf7,0xf7,0xf8,0xfe,0xf4,0xf4,0xf6,0xfe,0xf1,0xf1,0xf4,
+  0xff,0xef,0xef,0xf2,0xff,0xea,0xea,0xee,0xfe,0x83,0xeb,0xeb,0xef,0xff,0x82,
+  0xec,0xec,0xef,0xff,0x82,0xed,0xed,0xf0,0xff,0x0f,0xee,0xee,0xf0,0xff,0xee,
+  0xee,0xf1,0xff,0xad,0xad,0xae,0xff,0x6f,0x6f,0x6f,0xff,0x09,0x09,0x09,0xff,
+  0x40,0x40,0x40,0xff,0x80,0x82,0x7f,0xff,0x8d,0x90,0x8c,0xff,0x8e,0x91,0x8d,
+  0xff,0x83,0x86,0x83,0xff,0x43,0x44,0x43,0xff,0x0f,0x0f,0x0f,0xff,0xcf,0xcf,
+  0xcf,0xff,0xfa,0xfa,0xfa,0xff,0xf4,0xf4,0xf5,0xff,0x87,0xf5,0xf5,0xf5,0xff,
+  0x01,0xf4,0xf4,0xf5,0xff,0x85,0xf4,0xf4,0xf4,0xff,0x0e,0xf3,0xf3,0xf4,0xff,
+  0xaf,0xaf,0xaf,0xff,0x6f,0x6f,0x6f,0xff,0x09,0x09,0x09,0xff,0x00,0x4d,0x00,
+  0xff,0x13,0x98,0x12,0xff,0x1e,0xa6,0x1e,0xff,0x21,0xa8,0x20,0xff,0x1a,0x9b,
+  0x19,0xff,0x09,0x50,0x08,0xff,0x0f,0x0f,0x0f,0xff,0xcf,0xcf,0xcf,0xff,0xf8,
+  0xf8,0xf9,0xff,0xf0,0xf0,0xf1,0xff,0x83,0xef,0xef,0xf0,0xff,0x01,0xee,0xee,
+  0xf0,0xff,0x82,0xee,0xee,0xef,0xff,0x02,0xed,0xed,0xef,0xff,0xed,0xed,0xee,
+  0xff,0x82,0xec,0xec,0xee,0xff,0x01,0xec,0xec,0xed,0xff,0x82,0xeb,0xeb,0xed,
+  0xff,0x0d,0xea,0xea,0xec,0xff,0xab,0xab,0xac,0xff,0x6f,0x6f,0x6f,0xff,0x09,
+  0x09,0x09,0xff,0x65,0x65,0x00,0xff,0xc0,0xc2,0x12,0xff,0xcd,0xd0,0x1e,0xff,
+  0xcd,0xd1,0x20,0xff,0xc0,0xc4,0x19,0xff,0x66,0x67,0x08,0xff,0x0f,0x0f,0x0f,
+  0xff,0xcf,0xcf,0xcf,0xff,0xf4,0xf4,0xf5,0xff,0x82,0xe4,0xe4,0xe7,0xff,0x01,
+  0xe3,0xe3,0xe6,0xff,0x82,0xe2,0xe2,0xe6,0xff,0x82,0xe1,0xe1,0xe5,0xff,0x01,
+  0xe0,0xe0,0xe4,0xff,0x84,0xe2,0xe2,0xe6,0xff,0x0c,0xe2,0xe2,0xe6,0xfd,0xe2,
+  0xe2,0xe6,0xf8,0xe2,0xe2,0xe6,0xef,0xe2,0xe2,0xe6,0xe3,0xe2,0xe2,0xe6,0xd4,
+  0xe2,0xe2,0xe6,0xc1,0xe2,0xe2,0xe6,0xaa,0xe2,0xe2,0xe6,0x90,0xe2,0xe2,0xe6,
+  0x73,0xe2,0xe2,0xe6,0x52,0xe2,0xe2,0xe6,0x2e,0xe2,0xe2,0xe6,0x08,0x83,0x00,
+  0x00,0x00,0x00,0x0b,0xf8,0xf8,0xfa,0xff,0x88,0x88,0x8c,0xff,0x81,0x81,0x87,
+  0xff,0x7e,0x7e,0x84,0xff,0x8a,0x8a,0x90,0xff,0x8d,0x8d,0x93,0xff,0x90,0x90,
+  0x96,0xff,0x93,0x93,0x98,0xff,0x96,0x96,0x9b,0xff,0x9a,0x9a,0x9e,0xff,0x9d,
+  0x9d,0xa1,0xff,0x82,0x9f,0x9f,0xa3,0xff,0x03,0xa0,0xa0,0xa4,0xff,0xa1,0xa1,
+  0xa5,0xff,0xa2,0xa2,0xa5,0xff,0x82,0xa3,0xa3,0xa6,0xff,0x82,0xa4,0xa4,0xa7,
+  0xff,0x02,0xa5,0xa5,0xa7,0xff,0xa5,0xa5,0xa8,0xff,0x82,0xa6,0xa6,0xa8,0xff,
+  0x82,0xa7,0xa7,0xa9,0xff,0x83,0xa8,0xa8,0xa9,0xff,0x21,0xa7,0xa7,0xa9,0xff,
+  0xa6,0xa6,0xa8,0xff,0xa4,0xa4,0xa7,0xff,0xa3,0xa3,0xa6,0xff,0xa1,0xa1,0xa4,
+  0xff,0xa0,0xa0,0xa3,0xff,0x9e,0x9e,0xa1,0xff,0x9c,0x9c,0xa0,0xff,0x9a,0x9a,
+  0x9e,0xff,0x98,0x98,0x9d,0xff,0x95,0x95,0x9b,0xff,0x93,0x93,0x98,0xff,0xaa,
+  0xaa,0xac,0xfa,0xcd,0xcd,0xcf,0xf2,0xff,0xff,0xff,0xe6,0xff,0xff,0xff,0xe8,
+  0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xed,0xff,0xff,0xff,0xef,0xff,0xff,0xff,
+  0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,
+  0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xfa,0xfd,0xfd,0xfe,0xfb,0xfa,
+  0xfa,0xfb,0xfd,0xf7,0xf7,0xf9,0xfe,0xf4,0xf4,0xf6,0xfe,0xf1,0xf1,0xf4,0xff,
+  0xef,0xef,0xf2,0xff,0xeb,0xeb,0xef,0xfe,0x83,0xec,0xec,0xef,0xff,0x83,0xed,
+  0xed,0xf0,0xff,0x82,0xee,0xee,0xf1,0xff,0x82,0xef,0xef,0xf1,0xff,0x04,0xbe,
+  0xbe,0xbf,0xff,0x93,0x93,0x93,0xff,0x44,0x44,0x44,0xff,0x0c,0x0c,0x0c,0xff,
+  0x82,0x00,0x00,0x00,0xff,0x04,0x0e,0x0e,0x0e,0xff,0x5f,0x5f,0x5f,0xff,0xdf,
+  0xdf,0xdf,0xff,0xfa,0xfa,0xfa,0xff,0x87,0xf5,0xf5,0xf5,0xff,0x01,0xf4,0xf4,
+  0xf5,0xff,0x85,0xf4,0xf4,0xf4,0xff,0x82,0xf3,0xf3,0xf4,0xff,0x82,0xf3,0xf3,
+  0xf3,0xff,0x04,0xbf,0xbf,0xc0,0xff,0x93,0x93,0x93,0xff,0x44,0x44,0x44,0xff,
+  0x0c,0x0c,0x0c,0xff,0x82,0x00,0x00,0x00,0xff,0x05,0x0e,0x0e,0x0e,0xff,0x5f,
+  0x5f,0x5f,0xff,0xdf,0xdf,0xdf,0xff,0xf8,0xf8,0xf9,0xff,0xef,0xef,0xf1,0xff,
+  0x82,0xef,0xef,0xf0,0xff,0x01,0xee,0xee,0xf0,0xff,0x82,0xee,0xee,0xef,0xff,
+  0x01,0xed,0xed,0xef,0xff,0x82,0xed,0xed,0xee,0xff,0x02,0xec,0xec,0xee,0xff,
+  0xec,0xec,0xed,0xff,0x82,0xeb,0xeb,0xed,0xff,0x83,0xea,0xea,0xec,0xff,0x05,
+  0xe9,0xe9,0xeb,0xff,0xbb,0xbb,0xbc,0xff,0x93,0x93,0x93,0xff,0x44,0x44,0x44,
+  0xff,0x0c,0x0c,0x0c,0xff,0x82,0x00,0x00,0x00,0xff,0x05,0x0e,0x0e,0x0e,0xff,
+  0x5f,0x5f,0x5f,0xff,0xdf,0xdf,0xdf,0xff,0xf3,0xf3,0xf5,0xff,0xe4,0xe4,0xe7,
+  0xff,0x82,0xe3,0xe3,0xe6,0xff,0x03,0xe2,0xe2,0xe6,0xff,0xe2,0xe2,0xe5,0xff,
+  0xe1,0xe1,0xe5,0xff,0x82,0xe0,0xe0,0xe4,0xff,0x01,0xdf,0xdf,0xe3,0xff,0x84,
+  0xe2,0xe2,0xe6,0xff,0x0c,0xe2,0xe2,0xe6,0xfd,0xe2,0xe2,0xe6,0xf8,0xe2,0xe2,
+  0xe6,0xef,0xe2,0xe2,0xe6,0xe3,0xe2,0xe2,0xe6,0xd4,0xe2,0xe2,0xe6,0xc1,0xe2,
+  0xe2,0xe6,0xaa,0xe2,0xe2,0xe6,0x90,0xe2,0xe2,0xe6,0x73,0xe2,0xe2,0xe6,0x52,
+  0xe2,0xe2,0xe6,0x2e,0xe2,0xe2,0xe6,0x08,0x86,0x00,0x00,0x00,0x00,0x01,0xff,
+  0xff,0xff,0x04,0x82,0xff,0xff,0xff,0x06,0x38,0xff,0xff,0xff,0x0c,0xff,0xff,
+  0xff,0x12,0xff,0xff,0xff,0x14,0xff,0xff,0xff,0x19,0xff,0xff,0xff,0x25,0xff,
+  0xff,0xff,0x2a,0xff,0xff,0xff,0x2c,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0x46,
+  0xff,0xff,0xff,0x4b,0xff,0xff,0xff,0x5a,0xff,0xff,0xff,0x68,0xff,0xff,0xff,
+  0x6e,0xff,0xff,0xff,0x74,0xff,0xff,0xff,0x7a,0xff,0xff,0xff,0x81,0xff,0xff,
+  0xff,0x87,0xff,0xff,0xff,0x8c,0xff,0xff,0xff,0x93,0xff,0xff,0xff,0x98,0xff,
+  0xff,0xff,0x9e,0xff,0xff,0xff,0xa3,0xff,0xff,0xff,0xa9,0xff,0xff,0xff,0xae,
+  0xff,0xff,0xff,0xb3,0xff,0xff,0xff,0xb9,0xff,0xff,0xff,0xbd,0xff,0xff,0xff,
+  0xc2,0xff,0xff,0xff,0xc6,0xff,0xff,0xff,0xca,0xff,0xff,0xff,0xcf,0xff,0xff,
+  0xff,0xd2,0xff,0xff,0xff,0xd6,0xff,0xff,0xff,0xd9,0xff,0xff,0xff,0xdd,0xff,
+  0xff,0xff,0xe0,0xff,0xff,0xff,0xe3,0xff,0xff,0xff,0xe6,0xff,0xff,0xff,0xe8,
+  0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xed,0xff,0xff,0xff,0xef,0xff,0xff,0xff,
+  0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,
+  0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xfa,0xfd,0xfd,0xfe,0xfb,0xfa,
+  0xfa,0xfb,0xfd,0xf7,0xf7,0xf9,0xfe,0xf5,0xf5,0xf6,0xfe,0xf2,0xf2,0xf5,0xff,
+  0xf0,0xf0,0xf3,0xff,0xec,0xec,0xef,0xfe,0x82,0xec,0xec,0xf0,0xff,0x82,0xed,
+  0xed,0xf0,0xff,0x02,0xee,0xee,0xf0,0xff,0xee,0xee,0xf1,0xff,0x82,0xef,0xef,
+  0xf1,0xff,0x82,0xf0,0xf0,0xf2,0xff,0x09,0xf1,0xf1,0xf2,0xff,0xe2,0xe2,0xe4,
+  0xff,0xd4,0xd4,0xd5,0xff,0xd6,0xd6,0xd6,0xff,0xe5,0xe5,0xe5,0xff,0xf5,0xf5,
+  0xf5,0xff,0xff,0xff,0xff,0xff,0xfc,0xfc,0xfc,0xff,0xf7,0xf7,0xf8,0xff,0x87,
+  0xf5,0xf5,0xf5,0xff,0x85,0xf4,0xf4,0xf4,0xff,0x82,0xf3,0xf3,0xf4,0xff,0x83,
+  0xf3,0xf3,0xf3,0xff,0x82,0xf2,0xf2,0xf3,0xff,0x08,0xe3,0xe3,0xe3,0xff,0xd4,
+  0xd4,0xd4,0xff,0xd6,0xd6,0xd6,0xff,0xe5,0xe5,0xe5,0xff,0xf5,0xf5,0xf5,0xff,
+  0xff,0xff,0xff,0xff,0xfa,0xfa,0xfb,0xff,0xf4,0xf4,0xf5,0xff,0x83,0xef,0xef,
+  0xf0,0xff,0x82,0xee,0xee,0xef,0xff,0x82,0xed,0xed,0xef,0xff,0x01,0xed,0xed,
+  0xee,0xff,0x82,0xec,0xec,0xee,0xff,0x82,0xeb,0xeb,0xed,0xff,0x01,0xeb,0xeb,
+  0xec,0xff,0x82,0xea,0xea,0xec,0xff,0x82,0xe9,0xe9,0xeb,0xff,0x11,0xe8,0xe8,
+  0xeb,0xff,0xe8,0xe8,0xea,0xff,0xdb,0xdb,0xdd,0xff,0xd1,0xd1,0xd2,0xff,0xd6,
+  0xd6,0xd6,0xff,0xe5,0xe5,0xe5,0xff,0xf5,0xf5,0xf5,0xff,0xff,0xff,0xff,0xff,
+  0xf7,0xf7,0xf8,0xff,0xeb,0xeb,0xed,0xff,0xe3,0xe3,0xe7,0xff,0xe3,0xe3,0xe6,
+  0xff,0xe2,0xe2,0xe6,0xff,0xe2,0xe2,0xe5,0xff,0xe1,0xe1,0xe5,0xff,0xe1,0xe1,
+  0xe4,0xff,0xe0,0xe0,0xe4,0xff,0x82,0xdf,0xdf,0xe3,0xff,0x01,0xde,0xde,0xe3,
+  0xff,0x84,0xdf,0xdf,0xe3,0xff,0x0c,0xdf,0xdf,0xe3,0xfd,0xdf,0xdf,0xe3,0xf8,
+  0xdf,0xdf,0xe3,0xef,0xdf,0xdf,0xe3,0xe3,0xdf,0xdf,0xe3,0xd4,0xdf,0xdf,0xe3,
+  0xc1,0xdf,0xdf,0xe3,0xaa,0xdf,0xdf,0xe3,0x90,0xdf,0xdf,0xe3,0x73,0xdf,0xdf,
+  0xe3,0x52,0xdf,0xdf,0xe3,0x2e,0xdf,0xdf,0xe3,0x08,0x96,0x00,0x00,0x00,0x00,
+  0x2b,0xff,0xff,0xff,0x08,0xff,0xff,0xff,0x1b,0xff,0xff,0xff,0x1d,0xff,0xff,
+  0xff,0x1f,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0x43,0xff,0xff,0xff,0x45,0xff,
+  0xff,0xff,0x5f,0xff,0xff,0xff,0x6b,0xff,0xff,0xff,0x70,0xff,0xff,0xff,0x81,
+  0xff,0xff,0xff,0x98,0xff,0xff,0xff,0x9d,0xff,0xff,0xff,0xa4,0xff,0xff,0xff,
+  0xc2,0xff,0xff,0xff,0xc6,0xff,0xff,0xff,0xca,0xff,0xff,0xff,0xcf,0xff,0xff,
+  0xff,0xd2,0xff,0xff,0xff,0xd6,0xff,0xff,0xff,0xd9,0xff,0xff,0xff,0xdd,0xff,
+  0xff,0xff,0xe0,0xff,0xff,0xff,0xe3,0xff,0xff,0xff,0xe6,0xff,0xff,0xff,0xe8,
+  0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xed,0xff,0xff,0xff,0xef,0xff,0xff,0xff,
+  0xf1,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,
+  0xff,0xf8,0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xfa,0xfd,0xfd,0xfe,0xfb,0xfa,
+  0xfa,0xfb,0xfd,0xf8,0xf8,0xf9,0xfe,0xf5,0xf5,0xf7,0xfe,0xf3,0xf3,0xf5,0xff,
+  0xf0,0xf0,0xf3,0xff,0xed,0xed,0xf0,0xfe,0x82,0xed,0xed,0xf0,0xff,0x02,0xee,
+  0xee,0xf0,0xff,0xee,0xee,0xf1,0xff,0x82,0xef,0xef,0xf1,0xff,0x82,0xf0,0xf0,
+  0xf2,0xff,0x82,0xf1,0xf1,0xf2,0xff,0x01,0xf1,0xf1,0xf3,0xff,0x82,0xf2,0xf2,
+  0xf3,0xff,0x82,0xf3,0xf3,0xf4,0xff,0x02,0xf4,0xf4,0xf4,0xff,0xf4,0xf4,0xf5,
+  0xff,0x87,0xf5,0xf5,0xf5,0xff,0x01,0xf4,0xf4,0xf5,0xff,0x85,0xf4,0xf4,0xf4,
+  0xff,0x01,0xf3,0xf3,0xf4,0xff,0x83,0xf3,0xf3,0xf3,0xff,0x82,0xf2,0xf2,0xf3,
+  0xff,0x82,0xf2,0xf2,0xf2,0xff,0x82,0xf1,0xf1,0xf2,0xff,0x01,0xf1,0xf1,0xf1,
+  0xff,0x83,0xf0,0xf0,0xf1,0xff,0x83,0xef,0xef,0xf0,0xff,0x01,0xee,0xee,0xf0,
+  0xff,0x82,0xee,0xee,0xef,0xff,0x02,0xed,0xed,0xef,0xff,0xed,0xed,0xee,0xff,
+  0x82,0xec,0xec,0xee,0xff,0x01,0xec,0xec,0xed,0xff,0x82,0xeb,0xeb,0xed,0xff,
+  0x82,0xea,0xea,0xec,0xff,0x04,0xe9,0xe9,0xec,0xff,0xe9,0xe9,0xeb,0xff,0xe8,
+  0xe8,0xeb,0xff,0xe8,0xe8,0xea,0xff,0x82,0xe7,0xe7,0xea,0xff,0x02,0xe7,0xe7,
+  0xe9,0xff,0xe6,0xe6,0xe9,0xff,0x82,0xe5,0xe5,0xe8,0xff,0x06,0xe4,0xe4,0xe8,
+  0xff,0xe4,0xe4,0xe7,0xff,0xe3,0xe3,0xe7,0xff,0xe3,0xe3,0xe6,0xff,0xe2,0xe2,
+  0xe6,0xff,0xe2,0xe2,0xe5,0xff,0x82,0xe1,0xe1,0xe5,0xff,0x82,0xe0,0xe0,0xe4,
+  0xff,0x04,0xdf,0xdf,0xe3,0xff,0xde,0xde,0xe3,0xff,0xde,0xde,0xe2,0xff,0xdd,
+  0xdd,0xe2,0xff,0x84,0xdf,0xdf,0xe3,0xff,0x0c,0xdf,0xdf,0xe3,0xfd,0xdf,0xdf,
+  0xe3,0xf8,0xdf,0xdf,0xe3,0xef,0xdf,0xdf,0xe3,0xe3,0xdf,0xdf,0xe3,0xd4,0xdf,
+  0xdf,0xe3,0xc1,0xdf,0xdf,0xe3,0xaa,0xdf,0xdf,0xe3,0x90,0xdf,0xdf,0xe3,0x73,
+  0xdf,0xdf,0xe3,0x52,0xdf,0xdf,0xe3,0x2e,0xdf,0xdf,0xe3,0x08,0xa7,0x00,0x00,
+  0x00,0x00,0x1b,0xff,0xff,0xff,0x2e,0xff,0xff,0xff,0x38,0xff,0xff,0xff,0x3a,
+  0xff,0xff,0xff,0x57,0xff,0xff,0xff,0x71,0xff,0xff,0xff,0x73,0xff,0xff,0xff,
+  0x81,0xff,0xff,0xff,0xa7,0xff,0xff,0xff,0xa9,0xff,0xff,0xff,0xad,0xff,0xff,
+  0xff,0xd2,0xff,0xff,0xff,0xd7,0xff,0xff,0xff,0xd9,0xff,0xff,0xff,0xec,0xff,
+  0xff,0xff,0xf5,0xff,0xff,0xff,0xf6,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xf9,
+  0xff,0xff,0xff,0xfa,0xfd,0xfd,0xfe,0xfb,0xfa,0xfa,0xfb,0xfd,0xf8,0xf8,0xf9,
+  0xfe,0xf5,0xf5,0xf7,0xfe,0xf3,0xf3,0xf5,0xff,0xf1,0xf1,0xf3,0xff,0xef,0xef,
+  0xf0,0xfe,0xee,0xee,0xf1,0xff,0x82,0xef,0xef,0xf1,0xff,0x83,0xf0,0xf0,0xf2,
+  0xff,0x02,0xf1,0xf1,0xf2,0xff,0xf1,0xf1,0xf3,0xff,0x82,0xf2,0xf2,0xf3,0xff,
+  0x82,0xf3,0xf3,0xf4,0xff,0x02,0xf4,0xf4,0xf4,0xff,0xf4,0xf4,0xf5,0xff,0x87,
+  0xf5,0xf5,0xf5,0xff,0x01,0xf4,0xf4,0xf5,0xff,0x85,0xf4,0xf4,0xf4,0xff,0x01,
+  0xf3,0xf3,0xf4,0xff,0x83,0xf3,0xf3,0xf3,0xff,0x82,0xf2,0xf2,0xf3,0xff,0x82,
+  0xf2,0xf2,0xf2,0xff,0x83,0xf1,0xf1,0xf2,0xff,0x83,0xf0,0xf0,0xf1,0xff,0x83,
+  0xef,0xef,0xf0,0xff,0x01,0xee,0xee,0xf0,0xff,0x82,0xee,0xee,0xef,0xff,0x02,
+  0xed,0xed,0xef,0xff,0xed,0xed,0xee,0xff,0x82,0xec,0xec,0xee,0xff,0x01,0xec,
+  0xec,0xed,0xff,0x82,0xeb,0xeb,0xed,0xff,0x82,0xea,0xea,0xec,0xff,0x01,0xe9,
+  0xe9,0xec,0xff,0x82,0xe9,0xe9,0xeb,0xff,0x04,0xe8,0xe8,0xeb,0xff,0xe8,0xe8,
+  0xea,0xff,0xe7,0xe7,0xea,0xff,0xe7,0xe7,0xe9,0xff,0x82,0xe6,0xe6,0xe9,0xff,
+  0x82,0xe5,0xe5,0xe8,0xff,0x82,0xe4,0xe4,0xe7,0xff,0x82,0xe3,0xe3,0xe6,0xff,
+  0x01,0xe2,0xe2,0xe6,0xff,0x82,0xe1,0xe1,0xe5,0xff,0x82,0xe0,0xe0,0xe4,0xff,
+  0x82,0xdf,0xdf,0xe3,0xff,0x05,0xde,0xde,0xe2,0xff,0xdd,0xdd,0xe2,0xff,0xdd,
+  0xdd,0xe1,0xff,0xdc,0xdc,0xe1,0xff,0xdc,0xdc,0xe0,0xff,0x84,0xdf,0xdf,0xe3,
+  0xff,0x0c,0xdf,0xdf,0xe3,0xfd,0xdf,0xdf,0xe3,0xf8,0xdf,0xdf,0xe3,0xef,0xdf,
+  0xdf,0xe3,0xe3,0xdf,0xdf,0xe3,0xd4,0xdf,0xdf,0xe3,0xc1,0xdf,0xdf,0xe3,0xaa,
+  0xdf,0xdf,0xe3,0x90,0xdf,0xdf,0xe3,0x73,0xdf,0xdf,0xe3,0x52,0xdf,0xdf,0xe3,
+  0x2e,0xdf,0xdf,0xe3,0x08,0xb7,0x00,0x00,0x00,0x00,0x0a,0xff,0xff,0xff,0x1d,
+  0xff,0xff,0xff,0x4f,0xff,0xff,0xff,0x50,0xd7,0xd7,0xd9,0x6d,0xc3,0xc3,0xc7,
+  0xbd,0x9e,0x9e,0xa3,0xbe,0x8b,0x8b,0x92,0xd2,0x84,0x84,0x8b,0xe8,0x77,0x77,
+  0x80,0xf2,0x77,0x77,0x7f,0xfd,0x82,0x77,0x77,0x7f,0xff,0x82,0x78,0x78,0x80,
+  0xff,0x83,0x79,0x79,0x80,0xff,0x82,0x7a,0x7a,0x81,0xff,0x01,0x7a,0x7a,0x82,
+  0xff,0x82,0x7b,0x7b,0x82,0xff,0x01,0x7c,0x7c,0x82,0xff,0x82,0x7c,0x7c,0x83,
+  0xff,0x83,0x7d,0x7d,0x83,0xff,0x03,0x7d,0x7d,0x84,0xff,0x7e,0x7e,0x84,0xff,
+  0x7e,0x7e,0x85,0xff,0x83,0x7f,0x7f,0x85,0xff,0x83,0x80,0x80,0x86,0xff,0x82,
+  0x81,0x81,0x86,0xff,0x82,0x82,0x82,0x87,0xff,0x01,0x82,0x82,0x88,0xff,0x83,
+  0x83,0x83,0x88,0xff,0x02,0x83,0x83,0x89,0xff,0x84,0x84,0x89,0xff,0x83,0x85,
+  0x85,0x89,0xff,0x02,0x85,0x85,0x8a,0xff,0x86,0x86,0x8a,0xff,0x82,0x86,0x86,
+  0x8b,0xff,0x82,0x87,0x87,0x8b,0xff,0x83,0x88,0x88,0x8c,0xff,0x82,0x89,0x89,
+  0x8c,0xff,0x82,0x89,0x89,0x8d,0xff,0x01,0x8a,0x8a,0x8e,0xff,0x83,0x8b,0x8b,
+  0x8e,0xff,0x01,0x8b,0x8b,0x8f,0xff,0x83,0x8c,0x8c,0x8f,0xff,0x03,0x8d,0x8d,
+  0x8f,0xff,0x8d,0x8d,0x90,0xff,0x8e,0x8e,0x90,0xff,0x82,0x8e,0x8e,0x91,0xff,
+  0x82,0x8f,0x8f,0x91,0xff,0x01,0x8f,0x8f,0x92,0xff,0x82,0x90,0x90,0x92,0xff,
+  0x82,0x91,0x91,0x92,0xff,0x82,0x91,0x91,0x93,0xff,0x83,0x92,0x92,0x94,0xff,
+  0x02,0x93,0x93,0x94,0xff,0x93,0x93,0x95,0xff,0x83,0x94,0x94,0x95,0xff,0x02,
+  0x96,0x96,0x97,0xff,0x95,0x95,0x97,0xff,0x82,0x95,0x95,0x96,0xff,0x0c,0x95,
+  0x95,0x96,0xfd,0x94,0x94,0x95,0xf8,0x94,0x94,0x95,0xef,0x94,0x94,0x95,0xe3,
+  0x94,0x94,0x95,0xd4,0x93,0x93,0x94,0xc1,0x92,0x92,0x94,0xaa,0x92,0x92,0x94,
+  0x90,0x92,0x92,0x94,0x73,0x92,0x92,0x93,0x52,0x91,0x91,0x93,0x2e,0x91,0x91,
+  0x93,0x08,0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,
+  0x00,0x00,0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,
+  0x00,0x00,0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,
+  0x00,0x00,0xff,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0xd0,0x00,0x00,
+  0x00,0x00
 };
 
 static const GdkPixdata sdi_shared_sync_bnc_pixdata = {
@@ -1084,5 +1388,5 @@
   656, /* rowstride */
   164, /* width */
   60, /* height */
-  sdi_shared_sync_bnc_pixdata_pixel_data /* pixel_data: */
+  sdi_shared_sync_bnc_pixdata_pixel_data /* pixel_data */
 };

Modified: packages/nvidia-settings/trunk/src/libXNVCtrl/Makefile
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/libXNVCtrl/Makefile?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/libXNVCtrl/Makefile (original)
+++ packages/nvidia-settings/trunk/src/libXNVCtrl/Makefile Sun Jan 11 05:41:46 2009
@@ -1,3 +1,24 @@
+# Copyright (c) 2008 NVIDIA, Corporation
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
 RANLIB ?= ranlib
 
 libXNVCtrl.a : libXNVCtrl.a(NVCtrl.o)

Modified: packages/nvidia-settings/trunk/src/libXNVCtrl/Makefile.inc
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/libXNVCtrl/Makefile.inc?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/libXNVCtrl/Makefile.inc (original)
+++ packages/nvidia-settings/trunk/src/libXNVCtrl/Makefile.inc Sun Jan 11 05:41:46 2009
@@ -1,28 +1,27 @@
 #
-# nvidia-settings: A tool for configuring the NVIDIA X driver on Unix
-# and Linux systems.
+# libXNVCtrl: A library for configuring the NVIDIA X driver on Unix and Linux
+# systems using the NV-CONTROL X11 protocol extension.
 #
-# Copyright (C) 2004 NVIDIA Corporation.
+# Copyright (c) 2004-2008 NVIDIA, Corporation.
 #
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of Version 2 of the GNU General Public
-# License as published by the Free Software Foundation.
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
 #
-# 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 Version 2
-# of the GNU General Public License for more details.
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
 #
-# 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
-#
-
-#
-# libXNVCtrl files
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
 #
 
 EXTRA_DIST += \

Modified: packages/nvidia-settings/trunk/src/libXNVCtrl/NVCtrl.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/libXNVCtrl/NVCtrl.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/libXNVCtrl/NVCtrl.c (original)
+++ packages/nvidia-settings/trunk/src/libXNVCtrl/NVCtrl.c Sun Jan 11 05:41:46 2009
@@ -1,3 +1,26 @@
+/*
+ * Copyright (c) 2008 NVIDIA, Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
 /*
  * Make sure that XTHREADS is defined, so that the
  * LockDisplay/UnlockDisplay macros are expanded properly and the
@@ -643,493 +666,6 @@
     return True;
 }
 
-
-Bool XNVCTRLQueryDDCCILutSize (
-    Display *dpy,
-    int screen,
-    unsigned int display_mask,
-    unsigned int *red_entries,
-    unsigned int *green_entries,
-    unsigned int *blue_entries,
-    unsigned int *red_bits_per_entries,
-    unsigned int *green_bits_per_entries,
-    unsigned int *blue_bits_per_entries
-) {
-    XExtDisplayInfo *info = find_display (dpy);
-    xnvCtrlQueryDDCCILutSizeReply rep;
-    xnvCtrlQueryDDCCILutSizeReq *req;
-    unsigned int buf[6];
-    Bool exists;
-    
-    if(!XextHasExtension(info))
-        return False;
-
-    XNVCTRLCheckExtension (dpy, info, False);
-
-    LockDisplay (dpy);
-
-    GetReq (nvCtrlQueryDDCCILutSize, req);
-    req->reqType = info->codes->major_opcode;
-    req->nvReqType = X_nvCtrlQueryDDCCILutSize;
-    req->screen = screen;
-    req->display_mask = display_mask;
-
-    if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) {
-        UnlockDisplay (dpy);
-        SyncHandle ();
-        return False;
-    }
-
-    _XRead(dpy, (char *)(&buf), 24);
-
-    *red_entries = buf[0];
-    *green_entries = buf[1];
-    *blue_entries = buf[2];
-    *red_bits_per_entries = buf[3];
-    *green_bits_per_entries = buf[4];
-    *blue_bits_per_entries = buf[5];
-    
-    UnlockDisplay (dpy);
-    SyncHandle ();
-    exists = rep.flags;
-    return exists;
-}
-
-
-Bool XNVCTRLQueryDDCCISinglePointLutOperation (
-    Display *dpy,
-    int screen,
-    unsigned int display_mask,
-    unsigned int offset,
-    unsigned int *red_value,
-    unsigned int *green_value,
-    unsigned int *blue_value
-) {
-    XExtDisplayInfo *info = find_display (dpy);
-    xnvCtrlQueryDDCCISinglePointLutOperationReply rep;
-    xnvCtrlQueryDDCCISinglePointLutOperationReq *req;
-    unsigned int buf[4];
-    Bool exists;
-    
-    if(!XextHasExtension(info))
-        return False;
-
-    XNVCTRLCheckExtension (dpy, info, False);
-
-    LockDisplay (dpy);
-
-    GetReq (nvCtrlQueryDDCCISinglePointLutOperation, req);
-    req->reqType = info->codes->major_opcode;
-    req->nvReqType = X_nvCtrlQueryDDCCISinglePointLutOperation;
-    req->screen = screen;
-    req->display_mask = display_mask;
-    req->offset = offset;
-    
-    if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) {
-        UnlockDisplay (dpy);
-        SyncHandle ();
-        return False;
-    }
-
-    _XRead(dpy, (char *)(&buf), 12);
-
-    *red_value = buf[0];
-    *green_value = buf[1];
-    *blue_value = buf[2];
-    
-    UnlockDisplay (dpy);
-    SyncHandle ();
-    
-    exists=rep.flags;
-    return exists;
-}
-
-
-Bool XNVCTRLSetDDCCISinglePointLutOperation (
-    Display *dpy,
-    int screen,
-    unsigned int display_mask,
-    unsigned int offset,
-    unsigned int red_value,
-    unsigned int green_value,
-    unsigned int blue_value
-) { 
-    XExtDisplayInfo *info = find_display (dpy);
-    xnvCtrlSetDDCCISinglePointLutOperationReply rep;
-    xnvCtrlSetDDCCISinglePointLutOperationReq *req;
-    Bool success;
-    
-    if(!XextHasExtension(info))
-        return False;
-
-    XNVCTRLCheckExtension (dpy, info, False);
-
-    LockDisplay (dpy);
-    GetReq (nvCtrlSetDDCCISinglePointLutOperation, req);
-    req->reqType = info->codes->major_opcode;
-    req->nvReqType = X_nvCtrlSetDDCCISinglePointLutOperation;
-    req->screen = screen;
-    req->display_mask = display_mask;
-    req->offset = offset;
-    req->red_value = red_value;
-    req->green_value = green_value;
-    req->blue_value = blue_value;
-    
-    if (!_XReply (dpy, (xReply *) &rep, 0, False)) {
-        UnlockDisplay (dpy);
-        SyncHandle ();
-        return False;
-    }
-    UnlockDisplay (dpy);
-    SyncHandle ();
-    
-    success = rep.flags;
-    return success;
-}
-
-
-Bool XNVCTRLQueryDDCCIBlockLutOperation (
-    Display *dpy,
-    int screen,
-    unsigned int display_mask,
-    unsigned int color, // NV_CTRL_DDCCI_RED_LUT, NV_CTRL_DDCCI_GREEN_LUT, NV_CTRL_DDCCI_BLUE_LUT
-    unsigned int offset,
-    unsigned int size,
-    unsigned int **value
-) {
-    XExtDisplayInfo *info = find_display (dpy);
-    xnvCtrlQueryDDCCIBlockLutOperationReply rep;
-    xnvCtrlQueryDDCCIBlockLutOperationReq *req;
-    Bool exists;
-    int length, slop;
-    char *ptr;
-
-    if(!XextHasExtension(info))
-        return False;
-
-    XNVCTRLCheckExtension (dpy, info, False);
-
-    LockDisplay (dpy);
-    GetReq (nvCtrlQueryDDCCIBlockLutOperation, req);
-    req->reqType = info->codes->major_opcode;
-    req->nvReqType = X_nvCtrlQueryDDCCIBlockLutOperation;
-    req->screen = screen;
-    req->display_mask = display_mask;
-    req->color=color;
-    req->offset=offset;
-    req->size=size;
-    if (!_XReply (dpy, (xReply *) &rep, 0, False)) {
-        UnlockDisplay (dpy);
-        SyncHandle ();
-        return False;
-    }
-    length = rep.length;
-    slop = rep.num_bytes & 3;
-    ptr = (char *) Xmalloc(rep.num_bytes);
-    if (! ptr) {
-        _XEatData(dpy, length);
-        UnlockDisplay (dpy);
-        SyncHandle ();
-        return False;
-    } else {
-        _XRead(dpy, (char *) ptr, rep.num_bytes);
-        if (slop) _XEatData(dpy, 4-slop);
-    }
-    exists = rep.flags;
-    if(exists) {
-        *value=(unsigned int *)ptr;
-    }
-    UnlockDisplay (dpy);
-    SyncHandle ();
-    return exists;
-}
-
-
-Bool XNVCTRLSetDDCCIBlockLutOperation (
-    Display *dpy,
-    int screen,
-    unsigned int display_mask,
-    unsigned int color, // NV_CTRL_DDCCI_RED_LUT, NV_CTRL_DDCCI_GREEN_LUT, NV_CTRL_DDCCI_BLUE_LUT
-    unsigned int offset,
-    unsigned int size,
-    unsigned int *value
-) {
-    XExtDisplayInfo *info = find_display (dpy);
-    xnvCtrlSetDDCCIBlockLutOperationReq *req;
-    xnvCtrlSetDDCCIBlockLutOperationReply rep;
-    Bool success;
-    
-    if(!XextHasExtension(info))
-        return False;
-
-    XNVCTRLCheckExtension (dpy, info, False);
-
-    LockDisplay (dpy);
-    GetReq (nvCtrlSetDDCCIBlockLutOperation, req);
-    req->reqType = info->codes->major_opcode;
-    req->nvReqType = X_nvCtrlSetDDCCIBlockLutOperation;
-    req->screen = screen;
-    req->display_mask = display_mask;
-    req->color = color;
-    req->offset = offset;
-    req->size = size;
-    req->num_bytes = size << 2;
-    req->length += (req->num_bytes + 3) >> 2;
-    Data(dpy, (char *)value, req->num_bytes );
-    
-    if (!_XReply (dpy, (xReply *) &rep, 0, False)) {
-        UnlockDisplay (dpy);
-        SyncHandle ();
-        return False;
-    }
-    UnlockDisplay (dpy);
-    SyncHandle ();
-    
-    success = rep.flags;
-    return success;
-}
-
-
-Bool XNVCTRLSetDDCCIRemoteProcedureCall (
-    Display *dpy,
-    int screen,
-    unsigned int display_mask,
-    unsigned int offset,
-    unsigned int size,
-    unsigned int *red_lut,
-    unsigned int *green_lut,
-    unsigned int *blue_lut,
-    unsigned int *increment
-) {
-    XExtDisplayInfo *info = find_display (dpy);
-    xnvCtrlSetDDCCIRemoteProcedureCallReq *req;
-    xnvCtrlSetDDCCIRemoteProcedureCallReply rep;
-    unsigned int nbytes;
-    Bool success;
-    
-    if(!XextHasExtension(info))
-        return False;
-
-    XNVCTRLCheckExtension (dpy, info, False);
-
-    LockDisplay (dpy);
-    GetReq (nvCtrlSetDDCCIRemoteProcedureCall, req);
-    req->reqType = info->codes->major_opcode;
-    req->nvReqType = X_nvCtrlSetDDCCIRemoteProcedureCall;
-    req->screen = screen;
-    req->display_mask = display_mask;
-    req->size = size;
-    nbytes= size << 2;
-    req->num_bytes = nbytes * 4;
-    req->length += (req->num_bytes + 3) >> 2;
-    req->offset = offset;
-    Data(dpy, (char *)red_lut, nbytes );
-    Data(dpy, (char *)green_lut, nbytes );
-    Data(dpy, (char *)blue_lut, nbytes );
-    Data(dpy, (char *)increment, nbytes );
-    
-    if (!_XReply (dpy, (xReply *) &rep, 0, False)) {
-        UnlockDisplay (dpy);
-        SyncHandle ();
-        return False;
-    }
-    UnlockDisplay (dpy);
-    SyncHandle ();
-    
-    success = rep.flags;
-    return success;
-}
-
-/* XXXAlternative: Instead of getting the manufacturer string from the server, 
- * get the manufacturer Id instead, and have controller_manufacturer assigned 
- * to a static string that would not need to be malloc'ed and freed.
- */
-Bool XNVCTRLQueryDDCCIDisplayControllerType (
-    Display *dpy,
-    int screen,
-    unsigned int display_mask,
-    unsigned char **controller_manufacturer,
-    unsigned int *controller_type
-)
-{
-    XExtDisplayInfo *info = find_display (dpy);
-    xnvCtrlQueryDDCCIDisplayControllerTypeReply rep;
-    xnvCtrlQueryDDCCIDisplayControllerTypeReq *req;
-    Bool exists;
-    int length, numbytes, slop;
-    char *ptr;
-
-    if(!XextHasExtension(info))
-        return False;
-
-    XNVCTRLCheckExtension (dpy, info, False);
-
-    LockDisplay (dpy);
-    GetReq (nvCtrlQueryDDCCIDisplayControllerType, req);
-    req->reqType = info->codes->major_opcode;
-    req->nvReqType = X_nvCtrlQueryDDCCIDisplayControllerType;
-    req->screen = screen;
-    req->display_mask = display_mask;
-    if (!_XReply (dpy, (xReply *) &rep, 0, False)) {
-        UnlockDisplay (dpy);
-        SyncHandle ();
-        return False;
-    }
-    length = rep.length;
-    numbytes = rep.size;
-    slop = numbytes & 3;
-    ptr = (char *) Xmalloc(numbytes);
-    if (! ptr) {
-        _XEatData(dpy, length);
-        UnlockDisplay (dpy);
-        SyncHandle ();
-        return False;
-    } else {
-        _XRead(dpy, (char *) ptr, numbytes);
-        if (slop) _XEatData(dpy, 4-slop);
-    }
-    exists = rep.flags;
-    if(exists) {
-        *controller_type=rep.controller_type;
-        *controller_manufacturer=ptr;
-    }
-    UnlockDisplay (dpy);
-    SyncHandle ();
-    return exists;
-}
-
-
-Bool NVCTRLQueryDDCCICapabilities (
-    Display *dpy,
-    int screen,
-    unsigned int display_mask,
-    unsigned int **nvctrl_vcp_supported,
-    unsigned int **possible_values_offset,
-    unsigned int **possible_values_size,
-    unsigned int **nvctrl_vcp_possible_values,
-    unsigned int **nvctrl_string_vcp_supported
-)
-{
-    XExtDisplayInfo *info = find_display (dpy);
-    xnvCtrlQueryDDCCICapabilitiesReply rep;
-    xnvCtrlQueryDDCCICapabilitiesReq *req;
-    Bool exists=1;
-    int length, numbytes, slop;
-    char *ptr, *p;
-    int len1, len2, len3, len4, len5;
-     
-    *nvctrl_vcp_supported=*nvctrl_vcp_possible_values=*possible_values_offset=*possible_values_size=*nvctrl_string_vcp_supported=NULL;
-   
-    if(!XextHasExtension(info))
-        return False;
-
-    XNVCTRLCheckExtension (dpy, info, False);
-
-    LockDisplay (dpy);
-    
-    GetReq (nvCtrlQueryDDCCICapabilities, req);
-    req->reqType = info->codes->major_opcode;
-    req->nvReqType = X_nvCtrlQueryDDCCICapabilities; 
-    
-    req->screen = screen;
-    req->display_mask = display_mask;
-    if (!_XReply (dpy, (xReply *) &rep, 0, False)) {
-        UnlockDisplay (dpy);
-        SyncHandle ();
-        return False;
-    }
-    length = rep.length;
-    numbytes = rep.num_bytes;
-    slop = numbytes & 3;
-    ptr = (char *) Xmalloc(numbytes);
-    if (! ptr) {
-        _XEatData(dpy, length);
-        UnlockDisplay (dpy);
-        SyncHandle ();
-        return False;
-    } else {
-        _XRead(dpy, (char *) ptr, numbytes);
-        if (slop) _XEatData(dpy, 4-slop);
-    }
-    exists = rep.flags;
-    if(exists) {
-        p = ptr;
-        len1 = len2 = len3 = (NV_CTRL_DDCCI_LAST_VCP+1) << 2 ;
-        len4 = rep.possible_val_len << 2;
-        len5 = (NV_CTRL_STRING_LAST_ATTRIBUTE+1) << 2;
-        *nvctrl_vcp_supported=(unsigned int *) Xmalloc(len1);
-        *possible_values_offset=(unsigned int *) Xmalloc(len2);
-        *possible_values_size=(unsigned int *) Xmalloc(len3);
-        if(len4)
-            *nvctrl_vcp_possible_values=(unsigned int *) Xmalloc(len4);
-        *nvctrl_string_vcp_supported=(unsigned int *) Xmalloc(len5);
-        memcpy((char*)*nvctrl_vcp_supported, p, len1);         p += len1;
-        memcpy((char*)*possible_values_offset, p, len2);       p += len2;
-        memcpy((char*)*possible_values_size, p, len3);         p += len3;
-        if(len4) {
-           memcpy((char*)*nvctrl_vcp_possible_values, p, len4);   p += len4;
-        }
-        memcpy((char*)*nvctrl_string_vcp_supported, p, len5); 
-    }
-    free(ptr);
-    UnlockDisplay (dpy);
-    SyncHandle ();
-    return exists;
-}
-
-Bool XNVCTRLQueryDDCCITimingReport (
-    Display *dpy,
-    int screen,
-    unsigned int display_mask,
-    unsigned int *sync_freq_out_range, 
-    unsigned int *unstable_count,
-    unsigned int *positive_h_sync,
-    unsigned int *positive_v_sync,
-    unsigned int *h_freq,
-    unsigned int *v_freq
-) {
-    XExtDisplayInfo *info = find_display (dpy);
-    xnvCtrlQueryDDCCITimingReportReply rep;
-    xnvCtrlQueryDDCCITimingReportReq *req;
-    unsigned int buf[6];
-    Bool exists;
-    
-    if(!XextHasExtension(info))
-        return False;
-
-    XNVCTRLCheckExtension (dpy, info, False);
-
-    LockDisplay (dpy);
-
-    GetReq (nvCtrlQueryDDCCITimingReport, req);
-    req->reqType = info->codes->major_opcode;
-    req->nvReqType = X_nvCtrlQueryDDCCITimingReport;
-    req->screen = screen;
-    req->display_mask = display_mask;
-
-    if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) {
-        UnlockDisplay (dpy);
-        SyncHandle ();
-        return False;
-    }
-
-    _XRead(dpy, (char *)(&buf), 24);
-    
-    exists = rep.flags;
-    
-    *sync_freq_out_range = buf[0];
-    *unstable_count = buf[1];
-    *positive_h_sync = buf[2];
-    *positive_v_sync = buf[3];
-    *h_freq = buf[4];
-    *v_freq = buf[5];
-    
-    UnlockDisplay (dpy);
-    SyncHandle ();
-
-    return exists;
-}
-
 Bool XNVCTRLQueryTargetBinaryData (
     Display *dpy,
     int target_type,
@@ -1285,6 +821,7 @@
     xnvctrlEventTarget *eventTarget;
     XNVCtrlEventTargetAvailability *reTargetAvailability;
     XNVCtrlStringEventTarget *reTargetString;
+    XNVCtrlBinaryEventTarget *reTargetBinary;
 
     XNVCTRLCheckExtension (dpy, info, False);
     
@@ -1371,6 +908,26 @@
         reTargetString->attribute_changed.attribute =
             eventTarget->u.attribute_changed.attribute;
         break;
+    case TARGET_BINARY_ATTRIBUTE_CHANGED_EVENT:
+        reTargetBinary = (XNVCtrlBinaryEventTarget *) host;
+        eventTarget = (xnvctrlEventTarget *) wire;
+        reTargetBinary->attribute_changed.type = eventTarget->u.u.type & 0x7F;
+        reTargetBinary->attribute_changed.serial =
+            _XSetLastRequestRead(dpy, (xGenericReply*) eventTarget);
+        reTargetBinary->attribute_changed.send_event =
+            ((eventTarget->u.u.type & 0x80) != 0);
+        reTargetBinary->attribute_changed.display = dpy;
+        reTargetBinary->attribute_changed.time =
+            eventTarget->u.attribute_changed.time;
+        reTargetBinary->attribute_changed.target_type =
+            eventTarget->u.attribute_changed.target_type;
+        reTargetBinary->attribute_changed.target_id =
+            eventTarget->u.attribute_changed.target_id;
+        reTargetBinary->attribute_changed.display_mask =
+            eventTarget->u.attribute_changed.display_mask;
+        reTargetBinary->attribute_changed.attribute =
+            eventTarget->u.attribute_changed.attribute;
+        break;
 
     default:
         return False;

Modified: packages/nvidia-settings/trunk/src/libXNVCtrl/NVCtrl.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/libXNVCtrl/NVCtrl.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/libXNVCtrl/NVCtrl.h (original)
+++ packages/nvidia-settings/trunk/src/libXNVCtrl/NVCtrl.h Sun Jan 11 05:41:46 2009
@@ -1,3 +1,26 @@
+/*
+ * Copyright (c) 2008 NVIDIA, Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
 #ifndef __NVCTRL_H
 #define __NVCTRL_H
 
@@ -1334,1205 +1357,6 @@
 #define NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS_DETECTION_STATE_BUSY     1
 
 
-
-/*************************************************************************
- * DDC/CI VCP codes                                                      *
- * From the VESA Monitor Control Command Set (MCCS) Standard - Version 2 *
- *************************************************************************/
- 
-#define NV_CTRL_DDCCI_ON                                        1
-#define NV_CTRL_DDCCI_OFF                                       0
-
-/*************************************
- * DDC/CI VCP CODES: GEOMETRY ADJUST *
- *************************************/
- 
-/* Increasing (decreasing) this value moves the image toward the right
- * (left) side of the screen.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_GEOMETRY_HORIZONTAL_POSITION              97 /* RWD */
-
-/* Increasing (decreasing) this value will increase (decrease) the width
- * of the image.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_GEOMETRY_HORIZONTAL_SIZE                  98 /* RWD */
-
-/* Increasing (decreasing) this value will cause the right and left sides
- * of the image to become more (less) convex.
- * Type: Range
- */  
-#define NV_CTRL_DDCCI_GEOMETRY_HORIZONTAL_PINCUSHION            99 /* RWD */
-
-/* Increasing (decreasing) this value will move the center section of the
- * image towards the right(left) side of the display.
- * Type: Range
- */  
-#define NV_CTRL_DDCCI_GEOMETRY_HORIZONTAL_PINCUSHION_BALANCE    100/* RWD */
-
-/* Increasing (decreasing) this value will shift the red pixels to the right
- * (left) across the image and the blue pixels left (right) across the image
- * with respect to the green pixels.
- * Type: Range
- */  
-#define NV_CTRL_DDCCI_GEOMETRY_HORIZONTAL_CONVERGENCE           101/* RWD */
-
-/* Increasing (decreasing) this value will increase (decrease) the
- * density of pixels in the image center.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_GEOMETRY_HORIZONTAL_LINEARITY             102/* RWD */
-
-/* Increasing (decreasing) this value shifts the density of pixels from
- * the left (right) side to the right (left) side of the image.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_GEOMETRY_HORIZONTAL_LINEARITY_BALANCE     103/* RWD */
-
-/* Increasing (decreasing) this value moves the image toward the
- * top (bottom) edge of the display.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_GEOMETRY_VERTICAL_POSITION                104/* RWD */
-
-/* Increasing (decreasing) this value will increase (decrease) the
- * height of the image
- * Type: Range
- */
-#define NV_CTRL_DDCCI_GEOMETRY_VERTICAL_SIZE                    105/* RWD */
-
-/* Increasing (decreasing) this value will cause the top and bottom
- * edges of the image to become more (less) convex.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_GEOMETRY_VERTICAL_PINCUSHION              106/* RWD */
-
-/* Increasing (decreasing) this value will move the center section of
- * the image toward the top (bottom) edge of the display.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_GEOMETRY_VERTICAL_PINCUSHION_BALANCE      107/* RWD */
-
-/* Increasing (decreasing) this value shifts the red pixels up (down)
- * across the image and the blue pixels down (up) across the image
- * with respect to the green pixels.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_GEOMETRY_VERTICAL_CONVERGENCE             108/* RWD */
-
-/* Increasing (decreasing) this value will increase (decrease) the
- * density of scan lines in the image center.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_GEOMETRY_VERTICAL_LINEARITY               109/* RWD */
-
-/* Increasing (decreasing) this value shifts the density of scan lines
- * from the top (bottom) end to the bottom (top) end of the image.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_GEOMETRY_VERTICAL_LINEARITY_BALANCE       110/* RWD */
-
-/* Increasing (decreasing) this value will increase (decrease) the
- * degree of keystone distortion in the image.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_GEOMETRY_KEYSTONE                         111/* RWD */
-
-/* Increasing (decreasing) this value shifts the top section of the
- * image to the right (left) with respect to the bottom section of the
- * image.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_GEOMETRY_KEY_BALANCE                      112/* RWD */
-
-/* Increasing (decreasing) this value will increase (decrease) the
- * degree of trapezoid distortion in the image.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_GEOMETRY_TRAPEZOID                        113/* RWD */
-
-/* Increasing (decreasing) this value will increase (decrease) the
- * ratio between the horizontal size at the top of the image and the
- * horizontal size at the bottom of the image.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_GEOMETRY_HORIZONTAL_TRAPEZOID             114/* RWD */
-
-/* Increasing (decreasing) this value will increase (decrease) the
- * ratio between the vertical size at the left of the image and the
- * vertical size at the right of the image.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_GEOMETRY_VERTICAL_TRAPEZOID               115/* RWD */
-
-/* Increasing (decreasing) this value rotates the image (counter)
-  clockwise about the center point of the image.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_GEOMETRY_TILT                             116/* RWD */
-
-/* Increasing (decreasing) this value will increase (decrease) the
- * distance between the left and right sides at the top of the image.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_GEOMETRY_TOP_CORNER                       117/* RWD */
-
-/* Increasing (decreasing) this value moves the top end of the
- * image to the right (left).
- * Type: Range
- */
-#define NV_CTRL_DDCCI_GEOMETRY_TOP_CORNER_BALANCE               118/* RWD */
-
-/* Increasing (decreasing) this value will increase (decrease) the
- * distance between the left and right sides at the bottom of the
- * image.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_GEOMETRY_BOTTOM_CORNER                    119/* RWD */
-
-/* Increasing (decreasing) this value moves the bottom end of the
- * image to the right (left).
- * Type: Range
- */
-#define NV_CTRL_DDCCI_GEOMETRY_BOTTOM_CORNER_BALANCE            120/* RWD */
-
-
-/**************************************
- * DDC/CI VCP CODES: PRESET SELECTION *
- **************************************/
-
-/* Restore all factory presets including brightness / contrast,
- * geometry, color and TV defaults.
- * NV__CTRL_DDCCI_ON causes defaults to be restored 
- * A value of NV_CTRL_DDCCI_OFF shall be ignored 
- * Type: Boolean
- */
-#define NV_CTRL_DDCCI_PRESET_RESTORE_DEFAULTS                   121/* -WD */
-
-/* Restores factory defaults for brightness and contrast adjustments.
- * NV_CTRL_DDCCI_ON causes defaults to be restored 
- * A value of NV_CTRL_DDCCI_OFF shall be ignored 
- * Type: Boolean
- */
-#define NV_CTRL_DDCCI_PRESET_RESTORE_DEFAULTS_BRIGHTNESS_CONTRAST 122/* -WD */
-
-/* Restore factory defaults for geometry adjustments.
- * NV_CTRL_DDCCI_ON causes defaults to be restored 
- * A value of NV_CTRL_DDCCI_OFF shall be ignored 
- * Type: Boolean
- */
-#define NV_CTRL_DDCCI_PRESET_RESTORE_DEFAULTS_GEOMETRY          123/* -WD */
-
-/* Restore factory defaults for color settings.
- * NV_CTRL_DDCCI_ON causes defaults to be restored 
- * A value of NV_CTRL_DDCCI_OFF shall be ignored 
- * Type: Boolean
- */
-#define NV_CTRL_DDCCI_PRESET_RESTORE_DEFAULTS_COLOR             124/* -WD */
-
-/* Restore factory defaults for TV functions.
- * NV_CTRL_DDCCI_ON causes defaults to be restored 
- * A value of NV_CTRL_DDCCI_OFF shall be ignored 
- * Type: Boolean
- */
-#define NV_CTRL_DDCCI_PRESET_RESTORE_DEFAULTS_TV                125/* -WD */
-
-/* Store / Restore the user saved values for current mode.
- * - NV_CTRL_DDCCI_PRESET_SETTINGS_STORE_CURRENT:
- *   Store current settings in the monitor.
- * - NV_CTRL_DDCCI_PRESET_SETTINGS_RESTORE_FACTORY_DEFAULTS:
- *  Restore factory defaults for current mode. If no factory
- *  defaults then restore user values for current mode.
- * - All other values are reserved and shall be ignored.
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_PRESET_SETTINGS                           126/* -WD */
-#define NV_CTRL_DDCCI_PRESET_SETTINGS_STORE_CURRENT             1
-#define NV_CTRL_DDCCI_PRESET_SETTINGS_RESTORE_FACTORY_DEFAULTS  2
-
-
-/***************************************
- * DDC/CI VCP CODES: IMAGE ADJUSTMENTS *
- ***************************************/
-
-/* 
- * Increasing (decreasing) this value will increase (decrease) the
- * Brightness of the image.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_IMAGE_BRIGHTNESS                          127/* RWD */
-
-/* 
- * Increasing (decreasing) this value will increase (decrease) the
- * Contrast of the image.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_IMAGE_CONTRAST                            128/* RWD */  
-
-/* 
- * Turn on / off an auto setup function (periodic or event driven)
- * 0 and  3 : Shall be ignored
- * NV_CTRL_DDCCI_IMAGE_AUTO_SETUP_TOGGLE_OFF : Turn auto setup off
- * NV_CTRL_DDCCI_IMAGE_AUTO_SETUP_TOGGLE_ON : Turn auto setup on
- * Type: Integer
- */         
-#define NV_CTRL_DDCCI_IMAGE_AUTO_SETUP_TOGGLE                   129/* -WD */
-#define NV_CTRL_DDCCI_IMAGE_AUTO_SETUP_TOGGLE_OFF               1
-#define NV_CTRL_DDCCI_IMAGE_AUTO_SETUP_TOGGLE_ON                2
-
-/* 
- * Perform autosetup function (H/V position, clock, clock phase, A/D
- * converter, etc)
- * NV_CTRL_OFF : Indicates that auto-setup is not active
- * NV_CTRL_ON : Perform autosetup
- * >=2 : Shall be ignored
- * Type: Integer
- */         
-#define NV_CTRL_DDCCI_IMAGE_AUTO_SETUP                          130/* RWD */
-
-/* Increasing (decreasing) this value will increase (decrease) the
- * sampling clock frequency 
- * Type: Range
- */
-#define NV_CTRL_DDCCI_IMAGE_CLOCK                               131/* RWD */
-
-/* Increasing (decreasing) this value will increase (decrease) the
- * phase shift of the sampling clock
- * Type: Range
- */
-#define NV_CTRL_DDCCI_IMAGE_CLOCK_PHASE                         132/* RWD */
-
-/* Allows the display to specify the minimum increment in which it
- * can adjust the color temperature.
- * This will be used in conjunction with 
- * NV_CTRL_DDCCI_IMAGE_COLOR_TEMPERATURE_REQUEST, Color temperature request.
- * Values of 0 and > 5000 are invalid and shall be ignored.
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_IMAGE_COLOR_TEMPERATURE_INCREMENT         133/* R-D */
-
-/* Allows a specified color temperature (in °K) to be requested. If
- * display is unable to achieve requested color temperature, then it
- * should move to the closest possible temperature.
- * A value of 0 shall be treated as a request for a color temperature
- * of 3000°K. Values greater than 0 shall be used as a multiplier of
- * the color temperature increment (read using 
- * NV_CTRL_DDCCI_IMAGE_COLOR_TEMPERATURE_INCREMENT) and the
- * result added to the base value of 3000°K
- * Example:
- * If NV_CTRL_DDCCI_IMAGE_COLOR_TEMPERATURE_INCREMENT returns a value of 
- * 50°K and NV_CTRL_DDCCI_IMAGE_COLOR_TEMPERATURE_INCREMENT sends a
- * value of 50 (decimal) then the display shall interpret this as a
- * request to adjust the color temperature to 5500°K
- * (3000 + (50 * 50))°K = 5500°K
- * Notes:
- * 1) Applications using this function are recommended to read the
- * actual color temperature after using this command and taking
- * appropriate action.
- * 2) This control is only recommended if the display can produce a
- * continuously (at defined increment, see VCP code 0Bh) variable
- * color temperature.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_IMAGE_COLOR_TEMPERATURE_REQUEST           134/* RWD */
-
-/* Select a specified color temperature.
- * NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_SRGB : sRGB
- * NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_NATIVE : Display native
- * NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_4000K :  4000 K
- * NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_5000K :  5000 K
- * NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_6500K :  6500 K
- * NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_7500K :  7500 K
- * NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_8200K :  8200 K
- * NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_9300K :  9300 K
- * NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_10000K : 10000 K
- * NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_USER1 :  11500 K
- * NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_USER1 :  User 1
- * NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_USER2 :  User 2
- * NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_USER3 :  User 3
- * 00 and >=0E shall be ignored
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET                 135/* RWD */
-#define NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_SRGB            0x01
-#define NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_NATIVE          0x02
-#define NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_4000K           0x03
-#define NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_5000K           0x04
-#define NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_6500K           0x05
-#define NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_7500K           0x06
-#define NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_8200K           0x07
-#define NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_9300K           0x08
-#define NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_10000K          0x09
-#define NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_11500K          0x0A
-#define NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_USER1           0x0B
-#define NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_USER2           0x0C
-#define NV_CTRL_DDCCI_IMAGE_SELECT_COLOR_PRESET_USER3           0x0D
-
-/*
- * Increasing (decreasing) this value will increase (decrease) the
- * luminance of red pixels.
- * The value returned shall be an indication of the actual red gain at
- * the current color temperature and not be normalized.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_IMAGE_RED_VIDEO_GAIN                      136/* RWD */
-
-/*
- * Increasing (decreasing) this value will increase (decrease) the
- * luminance of green pixels.
- * The value returned shall be an indication of the actual green gain at
- * the current color temperature and not be normalized.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_IMAGE_GREEN_VIDEO_GAIN                    137/* RWD */
-
-/*
- * Increasing (decreasing) this value will increase (decrease) the
- * luminance of blue pixels.
- * The value returned shall be an indication of the actual blue gain at
- * the current color temperature and not be normalized.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_IMAGE_BLUE_VIDEO_GAIN                     138/* RWD */
-
-/* Increasing (decreasing) this value will increase (decrease) the
- * black level of red pixels.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_IMAGE_RED_VIDEO_BLACK_LEVEL               139/* RWD */
-
-/* Increasing (decreasing) this value will increase (decrease) the
- * black level of green pixels.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_IMAGE_GREEN_VIDEO_BLACK_LEVEL             140/* RWD */
-
-/* Increasing (decreasing) this value will increase (decrease) the
- * black level of blue pixels.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_IMAGE_BLUE_VIDEO_BLACK_LEVEL              141/* RWD */
-
-/* Increasing (decreasing) this value will adjust the focus of the image.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_IMAGE_FOCUS                               142/* RWD */
-
-/* Increasing (decreasing) this value controls the horizontal picture
- * moiré cancellation.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_IMAGE_HORIZONTAL_MOIRE                    143/* RWD */
-
-/* Increasing (decreasing) this value controls the vertical picture
- * moiré cancellation.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_IMAGE_VERTICAL_MOIRE                      144/* RWD */
-
-/* Increasing (decreasing) this value will increase (decrease) the
- * distance to the focal plane of the image.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_IMAGE_ADJUST_FOCAL_PLANE                  145/* RWD */
-
-/* Increasing (decreasing) this value will increase (decrease) the
- * zoom function of the optics
- * Type: Range
- */
-#define NV_CTRL_DDCCI_IMAGE_ADJUST_ZOOM                         146/* RWD */
-
-/* This value will cause the picture to flip horizontally.
- * NV_CTRL_DDCCI_ON : flip horizontally
- * NV_CTRL_DDCCI_OFF : Shall be ignored
- * Type: Boolean
- */
-#define NV_CTRL_DDCCI_IMAGE_HOR_FLIP                            147/* -WD */
-
-/* This value will cause the picture to flip vertically.
- * NV_CTRL_DDCCI_ON : flip vertically
- * NV_CTRL_DDCCI_OFF : Shall be ignored
- * Type: Boolean
- */
-#define NV_CTRL_DDCCI_IMAGE_VER_FLIP                            148/* -WD */
-
-/* Changing this value will affect the scaling (input versus output)
- * function of the display.
- * NV_CTRL_DDCCI_IMAGE_DISPLAY_SCALING_NO_SCALING : No scaling, 1:1 relationship
- * NV_CTRL_DDCCI_IMAGE_DISPLAY_SCALING_MAX_NO_DISTORT2 : Scale to maximum 
- *   without AR distortion
- * NV_CTRL_DDCCI_IMAGE_DISPLAY_SCALING_MAX_VERTICAL : Scale to maximum vertical 
-     size
- * NV_CTRL_DDCCI_IMAGE_DISPLAY_SCALING_MAX_HORIZONTAL ; Scale to maximum 
-     horizontal size
- * 0 and >=5 : Shall be ignored
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_IMAGE_DISPLAY_SCALING                     149/* RWD */
-#define NV_CTRL_DDCCI_IMAGE_DISPLAY_SCALING_NO_SCALING          1
-#define NV_CTRL_DDCCI_IMAGE_DISPLAY_SCALING_MAX_NO_DISTORT      2
-#define NV_CTRL_DDCCI_IMAGE_DISPLAY_SCALING_MAX_VERTICAL        3
-#define NV_CTRL_DDCCI_IMAGE_DISPLAY_SCALING_MAX_HORIZONTAL      4
-
-/* Allows one of several image expansion algorithms to be selecte
- * to suit different types of image and/or different personal
- * preference.
- * NV_CTRL_DDCCI_IMAGE_SHARPNESS_FILTER_FUNC(1) : Filter function 1
- * NV_CTRL_DDCCI_IMAGE_SHARPNESS_FILTER_FUNC(2) : Filter function 2
- * NV_CTRL_DDCCI_IMAGE_SHARPNESS_FILTER_FUNC(3) : Filter function 3
- * NV_CTRL_DDCCI_IMAGE_SHARPNESS_FILTER_FUNC(4) : Filter function 4
- * 0 and  5 shall be ignored
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_IMAGE_SHARPNESS                           150/* RWD */
-#define NV_CTRL_DDCCI_IMAGE_SHARPNESS_FILTER_FUNC(n)            n
-
-/* Indicates the orientation of the screen.
- * NV_CTRL_DDCCI_IMAGE_SCREEN_ORIENTATION_0        
- *      The normal landscape mode.
- * NV_CTRL_DDCCI_IMAGE_SCREEN_ORIENTATION_90   
- *      Portrait mode achieved by clockwise rotation of the display 90 degrees.
- * NV_CTRL_DDCCI_IMAGE_SCREEN_ORIENTATION_180
- *      Landscape mode achieved by rotation of the display 180 degrees.
- * NV_CTRL_DDCCI_IMAGE_SCREEN_ORIENTATION_270
- *      Portrait mode achieved by clockwise rotation of the display 270 degrees.
- * NV_CTRL_DDCCI_IMAGE_SCREEN_ORIENTATION_NA 
- *      Indicates that the display cannot supply the current orientation
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_IMAGE_SCREEN_ORIENTATION                  151/* R-D */
-#define NV_CTRL_DDCCI_IMAGE_SCREEN_ORIENTATION_0                0x01
-#define NV_CTRL_DDCCI_IMAGE_SCREEN_ORIENTATION_90               0x02
-#define NV_CTRL_DDCCI_IMAGE_SCREEN_ORIENTATION_180              0x03
-#define NV_CTRL_DDCCI_IMAGE_SCREEN_ORIENTATION_270              0x04
-#define NV_CTRL_DDCCI_IMAGE_SCREEN_ORIENTATION_NA               0xFF
-
-/* Selects a scan format.
- * NV_CTRL_DDCCI_IMAGE_SCAN_FORMAT_UNDERSCAN: Underscan
- * NV_CTRL_DDCCI_IMAGE_SCAN_FORMAT_OVERSCAN: Overscan
- * NV_CTRL_DDCCI_IMAGE_SCAN_FORMAT_WIDESCREEN: Widescreen
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_IMAGE_SCAN_FORMAT                         152/* RWD */
-#define NV_CTRL_DDCCI_IMAGE_SCAN_FORMAT_UNDERSCAN               1
-#define NV_CTRL_DDCCI_IMAGE_SCAN_FORMAT_OVERSCAN                2
-#define NV_CTRL_DDCCI_IMAGE_SCAN_FORMAT_WIDESCREEN              3
-#define NV_CTRL_DDCCI_IMAGE_DISPLAY_MODE                        153/* RWD */
-
-/* Display mode:
- * NV_CTRL_DDCCI_IMAGE_DISPLAY_MODE_PRODUCTIVITY : 
- *      Productivity (e.g. office applications)
- * NV_CTRL_DDCCI_IMAGE_DISPLAY_MODE_MIXED : Mixed (e.g. internet)
- * NV_CTRL_DDCCI_IMAGE_DISPLAY_MODE_ENTERTAINMENT : 
-        Entertainment (e.g. TV / movie)
- * NV_CTRL_DDCCI_IMAGE_DISPLAY_MODE_USERDEFINED : User defined
- * Note:
- * The condition(s) associated with options 1, 2 and 3 are defined
- * by the display manufacturer
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_IMAGE_DISPLAY_MODE_PRODUCTIVITY           1
-#define NV_CTRL_DDCCI_IMAGE_DISPLAY_MODE_MIXED                  2
-#define NV_CTRL_DDCCI_IMAGE_DISPLAY_MODE_ENTERTAINMENT          3
-#define NV_CTRL_DDCCI_IMAGE_DISPLAY_MODE_USERDEFINED            4
-
-/***********************************************
- * DDC/CI VCP CODES: WINDOWED IMAGE OPERATIONS *
- ***********************************************/
-
-/* Defines the top left X pixel of an area of the image. Specified in
- * co-ordinates of incoming image before any scaling etc in the display.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_WINDOWEDIMAGE_POSITION_TOP_LEFT_X         154/* RWD */ 
-
-/* Defines the top left Y pixel of an area of the image. Specified in
- * co-ordinates of incoming image before any scaling etc in the display.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_WINDOWEDIMAGE_POSITION_TOP_LEFT_Y         155/* RWD */
-
-/* Defines the bottom right X pixel of an area of the image.
- * Specified in co-ordinates of incoming image before any scaling
- * in the display.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_WINDOWEDIMAGE_POSITION_BOTTOM_RIGHT_X     156/* RWD */
-
-/* Defines the bottom right Y pixel of an area of the image.
- * Specified in co-ordinates of incoming image before any scaling
- * in the display.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_WINDOWEDIMAGE_POSITION_BOTTOM_LEFT_X      157/* RWD */
-
-/* Window control, enables the brightness and color within a
- * window to be different from the desktop.
- * NV_CTRL_DDCCI_WINDOWEDIMAGE_OLD_CONTROL_TOGGLE_OFF : Off
- * NV_CTRL_DDCCI_WINDOWEDIMAGE_OLD_CONTROL_TOGGLE_ON: On
- * All other values are reserved.
- * Notes:
- * 1. This control should be used in conjunction with
- *      NV_CTRL_DDCCI_WINDOWEDIMAGE_BACKGROUND
- * 2. This command structure is not recommended for new designs,
- * see NV_CTRL_DDCCI_WINDOWEDIMAGE_CONTROL_TOGGLE for alternate.
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_WINDOWEDIMAGE_OLD_CONTROL_TOGGLE          158/* RWD */
-#define NV_CTRL_DDCCI_WINDOWEDIMAGE_OLD_CONTROL_TOGGLE_OFF      1
-#define NV_CTRL_DDCCI_WINDOWEDIMAGE_OLD_CONTROL_TOGGLE_ON       2
-
-/* Changes the contrast ratio between the area of the window and
- * the rest of the desktop
- * Lower (higher) values will cause the desktop brightness to
- * decrease (increase)
- * Notes:
- * 1. This contropl should be used in conjunction with 
- *  NV_CTRL_DDCCI_WINDOWEDIMAGE_OLD_CONTROL_TOGGLE
- * 2. This command structure is not recommended for new designs,
- * see NV_CTRL_DDCCI_WINDOWEDIMAGE_WINDOW_SELECT for alternate.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_WINDOWEDIMAGE_BACKGROUND                  159/* RWD */
-
-/* A value of 127 shall have no effect.
- * A value > 127 shall cause the color to shift towards yellow
- * A value < 127 shall cause the color to shift towards magenta
- * Type: Range 
- */
-#define NV_CTRL_DDCCI_WINDOWEDIMAGE_6AXIS_COLOR_CONTROL_RED     160/* RWD */
-
-/* A value of 127 shall have no effect.
- * A value > 127 shall cause the color to shift towards green
- * A value < 127 shall cause the color to shift towards red
- * Type: Range 
- */
-#define NV_CTRL_DDCCI_WINDOWEDIMAGE_6AXIS_COLOR_CONTROL_YELLOW  161/* RWD */
-
-/* A value of 127 shall have no effect.
- * A value > 127 shall cause the color to shift towards cyan
- * A value < 127 shall cause the color to shift towards yellow
- * Type: Range 
- */
-#define NV_CTRL_DDCCI_WINDOWEDIMAGE_6AXIS_COLOR_CONTROL_GREEN   162/* RWD */
-
-/* A value of 127 shall have no effect.
- * A value > 127 shall cause the color to shift towards blue
- * A value < 127 shall cause the color to shift towards green
- * Type: Range 
- */
-#define NV_CTRL_DDCCI_WINDOWEDIMAGE_6AXIS_COLOR_CONTROL_CYAN    163/* RWD */
-
-/* A value of 127 shall have no effect.
- * A value > 127 shall cause the color to shift towards magenta
- * A value < 127 shall cause the color to shift towards cyan
- * Type: Range 
- */
-#define NV_CTRL_DDCCI_WINDOWEDIMAGE_6AXIS_COLOR_CONTROL_BLUE    164/* RWD */
-
-/* A value of 127 shall have no effect.
- * A value > 127 shall cause the color to shift towards red
- * A value < 127 shall cause the color to shift towards blue
- * Type: Range 
- */
-#define NV_CTRL_DDCCI_WINDOWEDIMAGE_6AXIS_COLOR_CONTROL_MAGENTA 165/* RWD */
-
-/* Turn the selected window operation on / off.
- * Bit: NV_CTRL_DDCCI_WINDOWEDIMAGE_CONTROL_TOGGLE_DPY_IMAGE
- *         0      Window controls have no effect on the
- *                displayed image
- *         1      Window controls effect the displayed image
- *                (full image area)
- *  Bit: NV_CTRL_DDCCI_WINDOWEDIMAGE_CONTROL_TOGGLE_WINDOW(n)
- *         0      Window controls have no effect on the
- *                displayed image (window n)
- *         1      Window controls effect the displayed image
- *                (window n)
- *  n is between 1 and 7
- * Note: This command structure is recommend, in conjunction with
- * NV_CTRL_DDCCI_WINDOWEDIMAGE_WINDOW_SELECT, for all new designs.
- * Type: Bitmask
- */ 
-#define NV_CTRL_DDCCI_WINDOWEDIMAGE_CONTROL_TOGGLE              166/* RWD */
-#define NV_CTRL_DDCCI_WINDOWEDIMAGE_CONTROL_TOGGLE_DPY_IMAGE    1
-#define NV_CTRL_DDCCI_WINDOWEDIMAGE_CONTROL_TOGGLE_WINDOW(n)    (1<<n)
-
-/* Change the selected window as defined with 
- * NV_CTRL_DDCCI_WINDOWEDIMAGE_CONTROL_TOGGLE
- * When a window is selected then all commands that the display
- * controller supports for window operations are valid, this may
- * include but is not limited to: brightness, contrast, R/G/B gain, 6-
- * axis color, sharpness, etc.
- * meaning of value NV_CTRL_DDCCI_WINDOWEDIMAGE_WINDOW_SELECT_DPY_IMAGE:
- *           Full display image area is selected except for
- *           area(s) of active windows
- * meaning of value NV_CTRL_DDCCI_WINDOWEDIMAGE_WINDOW_SELECT_WINDOW(n)
- *           Window n is selected
- * If this command is not supported then the `full image area' shall
- * be the default.
- * This command structure is recommend, in conjunction with 
- * NV_CTRL_DDCCI_WINDOWEDIMAGE_CONTROL_TOGGLE, for all new designs.
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_WINDOWEDIMAGE_WINDOW_SELECT               167/* RWD */
-#define NV_CTRL_DDCCI_WINDOWEDIMAGE_WINDOW_SELECT_DPY_IMAGE     0
-#define NV_CTRL_DDCCI_WINDOWEDIMAGE_WINDOW_SELECT_WINDOW(n)     (1<<n)
-
-
-/*************************************/
-/* DDC/CI VCP CODES: AUDIO FUNCTIONS */
-/*************************************/
-
-/* Increasing (decreasing) this value will increase (decrease) the
- * audio volume.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_AUDIO_SPEAKER_VOLUME                      168/* RWD */
-
-/* Increasing (decreasing) this value will increase (decrease) the
- * microphone gain.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_AUDIO_MICROPHONE_VOLUME                   169/* RWD */
-
-/* Increasing (decreasing) this control will cause high frequency
- * audio to be emphasized (de-emphasised).
- * Type: Range
- */
-#define NV_CTRL_DDCCI_AUDIO_TV_AUDIO_TREBLE                     170/* RWD */
-
-/* Increasing (decreasing) this control will cause low frequency
- * audio to be emphasized (de-emphasised).
- * Type: Range
- */
-#define NV_CTRL_DDCCI_AUDIO_TV_AUDIO_BASS                       171/* RWD */
-
-/* This control affects the left ­ right balance of audio output.
- * Increasing (decreasing) the value will cause the balance to move
- * to the right (left).
- * Type: Range
- */
-#define NV_CTRL_DDCCI_AUDIO_TV_AUDIO_BALANCE                    172/* RWD */
-
-/* This control allows one of several audio modes to be selected.
- * NV_CTRL_DDCCI_AUDIO_TV_STEREO_MODE_SPEAKER_OFF: Display audio is disabled,
- * NV_CTRL_DDCCI_AUDIO_TV_STEREO_MODE_SPEAKER_MONO: Both display audio channels,
- *  use the left audio channel
- * NV_CTRL_DDCCI_AUDIO_TV_STEREO_MODE_SPEAKER_STEREO: Incoming left and right 
- *  audio. Channels feed separate display output audio channels.
- * NV_CTRL_DDCCI_AUDIO_TV_STEREO_MODE_SPEAKER_STEREO_EXPANDED: As defined 
- *  by the manufacturer.
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_AUDIO_TV_STEREO_MODE                      173/* RWD */
-#define NV_CTRL_DDCCI_AUDIO_TV_STEREO_MODE_SPEAKER_OFF          0
-#define NV_CTRL_DDCCI_AUDIO_TV_STEREO_MODE_SPEAKER_MONO         1
-#define NV_CTRL_DDCCI_AUDIO_TV_STEREO_MODE_SPEAKER_STEREO       2
-#define NV_CTRL_DDCCI_AUDIO_TV_STEREO_MODE_SPEAKER_STEREO_EXPANDED 3
-
-
-/************************************/
-/* DDC/CI VCP CODES: DPVL Functions */
-/************************************/
-
-/* Video mode and status of a DPVL capable monitor
- * Bit   Value                          Meaning
- *  0      0      Raster scan mode
- *         1      DPVL mode
- *  1      0      Monitor is able to receive the next packet
- *         1      Monitor is unable to accept another packet
- *  2      0      No error detected in the last header received
- *         1      Error detected in the last header received
- * Other bits are reserved and shall be set to '0'.
- * Type: Bitmask
- */
-#define NV_CTRL_DDCCI_DPVL_MONITOR_STATUS                       174/* R-D */ 
-#define NV_CTRL_DDCCI_DPVL_MONITOR_STATUS_DPVL_MODE                     (1<<0)
-#define NV_CTRL_DDCCI_DPVL_MONITOR_STATUS_UNABLE_TO_RECEIVE_NEXT_PACKET (1<<1)
-#define NV_CTRL_DDCCI_DPVL_MONITOR_STATUS_ERROR_DETECTED_IN_LAST_HEADER (1<<2)
-
-/* Counter for the DPVL packets received (valid and invalid ones).
- * This value counts from 0000h to FFFFh and then rolls over to 0000h.
- * The host can reset the value to 0000h.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_DPVL_PACKET_COUNT                         175/* RWD */
-
-/* The X origin of the monitor in the virtual screen. The support of
- * this command indicates the multi-display support of the display. If
- * a display supports this command, the monitor must also support
- * Monitor Y Origin command.
- * Type: Range; "0000h" to "FFFFh" or 0 to 65535
- */
-#define NV_CTRL_DDCCI_DPVL_MONITOR_X_ORIGIN                     176/* RWD */
-
-/* The Y origin of the display in the virtual screen. The support of
- * this command indicates the multi-display support of the display. If
- * a display supports this command, the monitor must also support
- * Monitor X Origin command.
- * Type: Range; "0000h" to "FFFFh" or 0 to 65535
- */
-#define NV_CTRL_DDCCI_DPVL_MONITOR_Y_ORIGIN                     177/* RWD */
-
-/* Error Counter for the DPVL header. The counter value saturates
- * at FFFFh. Host can reset to 0000h.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_DPVL_HEADER_ERROR_COUNT                   178/* RWD */
-
-/* CRC error Counter for the DPVL body (containing video data).
- * The counter value saturates at FFFFh. The Host can reset to 0000h
- * Type: Range
- */
-#define NV_CTRL_DDCCI_DPVL_BODY_CRC_ERROR_COUNT                 179/* RWD */
-
-/* Assigned identification number for the monitor.
- * Type: Valid range is 0000h to FFFEh, FFFFh is reserved for broadcast.
- */
-#define NV_CTRL_DDCCI_DPVL_CLIENT_ID                            180/* RWD */
-
-/* Indicates the status of the DVI link
- * NV_CTRL_DDCCI_DPVL_LINK_CONTROL_DISABLED: Link shutdown is disabled
- * NV_CTRL_DDCCI_DPVL_LINK_CONTROL_ENABLED: Link shutdown is enabled
- * Type: Boolean
- */
-#define NV_CTRL_DDCCI_DPVL_LINK_CONTROL                         181/* RWD */
-#define NV_CTRL_DDCCI_DPVL_LINK_CONTROL_DISABLED                0
-#define NV_CTRL_DDCCI_DPVL_LINK_CONTROL_ENABLED                 1
-
-/**********************************************/
-/* DDC/CI VCP CODES:  Miscellaneous Functions */
-/**********************************************/
-
-/* Causes a CRT display to perform a degauss cycle with
- * NV_CTRL_DDCCI_ON
- * Type: Boolean
- */
-#define NV_CTRL_DDCCI_MISC_DEGAUSS                              182/* -WD */
-
-/* Used to indicate that a display user control (excluding power
- * controls) has been used to change and save (or autosave) a new value.
- * NV_CTRL_DDCCI_MISC_NEW_CONTROL_VALUE_NO_NEW : No new control value
- * NV_CTRL_DDCCI_MISC_NEW_CONTROL_VALUE_NO_USER_CONTROLS : A new control value 
- *  has been saved
- * NV_CTRL_DDCCI_MISC_NEW_CONTROL_VALUE_NO_USER_CONTROLS : No user controls are present
- * Note:
- * A value = NV_CTRL_DDCCI_MISC_NEW_CONTROL_VALUE_NEW should only be reset to 
- * a value = NV_CTRL_DDCCI_MISC_NEW_CONTROL_VALUE_NO_NEW by a host write
- * operation and not by the display
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_MISC_NEW_CONTROL_VALUE                    183/* RWD */
-#define NV_CTRL_DDCCI_MISC_NEW_CONTROL_VALUE_NO_NEW             0x01
-#define NV_CTRL_DDCCI_MISC_NEW_CONTROL_VALUE_NEW                0x02
-#define NV_CTRL_DDCCI_MISC_NEW_CONTROL_VALUE_NO_USER_CONTROLS   0xFF
-
-/* Allows display controls to be used as soft keys
- * NV_CTRL_DDCCI_MISC_SOFT_CONTROLS_NO_BUTTON_ACTIVE : No button active
- * NV_CTRL_DDCCI_MISC_SOFT_CONTROLS_BUTTON(n): Button n active
- * n is between 1 and 7.
- * NV_CTRL_DDCCI_MISC_SOFT_CONTROLS_NONE : No controls present
- * Note:
- * A `button active' value should only be reset to a value = 0 by
- * host write operation and not by the display
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_MISC_SOFT_CONTROLS                        184/* RWD */
-#define NV_CTRL_DDCCI_MISC_SOFT_CONTROLS_NO_BUTTON_ACTIVE       0
-#define NV_CTRL_DDCCI_MISC_SOFT_CONTROLS_BUTTON(n)              n
-#define NV_CTRL_DDCCI_MISC_SOFT_CONTROLS_NONE                   0xFF
-
-/* When read this control returns the VCP code associated with
- * the new control value reported using 02H
- * Examples:
- * If brightness has been changed then return value of 10h
- * If red gain has been changed then return value of 16h.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_MISC_ACTIVE_CONTROL                       185/* R-D */
-
-/* Used to select the active video source
- * NV_CTRL_DDCCI_MISC_INPUT_SOURCE_ANALOG_1: Analog video (R/G/B) 1
- * NV_CTRL_DDCCI_MISC_INPUT_SOURCE_ANALOG_2: Analog video (R/G/B) 2
- * NV_CTRL_DDCCI_MISC_INPUT_SOURCE_DIGITAL_1: Digital video (TMDS) 1
- * NV_CTRL_DDCCI_MISC_INPUT_SOURCE_DIGITAL_2: Digital video (TMDS) 2
- * NV_CTRL_DDCCI_MISC_INPUT_SOURCE_COMPOSITE_1: Composite video 1
- * NV_CTRL_DDCCI_MISC_INPUT_SOURCE_COMPOSITE_2: Composite video 2
- * NV_CTRL_DDCCI_MISC_INPUT_SOURCE_SVIDEO_1: S-video 1
- * NV_CTRL_DDCCI_MISC_INPUT_SOURCE_SVIDEO_2: S-video 2
- * NV_CTRL_DDCCI_MISC_INPUT_SOURCE_TUNER_1: Tuner 1
- * NV_CTRL_DDCCI_MISC_INPUT_SOURCE_TUNER_2: Tuner 2
- * NV_CTRL_DDCCI_MISC_INPUT_SOURCE_TUNER_3: Tuner 3
- * NV_CTRL_DDCCI_MISC_INPUT_SOURCE_COMPONENT_1: Component video (YPrPb/YCrCb) 1
- * NV_CTRL_DDCCI_MISC_INPUT_SOURCE_COMPONENT_2: Component video (YPrPb/YCrCb) 2
- * NV_CTRL_DDCCI_MISC_INPUT_SOURCE_COMPONENT_3: Component video (YPrPb/YCrCb) 3
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_MISC_INPUT_SOURCE                         186/* RWD */
-#define NV_CTRL_DDCCI_MISC_INPUT_SOURCE_ANALOG_1                1
-#define NV_CTRL_DDCCI_MISC_INPUT_SOURCE_ANALOG_2                2
-#define NV_CTRL_DDCCI_MISC_INPUT_SOURCE_DIGITAL_1               3
-#define NV_CTRL_DDCCI_MISC_INPUT_SOURCE_DIGITAL_2               4
-#define NV_CTRL_DDCCI_MISC_INPUT_SOURCE_COMPOSITE_1             5
-#define NV_CTRL_DDCCI_MISC_INPUT_SOURCE_COMPOSITE_2             6
-#define NV_CTRL_DDCCI_MISC_INPUT_SOURCE_SVIDEO_1                7
-#define NV_CTRL_DDCCI_MISC_INPUT_SOURCE_SVIDEO_2                8
-#define NV_CTRL_DDCCI_MISC_INPUT_SOURCE_TUNER_1                 9
-#define NV_CTRL_DDCCI_MISC_INPUT_SOURCE_TUNER_2                 10
-#define NV_CTRL_DDCCI_MISC_INPUT_SOURCE_TUNER_3                 11
-#define NV_CTRL_DDCCI_MISC_INPUT_SOURCE_COMPONENT_1             12
-#define NV_CTRL_DDCCI_MISC_INPUT_SOURCE_COMPONENT_2             13
-#define NV_CTRL_DDCCI_MISC_INPUT_SOURCE_COMPONENT_3             14
-
-/* ncreasing (decreasing) this value will increase (decrease) the
- * velocity modulation of the horizontal scan as a function of a
- * change in the luminance level.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_MISC_VELOCITY_SCAN_MODULATION             187/* RWD */
-
-/* Increasing this control increases the amplitude of the color
- * difference components of the video signal.
- * The result is an increase in the amount of pure color relative to
- * white in the video. This control does not affect the RGB input,
- * only the TV video inputs.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_MISC_TV_COLOR_SATURATION                  188/* RWD */
-
-/* Used to increment / decrement between TV-channels, the exact
- * behavior is implementation specific (e.g. increment / decrement
- * to next numeric channel or increment / decrement to next
- * channel with a signal)
- * NV_CTRL_DDCCI_MISC_TV_CHANNEL_UP_DOWN_INCREMENT: Increment channel
- * NV_CTRL_DDCCI_MISC_TV_CHANNEL_UP_DOWN_DECREMENT: Decrement channel
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_MISC_TV_CHANNEL_UP_DOWN                   189/* -WD */
-#define NV_CTRL_DDCCI_MISC_TV_CHANNEL_UP_DOWN_INCREMENT         1
-#define NV_CTRL_DDCCI_MISC_TV_CHANNEL_UP_DOWN_DECREMENT         2
-
-/* Increasing this control increases the amplitude of the high
- * frequency components of the video signal.
- * This allows fine details to be accentuated. This control does not
- * affect the RGB input, only the TV video inputs.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_MISC_TV_SHARPNESS                         190/* RWD */
-
-/* Provides for the TV-audio to be muted or unmated.
- * NV_CTRL_DDCCI_MISC_TV_AUDIO_MUTE_ON: Mute the audio
- * NV_CTRL_DDCCI_MISC_TV_AUDIO_MUTE_OFF: Unmute the audio
- * Type: Range
- */
-#define NV_CTRL_DDCCI_MISC_TV_AUDIO_MUTE                        191/* RWD */
-#define NV_CTRL_DDCCI_MISC_TV_AUDIO_MUTE_ON                     1
-#define NV_CTRL_DDCCI_MISC_TV_AUDIO_MUTE_OFF                    2
-
-/* Increasing (decreasing) this control increases (decreases) the
- * ratio between whites and blacks in the video.
- * This control does not affect the RGB input, only the TV video
- * inputs.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_MISC_TV_CONTRAST                          192/* RWD */
-
-/* Also known as `tint'
- * Increasing (decreasing) this control increases (decreases) the
- * wavelength of the color component of the video signal.
- * The result is a shift towards red (blue) in the hue of all colors.
- * This control does not affect the RGB input, only the TV video
- * inputs.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_MISC_TV_HUE                               193/* RWD */
-
-/* Increasing this control increases the black level of the video,
- * resulting in an increase of the luminance level of the video.
- * A value of zero represents the darkest level possible.
- * This control does not affect the RGB input, only the TV video
- * inputs.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_MISC_TV_BLACK_LEVEL_SHARPNESS             194/* RWD */
-
-/* Horizontal synchronization signal frequency in Hz as determined
- * by the display.
- * FFh: Indicates that the display cannot supply this information
- * Type: Range
- */
-#define NV_CTRL_DDCCI_MISC_HORIZONTAL_FREQUENCY                 195/* R-D */
-
-/* Vertical synchronization signal frequency in 0.01Hz as
- * determined by the display.
- * FFh: Indicates that the display cannot supply this information
- * Type: Range
- */
-#define NV_CTRL_DDCCI_MISC_VERTICAL_FREQUENCY                   196/* R-D */
-
-/* Select a type of LCD sub-pixel structure
- * NV_CTRL_DDCCI_MISC_FLATPANEL_SUBPIXEL_LAYOUT_UNDEFINED:
- *      Sub-pixel layout is not defined
- * NV_CTRL_DDCCI_MISC_FLATPANEL_SUBPIXEL_LAYOUT_RGB_V:
- *      Red / Green / Blue vertical stripe
- * NV_CTRL_DDCCI_MISC_FLATPANEL_SUBPIXEL_LAYOUT_RGB_H:
- *      Red / Green / Blue horizontal stripe
- * NV_CTRL_DDCCI_MISC_FLATPANEL_SUBPIXEL_LAYOUT_BGR_V:
- *      Blue / Green / Red vertical stripe
- * NV_CTRL_DDCCI_MISC_FLATPANEL_SUBPIXEL_LAYOUT_BGR_H:
- *      Blue/ Green / Red horizontal stripe
- * NV_CTRL_DDCCI_MISC_FLATPANEL_SUBPIXEL_LAYOUT_QUAD_1:
- *      Quad-pixel, a 2 x 2 sub-pixel structure with red at top
- *      left, blue at bottom right and green at top right and
- *      bottom left
- * NV_CTRL_DDCCI_MISC_FLATPANEL_SUBPIXEL_LAYOUT_QUAD_2:
- *      Quad-pixel, a 2 x 2 sub-pixel structure with red at
- *      bottom left, blue at top right and green at top left and
- *      bottom right
- * NV_CTRL_DDCCI_MISC_FLATPANEL_SUBPIXEL_LAYOUT_DELTA:
- *      Delta (triad)
- * NV_CTRL_DDCCI_MISC_FLATPANEL_SUBPIXEL_LAYOUT_MOSAIC:
- *      Mosaic with red, green and blue fields overlayed 
- *      (field sequential color)
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_MISC_FLATPANEL_SUBPIXEL_LAYOUT            197/* R-D */
-#define NV_CTRL_DDCCI_MISC_FLATPANEL_SUBPIXEL_LAYOUT_UNDEFINED  0
-#define NV_CTRL_DDCCI_MISC_FLATPANEL_SUBPIXEL_LAYOUT_RGB_V      1
-#define NV_CTRL_DDCCI_MISC_FLATPANEL_SUBPIXEL_LAYOUT_RGB_H      2
-#define NV_CTRL_DDCCI_MISC_FLATPANEL_SUBPIXEL_LAYOUT_BGR_V      3
-#define NV_CTRL_DDCCI_MISC_FLATPANEL_SUBPIXEL_LAYOUT_BGR_H      4
-#define NV_CTRL_DDCCI_MISC_FLATPANEL_SUBPIXEL_LAYOUT_QUAD_1     5
-#define NV_CTRL_DDCCI_MISC_FLATPANEL_SUBPIXEL_LAYOUT_QUAD_2     6
-#define NV_CTRL_DDCCI_MISC_FLATPANEL_SUBPIXEL_LAYOUT_DELTA      7
-#define NV_CTRL_DDCCI_MISC_FLATPANEL_SUBPIXEL_LAYOUT_MOSAIC     8
-
-/* Select the base technology type
- * NV_CTRL_DDCCI_MISC_DISPLAY_TECHNOLOGY_TYPE_CRT_SHADOWMASK: CRT (shadowmask)
- * NV_CTRL_DDCCI_MISC_DISPLAY_TECHNOLOGY_TYPE_CRT_APERTURE_GRILL: CRT (aperture
- *      grill)
- * NV_CTRL_DDCCI_MISC_DISPLAY_TECHNOLOGY_TYPE_TFT: TFT
- * NV_CTRL_DDCCI_MISC_DISPLAY_TECHNOLOGY_TYPE_LCOS: LCoS
- * NV_CTRL_DDCCI_MISC_DISPLAY_TECHNOLOGY_TYPE_PLASMA: Plasma
- * NV_CTRL_DDCCI_MISC_DISPLAY_TECHNOLOGY_TYPE_OLED: OLED
- * NV_CTRL_DDCCI_MISC_DISPLAY_TECHNOLOGY_TYPE_EL: EL
- * NV_CTRL_DDCCI_MISC_DISPLAY_TECHNOLOGY_TYPE_MEM: MEM
- * Type: integer
- */
-#define NV_CTRL_DDCCI_MISC_DISPLAY_TECHNOLOGY_TYPE              198/* R-D */
-#define NV_CTRL_DDCCI_MISC_DISPLAY_TECHNOLOGY_TYPE_CRT_SHADOWMASK       1
-#define NV_CTRL_DDCCI_MISC_DISPLAY_TECHNOLOGY_TYPE_CRT_APERTURE_GRILL   2
-#define NV_CTRL_DDCCI_MISC_DISPLAY_TECHNOLOGY_TYPE_TFT                  3
-#define NV_CTRL_DDCCI_MISC_DISPLAY_TECHNOLOGY_TYPE_LCOS                 4
-#define NV_CTRL_DDCCI_MISC_DISPLAY_TECHNOLOGY_TYPE_PLASMA               5
-#define NV_CTRL_DDCCI_MISC_DISPLAY_TECHNOLOGY_TYPE_OLED                 6
-#define NV_CTRL_DDCCI_MISC_DISPLAY_TECHNOLOGY_TYPE_EL                   7
-#define NV_CTRL_DDCCI_MISC_DISPLAY_TECHNOLOGY_TYPE_MEM                  8
-
-/* Returns the current value (in hours) of `active power on' time
- * accumulated by the display ­ a 2 byte value.
- * "Active power on" time is defined as the period when the
- * emissive elements(s) of the display ­ cathodes for a CRT,
- * fluorescent lamps for a LCD, etc ­ are active.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_MISC_DISPLAY_USAGE_TIME                   199/* R-D */
-
-/* Returns the length (in bytes) of non-volatile storage in the display
- * available for writing a display descriptor ­ the maximum
- * descriptor length is 256 bytes
- * See 
- * Type: Range
- */
-#define NV_CTRL_DDCCI_MISC_DISPLAY_DESCRIPTOR_LENGTH            200/* R-D */
-
-/* If enabled (NV_CTRL_DDCCI_ON), the display descriptor written to the 
- * display using XNVCTRLSetDDCCIDisplayDescriptor() shall be displayed when 
- * no video is being received.
- * The duration for which it is displayed is left to individual manufacturers.
- * NV_CTRL_DDCCI_ON: Display is enabled
- * NV_CTRL_DDCCI_OFF: The display descriptor shall not be displayed.
- * Type: Boolean
- */
-#define NV_CTRL_DDCCI_MISC_ENABLE_DISPLAY_OF_DISPLAY_DESCRIPTOR 201/* RWD */
-
-/* A 2 byte value used to allow an application to only operate with
- * known products. The display manufacturer and application author
- * agree to a code such that application will only run when a valid
- * code is present in the display.
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_MISC_APPLICATION_ENABLE_KEY               202/* R-D */
-
-/* This VCP code provides allows a 2 byte value identifying the
- * firmware level installed in the display to be determined.
- * Type: Range
- */
-#define NV_CTRL_DDCCI_MISC_DISPLAY_FIRMWARE_LEVEL               203/* R-D */
-
-/* Indicates the current state of the display OSD
- * NV_CTRL_DDCCI_MISC_OSD_DISABLED: OSD is disabled
- * NV_CTRL_DDCCI_MISC_OSD_ENABLED: OSD is enabled
- * NV_CTRL_DDCCI_MISC_OSD_CANNOT_SUPPLY: Indicates that the display cannot 
- *  supply this information.
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_MISC_OSD                                  204/* RWD */
-#define NV_CTRL_DDCCI_MISC_OSD_DISABLED                         1
-#define NV_CTRL_DDCCI_MISC_OSD_ENABLED                          2
-#define NV_CTRL_DDCCI_MISC_OSD_CANNOT_SUPPLY                    0xFF
-
-/* Allows the displayed OSD language to be selected.
- * Type: Integer */
-#define NV_CTRL_DDCCI_MISC_OSD_LANGUAGE                         205/* RWD */
-#define NV_CTRL_DDCCI_MISC_OSD_LANGUAGE_CHINESE                 1
-#define NV_CTRL_DDCCI_MISC_OSD_LANGUAGE_ENGLISH                 2
-#define NV_CTRL_DDCCI_MISC_OSD_LANGUAGE_FRENCH                  3
-#define NV_CTRL_DDCCI_MISC_OSD_LANGUAGE_GERMAN                  4
-#define NV_CTRL_DDCCI_MISC_OSD_LANGUAGE_ITALIAN                 5
-#define NV_CTRL_DDCCI_MISC_OSD_LANGUAGE_JAPANESE                6
-#define NV_CTRL_DDCCI_MISC_OSD_LANGUAGE_KOREAN                  7
-#define NV_CTRL_DDCCI_MISC_OSD_LANGUAGE_PORTUGESE               8
-#define NV_CTRL_DDCCI_MISC_OSD_LANGUAGE_RUSSIAN                 9
-#define NV_CTRL_DDCCI_MISC_OSD_LANGUAGE_SPANISH                 10
-
-/* An `auxiliary display' is a small alpha-numeric display associated
- * with the primary display and able to be accessed via the primary
- * display.
- * This command returns a 1 byte value that defines the number of
- * characters and the number of rows available. The format is:
- * Bits 0 to 5 : The number of characters / row
- * Bits 6 to 7 : The number of rows
- * I.e. The maximum auxiliary display size is 4 rows each with 64 characters
- * Type: Bitmask
- */
-#define NV_CTRL_DDCCI_MISC_AUXILIARY_DISPLAY_SIZE               206/* R-D */
-#define NV_CTRL_DDCCI_MISC_AUXILIARY_DISPLAY_SIZE_COLUMNS_MASK  0x1F
-#define NV_CTRL_DDCCI_MISC_AUXILIARY_DISPLAY_SIZE_ROWS_MASK     0x60
-
-#define NV_CTRL_DDCCI_MISC_OUTPUT_SELECT                        207/* RWD */
-
-/* Used to selects the active output.
- * NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_ANALOG_1: Analog video (R/G/B) 1
- * NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_ANALOG_2: Analog video (R/G/B) 2
- * NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_DIGITAL_1: Digital video (TMDS) 1
- * NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_DIGITAL_2: Digital video (TMDS) 2
- * NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_COMPOSITE_1: Composite video 1
- * NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_COMPOSITE_2: Composite video 2
- * NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_SVIDEO_1: S-video 1
- * NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_SVIDEO_2: S-video 2
- * NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_TUNER_1: Tuner 1
- * NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_TUNER_2: Tuner 2
- * NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_TUNER_3: Tuner 3
- * NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_COMPONENT_1: Component video (YPrPb/YCrCb) 1
- * NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_COMPONENT_2: Component video (YPrPb/YCrCb) 2
- * NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_COMPONENT_3: Component video (YPrPb/YCrCb) 3
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_ANALOG_1               1
-#define NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_ANALOG_2               2
-#define NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_DIGITAL_1              3
-#define NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_DIGITAL_2              4
-#define NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_COMPOSITE_1            5
-#define NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_COMPOSITE_2            6
-#define NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_SVIDEO_1               7
-#define NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_SVIDEO_2               8
-#define NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_TUNER_1                9
-#define NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_TUNER_2                10
-#define NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_TUNER_3                11
-#define NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_COMPONENT_1            12
-#define NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_COMPONENT_2            13
-#define NV_CTRL_DDCCI_MISC_OUTPUT_SELECT_COMPONENT_3            14
-
-/* Used to select the video mode with respect to 2D or 3D video.
- * Here is the meaning of the bitmask:
- * NV_CTRL_DDCCI_MISC_STEREO_VIDEO_MODE_FIELD_SEQUENTIAL_RIGHT_FIRST:
- *  Enable Field-Sequential Right Eye First
- * NV_CTRL_DDCCI_MISC_STEREO_VIDEO_MODE_FIELD_SEQUENTIAL_LEFT_FIRST:
- *  Enable Field-Sequential Left Eye First
- * NV_CTRL_DDCCI_MISC_STEREO_VIDEO_MODE_2WAY_INTERLEAVED_RIGHT_FIRST:
- *  Enable 2-Way Interleaved Right Eye First
- * NV_CTRL_DDCCI_MISC_STEREO_VIDEO_MODE_2WAY_INTERLEAVED_LEFT_FIRST:
- *  Enable 2-Way Interleaved Left Eye First
- * NV_CTRL_DDCCI_MISC_STEREO_VIDEO_MODE_4WAY_INTERLEAVED_ODD_LINES:
- *  Enable 4-Way Interleaved, Display Stereo Buffer 0 (even scan lines)
- * NV_CTRL_DDCCI_MISC_STEREO_VIDEO_MODE_4WAY_INTERLEAVED_ODD_LINES:
- *  Enable 4-Way Interleaved, Display Stereo Buffer 1 (odd scan lines)
- * NV_CTRL_DDCCI_MISC_STEREO_VIDEO_MODE_SIDE_BY_SIDE_INTERLEAVED:
- * Enable Side-by-Side Interleaved
- * Note: It is permissible, during a read operation, for a display to indicate
- * support for 2 or more stereo modes
- * Type: Bitmask
- */
-#define NV_CTRL_DDCCI_MISC_STEREO_VIDEO_MODE                    208/* RWD */
-#define NV_CTRL_DDCCI_MISC_STEREO_VIDEO_MODE_FIELD_SEQUENTIAL_RIGHT_FIRST (1<<6)
-#define NV_CTRL_DDCCI_MISC_STEREO_VIDEO_MODE_FIELD_SEQUENTIAL_LEFT_FIRST  (1<<5)
-#define NV_CTRL_DDCCI_MISC_STEREO_VIDEO_MODE_2WAY_INTERLEAVED_RIGHT_FIRST (1<<4)
-#define NV_CTRL_DDCCI_MISC_STEREO_VIDEO_MODE_2WAY_INTERLEAVED_LEFT_FIRST  (1<<3)
-#define NV_CTRL_DDCCI_MISC_STEREO_VIDEO_MODE_4WAY_INTERLEAVED_EVEN_LINES  (1<<2)
-#define NV_CTRL_DDCCI_MISC_STEREO_VIDEO_MODE_4WAY_INTERLEAVED_ODD_LINES   (1<<1)
-#define NV_CTRL_DDCCI_MISC_STEREO_VIDEO_MODE_SIDE_BY_SIDE_INTERLEAVED     (1<<0)
-
-/* Power Mode ­ DPMS and DPM standards are supported.
- * Value                                    DPMS        DPM
- * NV_CTRL_DDCCI_MISC_POWER_MODE_ON         On          On
- * NV_CTRL_DDCCI_MISC_POWER_MODE_STANDBY    Standby     Off
- * NV_CTRL_DDCCI_MISC_POWER_MODE_SUSPEND    Suspend     Off
- * NV_CTRL_DDCCI_MISC_POWER_MODE_OFF        Off         Off
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_MISC_POWER_MODE                           209/* RWD */
-#define NV_CTRL_DDCCI_MISC_POWER_MODE_ON                        1
-#define NV_CTRL_DDCCI_MISC_POWER_MODE_STANDBY                   2
-#define NV_CTRL_DDCCI_MISC_POWER_MODE_SUSPEND                   3
-#define NV_CTRL_DDCCI_MISC_POWER_MODE_OFF                       4
-
-/* Controls output of an auxiliary power output from a display to a host device.
- * NV_CTRL_DDCCI_MISC_AUXILIARY_POWER_OUTPUT_DISABLE: 
- *  Disable auxiliary output power
- * NV_CTRL_DDCCI_MISC_AUXILIARY_POWER_OUTPUT_ENABLE: 
- * Enable auxiliary output power
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_MISC_AUXILIARY_POWER_OUTPUT               210/* RWD */
-#define NV_CTRL_DDCCI_MISC_AUXILIARY_POWER_OUTPUT_DISABLE       1
-#define NV_CTRL_DDCCI_MISC_AUXILIARY_POWER_OUTPUT_ENABLE        2
-
-/* Operation mode
- * NV_CTRL_DDCCI_MISC_OPERATION_MODE_STANDALONE: Stand alone
- * NV_CTRL_DDCCI_MISC_OPERATION_MODE_SLAVE: Slave (full PC control)
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_MISC_OPERATION_MODE                       211/* -WD */
-#define NV_CTRL_DDCCI_MISC_OPERATION_MODE_STANDALONE            1
-#define NV_CTRL_DDCCI_MISC_OPERATION_MODE_SLAVE                 2
-
-/* Define the version number of VCP list recognized by the display.
- * This is a 2 byte value, byte 1 defines the version number and
- * byte 2 defines the revision number
- * e.g 02 00 (hex) defines Version 2, Revision 0
- * Type: Integer
- */
-#define NV_CTRL_DDCCI_MISC_VCP_VERSION                          212/* R-D */
-
-/* Save the current adjustment data to EEPROM or other 
- * non-volatile storage inside the display
- * Returns TRUE on success
- * Type: Boolean
- */
-#define NV_CTRL_DDCCI_SAVE_CURRENT_SETTINGS                     213/* -WD */
-
-/* Detects if the display is DDC/CI capable
- * Returns TRUE on success
- * Type: Boolean
- */ 
-#define NV_CTRL_DDCCI_CAPABLE                                   214/* R-D*/
-
-#define NV_CTRL_DDCCI_FIRST_VCP NV_CTRL_DDCCI_GEOMETRY_HORIZONTAL_POSITION
-#define NV_CTRL_DDCCI_LAST_VCP NV_CTRL_DDCCI_CAPABLE
-/**************************************************************************/
-
 /*
  * NV_CTRL_FLATPANEL_CHIP_LOCATION - for the specified display device,
  * report whether the flat panel is driven by the on-chip controller,
@@ -2545,24 +1369,26 @@
 #define NV_CTRL_FLATPANEL_CHIP_LOCATION_EXTERNAL                  1
 
 /*
- * NV_CTRL_FLATPANEL_LINK - report whether the specified display
- * device is driven by a single link or dual link DVI connection.
+ * NV_CTRL_FLATPANEL_LINK - report the number of links for a DVI connection, or
+ * the main link's active lane count for DisplayPort.
  * This attribute is only available for flat panels.
  */
 
 #define NV_CTRL_FLATPANEL_LINK                                  216/* R-DG */
 #define NV_CTRL_FLATPANEL_LINK_SINGLE                             0
 #define NV_CTRL_FLATPANEL_LINK_DUAL                               1
+#define NV_CTRL_FLATPANEL_LINK_QUAD                               3
 
 /*
  * NV_CTRL_FLATPANEL_SIGNAL - for the specified display device, report
- * whether the flat panel is driven by an LVDS or TMDS signal.  This
- * attribute is only available for flat panels.
+ * whether the flat panel is driven by an LVDS, TMDS, or DisplayPort signal.
+ * This attribute is only available for flat panels.
  */
 
 #define NV_CTRL_FLATPANEL_SIGNAL                                217/* R-DG */
 #define NV_CTRL_FLATPANEL_SIGNAL_LVDS                             0
 #define NV_CTRL_FLATPANEL_SIGNAL_TMDS                             1
+#define NV_CTRL_FLATPANEL_SIGNAL_DISPLAYPORT                      2
 
 
 /*
@@ -2675,11 +1501,11 @@
 #define NV_CTRL_GVO_OUTPUT_VIDEO_FORMAT2                         227  /* --- */
 
 /*
- * Override the SDI hardware's Color Space Conversion with the values
- * controlled through XNVCTRLSetGvoColorConversion() and
- * XNVCTRLGetGvoColorConversion().  If this attribute is FALSE, then
- * the values specified through XNVCTRLSetGvoColorConversion() are
- * ignored.
+ * NV_CTRL_GVO_OVERRIDE_HW_CSC - Override the SDI hardware's Color Space
+ * Conversion with the values controlled through
+ * XNVCTRLSetGvoColorConversion() and XNVCTRLGetGvoColorConversion().  If
+ * this attribute is FALSE, then the values specified through
+ * XNVCTRLSetGvoColorConversion() are ignored.
  */
 
 #define NV_CTRL_GVO_OVERRIDE_HW_CSC                              228  /* RW- */
@@ -2825,6 +1651,8 @@
  * initially, but allows them to migrate to video memory.
  * NV_CTRL_INITIAL_PIXMAP_PLACEMENT_VIDMEM creates pixmaps in video memory
  * when enough resources are available.
+ * NV_CTRL_INITIAL_PIXMAP_PLACEMENT_RESERVED is currently reserved for future
+ * use.  Behavior is undefined.
  * NV_CTRL_INITIAL_PIXMAP_PLACEMENT_GPU_SYSMEM creates pixmaps in GPU accessible
  * system memory when enough resources are available.
  */
@@ -2833,6 +1661,7 @@
 #define NV_CTRL_INITIAL_PIXMAP_PLACEMENT_FORCE_SYSMEM            0
 #define NV_CTRL_INITIAL_PIXMAP_PLACEMENT_SYSMEM                  1
 #define NV_CTRL_INITIAL_PIXMAP_PLACEMENT_VIDMEM                  2
+#define NV_CTRL_INITIAL_PIXMAP_PLACEMENT_RESERVED                3
 #define NV_CTRL_INITIAL_PIXMAP_PLACEMENT_GPU_SYSMEM              4
 
 
@@ -3093,7 +1922,7 @@
 #define NV_CTRL_HWOVERLAY_TRUE                                    1
 
 /*
- * NV_CTRL_NUM_GPU_ERRORS_RECOVERED - Returns the number of gpu errors
+ * NV_CTRL_NUM_GPU_ERRORS_RECOVERED - Returns the number of GPU errors
  * occured. This attribute may be queried through XNVCTRLQueryTargetAttribute()
  * using a NV_CTRL_TARGET_TYPE_X_SCREEN target.
  */
@@ -3290,15 +2119,18 @@
 
 
 /*
- * NV_CTRL_SWITCH_TO_DISPLAYS takes display to which
- * user wants to switch.
+ * NV_CTRL_SWITCH_TO_DISPLAYS - Can be used to select which displays
+ * to switch to (as a hotkey event).
  */
 
 #define NV_CTRL_SWITCH_TO_DISPLAYS                              276 /* -W- */
 
-/*
- * NV_CTRL_NOTEBOOK_DISPLAY_CHANGE_LID_EVENT can be used to send event
- * to notify open/closure of the lid.
+
+/*
+ * NV_CTRL_NOTEBOOK_DISPLAY_CHANGE_LID_EVENT - Event that notifies
+ * when a notebook lid change occurs (i.e. when the lid is opened or
+ * closed.)  This attribute can be queried to retrieve the current
+ * notebook lid status (opened/closed.)
  */
 
 #define NV_CTRL_NOTEBOOK_DISPLAY_CHANGE_LID_EVENT               277 /* RW- */
@@ -3306,8 +2138,8 @@
 #define NV_CTRL_NOTEBOOK_DISPLAY_CHANGE_LID_EVENT_OPEN            1
 
 /*
- * NV_CTRL_NOTEBOOK_INTERNAL_LCD returns intenal LCD
- * of Notebook.
+ * NV_CTRL_NOTEBOOK_INTERNAL_LCD - Returns the display device mask of
+ * the intenal LCD of a notebook.
  */
 
 #define NV_CTRL_NOTEBOOK_INTERNAL_LCD                           278 /* R-- */
@@ -3319,7 +2151,153 @@
 
 #define NV_CTRL_DEPTH_30_ALLOWED                                279 /* R--G */
 
-#define NV_CTRL_LAST_ATTRIBUTE NV_CTRL_DEPTH_30_ALLOWED
+
+/*
+ * NV_CTRL_MODE_SET_EVENT This attribute is sent as an event
+ * when hotkey, ctrl-alt-+/- or randr event occurs.  Note that
+ * This attribute cannot be set or queried and is meant to
+ * be received by clients that wish to be notified of when
+ * mode set events occur.
+ */
+
+#define NV_CTRL_MODE_SET_EVENT                                  280 /* --- */
+
+
+/*
+ * NV_CTRL_OPENGL_AA_LINE_GAMMA_VALUE - the gamma value used by
+ * OpenGL when NV_CTRL_OPENGL_AA_LINE_GAMMA is enabled
+ */
+
+#define NV_CTRL_OPENGL_AA_LINE_GAMMA_VALUE                      281 /* RW-X */
+
+
+/*
+ * NV_CTRL_VCSC_HIGH_PERF_MODE - Is used to both query High Performance Mode
+ * status on the Visual Computing System, and also to enable or disable High
+ * Performance Mode.
+ */
+
+#define NV_CTRL_VCSC_HIGH_PERF_MODE                             282 /* RW-V */
+#define NV_CTRL_VCSC_HIGH_PERF_MODE_DISABLE                       0
+#define NV_CTRL_VCSC_HIGH_PERF_MODE_ENABLE                        1
+
+
+/*
+ * NV_CTRL_OPENGL_AA_LINE_GAMMA_VALUE - the gamma value used by
+ * OpenGL when NV_CTRL_OPENGL_AA_LINE_GAMMA is enabled
+ */
+
+#define NV_CTRL_OPENGL_AA_LINE_GAMMA_VALUE                      281 /* RW-X */
+
+/*
+ * NV_CTRL_DISPLAYPORT_LINK_RATE - returns the negotiated lane bandwidth of the
+ * DisplayPort main link.
+ * This attribute is only available for DisplayPort flat panels.
+ */
+
+#define NV_CTRL_DISPLAYPORT_LINK_RATE                           291 /* R-DG */
+#define NV_CTRL_DISPLAYPORT_LINK_RATE_DISABLED                  0x0
+#define NV_CTRL_DISPLAYPORT_LINK_RATE_1_62GBPS                  0x6
+#define NV_CTRL_DISPLAYPORT_LINK_RATE_2_70GBPS                  0xA
+
+/*
+ * NV_CTRL_STEREO_EYES_EXCHANGE - Controls whether or not the left and right
+ * eyes of a stereo image are flipped.
+ */
+
+#define NV_CTRL_STEREO_EYES_EXCHANGE                            292  /* RW-X */
+#define NV_CTRL_STEREO_EYES_EXCHANGE_OFF                          0
+#define NV_CTRL_STEREO_EYES_EXCHANGE_ON                           1
+
+/*
+ * NV_CTRL_NO_SCANOUT - returns whether the special "NoScanout" mode is
+ * enabled on the specified X screen or GPU; for details on this mode,
+ * see the description of the "none" value for the "UseDisplayDevice"
+ * X configuration option in the NVIDIA driver README.
+ */
+
+#define NV_CTRL_NO_SCANOUT                                      293 /* R--G */
+#define NV_CTRL_NO_SCANOUT_DISABLED                             0
+#define NV_CTRL_NO_SCANOUT_ENABLED                              1
+
+/*
+ * NV_CTRL_GVO_CSC_CHANGED_EVENT This attribute is sent as an event
+ * when the color space conversion matrix has been altered by another
+ * client.
+ */
+
+#define NV_CTRL_GVO_CSC_CHANGED_EVENT                           294 /* --- */
+
+/* 
+ * NV_CTRL_FRAMELOCK_SLAVEABLE - Returns a bitmask of the display devices
+ * that are (currently) allowed to be selected as slave devices for the
+ * given GPU
+ */
+
+#define NV_CTRL_FRAMELOCK_SLAVEABLE                             295 /* R-DG */
+
+/*
+ * NV_CTRL_GVO_SYNC_TO_DISPLAY This attribute controls whether or not
+ * the non-SDI display device will be sync'ed to the SDI display device
+ * (when configured in TwinView, Clone Mode or when using the SDI device
+ * with OpenGL).
+ */
+
+#define NV_CTRL_GVO_SYNC_TO_DISPLAY                             296 /* --- */
+#define NV_CTRL_GVO_SYNC_TO_DISPLAY_DISABLE                     0
+#define NV_CTRL_GVO_SYNC_TO_DISPLAY_ENABLE                      1
+
+/*
+ * NV_CTRL_PIXMAP_CACHE - This attribute controls whether the driver attempts to
+ * store video memory pixmaps in a cache.  The cache speeds up allocation and
+ * deallocation of pixmaps, but could use more memory than when the cache is
+ * disabled.
+ */
+
+#define NV_CTRL_PIXMAP_CACHE                                    298 /* RW-X */
+#define NV_CTRL_PIXMAP_CACHE_DISABLE                              0
+#define NV_CTRL_PIXMAP_CACHE_ENABLE                               1
+
+/*
+ * NV_CTRL_PIXMAP_CACHE_ROUNDING_SIZE_KB - When the pixmap cache is enabled and
+ * there is not enough free space in the cache to fit a new pixmap, the driver
+ * will round up to the next multiple of this number of kilobytes when
+ * allocating more memory for the cache.
+ */
+
+#define NV_CTRL_PIXMAP_CACHE_ROUNDING_SIZE_KB                   299 /* RW-X */
+
+/*
+ * NV_CTRL_IS_GVO_DISPLAY - returns whether or not a given display is an
+ * SDI device.
+ */
+
+#define NV_CTRL_IS_GVO_DISPLAY                                  300 /* R-D */
+#define NV_CTRL_IS_GVO_DISPLAY_FALSE                              0
+#define NV_CTRL_IS_GVO_DISPLAY_TRUE                               1
+
+/*
+ * NV_CTRL_PCI_ID - Returns the PCI vendor and device ID of the GPU.
+ *
+ * NV_CTRL_PCI_ID is a "packed" integer attribute; the PCI vendor ID is stored
+ * in the upper 16 bits of the integer, and the PCI device ID is stored in the
+ * lower 16 bits of the integer.
+ */
+
+#define NV_CTRL_PCI_ID                                          301 /* R--G */
+
+/*
+ * NV_CTRL_GVO_FULL_RANGE_COLOR - Allow full range color data [4-1019]
+ * without clamping to [64-940].
+ */
+
+#define NV_CTRL_GVO_FULL_RANGE_COLOR                            302 /* R-- */
+#define NV_CTRL_GVO_FULL_RANGE_COLOR_DISABLED                     0
+#define NV_CTRL_GVO_FULL_RANGE_COLOR_ENABLED                      1
+
+#define NV_CTRL_LAST_ATTRIBUTE  NV_CTRL_GVO_FULL_RANGE_COLOR
+
+
 
 /**************************************************************************/
 
@@ -3385,33 +2363,6 @@
  */
 
 #define NV_CTRL_STRING_TV_ENCODER_NAME                          5  /* R-DG */
-
-
-/* NV_CTRL_STRING_DDCCI_MISC_TRANSMIT_DISPLAY_DESCRIPTOR -
- * Allows a display descriptor (up to maximum length defined by the
- * display (see NV_CTRL_DDCCI_MISC_DISPLAY_DESCRIPTOR_LENGTHC2h) to be written 
- * (read) to (from) non-volatile storage in the display.
- * If an attempt is made to write beyond the maximum storage
- * length, the descriptor shall be truncated with the excess bytes
- * being discarded.
- */
-
-#define NV_CTRL_STRING_DDCCI_MISC_TRANSMIT_DISPLAY_DESCRIPTOR   6  /* RWD */
-
-
-/* NV_CTRL_STRING_DDCCI_MISC_AUXILIARY_DISPLAY_DATA -
- * An `auxiliary display' is a small alpha-numeric display associated
- * with the primary display and able to be accessed via the primary
- * display.
- * This command transmits a number of bytes of alpha-numeric
- * data to be displayed on the auxiliary display. The data shall
- * conform to ISO 8859-2 (Latin 1) code set.
- * The auxiliary display will be written from the top left position,
- * moving to right along each line and then starting at left end of the
- * next line.
- */
-
-#define NV_CTRL_STRING_DDCCI_MISC_AUXILIARY_DISPLAY_DATA        7  /* -WD */
 
 
 /*
@@ -3744,8 +2695,101 @@
 
 #define NV_CTRL_STRING_PERFORMANCE_MODES                      29   /* R--G */
 
+
+/*
+ * NV_CTRL_STRING_VCSC_FAN_STATUS - returns a string with status of all the
+ * fans in the Visual Computing System, if such a query is supported.  Fan
+ * information is reported along with its tachometer reading (in RPM) and a 
+ * flag indicating whether the fan has failed or not.
+ * 
+ * Valid tokens:
+ *
+ *    Token      Value
+ *   "fan"       integer   - the Fan index
+ *   "speed"     integer   - the tachometer reading of the fan in rpm
+ *   "fail"      integer   - flag to indicate whether the fan has failed
+ *
+ * Example:
+ *
+ *   fan=0, speed=694, fail=0 ; fan=1, speed=693, fail=0
+ *
+ * This attribute must be queried through XNVCTRLQueryTargetStringAttribute()
+ * using a NV_CTRL_TARGET_TYPE_VCSC target.
+ *
+ */
+
+#define NV_CTRL_STRING_VCSC_FAN_STATUS                         30   /* R---V */
+
+
+/*
+ * NV_CTRL_STRING_VCSC_TEMPERATURES - returns a string with all Temperature
+ * readings in the Visual Computing System, if such a query is supported.  
+ * Intake, Exhaust and Board Temperature values are reported in Celcius.
+ * 
+ * Valid tokens:
+ *
+ *    Token      Value
+ *   "intake"    integer   - the intake temperature for the VCS
+ *   "exhaust"   integer   - the exhaust temperature for the VCS
+ *   "board"     integer   - the board temperature of the VCS
+ *
+ * Example:
+ *
+ *   intake=29, exhaust=46, board=41
+ *
+ * This attribute must be queried through XNVCTRLQueryTargetStringAttribute()
+ * using a NV_CTRL_TARGET_TYPE_VCSC target.
+ *
+ */
+
+#define NV_CTRL_STRING_VCSC_TEMPERATURES                       31   /* R---V */
+
+
+/*
+ * NV_CTRL_STRING_VCSC_PSU_INFO - returns a string with all Power Supply Unit
+ * related readings in the Visual Computing System, if such a query is 
+ * supported.  Current in amperes, Power in watts, Voltage in volts and PSU 
+ * state may be reported.  Not all PSU types support all of these values, and
+ * therefore some readings may be unknown.
+ * 
+ * Valid tokens:
+ *
+ *    Token      Value
+ *   "current"   integer   - the current drawn in amperes by the VCS
+ *   "power"     integer   - the power drawn in watts by the VCS
+ *   "voltage"   integer   - the voltage reading of the VCS
+ *   "state"     integer   - flag to indicate whether PSU is operating normally
+ *
+ * Example:
+ *
+ *   current=10, power=15, voltage=unknown, state=normal
+ *
+ * This attribute must be queried through XNVCTRLQueryTargetStringAttribute()
+ * using a NV_CTRL_TARGET_TYPE_VCSC target.
+ *
+ */
+
+
+#define NV_CTRL_STRING_VCSC_PSU_INFO                           32   /* R---V */
+
+
+/*
+ * NV_CTRL_STRING_GVO_VIDEO_FORMAT_NAME - query the name for the specified
+ * NV_CTRL_GVO_VIDEO_FORMAT_*.  So that this can be queried with existing
+ * interfaces, XNVCTRLQueryStringAttribute() should be used, and the video
+ * format specified in the display_mask field; eg:
+ *
+ * XNVCTRLQueryStringAttribute(dpy,
+ *                             screen, 
+ *                             NV_CTRL_GVO_VIDEO_FORMAT_720P_60_00_SMPTE296,
+ *                             NV_CTRL_GVO_VIDEO_FORMAT_NAME,
+ *                             &name);
+ */
+
+#define NV_CTRL_STRING_GVO_VIDEO_FORMAT_NAME                   33  /* R--- */
+
 #define NV_CTRL_STRING_LAST_ATTRIBUTE \
-        NV_CTRL_STRING_PERFORMANCE_MODES
+        NV_CTRL_STRING_GVO_VIDEO_FORMAT_NAME
 
 
 /**************************************************************************/
@@ -4206,6 +3250,7 @@
 #define TARGET_ATTRIBUTE_CHANGED_EVENT              1
 #define TARGET_ATTRIBUTE_AVAILABILITY_CHANGED_EVENT 2
 #define TARGET_STRING_ATTRIBUTE_CHANGED_EVENT       3
+#define TARGET_BINARY_ATTRIBUTE_CHANGED_EVENT       4
 
 
 #endif /* __NVCTRL_H */

Modified: packages/nvidia-settings/trunk/src/libXNVCtrl/NVCtrlLib.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/libXNVCtrl/NVCtrlLib.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/libXNVCtrl/NVCtrlLib.h (original)
+++ packages/nvidia-settings/trunk/src/libXNVCtrl/NVCtrlLib.h Sun Jan 11 05:41:46 2009
@@ -1,3 +1,26 @@
+/*
+ * Copyright (c) 2008 NVIDIA, Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
 #ifndef __NVCTRLLIB_H
 #define __NVCTRLLIB_H
 
@@ -387,225 +410,6 @@
     float colorMatrix[3][3],
     float colorOffset[3],
     float colorScale[3]
-);
-
-
-/* SPECIAL HANDLING OF VCP CODES 
- *
- * XNVCTRLQueryDDCCILutSize
- * XNVCTRLQueryDDCCISinglePointLutOperation
- * XNVCTRLSetDDCCISinglePointLutOperation
- * XNVCTRLQueryDDCCIBlockLutOperation
- * XNVCTRLSetDDCCIBlockLutOperation
- * XNVCTRLSetDDCCIRemoteProcedureCall
- * XNVCTRLQueryDDCCIDisplayControllerType
- 
- * Some of DDC/CI VCP codes handle multiple values,
- * therefore they need their own NV_CONTROL structure 
- */
- 
-/* XNVCTRLQueryDDCCILutSize
- * Provides the size (number of entries and number of bits / entry)
- * for the Red / Green and Blue LUT in the display
- *
- * red_entries: Number of Red LUT entries
- * green_entries: Number of Green LUT entries
- * blue_entries: Number of Blue LUT entries
- * red_bits_per_entries: Number of bits / entry in Red LUT
- * green_bits_per_entries: Number of bits / entry in Green LUT
- * blue_bits_per_entries: Number of bits / entry in Blue LUT
- * Returns TRUE on success
- */
-Bool XNVCTRLQueryDDCCILutSize (
-    Display *dpy,
-    int screen,
-    unsigned int display_mask,
-    unsigned int *red_entries,
-    unsigned int *green_entries,
-    unsigned int *blue_entries,
-    unsigned int *red_bits_per_entries,
-    unsigned int *green_bits_per_entries,
-    unsigned int *blue_bits_per_entries
-);
-
-/* XNVCTRLQueryDDCCISinglePointLutOperation
- * Allows a single point within a display's color LUT to be read
- * Input:
- *  offset: Offset into the LUT
- * Output:
- *  red_value: Red LUT value read
- *  green_value: Green LUT value read
- *  blue_value: Blue LUT value read
- * Returns TRUE on success
- */
-Bool XNVCTRLQueryDDCCISinglePointLutOperation (
-    Display *dpy,
-    int screen,
-    unsigned int display_mask,
-    unsigned int offset,
-    unsigned int *red_value,
-    unsigned int *green_value,
-    unsigned int *blue_value
-);
-
-/* XNVCTRLSetDDCCISinglePointLutOperation
- * Allows a single point within a display's color LUT (look up table)
- * to be loaded.
- * offset: Offset into the LUT
- * red_value: Red LUT value to be loaded
- * green_value: Green LUT value to be loaded
- * blue_value: Blue LUT value to be loaded
- * Note: If display LUT cannot store 16 bit values then least significant
- * bits are discarded
- * Returns TRUE on success
- */
-Bool XNVCTRLSetDDCCISinglePointLutOperation (
-    Display *dpy,
-    int screen,
-    unsigned int display_mask,
-    unsigned int offset,
-    unsigned int red_value,
-    unsigned int green_value,
-    unsigned int blue_value
-);
-
-/* XNVCTRLQueryDDCCIBlockLutOperation
- * Provides an efficient method for reading multiple values from a display's LUT
- * color: is one of NV_CTRL_DDCCI_RED_LUT, NV_CTRL_DDCCI_GREEN_LUT, 
- *  NV_CTRL_DDCCI_BLUE_LUT. Color to be read.
- * size: Number of values to be read
- * offset: Offset into Red or Green or Blue LUT
- * value: Red or Green or Blue LUT contents. Needs to be freed when done.
- * Returns TRUE on success
- */           
-Bool XNVCTRLQueryDDCCIBlockLutOperation (
-    Display *dpy,
-    int screen,
-    unsigned int display_mask,
-    unsigned int color, 
-    unsigned int size,
-    unsigned int offset,
-    unsigned int **value
-);
-
-/* XNVCTRLSetDDCCIBlockLutOperation
- * Provides an efficient method for loading multiple values into a display's LUT
- * size: Number of values to be loaded
- * offset: Offset into Red or Green or Blue LUT
- * value: R or G or B LUT values to be loaded
- * color: NV_CTRL_DDCCI_RED_LUT, NV_CTRL_DDCCI_GREEN_LUT, NV_CTRL_DDCCI_BLUE_LUT
- * Note: If display LUT cannot store 16 bit values then least significant
- * bits are discarded
- * Returns TRUE on success
- */   
-#define NV_CTRL_DDCCI_RED_LUT 1
-#define NV_CTRL_DDCCI_GREEN_LUT 2
-#define NV_CTRL_DDCCI_BLUE_LUT 3     
-Bool XNVCTRLSetDDCCIBlockLutOperation (
-    Display *dpy,
-    int screen,
-    unsigned int display_mask,
-    unsigned int color, 
-    unsigned int offset,
-    unsigned int size,
-    unsigned int *value
-);
-
-/* XNVCTRLSetDDCCIRemoteProcedureCall
- * Allows initiation of a routine / macro resident in the display. Only
- * one RPC is defined at this time:
- * A spline curve routine applied to the data (supplied in format
- * below) and the resulting data used to derive a full set of values 
- * for the display color LUT which shall then be loaded.
- * offset: Offset into the LUT
- * size: Number of values to be loaded
- * red_lut: Red LUT values
- * green_lut: Green LUT value
- * blue_lut: Blue LUT value
- * increment: Increment to next LUT entry
- *  Values of E0h  FFh inclusive are reserved for manufacturer
- * specific routines / macros.
- * All other values are reserved and shall be ignored.
- * Returns TRUE on success
- */
-Bool XNVCTRLSetDDCCIRemoteProcedureCall (
-    Display *dpy,
-    int screen,
-    unsigned int display_mask,
-    unsigned int offset,
-    unsigned int size,
-    unsigned int *red_lut,
-    unsigned int *green_lut,
-    unsigned int *blue_lut,
-    unsigned int *increment
-);
-
-/* XNVCTRLQueryDDCCIDisplayControllerType:
- * Provides the host with knowledge of the controller type being used by a 
- * particular display 
- * controller_manufacturer: Indicates controller manufacturer. (This string 
- * needs to be freed when done) (XXX This will be changed to a static string)
- * controller_type: Provide a numeric indication of controller type
- * Return TRUE on success
- */
-Bool XNVCTRLQueryDDCCIDisplayControllerType (
-    Display *dpy,
-    int screen,
-    unsigned int display_mask,
-    unsigned char **controller_manufacturer,
-    unsigned int *controller_type
-);
-
-/* NVCTRLQueryDDCCICapabilities:
- * Gets the capabilities of the display as a VCP string
- * Returns :
- * nvctrl_vcp_supported: a table of 0 (not supported) and 1 (supported)
- *   which index is the NV_CTRL_DDCI* values 
- * possible_value_offset; contains the offsets in the table 
- *   nvctrl_vcp_possible_values. Index is the NV_CTRL_DDCI* values.
- *  -1 means no possible values are available.
- * possible_value_size; contains the count in the table 
- *  nvctrl_vcp_possible_values. Index is the NV_CTRL_DDCI* values.
- *  -1 means no possible values are available.
- * nvctrl_vcp_possible_values: a table of possible values for the non
- *   continuous values. 
- * nvctrl_string_vcp_supported: a table or 0 (not supported) and 1 (supported)
- *   which index is the NV_CTRL_STRING_DDCI* values.
- *
- * Returns TRUE on success
- */
-Bool NVCTRLQueryDDCCICapabilities (
-    Display *dpy,
-    int screen,
-    unsigned int display_mask,
-    unsigned int **nvctrl_vcp_supported,    // Size is NV_CTRL_DDCCI_LAST_VCP+1
-    unsigned int **possible_values_offset,  // Size is NV_CTRL_DDCCI_LAST_VCP+1
-    unsigned int **possible_values_size,    // Size is NV_CTRL_DDCCI_LAST_VCP+1
-    unsigned int **nvctrl_vcp_possible_values, 
-    unsigned int **nvctrl_string_vcp_supported // Size is NV_CTRL_STRING_LAST_ATTRIBUTE+1
-);
-
-/* XNVCTRLQueryDDCCITimingReport
- * Queries the currently operating video signal timing report data.
- * - is_sync_freq_out_range: Sync. Freq. out of range          (TRUE/FALSE)
- * - is_unstable_count:      Unstable Count                    (TRUE/FALSE)
- * - is_positive_h_sync:     Positive Horizontal sync polarity (TRUE/FALSE)
- * - is_positive_v_sync:     Positive Vertical sync polarity   (TRUE/FALSE)
- * - h_freq:                 Horizontal Frequency
- * - v_freq:                 Vertical Frequency.
- *
- * Returns TRUE on success
- */           
-Bool XNVCTRLQueryDDCCITimingReport (
-    Display *dpy,
-    int screen,
-    unsigned int display_mask,
-    unsigned int *sync_freq_out_range, 
-    unsigned int *unstable_count,
-    unsigned int *positive_h_sync,
-    unsigned int *positive_v_sync,
-    unsigned int *h_freq,
-    unsigned int *v_freq
 );
 
 
@@ -822,6 +626,29 @@
 } XNVCtrlStringEventTarget;
 
 
+
+/*
+ * XNVCtrlBinaryEventTarget structure
+ */
+
+typedef struct {
+    int type;
+    unsigned long serial;
+    Bool send_event;  /* always FALSE, we don't allow send_events */
+    Display *display;
+    Time time;
+    int target_type;
+    int target_id;
+    unsigned int display_mask;
+    unsigned int attribute;
+} XNVCtrlBinaryAttributeChangedEventTarget;
+
+typedef union {
+    int type;
+    XNVCtrlBinaryAttributeChangedEventTarget attribute_changed;
+    long pad[24];
+} XNVCtrlBinaryEventTarget;
+
 #if defined __cplusplus
 } /* extern "C" */
 #endif 

Modified: packages/nvidia-settings/trunk/src/libXNVCtrl/nv_control.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/libXNVCtrl/nv_control.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/libXNVCtrl/nv_control.h (original)
+++ packages/nvidia-settings/trunk/src/libXNVCtrl/nv_control.h Sun Jan 11 05:41:46 2009
@@ -1,12 +1,35 @@
+/*
+ * Copyright (c) 2008 NVIDIA, Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
 #ifndef __NVCONTROL_H
 #define __NVCONTROL_H
 
 #define NV_CONTROL_ERRORS 0
-#define NV_CONTROL_EVENTS 4
+#define NV_CONTROL_EVENTS 5
 #define NV_CONTROL_NAME "NV-CONTROL"
 
 #define NV_CONTROL_MAJOR 1
-#define NV_CONTROL_MINOR 16
+#define NV_CONTROL_MINOR 17
 
 #define X_nvCtrlQueryExtension                      0
 #define X_nvCtrlIsNv                                1
@@ -18,15 +41,15 @@
 #define X_nvCtrlSetGvoColorConversion_deprecated    7
 #define X_nvCtrlQueryGvoColorConversion_deprecated  8
 #define X_nvCtrlSetStringAttribute                  9
-#define X_nvCtrlQueryDDCCILutSize                   10
-#define X_nvCtrlQueryDDCCISinglePointLutOperation   11
-#define X_nvCtrlSetDDCCISinglePointLutOperation     12
-#define X_nvCtrlQueryDDCCIBlockLutOperation         13
-#define X_nvCtrlSetDDCCIBlockLutOperation           14
-#define X_nvCtrlSetDDCCIRemoteProcedureCall         15
-#define X_nvCtrlQueryDDCCIDisplayControllerType     16
-#define X_nvCtrlQueryDDCCICapabilities              17
-#define X_nvCtrlQueryDDCCITimingReport              18
+/* STUB X_nvCtrlQueryDDCCILutSize                   10 */
+/* STUB X_nvCtrlQueryDDCCISinglePointLutOperation   11 */
+/* STUB X_nvCtrlSetDDCCISinglePointLutOperation     12 */
+/* STUB X_nvCtrlQueryDDCCIBlockLutOperation         13 */
+/* STUB X_nvCtrlSetDDCCIBlockLutOperation           14 */
+/* STUB X_nvCtrlSetDDCCIRemoteProcedureCall         15 */
+/* STUB X_nvCtrlQueryDDCCIDisplayControllerType     16 */
+/* STUB X_nvCtrlQueryDDCCICapabilities              17 */
+/* STUB X_nvCtrlQueryDDCCITimingReport              18 */
 #define X_nvCtrlSetAttributeAndGetStatus            19
 #define X_nvCtrlQueryBinaryData                     20
 #define X_nvCtrlSetGvoColorConversion               21
@@ -347,231 +370,6 @@
     CARD32 pad8 B32;
 } xnvCtrlQueryGvoColorConversionReply;
 #define sz_xnvCtrlQueryGvoColorConversionReply 32
-
-
-typedef struct {
-    CARD8 reqType;
-    CARD8 nvReqType;
-    CARD16 length B16;
-    CARD32 screen B32;
-    CARD32 display_mask B32;
-} xnvCtrlQueryDDCCILutSizeReq;
-#define sz_xnvCtrlQueryDDCCILutSizeReq 12
-
-typedef struct {
-    BYTE type;   /* X_Reply */
-    BYTE pad0;
-    CARD16 sequenceNumber B16;
-    CARD32 length B32;
-    CARD32 flags B32;
-    CARD32 pad4 B32;
-    CARD32 pad5 B32;
-    CARD32 pad6 B32;
-    CARD32 pad7 B32;
-    CARD32 pad8 B32;
-} xnvCtrlQueryDDCCILutSizeReply;
-#define sz_xnvCtrlQueryDDCCILutSizeReply 32
-
-typedef struct {
-    CARD8 reqType;
-    CARD8 nvReqType;
-    CARD16 length B16;
-    CARD32 screen B32;
-    CARD32 display_mask B32;
-    CARD32 offset B32;
-    CARD32 red_value B32;
-    CARD32 green_value B32;
-    CARD32 blue_value B32;
-} xnvCtrlSetDDCCISinglePointLutOperationReq;
-#define sz_xnvCtrlSetDDCCISinglePointLutOperationReq 28
-
-typedef struct {
-    BYTE type;   /* X_Reply */
-    BYTE pad0;
-    CARD16 sequenceNumber B16;
-    CARD32 length B32;
-    CARD32 flags B32;
-    CARD32 pad4 B32;
-    CARD32 pad5 B32;
-    CARD32 pad6 B32;
-    CARD32 pad7 B32;
-    CARD32 pad8 B32;
-} xnvCtrlSetDDCCISinglePointLutOperationReply;
-#define sz_xnvCtrlSetDDCCISinglePointLutOperationReply 32
-
-typedef struct {
-    CARD8 reqType;
-    CARD8 nvReqType;
-    CARD16 length B16;
-    CARD32 screen B32;
-    CARD32 display_mask B32;
-    CARD32 offset B32;
-} xnvCtrlQueryDDCCISinglePointLutOperationReq;
-#define sz_xnvCtrlQueryDDCCISinglePointLutOperationReq 16
-
-typedef struct {
-    BYTE type;   /* X_Reply */
-    BYTE pad0;
-    CARD16 sequenceNumber B16;
-    CARD32 length B32;
-    CARD32 flags B32;
-    CARD32 pad4 B32;
-    CARD32 pad5 B32;
-    CARD32 pad6 B32;
-    CARD32 pad7 B32;
-    CARD32 pad8 B32;
-} xnvCtrlQueryDDCCISinglePointLutOperationReply;
-#define sz_xnvCtrlQueryDDCCISinglePointLutOperationReply 32
-
-typedef struct {
-    CARD8 reqType;
-    CARD8 nvReqType;
-    CARD16 length B16;
-    CARD32 screen B32;
-    CARD32 display_mask B32;
-    CARD32 size B32;
-    CARD32 color B32;
-    CARD32 offset B32;
-} xnvCtrlQueryDDCCIBlockLutOperationReq;
-#define sz_xnvCtrlQueryDDCCIBlockLutOperationReq 24
-
-typedef struct {
-    BYTE type;   /* X_Reply */
-    BYTE pad0;
-    CARD16 sequenceNumber B16;
-    CARD32 length B32;
-    CARD32 num_bytes B32;
-    CARD32 flags B32;
-    CARD32 pad5 B32;
-    CARD32 pad6 B32;
-    CARD32 pad7 B32;
-    CARD32 pad8 B32;
-} xnvCtrlQueryDDCCIBlockLutOperationReply;
-#define sz_xnvCtrlQueryDDCCIBlockLutOperationReply 32
-
-
-typedef struct {
-    CARD8 reqType;
-    CARD8 nvReqType;
-    CARD16 length B16;
-    CARD32 screen B32;
-    CARD32 display_mask B32;
-    CARD32 color B32;
-    CARD32 offset B32;
-    CARD32 size B32;
-    CARD32 num_bytes B32;
-} xnvCtrlSetDDCCIBlockLutOperationReq;
-#define sz_xnvCtrlSetDDCCIBlockLutOperationReq 28
-
-typedef struct {
-    BYTE type;   /* X_Reply */
-    BYTE pad0;
-    CARD16 sequenceNumber B16;
-    CARD32 length B32;
-    CARD32 num_bytes B32;
-    CARD32 flags B32;
-    CARD32 pad5 B32;
-    CARD32 pad6 B32;
-    CARD32 pad7 B32;
-    CARD32 pad8 B32;
-} xnvCtrlSetDDCCIBlockLutOperationReply;
-#define sz_xnvCtrlSetDDCCIBlockLutOperationReply 32
-
-
-typedef struct {
-    CARD8 reqType;
-    CARD8 nvReqType;
-    CARD16 length B16;
-    CARD32 screen B32;
-    CARD32 display_mask B32;
-    CARD32 num_bytes B32;
-    CARD32 size B32;
-    CARD32 offset B32;
-} xnvCtrlSetDDCCIRemoteProcedureCallReq;
-#define sz_xnvCtrlSetDDCCIRemoteProcedureCallReq 24
-
-typedef struct {
-    BYTE type;   /* X_Reply */
-    BYTE pad0;
-    CARD16 sequenceNumber B16;
-    CARD32 length B32;
-    CARD32 num_bytes B32;
-    CARD32 flags B32;
-    CARD32 pad5 B32;
-    CARD32 pad6 B32;
-    CARD32 pad7 B32;
-    CARD32 pad8 B32;
-} xnvCtrlSetDDCCIRemoteProcedureCallReply;
-#define sz_xnvCtrlSetDDCCIRemoteProcedureCallReply 32
-
-typedef struct {
-    CARD8 reqType;
-    CARD8 nvReqType;
-    CARD16 length B16;
-    CARD32 screen B32;
-    CARD32 display_mask B32;
-} xnvCtrlQueryDDCCIDisplayControllerTypeReq;
-#define sz_xnvCtrlQueryDDCCIDisplayControllerTypeReq 12
-
-typedef struct {
-    BYTE type;   /* X_Reply */
-    BYTE pad0;
-    CARD16 sequenceNumber B16;
-    CARD32 length B32;
-    CARD32 controller_type B32;
-    CARD32 size B32;
-    CARD32 flags B32;
-    CARD32 pad5 B32;
-    CARD32 pad6 B32;
-    CARD32 pad7 B32;
-} xnvCtrlQueryDDCCIDisplayControllerTypeReply;
-#define sz_xnvCtrlQueryDDCCIDisplayControllerTypeReply 32
-
-typedef struct {
-    CARD8 reqType;
-    CARD8 nvReqType;
-    CARD16 length B16;
-    CARD32 screen B32;
-    CARD32 display_mask B32;
-} xnvCtrlQueryDDCCICapabilitiesReq;
-#define sz_xnvCtrlQueryDDCCICapabilitiesReq 12
-
-typedef struct {
-    BYTE type;   /* X_Reply */
-    BYTE pad0;
-    CARD16 sequenceNumber B16;
-    CARD32 length B32;
-    CARD32 num_bytes B32;
-    CARD32 flags B32;
-    CARD32 possible_val_len B32;
-    CARD32 pad6 B32;
-    CARD32 pad7 B32;
-    CARD32 pad8 B32;
-} xnvCtrlQueryDDCCICapabilitiesReply;
-#define sz_xnvCtrlQueryDDCCICapabilitiesReply 32
-
-typedef struct {
-    CARD8 reqType;
-    CARD8 nvReqType;
-    CARD16 length B16;
-    CARD32 screen B32;
-    CARD32 display_mask B32;
-} xnvCtrlQueryDDCCITimingReportReq;
-#define sz_xnvCtrlQueryDDCCITimingReportReq 12
-
-typedef struct {
-    BYTE type;   /* X_Reply */
-    BYTE pad0;
-    CARD16 sequenceNumber B16;
-    CARD32 length B32;
-    CARD32 flags B32;
-    CARD32 pad4 B32;
-    CARD32 pad5 B32;
-    CARD32 pad6 B32;
-    CARD32 pad7 B32;
-    CARD32 pad8 B32;
-} xnvCtrlQueryDDCCITimingReportReply;
-#define sz_xnvCtrlQueryDDCCITimingReportReply 32
 
 typedef struct {
     CARD8 reqType;

Modified: packages/nvidia-settings/trunk/src/libXNVCtrlAttributes/NvCtrlAttributes.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/libXNVCtrlAttributes/NvCtrlAttributes.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/libXNVCtrlAttributes/NvCtrlAttributes.c (original)
+++ packages/nvidia-settings/trunk/src/libXNVCtrlAttributes/NvCtrlAttributes.c Sun Jan 11 05:41:46 2009
@@ -866,3 +866,38 @@
     return NvCtrlXrandrGetScreenMagicMode
         ((NvCtrlAttributePrivateHandle *)handle, width, height, refresh);
 } /* NvCtrlXrandrGetScreenMode() */
+
+
+/*
+ * NvCtrlGetMultisampleModeName() - lookup a string desribing the
+ * NV-CONTROL constant.
+*/
+
+const char *NvCtrlGetMultisampleModeName(int multisample_mode)
+{
+    static const char *mode_names[] = {
+
+        "Off",                 /* FSAA_MODE_NONE  */
+        "2x (2xMS)",           /* FSAA_MODE_2x    */
+        "2x Quincunx",         /* FSAA_MODE_2x_5t */
+        "1.5 x 1.5",           /* FSAA_MODE_15x15 */
+        "2 x 2 Supersampling", /* FSAA_MODE_2x2   */
+        "4x (4xMS)",           /* FSAA_MODE_4x    */
+        "4x, 9-tap Gaussian",  /* FSAA_MODE_4x_9t */
+        "8x (4xMS, 4xCS)",     /* FSAA_MODE_8x    */
+        "16x (4xMS, 12xCS)",   /* FSAA_MODE_16x   */
+        "8x (4xSS, 2xMS)",     /* FSAA_MODE_8xS   */
+        "8x (8xMS)",           /* FSAA_MODE_8xQ   */
+        "16x (4xSS, 4xMS)",    /* FSAA_MODE_16xS  */
+        "16x (8xMS, 8xCS)",    /* FSAA_MODE_16xQ  */
+        "32x (4xSS, 8xMS)"     /* FSAA_MODE_32xS  */
+    };
+
+    if ((multisample_mode < NV_CTRL_FSAA_MODE_NONE) ||
+        (multisample_mode > NV_CTRL_FSAA_MODE_MAX)) {
+        return "Unknown Multisampling";
+    }
+
+    return mode_names[multisample_mode];
+
+} /* NvCtrlGetMultisampleModeName  */

Modified: packages/nvidia-settings/trunk/src/libXNVCtrlAttributes/NvCtrlAttributes.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/libXNVCtrlAttributes/NvCtrlAttributes.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/libXNVCtrlAttributes/NvCtrlAttributes.h (original)
+++ packages/nvidia-settings/trunk/src/libXNVCtrlAttributes/NvCtrlAttributes.h Sun Jan 11 05:41:46 2009
@@ -208,6 +208,8 @@
     int multi_sample_valid;
     int multi_samples;
     int multi_sample_buffers;
+    int multi_sample_coverage_valid;
+    int multi_samples_color;
     
 } GLXFBConfigAttr;
 
@@ -494,6 +496,8 @@
                             float colorOffset[3],
                             float colorScale[3]);
 
+const char *NvCtrlGetMultisampleModeName(int multisample_mode);
+
 char *NvCtrlAttributesStrError (ReturnStatus status);
 
 void NvCtrlAttributeClose(NvCtrlAttributeHandle *handle);

Modified: packages/nvidia-settings/trunk/src/libXNVCtrlAttributes/NvCtrlAttributesGlx.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/libXNVCtrlAttributes/NvCtrlAttributesGlx.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/libXNVCtrlAttributes/NvCtrlAttributesGlx.c (original)
+++ packages/nvidia-settings/trunk/src/libXNVCtrlAttributes/NvCtrlAttributesGlx.c Sun Jan 11 05:41:46 2009
@@ -526,6 +526,18 @@
                 fbcas[i].multi_sample_valid = 0;
             }
         }
+#if defined(GLX_COLOR_SAMPLES_NV)
+        fbcas[i].multi_sample_coverage_valid = 1;
+        ret = (* (__libGL->glXGetFBConfigAttrib))(h->dpy, fbconfigs[i],
+                                                  GLX_COLOR_SAMPLES_NV,
+                                                  &(fbcas[i].multi_samples_color));
+
+        if ( ret != Success ) {
+            fbcas[i].multi_sample_coverage_valid = 0;
+        }
+#else
+        fbcas[i].multi_sample_coverage_valid = 0;
+#endif
 #else
 #warning Multisample extension not found, will not print multisample information!
         fbcas[i].multi_sample_valid = 0;

Modified: packages/nvidia-settings/trunk/src/libXNVCtrlAttributes/NvCtrlAttributesNvControl.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/libXNVCtrlAttributes/NvCtrlAttributesNvControl.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/libXNVCtrlAttributes/NvCtrlAttributesNvControl.c (original)
+++ packages/nvidia-settings/trunk/src/libXNVCtrlAttributes/NvCtrlAttributesNvControl.c Sun Jan 11 05:41:46 2009
@@ -109,6 +109,20 @@
                                         True);
         if (ret != True) {
             nv_warning_msg("Unable to select attribute changed NV-CONTROL string"
+                           "events.");
+        }
+    }
+
+    /*
+     * TARGET_BINARY_ATTRIBUTE_CHANGED_EVENT was added in NV-CONTROL
+     * 1.17
+     */
+    if (((major > 1) || ((major == 1) && (minor >= 17)))) {
+        ret = XNVCtrlSelectTargetNotify(h->dpy, h->target_type, h->target_id,
+                                        TARGET_BINARY_ATTRIBUTE_CHANGED_EVENT,
+                                        True);
+        if (ret != True) {
+            nv_warning_msg("Unable to select attribute changed NV-CONTROL binary"
                            "events.");
         }
     }

Modified: packages/nvidia-settings/trunk/src/nvidia-settings.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/nvidia-settings.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/nvidia-settings.c (original)
+++ packages/nvidia-settings/trunk/src/nvidia-settings.c Sun Jan 11 05:41:46 2009
@@ -39,11 +39,8 @@
     ConfigProperties conf;
     ParsedAttribute *p;
     CtrlHandles *h;
-    NvCtrlAttributeHandle **screen_handles = NULL;
-    NvCtrlAttributeHandle **gpu_handles = NULL;
-    NvCtrlAttributeHandle **vcs_handles = NULL;
     Options *op;
-    int ret, i, num_screen_handles, num_gpu_handles, num_vcs_handles;
+    int ret;
     char *dpy = NULL;
     int gui = 0;
 
@@ -144,59 +141,9 @@
         return 1;
     }
 
-    /*
-     * pull the screen and gpu handles out of the CtrlHandles so that we can
-     * pass them to the gui
-     */
-    
-    num_screen_handles = h->targets[X_SCREEN_TARGET].n;
-
-    if (num_screen_handles) {
-        screen_handles =
-            malloc(num_screen_handles * sizeof(NvCtrlAttributeHandle *));
-        if (screen_handles) {
-            for (i = 0; i < num_screen_handles; i++) {
-                screen_handles[i] = h->targets[X_SCREEN_TARGET].t[i].h;
-            }
-        } else {
-            num_screen_handles = 0;
-        }
-    }
-
-    num_gpu_handles = h->targets[GPU_TARGET].n;
-
-    if (num_gpu_handles) {
-        gpu_handles =
-            malloc(num_gpu_handles * sizeof(NvCtrlAttributeHandle *));
-        if (gpu_handles) {
-            for (i = 0; i < num_gpu_handles; i++) {
-                gpu_handles[i] = h->targets[GPU_TARGET].t[i].h;
-            }
-        } else {
-            num_gpu_handles = 0;
-        }
-    }
-
-    num_vcs_handles = h->targets[VCS_TARGET].n;
-
-    if (num_vcs_handles) {
-        vcs_handles =
-            malloc(num_vcs_handles * sizeof(NvCtrlAttributeHandle *));
-        if (vcs_handles) {
-            for (i = 0; i < num_vcs_handles; i++) {
-                vcs_handles[i] = h->targets[VCS_TARGET].t[i].h;
-            }
-        } else {
-            num_vcs_handles = 0;
-        }
-    }
-    
     /* pass control to the gui */
 
-    ctk_main(screen_handles, num_screen_handles,
-             gpu_handles, num_gpu_handles,
-             vcs_handles, num_vcs_handles,
-             p, &conf);
+    ctk_main(p, &conf, h);
     
     /* write the configuration file */
 
@@ -204,8 +151,6 @@
 
     /* cleanup */
 
-    if (screen_handles) free(screen_handles);
-    if (gpu_handles) free(gpu_handles);
     nv_free_ctrl_handles(h);
     nv_parsed_attribute_free(p);
 

Modified: packages/nvidia-settings/trunk/src/parse.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/parse.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/parse.c (original)
+++ packages/nvidia-settings/trunk/src/parse.c Sun Jan 11 05:41:46 2009
@@ -53,7 +53,7 @@
 #define F NV_PARSER_TYPE_FRAMELOCK
 #define C NV_PARSER_TYPE_COLOR_ATTRIBUTE
 #define N NV_PARSER_TYPE_NO_CONFIG_WRITE
-#define G NV_PARSER_TYPE_GUI_ATTRIUBUTE
+#define G NV_PARSER_TYPE_GUI_ATTRIBUTE
 #define V NV_PARSER_TYPE_XVIDEO_ATTRIBUTE
 #define P NV_PARSER_TYPE_PACKED_ATTRIBUTE
 #define D NV_PARSER_TYPE_VALUE_IS_DISPLAY
@@ -67,175 +67,200 @@
 
 AttributeTableEntry attributeTable[] = {
    
-    /* name                    constant                             flags */
+    /* name                    constant                             flags                 description */
+
+    /* Version information */
+    { "OperatingSystem",     NV_CTRL_OPERATING_SYSTEM,             N,   "The operating system on which the X server is running.  (0-Linux, 1-FreeBSD, 2-SunOS.)" },
+    { "NvidiaDriverVersion", NV_CTRL_STRING_NVIDIA_DRIVER_VERSION, S|N, "The NVIDIA X driver version." },
+    { "NvControlVersion",    NV_CTRL_STRING_NV_CONTROL_VERSION,    S|N, "The NV-CONTROL X driver extension version." },
+    { "GLXServerVersion",    NV_CTRL_STRING_GLX_SERVER_VERSION,    S|N, "The GLX X server extension version." },
+    { "GLXClientVersion",    NV_CTRL_STRING_GLX_CLIENT_VERSION,    S|N, "The GLX client version." },
+    { "OpenGLVersion",       NV_CTRL_STRING_GLX_OPENGL_VERSION,    S|N, "The OpenGL version." },
+    { "XRandRVersion",       NV_CTRL_STRING_XRANDR_VERSION,        S|N, "The X RandR version." },
+    { "XF86VidModeVersion",  NV_CTRL_STRING_XF86VIDMODE_VERSION,   S|N, "The XF86 Video Mode X extension version." },
+    { "XvVersion",           NV_CTRL_STRING_XV_VERSION,            S|N, "The Xv X extension version." },
  
-    { "FlatpanelDithering",    NV_CTRL_FLATPANEL_DITHERING,         0     },
-    { "DigitalVibrance",       NV_CTRL_DIGITAL_VIBRANCE,            0     },
-    { "ImageSharpening",       NV_CTRL_IMAGE_SHARPENING,            0     },
-    { "BusType",               NV_CTRL_BUS_TYPE,                    0     },
-    { "BusRate",               NV_CTRL_BUS_RATE,                    0     },
-    { "VideoRam",              NV_CTRL_VIDEO_RAM,                   0     },
-    { "Irq",                   NV_CTRL_IRQ,                         0     },
-    { "OperatingSystem",       NV_CTRL_OPERATING_SYSTEM,            0     },
-    { "SyncToVBlank",          NV_CTRL_SYNC_TO_VBLANK,              0     },
-    { "AllowFlipping",         NV_CTRL_FLIPPING_ALLOWED,            0     },
-    { "ForceStereoFlipping",   NV_CTRL_FORCE_STEREO,                0     },
-    { "XineramaStereoFlipping",NV_CTRL_XINERAMA_STEREO,             0     },
-    { "LogAniso",              NV_CTRL_LOG_ANISO,                   0     },
-    { "FSAA",                  NV_CTRL_FSAA_MODE,                   0     },
-    { "TextureSharpen",        NV_CTRL_TEXTURE_SHARPEN,             0     },
-    { "Ubb",                   NV_CTRL_UBB,                         0     },
-    { "Overlay",               NV_CTRL_OVERLAY,                     0     },
-    { "HWOverlay",             NV_CTRL_HWOVERLAY,                   0     },
-    { "Stereo",                NV_CTRL_STEREO,                      0     },
-    { "TwinView",              NV_CTRL_TWINVIEW,                    0     },
-    { "ConnectedDisplays",     NV_CTRL_CONNECTED_DISPLAYS,          D     },
-    { "EnabledDisplays",       NV_CTRL_ENABLED_DISPLAYS,            D     },
-    { "NotebookInternalLCD",   NV_CTRL_NOTEBOOK_INTERNAL_LCD,       N|D   },
-    { "NotebookDisplayChangeLidEvent", NV_CTRL_NOTEBOOK_DISPLAY_CHANGE_LID_EVENT, N },
-    { "SwitchToDisplays",      NV_CTRL_SWITCH_TO_DISPLAYS,          D|N|W },
-    { "AssociatedDisplays",    NV_CTRL_ASSOCIATED_DISPLAY_DEVICES,  N|D   },
-    { "ProbeDisplays",         NV_CTRL_PROBE_DISPLAYS,              A     },
-    { "Depth30Allowed",        NV_CTRL_DEPTH_30_ALLOWED,            N     },
-    { "ForceGenericCpu",       NV_CTRL_FORCE_GENERIC_CPU,           N     },
-    { "GammaCorrectedAALines", NV_CTRL_OPENGL_AA_LINE_GAMMA,        0     },
-    { "ShowSLIHUD",            NV_CTRL_SHOW_SLI_HUD,                0     },
-    { "CursorShadow",          NV_CTRL_CURSOR_SHADOW,               0     },
-    { "CursorShadowXOffset",   NV_CTRL_CURSOR_SHADOW_X_OFFSET,      0     },
-    { "CursorShadowYOffset",   NV_CTRL_CURSOR_SHADOW_Y_OFFSET,      0     },
-    { "CursorShadowAlpha",     NV_CTRL_CURSOR_SHADOW_ALPHA,         0     },
-    { "CursorShadowRed",       NV_CTRL_CURSOR_SHADOW_RED,           0     },
-    { "CursorShadowGreen",     NV_CTRL_CURSOR_SHADOW_GREEN,         0     },
-    { "CursorShadowBlue",      NV_CTRL_CURSOR_SHADOW_BLUE,          0     },
-    { "FSAAAppControlled",     NV_CTRL_FSAA_APPLICATION_CONTROLLED, 0     },
-    { "LogAnisoAppControlled", NV_CTRL_LOG_ANISO_APPLICATION_CONTROLLED,0 },
-    { "RefreshRate",           NV_CTRL_REFRESH_RATE,                N|H   },
-    { "RefreshRate3",          NV_CTRL_REFRESH_RATE_3,              N|K   },
-    { "InitialPixmapPlacement",NV_CTRL_INITIAL_PIXMAP_PLACEMENT,    N     },
-    { "GlyphCache",            NV_CTRL_GLYPH_CACHE,                 N     },
-    { "PCIBus",                NV_CTRL_PCI_BUS,                     N     },
-    { "PCIDevice",             NV_CTRL_PCI_DEVICE,                  N     },
-    { "PCIFunc",               NV_CTRL_PCI_FUNCTION,                N     },
-    { "DynamicTwinview",       NV_CTRL_DYNAMIC_TWINVIEW,            N     },
-    { "MultiGpuDisplayOwner",  NV_CTRL_MULTIGPU_DISPLAY_OWNER,      N     },
-    { "GPUScaling",            NV_CTRL_GPU_SCALING,                 P     },
-    { "FrontendResolution",    NV_CTRL_FRONTEND_RESOLUTION,         N|P   },
-    { "BackendResolution",     NV_CTRL_BACKEND_RESOLUTION,          N|P   },
-    { "FlatpanelNativeResolution",  NV_CTRL_FLATPANEL_NATIVE_RESOLUTION,   N|P },
-    { "FlatpanelBestFitResolution", NV_CTRL_FLATPANEL_BEST_FIT_RESOLUTION, N|P },
-    { "GPUScalingActive",      NV_CTRL_GPU_SCALING_ACTIVE,          N     },
-    { "DFPScalingActive",      NV_CTRL_DFP_SCALING_ACTIVE,          N     },
-    { "FSAAAppEnhanced",       NV_CTRL_FSAA_APPLICATION_ENHANCED,   0     },
-    { "GPUErrors",             NV_CTRL_NUM_GPU_ERRORS_RECOVERED,    N     },
-    { "OnDemandVBlankInterrupts", NV_CTRL_ONDEMAND_VBLANK_INTERRUPTS, 0   },
-
-    { "FrameLockMaster",       NV_CTRL_FRAMELOCK_MASTER,            N|F|G|D },
-    { "FrameLockSlaves",       NV_CTRL_FRAMELOCK_SLAVES,            N|F|G|D },
-    { "FramelockUseHouseSync", NV_CTRL_USE_HOUSE_SYNC,              N|F|G   },
-    { "FrameLockSyncInterval", NV_CTRL_FRAMELOCK_SYNC_INTERVAL,     N|F|G   },
-    { "FrameLockPolarity",     NV_CTRL_FRAMELOCK_POLARITY,          N|F|G   },
-    { "FrameLockVideoMode",    NV_CTRL_FRAMELOCK_VIDEO_MODE,        N|F|G   },
-    { "FrameLockSyncDelay",    NV_CTRL_FRAMELOCK_SYNC_DELAY,        N|F|G },
-    { "FrameLockEnable",       NV_CTRL_FRAMELOCK_SYNC,              N|F|G },
-    { "FrameLockAvailable",    NV_CTRL_FRAMELOCK,                   N|F|G },
-    { "FrameLockPort0Status",  NV_CTRL_FRAMELOCK_PORT0_STATUS,      N|F|G },
-    { "FrameLockPort1Status",  NV_CTRL_FRAMELOCK_PORT1_STATUS,      N|F|G },
-    { "FrameLockHouseStatus",  NV_CTRL_FRAMELOCK_HOUSE_STATUS,      N|F|G },
-    { "FrameLockSyncReady",    NV_CTRL_FRAMELOCK_SYNC_READY,        N|F|G },
-    { "FrameLockStereoSync",   NV_CTRL_FRAMELOCK_STEREO_SYNC,       N|F|G },
-    { "FrameLockTestSignal",   NV_CTRL_FRAMELOCK_TEST_SIGNAL,       N|F|G },
-    { "FrameLockEthDetected",  NV_CTRL_FRAMELOCK_ETHERNET_DETECTED, N|F|G },
-    { "FrameLockSyncRate",     NV_CTRL_FRAMELOCK_SYNC_RATE,         N|F|G },
-    { "FrameLockSyncRate4",    NV_CTRL_FRAMELOCK_SYNC_RATE_4,       N|F|G },
-    { "FrameLockTiming",       NV_CTRL_FRAMELOCK_TIMING,            N|F|G },
-    { "FrameLockMasterable",   NV_CTRL_FRAMELOCK_MASTERABLE,        N|F|G },
-    { "FrameLockFPGARevision", NV_CTRL_FRAMELOCK_FPGA_REVISION,     N|F|G },
-
-    { "GvoSupported",                    NV_CTRL_GVO_SUPPORTED,                        I|N },
-    { "GvoSyncMode",                     NV_CTRL_GVO_SYNC_MODE,                        I },
-    { "GvoSyncSource",                   NV_CTRL_GVO_SYNC_SOURCE,                      I },
-    { "GvoOutputVideoFormat",            NV_CTRL_GVO_OUTPUT_VIDEO_FORMAT,              I },
-    { "GvoInputVideoFormat",             NV_CTRL_GVO_INPUT_VIDEO_FORMAT,               I|N },
-    { "GvoDataFormat",                   NV_CTRL_GVO_DATA_FORMAT,                      I },
-    { "GvoDisplayXScreen",               NV_CTRL_GVO_DISPLAY_X_SCREEN,                 I|N },
-    { "GvoCompositeSyncInputDetected",   NV_CTRL_GVO_COMPOSITE_SYNC_INPUT_DETECTED,    I|N },
-    { "GvoCompositeSyncInputDetectMode", NV_CTRL_GVO_COMPOSITE_SYNC_INPUT_DETECT_MODE, I|N },
-    { "GvoSdiSyncInputDetected",         NV_CTRL_GVO_SDI_SYNC_INPUT_DETECTED,          I|N },
-    { "GvoVideoOutputs",                 NV_CTRL_GVO_VIDEO_OUTPUTS,                    I|N },
-    { "GvoSyncDelayPixels",              NV_CTRL_GVO_SYNC_DELAY_PIXELS,                I },
-    { "GvoSyncDelayLines",               NV_CTRL_GVO_SYNC_DELAY_LINES,                 I },
-    { "GvoGlxLocked",                    NV_CTRL_GVO_GLX_LOCKED,                       I|N },
-    { "GvoXScreenPanX",                  NV_CTRL_GVO_X_SCREEN_PAN_X,                   I },
-    { "GvoXScreenPanY",                  NV_CTRL_GVO_X_SCREEN_PAN_Y,                   I },
-    { "GvoOverrideHwCsc",                NV_CTRL_GVO_OVERRIDE_HW_CSC,                  I },
-    { "GvoCapabilities",                 NV_CTRL_GVO_CAPABILITIES,                     I|N },
-    { "GvoCompositeTermination",         NV_CTRL_GVO_COMPOSITE_TERMINATION,            I },
-    { "GvoFlipQueueSize",                NV_CTRL_GVO_FLIP_QUEUE_SIZE,                  I },
-    { "GvoFirmwareVersion",              NV_CTRL_STRING_GVO_FIRMWARE_VERSION,          I|S|N },
-    { "GvoLockOwner",                    NV_CTRL_GVO_LOCK_OWNER,                       I|N },
-    { "GvoOutputVideoLocked",            NV_CTRL_GVO_OUTPUT_VIDEO_LOCKED,              I|N },
-    { "GvoSyncLockStatus",               NV_CTRL_GVO_SYNC_LOCK_STATUS,                 I|N },
-    { "GvoANCTimeCodeGeneration",        NV_CTRL_GVO_ANC_TIME_CODE_GENERATION,         I },
-    { "GvoComposite",                    NV_CTRL_GVO_COMPOSITE,                        I },
-    { "GvoCompositeAlphaKey",            NV_CTRL_GVO_COMPOSITE_ALPHA_KEY,              I },
-    { "GvoCompositeNumKeyRanges",        NV_CTRL_GVO_COMPOSITE_NUM_KEY_RANGES,         I|N },
-
-    { "Brightness",            BRIGHTNESS_VALUE|ALL_CHANNELS,       N|C|G },
-    { "RedBrightness",         BRIGHTNESS_VALUE|RED_CHANNEL,        C|G   },
-    { "GreenBrightness",       BRIGHTNESS_VALUE|GREEN_CHANNEL,      C|G   },
-    { "BlueBrightness",        BRIGHTNESS_VALUE|BLUE_CHANNEL,       C|G   },
-    { "Contrast",              CONTRAST_VALUE|ALL_CHANNELS,         N|C|G },
-    { "RedContrast",           CONTRAST_VALUE|RED_CHANNEL,          C|G   },
-    { "GreenContrast",         CONTRAST_VALUE|GREEN_CHANNEL,        C|G   },
-    { "BlueContrast",          CONTRAST_VALUE|BLUE_CHANNEL,         C|G   },
-    { "Gamma",                 GAMMA_VALUE|ALL_CHANNELS,            N|C|G },
-    { "RedGamma",              GAMMA_VALUE|RED_CHANNEL,             C|G   },
-    { "GreenGamma",            GAMMA_VALUE|GREEN_CHANNEL,           C|G   },
-    { "BlueGamma",             GAMMA_VALUE|BLUE_CHANNEL,            C|G   },
-    { "TVOverScan",            NV_CTRL_TV_OVERSCAN,                 0     },
-    { "TVFlickerFilter",       NV_CTRL_TV_FLICKER_FILTER,           0     },
-    { "TVBrightness",          NV_CTRL_TV_BRIGHTNESS,               0     },
-    { "TVHue",                 NV_CTRL_TV_HUE,                      0     },
-    { "TVContrast",            NV_CTRL_TV_CONTRAST,                 0     },
-    { "TVSaturation",          NV_CTRL_TV_SATURATION,               0     },
-    { "GPUCoreTemp",           NV_CTRL_GPU_CORE_TEMPERATURE,        N     },
-    { "GPUAmbientTemp",        NV_CTRL_AMBIENT_TEMPERATURE,         N     },
-    { "OpenGLImageSettings",   NV_CTRL_IMAGE_SETTINGS,              0     },
-
-    { "XVideoOverlaySaturation",   NV_CTRL_ATTR_XV_OVERLAY_SATURATION,     V },
-    { "XVideoOverlayContrast",     NV_CTRL_ATTR_XV_OVERLAY_CONTRAST,       V },
-    { "XVideoOverlayBrightness",   NV_CTRL_ATTR_XV_OVERLAY_BRIGHTNESS,     V },
-    { "XVideoOverlayHue",          NV_CTRL_ATTR_XV_OVERLAY_HUE,            V },
-    { "XVideoTextureBrightness",   NV_CTRL_ATTR_XV_TEXTURE_BRIGHTNESS,     V },
-    { "XVideoTextureContrast",     NV_CTRL_ATTR_XV_TEXTURE_CONTRAST,       V },
-    { "XVideoTextureHue",          NV_CTRL_ATTR_XV_TEXTURE_HUE,            V },
-    { "XVideoTextureSaturation",   NV_CTRL_ATTR_XV_TEXTURE_SATURATION,     V },
-    { "XVideoTextureSyncToVBlank", NV_CTRL_ATTR_XV_TEXTURE_SYNC_TO_VBLANK, V },
-    { "XVideoBlitterSyncToVBlank", NV_CTRL_ATTR_XV_BLITTER_SYNC_TO_VBLANK, V },
-    { "XVideoSyncToDisplay",       NV_CTRL_XV_SYNC_TO_DISPLAY,           D|Z },
-    
-    { "GPUOverclockingState",   NV_CTRL_GPU_OVERCLOCKING_STATE,     N   },
-    { "GPUDefault2DClockFreqs", NV_CTRL_GPU_DEFAULT_2D_CLOCK_FREQS, N|P },
-    { "GPUDefault3DClockFreqs", NV_CTRL_GPU_DEFAULT_3D_CLOCK_FREQS, N|P },
-    { "GPU2DClockFreqs",        NV_CTRL_GPU_2D_CLOCK_FREQS,         N|P },
-    { "GPU3DClockFreqs",        NV_CTRL_GPU_3D_CLOCK_FREQS,         N|P },
-    { "GPUCurrentClockFreqs",   NV_CTRL_GPU_CURRENT_CLOCK_FREQS,    N|P },
-    { "GPUPerfModes",           NV_CTRL_STRING_PERFORMANCE_MODES,   S|N },
-
-    { "NvidiaDriverVersion",    NV_CTRL_STRING_NVIDIA_DRIVER_VERSION,    S|N },
-    { "NvControlVersion",       NV_CTRL_STRING_NV_CONTROL_VERSION,       S|N },
-    { "GLXServerVersion",       NV_CTRL_STRING_GLX_SERVER_VERSION,       S|N },
-    { "GLXClientVersion",       NV_CTRL_STRING_GLX_CLIENT_VERSION,       S|N },
-    { "OpenGLVersion",          NV_CTRL_STRING_GLX_OPENGL_VERSION,       S|N },
-    { "XRandRVersion",          NV_CTRL_STRING_XRANDR_VERSION,           S|N },
-    { "XF86VidModeVersion",     NV_CTRL_STRING_XF86VIDMODE_VERSION,      S|N },
-    { "XvVersion",              NV_CTRL_STRING_XV_VERSION,               S|N },
-    { "SLIMode",                NV_CTRL_STRING_SLI_MODE,                 S|N },
-    { "GPUCurrentPerfMode",     NV_CTRL_GPU_CURRENT_PERFORMANCE_MODE,    N },
-    { "GPUCurrentPerfLevel",    NV_CTRL_GPU_CURRENT_PERFORMANCE_LEVEL,   N },
-    { "GPUAdaptiveClockState",  NV_CTRL_GPU_ADAPTIVE_CLOCK_STATE,        N },
-    { "GPUPowerSource",         NV_CTRL_GPU_POWER_SOURCE,                N },
-    { NULL,                    0,                                   0     }
+    /* X screen */
+    { "Ubb",                           NV_CTRL_UBB,                               0,     "Is UBB enabled for the specified X screen." },
+    { "Overlay",                       NV_CTRL_OVERLAY,                           0,     "Is the RGB overlay enabled for the specified X screen." },
+    { "Stereo",                        NV_CTRL_STEREO,                            0,     "The stereo mode for the specified X screen." },
+    { "TwinView",                      NV_CTRL_TWINVIEW,                          0,     "Is TwinView enabled for the specified X screen." },
+    { "ConnectedDisplays",             NV_CTRL_CONNECTED_DISPLAYS,                D,     "Display mask indicating the last cached state of the display devices connected to the GPU." },
+    { "EnabledDisplays",               NV_CTRL_ENABLED_DISPLAYS,                  D,     "Display mask indicating what display devices are enabled for use on the specified X screen or GPU." },
+    { "CursorShadow",                  NV_CTRL_CURSOR_SHADOW,                     0,     "Hardware cursor shadow." },
+    { "CursorShadowAlpha",             NV_CTRL_CURSOR_SHADOW_ALPHA,               0,     "Hardware cursor shadow alpha (transparency) value." },
+    { "CursorShadowRed",               NV_CTRL_CURSOR_SHADOW_RED,                 0,     "Hardware cursor shadow red color." },
+    { "CursorShadowGreen",             NV_CTRL_CURSOR_SHADOW_GREEN,               0,     "Hardware cursor shadow green color." },
+    { "CursorShadowBlue",              NV_CTRL_CURSOR_SHADOW_BLUE,                0,     "Hardware cursor shadow blue color." },
+    { "CursorShadowXOffset",           NV_CTRL_CURSOR_SHADOW_X_OFFSET,            0,     "Hardware cursor shadow X offset." },
+    { "CursorShadowYOffset",           NV_CTRL_CURSOR_SHADOW_Y_OFFSET,            0,     "Hardware cursor shadow Y offset." },
+    { "AssociatedDisplays",            NV_CTRL_ASSOCIATED_DISPLAY_DEVICES,        N|D,   "Display device mask indicating which display devices are \"associated\" with the specified X screen (i.e., are available for displaying the desktop)." },
+    { "ProbeDisplays",                 NV_CTRL_PROBE_DISPLAYS,                    A,     "When this attribute is queried, the X driver re-probes the hardware to detect which display devices are connected to the GPU or DPU driving the specified X screen.  Returns a display mask of the currently connected display devices." },
+    { "InitialPixmapPlacement",        NV_CTRL_INITIAL_PIXMAP_PLACEMENT,          N,     "Controls where X pixmaps are initially created." },
+    { "DynamicTwinview",               NV_CTRL_DYNAMIC_TWINVIEW,                  N,     "Does the X screen support dynamic TwinView." },
+    { "MultiGpuDisplayOwner",          NV_CTRL_MULTIGPU_DISPLAY_OWNER,            N,     "GPU ID of the GPU that has the display device(s) used for showing the X screen." },
+    { "HWOverlay",                     NV_CTRL_HWOVERLAY,                         0,     "When a workstation overlay is in use, this value is 1 if the hardware overlay is used, or 0 if the overlay is emulated." },
+    { "OnDemandVBlankInterrupts",      NV_CTRL_ONDEMAND_VBLANK_INTERRUPTS,        0,     "Enable/Disable/Query of on-demand vertical blanking interrupt control on the GPU.  The 'OnDemandVBlankInterrupts' X server configuration option must be enabled for this option to be available." },
+    { "GlyphCache",                    NV_CTRL_GLYPH_CACHE,                       N,     "Enable or disable caching of glyphs (text) in video memory." },
+    { "SwitchToDisplays",              NV_CTRL_SWITCH_TO_DISPLAYS,                D|N|W, "Used to set which displays should be active." },
+    { "NotebookDisplayChangeLidEvent", NV_CTRL_NOTEBOOK_DISPLAY_CHANGE_LID_EVENT, N,     "Reports notebook lid open/close events." },
+    { "NotebookInternalLCD",           NV_CTRL_NOTEBOOK_INTERNAL_LCD,             N|D,   "Returns the display device mask of the internal LCD of a notebook." },
+    { "Depth30Allowed",                NV_CTRL_DEPTH_30_ALLOWED,                  N,     "Returns whether the NVIDIA X driver supports depth 30 on the specified X screen or GPU." },
+    { "NoScanout",                     NV_CTRL_NO_SCANOUT,                        N,     "Returns whether the special \"NoScanout\" mode is enabled on the specified X screen or GPU." },
+    { "PixmapCache",                   NV_CTRL_PIXMAP_CACHE,                      N,     "Controls whether pixmaps are allocated in a cache." },
+    { "PixmapCacheRoundSizeKB",        NV_CTRL_PIXMAP_CACHE_ROUNDING_SIZE_KB,     N,     "Controls the number of kilobytes to add to the pixmap cache when there is not enough room." },
+
+    /* OpenGL */
+    { "SyncToVBlank",               NV_CTRL_SYNC_TO_VBLANK,                   0,   "Enables sync to vertical blanking for OpenGL clients. This setting only takes effect on OpenGL clients started after it is set." },
+    { "LogAniso",                   NV_CTRL_LOG_ANISO,                        0,   "Enables anisotropic filtering for OpenGL clients; on some NVIDIA hardware, this can only be enabled or disabled; on other hardware different levels of anisotropic filtering can be specified.  This setting only takes effect on OpenGL clients started after it is set." },
+    { "FSAA",                       NV_CTRL_FSAA_MODE,                        0,   "The full screen antialiasing setting for OpenGL clients.  This setting only takes effect on OpenGL clients started after it is set." },
+    { "TextureSharpen",             NV_CTRL_TEXTURE_SHARPEN,                  0,   "Enables texture sharpening for OpenGL clients.  This setting only takes effect on OpenGL clients started after it is set." },
+    { "ForceGenericCpu",            NV_CTRL_FORCE_GENERIC_CPU,                N,   "Inhibit the use of CPU-specific features such as MMX, SSE, or 3DNOW! for OpenGL clients; this option may result in performance loss, but may be useful in conjunction with software such as the Valgrind memory debugger.  This setting only takes effect on OpenGL clients started after it is set." },
+    { "GammaCorrectedAALines",      NV_CTRL_OPENGL_AA_LINE_GAMMA,             0,   "For OpenGL clients, allow gamma-corrected antialiased lines to consider variances in the color display capabilities of output devices when rendering smooth lines.  Only available on recent Quadro GPUs.  This setting only takes effect on OpenGL clients started after it is set." },
+
+    { "AllowFlipping",              NV_CTRL_FLIPPING_ALLOWED,                 0,   "Defines the swap behavior of OpenGL.  When 1, OpenGL will swap by flipping when possible;  When 0, OpenGL will always swap by blitting." },
+    { "FSAAAppControlled",          NV_CTRL_FSAA_APPLICATION_CONTROLLED,      0,   "When Application Control for FSAA is enabled, then what the application requests is used, and the FSAA attribute is ignored.  If this is disabled, then any application setting is overridden with the FSAA attribute." },
+    { "LogAnisoAppControlled",      NV_CTRL_LOG_ANISO_APPLICATION_CONTROLLED, 0,   "When Application Control for LogAniso is enabled, then what the application requests is used, and the LogAniso attribute is ignored.  If this is disabled, then any application setting is overridden with the LogAniso attribute." },
+    { "ForceStereoFlipping",        NV_CTRL_FORCE_STEREO,                     0,   "When 1, OpenGL will force stereo flipping even when no stereo drawables are visible (if the device is configured to support it, see the \"Stereo\" X config option).  When 0, fall back to the default behavior of only flipping when a stereo drawable is visible." },
+    { "OpenGLImageSettings",        NV_CTRL_IMAGE_SETTINGS,                   0,   "The image quality setting for OpenGL clients.  This setting only takes effect on OpenGL clients started after it is set." },
+    { "XineramaStereoFlipping",     NV_CTRL_XINERAMA_STEREO,                  0,   "When 1, OpenGL will allow stereo flipping on multiple X screens configured with Xinerama.  When 0, flipping is allowed only on one X screen at a time." },
+    { "ShowSLIHUD",                 NV_CTRL_SHOW_SLI_HUD,                     0,   "If this is enabled (1), the driver will draw information about the current SLI mode into a \"heads-up display\" inside OpenGL windows accelerated with SLI.  This setting only takes effect on OpenGL clients started after it is set." },
+    { "FSAAAppEnhanced",            NV_CTRL_FSAA_APPLICATION_ENHANCED,        0,   "Controls how the FSAA attribute is applied when FSAAAppControlled is disabled.  When FSAAAppEnhanced is disabled, OpenGL applications will be forced to use the FSAA mode specified by the FSAA attribute.  When the FSAAAppEnhanced attribute is enabled, only those applications that have selected a multisample FBConfig will be made to use the FSAA mode specified." },
+    { "GammaCorrectedAALinesValue", NV_CTRL_OPENGL_AA_LINE_GAMMA_VALUE,       0,   "Returns the gamma value used by OpenGL when gamma-corrected antialiased lines are enabled." },
+    { "StereoEyesExchange",         NV_CTRL_STEREO_EYES_EXCHANGE,             0,   "Swaps the left and right eyes of stereo images." },
+    { "SLIMode",                    NV_CTRL_STRING_SLI_MODE,                  S|N, "Returns a string describing the current SLI mode, if any." },
+
+    /* GPU */
+    { "BusType",                NV_CTRL_BUS_TYPE,                      0,   "Returns the type of bus connecting the GPU driving the specified X screen to the computer." },
+    { "VideoRam",               NV_CTRL_VIDEO_RAM,                     0,   "Returns the total amount of memory available to the specified GPU (or the GPU driving the specified X screen).  Note: if the GPU supports TurboCache(TM), the value reported may exceed the amount of video memory installed on the GPU.  The value reported for integrated GPUs may likewise exceed the amount of dedicated system memory set aside by the system BIOS for use by the integrated GPU." },
+    { "Irq",                    NV_CTRL_IRQ,                           0,   "Returns the interrupt request line used by the GPU driving the specified X screen." },
+    { "GPUCoreTemp",            NV_CTRL_GPU_CORE_TEMPERATURE,          N,   "Reports the current core temperature in Celsius of the GPU driving the X screen." },
+    { "GPUAmbientTemp",         NV_CTRL_AMBIENT_TEMPERATURE,           N,   "Reports the current temperature in Celsius of the immediate neighborhood of the GPU driving the X screen." },
+    { "GPUOverclockingState",   NV_CTRL_GPU_OVERCLOCKING_STATE,        N,   "The current overclocking state; the value of this attribute controls the availability of additional overclocking attributes.  Note that this attribute is unavailable unless overclocking support has been enabled by the system administrator." },
+    { "GPU2DClockFreqs",        NV_CTRL_GPU_2D_CLOCK_FREQS,            N|P, "The GPU and memory clock frequencies when operating in 2D mode.  New clock frequencies are tested before being applied, and may be rejected.  Note that if the target clocks are too aggressive, their testing may render the system unresponsive.  Also note that while this attribute may always be queried, it cannot be set unless GPUOverclockingState is set to MANUAL.  Since the target clocks may be rejected, the requester should read this attribute after the set to determine success or failure." },
+    { "GPU3DClockFreqs",        NV_CTRL_GPU_3D_CLOCK_FREQS,            N|P, "The GPU and memory clock frequencies  when operating in 3D mode.  New clock frequencies are tested before being applied, and may be rejected.  Note that if the target clocks are too aggressive, their testing may render the system unresponsive.  Also note that while this attribute may always be queried, it cannot be set unless GPUOverclockingState is set to MANUAL.  Since the target clocks may be rejected, the requester should read this attribute after the set to determine success or failure." },
+    { "GPUDefault2DClockFreqs", NV_CTRL_GPU_DEFAULT_2D_CLOCK_FREQS,    N|P, "Returns the default memory and GPU core clocks when operating in 2D mode." },
+    { "GPUDefault3DClockFreqs", NV_CTRL_GPU_DEFAULT_3D_CLOCK_FREQS,    N|P, "Returns the default memory and GPU core clocks when operating in 3D mode." },
+    { "GPUCurrentClockFreqs",   NV_CTRL_GPU_CURRENT_CLOCK_FREQS,       N|P, "Returns the current GPU and memory clocks of the graphics device driving the X screen." },
+    { "BusRate",                NV_CTRL_BUS_RATE,                      0,   "If the GPU is on an AGP bus, then BusRate returns the configured AGP rate.  If the GPU is on a PCI Express bus, then this attribute returns the width of the physical link." },
+    { "PCIBus",                 NV_CTRL_PCI_BUS,                       N,   "Returns the PCI bus number the GPU is using." },
+    { "PCIDevice",              NV_CTRL_PCI_DEVICE,                    N,   "Returns the PCI device number the GPU is using." },
+    { "PCIFunc",                NV_CTRL_PCI_FUNCTION,                  N,   "Returns the PCI function number the GPU is using." },
+    { "PCIID",                  NV_CTRL_PCI_ID,                        N|P, "Returns the PCI vendor and device ID of the GPU." },
+    { "GPUErrors",              NV_CTRL_NUM_GPU_ERRORS_RECOVERED,      N,   "Returns the number of GPU errors occurred." },
+    { "GPUPowerSource",         NV_CTRL_GPU_POWER_SOURCE,              N,   "Reports the type of power source of the GPU." },
+    { "GPUCurrentPerfMode",     NV_CTRL_GPU_CURRENT_PERFORMANCE_MODE,  N,   "Reports the current performance mode of the GPU driving the X screen.  Running a 3D app, for example, will change this performance mode if Adaptive Clocking is enabled." },
+    { "GPUCurrentPerfLevel",    NV_CTRL_GPU_CURRENT_PERFORMANCE_LEVEL, N,   "Reports the current Performance level of the GPU driving the X screen.  Each Performance level has associated NVClock and Mem Clock values." },
+    { "GPUAdaptiveClockState",  NV_CTRL_GPU_ADAPTIVE_CLOCK_STATE,      N,   "Reports if Adaptive Clocking is Enabled on the GPU driving the X screen." },
+    { "GPUPerfModes",           NV_CTRL_STRING_PERFORMANCE_MODES,      S|N, "Returns a string with all the performance modes defined for this GPU along with their associated NV Clock and Memory Clock values." },
+
+    /* Framelock */
+    { "FrameLockAvailable",    NV_CTRL_FRAMELOCK,                   N|F|G,   "Returns whether the underlying GPU supports Frame Lock.  All of the other frame lock attributes are only applicable if this attribute is enabled (Supported)." },
+    { "FrameLockMaster",       NV_CTRL_FRAMELOCK_MASTER,            N|F|G|D, "Get/set which display device to use as the frame lock master for the entire sync group.  Note that only one node in the sync group should be configured as the master." },
+    { "FrameLockPolarity",     NV_CTRL_FRAMELOCK_POLARITY,          N|F|G,   "Sync to the rising edge of the Frame Lock pulse, the falling edge of the Frame Lock pulse, or both." },
+    { "FrameLockSyncDelay",    NV_CTRL_FRAMELOCK_SYNC_DELAY,        N|F|G,   "Returns the delay between the frame lock pulse and the GPU sync.  This is an 11 bit value which is multiplied by 7.81 to determine the sync delay in microseconds." },
+    { "FrameLockSyncInterval", NV_CTRL_FRAMELOCK_SYNC_INTERVAL,     N|F|G,   "This defines the number of house sync pulses for each Frame Lock sync period.  This only applies to the server, and only when recieving house sync.  A value of zero means every house sync pulse is one frame period." },
+    { "FrameLockPort0Status",  NV_CTRL_FRAMELOCK_PORT0_STATUS,      N|F|G,   "Input/Output status of the RJ45 port0." },
+    { "FrameLockPort1Status",  NV_CTRL_FRAMELOCK_PORT1_STATUS,      N|F|G,   "Input/Output status of the RJ45 port1." },
+    { "FrameLockHouseStatus",  NV_CTRL_FRAMELOCK_HOUSE_STATUS,      N|F|G,   "Returns whether or not the house sync signal was detected on the BNC connector of the frame lock board." },
+    { "FrameLockEnable",       NV_CTRL_FRAMELOCK_SYNC,              N|F|G,   "Enable/disable the syncing of display devices to the frame lock pulse as specified by previous calls to FrameLockMaster and FrameLockSlaves." },
+    { "FrameLockSyncReady",    NV_CTRL_FRAMELOCK_SYNC_READY,        N|F|G,   "Reports whether a slave frame lock board is receiving sync, whether or not any display devices are using the signal." },
+    { "FrameLockStereoSync",   NV_CTRL_FRAMELOCK_STEREO_SYNC,       N|F|G,   "This indicates that the GPU stereo signal is in sync with the frame lock stereo signal." },
+    { "FrameLockTestSignal",   NV_CTRL_FRAMELOCK_TEST_SIGNAL,       N|F|G,   "To test the connections in the sync group, tell the master to enable a test signal, then query port[01] status and sync_ready on all slaves.  When done, tell the master to disable the test signal.  Test signal should only be manipulated while FrameLockEnable is enabled.  The FrameLockTestSignal is also used to reset the Universal Frame Count (as returned by the glXQueryFrameCountNV() function in the GLX_NV_swap_group extension).  Note: for best accuracy of the Universal Frame Count, it is recommended to toggle the FrameLockTestSignal on and off after enabling frame lock." },
+    { "FrameLockEthDetected",  NV_CTRL_FRAMELOCK_ETHERNET_DETECTED, N|F|G,   "The frame lock boards are cabled together using regular cat5 cable, connecting to RJ45 ports on the backplane of the card.  There is some concern that users may think these are Ethernet ports and connect them to a router/hub/etc.  The hardware can detect this and will shut off to prevent damage (either to itself or to the router).  FrameLockEthDetected may be called to find out if Ethernet is connected to one of the RJ45 ports.  An appropriate error message should then be displayed." },
+    { "FrameLockVideoMode",    NV_CTRL_FRAMELOCK_VIDEO_MODE,        N|F|G,   "Get/set what video mode is used to interpret the house sync signal.  This should only be set on the master." },
+    { "FrameLockSyncRate",     NV_CTRL_FRAMELOCK_SYNC_RATE,         N|F|G,   "Returns the refresh rate that the frame lock board is sending to the GPU, in mHz (Millihertz) (i.e. to get the refresh rate in Hz, divide the returned value by 1000.)" },
+    { "FrameLockTiming",       NV_CTRL_FRAMELOCK_TIMING,            N|F|G,   "This is 1 when the GPU is both receiving and locked to an input timing signal. Timing information may come from the following places: Another frame lock device that is set to master, the house sync signal, or the GPU's internal timing from a display device." },
+    { "FramelockUseHouseSync", NV_CTRL_USE_HOUSE_SYNC,              N|F|G,   "When 1, the server (master) frame lock device will propagate the incoming house sync signal as the outgoing frame lock sync signal.  If the frame lock device cannot detect a frame lock sync signal, it will default to using the internal timings from the GPU connected to the primary connector." },
+    { "FrameLockSlaves",       NV_CTRL_FRAMELOCK_SLAVES,            N|F|G|D, "Get/set whether the display device(s) given should listen or ignore the master's sync signal." },
+    { "FrameLockMasterable",   NV_CTRL_FRAMELOCK_MASTERABLE,        N|F|G,   "Returns whether the display device(s) can be set as the master of the frame lock group.  Returns 1 if the GPU driving the display device is connected to the \"primary\" connector on the frame lock board." },
+    { "FrameLockSlaveable",    NV_CTRL_FRAMELOCK_SLAVEABLE,         N|F|G|D, "Returns whether the display device(s) can be set as slave(s) of the frame lock group." },
+    { "FrameLockFPGARevision", NV_CTRL_FRAMELOCK_FPGA_REVISION,     N|F|G,   "Returns the FPGA revision of the Frame Lock device." },
+    { "FrameLockSyncRate4",    NV_CTRL_FRAMELOCK_SYNC_RATE_4,       N|F|G,   "Returns the refresh rate that the frame lock board is sending to the GPU in 1/10000 Hz (i.e. to get the refresh rate in Hz, divide the returned value by 10000.)" },
+
+    /* GVO */
+    { "GvoSupported",                    NV_CTRL_GVO_SUPPORTED,                        I|N,   "Returns whether this X screen supports GVO; if this screen does not support GVO output, then all other GVO attributes are unavailable." },
+    { "GvoSyncMode",                     NV_CTRL_GVO_SYNC_MODE,                        I,     "Selects the GVO sync mode; possible values are: FREE_RUNNING - GVO does not sync to any external signal.  GENLOCK - the GVO output is genlocked to an incoming sync signal; genlocking locks at hsync.  This requires that the output video format exactly match the incoming sync video format.  FRAMELOCK - the GVO output is frame locked to an incoming sync signal; frame locking locks at vsync.  This requires that the output video format have the same refresh rate as the incoming sync video format." },
+    { "GvoSyncSource",                   NV_CTRL_GVO_SYNC_SOURCE,                      I,     "If the GVO sync mode is set to either GENLOCK or FRAMELOCK, this controls which sync source is used as the incoming sync signal (either Composite or SDI).  If the GVO sync mode is FREE_RUNNING, this attribute has no effect." },
+    { "GvoOutputVideoFormat",            NV_CTRL_GVO_OUTPUT_VIDEO_FORMAT,              I,     "Specifies the output video format coming out of the GVO device." },
+    { "GvoInputVideoFormat",             NV_CTRL_GVO_INPUT_VIDEO_FORMAT,               I|N,   "Returns the input video format detected by the GVO device." },
+    { "GvoDataFormat",                   NV_CTRL_GVO_DATA_FORMAT,                      I,     "Configures how the data in the source (either the X screen or the GLX pbuffer) is interpreted and displayed by the GVO device." },
+    { "GvoDisplayXScreen",               NV_CTRL_GVO_DISPLAY_X_SCREEN,                 I|N,   "Enable/disable GVO output of the X screen (in Clone mode)." },
+    { "GvoCompositeSyncInputDetected",   NV_CTRL_GVO_COMPOSITE_SYNC_INPUT_DETECTED,    I|N,   "Indicates whether Composite Sync input is detected." },
+    { "GvoCompositeSyncInputDetectMode", NV_CTRL_GVO_COMPOSITE_SYNC_INPUT_DETECT_MODE, I|N,   "Get/set the Composite Sync input detect mode." },
+    { "GvoSdiSyncInputDetected",         NV_CTRL_GVO_SDI_SYNC_INPUT_DETECTED,          I|N,   "Indicates whether SDI Sync input is detected, and what type." },
+    { "GvoVideoOutputs",                 NV_CTRL_GVO_VIDEO_OUTPUTS,                    I|N,   "Indicates which GVO video output connectors are currently transmitting data." },
+    { "GvoSyncDelayPixels",              NV_CTRL_GVO_SYNC_DELAY_PIXELS,                I,     "Controls the skew between the input sync and the output sync in numbers of pixels from hsync; this is a 12-bit value.  If the GVO Capabilities has the Advanced Sync Skew bit set, then setting this value will set a sync advance instead of a delay." },
+    { "GvoSyncDelayLines",               NV_CTRL_GVO_SYNC_DELAY_LINES,                 I,     "Controls the skew between the input sync and the output sync in numbers of lines from vsync; this is a 12-bit value.  If the GVO Capabilities has the Advanced Sync Skew bit set, then setting this value will set a sync advance instead of a delay." },
+    { "GvoInputVideoFormatReacquire",    NV_CTRL_GVO_INPUT_VIDEO_FORMAT_REACQUIRE,     I|N,   "Forces input detection to reacquire the input format." },
+    { "GvoGlxLocked",                    NV_CTRL_GVO_GLX_LOCKED,                       I|N,   "Indicates that GVO configuration is locked by GLX;  this occurs when the GLX_NV_video_out function calls glXGetVideoDeviceNV().  All GVO output resources are locked until either glXReleaseVideoDeviceNV() is called or the X Display used when calling glXGetVideoDeviceNV() is closed." },
+    { "GvoXScreenPanX",                  NV_CTRL_GVO_X_SCREEN_PAN_X,                   I,     "When GVO output of the X screen is enabled, the pan x/y attributes control which portion of the X screen is displayed by GVO.  These attributes can be updated while GVO output is enabled, or before enabling GVO output.  The pan values will be clamped so that GVO output is not panned beyond the end of the X screen." },
+    { "GvoXScreenPanY",                  NV_CTRL_GVO_X_SCREEN_PAN_Y,                   I,     "When GVO output of the X screen is enabled, the pan x/y attributes control which portion of the X screen is displayed by GVO.  These attributes can be updated while GVO output is enabled, or before enabling GVO output.  The pan values will be clamped so that GVO output is not panned beyond the end of the X screen." },
+    { "GvoOverrideHwCsc",                NV_CTRL_GVO_OVERRIDE_HW_CSC,                  I,     "Override the SDI hardware's Color Space Conversion with the values controlled through XNVCTRLSetGvoColorConversion() and XNVCTRLGetGvoColorConversion()." },
+    { "GvoCapabilities",                 NV_CTRL_GVO_CAPABILITIES,                     I|N,   "Returns a description of the GVO capabilities that differ between NVIDIA SDI products.  This value is a bitmask where each bit indicates whether that capability is available." },
+    { "GvoCompositeTermination",         NV_CTRL_GVO_COMPOSITE_TERMINATION,            I,     "Enable or disable 75 ohm termination of the SDI composite input signal." },
+    { "GvoFlipQueueSize",                NV_CTRL_GVO_FLIP_QUEUE_SIZE,                  I,     "Sets/Returns the GVO flip queue size.  This value is used by the GLX_NV_video_out extension to determine the size of the internal flip queue when pbuffers are sent to the video device (via glXSendPbufferToVideoNV()).  This attribute is applied to GLX when glXGetVideoDeviceNV() is called by the application." },
+    { "GvoLockOwner",                    NV_CTRL_GVO_LOCK_OWNER,                       I|N,   "Indicates that the GVO device is available or in use (by GLX, Clone Mode, TwinView etc.)" },
+    { "GvoOutputVideoLocked",            NV_CTRL_GVO_OUTPUT_VIDEO_LOCKED,              I|N,   "Returns whether or not the GVO output video is locked to the GPU output signal." },
+    { "GvoSyncLockStatus",               NV_CTRL_GVO_SYNC_LOCK_STATUS,                 I|N,   "Returns whether or not the GVO device is locked to the input reference signal." },
+    { "GvoANCTimeCodeGeneration",        NV_CTRL_GVO_ANC_TIME_CODE_GENERATION,         I,     "Controls whether the GVO device generates time codes in the ANC region of the SDI video output stream." },
+    { "GvoComposite",                    NV_CTRL_GVO_COMPOSITE,                        I,     "Enables/Disables SDI compositing.  This attribute is only available when an SDI input source is detected and is in genlock mode." },
+    { "GvoCompositeAlphaKey",            NV_CTRL_GVO_COMPOSITE_ALPHA_KEY,              I,     "When SDI compositing is enabled, this enables/disables alpha blending." },
+    { "GvoCompositeNumKeyRanges",        NV_CTRL_GVO_COMPOSITE_NUM_KEY_RANGES,         I|N,   "Returns the number of ranges available for each channel (Y/Luma, Cr, and Cb) that are used SDI compositing through color keying." },
+    { "GvoFirmwareVersion",              NV_CTRL_STRING_GVO_FIRMWARE_VERSION,          I|S|N, "Indicates the version of the firmware on the GVO device." },
+    { "GvoSyncToDisplay",                NV_CTRL_GVO_SYNC_TO_DISPLAY,                  I|N,   "Controls synchronization of the non-SDI display to the SDI display when both are active." },
+    { "GvoFullRangeColor",               NV_CTRL_GVO_FULL_RANGE_COLOR,                 I,     "Allow full range color data [4-1019].  If disabled, color data is clamped to [64-940]." },
+    { "IsGvoDisplay",                    NV_CTRL_IS_GVO_DISPLAY,                       N|D,   "Returns whether or not the given display device is driven by the GVO device." },
+
+    /* Display */
+    { "Brightness",                 BRIGHTNESS_VALUE|ALL_CHANNELS,         N|C|G, "Controls the overall brightness of the display." },
+    { "RedBrightness",              BRIGHTNESS_VALUE|RED_CHANNEL,          C|G,   "Controls the brightness of the color red in the display." },
+    { "GreenBrightness",            BRIGHTNESS_VALUE|GREEN_CHANNEL,        C|G,   "Controls the brightness of the color green in the display." },
+    { "BlueBrightness",             BRIGHTNESS_VALUE|BLUE_CHANNEL,         C|G,   "Controls the brightness of the color blue in the display." },
+    { "Contrast",                   CONTRAST_VALUE|ALL_CHANNELS,           N|C|G, "Controls the overall contrast of the display." },
+    { "RedContrast",                CONTRAST_VALUE|RED_CHANNEL,            C|G,   "Controls the contrast of the color red in the display." },
+    { "GreenContrast",              CONTRAST_VALUE|GREEN_CHANNEL,          C|G,   "Controls the contrast of the color green in the display." },
+    { "BlueContrast",               CONTRAST_VALUE|BLUE_CHANNEL,           C|G,   "Controls the contrast of the color blue in the display." },
+    { "Gamma",                      GAMMA_VALUE|ALL_CHANNELS,              N|C|G, "Controls the overall gamma of the display." },
+    { "RedGamma",                   GAMMA_VALUE|RED_CHANNEL,               C|G,   "Controls the gamma of the color red in the display." },
+    { "GreenGamma",                 GAMMA_VALUE|GREEN_CHANNEL,             C|G,   "Controls the gamma of the color green in the display." },
+    { "BlueGamma",                  GAMMA_VALUE|BLUE_CHANNEL,              C|G,   "Controls the gamma of the color blue in the display." },
+    { "FlatpanelDithering",         NV_CTRL_FLATPANEL_DITHERING,           0,     "This is the current state of flat panel dithering.  (This attribute has been deprecated.)" },
+    { "DigitalVibrance",            NV_CTRL_DIGITAL_VIBRANCE,              0,     "Sets the digital vibrance level of the display device." },
+    { "ImageSharpening",            NV_CTRL_IMAGE_SHARPENING,              0,     "Adjusts the sharpness of the display's image quality by amplifying high frequency content.  Valid values will normally be in the range [0,32).  Only available on GeForceFX or newer." },
+    { "FrontendResolution",         NV_CTRL_FRONTEND_RESOLUTION,           N|P,   "Returns the dimensions of the frontend (current) resolution as determined by the NVIDIA X Driver. This attribute is a packed integer; the width is packed in the upper 16 bits and the height is packed in the lower 16-bits." },
+    { "BackendResolution",          NV_CTRL_BACKEND_RESOLUTION,            N|P,   "Returns the dimensions of the backend resolution as determined by the NVIDIA X Driver.  The backend resolution is the resolution (supported by the display device) the GPU is set to scale to.  If this resolution matches the frontend resolution, GPU scaling will not be needed/used.  This attribute is a packed integer; the width is packed in the upper 16-bits and the height is packed in the lower 16-bits." },
+    { "FlatpanelNativeResolution",  NV_CTRL_FLATPANEL_NATIVE_RESOLUTION,   N|P,   "Returns the dimensions of the native resolution of the flat panel as determined by the NVIDIA X Driver.  The native resolution is the resolution at which a flat panel must display any image.  All other resolutions must be scaled to this resolution through GPU scaling or the DFP's native scaling capabilities in order to be displayed.  This attribute is only valid for flat panel (DFP) display devices.  This attribute is a packed integer; the width is packed in the upper 16-bits and the height is packed in the lower 16-bits." },
+    { "FlatpanelBestFitResolution", NV_CTRL_FLATPANEL_BEST_FIT_RESOLUTION, N|P,   "Returns the dimensions of the resolution, selected by the X driver, from the DFP's EDID that most closely matches the frontend resolution of the current mode.  The best fit resolution is selected on a per-mode basis.  This attribute is only valid for flat panel (DFP) display devices.  This attribute is a packed integer; the width is packed in the upper 16-bits and the height is packed in the lower 16-bits." },
+    { "DFPScalingActive",           NV_CTRL_DFP_SCALING_ACTIVE,            N,     "Returns the current state of DFP scaling.  DFP scaling is mode-specific (meaning it may vary depending on which mode is currently set).  DFP scaling is active if the GPU is set to scale to the best fit resolution (GPUScaling is set to use FlatpanelBestFitResolution) and the best fit and native resolutions are different." },
+    { "GPUScaling",                 NV_CTRL_GPU_SCALING,                   P,     "Controls what the GPU scales to and how.  This attribute is a packed integer; the scaling target (native/best fit) is packed in the upper 16-bits and the scaling method is packed in the lower 16-bits." },
+    { "GPUScalingActive",           NV_CTRL_GPU_SCALING_ACTIVE,            N,     "Returns the current state of GPU scaling.  GPU scaling is mode-specific (meaning it may vary depending on which mode is currently set).  GPU scaling is active if the frontend timing (current resolution) is different than the target resolution.  The target resolution is either the native resolution of the flat panel or the best fit resolution supported by the flat panel.  What (and how) the GPU should scale to is controlled through the GPUScaling attribute." },
+    { "RefreshRate",                NV_CTRL_REFRESH_RATE,                  N|H,   "Returns the refresh rate of the specified display device in cHz (Centihertz) (i.e. to get the refresh rate in Hz, divide the returned value by 100.)" },
+    { "RefreshRate3",               NV_CTRL_REFRESH_RATE_3,                N|K,   "Returns the refresh rate of the specified display device in mHz (Millihertz) (i.e. to get the refresh rate in Hz, divide the returned value by 1000.)" },
+
+    /* TV */
+    { "TVOverScan",      NV_CTRL_TV_OVERSCAN,       0, "Adjusts the amount of overscan on the specified display device." },
+    { "TVFlickerFilter", NV_CTRL_TV_FLICKER_FILTER, 0, "Adjusts the amount of flicker filter on the specified display device." },
+    { "TVBrightness",    NV_CTRL_TV_BRIGHTNESS,     0, "Adjusts the amount of brightness on the specified display device." },
+    { "TVHue",           NV_CTRL_TV_HUE,            0, "Adjusts the amount of hue on the specified display device." },
+    { "TVContrast",      NV_CTRL_TV_CONTRAST,       0, "Adjusts the amount of contrast on the specified display device." },
+    { "TVSaturation",    NV_CTRL_TV_SATURATION,     0, "Adjusts the amount of saturation on the specified display device." },
+
+    /* X Video */
+    { "XVideoOverlaySaturation",   NV_CTRL_ATTR_XV_OVERLAY_SATURATION,     V,   "Controls the amount of saturation in the X video overlay." },
+    { "XVideoOverlayContrast",     NV_CTRL_ATTR_XV_OVERLAY_CONTRAST,       V,   "Controls the amount of contrast in the X video overlay." },
+    { "XVideoOverlayBrightness",   NV_CTRL_ATTR_XV_OVERLAY_BRIGHTNESS,     V,   "Controls the amount of brightness in the X video overlay." },
+    { "XVideoOverlayHue",          NV_CTRL_ATTR_XV_OVERLAY_HUE,            V,   "Controls the amount of hue in the X video overlay." },
+    { "XVideoTextureBrightness",   NV_CTRL_ATTR_XV_TEXTURE_BRIGHTNESS,     V,   "Controls the amount of brightness in the X video texture adaptor." },
+    { "XVideoTextureContrast",     NV_CTRL_ATTR_XV_TEXTURE_CONTRAST,       V,   "Controls the amount of contrast in the X video texture adaptor." },
+    { "XVideoTextureHue",          NV_CTRL_ATTR_XV_TEXTURE_HUE,            V,   "Controls the amount of hue in the X video texture adaptor." },
+    { "XVideoTextureSaturation",   NV_CTRL_ATTR_XV_TEXTURE_SATURATION,     V,   "Controls the amount of saturation in the X video texture adaptor." },
+
+    { "XVideoTextureSyncToVBlank", NV_CTRL_ATTR_XV_TEXTURE_SYNC_TO_VBLANK, V,   "Enables sync to vertical blanking for X video texture adaptor." },
+    { "XVideoBlitterSyncToVBlank", NV_CTRL_ATTR_XV_BLITTER_SYNC_TO_VBLANK, V,   "Enables sync to vertical blanking for X video blitter adaptor." },
+    { "XVideoSyncToDisplay",       NV_CTRL_XV_SYNC_TO_DISPLAY,             D|Z, "Controls which display device is synced to by the texture and blitter adaptors when they are set to synchronize to the vertical blanking." },
+    
+    { NULL, 0, 0, NULL }
 };
 
 #undef F
@@ -260,7 +285,7 @@
  * about.
  */
 
-#if NV_CTRL_LAST_ATTRIBUTE != NV_CTRL_DEPTH_30_ALLOWED
+#if NV_CTRL_LAST_ATTRIBUTE != NV_CTRL_GVO_FULL_RANGE_COLOR
 #warning "Have you forgotten to add a new integer attribute to attributeTable?"
 #endif
 
@@ -318,7 +343,6 @@
     int len, ret;
 
 #define stop(x) { if (no_spaces) free(no_spaces); return (x); }
-    
     if (!a) stop(NV_PARSER_STATUS_BAD_ARGUMENT);
 
     /* clear the ParsedAttribute struct */
@@ -415,11 +439,14 @@
             /*
              * Either a single 32-bit integer or two 16-bit
              * integers, separated by ','.
+             * Passing base as 0 allows packed values to be specified 
+             * in hex (Bug 377242)
              */
-            a->val = strtol(s, &tmp, 10);
+            a->val = strtol(s, &tmp, 0);
+            
             if (tmp && *tmp == ',') {
                 a->val = (a->val & 0xffff) << 16;
-                a->val |= strtol((tmp + 1), &tmp, 10) & 0xffff;
+                a->val |= strtol((tmp + 1), &tmp, 0) & 0xffff;
             }
         } else if (a->flags & NV_PARSER_TYPE_VALUE_IS_DISPLAY) {
             if (nv_strcasecmp(s, "alldisplays")) {
@@ -1330,6 +1357,26 @@
 
 
 /*
+ * count_number_of_bits() - return the number of bits set
+ * in the int.
+ */
+
+int count_number_of_bits(unsigned int mask)
+{
+    int count = 0;
+
+    while (mask) {
+        count++;
+        mask &= (mask-1);
+    }
+
+    return count;
+
+} /* count_number_of_bits() */
+
+
+
+/*
  * nv_strndup() - this function takes a pointer to a string and a
  * length n, mallocs a new string of n+1, copies the first n chars
  * from the original string into the new, and null terminates the new

Modified: packages/nvidia-settings/trunk/src/parse.h
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/parse.h?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/parse.h (original)
+++ packages/nvidia-settings/trunk/src/parse.h Sun Jan 11 05:41:46 2009
@@ -46,7 +46,7 @@
 #define NV_PARSER_TYPE_FRAMELOCK               (1<<16)
 #define NV_PARSER_TYPE_COLOR_ATTRIBUTE         (1<<17)
 #define NV_PARSER_TYPE_NO_CONFIG_WRITE         (1<<18)
-#define NV_PARSER_TYPE_GUI_ATTRIUBUTE          (1<<19)
+#define NV_PARSER_TYPE_GUI_ATTRIBUTE           (1<<19)
 #define NV_PARSER_TYPE_XVIDEO_ATTRIBUTE        (1<<20)
 #define NV_PARSER_TYPE_PACKED_ATTRIBUTE        (1<<21)
 #define NV_PARSER_TYPE_VALUE_IS_DISPLAY        (1<<22)
@@ -106,6 +106,7 @@
     char *name;
     int attr;
     uint32 flags;
+    char *desc;
 } AttributeTableEntry;
 
 
@@ -303,7 +304,7 @@
 const char *parse_read_name(const char *str, char **name, char term);
 const char *parse_read_display_name(const char *str, unsigned int *mask);
 int parse_read_float_range(char *str, float *min, float *max);
-
+int count_number_of_bits(unsigned int mask);
 
 /* Token parsing functions */
 

Modified: packages/nvidia-settings/trunk/src/query-assign.c
URL: http://svn.debian.org/wsvn/pkg-nvidia/packages/nvidia-settings/trunk/src/query-assign.c?rev=509&op=diff
==============================================================================
--- packages/nvidia-settings/trunk/src/query-assign.c (original)
+++ packages/nvidia-settings/trunk/src/query-assign.c Sun Jan 11 05:41:46 2009
@@ -50,7 +50,12 @@
 static int query_all(const char *);
 static int query_all_targets(const char *display_name, const int target_index);
 
-static void print_valid_values(char *, uint32, NVCTRLAttributeValidValuesRec);
+static void print_valid_values(char *, int, uint32, NVCTRLAttributeValidValuesRec);
+
+static void print_additional_info(const char *name,
+                                  int attr,
+                                  NVCTRLAttributeValidValuesRec valid,
+                                  const char *indent);
 
 static int validate_value(CtrlHandleTarget *t, ParsedAttribute *a, uint32 d,
                           int target_type, char *whence);
@@ -597,7 +602,7 @@
                            a->val, a->name, t->name,
                            d_str, whence);
         }
-        print_valid_values(a->name, a->flags, valid);
+        print_valid_values(a->name, a->attr, a->flags, valid);
         return NV_FALSE;
     }
     return NV_TRUE;
@@ -611,7 +616,7 @@
  * attribute.
  */
 
-static void print_valid_values(char *name, uint32 flags,
+static void print_valid_values(char *name, int attr, uint32 flags,
                                NVCTRLAttributeValidValuesRec valid)
 {
     int bit, print_bit, last, last2, i, n;
@@ -735,6 +740,9 @@
     nv_msg(INDENT, "'%s' can use the following target types: %s.",
            name, str);
    
+    if (__verbosity >= VERBOSITY_ALL)
+        print_additional_info(name, attr, valid, INDENT);
+
 #undef INDENT
 
 } /* print_valid_values() */
@@ -821,6 +829,61 @@
 
 
 /*
+ * print_additional_fsaa_info() - print the currently available fsaa
+ * modes with their corresponding names
+ */
+
+static void print_additional_fsaa_info(const char *name,
+                                       unsigned int valid_fsaa_modes,
+                                       const char *indent)
+{
+    int bit;
+
+#define MORE_INDENT "      "
+
+    nv_msg(indent, "\nNames for valid '%s' values:\n", name);
+
+    for (bit = 0; bit < 32; bit++) {
+        /* FSAA is not a packed attribute */
+        if (valid_fsaa_modes & (1 << bit)) {
+            nv_msg(MORE_INDENT, "%2u - %s\n", 
+                   bit, NvCtrlGetMultisampleModeName(bit));
+        }
+    }
+
+#undef MORE_INDENT
+
+}
+
+
+
+/*
+ * print_additional_info() - after printing the main information about
+ * a queried attribute, we may want to add some more when in verbose mode.
+ * This function is designed to handle this. Add a new 'case' here when
+ * you want to print this additional information for a specific attr.
+ */
+
+static void print_additional_info(const char *name,
+                                  int attr,
+                                  NVCTRLAttributeValidValuesRec valid,
+                                  const char *indent)
+{
+    switch (attr) {
+
+    case NV_CTRL_FSAA_MODE:
+        print_additional_fsaa_info(name, valid.u.bits.ints, indent);
+        break;
+
+    // add more here
+
+    }
+
+}
+
+
+
+/*
  * query_all() - loop through all screens, and query all attributes
  * for those screens.  The current attribute values for all display
  * devices on all screens are printed, along with the valid values for
@@ -875,7 +938,13 @@
             for (bit = 0; bit < 24; bit++) {
                 mask = 1 << bit;
 
-                if ((t->d & mask) == 0x0) continue;
+                /*
+                 * if this bit is not present in the screens's enabled
+                 * display device mask (and the X screen has enabled
+                 * display devices), skip to the next bit
+                 */
+
+                if (((t->d & mask) == 0x0) && (t->d)) continue;
                 
                 if (a->flags & NV_PARSER_TYPE_STRING_ATTRIBUTE) {
                     char *tmp_str = NULL;
@@ -942,7 +1011,7 @@
                                         VerboseLevelAbbreviated :
                                         VerboseLevelVerbose);
 
-                    print_valid_values(a->name, a->flags, valid);
+                    print_valid_values(a->name, a->attr, a->flags, valid);
                 }
                 
                 if (!__terse) nv_msg(NULL,"");
@@ -1414,7 +1483,7 @@
                 print_queried_value(t, &valid, a->val, a->flags, a->name, d,
                                     "  ", __terse ?
                                     VerboseLevelTerse : VerboseLevelVerbose);
-                print_valid_values(a->name, a->flags, valid);
+                print_valid_values(a->name, a->attr, a->flags, valid);
             }
         }
     } /* query */




More information about the Pkg-nvidia-devel mailing list